summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2017-02-23 06:28:41 -0300
committerRenato Botelho <renato@netgate.com>2017-02-23 06:28:41 -0300
commit82ceeb2ea625cd9bff60f2863b9a0830f55b7905 (patch)
tree263ca9347bf664a4489743f9302e699ce14de1df
parent4a05f5440acda223e6a0ec5157bc32ecc0f09ff9 (diff)
parentd20dd8b36e7a565be7bfbb22aade51c8ffd753e9 (diff)
downloadFreeBSD-src-devel.zip
FreeBSD-src-devel.tar.gz
Merge remote-tracking branch 'origin/stable/10' into develdevel
-rw-r--r--Makefile11
-rw-r--r--Makefile.inc121
-rw-r--r--ObsoleteFiles.inc10
-rw-r--r--bin/cat/tests/Makefile16
-rw-r--r--bin/date/tests/Makefile2
-rw-r--r--bin/expr/tests/Makefile6
-rw-r--r--bin/ls/tests/Makefile2
-rw-r--r--bin/mv/tests/Makefile2
-rw-r--r--bin/pax/tests/Makefile2
-rw-r--r--bin/pkill/tests/Makefile2
-rw-r--r--bin/sh/tests/Makefile4
-rw-r--r--bin/sleep/tests/Makefile7
-rw-r--r--bin/test/tests/Makefile2
-rw-r--r--bin/tests/Makefile4
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.c13
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.d2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.c2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/nfs/tst.call3.c1
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.args1.c1
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.gcc.c2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret1.c1
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret2.c1
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak1.c1
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak2.c5
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d.out2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d.out2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d.out2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.kpriv.ksh112
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.ufunc.ksh2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.umod.ksh2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.usym.ksh2
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/scalars/err.bigglobal.d26
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/scalars/err.biglocal.d26
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/syscall/tst.args.c1
-rw-r--r--cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.forker.c4
-rw-r--r--cddl/lib/tests/Makefile4
-rw-r--r--cddl/sbin/tests/Makefile4
-rw-r--r--cddl/tests/Makefile4
-rw-r--r--cddl/usr.bin/tests/Makefile4
-rw-r--r--cddl/usr.sbin/dtrace/tests/Makefile14
-rw-r--r--cddl/usr.sbin/dtrace/tests/Makefile.inc152
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/Makefile89
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/aggs/Makefile189
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/arithmetic/Makefile32
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/arrays/Makefile29
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/assocs/Makefile32
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/begin/Makefile22
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/bitfields/Makefile26
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/buffering/Makefile37
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/builtinvar/Makefile48
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/cg/Makefile18
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/clauses/Makefile26
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/cpc/Makefile27
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/decls/Makefile30
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/docsExamples/Makefile32
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/drops/Makefile24
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/dtraceUtil/Makefile118
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/end/Makefile21
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/enum/Makefile21
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/error/Makefile21
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/exit/Makefile19
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile26
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/funcs/Makefile113
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/grammar/Makefile20
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/include/Makefile17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/inline/Makefile28
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/io/Makefile18
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/ip/Makefile36
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/java_api/Makefile44
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/json/Makefile23
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/lexer/Makefile30
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/llquantize/Makefile50
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/mdb/Makefile17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/mib/Makefile19
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/misc/Makefile30
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/multiaggs/Makefile34
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/nfs/Makefile19
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/offsetof/Makefile28
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/operators/Makefile18
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/pid/Makefile69
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/plockstat/Makefile19
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/pointers/Makefile48
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/pragma/Makefile30
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/predicates/Makefile25
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/preprocessor/Makefile53
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/print/Makefile32
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/printa/Makefile40
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/printf/Makefile68
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/privs/Makefile24
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/probes/Makefile36
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/proc/Makefile30
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/profile-n/Makefile53
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/providers/Makefile44
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/raise/Makefile21
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/rates/Makefile21
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/safety/Makefile54
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/scalars/Makefile37
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/sched/Makefile19
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/scripting/Makefile49
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/sdt/Makefile17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/sizeof/Makefile31
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/speculation/Makefile75
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/stability/Makefile17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/stack/Makefile22
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/stackdepth/Makefile17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/stop/Makefile19
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/strlen/Makefile17
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/strtoll/Makefile20
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/struct/Makefile31
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/syscall/Makefile18
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/sysevent/Makefile19
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/tick-n/Makefile38
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/trace/Makefile24
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/tracemem/Makefile26
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/translators/Makefile51
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/typedef/Makefile21
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/types/Makefile69
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/uctf/Makefile41
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/union/Makefile27
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/usdt/Makefile65
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/ustack/Makefile20
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/vars/Makefile23
-rw-r--r--cddl/usr.sbin/dtrace/tests/common/version/Makefile17
-rwxr-xr-xcddl/usr.sbin/dtrace/tests/tools/dtest.sh129
-rwxr-xr-xcddl/usr.sbin/dtrace/tests/tools/exclude.sh194
-rwxr-xr-xcddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh85
-rwxr-xr-xcddl/usr.sbin/dtrace/tests/tools/gentest.sh110
-rw-r--r--cddl/usr.sbin/tests/Makefile4
-rw-r--r--contrib/libarchive/NEWS7
-rw-r--r--contrib/libarchive/cpio/cpio.c1
-rw-r--r--contrib/libarchive/libarchive/archive_acl.c1619
-rw-r--r--contrib/libarchive/libarchive/archive_acl_private.h22
-rw-r--r--contrib/libarchive/libarchive/archive_entry.c114
-rw-r--r--contrib/libarchive/libarchive/archive_entry.h68
-rw-r--r--contrib/libarchive/libarchive/archive_entry_acl.3324
-rw-r--r--contrib/libarchive/libarchive/archive_entry_locale.h10
-rw-r--r--contrib/libarchive/libarchive/archive_entry_strmode.c2
-rw-r--r--contrib/libarchive/libarchive/archive_match.c12
-rw-r--r--contrib/libarchive/libarchive/archive_platform.h19
-rw-r--r--contrib/libarchive/libarchive/archive_random.c2
-rw-r--r--contrib/libarchive/libarchive/archive_rb.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk.36
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c738
-rw-r--r--contrib/libarchive/libarchive/archive_read_disk_posix.c6
-rw-r--r--contrib/libarchive/libarchive/archive_read_open_filename.c20
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_lz4.c11
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_lzop.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_filter_program.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_7zip.c10
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_cab.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_cpio.c11
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_iso9660.c40
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_lha.c5
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_mtree.c15
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_rar.c2
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_tar.c162
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_warc.c230
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_xar.c18
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_zip.c80
-rw-r--r--contrib/libarchive/libarchive/archive_string.c26
-rw-r--r--contrib/libarchive/libarchive/archive_string.h4
-rw-r--r--contrib/libarchive/libarchive/archive_string_composition.h2
-rw-r--r--contrib/libarchive/libarchive/archive_write.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_program.c1
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_xz.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_disk_acl.c456
-rw-r--r--contrib/libarchive/libarchive/archive_write_disk_posix.c62
-rw-r--r--contrib/libarchive/libarchive/archive_write_open.311
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_7zip.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_gnutar.c8
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_iso9660.c34
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_pax.c178
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_warc.c2
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_xar.c15
-rw-r--r--contrib/libarchive/libarchive/archive_write_set_format_zip.c10
-rw-r--r--contrib/libarchive/libarchive/libarchive-formats.54
-rw-r--r--contrib/libarchive/libarchive/tar.511
-rw-r--r--contrib/libarchive/libarchive/test/main.c134
-rw-r--r--contrib/libarchive/libarchive/test/test.h43
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_nfs4.c126
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_pax.c364
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_pax_nfs4.tar.uu129
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_pax_posix1e.tar.uu (renamed from contrib/libarchive/libarchive/test/test_acl_pax.tar.uu)2
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_platform_nfs4.c (renamed from contrib/libarchive/libarchive/test/test_acl_freebsd_nfs4.c)474
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_platform_posix1e.c (renamed from contrib/libarchive/libarchive/test/test_acl_freebsd_posix1e.c)431
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_posix1e.c144
-rw-r--r--contrib/libarchive/libarchive/test/test_acl_text.c473
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_archive_string.c24
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_gtar.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c297
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.tar.uu220
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_star_acl.c321
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_star_acl_nfs4.tar.uu231
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_star_acl_posix1e.c215
-rw-r--r--contrib/libarchive/libarchive/test/test_compat_uudecode.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_fuzz.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c12
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_lzop.c9
-rw-r--r--contrib/libarchive/libarchive/test/test_read_filter_lzop_multiple_parts.c8
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_7zip.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip.c5
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_filename.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_nested.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_padded.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c4
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_read_pax_schily_xattr.c70
-rw-r--r--contrib/libarchive/libarchive/test/test_read_pax_schily_xattr.tar.uu231
-rw-r--r--contrib/libarchive/libarchive/test/test_sparse_basic.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_disk_secure746.c3
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lz4.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_filter_lzop.c6
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_iso9660.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_iso9660_zisofs.c2
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_large.c1
-rw-r--r--contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c2
-rw-r--r--contrib/libarchive/libarchive/xxhash.c5
-rw-r--r--contrib/libarchive/tar/test/test_option_uid_uname.c8
-rw-r--r--contrib/libarchive/tar/util.c1
-rw-r--r--contrib/libc++/include/memory14
-rw-r--r--contrib/netbsd-tests/bin/cat/d_align.in2
-rw-r--r--contrib/netbsd-tests/bin/cat/d_align.out2
-rw-r--r--contrib/netbsd-tests/bin/cat/d_se_output.in3
-rw-r--r--contrib/netbsd-tests/bin/cat/d_se_output.out3
-rwxr-xr-xcontrib/netbsd-tests/bin/cat/t_cat.sh14
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/dotcmd/scoped_command25
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh6
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_arith.sh1035
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_cmdsub.sh783
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_evaltested.sh6
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_exit.sh120
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_expand.sh296
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_fsplit.sh244
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_here.sh536
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_option.sh674
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_redir.sh903
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_redircloexec.sh178
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_set_e.sh42
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_shift.sh181
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_ulimit.sh23
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_varquote.sh95
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_varval.sh251
-rwxr-xr-xcontrib/netbsd-tests/bin/sh/t_wait.sh152
-rwxr-xr-xcontrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh4
-rwxr-xr-xcontrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh8
-rwxr-xr-xcontrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh10
-rw-r--r--contrib/netbsd-tests/dev/audio/h_pad.c10
-rw-r--r--contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue2032
-rw-r--r--contrib/netbsd-tests/dev/cgd/t_cgd_3des.c913
-rw-r--r--contrib/netbsd-tests/dev/cgd/t_cgd_aes.c3606
-rw-r--r--contrib/netbsd-tests/dev/cgd/t_cgd_blowfish.c2341
-rw-r--r--contrib/netbsd-tests/dev/dm/h_dm.c4
-rwxr-xr-xcontrib/netbsd-tests/dev/fss/t_fss.sh84
-rwxr-xr-xcontrib/netbsd-tests/dev/sysmon/t_swsensor.sh12
-rw-r--r--contrib/netbsd-tests/dev/sysmon/t_swwdog.c3
-rw-r--r--contrib/netbsd-tests/dev/usb/t_hid.c267
-rw-r--r--contrib/netbsd-tests/fs/common/fstest_lfs.c4
-rw-r--r--contrib/netbsd-tests/fs/common/h_fsmacros.h12
-rwxr-xr-xcontrib/netbsd-tests/fs/ffs/ffs_common.sh4
-rw-r--r--contrib/netbsd-tests/fs/fifofs/t_fifo.c3
-rw-r--r--contrib/netbsd-tests/fs/h_funcs.subr12
-rw-r--r--contrib/netbsd-tests/fs/nfs/nfsservice/mountd.c2575
-rw-r--r--contrib/netbsd-tests/fs/nfs/nfsservice/nfsd.c571
-rw-r--r--contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c5
-rwxr-xr-xcontrib/netbsd-tests/fs/nfs/t_rquotad.sh4
-rwxr-xr-xcontrib/netbsd-tests/fs/psshfs/t_psshfs.sh23
-rw-r--r--contrib/netbsd-tests/fs/puffs/t_basic.c6
-rw-r--r--contrib/netbsd-tests/fs/tmpfs/h_funcs.subr19
-rw-r--r--contrib/netbsd-tests/fs/tmpfs/h_tools.c24
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_link.sh15
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_mknod.sh16
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_mount.sh16
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_readdir.sh8
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_remove.sh15
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_sizes.sh8
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_statvfs.sh8
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_vnd.sh33
-rwxr-xr-xcontrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh8
-rw-r--r--contrib/netbsd-tests/fs/vfs/t_io.c20
-rw-r--r--contrib/netbsd-tests/fs/vfs/t_renamerace.c4
-rw-r--r--contrib/netbsd-tests/fs/vfs/t_unpriv.c4
-rw-r--r--contrib/netbsd-tests/fs/vfs/t_vnops.c191
-rwxr-xr-xcontrib/netbsd-tests/games/t_factor.sh43
-rw-r--r--contrib/netbsd-tests/h_macros.h8
-rw-r--r--contrib/netbsd-tests/include/sys/t_bitops.c204
-rw-r--r--contrib/netbsd-tests/include/sys/t_cdefs.c116
-rw-r--r--contrib/netbsd-tests/include/sys/t_pslist.c125
-rw-r--r--contrib/netbsd-tests/include/sys/t_socket.c4
-rw-r--r--contrib/netbsd-tests/include/t_paths.c23
-rw-r--r--contrib/netbsd-tests/ipf/expected/n146
-rw-r--r--contrib/netbsd-tests/ipf/expected/n14_66
-rwxr-xr-xcontrib/netbsd-tests/ipf/t_filter_parse.sh3
-rwxr-xr-xcontrib/netbsd-tests/ipf/t_nat_exec.sh6
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c4
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/read/t_file.c4
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c4
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c4
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_ioctl.c7
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_proc1.c13
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_proc2.c10
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_proc3.c9
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_sig.c17
-rw-r--r--contrib/netbsd-tests/kernel/kqueue/t_vnode.c536
-rw-r--r--contrib/netbsd-tests/kernel/msg.h136
-rw-r--r--contrib/netbsd-tests/kernel/t_mqueue.c3
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace.c208
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait.c5082
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait.h431
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait3.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait4.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_wait6.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_waitid.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_ptrace_waitpid.c30
-rw-r--r--contrib/netbsd-tests/kernel/t_rnd.c25
-rw-r--r--contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c818
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S11
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S5
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S4
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c7
-rw-r--r--contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S11
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_faccessat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_fchownat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_fexecve.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_fstatat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_mknodat.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_o_search.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_openat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/c063/t_utimensat.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/db/h_db.c77
-rw-r--r--contrib/netbsd-tests/lib/libc/db/h_lfsr.c179
-rwxr-xr-xcontrib/netbsd-tests/lib/libc/db/t_db.sh442
-rw-r--r--contrib/netbsd-tests/lib/libc/db/t_db_hash_seq.c343
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c5
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/isqemu.h28
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c4
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c12
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_assert.c17
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_dir.c56
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c5
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c30
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c25
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_ftok.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c3
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_nice.c7
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_randomid.c22
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_siginfo.c25
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_sleep.c24
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_time.c17
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_ttyname.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/gen/t_vis.c37
-rw-r--r--contrib/netbsd-tests/lib/libc/inet/t_inet_addr.c109
-rw-r--r--contrib/netbsd-tests/lib/libc/inet/t_inet_network.c68
-rwxr-xr-xcontrib/netbsd-tests/lib/libc/net/t_servent.sh4
-rw-r--r--contrib/netbsd-tests/lib/libc/rpc/t_rpc.c296
-rw-r--r--contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c2
-rw-r--r--contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c2
-rwxr-xr-xcontrib/netbsd-tests/lib/libc/ssp/t_ssp.sh3
-rw-r--r--contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c96
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c75
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c14
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_strtoi.c304
-rw-r--r--contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c13
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_memcpy.c6
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_memmem.c7
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_memset.c52
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_strchr.c12
-rw-r--r--contrib/netbsd-tests/lib/libc/string/t_strerror.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/sync/cpp_atomic_ops_linkable.cc107
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_access.c19
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_bind.c78
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_chroot.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c63
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_connect.c31
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_getcontext.c12
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_getrusage.c10
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_getsockname.c82
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_kevent.c14
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_mincore.c9
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_mlock.c116
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_mmap.c89
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_mprotect.c17
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_posix_fallocate.c63
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c50
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c155
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_timer_create.c119
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_wait.c323
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_wait_noproc.c345
-rw-r--r--contrib/netbsd-tests/lib/libc/sys/t_wait_noproc_wnohang.c30
-rw-r--r--contrib/netbsd-tests/lib/libc/t_cdb.c7
-rw-r--r--contrib/netbsd-tests/lib/libc/time/t_strptime.c257
-rw-r--r--contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y5
-rw-r--r--contrib/netbsd-tests/lib/libm/t_casinh.c81
-rw-r--r--contrib/netbsd-tests/lib/libm/t_exp.c41
-rw-r--r--contrib/netbsd-tests/lib/libm/t_fe_round.c124
-rw-r--r--contrib/netbsd-tests/lib/libm/t_fenv.c220
-rw-r--r--contrib/netbsd-tests/lib/libm/t_fmod.c9
-rw-r--r--contrib/netbsd-tests/lib/libm/t_hypot.c81
-rw-r--r--contrib/netbsd-tests/lib/libm/t_ilogb.c130
-rw-r--r--contrib/netbsd-tests/lib/libm/t_ldexp.c12
-rw-r--r--contrib/netbsd-tests/lib/libm/t_log.c16
-rw-r--r--contrib/netbsd-tests/lib/libm/t_pow.c7
-rw-r--r--contrib/netbsd-tests/lib/libm/t_precision.c8
-rw-r--r--contrib/netbsd-tests/lib/libpthread/h_common.h6
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_cond.c25
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_mutex.c460
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_rwlock.c20
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_swapcontext.c9
-rw-r--r--contrib/netbsd-tests/lib/libpthread/t_timedmutex.c30
-rw-r--r--contrib/netbsd-tests/lib/librumpclient/h_execthr.c68
-rwxr-xr-xcontrib/netbsd-tests/lib/librumpclient/t_exec.sh4
-rw-r--r--contrib/netbsd-tests/lib/librumpclient/t_fd.c4
-rwxr-xr-xcontrib/netbsd-tests/lib/librumphijack/t_tcpip.sh19
-rw-r--r--contrib/netbsd-tests/lib/libusbhid/hid_test_data.c137
-rw-r--r--contrib/netbsd-tests/lib/libusbhid/t_usbhid.c452
-rw-r--r--contrib/netbsd-tests/lib/libusbhid/test_usb_hid_usages17
-rw-r--r--contrib/netbsd-tests/lib/libutil/t_parsedate.c473
-rwxr-xr-xcontrib/netbsd-tests/net/arp/t_arp.sh612
-rwxr-xr-xcontrib/netbsd-tests/net/arp/t_dad.sh201
-rw-r--r--contrib/netbsd-tests/net/bpfilter/t_bpfilter.c86
-rw-r--r--contrib/netbsd-tests/net/bpfjit/t_bpfjit.c756
-rw-r--r--contrib/netbsd-tests/net/icmp/t_forward.c6
-rwxr-xr-xcontrib/netbsd-tests/net/icmp/t_icmp6_redirect.sh152
-rwxr-xr-xcontrib/netbsd-tests/net/icmp/t_icmp_redirect.sh285
-rw-r--r--contrib/netbsd-tests/net/icmp/t_ping.c8
-rwxr-xr-xcontrib/netbsd-tests/net/icmp/t_ping2.sh4
-rw-r--r--contrib/netbsd-tests/net/if/ifconf.c134
-rw-r--r--contrib/netbsd-tests/net/if/t_compat.c4
-rwxr-xr-xcontrib/netbsd-tests/net/if/t_ifconf.sh100
-rwxr-xr-xcontrib/netbsd-tests/net/if/t_ifconfig.sh333
-rwxr-xr-xcontrib/netbsd-tests/net/if_bridge/t_bridge.sh409
-rwxr-xr-xcontrib/netbsd-tests/net/if_gif/t_gif.sh763
-rwxr-xr-xcontrib/netbsd-tests/net/if_pppoe/t_pppoe.sh416
-rwxr-xr-xcontrib/netbsd-tests/net/if_tap/t_tap.sh198
-rw-r--r--contrib/netbsd-tests/net/in_cksum/assym.h10
-rw-r--r--contrib/netbsd-tests/net/in_cksum/in_cksum.c270
-rwxr-xr-xcontrib/netbsd-tests/net/in_cksum/t_in_cksum.sh78
-rw-r--r--contrib/netbsd-tests/net/mcast/mcast.c559
-rwxr-xr-xcontrib/netbsd-tests/net/mcast/t_mcast.sh106
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_ldp_regen.sh11
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_mpls_fw.sh6
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_mpls_fw6.sh220
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_mpls_fw64.sh226
-rwxr-xr-xcontrib/netbsd-tests/net/mpls/t_rfc4182.sh6
-rwxr-xr-xcontrib/netbsd-tests/net/ndp/t_dad.sh276
-rwxr-xr-xcontrib/netbsd-tests/net/ndp/t_ndp.sh406
-rwxr-xr-xcontrib/netbsd-tests/net/ndp/t_ra.sh687
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_forwarding.sh530
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_ipaddress.sh193
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_ipv6_lifetime.sh127
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_ipv6address.sh387
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_mtudisc.sh192
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_mtudisc6.sh179
-rwxr-xr-xcontrib/netbsd-tests/net/net/t_ping6_opts.sh380
-rw-r--r--contrib/netbsd-tests/net/net/t_tcp.c15
-rwxr-xr-xcontrib/netbsd-tests/net/net_common.sh314
-rwxr-xr-xcontrib/netbsd-tests/net/route/t_change.sh255
-rwxr-xr-xcontrib/netbsd-tests/net/route/t_flags.sh334
-rwxr-xr-xcontrib/netbsd-tests/net/route/t_flags6.sh268
-rwxr-xr-xcontrib/netbsd-tests/net/route/t_route.sh406
-rw-r--r--contrib/netbsd-tests/rump/modautoload/t_modautoload.c15
-rw-r--r--contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c3
-rw-r--r--contrib/netbsd-tests/rump/rumpkern/t_lwproc.c4
-rwxr-xr-xcontrib/netbsd-tests/rump/rumpkern/t_sp.sh7
-rwxr-xr-xcontrib/netbsd-tests/rump/rumpnet/t_shmif.sh4
-rw-r--r--contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c3
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.2part.show.label8
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.2part.show.normal8
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.2part.show.uuid8
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.backup1851
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.disklabel27
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.disklabel.show.normal12
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.empty.show.normal7
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.removepart.show.normal8
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.resizedisk.show.normal9
-rw-r--r--contrib/netbsd-tests/sbin/gpt/gpt.resizepart.show.normal8
-rwxr-xr-xcontrib/netbsd-tests/sbin/gpt/t_gpt.sh318
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/common.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_check.sh (renamed from contrib/netbsd-tests/bin/sh/t_compexit.sh)57
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_grow.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh4
-rwxr-xr-xcontrib/netbsd-tests/sbin/sysctl/t_perm.sh5
-rwxr-xr-xcontrib/netbsd-tests/share/mk/t_lib.sh8
-rwxr-xr-xcontrib/netbsd-tests/share/mk/t_prog.sh8
-rwxr-xr-xcontrib/netbsd-tests/share/mk/t_test.sh4
-rw-r--r--contrib/netbsd-tests/sys/net/t_print.c178
-rw-r--r--contrib/netbsd-tests/sys/netatalk/t_print.c135
-rw-r--r--contrib/netbsd-tests/sys/netinet/t_print.c144
-rw-r--r--contrib/netbsd-tests/sys/netinet6/t_print.c154
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/cc/t_hello.sh4
-rw-r--r--contrib/netbsd-tests/usr.bin/config/d_min6
-rw-r--r--contrib/netbsd-tests/usr.bin/config/support/conf/files15
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/config/t_config.sh203
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/gdb/t_regress.sh77
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/ld/t_script.sh230
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/ld/t_section.sh100
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/make/t_make.sh13
-rw-r--r--contrib/netbsd-tests/usr.bin/netpgpverify/Testspec114
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh15140
-rwxr-xr-xcontrib/netbsd-tests/usr.bin/sed/t_sed.sh19
-rw-r--r--contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txtbin4 -> 1530 bytes
-rw-r--r--contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txtbin4 -> 1530 bytes
-rw-r--r--contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txtbin4 -> 1530 bytes
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_struct.c26
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_union.c16
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_compound_literal_comma.c14
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_flex_array_packed.c6
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_nested_struct.c25
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_cast.c18
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_init4.c15
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_cast_fun_array_param.c9
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_type_question_colon.c14
-rw-r--r--contrib/netbsd-tests/usr.bin/xlint/lint1/d_typefun.c22
-rwxr-xr-xcontrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh4
-rw-r--r--contrib/zlib/ChangeLog55
-rw-r--r--contrib/zlib/README6
-rw-r--r--contrib/zlib/adler32.c21
-rw-r--r--contrib/zlib/compress.c42
-rw-r--r--contrib/zlib/contrib/README.contrib4
-rw-r--r--contrib/zlib/crc32.c41
-rw-r--r--contrib/zlib/deflate.c802
-rw-r--r--contrib/zlib/deflate.h35
-rw-r--r--contrib/zlib/gzguts.h23
-rw-r--r--contrib/zlib/gzlib.c31
-rw-r--r--contrib/zlib/gzread.c156
-rw-r--r--contrib/zlib/gzwrite.c332
-rw-r--r--contrib/zlib/infback.c4
-rw-r--r--contrib/zlib/inffast.c85
-rw-r--r--contrib/zlib/inflate.c123
-rw-r--r--contrib/zlib/inflate.h11
-rw-r--r--contrib/zlib/inftrees.c26
-rw-r--r--contrib/zlib/test/example.c17
-rw-r--r--contrib/zlib/test/infcover.c18
-rw-r--r--contrib/zlib/test/minigzip.c12
-rw-r--r--contrib/zlib/trees.c99
-rw-r--r--contrib/zlib/uncompr.c98
-rw-r--r--contrib/zlib/zconf.h41
-rw-r--r--contrib/zlib/zconf.h.in41
-rw-r--r--contrib/zlib/zlib.372
-rw-r--r--contrib/zlib/zlib.h452
-rw-r--r--contrib/zlib/zlib.map177
-rw-r--r--contrib/zlib/zutil.c49
-rw-r--r--contrib/zlib/zutil.h52
-rw-r--r--etc/mtree/BSD.tests.dist176
-rw-r--r--etc/mtree/BSD.var.dist2
-rw-r--r--gnu/lib/tests/Makefile4
-rw-r--r--gnu/tests/Makefile4
-rw-r--r--gnu/usr.bin/diff/tests/Makefile11
-rw-r--r--gnu/usr.bin/gdb/gdbserver/Makefile2
-rw-r--r--gnu/usr.bin/tests/Makefile4
-rw-r--r--include/stdlib.h2
-rw-r--r--lib/atf/libatf-c++/tests/Makefile3
-rw-r--r--lib/atf/libatf-c++/tests/detail/Makefile2
-rw-r--r--lib/atf/libatf-c/tests/Makefile3
-rw-r--r--lib/atf/libatf-c/tests/detail/Makefile2
-rw-r--r--lib/atf/tests/Makefile2
-rw-r--r--lib/atf/tests/test-programs/Makefile2
-rw-r--r--lib/csu/amd64/Makefile6
-rw-r--r--lib/csu/arm/Makefile6
-rw-r--r--lib/csu/i386-elf/Makefile6
-rw-r--r--lib/csu/mips/Makefile6
-rw-r--r--lib/csu/powerpc/Makefile6
-rw-r--r--lib/csu/powerpc64/Makefile6
-rw-r--r--lib/csu/sparc64/Makefile5
-rw-r--r--lib/libalias/libalias/Makefile2
-rw-r--r--lib/libalias/modules/Makefile2
-rw-r--r--lib/libalias/modules/Makefile.inc2
-rw-r--r--lib/libarchive/Makefile2
-rw-r--r--lib/libarchive/config_freebsd.h1
-rw-r--r--lib/libarchive/tests/Makefile18
-rw-r--r--lib/libauditd/Makefile2
-rw-r--r--lib/libbegemot/Makefile2
-rw-r--r--lib/libblocksruntime/Makefile2
-rw-r--r--lib/libbluetooth/Makefile2
-rw-r--r--lib/libbsm/Makefile2
-rw-r--r--lib/libbsnmp/libbsnmp/Makefile2
-rw-r--r--lib/libbz2/Makefile2
-rw-r--r--lib/libc++/Makefile6
-rw-r--r--lib/libc/db/hash/hash_page.c13
-rw-r--r--lib/libc/gen/nice.336
-rw-r--r--lib/libc/gen/nice.c16
-rw-r--r--lib/libc/string/memmem.322
-rw-r--r--lib/libc/string/memmem.c6
-rw-r--r--lib/libc/sys/recv.255
-rw-r--r--lib/libc/tests/Makefile3
-rw-r--r--lib/libc/tests/Makefile.netbsd-tests6
-rw-r--r--lib/libc/tests/c063/Makefile5
-rw-r--r--lib/libc/tests/db/Makefile8
-rw-r--r--lib/libc/tests/gen/Makefile14
-rw-r--r--lib/libc/tests/gen/execve/Makefile6
-rw-r--r--lib/libc/tests/gen/posix_spawn/Makefile6
-rw-r--r--lib/libc/tests/hash/Makefile8
-rw-r--r--lib/libc/tests/inet/Makefile5
-rw-r--r--lib/libc/tests/locale/Makefile2
-rw-r--r--lib/libc/tests/net/Makefile2
-rw-r--r--lib/libc/tests/net/getaddrinfo/Makefile4
-rw-r--r--lib/libc/tests/regex/Makefile2
-rw-r--r--lib/libc/tests/rpc/Makefile1
-rw-r--r--lib/libc/tests/setjmp/Makefile4
-rw-r--r--lib/libc/tests/ssp/Makefile6
-rw-r--r--lib/libc/tests/stdio/Makefile5
-rw-r--r--lib/libc/tests/stdio/open_memstream2_test.c (renamed from lib/libc/tests/stdio/open_memstream_test.c)0
-rw-r--r--lib/libc/tests/stdio/printbasic_test.c22
-rw-r--r--lib/libc/tests/stdio/printfloat_test.c19
-rw-r--r--lib/libc/tests/stdlib/Makefile10
-rw-r--r--lib/libc/tests/string/Makefile2
-rw-r--r--lib/libc/tests/sys/Makefile13
-rw-r--r--lib/libc/tests/sys/mlock_helper.c114
-rw-r--r--lib/libc/tests/termios/Makefile2
-rw-r--r--lib/libc/tests/time/Makefile2
-rw-r--r--lib/libc/tests/tls/Makefile1
-rw-r--r--lib/libc/tests/tls/dso/Makefile1
-rw-r--r--lib/libc/tests/ttyio/Makefile2
-rw-r--r--lib/libc_nonshared/Makefile6
-rw-r--r--lib/libcam/Makefile7
-rw-r--r--lib/libcom_err/Makefile2
-rw-r--r--lib/libcompat/Makefile2
-rw-r--r--lib/libcrypt/tests/Makefile2
-rw-r--r--lib/libcxxrt/Makefile2
-rw-r--r--lib/libexecinfo/Makefile2
-rw-r--r--lib/libexpat/Makefile2
-rw-r--r--lib/libgssapi/Makefile2
-rw-r--r--lib/libiconv_modules/Makefile.inc4
-rw-r--r--lib/libiconv_modules/mapper_parallel/Makefile2
-rw-r--r--lib/libkiconv/Makefile2
-rw-r--r--lib/libldns/Makefile2
-rw-r--r--lib/liblzma/Makefile6
-rw-r--r--lib/libmagic/Makefile2
-rw-r--r--lib/libmilter/Makefile2
-rw-r--r--lib/libmp/Makefile4
-rw-r--r--lib/libmp/tests/Makefile2
-rw-r--r--lib/libngatm/Makefile4
-rw-r--r--lib/libnv/tests/Makefile2
-rw-r--r--lib/libopie/Makefile2
-rw-r--r--lib/libpam/libpam/Makefile6
-rw-r--r--lib/libpam/libpam/tests/Makefile19
-rw-r--r--lib/libpam/modules/Makefile.inc4
-rw-r--r--lib/libpam/modules/pam_passwdqc/Makefile2
-rw-r--r--lib/libpam/modules/pam_ssh/Makefile2
-rw-r--r--lib/libpcap/Makefile2
-rw-r--r--lib/libprocstat/zfs/Makefile22
-rw-r--r--lib/librpcsec_gss/Makefile6
-rw-r--r--lib/librpcsvc/Makefile2
-rw-r--r--lib/librt/tests/Makefile6
-rw-r--r--lib/libsbuf/Makefile2
-rw-r--r--lib/libsm/Makefile2
-rw-r--r--lib/libsmb/Makefile2
-rw-r--r--lib/libsmdb/Makefile2
-rw-r--r--lib/libsmutil/Makefile2
-rw-r--r--lib/libstdthreads/Makefile2
-rw-r--r--lib/libtelnet/Makefile2
-rw-r--r--lib/libthr/Makefile12
-rw-r--r--lib/libthr/support/Makefile.inc12
-rw-r--r--lib/libthr/tests/Makefile5
-rw-r--r--lib/libthr/tests/dlopen/Makefile2
-rw-r--r--lib/libthr/tests/dlopen/dso/Makefile2
-rw-r--r--lib/libthread_db/Makefile2
-rw-r--r--lib/libufs/Makefile2
-rw-r--r--lib/libulog/Makefile2
-rw-r--r--lib/libunbound/Makefile4
-rw-r--r--lib/libutil/Makefile2
-rw-r--r--lib/libutil/tests/Makefile2
-rw-r--r--lib/libypclnt/Makefile6
-rw-r--r--lib/libz/Symbol.map11
-rw-r--r--lib/libz/Versions.def3
-rw-r--r--lib/libz/zlib.pc2
-rw-r--r--lib/msun/tests/Makefile13
-rw-r--r--lib/msun/tests/fmaxmin_test.c22
-rw-r--r--lib/ncurses/config.mk12
-rw-r--r--lib/ncurses/form/Makefile2
-rw-r--r--lib/ncurses/formw/Makefile2
-rw-r--r--lib/ncurses/menu/Makefile2
-rw-r--r--lib/ncurses/menuw/Makefile2
-rw-r--r--lib/ncurses/ncurses/Makefile2
-rw-r--r--lib/ncurses/ncursesw/Makefile4
-rw-r--r--lib/ncurses/panel/Makefile2
-rw-r--r--lib/ncurses/panelw/Makefile2
-rw-r--r--lib/tests/Makefile4
-rw-r--r--libexec/atf/atf-check/tests/Makefile4
-rw-r--r--libexec/atf/atf-sh/tests/Makefile4
-rw-r--r--libexec/atf/tests/Makefile4
-rw-r--r--libexec/tests/Makefile4
-rw-r--r--sbin/devd/tests/Makefile2
-rw-r--r--sbin/dhclient/tests/Makefile2
-rw-r--r--sbin/growfs/tests/Makefile2
-rw-r--r--sbin/kldload/kldload.c59
-rw-r--r--sbin/mdconfig/tests/Makefile3
-rw-r--r--sbin/tests/Makefile4
-rw-r--r--secure/lib/tests/Makefile4
-rw-r--r--secure/libexec/tests/Makefile4
-rw-r--r--secure/tests/Makefile4
-rw-r--r--secure/usr.bin/tests/Makefile4
-rw-r--r--secure/usr.sbin/tests/Makefile4
-rw-r--r--share/examples/tests/Makefile4
-rw-r--r--share/man/man4/alc.42
-rw-r--r--share/man/man4/unix.481
-rw-r--r--share/man/man7/build.713
-rw-r--r--share/mk/bsd.README21
-rw-r--r--share/mk/bsd.subdir.mk15
-rw-r--r--share/mk/bsd.sys.mk4
-rw-r--r--share/mk/bsd.test.mk20
-rw-r--r--share/mk/suite.test.mk77
-rw-r--r--share/tests/Makefile2
-rw-r--r--sys/cam/ctl/ctl.c3
-rw-r--r--sys/cam/ctl/ctl_backend_ramdisk.c4
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c67
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c2
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c17
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c4
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/sys/dtrace_impl.h19
-rw-r--r--sys/compat/freebsd32/freebsd32_misc.c3
-rw-r--r--sys/contrib/ipfilter/netinet/ip_fil.h8
-rw-r--r--sys/dev/alc/if_alc.c7
-rw-r--r--sys/dev/alc/if_alcreg.h1
-rw-r--r--sys/dev/e1000/if_em.c2
-rw-r--r--sys/dev/hyperv/include/hyperv.h12
-rw-r--r--sys/dev/hyperv/netvsc/hn_nvs.c14
-rw-r--r--sys/dev/hyperv/netvsc/hn_nvs.h1
-rw-r--r--sys/dev/hyperv/netvsc/if_hn.c202
-rw-r--r--sys/dev/hyperv/netvsc/if_hnreg.h11
-rw-r--r--sys/dev/hyperv/netvsc/if_hnvar.h7
-rw-r--r--sys/dev/hyperv/utilities/vmbus_timesync.c5
-rw-r--r--sys/dev/hyperv/vmbus/amd64/hyperv_machdep.c18
-rw-r--r--sys/dev/hyperv/vmbus/hyperv.c15
-rw-r--r--sys/dev/hyperv/vmbus/vmbus_et.c17
-rw-r--r--sys/dev/isp/isp.c15
-rw-r--r--sys/dev/nand/nand_geom.c2
-rw-r--r--sys/dev/pci/pci.c5
-rw-r--r--sys/dev/ppbus/vpo.c2
-rw-r--r--sys/fs/devfs/devfs_devs.c5
-rw-r--r--sys/fs/nfsserver/nfs_nfsdkrpc.c20
-rw-r--r--sys/i386/i386/pmap.c2
-rw-r--r--sys/kern/kern_lockf.c4
-rw-r--r--sys/modules/ath/Makefile34
-rw-r--r--sys/net/if.c8
-rw-r--r--sys/net/if_var.h5
-rw-r--r--sys/netinet/udp_usrreq.c8
-rw-r--r--sys/netpfil/ipfw/dn_heap.h2
-rw-r--r--sys/rpc/svc.c42
-rw-r--r--sys/rpc/svc.h6
-rw-r--r--sys/sys/syscallsubr.h2
-rw-r--r--sys/vm/vm_mmap.c81
-rw-r--r--tests/etc/Makefile2
-rw-r--r--tests/sys/Makefile3
-rw-r--r--tests/sys/fs/Makefile21
-rw-r--r--tests/sys/fs/tmpfs/Makefile56
-rw-r--r--tests/sys/geom/class/gate/1_test.sh63
-rw-r--r--tests/sys/geom/class/gate/2_test.sh48
-rw-r--r--tests/sys/geom/class/gate/3_test.sh49
-rw-r--r--tests/sys/geom/class/gate/Makefile12
-rwxr-xr-xtests/sys/geom/class/gate/conf.sh8
-rwxr-xr-xtests/sys/geom/class/gate/ggate_test.sh207
-rw-r--r--tests/sys/kqueue/Makefile28
-rw-r--r--tests/sys/kqueue/libkqueue/Makefile21
-rw-r--r--tests/sys/kqueue/libkqueue/Makefile.depend18
-rw-r--r--tests/sys/kqueue/libkqueue/common.h (renamed from tests/sys/kqueue/common.h)0
-rw-r--r--tests/sys/kqueue/libkqueue/config.h (renamed from tests/sys/kqueue/config.h)0
-rwxr-xr-xtests/sys/kqueue/libkqueue/kqueue_test.sh (renamed from tests/sys/kqueue/kqueue_test.sh)4
-rw-r--r--tests/sys/kqueue/libkqueue/main.c323
-rw-r--r--tests/sys/kqueue/libkqueue/proc.c (renamed from tests/sys/kqueue/proc.c)0
-rw-r--r--tests/sys/kqueue/libkqueue/read.c326
-rw-r--r--tests/sys/kqueue/libkqueue/signal.c (renamed from tests/sys/kqueue/signal.c)0
-rw-r--r--tests/sys/kqueue/libkqueue/timer.c (renamed from tests/sys/kqueue/timer.c)0
-rw-r--r--tests/sys/kqueue/libkqueue/user.c (renamed from tests/sys/kqueue/user.c)0
-rw-r--r--tests/sys/kqueue/libkqueue/vnode.c (renamed from tests/sys/kqueue/vnode.c)22
-rw-r--r--tests/sys/mqueue/Makefile2
-rw-r--r--tests/sys/pjdfstest/tests/Makefile4
-rw-r--r--tools/test/dtrace/Makefile5
-rw-r--r--usr.bin/apply/tests/Makefile2
-rw-r--r--usr.bin/atm/sscop/Makefile2
-rw-r--r--usr.bin/awk/Makefile4
-rw-r--r--usr.bin/basename/tests/Makefile9
-rw-r--r--usr.bin/bluetooth/Makefile.inc2
-rw-r--r--usr.bin/bmake/tests/Makefile.inc3
-rw-r--r--usr.bin/bsdcat/Makefile6
-rw-r--r--usr.bin/calendar/tests/Makefile2
-rw-r--r--usr.bin/cmp/tests/Makefile9
-rw-r--r--usr.bin/col/tests/Makefile2
-rw-r--r--usr.bin/comm/tests/Makefile2
-rw-r--r--usr.bin/cut/tests/Makefile10
-rwxr-xr-xusr.bin/cut/tests/cut2_test.sh51
-rw-r--r--usr.bin/dirname/tests/Makefile9
-rw-r--r--usr.bin/file2c/tests/Makefile2
-rw-r--r--usr.bin/grep/tests/Makefile10
-rw-r--r--usr.bin/gzip/tests/Makefile9
-rw-r--r--usr.bin/join/tests/Makefile2
-rw-r--r--usr.bin/jot/tests/Makefile2
-rw-r--r--usr.bin/lastcomm/tests/Makefile2
-rw-r--r--usr.bin/m4/tests/Makefile2
-rw-r--r--usr.bin/ncal/tests/Makefile2
-rw-r--r--usr.bin/printf/tests/Makefile2
-rw-r--r--usr.bin/sed/tests/Makefile6
-rw-r--r--usr.bin/svn/Makefile.inc50
-rw-r--r--usr.bin/svn/svn/Makefile8
-rw-r--r--usr.bin/svn/svnadmin/Makefile8
-rw-r--r--usr.bin/svn/svnbench/Makefile8
-rw-r--r--usr.bin/svn/svndumpfilter/Makefile8
-rw-r--r--usr.bin/svn/svnfsfs/Makefile8
-rw-r--r--usr.bin/svn/svnlook/Makefile8
-rw-r--r--usr.bin/svn/svnmucc/Makefile8
-rw-r--r--usr.bin/svn/svnrdump/Makefile8
-rw-r--r--usr.bin/svn/svnserve/Makefile8
-rw-r--r--usr.bin/svn/svnsync/Makefile8
-rw-r--r--usr.bin/svn/svnversion/Makefile8
-rw-r--r--usr.bin/tests/Makefile4
-rw-r--r--usr.bin/truncate/tests/Makefile3
-rw-r--r--usr.bin/uudecode/tests/Makefile2
-rw-r--r--usr.bin/uuencode/tests/Makefile2
-rw-r--r--usr.bin/xargs/tests/Makefile2
-rw-r--r--usr.bin/yacc/tests/Makefile4
-rw-r--r--usr.sbin/arp/arp.c114
-rw-r--r--usr.sbin/bhyve/virtio.h2
-rwxr-xr-xusr.sbin/bsdinstall/scripts/auto7
-rw-r--r--usr.sbin/etcupdate/tests/Makefile2
-rw-r--r--usr.sbin/fstyp/tests/Makefile2
-rw-r--r--usr.sbin/kldxref/ef.c4
-rw-r--r--usr.sbin/newsyslog/tests/Makefile2
-rw-r--r--usr.sbin/nmtree/tests/Makefile4
-rw-r--r--usr.sbin/pw/tests/Makefile2
-rw-r--r--usr.sbin/sa/tests/Makefile2
-rw-r--r--usr.sbin/syslogd/syslogd.c14
-rw-r--r--usr.sbin/tests/Makefile4
-rw-r--r--usr.sbin/vidcontrol/vidcontrol.c44
-rw-r--r--usr.sbin/watchdogd/watchdogd.82
-rw-r--r--usr.sbin/watchdogd/watchdogd.c2
843 files changed, 64511 insertions, 18029 deletions
diff --git a/Makefile b/Makefile
index 3953bd4..a77f1ae 100644
--- a/Makefile
+++ b/Makefile
@@ -21,6 +21,7 @@
# kernel-toolchains - Build kernel-toolchain for all universe targets.
# doxygen - Build API documentation of the kernel, needs doxygen.
# update - Convenient way to update your source tree(s).
+# checkworld - Run test suite on installed world.
# check-old - List obsolete directories/files/libraries.
# check-old-dirs - List obsolete directories.
# check-old-files - List obsolete files.
@@ -99,8 +100,8 @@
# For more information, see the build(7) manual page.
#
TGTS= all all-man buildenv buildenvvars buildkernel buildworld \
- check-old check-old-dirs check-old-files check-old-libs \
- checkdpadd clean cleandepend cleandir \
+ check check-old check-old-dirs check-old-files check-old-libs \
+ checkdpadd checkworld clean cleandepend cleandir \
delete-old delete-old-dirs delete-old-files delete-old-libs \
depend distribute distributekernel distributekernel.debug \
distributeworld distrib-dirs distribution doxygen \
@@ -108,7 +109,7 @@ TGTS= all all-man buildenv buildenvvars buildkernel buildworld \
installkernel.debug packagekernel packageworld \
reinstallkernel reinstallkernel.debug \
installworld kernel-toolchain libraries lint maninstall \
- obj objlink regress rerelease showconfig tags toolchain update \
+ obj objlink rerelease showconfig tags toolchain update \
_worldtmp _legacy _bootstrap-tools _cleanobj _obj \
_build-tools _cross-tools _includes _libraries _depend \
build32 builddtb distribute32 install32 xdev xdev-build xdev-install \
@@ -374,6 +375,10 @@ make bmake: .PHONY
${MMAKE} all; \
${MMAKE} install DESTDIR=${MYMAKE:H} BINDIR=
+regress: .PHONY
+ @echo "'make regress' has been renamed 'make check'" | /usr/bin/fmt
+ @false
+
tinderbox toolchains kernel-toolchains: upgrade_checks
tinderbox:
diff --git a/Makefile.inc1 b/Makefile.inc1
index c1a071a..74756b9 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -35,6 +35,7 @@
# The intended user-driven targets are:
# buildworld - rebuild *everything*, including glue to help do upgrades
# installworld- install everything built by "buildworld"
+# checkworld - run test suite on installed world
# doxygen - build API documentation of the kernel
# update - convenient way to update your source tree (eg: svn/svnup)
#
@@ -50,6 +51,8 @@
.include <bsd.arch.inc.mk>
.include <bsd.compiler.mk>
+LOCALBASE?= /usr/local
+
# We must do share/info early so that installation of info `dir'
# entries works correctly. Do it first since it is less likely to
# grow dependencies on include and lib than vice versa.
@@ -784,7 +787,7 @@ _zoneinfo= zic tzsetup
_nmtree_itools= nmtree
.endif
-ITOOLS= [ awk cap_mkdb cat chflags chmod chown \
+ITOOLS= [ awk cap_mkdb cat chflags chmod chown cmp cp \
date echo egrep find grep id install ${_install-info} \
ln lockf make mkdir mtree ${_nmtree_itools} mv pwd_mkdb \
rm sed sh strip sysctl test true uname wc ${_zoneinfo} \
@@ -1190,12 +1193,26 @@ packagekernel:
.endif
#
+#
+# checkworld
+#
+# Run test suite on installed world.
+#
+checkworld: .PHONY
+ @if [ ! -x ${LOCALBASE}/bin/kyua ]; then \
+ echo "You need kyua (devel/kyua) to run the test suite." | /usr/bin/fmt; \
+ exit 1; \
+ fi
+ ${_+_}${LOCALBASE}/bin/kyua test -k ${TESTSBASE}/Kyuafile
+
+#
+#
# doxygen
#
# Build the API documentation with doxygen
#
doxygen: .PHONY
- @if [ ! -x `/usr/bin/which doxygen` ]; then \
+ @if [ ! -x ${LOCALBASE}/bin/doxygen ]; then \
echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \
exit 1; \
fi
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index d5a4a1c..8e3c66a 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -38,6 +38,13 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20170214: Four files from ggate tests consolidated into one
+OLD_FILES+=usr/tests/sys/geom/class/gate/1_test
+OLD_FILES+=usr/tests/sys/geom/class/gate/2_test
+OLD_FILES+=usr/tests/sys/geom/class/gate/3_test
+OLD_FILES+=usr/tests/sys/geom/class/gate/conf.sh
+# 20170211: libarchive ACL pax test renamed to test_acl_pax_posix1e.tar.uu
+OLD_FILES+=usr/tests/lib/libarchive/test_acl_pax.tar.uu
# 20161229: Three files from gnop tests consolidated into one
OLD_FILES+=usr/tests/sys/geom/class/nop/1_test
OLD_FILES+=usr/tests/sys/geom/class/nop/2_test
@@ -53,6 +60,9 @@ OLD_FILES+=usr/share/man/man4/hv_vss.4.gz
.endif
# 20161118: Remove hv_ata_pci_disengage(4)
OLD_FILES+=usr/share/man/man4/hv_ata_pci_disengage.4.gz
+# 20160906: libkqueue tests moved to /usr/tests/sys/kqueue/libkqueue
+OLD_FILES+=usr/tests/sys/kqueue/kqtest
+OLD_FILES+=usr/tests/sys/kqueue/kqueue_test
# 20160723: stale MLINK removed
OLD_FILES+=usr/share/man/man9/rman_await_resource.9.gz
# 20160216: Remove obsolete unbound-control-setup
diff --git a/bin/cat/tests/Makefile b/bin/cat/tests/Makefile
index 73f82e1..8ac1ffb 100644
--- a/bin/cat/tests/Makefile
+++ b/bin/cat/tests/Makefile
@@ -1,18 +1,20 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR}/../../..
-SRCTOP= ${.CURDIR}/../../..
-TESTSRC= ${SRCTOP}/contrib/netbsd-tests/bin/cat
-
-TESTSDIR= ${TESTSBASE}/bin/cat
-
NETBSD_ATF_TESTS_SH= cat_test
FILESDIR= ${TESTSDIR}
-FILES= d_align.in
+FILES+= d_align.in
FILES+= d_align.out
+FILES+= d_se_output.in
+FILES+= d_se_output.out
.include <netbsd-tests.test.mk>
+d_align.out: ${TESTSRC}/d_align.out
+ sed -E -e 's,^[[:space:]]{7}\$$$$,\$$,' < ${.ALLSRC} > ${.TARGET}.tmp
+ mv ${.TARGET}.tmp ${.TARGET}
+
+CLEANFILES+= d_align.out d_align.out.tmp
+
.include <bsd.test.mk>
diff --git a/bin/date/tests/Makefile b/bin/date/tests/Makefile
index d023195..ecce803 100644
--- a/bin/date/tests/Makefile
+++ b/bin/date/tests/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/bin/date
-
ATF_TESTS_SH= format_string_test
.include <bsd.test.mk>
diff --git a/bin/expr/tests/Makefile b/bin/expr/tests/Makefile
index 80c130c..21b0e99 100644
--- a/bin/expr/tests/Makefile
+++ b/bin/expr/tests/Makefile
@@ -1,11 +1,5 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR}/../../..
-SRCTOP= ${.CURDIR}/../../..
-TESTSRC= ${SRCTOP}/contrib/netbsd-tests/bin/expr
-
-TESTSDIR= ${TESTSBASE}/bin/expr
-
NETBSD_ATF_TESTS_SH= expr_test
ATF_TESTS_SH_SED_expr_test+= -e 's/eval expr/eval expr --/g'
diff --git a/bin/ls/tests/Makefile b/bin/ls/tests/Makefile
index ba8038c..89a2e8c 100644
--- a/bin/ls/tests/Makefile
+++ b/bin/ls/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/bin/ls
-
ATF_TESTS_SH+= ls_tests
# This seems like overkill, but the idea in mind is that all of the testcases
# should be runnable as !root
diff --git a/bin/mv/tests/Makefile b/bin/mv/tests/Makefile
index 3d437ef..229d96e 100644
--- a/bin/mv/tests/Makefile
+++ b/bin/mv/tests/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/bin/mv
-
TAP_TESTS_SH= legacy_test
.include <bsd.test.mk>
diff --git a/bin/pax/tests/Makefile b/bin/pax/tests/Makefile
index 1f27c18..8334fea 100644
--- a/bin/pax/tests/Makefile
+++ b/bin/pax/tests/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/bin/pax
-
TAP_TESTS_PERL= legacy_test
.include <bsd.test.mk>
diff --git a/bin/pkill/tests/Makefile b/bin/pkill/tests/Makefile
index a4a2c91..be46707 100644
--- a/bin/pkill/tests/Makefile
+++ b/bin/pkill/tests/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/bin/pkill
-
TAP_TESTS_SH= pgrep-F_test
TAP_TESTS_SH+= pgrep-LF_test
TAP_TESTS_SH+= pgrep-P_test
diff --git a/bin/sh/tests/Makefile b/bin/sh/tests/Makefile
index d10156c..d93e19a 100644
--- a/bin/sh/tests/Makefile
+++ b/bin/sh/tests/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/bin/sh
-
TESTS_SUBDIRS+= builtins
TESTS_SUBDIRS+= errors
TESTS_SUBDIRS+= execution
@@ -12,6 +10,4 @@ TESTS_SUBDIRS+= parameters
TESTS_SUBDIRS+= parser
TESTS_SUBDIRS+= set-e
-SUBDIR_PARALLEL=
-
.include <bsd.test.mk>
diff --git a/bin/sleep/tests/Makefile b/bin/sleep/tests/Makefile
index 9b286e6..6fc95f3 100644
--- a/bin/sleep/tests/Makefile
+++ b/bin/sleep/tests/Makefile
@@ -1,12 +1,7 @@
# $FreeBSD$
-TESTSRC= ${.CURDIR}/../../../contrib/netbsd-tests/bin/sleep
-.PATH: ${TESTSRC}
-
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/bin/sleep
-ATF_TESTS_SH= sleep_test
-ATF_TESTS_SH_SRC_sleep_test= t_sleep.sh
+NETBSD_ATF_TESTS_SH= sleep_test
.include <bsd.test.mk>
diff --git a/bin/test/tests/Makefile b/bin/test/tests/Makefile
index 5ee337a..a1a5d4f 100644
--- a/bin/test/tests/Makefile
+++ b/bin/test/tests/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/bin/test
-
TAP_TESTS_SH= legacy_test
# Some tests in here are silently not run when the tests are executed as
# root. Explicitly tell Kyua to drop privileges.
diff --git a/bin/tests/Makefile b/bin/tests/Makefile
index 7a59b10..a0e63e5 100644
--- a/bin/tests/Makefile
+++ b/bin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/bin
-
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.c
index 3cded11..9b878a2 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.c
@@ -26,6 +26,8 @@
#pragma ident "%Z%%M% %I% %E% SMI"
+#include <sys/ioctl.h>
+
#include <assert.h>
#include <setjmp.h>
#include <signal.h>
@@ -69,7 +71,7 @@ main(int argc, char *argv[])
*/
if (sigsetjmp(env, 1) == 0) {
for (;;)
- (void) ioctl(-1, -1, NULL);
+ (void) ioctl(-1, 0, NULL);
}
/*
@@ -80,20 +82,19 @@ main(int argc, char *argv[])
fds[n++] = open(file, O_WRONLY);
fds[n++] = open(file, O_RDWR);
- fds[n++] = open(file, O_RDWR | O_APPEND | O_CREAT | O_DSYNC |
- O_LARGEFILE | O_NOCTTY | O_NONBLOCK | O_NDELAY | O_RSYNC |
- O_SYNC | O_TRUNC | O_XATTR, 0666);
+ fds[n++] = open(file, O_RDWR | O_APPEND | O_CREAT |
+ O_NOCTTY | O_NONBLOCK | O_NDELAY | O_SYNC | O_TRUNC | 0666);
fds[n++] = open(file, O_RDWR);
(void) lseek(fds[n - 1], 123, SEEK_SET);
/*
* Once we have all the file descriptors in the state we want to test,
- * issue a bogus ioctl() on each fd with cmd -1 and arg NULL to whack
+ * issue a bogus ioctl() on each fd with cmd 0 and arg NULL to whack
* our DTrace script into recording the content of the fds[] array.
*/
for (i = 0; i < n; i++)
- (void) ioctl(fds[i], -1, NULL);
+ (void) ioctl(fds[i], 0, NULL);
assert(n <= sizeof (fds) / sizeof (fds[0]));
exit(0);
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.d
index 52a3312..8685142 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.d
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/io/tst.fds.d
@@ -36,7 +36,7 @@ syscall::ioctl:entry
}
syscall::ioctl:entry
-/pid == $1 && arg0 != -1u && arg1 == -1u && arg2 == NULL/
+/pid == $1 && arg0 != -1u && arg1 == 0 && arg2 == NULL/
{
printf("fds[%d] fi_name = %s\n", arg0, fds[arg0].fi_name);
printf("fds[%d] fi_dirname = %s\n", arg0, fds[arg0].fi_dirname);
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.c
index 307106d..2a54d49 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/json/tst.usdt.c
@@ -14,6 +14,8 @@
*/
#include <sys/sdt.h>
+#include <stdio.h>
+#include <stdlib.h>
#include "usdt.h"
#define FMT "{" \
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/nfs/tst.call3.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/nfs/tst.call3.c
index bd89fff..dda3ef2 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/nfs/tst.call3.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/nfs/tst.call3.c
@@ -28,6 +28,7 @@
#include <strings.h>
#include <rpc/rpc.h>
+#include <stdio.h>
#include <stdlib.h>
#include <sys/param.h>
#include <rpcsvc/mount.h>
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.args1.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.args1.c
index 23bbab2..28d0677 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.args1.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.args1.c
@@ -27,6 +27,7 @@
#pragma ident "%Z%%M% %I% %E% SMI"
#include <signal.h>
+#include <stdlib.h>
#include <unistd.h>
int
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.gcc.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.gcc.c
index 69df472..b3959c3 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.gcc.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.gcc.c
@@ -26,6 +26,8 @@
#pragma ident "%Z%%M% %I% %E% SMI"
+#include <sys/types.h>
+#include <sys/wait.h>
#include <spawn.h>
#include <signal.h>
#include <stdio.h>
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret1.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret1.c
index cfb88a8..12b3f72 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret1.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret1.c
@@ -27,6 +27,7 @@
#pragma ident "%Z%%M% %I% %E% SMI"
#include <signal.h>
+#include <stdlib.h>
#include <unistd.h>
/*
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret2.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret2.c
index b64aa05..ea5394e 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret2.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.ret2.c
@@ -27,6 +27,7 @@
#pragma ident "%Z%%M% %I% %E% SMI"
#include <signal.h>
+#include <stdlib.h>
#include <unistd.h>
/*
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak1.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak1.c
index 1418f2a..765c285 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak1.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak1.c
@@ -27,6 +27,7 @@
#pragma ident "%Z%%M% %I% %E% SMI"
#include <signal.h>
+#include <stdlib.h>
#include <unistd.h>
/*
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak2.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak2.c
index 8dabbe6..756745d 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak2.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pid/tst.weak2.c
@@ -27,6 +27,7 @@
#pragma ident "%Z%%M% %I% %E% SMI"
#include <signal.h>
+#include <stdlib.h>
#include <unistd.h>
/*
@@ -34,14 +35,14 @@
* leading underscores.
*/
-#pragma weak _go = go
-
static int
go(int a)
{
return (a + 1);
}
+#pragma weak _go = go
+
static void
handle(int sig)
{
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d
index 8d4bb81..10dc61d 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d
@@ -44,7 +44,7 @@ BEGIN
printf("\n");
- printf("%%a = %a\n", &`kmem_alloc);
+ printf("%%a = %a\n", &`malloc);
printf("%%c = %c\n", i);
printf("%%d = %d\n", i);
printf("%%hd = %hd\n", (short)i);
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d.out
index 55c1222..1d27405 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d.out
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.basics.d.out
@@ -1,5 +1,5 @@
-%a = genunix`kmem_alloc
+%a = kernel`malloc
%c = a
%d = 97
%hd = 97
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d
index a740413..67d7749 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d
@@ -36,6 +36,6 @@
BEGIN
{
- printf("sysname = %s", `utsname.sysname);
+ printf("sysname = %s", `ostype);
exit(0);
}
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d.out
index ba31981..82d597b 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d.out
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.str.d.out
@@ -1 +1 @@
-sysname = SunOS
+sysname = FreeBSD
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d
index 32bc682..c2cf77d 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d
@@ -38,6 +38,6 @@
BEGIN
{
- printf("symbol = %a", &`kmem_alloc);
+ printf("symbol = %a", &`malloc);
exit(0);
}
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d.out
index 5ed9d8e..7f645e1 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d.out
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.sym.d.out
@@ -1 +1 @@
-symbol = kernel`kmem_alloc
+symbol = kernel`malloc
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.kpriv.ksh b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.kpriv.ksh
new file mode 100644
index 0000000..da776d0
--- /dev/null
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/privs/tst.kpriv.ksh
@@ -0,0 +1,112 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright (c) 2015, Joyent, Inc. All rights reserved.
+#
+
+err=/tmp/err.$$
+
+ppriv -s A=basic,dtrace_user $$
+
+#
+# When we lack dtrace_kernel, we expect to not be able to get at kernel memory
+# via any subroutine or other vector.
+#
+# trace(func((void *)&\`utsname)); }
+/usr/sbin/dtrace -wq -Cs /dev/stdin 2> $err <<EOF
+
+#define FAIL \
+ printf("able to read kernel memory via %s!\n", badsubr); \
+ exit(2);
+
+#define CANTREAD1(func) \
+ BEGIN { badsubr = "func()"; func((void *)&\`utsname); FAIL }
+
+#define CANTREAD2(func, arg1) \
+ BEGIN { badsubr = "func()"; func((void *)&\`utsname, arg1); FAIL }
+
+#define CANTREAD2ARG1(func, arg0) \
+ BEGIN { badsubr = "func() (arg1)"; func(arg0, (void *)&\`utsname); FAIL }
+
+#define CANTREAD3(func, arg1, arg2) \
+ BEGIN { badsubr = "func()"; func((void *)&\`utsname, arg1, arg2); FAIL }
+
+CANTREAD1(mutex_owned)
+CANTREAD1(mutex_owner)
+CANTREAD1(mutex_type_adaptive)
+CANTREAD1(mutex_type_spin)
+CANTREAD1(rw_read_held)
+CANTREAD1(rw_write_held)
+CANTREAD1(rw_iswriter)
+CANTREAD3(bcopy, alloca(1), 1)
+CANTREAD1(msgsize)
+CANTREAD1(msgdsize)
+CANTREAD1(strlen)
+CANTREAD2(strchr, '!')
+CANTREAD2(strrchr, '!')
+CANTREAD2(strstr, "doogle")
+CANTREAD2ARG1(strstr, "doogle")
+CANTREAD2(index, "bagnoogle")
+CANTREAD2ARG1(index, "bagnoogle")
+CANTREAD2(rindex, "bagnoogle")
+CANTREAD2ARG1(rindex, "bagnoogle")
+CANTREAD2(strtok, "doogle")
+CANTREAD2ARG1(strtok, "doogle")
+CANTREAD2(json, "doogle")
+CANTREAD2ARG1(json, "doogle")
+CANTREAD1(toupper)
+CANTREAD1(tolower)
+CANTREAD2(ddi_pathname, 1)
+CANTREAD2(strjoin, "doogle")
+CANTREAD2ARG1(strjoin, "doogle")
+CANTREAD1(strtoll)
+CANTREAD1(dirname)
+CANTREAD1(basename)
+CANTREAD1(cleanpath)
+
+#if defined(__amd64)
+CANTREAD3(copyout, uregs[R_R9], 1)
+CANTREAD3(copyoutstr, uregs[R_R9], 1)
+#else
+#if defined(__i386)
+CANTREAD3(copyout, uregs[R_ESP], 1)
+CANTREAD3(copyoutstr, uregs[R_ESP], 1)
+#endif
+#endif
+
+BEGIN
+{
+ exit(0);
+}
+
+ERROR
+/arg4 != DTRACEFLT_KPRIV/
+{
+ printf("bad error code via %s (expected %d, found %d)\n",
+ badsubr, DTRACEFLT_KPRIV, arg4);
+ exit(3);
+}
+
+ERROR
+/arg4 == DTRACEFLT_KPRIV/
+{
+ printf("illegal kernel access properly prevented from %s\n", badsubr);
+}
+EOF
+
+status=$?
+
+if [[ $status -eq 1 ]]; then
+ cat $err
+fi
+
+exit $status
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.ufunc.ksh b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.ufunc.ksh
index 69c0f84..d2afbed 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.ufunc.ksh
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.ufunc.ksh
@@ -64,7 +64,7 @@ child=$!
# ksh doing work. (This actually goes one step further and assumes that we
# catch some non-static function in ksh.)
#
-script | tee /dev/fd/2 | grep 'ksh`[a-zA-Z_]' > /dev/null
+script | tee /dev/fd/2 | egrep 'ksh(93)?`[a-zA-Z_]' > /dev/null
status=$?
kill $child
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.umod.ksh b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.umod.ksh
index 6ca823f..8be34ec 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.umod.ksh
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.umod.ksh
@@ -62,7 +62,7 @@ child=$!
#
# The only thing we can be sure of here is that ksh is doing some work.
#
-script | tee /dev/fd/2 | grep -w ksh > /dev/null
+script | tee /dev/fd/2 | egrep -w 'ksh(93)?' > /dev/null
status=$?
kill $child
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.usym.ksh b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.usym.ksh
index b1a3ab9..8842d2b 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.usym.ksh
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/profile-n/tst.usym.ksh
@@ -63,7 +63,7 @@ child=$!
# This test is essentially the same as that in the ufunc test; see that
# test for the rationale.
#
-script | tee /dev/fd/2 | grep 'ksh`[a-zA-Z_]' > /dev/null
+script | tee /dev/fd/2 | egrep 'ksh(93)?`[a-zA-Z_]' > /dev/null
status=$?
kill $child
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/scalars/err.bigglobal.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/scalars/err.bigglobal.d
new file mode 100644
index 0000000..a50a759
--- /dev/null
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/scalars/err.bigglobal.d
@@ -0,0 +1,26 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source. A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright (c) 2015, Joyent, Inc. All rights reserved.
+ */
+
+struct mrbig {
+ char toomany[100000];
+};
+
+struct mrbig mrbig;
+
+BEGIN
+{
+ mrbig.toomany[0] = '!';
+ exit(0);
+}
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/scalars/err.biglocal.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/scalars/err.biglocal.d
new file mode 100644
index 0000000..08a2a4c
--- /dev/null
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/scalars/err.biglocal.d
@@ -0,0 +1,26 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source. A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright (c) 2015, Joyent, Inc. All rights reserved.
+ */
+
+struct mrbig {
+ char toomany[100000];
+};
+
+this struct mrbig mrbig;
+
+BEGIN
+{
+ this->mrbig.toomany[0] = '!';
+ exit(0);
+}
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/syscall/tst.args.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/syscall/tst.args.c
index 209160b..198d9db 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/syscall/tst.args.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/syscall/tst.args.c
@@ -28,6 +28,7 @@
#include <stdio.h>
#include <sys/syscall.h>
+#include <unistd.h>
/*ARGSUSED*/
int
diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.forker.c b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.forker.c
index ade7f83..e229c0c 100644
--- a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.forker.c
+++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.forker.c
@@ -26,6 +26,10 @@
#pragma ident "%Z%%M% %I% %E% SMI"
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include <stdlib.h>
#include <unistd.h>
#include "forker.h"
diff --git a/cddl/lib/tests/Makefile b/cddl/lib/tests/Makefile
index 4a49d9f..a0e63e5 100644
--- a/cddl/lib/tests/Makefile
+++ b/cddl/lib/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/cddl/lib
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/cddl/sbin/tests/Makefile b/cddl/sbin/tests/Makefile
index 91bbaee..a0e63e5 100644
--- a/cddl/sbin/tests/Makefile
+++ b/cddl/sbin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/cddl/sbin
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/cddl/tests/Makefile b/cddl/tests/Makefile
index 34a27ea..a0e63e5 100644
--- a/cddl/tests/Makefile
+++ b/cddl/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/cddl
-
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/cddl/usr.bin/tests/Makefile b/cddl/usr.bin/tests/Makefile
index c94d591..a0e63e5 100644
--- a/cddl/usr.bin/tests/Makefile
+++ b/cddl/usr.bin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/cddl/usr.bin
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/cddl/usr.sbin/dtrace/tests/Makefile b/cddl/usr.sbin/dtrace/tests/Makefile
new file mode 100644
index 0000000..7db6f2f
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/Makefile
@@ -0,0 +1,14 @@
+# $FreeBSD$
+
+.include <bsd.own.mk>
+
+TESTS_SUBDIRS+= common
+
+.PATH: ${SRCTOP}/tests
+KYUAFILE= YES
+
+.PATH: ${.CURDIR}/tools
+SCRIPTSDIR= ${TESTSDIR}
+SCRIPTS= dtest.sh
+
+.include <bsd.test.mk>
diff --git a/cddl/usr.sbin/dtrace/tests/Makefile.inc1 b/cddl/usr.sbin/dtrace/tests/Makefile.inc1
new file mode 100644
index 0000000..6958f78
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/Makefile.inc1
@@ -0,0 +1,52 @@
+# $FreeBSD$
+
+TESTGROUP= ${.CURDIR:H:T}/${.CURDIR:T}
+TESTSRC= ${.CURDIR:H:H:H:H:H}/contrib/opensolaris/cmd/dtrace/test/tst/${TESTGROUP}
+TESTSDIR= ${TESTSBASE}/cddl/usr.sbin/dtrace/${TESTGROUP}
+
+.if !defined(_RECURSING_PROGS)
+FILESGROUPS+= FILES ${TESTGROUP} ${TESTGROUP}EXE
+
+${TESTGROUP}= ${TESTFILES}
+${TESTGROUP}EXE= ${TESTEXES}
+${TESTGROUP}EXEMODE= 0555
+
+${TESTGROUP}DIR= ${TESTSDIR}
+${TESTGROUP}EXEDIR= ${TESTSDIR}
+
+TESTWRAPPER= t_dtrace_contrib
+ATF_TESTS_SH+= ${TESTWRAPPER}
+TEST_METADATA.t_dtrace_contrib+= required_files="/usr/local/bin/ksh"
+TEST_METADATA.t_dtrace_contrib+= required_user="root"
+
+GENTEST?= ${.CURDIR:H:H}/tools/gentest.sh
+EXCLUDE= ${.CURDIR:H:H}/tools/exclude.sh
+${TESTWRAPPER}.sh: ${GENTEST} ${EXCLUDE} ${${TESTGROUP}}
+ sh ${GENTEST} -e ${EXCLUDE} ${TESTGROUP} ${${TESTGROUP}:S/ */ /} > ${.TARGET}
+
+CLEANFILES+= ${TESTWRAPPER}.sh
+.endif # !defined(_RECURSING_PROGS)
+
+.PATH: ${TESTSRC}
+
+PROGS= ${CFILES:T:S/.c$/.exe/g}
+.for prog in ${PROGS}
+SRCS.${prog}+= ${prog:S/.exe$/.c/}
+BINDIR.${prog}= ${TESTSDIR}
+MAN.${prog}=
+
+.if exists(${prog:S/^tst.//:S/.exe$/.d/})
+SRCS.${prog}+= ${prog:S/^tst.//:S/.exe$/.d/}
+.endif
+.endfor
+
+# Some tests depend on the internals of their corresponding test programs,
+# so make sure the optimizer doesn't interfere with them.
+CFLAGS+= -O0
+
+# Test programs shouldn't be stripped; else we generally can't use the PID
+# provider.
+DEBUG_FLAGS= -g
+STRIP=
+
+.include <bsd.test.mk>
diff --git a/cddl/usr.sbin/dtrace/tests/common/Makefile b/cddl/usr.sbin/dtrace/tests/common/Makefile
new file mode 100644
index 0000000..7c7bb17
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/Makefile
@@ -0,0 +1,89 @@
+# $FreeBSD$
+
+# We exclude several subdirectories: nfs and sysevent do not compile on
+# FreeBSD, and docsExamples doesn't seem amenable to automated testing.
+
+TESTSDIR= ${TESTSBASE}/cddl/usr.sbin/dtrace/common
+TESTS_SUBDIRS+= aggs \
+ arithmetic \
+ arrays \
+ assocs \
+ begin \
+ bitfields \
+ buffering \
+ builtinvar \
+ cg \
+ clauses \
+ cpc \
+ decls \
+ drops \
+ dtraceUtil \
+ end \
+ enum \
+ error \
+ exit \
+ fbtprovider \
+ funcs \
+ grammar \
+ include \
+ inline \
+ io \
+ ip \
+ java_api \
+ json \
+ lexer \
+ llquantize \
+ mdb \
+ mib \
+ misc \
+ multiaggs \
+ offsetof \
+ operators \
+ pid \
+ plockstat \
+ pointers \
+ pragma \
+ predicates \
+ preprocessor \
+ print \
+ printa \
+ printf \
+ privs \
+ probes \
+ proc \
+ profile-n \
+ providers \
+ raise \
+ rates \
+ safety \
+ scalars \
+ sched \
+ scripting \
+ sdt \
+ sizeof \
+ speculation \
+ stability \
+ stack \
+ stackdepth \
+ stop \
+ strlen \
+ strtoll \
+ struct \
+ syscall \
+ tick-n \
+ trace \
+ tracemem \
+ translators \
+ typedef \
+ types \
+ uctf \
+ union \
+ usdt \
+ ustack \
+ vars \
+ version \
+
+.PATH: ${.CURDIR:H:H:H:H:H}/tests
+KYUAFILE= YES
+
+.include <bsd.test.mk>
diff --git a/cddl/usr.sbin/dtrace/tests/common/aggs/Makefile b/cddl/usr.sbin/dtrace/tests/common/aggs/Makefile
new file mode 100644
index 0000000..d8a5ef0
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/aggs/Makefile
@@ -0,0 +1,189 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_AGG_FUNC.bad.d \
+ err.D_AGG_MDIM.bad.d \
+ err.D_AGG_NULL.bad.d \
+ err.D_AGG_REDEF.redef.d \
+ err.D_AGG_SCALAR.avgtoofew.d \
+ err.D_AGG_SCALAR.maxnoarg.d \
+ err.D_AGG_SCALAR.mintoofew.d \
+ err.D_AGG_SCALAR.quantizetoofew.d \
+ err.D_AGG_SCALAR.stddevtoofew.d \
+ err.D_AGG_SCALAR.sumtoofew.d \
+ err.D_CLEAR_AGGARG.bad.d \
+ err.D_CLEAR_PROTO.bad.d \
+ err.D_FUNC_IDENT.bad.d \
+ err.D_FUNC_UNDEF.badaggfunc.d \
+ err.D_IDENT_UNDEF.badexpr.d \
+ err.D_IDENT_UNDEF.badkey3.d \
+ err.D_IDENT_UNDEF.noeffect.d \
+ err.D_KEY_TYPE.badkey1.d \
+ err.D_KEY_TYPE.badkey2.d \
+ err.D_KEY_TYPE.badkey4.d \
+ err.D_LQUANT_BASETYPE.lqbad1.d \
+ err.D_LQUANT_BASETYPE.lqshort.d \
+ err.D_LQUANT_BASEVAL.bad.d \
+ err.D_LQUANT_LIMTYPE.lqbad1.d \
+ err.D_LQUANT_LIMVAL.bad.d \
+ err.D_LQUANT_MATCHBASE.d \
+ err.D_LQUANT_MATCHBASE.order.d \
+ err.D_LQUANT_MATCHLIM.d \
+ err.D_LQUANT_MATCHLIM.order.d \
+ err.D_LQUANT_MATCHSTEP.d \
+ err.D_LQUANT_MISMATCH.lqbadarg.d \
+ err.D_LQUANT_STEPLARGE.lqtoofew.d \
+ err.D_LQUANT_STEPSMALL.bad.d \
+ err.D_LQUANT_STEPTYPE.lqbadinc.d \
+ err.D_LQUANT_STEPVAL.bad.d \
+ err.D_NORMALIZE_AGGARG.bad.d \
+ err.D_NORMALIZE_PROTO.bad.d \
+ err.D_NORMALIZE_SCALAR.bad.d \
+ err.D_PROTO_ARG.lquantizetoofew.d \
+ err.D_PROTO_LEN.avgnoarg.d \
+ err.D_PROTO_LEN.avgtoomany.d \
+ err.D_PROTO_LEN.counttoomany.d \
+ err.D_PROTO_LEN.lquantizenoarg.d \
+ err.D_PROTO_LEN.lquantizetoomany.d \
+ err.D_PROTO_LEN.maxnoarg.d \
+ err.D_PROTO_LEN.maxtoomany.d \
+ err.D_PROTO_LEN.minnoarg.d \
+ err.D_PROTO_LEN.mintoomany.d \
+ err.D_PROTO_LEN.quantizenoarg.d \
+ err.D_PROTO_LEN.quantizetoomany.d \
+ err.D_PROTO_LEN.stddevnoarg.d \
+ err.D_PROTO_LEN.stddevtoomany.d \
+ err.D_PROTO_LEN.sumnoarg.d \
+ err.D_PROTO_LEN.sumtoomany.d \
+ err.D_TRUNC_AGGARG.bad.d \
+ err.D_TRUNC_PROTO.badmany.d \
+ err.D_TRUNC_PROTO.badnone.d \
+ err.D_TRUNC_SCALAR.bad.d \
+ tst.aggencoding.d \
+ tst.aggencoding.d.out \
+ tst.agghist.d \
+ tst.agghist.d.out \
+ tst.aggpack.d \
+ tst.aggpack.d.out \
+ tst.aggpackbanner.ksh \
+ tst.aggpackbanner.ksh.out \
+ tst.aggpackzoom.d \
+ tst.aggpackzoom.d.out \
+ tst.aggzoom.d \
+ tst.aggzoom.d.out \
+ tst.allquant.d \
+ tst.allquant.d.out \
+ tst.avg.d \
+ tst.avg.d.out \
+ tst.avg_neg.d \
+ tst.avg_neg.d.out \
+ tst.clear.d \
+ tst.clear.d.out \
+ tst.clearavg.d \
+ tst.clearavg.d.out \
+ tst.clearavg2.d \
+ tst.clearavg2.d.out \
+ tst.cleardenormalize.d \
+ tst.cleardenormalize.d.out \
+ tst.clearlquantize.d \
+ tst.clearlquantize.d.out \
+ tst.clearnormalize.d \
+ tst.clearnormalize.d.out \
+ tst.clearstddev.d \
+ tst.clearstddev.d.out \
+ tst.count.d \
+ tst.count.d.out \
+ tst.count2.d \
+ tst.count2.d.out \
+ tst.count3.d \
+ tst.denormalize.d \
+ tst.denormalize.d.out \
+ tst.denormalizeonly.d \
+ tst.denormalizeonly.d.out \
+ tst.fmtnormalize.d \
+ tst.fmtnormalize.d.out \
+ tst.forms.d \
+ tst.forms.d.out \
+ tst.goodkey.d \
+ tst.keysort.d \
+ tst.keysort.d.out \
+ tst.lquantize.d \
+ tst.lquantize.d.out \
+ tst.lquantnormal.d \
+ tst.lquantnormal.d.out \
+ tst.lquantrange.d \
+ tst.lquantrange.d.out \
+ tst.lquantround.d \
+ tst.lquantround.d.out \
+ tst.lquantzero.d \
+ tst.lquantzero.d.out \
+ tst.max.d \
+ tst.max.d.out \
+ tst.max_neg.d \
+ tst.max_neg.d.out \
+ tst.min.d \
+ tst.min.d.out \
+ tst.min_neg.d \
+ tst.min_neg.d.out \
+ tst.multiaggs1.d \
+ tst.multiaggs2.d \
+ tst.multiaggs2.d.out \
+ tst.multiaggs3.d \
+ tst.multiaggs3.d.out \
+ tst.multinormalize.d \
+ tst.multinormalize.d.out \
+ tst.neglquant.d \
+ tst.neglquant.d.out \
+ tst.negorder.d \
+ tst.negorder.d.out \
+ tst.negquant.d \
+ tst.negquant.d.out \
+ tst.negtrunc.d \
+ tst.negtrunc.d.out \
+ tst.negtruncquant.d \
+ tst.negtruncquant.d.out \
+ tst.normalize.d \
+ tst.normalize.d.out \
+ tst.order.d \
+ tst.order.d.out \
+ tst.quantize.d \
+ tst.quantize.d.out \
+ tst.quantmany.d \
+ tst.quantmany.d.out \
+ tst.quantround.d \
+ tst.quantround.d.out \
+ tst.quantzero.d \
+ tst.quantzero.d.out \
+ tst.signature.d \
+ tst.signedkeys.d \
+ tst.signedkeys.d.out \
+ tst.signedkeyspos.d \
+ tst.signedkeyspos.d.out \
+ tst.sizedkeys.d \
+ tst.sizedkeys.d.out \
+ tst.stddev.d \
+ tst.stddev.d.out \
+ tst.subr.d \
+ tst.sum.d \
+ tst.sum.d.out \
+ tst.trunc.d \
+ tst.trunc.d.out \
+ tst.trunc0.d \
+ tst.trunc0.d.out \
+ tst.truncquant.d \
+ tst.truncquant.d.out \
+ tst.valsortkeypos.d \
+ tst.valsortkeypos.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/arithmetic/Makefile b/cddl/usr.sbin/dtrace/tests/common/arithmetic/Makefile
new file mode 100644
index 0000000..7f1fa96
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/arithmetic/Makefile
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_DIV_ZERO.divby0.d \
+ err.D_DIV_ZERO.divby0_1.d \
+ err.D_DIV_ZERO.divby0_2.d \
+ err.D_DIV_ZERO.modby0.d \
+ err.D_SYNTAX.addmin.d \
+ err.D_SYNTAX.divmin.d \
+ err.D_SYNTAX.muladd.d \
+ err.D_SYNTAX.muldiv.d \
+ tst.basics.d \
+ tst.basics.d.out \
+ tst.compcast.d \
+ tst.compcast.d.out \
+ tst.compnarrowassign.d \
+ tst.compnarrowassign.d.out \
+ tst.execcast.d \
+ tst.execcast.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/arrays/Makefile b/cddl/usr.sbin/dtrace/tests/common/arrays/Makefile
new file mode 100644
index 0000000..608388f
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/arrays/Makefile
@@ -0,0 +1,29 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_ARR_BADREF.bad.d \
+ err.D_DECL_ARRBIG.toobig.d \
+ err.D_DECL_ARRNULL.bad.d \
+ err.D_DECL_ARRSUB.bad.d \
+ err.D_DECL_PROTO_TYPE.badtuple.d \
+ err.D_IDENT_UNDEF.badureg.d \
+ tst.basic1.d \
+ tst.basic2.d \
+ tst.basic3.d \
+ tst.basic4.d \
+ tst.basic5.d \
+ tst.basic6.d \
+ tst.uregsarray.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/assocs/Makefile b/cddl/usr.sbin/dtrace/tests/common/assocs/Makefile
new file mode 100644
index 0000000..5d20b61
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/assocs/Makefile
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_OP_INCOMPAT.dupgtype.d \
+ err.D_OP_INCOMPAT.dupttype.d \
+ err.D_OP_INCOMPAT.this.d \
+ err.D_PROTO_ARG.badsig.d \
+ err.D_PROTO_LEN.toofew.d \
+ err.D_PROTO_LEN.toomany.d \
+ err.D_SYNTAX.errassign.d \
+ err.tupoflow.d \
+ tst.cpyarray.d \
+ tst.diffprofile.d \
+ tst.initialize.d \
+ tst.invalidref.d \
+ tst.misc.d \
+ tst.orthogonality.d \
+ tst.this.d \
+ tst.valassign.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/begin/Makefile b/cddl/usr.sbin/dtrace/tests/common/begin/Makefile
new file mode 100644
index 0000000..4437db9
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/begin/Makefile
@@ -0,0 +1,22 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PDESC_ZERO.begin.d \
+ err.D_PDESC_ZERO.tick.d \
+ tst.begin.d \
+ tst.begin.d.out \
+ tst.multibegin.d \
+ tst.multibegin.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/bitfields/Makefile b/cddl/usr.sbin/dtrace/tests/common/bitfields/Makefile
new file mode 100644
index 0000000..838ad68
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/bitfields/Makefile
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_ADDROF_BITFIELD.BitfieldAddress.d \
+ err.D_DECL_BFCONST.NegBitField.d \
+ err.D_DECL_BFCONST.ZeroBitField.d \
+ err.D_DECL_BFSIZE.ExceedBaseType.d \
+ err.D_DECL_BFSIZE.GreaterThan64.d \
+ err.D_DECL_BFTYPE.badtype.d \
+ err.D_OFFSETOF_BITFIELD.d \
+ err.D_SIZEOF_BITFIELD.SizeofBitfield.d \
+ tst.BitFieldPromotion.d \
+ tst.SizeofBitField.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/buffering/Makefile b/cddl/usr.sbin/dtrace/tests/common/buffering/Makefile
new file mode 100644
index 0000000..7fe869b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/buffering/Makefile
@@ -0,0 +1,37 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.end.d \
+ err.resize1.d \
+ err.resize2.d \
+ err.resize3.d \
+ err.zerobuf.d \
+ tst.alignring.d \
+ tst.cputime.ksh \
+ tst.dynvarsize.d \
+ tst.fill1.d \
+ tst.fill1.d.out \
+ tst.resize1.d \
+ tst.resize2.d \
+ tst.resize3.d \
+ tst.ring1.d \
+ tst.ring2.d \
+ tst.ring2.d.out \
+ tst.ring3.d \
+ tst.ring3.d.out \
+ tst.smallring.d \
+ tst.switch1.d \
+ tst.switch1.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/builtinvar/Makefile b/cddl/usr.sbin/dtrace/tests/common/builtinvar/Makefile
new file mode 100644
index 0000000..b955be5
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/builtinvar/Makefile
@@ -0,0 +1,48 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_XLATE_NOCONV.cpuusage.d \
+ err.D_XLATE_NOCONV.nice.d \
+ err.D_XLATE_NOCONV.priority.d \
+ err.D_XLATE_NOCONV.prsize.d \
+ err.D_XLATE_NOCONV.rssize.d \
+ tst.arg0.d \
+ tst.arg0clause.d \
+ tst.arg1.d \
+ tst.arg1to8.d \
+ tst.arg1to8clause.d \
+ tst.caller.d \
+ tst.caller1.d \
+ tst.epid.d \
+ tst.epid1.d \
+ tst.errno.d \
+ tst.errno1.d \
+ tst.execname.d \
+ tst.hpriority.d \
+ tst.id.d \
+ tst.id1.d \
+ tst.ipl.d \
+ tst.ipl1.d \
+ tst.lwpsinfo.d \
+ tst.lwpsinfo1.d \
+ tst.pid.d \
+ tst.pid1.d \
+ tst.psinfo.d \
+ tst.psinfo1.d \
+ tst.tid.d \
+ tst.tid1.d \
+ tst.timestamp.d \
+ tst.vtimestamp.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/cg/Makefile b/cddl/usr.sbin/dtrace/tests/common/cg/Makefile
new file mode 100644
index 0000000..5550a8e
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/cg/Makefile
@@ -0,0 +1,18 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_NOREG.noreg.d \
+ err.baddif.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/clauses/Makefile b/cddl/usr.sbin/dtrace/tests/common/clauses/Makefile
new file mode 100644
index 0000000..5d582f3
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/clauses/Makefile
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_IDENT_UNDEF.aggfun.d \
+ err.D_IDENT_UNDEF.aggtup.d \
+ err.D_IDENT_UNDEF.arrtup.d \
+ err.D_IDENT_UNDEF.body.d \
+ err.D_IDENT_UNDEF.both.d \
+ err.D_IDENT_UNDEF.pred.d \
+ tst.nopred.d \
+ tst.pred.d \
+ tst.predfirst.d \
+ tst.predlast.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/cpc/Makefile b/cddl/usr.sbin/dtrace/tests/common/cpc/Makefile
new file mode 100644
index 0000000..ad23c5a1
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/cpc/Makefile
@@ -0,0 +1,27 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PDESC_ZERO.lowfrequency.d \
+ err.D_PDESC_ZERO.malformedoverflow.d \
+ err.D_PDESC_ZERO.nonexistentevent.d \
+ err.cpcvscpustatpart1.ksh \
+ err.cpcvscpustatpart2.ksh \
+ err.cputrackfailtostart.ksh \
+ err.cputrackterminates.ksh \
+ err.toomanyenablings.d \
+ tst.allcpus.ksh \
+ tst.genericevent.d \
+ tst.platformevent.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/decls/Makefile b/cddl/usr.sbin/dtrace/tests/common/decls/Makefile
new file mode 100644
index 0000000..21544d9
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/decls/Makefile
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_DECL_LOCASSC.NonLocalAssoc.d \
+ err.D_DECL_LONGINT.LongStruct.d \
+ err.D_DECL_PARMCLASS.BadStorageClass.d \
+ err.D_DECL_PROTO_NAME.VoidName.d \
+ err.D_DECL_PROTO_TYPE.Dyn.d \
+ err.D_DECL_PROTO_VARARGS.VarLenArgs.d \
+ err.D_DECL_PROTO_VOID.NonSoleVoid.d \
+ err.D_DECL_SIGNINT.UnsignedStruct.d \
+ err.D_DECL_VOIDATTR.ShortVoidDecl.d \
+ tst.arrays.d \
+ tst.basics.d \
+ tst.funcs.d \
+ tst.pointers.d \
+ tst.varargsfuncs.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/docsExamples/Makefile b/cddl/usr.sbin/dtrace/tests/common/docsExamples/Makefile
new file mode 100644
index 0000000..6212862
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/docsExamples/Makefile
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ badptr.d \
+ countdown.d \
+ counter.d \
+ errorpath.d \
+ hello.d \
+ kstat.d \
+ ksyms.d \
+ renormalize.d \
+ rtime.d \
+ rw.d \
+ rwinfo.d \
+ rwtime.d \
+ specopen.d \
+ truss.d \
+ trussrw.d \
+ userfunc.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/drops/Makefile b/cddl/usr.sbin/dtrace/tests/common/drops/Makefile
new file mode 100644
index 0000000..248c201
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/drops/Makefile
@@ -0,0 +1,24 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ drp.DTRACEDROP_AGGREGATION.d \
+ drp.DTRACEDROP_DBLERROR.d \
+ drp.DTRACEDROP_DYNAMIC.d \
+ drp.DTRACEDROP_PRINCIPAL.d \
+ drp.DTRACEDROP_PRINCIPAL.end.d \
+ drp.DTRACEDROP_SPEC.d \
+ drp.DTRACEDROP_SPECUNAVAIL.d \
+ drp.DTRACEDROP_STKSTROVERFLOW.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/dtraceUtil/Makefile b/cddl/usr.sbin/dtrace/tests/common/dtraceUtil/Makefile
new file mode 100644
index 0000000..60e6599
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/dtraceUtil/Makefile
@@ -0,0 +1,118 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PDESC_ZERO.InvalidDescription1.d \
+ man.APIVersion.d \
+ man.AddSearchPath.d \
+ man.CoalesceTrace.d \
+ man.ELFGeneration.d \
+ man.IncludedFilePath.d \
+ man.ShowCompilerCode.d \
+ man.VerboseStabilityReport.d \
+ tst.AddSearchPath.d.ksh \
+ tst.BufsizeGiga.d.ksh \
+ tst.BufsizeKilo.d.ksh \
+ tst.BufsizeMega.d.ksh \
+ tst.BufsizeTera.d.ksh \
+ tst.DataModel32.d.ksh \
+ tst.DataModel64.d.ksh \
+ tst.DefineNameWithCPP.d.ksh \
+ tst.DefineNameWithCPP.d.ksh.out \
+ tst.DestructWithFunction.d.ksh \
+ tst.DestructWithFunction.d.ksh.out \
+ tst.DestructWithID.d.ksh \
+ tst.DestructWithID.d.ksh.out \
+ tst.DestructWithModule.d.ksh \
+ tst.DestructWithModule.d.ksh.out \
+ tst.DestructWithName.d.ksh \
+ tst.DestructWithName.d.ksh.out \
+ tst.DestructWithProvider.d.ksh \
+ tst.DestructWithProvider.d.ksh.out \
+ tst.DestructWithoutW.d.ksh \
+ tst.ELFGenerationOut.d.ksh \
+ tst.ELFGenerationWithO.d.ksh \
+ tst.ExitStatus1.d.ksh \
+ tst.ExitStatus2.d.ksh \
+ tst.ExtraneousProbeIds.d.ksh \
+ tst.InvalidFuncName1.d.ksh \
+ tst.InvalidFuncName2.d.ksh \
+ tst.InvalidId1.d.ksh \
+ tst.InvalidId2.d.ksh \
+ tst.InvalidId3.d.ksh \
+ tst.InvalidModule1.d.ksh \
+ tst.InvalidModule2.d.ksh \
+ tst.InvalidModule3.d.ksh \
+ tst.InvalidModule4.d.ksh \
+ tst.InvalidProbeIdentifier.d.ksh \
+ tst.InvalidProvider1.d.ksh \
+ tst.InvalidProvider2.d.ksh \
+ tst.InvalidProvider3.d.ksh \
+ tst.InvalidProvider4.d.ksh \
+ tst.InvalidTraceFunc1.d.ksh \
+ tst.InvalidTraceFunc2.d.ksh \
+ tst.InvalidTraceFunc3.d.ksh \
+ tst.InvalidTraceFunc4.d.ksh \
+ tst.InvalidTraceFunc5.d.ksh \
+ tst.InvalidTraceFunc6.d.ksh \
+ tst.InvalidTraceFunc7.d.ksh \
+ tst.InvalidTraceFunc8.d.ksh \
+ tst.InvalidTraceFunc9.d.ksh \
+ tst.InvalidTraceID1.d.ksh \
+ tst.InvalidTraceID2.d.ksh \
+ tst.InvalidTraceID3.d.ksh \
+ tst.InvalidTraceID4.d.ksh \
+ tst.InvalidTraceID5.d.ksh \
+ tst.InvalidTraceID6.d.ksh \
+ tst.InvalidTraceID7.d.ksh \
+ tst.InvalidTraceModule1.d.ksh \
+ tst.InvalidTraceModule2.d.ksh \
+ tst.InvalidTraceModule3.d.ksh \
+ tst.InvalidTraceModule4.d.ksh \
+ tst.InvalidTraceModule5.d.ksh \
+ tst.InvalidTraceModule6.d.ksh \
+ tst.InvalidTraceModule7.d.ksh \
+ tst.InvalidTraceModule8.d.ksh \
+ tst.InvalidTraceName1.d.ksh \
+ tst.InvalidTraceName2.d.ksh \
+ tst.InvalidTraceName3.d.ksh \
+ tst.InvalidTraceName4.d.ksh \
+ tst.InvalidTraceName5.d.ksh \
+ tst.InvalidTraceName6.d.ksh \
+ tst.InvalidTraceName7.d.ksh \
+ tst.InvalidTraceName8.d.ksh \
+ tst.InvalidTraceName9.d.ksh \
+ tst.InvalidTraceProvider1.d.ksh \
+ tst.InvalidTraceProvider2.d.ksh \
+ tst.InvalidTraceProvider3.d.ksh \
+ tst.InvalidTraceProvider4.d.ksh \
+ tst.InvalidTraceProvider5.d.ksh \
+ tst.MultipleInvalidProbeId.d.ksh \
+ tst.PreprocessorStatement.d.ksh \
+ tst.QuietMode.d.ksh \
+ tst.QuietMode.d.ksh.out \
+ tst.TestCompile.d.ksh \
+ tst.TestCompile.d.ksh.out \
+ tst.UnDefineNameWithCPP.d.ksh \
+ tst.ZeroFunctionProbes.d.ksh \
+ tst.ZeroFunctionProbes.d.ksh.out \
+ tst.ZeroModuleProbes.d.ksh \
+ tst.ZeroModuleProbes.d.ksh.out \
+ tst.ZeroNameProbes.d.ksh \
+ tst.ZeroNameProbes.d.ksh.out \
+ tst.ZeroProbeIdentfier.d.ksh \
+ tst.ZeroProbesWithoutZ.d.ksh \
+ tst.ZeroProviderProbes.d.ksh \
+ tst.ZeroProviderProbes.d.ksh.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/end/Makefile b/cddl/usr.sbin/dtrace/tests/common/end/Makefile
new file mode 100644
index 0000000..120a0dd
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/end/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_IDENT_UNDEF.timespent.d \
+ tst.end.d \
+ tst.endwithoutbegin.d \
+ tst.multibeginend.d \
+ tst.multiend.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/enum/Makefile b/cddl/usr.sbin/dtrace/tests/common/enum/Makefile
new file mode 100644
index 0000000..ee6ab1a
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/enum/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_DECL_IDRED.EnumSameName.d \
+ err.D_UNKNOWN.RepeatIdentifiers.d \
+ tst.EnumEquality.d \
+ tst.EnumSameValue.d \
+ tst.EnumValAssign.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/error/Makefile b/cddl/usr.sbin/dtrace/tests/common/error/Makefile
new file mode 100644
index 0000000..999e28c
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/error/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.DTRACEFLT_BADADDR.d \
+ tst.DTRACEFLT_DIVZERO.d \
+ tst.DTRACEFLT_UNKNOWN.d \
+ tst.error.d \
+ tst.errorend.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/exit/Makefile b/cddl/usr.sbin/dtrace/tests/common/exit/Makefile
new file mode 100644
index 0000000..d5aa843
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/exit/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PROTO_LEN.noarg.d \
+ err.exitarg1.d \
+ tst.basic1.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile b/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile
new file mode 100644
index 0000000..a84c38d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/fbtprovider/Makefile
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PDESC_ZERO.notreturn.d \
+ tst.basic.d \
+ tst.functionentry.d \
+ tst.functionreturnvalue.d \
+ tst.ioctlargs.d \
+ tst.offset.d \
+ tst.offsetzero.d \
+ tst.return.d \
+ tst.return0.d \
+ tst.tailcall.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/funcs/Makefile b/cddl/usr.sbin/dtrace/tests/common/funcs/Makefile
new file mode 100644
index 0000000..4a76912
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/funcs/Makefile
@@ -0,0 +1,113 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_FUNC_UNDEF.progenyofbad1.d \
+ err.D_OP_VFPTR.badop.d \
+ err.D_PROTO_ARG.chillbadarg.d \
+ err.D_PROTO_ARG.copyoutbadarg.d \
+ err.D_PROTO_ARG.mobadarg.d \
+ err.D_PROTO_ARG.raisebadarg.d \
+ err.D_PROTO_ARG.tolower.d \
+ err.D_PROTO_ARG.toupper.d \
+ err.D_PROTO_LEN.allocanoarg.d \
+ err.D_PROTO_LEN.badbreakpoint.d \
+ err.D_PROTO_LEN.chilltoofew.d \
+ err.D_PROTO_LEN.chilltoomany.d \
+ err.D_PROTO_LEN.copyoutstrbadarg.d \
+ err.D_PROTO_LEN.copyoutstrtoofew.d \
+ err.D_PROTO_LEN.copyouttoofew.d \
+ err.D_PROTO_LEN.copyouttoomany.d \
+ err.D_PROTO_LEN.motoofew.d \
+ err.D_PROTO_LEN.motoomany.d \
+ err.D_PROTO_LEN.mtabadarg.d \
+ err.D_PROTO_LEN.mtatoofew.d \
+ err.D_PROTO_LEN.mtatoomany.d \
+ err.D_PROTO_LEN.panicbadarg.d \
+ err.D_PROTO_LEN.progenyofbad2.d \
+ err.D_PROTO_LEN.stopbadarg.d \
+ err.D_PROTO_LEN.tolower.d \
+ err.D_PROTO_LEN.tolowertoomany.d \
+ err.D_PROTO_LEN.toupper.d \
+ err.D_PROTO_LEN.touppertoomany.d \
+ err.D_STRINGOF_TYPE.badstringof.d \
+ err.D_VAR_UNDEF.badvar.d \
+ err.badalloca.d \
+ err.badalloca2.d \
+ err.badbcopy.d \
+ err.badbcopy1.d \
+ err.badbcopy2.d \
+ err.badbcopy3.d \
+ err.badbcopy4.d \
+ err.badbcopy5.d \
+ err.badbcopy6.d \
+ err.badchill.d \
+ err.chillbadarg.ksh \
+ err.copyout.d \
+ err.copyoutbadaddr.ksh \
+ err.copyoutstrbadaddr.ksh \
+ err.inet_ntoa6badaddr.d \
+ err.inet_ntoabadaddr.d \
+ err.inet_ntopbadaddr.d \
+ err.inet_ntopbadarg.d \
+ tst.badfreopen.ksh \
+ tst.basename.d \
+ tst.basename.d.out \
+ tst.bcopy.d \
+ tst.chill.ksh \
+ tst.cleanpath.d \
+ tst.cleanpath.d.out \
+ tst.copyin.d \
+ tst.copyinto.d \
+ tst.ddi_pathname.d \
+ tst.default.d \
+ tst.freopen.ksh \
+ tst.ftruncate.ksh \
+ tst.ftruncate.ksh.out \
+ tst.hton.d \
+ tst.index.d \
+ tst.index.d.out \
+ tst.inet_ntoa.d \
+ tst.inet_ntoa.d.out \
+ tst.inet_ntoa6.d \
+ tst.inet_ntoa6.d.out \
+ tst.inet_ntop.d \
+ tst.inet_ntop.d.out \
+ tst.lltostr.d \
+ tst.lltostr.d.out \
+ tst.lltostrbase.d \
+ tst.lltostrbase.d.out \
+ tst.mutex_owned.d \
+ tst.mutex_owner.d \
+ tst.mutex_type_adaptive.d \
+ tst.progenyof.d \
+ tst.rand.d \
+ tst.strchr.d \
+ tst.strchr.d.out \
+ tst.strjoin.d \
+ tst.strjoin.d.out \
+ tst.strstr.d \
+ tst.strstr.d.out \
+ tst.strtok.d \
+ tst.strtok.d.out \
+ tst.strtok_null.d \
+ tst.substr.d \
+ tst.substr.d.out \
+ tst.substrminate.d \
+ tst.substrminate.d.out \
+ tst.system.d \
+ tst.system.d.out \
+ tst.tolower.d \
+ tst.toupper.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/grammar/Makefile b/cddl/usr.sbin/dtrace/tests/common/grammar/Makefile
new file mode 100644
index 0000000..e1854ae
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/grammar/Makefile
@@ -0,0 +1,20 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_ADDROF_LVAL.d \
+ err.D_EMPTY.empty.d \
+ tst.clauses.d \
+ tst.stmts.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/include/Makefile b/cddl/usr.sbin/dtrace/tests/common/include/Makefile
new file mode 100644
index 0000000..b5002e9
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/include/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.includefirst.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/inline/Makefile b/cddl/usr.sbin/dtrace/tests/common/inline/Makefile
new file mode 100644
index 0000000..7f848fd
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/inline/Makefile
@@ -0,0 +1,28 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_DECL_IDRED.redef1.d \
+ err.D_DECL_IDRED.redef2.d \
+ err.D_IDENT_UNDEF.recur.d \
+ err.D_OP_INCOMPAT.baddef1.d \
+ err.D_OP_INCOMPAT.baddef2.d \
+ err.D_OP_INCOMPAT.badxlate.d \
+ tst.InlineDataAssign.d \
+ tst.InlineExpression.d \
+ tst.InlineKinds.d \
+ tst.InlineKinds.d.out \
+ tst.InlineTypedef.d \
+ tst.InlineWritableAssign.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/io/Makefile b/cddl/usr.sbin/dtrace/tests/common/io/Makefile
new file mode 100644
index 0000000..ad62351
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/io/Makefile
@@ -0,0 +1,18 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.fds.d \
+ tst.fds.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.fds.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/ip/Makefile b/cddl/usr.sbin/dtrace/tests/common/ip/Makefile
new file mode 100644
index 0000000..369068a
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/ip/Makefile
@@ -0,0 +1,36 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.ipv4localicmp.ksh \
+ tst.ipv4localicmp.ksh.out \
+ tst.ipv4localtcp.ksh \
+ tst.ipv4localtcp.ksh.out \
+ tst.ipv4localudp.ksh \
+ tst.ipv4localudp.ksh.out \
+ tst.ipv4remoteicmp.ksh \
+ tst.ipv4remoteicmp.ksh.out \
+ tst.ipv4remotetcp.ksh \
+ tst.ipv4remotetcp.ksh.out \
+ tst.ipv4remoteudp.ksh \
+ tst.ipv4remoteudp.ksh.out \
+ tst.ipv6localicmp.ksh \
+ tst.ipv6localicmp.ksh.out \
+ tst.ipv6remoteicmp.ksh \
+ tst.ipv6remoteicmp.ksh.out \
+ tst.localtcpstate.ksh \
+ tst.localtcpstate.ksh.out \
+ tst.remotetcpstate.ksh \
+ tst.remotetcpstate.ksh.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/java_api/Makefile b/cddl/usr.sbin/dtrace/tests/common/java_api/Makefile
new file mode 100644
index 0000000..4ef225a
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/java_api/Makefile
@@ -0,0 +1,44 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.Abort.ksh \
+ tst.Abort.ksh.out \
+ tst.Bean.ksh \
+ tst.Bean.ksh.out \
+ tst.Close.ksh \
+ tst.Close.ksh.out \
+ tst.Drop.ksh \
+ tst.Drop.ksh.out \
+ tst.Enable.ksh \
+ tst.Enable.ksh.out \
+ tst.FunctionLookup.ksh \
+ tst.FunctionLookup.ksh.out \
+ tst.GetAggregate.ksh \
+ tst.MaxConsumers.ksh \
+ tst.MaxConsumers.ksh.out \
+ tst.MultiAggPrinta.ksh \
+ tst.MultiAggPrinta.ksh.out \
+ tst.ProbeData.ksh \
+ tst.ProbeData.ksh.out \
+ tst.ProbeDescription.ksh \
+ tst.ProbeDescription.ksh.out \
+ tst.StateMachine.ksh \
+ tst.StateMachine.ksh.out \
+ tst.StopLock.ksh \
+ tst.StopLock.ksh.out \
+ tst.printa.d \
+ tst.printa.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.FunctionLookup.c \
+ tst.ProbeData.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/json/Makefile b/cddl/usr.sbin/dtrace/tests/common/json/Makefile
new file mode 100644
index 0000000..160fcae
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/json/Makefile
@@ -0,0 +1,23 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.general.d \
+ tst.general.d.out \
+ tst.strsize.d \
+ tst.strsize.d.out \
+ tst.usdt.d \
+ tst.usdt.d.out \
+ usdt.d \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.usdt.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/lexer/Makefile b/cddl/usr.sbin/dtrace/tests/common/lexer/Makefile
new file mode 100644
index 0000000..39063e4
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/lexer/Makefile
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_CHR_NL.char.d \
+ err.D_CHR_NULL.char.d \
+ err.D_INT_DIGIT.InvalidDigit.d \
+ err.D_INT_OFLOW.BigInt.d \
+ err.D_STR_NL.string.d \
+ err.D_SYNTAX.brace1.d \
+ err.D_SYNTAX.brace2.d \
+ err.D_SYNTAX.brack1.d \
+ err.D_SYNTAX.brack2.d \
+ err.D_SYNTAX.brack3.d \
+ err.D_SYNTAX.paren1.d \
+ err.D_SYNTAX.paren2.d \
+ err.D_SYNTAX.paren3.d \
+ tst.D_MACRO_OFLOW.ParIntOvflow.d.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/llquantize/Makefile b/cddl/usr.sbin/dtrace/tests/common/llquantize/Makefile
new file mode 100644
index 0000000..1f33e8a
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/llquantize/Makefile
@@ -0,0 +1,50 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_LLQUANT_FACTOREVEN.nodivide.d \
+ err.D_LLQUANT_FACTOREVEN.notfactor.d \
+ err.D_LLQUANT_FACTORMATCH.d \
+ err.D_LLQUANT_FACTORNSTEPS.d \
+ err.D_LLQUANT_FACTORSMALL.d \
+ err.D_LLQUANT_FACTORTYPE.d \
+ err.D_LLQUANT_FACTORVAL.d \
+ err.D_LLQUANT_HIGHMATCH.d \
+ err.D_LLQUANT_HIGHTYPE.d \
+ err.D_LLQUANT_HIGHVAL.d \
+ err.D_LLQUANT_LOWMATCH.d \
+ err.D_LLQUANT_LOWTYPE.d \
+ err.D_LLQUANT_LOWVAL.d \
+ err.D_LLQUANT_MAGRANGE.d \
+ err.D_LLQUANT_MAGTOOBIG.d \
+ err.D_LLQUANT_NSTEPMATCH.d \
+ err.D_LLQUANT_NSTEPTYPE.d \
+ err.D_LLQUANT_NSTEPVAL.d \
+ tst.bases.d \
+ tst.bases.d.out \
+ tst.basic.d \
+ tst.basic.d.out \
+ tst.negorder.d \
+ tst.negorder.d.out \
+ tst.negvalue.d \
+ tst.negvalue.d.out \
+ tst.normal.d \
+ tst.normal.d.out \
+ tst.range.d \
+ tst.range.d.out \
+ tst.steps.d \
+ tst.steps.d.out \
+ tst.trunc.d \
+ tst.trunc.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/mdb/Makefile b/cddl/usr.sbin/dtrace/tests/common/mdb/Makefile
new file mode 100644
index 0000000..24a3f88
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/mdb/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.dtracedcmd.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/mib/Makefile b/cddl/usr.sbin/dtrace/tests/common/mib/Makefile
new file mode 100644
index 0000000..ef3a05d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/mib/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.icmp.ksh \
+ tst.tcp.ksh \
+ tst.udp.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/misc/Makefile b/cddl/usr.sbin/dtrace/tests/common/misc/Makefile
new file mode 100644
index 0000000..31de20b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/misc/Makefile
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PRAGMA_OPTSET.d \
+ tst.badopt.d \
+ tst.boolopt.d \
+ tst.boolopt.d.out \
+ tst.dofmax.ksh \
+ tst.dynopt.d \
+ tst.dynopt.d.out \
+ tst.enablerace.ksh \
+ tst.haslam.d \
+ tst.include.ksh \
+ tst.macroglob.ksh \
+ tst.macroglob.ksh.out \
+ tst.roch.d \
+ tst.schrock.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/multiaggs/Makefile b/cddl/usr.sbin/dtrace/tests/common/multiaggs/Makefile
new file mode 100644
index 0000000..e21c90a
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/multiaggs/Makefile
@@ -0,0 +1,34 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PRINTA_AGGKEY.d \
+ err.D_PRINTA_AGGPROTO.d \
+ tst.many.d \
+ tst.many.d.out \
+ tst.same.d \
+ tst.same.d.out \
+ tst.sort.d \
+ tst.sort.d.out \
+ tst.sortpos.d \
+ tst.sortpos.d.out \
+ tst.tuplecompat.d \
+ tst.tuplecompat.d.out \
+ tst.zero.d \
+ tst.zero.d.out \
+ tst.zero2.d \
+ tst.zero2.d.out \
+ tst.zero3.d \
+ tst.zero3.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/nfs/Makefile b/cddl/usr.sbin/dtrace/tests/common/nfs/Makefile
new file mode 100644
index 0000000..446c35e
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/nfs/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.call.d \
+ tst.call3.d \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.call.c \
+ tst.call3.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/offsetof/Makefile b/cddl/usr.sbin/dtrace/tests/common/offsetof/Makefile
new file mode 100644
index 0000000..375aecb
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/offsetof/Makefile
@@ -0,0 +1,28 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_OFFSETOF_BITFIELD.bitfield.d \
+ err.D_OFFSETOF_TYPE.badtype.d \
+ err.D_OFFSETOF_TYPE.notsou.d \
+ err.D_UNKNOWN.OffsetofNULL.d \
+ err.D_UNKNOWN.badmemb.d \
+ tst.OffsetofAlias.d \
+ tst.OffsetofArith.d \
+ tst.OffsetofUnion.d \
+ tst.struct.d \
+ tst.struct.d.out \
+ tst.union.d \
+ tst.union.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/operators/Makefile b/cddl/usr.sbin/dtrace/tests/common/operators/Makefile
new file mode 100644
index 0000000..08bbfe6
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/operators/Makefile
@@ -0,0 +1,18 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.ternary.d \
+ tst.ternary.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/pid/Makefile b/cddl/usr.sbin/dtrace/tests/common/pid/Makefile
new file mode 100644
index 0000000..faa5ac8
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/pid/Makefile
@@ -0,0 +1,69 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PDESC_ZERO.badlib.d \
+ err.D_PDESC_ZERO.badproc1.d \
+ err.D_PROC_BADPID.badproc2.d \
+ err.D_PROC_CREATEFAIL.many.d \
+ err.D_PROC_FUNC.badfunc.d \
+ err.D_PROC_LIB.libdash.d \
+ err.D_PROC_NAME.alldash.d \
+ err.D_PROC_NAME.badname.d \
+ err.D_PROC_NAME.globdash.d \
+ err.D_PROC_OFF.toobig.d \
+ tst.addprobes.ksh \
+ tst.args1.d \
+ tst.coverage.d \
+ tst.emptystack.d \
+ tst.emptystack.d.out \
+ tst.float.d \
+ tst.fork.d \
+ tst.gcc.d \
+ tst.killonerror.ksh \
+ tst.main.ksh \
+ tst.manypids.ksh \
+ tst.newprobes.ksh \
+ tst.newprobes.ksh.out \
+ tst.probemod.ksh \
+ tst.provregex1.ksh \
+ tst.provregex2.ksh \
+ tst.provregex2.ksh.out \
+ tst.provregex3.ksh \
+ tst.provregex3.ksh.out \
+ tst.provregex4.ksh \
+ tst.provregex4.ksh.out \
+ tst.ret1.d \
+ tst.ret2.d \
+ tst.vfork.d \
+ tst.weak1.d \
+ tst.weak2.d \
+
+TESTEXES= \
+ err.D_PDESC_ZERO.badlib.exe \
+ err.D_PROC_CREATEFAIL.many.exe \
+ err.D_PROC_FUNC.badfunc.exe \
+ err.D_PROC_LIB.libdash.exe \
+ err.D_PROC_NAME.alldash.exe \
+ err.D_PROC_NAME.badname.exe \
+ err.D_PROC_NAME.globdash.exe \
+ err.D_PROC_OFF.toobig.exe \
+ tst.coverage.exe \
+ tst.emptystack.exe \
+
+CFILES= \
+ tst.args1.c \
+ tst.float.c \
+ tst.fork.c \
+ tst.gcc.c \
+ tst.ret1.c \
+ tst.ret2.c \
+ tst.vfork.c \
+ tst.weak1.c \
+ tst.weak2.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/plockstat/Makefile b/cddl/usr.sbin/dtrace/tests/common/plockstat/Makefile
new file mode 100644
index 0000000..0f36f34
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/plockstat/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.available.d \
+ tst.libmap.d \
+
+TESTEXES= \
+ tst.available.exe \
+ tst.libmap.exe \
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/pointers/Makefile b/cddl/usr.sbin/dtrace/tests/common/pointers/Makefile
new file mode 100644
index 0000000..2953c54
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/pointers/Makefile
@@ -0,0 +1,48 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.BadAlign.d \
+ err.D_ADDROF_VAR.ArrayVar.d \
+ err.D_ADDROF_VAR.DynamicVar.d \
+ err.D_ADDROF_VAR.agg.d \
+ err.D_DEREF_NONPTR.noptr.d \
+ err.D_DEREF_VOID.VoidPointerDeref.d \
+ err.D_OP_ARRFUN.ArrayAssignment.d \
+ err.D_OP_INCOMPAT.VoidPointerArith.d \
+ err.D_OP_LVAL.AddressChange.d \
+ err.D_OP_PTR.NonPointerAccess.d \
+ err.D_OP_PTR.badpointer.d \
+ err.D_OP_SOU.BadPointerAccess.d \
+ err.D_OP_SOU.badpointer.d \
+ err.InvalidAddress1.d \
+ err.InvalidAddress2.d \
+ err.InvalidAddress3.d \
+ err.InvalidAddress4.d \
+ err.InvalidAddress5.d \
+ tst.ArrayPointer1.d \
+ tst.ArrayPointer2.d \
+ tst.ArrayPointer3.d \
+ tst.GlobalVar.d \
+ tst.IntegerArithmetic1.d \
+ tst.PointerArithmetic1.d \
+ tst.PointerArithmetic2.d \
+ tst.PointerArithmetic3.d \
+ tst.PointerAssignment.d \
+ tst.ValidPointer1.d \
+ tst.ValidPointer2.d \
+ tst.VoidCast.d \
+ tst.basic1.d \
+ tst.basic2.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/pragma/Makefile b/cddl/usr.sbin/dtrace/tests/common/pragma/Makefile
new file mode 100644
index 0000000..86010ac
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/pragma/Makefile
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PRAGERR.d \
+ err.D_PRAGMA_DEPEND.main.d \
+ err.D_PRAGMA_INVAL.d \
+ err.D_PRAGMA_MALFORM.d \
+ err.D_PRAGMA_UNUSED.UnusedPragma.d \
+ err.circlibdep.ksh \
+ err.invalidlibdep.ksh \
+ tst.libchain.ksh \
+ tst.libdep.ksh \
+ tst.libdepfullyconnected.ksh \
+ tst.libdepsepdir.ksh \
+ tst.temporal.ksh \
+ tst.temporal2.ksh \
+ tst.temporal3.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/predicates/Makefile b/cddl/usr.sbin/dtrace/tests/common/predicates/Makefile
new file mode 100644
index 0000000..67cfabe
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/predicates/Makefile
@@ -0,0 +1,25 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PRED_SCALAR.NonScalarPred.d \
+ err.D_SYNTAX.invalid.d \
+ err.D_SYNTAX.operr.d \
+ tst.argsnotcached.d \
+ tst.basics.d \
+ tst.basics.d.out \
+ tst.complex.d \
+ tst.complex.d.out \
+ tst.predcache.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/preprocessor/Makefile b/cddl/usr.sbin/dtrace/tests/common/preprocessor/Makefile
new file mode 100644
index 0000000..8108375
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/preprocessor/Makefile
@@ -0,0 +1,53 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_IDENT_UNDEF.afterprobe.d \
+ err.D_PRAGCTL_INVAL.tabdefine.d \
+ err.D_SYNTAX.withoutpound.d \
+ err.defincomp.d \
+ err.ifdefelsenotendif.d \
+ err.ifdefincomp.d \
+ err.ifdefnotendif.d \
+ err.incompelse.d \
+ err.mulelse.d \
+ tst.ifdef.d \
+ tst.ifdef.d.out \
+ tst.ifndef.d \
+ tst.ifndef.d.out \
+ tst.ifnotdef.d \
+ tst.ifnotdef.d.out \
+ tst.logicaland.d \
+ tst.logicaland.d.out \
+ tst.logicalandor.d \
+ tst.logicalandor.d.out \
+ tst.logicalor.d \
+ tst.logicalor.d.out \
+ tst.muland.d \
+ tst.muland.d.out \
+ tst.mulor.d \
+ tst.mulor.d.out \
+ tst.precondi.d \
+ tst.precondi.d.out \
+ tst.predicatedeclare.d \
+ tst.preexp.d \
+ tst.preexp.d.out \
+ tst.preexpelse.d \
+ tst.preexpelse.d.out \
+ tst.preexpif.d \
+ tst.preexpif.d.out \
+ tst.preexpifelse.d \
+ tst.preexpifelse.d.out \
+ tst.withinprobe.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/print/Makefile b/cddl/usr.sbin/dtrace/tests/common/print/Makefile
new file mode 100644
index 0000000..4360794
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/print/Makefile
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PRINT_AGG.bad.d \
+ err.D_PRINT_VOID.bad.d \
+ err.D_PROTO_LEN.bad.d \
+ tst.array.d \
+ tst.array.d.out \
+ tst.bitfield.d \
+ tst.bitfield.d.out \
+ tst.dyn.d \
+ tst.enum.d \
+ tst.enum.d.out \
+ tst.primitive.d \
+ tst.primitive.d.out \
+ tst.struct.d \
+ tst.struct.d.out \
+ tst.xlate.d \
+ tst.xlate.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/printa/Makefile b/cddl/usr.sbin/dtrace/tests/common/printa/Makefile
new file mode 100644
index 0000000..c972db3
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/printa/Makefile
@@ -0,0 +1,40 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PRINTA_AGGARG.badagg.d \
+ err.D_PRINTA_AGGARG.badfmt.d \
+ err.D_PRINTA_AGGARG.badval.d \
+ err.D_PRINTA_PROTO.bad.d \
+ err.D_PRINTF_ARG_TYPE.jstack.d \
+ err.D_PRINTF_ARG_TYPE.stack.d \
+ err.D_PRINTF_ARG_TYPE.ustack.d \
+ tst.basics.d \
+ tst.basics.d.out \
+ tst.def.d \
+ tst.def.d.out \
+ tst.dynwidth.d \
+ tst.dynwidth.d.out \
+ tst.fmt.d \
+ tst.fmt.d.out \
+ tst.largeusersym.ksh \
+ tst.many.d \
+ tst.manyval.d \
+ tst.manyval.d.out \
+ tst.stack.d \
+ tst.tuple.d \
+ tst.tuple.d.out \
+ tst.walltimestamp.ksh \
+ tst.walltimestamp.ksh.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/printf/Makefile b/cddl/usr.sbin/dtrace/tests/common/printf/Makefile
new file mode 100644
index 0000000..d4658b1
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/printf/Makefile
@@ -0,0 +1,68 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PRINTF_AGG_CONV.aggfmt.d \
+ err.D_PRINTF_ARG_EXTRA.toomany.d \
+ err.D_PRINTF_ARG_EXTRA.widths.d \
+ err.D_PRINTF_ARG_FMT.badfmt.d \
+ err.D_PRINTF_ARG_PROTO.novalue.d \
+ err.D_PRINTF_ARG_TYPE.aggarg.d \
+ err.D_PRINTF_ARG_TYPE.recursive.d \
+ err.D_PRINTF_DYN_PROTO.noprec.d \
+ err.D_PRINTF_DYN_PROTO.nowidth.d \
+ err.D_PRINTF_DYN_TYPE.badprec.d \
+ err.D_PRINTF_DYN_TYPE.badwidth.d \
+ err.D_PROTO_LEN.toofew.d \
+ err.D_SYNTAX.badconv1.d \
+ err.D_SYNTAX.badconv2.d \
+ err.D_SYNTAX.badconv3.d \
+ tst.basics.d \
+ tst.basics.d.out \
+ tst.flags.d \
+ tst.flags.d.out \
+ tst.hello.d \
+ tst.hello.d.out \
+ tst.ints.d \
+ tst.ints.d.out \
+ tst.precs.d \
+ tst.precs.d.out \
+ tst.print-f.d \
+ tst.print-f.d.out \
+ tst.printT.ksh \
+ tst.printT.ksh.out \
+ tst.printY.ksh \
+ tst.printY.ksh.out \
+ tst.printcont.d \
+ tst.printcont.d.out \
+ tst.printeE.d \
+ tst.printeE.d.out \
+ tst.printgG.d \
+ tst.printgG.d.out \
+ tst.rawfmt.d \
+ tst.rawfmt.d.out \
+ tst.signs.d \
+ tst.signs.d.out \
+ tst.str.d \
+ tst.str.d.out \
+ tst.sym.d \
+ tst.sym.d.out \
+ tst.uints.d \
+ tst.uints.d.out \
+ tst.widths.d \
+ tst.widths.d.out \
+ tst.widths1.d \
+ tst.wp.d \
+ tst.wp.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/privs/Makefile b/cddl/usr.sbin/dtrace/tests/common/privs/Makefile
new file mode 100644
index 0000000..02cd83b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/privs/Makefile
@@ -0,0 +1,24 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.fds.ksh \
+ tst.func_access.ksh \
+ tst.getf.ksh \
+ tst.kpriv.ksh \
+ tst.op_access.ksh \
+ tst.procpriv.ksh \
+ tst.providers.ksh \
+ tst.unpriv_funcs.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/probes/Makefile b/cddl/usr.sbin/dtrace/tests/common/probes/Makefile
new file mode 100644
index 0000000..463290b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/probes/Makefile
@@ -0,0 +1,36 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PDESC_ZERO.probeqtn.d \
+ err.D_PDESC_ZERO.probestar.d \
+ err.D_PDESC_ZERO.tickstar.d \
+ err.D_SYNTAX.assign.d \
+ err.D_SYNTAX.declare.d \
+ err.D_SYNTAX.declarein.d \
+ err.D_SYNTAX.lbraces.d \
+ err.D_SYNTAX.probespec.d \
+ err.D_SYNTAX.rbraces.d \
+ err.D_SYNTAX.recdec.d \
+ tst.basic1.d \
+ tst.check.d \
+ tst.declare.d \
+ tst.declareafter.d \
+ tst.emptyprobe.d \
+ tst.pragma.d \
+ tst.pragmaaftertab.d \
+ tst.pragmainside.d \
+ tst.pragmaoutside.d \
+ tst.probestar.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/proc/Makefile b/cddl/usr.sbin/dtrace/tests/common/proc/Makefile
new file mode 100644
index 0000000..5ab672b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/proc/Makefile
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.create.ksh \
+ tst.discard.ksh \
+ tst.exec.ksh \
+ tst.execfail.ENOENT.ksh \
+ tst.execfail.ksh \
+ tst.exitcore.ksh \
+ tst.exitexit.ksh \
+ tst.exitkilled.ksh \
+ tst.signal.ksh \
+ tst.sigwait.d \
+ tst.startexit.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.sigwait.c \
+
+
+LDADD.tst.sigwait.exe+= -lrt
+DPADD.tst.sigwait.exe+= ${LIBRT}
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/profile-n/Makefile b/cddl/usr.sbin/dtrace/tests/common/profile-n/Makefile
new file mode 100644
index 0000000..cb6ad9f
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/profile-n/Makefile
@@ -0,0 +1,53 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PDESC_ZERO.profile.d \
+ err.D_PDESC_ZEROonens.d \
+ err.D_PDESC_ZEROonensec.d \
+ err.D_PDESC_ZEROoneus.d \
+ err.D_PDESC_ZEROoneusec.d \
+ tst.argtest.d \
+ tst.argtest.d.out \
+ tst.basic.d \
+ tst.basic.d.out \
+ tst.func.ksh \
+ tst.mod.ksh \
+ tst.profilehz.d \
+ tst.profilehz.d.out \
+ tst.profilems.d \
+ tst.profilems.d.out \
+ tst.profilemsec.d \
+ tst.profilemsec.d.out \
+ tst.profilenhz.d \
+ tst.profilenhz.d.out \
+ tst.profilens.d \
+ tst.profilens.d.out \
+ tst.profilensec.d \
+ tst.profilensec.d.out \
+ tst.profiles.d \
+ tst.profiles.d.out \
+ tst.profilesec.d \
+ tst.profilesec.d.out \
+ tst.profileus.d \
+ tst.profileus.d.out \
+ tst.profileusec.d \
+ tst.profileusec.d.out \
+ tst.sym.ksh \
+ tst.ufunc.ksh \
+ tst.ufuncsort.ksh \
+ tst.ufuncsort.ksh.out \
+ tst.umod.ksh \
+ tst.usym.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.ufuncsort.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/providers/Makefile b/cddl/usr.sbin/dtrace/tests/common/providers/Makefile
new file mode 100644
index 0000000..763d60b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/providers/Makefile
@@ -0,0 +1,44 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PDESC_INVAL.wrongdec4.d \
+ err.D_PDESC_ZERO.nonprofile.d \
+ err.D_PDESC_ZERO.wrongdec1.d \
+ err.D_PDESC_ZERO.wrongdec2.d \
+ err.D_PDESC_ZERO.wrongdec3.d \
+ tst.basics.d \
+ tst.basics.d.out \
+ tst.beginexit.d \
+ tst.beginprof.d \
+ tst.beginprof.d.out \
+ tst.probattrs.d \
+ tst.probattrs.d.out \
+ tst.probefunc.d \
+ tst.probefunc.d.out \
+ tst.probemod.d \
+ tst.probemod.d.out \
+ tst.probename.d \
+ tst.probename.d.out \
+ tst.probprov.d \
+ tst.probprov.d.out \
+ tst.profend.d \
+ tst.profend.d.out \
+ tst.profexit.d \
+ tst.profexit.d.out \
+ tst.trace.d \
+ tst.trace.d.out \
+ tst.twoprof.d \
+ tst.twoprof.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/raise/Makefile b/cddl/usr.sbin/dtrace/tests/common/raise/Makefile
new file mode 100644
index 0000000..f84ac52
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/raise/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.raise1.d \
+ tst.raise2.d \
+ tst.raise3.d \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.raise1.c \
+ tst.raise2.c \
+ tst.raise3.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/rates/Makefile b/cddl/usr.sbin/dtrace/tests/common/rates/Makefile
new file mode 100644
index 0000000..a3f54f5
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/rates/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.aggrate.d \
+ tst.aggrate.d.out \
+ tst.statusrate.d \
+ tst.switchrate.d \
+ tst.switchrate.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/safety/Makefile b/cddl/usr.sbin/dtrace/tests/common/safety/Makefile
new file mode 100644
index 0000000..0e88ea3
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/safety/Makefile
@@ -0,0 +1,54 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.basename.d \
+ tst.caller.d \
+ tst.cleanpath.d \
+ tst.copyin.d \
+ tst.copyin2.d \
+ tst.ddi_pathname.d \
+ tst.dirname.d \
+ tst.errno.d \
+ tst.execname.d \
+ tst.gid.d \
+ tst.hton.d \
+ tst.index.d \
+ tst.msgdsize.d \
+ tst.msgsize.d \
+ tst.null.d \
+ tst.pid.d \
+ tst.ppid.d \
+ tst.progenyof.d \
+ tst.random.d \
+ tst.rw.d \
+ tst.shortstr.d \
+ tst.stack.d \
+ tst.stackdepth.d \
+ tst.stddev.d \
+ tst.strchr.d \
+ tst.strjoin.d \
+ tst.strstr.d \
+ tst.strtok.d \
+ tst.substr.d \
+ tst.ucaller.d \
+ tst.uid.d \
+ tst.unalign.d \
+ tst.uregs.d \
+ tst.ustack.d \
+ tst.ustackdepth.d \
+ tst.vahole.d \
+ tst.violentdeath.ksh \
+ tst.zonename.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/scalars/Makefile b/cddl/usr.sbin/dtrace/tests/common/scalars/Makefile
new file mode 100644
index 0000000..2f471a6
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/scalars/Makefile
@@ -0,0 +1,37 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_ARR_LOCAL.thisarray.d \
+ err.D_DECL_CLASS.selfthis.d \
+ err.D_DECL_CLASS.thisself.d \
+ err.D_DECL_IDRED.errval.d \
+ err.D_OP_INCOMPAT.dec.err.d \
+ err.D_OP_INCOMPAT.dupgtype.d \
+ err.D_OP_INCOMPAT.dupltype.d \
+ err.D_OP_INCOMPAT.dupttype.d \
+ err.D_SYNTAX.declare.d \
+ err.bigglobal.d \
+ err.biglocal.d \
+ tst.basicvar.d \
+ tst.basicvar.d.out \
+ tst.localvar.d \
+ tst.misc.d \
+ tst.self.d \
+ tst.selfarray.d \
+ tst.selfarray2.d \
+ tst.selfthis.d \
+ tst.this.d \
+ tst.thisself.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/sched/Makefile b/cddl/usr.sbin/dtrace/tests/common/sched/Makefile
new file mode 100644
index 0000000..adf8c98
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/sched/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.enqueue.d \
+ tst.oncpu.d \
+ tst.stackdepth.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/scripting/Makefile b/cddl/usr.sbin/dtrace/tests/common/scripting/Makefile
new file mode 100644
index 0000000..0bb10cf
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/scripting/Makefile
@@ -0,0 +1,49 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_MACRO_UNDEF.invalidargs.d \
+ err.D_OP_LVAL.rdonly.d \
+ err.D_OP_WRITE.usepidmacro.d \
+ err.D_SYNTAX.concat.d \
+ err.D_SYNTAX.desc.d \
+ err.D_SYNTAX.inval.d \
+ err.D_SYNTAX.pid.d \
+ tst.D_MACRO_UNUSED.overflow.ksh \
+ tst.arg0.d \
+ tst.arguments.ksh \
+ tst.assign.d \
+ tst.basic.d \
+ tst.egid.d \
+ tst.egid.ksh \
+ tst.euid.d \
+ tst.euid.ksh \
+ tst.gid.d \
+ tst.gid.ksh \
+ tst.pgid.d \
+ tst.pid.d \
+ tst.ppid.d \
+ tst.ppid.ksh \
+ tst.projid.d \
+ tst.projid.ksh \
+ tst.quite.d \
+ tst.sid.d \
+ tst.sid.ksh \
+ tst.stringmacro.ksh \
+ tst.taskid.d \
+ tst.taskid.ksh \
+ tst.trace.d \
+ tst.uid.d \
+ tst.uid.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/sdt/Makefile b/cddl/usr.sbin/dtrace/tests/common/sdt/Makefile
new file mode 100644
index 0000000..598cc69
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/sdt/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.sdtargs.d \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.sdtargs.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/sizeof/Makefile b/cddl/usr.sbin/dtrace/tests/common/sizeof/Makefile
new file mode 100644
index 0000000..6b146b0
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/sizeof/Makefile
@@ -0,0 +1,31 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_IDENT_BADREF.SizeofAssoc.d \
+ err.D_IDENT_UNDEF.UnknownSymbol.d \
+ err.D_SIZEOF_TYPE.badstruct.d \
+ err.D_SIZEOF_TYPE.d \
+ err.D_SYNTAX.SizeofBadType.d \
+ tst.SizeofArray.d \
+ tst.SizeofDataTypes.d \
+ tst.SizeofExpression.d \
+ tst.SizeofNULL.d \
+ tst.SizeofStrConst.d \
+ tst.SizeofStrConst.d.out \
+ tst.SizeofString1.d \
+ tst.SizeofString1.d.out \
+ tst.SizeofString2.d \
+ tst.SizeofString2.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/speculation/Makefile b/cddl/usr.sbin/dtrace/tests/common/speculation/Makefile
new file mode 100644
index 0000000..f17ded9
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/speculation/Makefile
@@ -0,0 +1,75 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ bug.1001148.SpecSizeVariations.d \
+ err.BufSizeVariations1.d \
+ err.BufSizeVariations2.d \
+ err.D_ACT_SPEC.SpeculateWithBreakPoint.d \
+ err.D_ACT_SPEC.SpeculateWithChill.d \
+ err.D_ACT_SPEC.SpeculateWithCopyOut.d \
+ err.D_ACT_SPEC.SpeculateWithCopyOutStr.d \
+ err.D_ACT_SPEC.SpeculateWithPanic.d \
+ err.D_ACT_SPEC.SpeculateWithRaise.d \
+ err.D_ACT_SPEC.SpeculateWithStop.d \
+ err.D_AGG_COMM.AggAftCommit.d \
+ err.D_AGG_SPEC.SpeculateWithAvg.d \
+ err.D_AGG_SPEC.SpeculateWithCount.d \
+ err.D_AGG_SPEC.SpeculateWithLquant.d \
+ err.D_AGG_SPEC.SpeculateWithMax.d \
+ err.D_AGG_SPEC.SpeculateWithMin.d \
+ err.D_AGG_SPEC.SpeculateWithQuant.d \
+ err.D_AGG_SPEC.SpeculateWithStddev.d \
+ err.D_AGG_SPEC.SpeculateWithSum.d \
+ err.D_COMM_COMM.CommitAftCommit.d \
+ err.D_COMM_COMM.DisjointCommit.d \
+ err.D_COMM_DREC.CommitAftDataRec.d \
+ err.D_DREC_COMM.DataRecAftCommit.d \
+ err.D_DREC_COMM.ExitAfterCommit.d \
+ err.D_EXIT_SPEC.ExitAftSpec.d \
+ err.D_PRAGMA_MALFORM.NspecExpr.d \
+ err.D_PRAGMA_OPTSET.HugeNspecValue.d \
+ err.D_PRAGMA_OPTSET.InvalidSpecSize.d \
+ err.D_PRAGMA_OPTSET.NegSpecSize.d \
+ err.D_PROTO_LEN.SpecNoId.d \
+ err.D_SPEC_COMM.SpecAftCommit.d \
+ err.D_SPEC_DREC.SpecAftDataRec.d \
+ err.D_SPEC_SPEC.SpecAftSpec.d \
+ err.NegativeBufSize.d \
+ err.NegativeNspec.d \
+ err.NegativeSpecSize.d \
+ err.SpecSizeVariations1.d \
+ err.SpecSizeVariations2.d \
+ tst.CommitAfterDiscard.d \
+ tst.CommitWithZero.d \
+ tst.DataRecAftDiscard.d \
+ tst.DiscardAftCommit.d \
+ tst.DiscardAftDataRec.d \
+ tst.DiscardAftDiscard.d \
+ tst.DiscardWithZero.d \
+ tst.ExitAftDiscard.d \
+ tst.NoSpecBuffer.d \
+ tst.SpecSizeVariations1.d \
+ tst.SpecSizeVariations2.d \
+ tst.SpecSizeVariations3.d \
+ tst.SpeculateWithRandom.d \
+ tst.SpeculationCommit.d \
+ tst.SpeculationDiscard.d \
+ tst.SpeculationID.d \
+ tst.SpeculationWithZero.d \
+ tst.TwoSpecBuffers.d \
+ tst.negcommit.d \
+ tst.negspec.d \
+ tst.zerosize.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/stability/Makefile b/cddl/usr.sbin/dtrace/tests/common/stability/Makefile
new file mode 100644
index 0000000..8fb9afa
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/stability/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_ATTR_MIN.MinAttributes.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/stack/Makefile b/cddl/usr.sbin/dtrace/tests/common/stack/Makefile
new file mode 100644
index 0000000..ca01f42
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/stack/Makefile
@@ -0,0 +1,22 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_STACK_PROTO.bad.d \
+ err.D_STACK_SIZE.d \
+ err.D_USTACK_FRAMES.bad.d \
+ err.D_USTACK_PROTO.bad.d \
+ err.D_USTACK_STRSIZE.bad.d \
+ tst.default.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/stackdepth/Makefile b/cddl/usr.sbin/dtrace/tests/common/stackdepth/Makefile
new file mode 100644
index 0000000..8e94963
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/stackdepth/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.default.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/stop/Makefile b/cddl/usr.sbin/dtrace/tests/common/stop/Makefile
new file mode 100644
index 0000000..a03d9aa
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/stop/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.stop1.d \
+ tst.stop2.d \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.stop1.c \
+ tst.stop2.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/strlen/Makefile b/cddl/usr.sbin/dtrace/tests/common/strlen/Makefile
new file mode 100644
index 0000000..0fec541
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/strlen/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.strlen1.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/strtoll/Makefile b/cddl/usr.sbin/dtrace/tests/common/strtoll/Makefile
new file mode 100644
index 0000000..8af2d41
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/strtoll/Makefile
@@ -0,0 +1,20 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.BaseTooLarge.d \
+ err.BaseTooSmall.d \
+ tst.strtoll.d \
+ tst.strtoll.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/struct/Makefile b/cddl/usr.sbin/dtrace/tests/common/struct/Makefile
new file mode 100644
index 0000000..fb039f2
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/struct/Makefile
@@ -0,0 +1,31 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_ADDROF_VAR.StructPointer.d \
+ err.D_DECL_COMBO.StructWithoutColon.d \
+ err.D_DECL_COMBO.StructWithoutColon1.d \
+ err.D_DECL_INCOMPLETE.circular.d \
+ err.D_DECL_INCOMPLETE.order.d \
+ err.D_DECL_INCOMPLETE.order2.d \
+ err.D_DECL_INCOMPLETE.recursive.d \
+ err.D_DECL_INCOMPLETE.simple.d \
+ err.D_DECL_VOIDOBJ.baddec.d \
+ err.D_PROTO_ARG.DupStructAssoc.d \
+ tst.StructAssoc.d \
+ tst.StructDataTypes.d \
+ tst.StructInside.d \
+ tst.clauselocal.d \
+ tst.clauselocal.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/syscall/Makefile b/cddl/usr.sbin/dtrace/tests/common/syscall/Makefile
new file mode 100644
index 0000000..035fdf0
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/syscall/Makefile
@@ -0,0 +1,18 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.args.d \
+ tst.openret.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.args.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/sysevent/Makefile b/cddl/usr.sbin/dtrace/tests/common/sysevent/Makefile
new file mode 100644
index 0000000..496360e
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/sysevent/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.post.d \
+ tst.post_chan.d \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.post.c \
+ tst.post_chan.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/tick-n/Makefile b/cddl/usr.sbin/dtrace/tests/common/tick-n/Makefile
new file mode 100644
index 0000000..d843b9a
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/tick-n/Makefile
@@ -0,0 +1,38 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PDESC_ZERO.tick.d \
+ err.D_PDESC_ZEROonens.d \
+ err.D_PDESC_ZEROonensec.d \
+ err.D_PDESC_ZEROoneus.d \
+ err.D_PDESC_ZEROoneusec.d \
+ tst.tickarg0.d \
+ tst.tickms.d \
+ tst.tickms.d.out \
+ tst.tickmsec.d \
+ tst.tickmsec.d.out \
+ tst.tickns.d \
+ tst.tickns.d.out \
+ tst.ticknsec.d \
+ tst.ticknsec.d.out \
+ tst.ticks.d \
+ tst.ticks.d.out \
+ tst.ticksec.d \
+ tst.ticksec.d.out \
+ tst.tickus.d \
+ tst.tickus.d.out \
+ tst.tickusec.d \
+ tst.tickusec.d.out \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/trace/Makefile b/cddl/usr.sbin/dtrace/tests/common/trace/Makefile
new file mode 100644
index 0000000..e1500f2
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/trace/Makefile
@@ -0,0 +1,24 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PROTO_LEN.bad.d \
+ err.D_TRACE_AGG.bad.d \
+ err.D_TRACE_VOID.bad.d \
+ tst.dyn.d \
+ tst.misc.d \
+ tst.qstring.d \
+ tst.qstring.d.out \
+ tst.string.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/tracemem/Makefile b/cddl/usr.sbin/dtrace/tests/common/tracemem/Makefile
new file mode 100644
index 0000000..5ba7b6f
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/tracemem/Makefile
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_PROTO_ARG.badsize.d \
+ err.D_PROTO_LEN.toofew.d \
+ err.D_TRACEMEM_ADDR.badaddr.d \
+ err.D_TRACEMEM_ARGS.d \
+ err.D_TRACEMEM_DYNSIZE.d \
+ err.D_TRACEMEM_SIZE.negsize.d \
+ err.D_TRACEMEM_SIZE.zerosize.d \
+ tst.dynsize.d \
+ tst.dynsize.d.out \
+ tst.rootvp.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/translators/Makefile b/cddl/usr.sbin/dtrace/tests/common/translators/Makefile
new file mode 100644
index 0000000..4d57edf
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/translators/Makefile
@@ -0,0 +1,51 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_DECL_TYPERED.BadTransDecl.d \
+ err.D_OP_INCOMPLETE.NonExistentInput1.d \
+ err.D_SYNTAX.BadTransDecl1.d \
+ err.D_SYNTAX.BadTransDecl3.d \
+ err.D_SYNTAX.BadTransDecl4.d \
+ err.D_TYPE_MEMBER.NonExistentInput2.d \
+ err.D_XLATE_INCOMPAT.BadInputType1.d \
+ err.D_XLATE_MEMB.NonExistentOutput2.d \
+ err.D_XLATE_NONE.BadTransDecl6.d \
+ err.D_XLATE_REDECL.RepeatTransDecl.d \
+ err.D_XLATE_SOU.BadTransDecl8.d \
+ err.D_XLATE_SOU.BadTransInt.d \
+ err.D_XLATE_SOU.NonExistentOutput1.d \
+ tst.CircularTransDecl.d \
+ tst.EmptyTransDecl.d \
+ tst.ForwardTag.d \
+ tst.InputAliasTrans.d \
+ tst.InputIntTrans.d \
+ tst.OutputAliasTrans.d \
+ tst.PartialDereferencing.d \
+ tst.PartialOutputTransDefn.d \
+ tst.ProcModelTrans.d \
+ tst.RepeatDeclaration.d \
+ tst.SimultaneousTranslators.d \
+ tst.StructureAssignment.d \
+ tst.TestTransStability1.ksh \
+ tst.TestTransStability1.ksh.out \
+ tst.TestTransStability2.ksh \
+ tst.TestTransStability2.ksh.out \
+ tst.TransNonPointer.d \
+ tst.TransOutputPointer.d \
+ tst.TransPointer.d \
+ tst.TranslateSelf.d \
+ tst.UnionInputTrans.d \
+ tst.UnionOutputTrans.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/typedef/Makefile b/cddl/usr.sbin/dtrace/tests/common/typedef/Makefile
new file mode 100644
index 0000000..477fd74
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/typedef/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_DECL_IDRED.DupTypeDef.d \
+ err.D_SYNTAX.BadExistingTypedef.d \
+ err.D_SYNTAX.TypedefInClause.d \
+ tst.ChainTypedef.d \
+ tst.TypedefDataAssign.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/types/Makefile b/cddl/usr.sbin/dtrace/tests/common/types/Makefile
new file mode 100644
index 0000000..1a3d326
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/types/Makefile
@@ -0,0 +1,69 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_CAST_INVAL.badcast.d \
+ err.D_CG_DYN.ResultDynType.d \
+ err.D_CHR_OFLOW.charconst.d \
+ err.D_DECL_BADCLASS.bad.d \
+ err.D_DECL_CHARATTR.badtype3.d \
+ err.D_DECL_COMBO.badtype4.d \
+ err.D_DECL_COMBO.badtype5.d \
+ err.D_DECL_ENCONST.badeval.d \
+ err.D_DECL_ENOFLOW.enoflow.d \
+ err.D_DECL_ENOFLOW.enuflow.d \
+ err.D_DECL_SCOPE.scopeop.d \
+ err.D_DECL_USELESS.baddec.d \
+ err.D_OP_ACT.badcond.d \
+ err.D_OP_ARITH.badoperand.d \
+ err.D_OP_INCOMPAT.badassign.d \
+ err.D_OP_INT.badbitop.d \
+ err.D_OP_INT.badshift.d \
+ err.D_OP_SCALAR.badcond.d \
+ err.D_OP_SCALAR.badincop.d \
+ err.D_OP_SCALAR.badlogop.d \
+ err.D_PROTO_LEN.badcond1.d \
+ err.D_SYNTAX.badenum.d \
+ err.D_SYNTAX.badid.d \
+ err.D_SYNTAX.badstruct.d \
+ err.D_UNKNOWN.badtype1.d \
+ err.D_UNKNOWN.badtype2.d \
+ err.D_UNKNOWN.dupenum.d \
+ err.D_UNKNOWN.dupstruct.d \
+ err.D_XLATE_REDECL.ResultDynType.d \
+ tst.assignops.d \
+ tst.badshiftops.d \
+ tst.basics.d \
+ tst.basics.d.out \
+ tst.bitops.d \
+ tst.charconstants.d \
+ tst.complex.d \
+ tst.condexpr.d \
+ tst.const.d \
+ tst.constants.d \
+ tst.conv.d \
+ tst.enum.d \
+ tst.intincop.d \
+ tst.intops.d \
+ tst.inttypes.d \
+ tst.ptrincop.d \
+ tst.ptrops.d \
+ tst.relenum.d \
+ tst.relstring.d \
+ tst.shiftops.d \
+ tst.stringconstants.d \
+ tst.struct.d \
+ tst.typedef.d \
+ tst.unaryop.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/uctf/Makefile b/cddl/usr.sbin/dtrace/tests/common/uctf/Makefile
new file mode 100644
index 0000000..493d550
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/uctf/Makefile
@@ -0,0 +1,41 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.invalidpid.d \
+ err.invalidpid2.d \
+ err.invalidpid3.d \
+ err.invalidtype.ksh \
+ err.invalidtype2.ksh \
+ err.user64mode.ksh \
+ tst.aouttype.ksh \
+ tst.chasestrings.ksh \
+ tst.chasestrings.ksh.out \
+ tst.libtype.ksh \
+ tst.linkmap.ksh \
+ tst.pidprint.ksh \
+ tst.pidprinttarg.ksh \
+ tst.printtype.ksh \
+ tst.printtype.ksh.out \
+ tst.printtypetarg.ksh \
+ tst.userlandkey.ksh \
+ tst.userlandkey.ksh.out \
+ tst.userstrings.ksh \
+ tst.userstrings.ksh.out \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.aouttype.c \
+ tst.chasestrings.c \
+ tst.libtype.c \
+ tst.printtype.c \
+
+
+WITH_CTF=YES
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/union/Makefile b/cddl/usr.sbin/dtrace/tests/common/union/Makefile
new file mode 100644
index 0000000..69e0ca8
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/union/Makefile
@@ -0,0 +1,27 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ err.D_ADDROF_VAR.UnionPointer.d \
+ err.D_DECL_COMBO.UnionWithoutColon.d \
+ err.D_DECL_COMBO.UnionWithoutColon1.d \
+ err.D_DECL_INCOMPLETE.circular.d \
+ err.D_DECL_INCOMPLETE.order.d \
+ err.D_DECL_INCOMPLETE.recursive.d \
+ err.D_DECL_INCOMPLETE.simple.d \
+ err.D_PROTO_ARG.DupUnionAssoc.d \
+ tst.UnionAssoc.d \
+ tst.UnionDataTypes.d \
+ tst.UnionInside.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/usdt/Makefile b/cddl/usr.sbin/dtrace/tests/common/usdt/Makefile
new file mode 100644
index 0000000..f6fa49b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/usdt/Makefile
@@ -0,0 +1,65 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ argmap.d \
+ args.d \
+ forker.d \
+ prov.d \
+ tst.andpid.ksh \
+ tst.argmap.d \
+ tst.args.d \
+ tst.badguess.ksh \
+ tst.corruptenv.ksh \
+ tst.dlclose1.ksh \
+ tst.dlclose1.ksh.out \
+ tst.dlclose2.ksh \
+ tst.dlclose2.ksh.out \
+ tst.dlclose3.ksh \
+ tst.eliminate.ksh \
+ tst.enabled.ksh \
+ tst.enabled.ksh.out \
+ tst.enabled2.ksh \
+ tst.enabled2.ksh.out \
+ tst.entryreturn.ksh \
+ tst.entryreturn.ksh.out \
+ tst.fork.ksh \
+ tst.fork.ksh.out \
+ tst.forker.ksh \
+ tst.guess32.ksh \
+ tst.guess64.ksh \
+ tst.header.ksh \
+ tst.include.ksh \
+ tst.linkpriv.ksh \
+ tst.linkunpriv.ksh \
+ tst.multiple.ksh \
+ tst.multiple.ksh.out \
+ tst.multiprov.ksh \
+ tst.multiprov.ksh.out \
+ tst.nodtrace.ksh \
+ tst.noprobes.ksh \
+ tst.noreap.ksh \
+ tst.noreapring.ksh \
+ tst.onlyenabled.ksh \
+ tst.reap.ksh \
+ tst.reeval.ksh \
+ tst.static.ksh \
+ tst.static.ksh.out \
+ tst.static2.ksh \
+ tst.static2.ksh.out \
+ tst.user.ksh \
+ tst.user.ksh.out \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.argmap.c \
+ tst.args.c \
+ tst.forker.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/ustack/Makefile b/cddl/usr.sbin/dtrace/tests/common/ustack/Makefile
new file mode 100644
index 0000000..960c407
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/ustack/Makefile
@@ -0,0 +1,20 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.bigstack.d \
+ tst.depth.ksh \
+ tst.spin.ksh \
+
+TESTEXES= \
+
+
+CFILES= \
+ tst.bigstack.c \
+ tst.spin.c \
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/vars/Makefile b/cddl/usr.sbin/dtrace/tests/common/vars/Makefile
new file mode 100644
index 0000000..5b47557
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/vars/Makefile
@@ -0,0 +1,23 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.gid.d \
+ tst.nullassign.d \
+ tst.ppid.d \
+ tst.ucaller.ksh \
+ tst.ucaller.ksh.out \
+ tst.uid.d \
+ tst.walltimestamp.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/common/version/Makefile b/cddl/usr.sbin/dtrace/tests/common/version/Makefile
new file mode 100644
index 0000000..0491cea
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/common/version/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+#
+# This Makefile was generated by $srcdir/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh.
+#
+
+TESTFILES= \
+ tst.1.0.d \
+
+TESTEXES= \
+
+
+CFILES= \
+
+
+
+.include "../../Makefile.inc1"
diff --git a/cddl/usr.sbin/dtrace/tests/tools/dtest.sh b/cddl/usr.sbin/dtrace/tests/tools/dtest.sh
new file mode 100755
index 0000000..e60837b
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/tools/dtest.sh
@@ -0,0 +1,129 @@
+# $FreeBSD$
+
+usage()
+{
+ cat >&2 <<__EOF__
+A harness for test cases in the DTrace test suite.
+
+usage: $(basename $0) <testfile>
+__EOF__
+ exit 1
+}
+
+gettag()
+{
+ local tag
+
+ tag=$(basename $1)
+ tag=${tag#*.}
+ tag=${tag%%[a-z.]*}
+ echo $tag
+}
+
+runtest()
+{
+ local dflags exe exstatus pid retval status
+
+ exstatus=0
+ retval=0
+
+ case $TFILE in
+ drp.DTRACEDROP_*.d|err.*.d|tst.*.d)
+ case $TFILE in
+ drp.DTRACEDROP_*.d)
+ dflags="-x droptags"
+ tag=$(gettag "$TFILE")
+ ;;
+ err.D_*.d)
+ exstatus=1
+ dflags="-x errtags"
+ tag=$(gettag "$TFILE")
+ ;;
+ err.*.d)
+ exstatus=1
+ ;;
+ esac
+
+ exe=${TFILE%.*}.exe
+ if [ -f "$exe" -a -x "$exe" ]; then
+ ./$exe &
+ pid=$!
+ dflags="$dflags ${pid}"
+ fi
+
+ dtrace -C -s "${TFILE}" $dflags >$STDOUT 2>$STDERR
+ status=$?
+
+ if [ $status -ne $exstatus ]; then
+ ERRMSG="dtrace exited with status ${status}, expected ${exstatus}"
+ retval=1
+ elif [ -n "${tag}" ] && ! grep -Fq " [${tag}] " ${STDERR}; then
+ ERRMSG="dtrace's error output did not contain expected tag ${tag}"
+ retval=1
+ fi
+
+ if [ -n "$pid" ]; then
+ kill -0 $pid >/dev/null 2>&1 && kill -9 $pid >/dev/null 2>&1
+ wait
+ fi
+ ;;
+ err.*.ksh|tst.*.ksh)
+ expr "$TFILE" : 'err.*' >/dev/null && exstatus=1
+
+ ksh "$TFILE" /usr/sbin/dtrace >$STDOUT 2>$STDERR
+ status=$?
+
+ if [ $status -ne $exstatus ]; then
+ ERRMSG="script exited with status ${status}, expected ${exstatus}"
+ retval=1
+ fi
+ ;;
+ *)
+ ERRMSG="unexpected test file name $TFILE"
+ retval=1
+ ;;
+ esac
+
+ return $retval
+}
+
+[ $# -eq 1 ] || usage
+
+readonly STDERR=$(mktemp)
+readonly STDOUT=$(mktemp)
+readonly TFILE=$(basename $1)
+readonly EXOUT=${TFILE}.out
+
+kldstat -q -m dtrace_test || kldload dtrace_test
+cd $(dirname $1)
+runtest
+RESULT=$?
+
+if [ $RESULT -eq 0 -a -f $EXOUT -a -r $EXOUT ] && \
+ ! cmp $STDOUT $EXOUT >/dev/null 2>&1; then
+ ERRMSG="test output mismatch"
+ RESULT=1
+fi
+
+if [ $RESULT -ne 0 ]; then
+ echo "test $TFILE failed: $ERRMSG" >&2
+ if [ $(stat -f '%z' $STDOUT) -gt 0 ]; then
+ cat >&2 <<__EOF__
+test stdout:
+--
+$(cat $STDOUT)
+--
+__EOF__
+ fi
+ if [ $(stat -f '%z' $STDERR) -gt 0 ]; then
+ cat >&2 <<__EOF__
+test stderr:
+--
+$(cat $STDERR)
+--
+__EOF__
+ fi
+fi
+
+rm -f $STDERR $STDOUT
+exit $RESULT
diff --git a/cddl/usr.sbin/dtrace/tests/tools/exclude.sh b/cddl/usr.sbin/dtrace/tests/tools/exclude.sh
new file mode 100755
index 0000000..a42773d
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/tools/exclude.sh
@@ -0,0 +1,194 @@
+# $FreeBSD$
+
+# This file lists DTrace tests which are known to fail or hang/crash the
+# system. They were pulled from the legacy DTrace test infrastructure in
+# tools/tests/dtrace and may be out of date.
+#
+# Tests are listed here generally because one or more of the following is true:
+#
+# 1) The test is broken (usually because it assumes it's running on Solaris and
+# the test encodes some sort of Solarisism).
+# 2) The functionality being tested is buggy (often but not always the result
+# of a FreeBSD-specific bug).
+# 3) The test relies on DTrace functionality that's not yet available in FreeBSD
+# (e.g. tests for a specific SDT provider that we don't have).
+#
+# An end goal is to remove this file, concentrating first on instances of
+# 1) and 2).
+#
+# The SKIP variable contains tests that should not be executed at all. The
+# EXFAIL variable contains tests that are expected to fail when run. Please
+# avoid adding tests to SKIP unless it really is necessary; with EXFAIL, tests
+# that begin passing as the result of a change are visible in the test summary.
+
+exclude()
+{
+ eval $1=\"\$$1\\n$2\"
+}
+
+exclude EXFAIL common/aggs/tst.subr.d
+exclude EXFAIL common/dtraceUtil/tst.DataModel32.d.ksh
+exclude EXFAIL common/dtraceUtil/tst.ELFGenerationOut.d.ksh
+exclude EXFAIL common/dtraceUtil/tst.ELFGenerationWithO.d.ksh
+exclude EXFAIL common/funcs/tst.copyin.d
+exclude EXFAIL common/funcs/tst.copyinto.d
+exclude EXFAIL common/funcs/tst.ddi_pathname.d
+exclude EXFAIL common/io/tst.fds.d
+exclude EXFAIL common/ip/tst.ipv4localudp.ksh
+exclude EXFAIL common/mdb/tst.dtracedcmd.ksh
+exclude EXFAIL common/misc/tst.dofmax.ksh
+exclude EXFAIL common/misc/tst.include.ksh
+exclude EXFAIL common/pragma/tst.libchain.ksh
+exclude EXFAIL common/safety/tst.copyin2.d
+exclude EXFAIL common/safety/tst.msgdsize.d
+exclude EXFAIL common/safety/tst.msgsize.d
+exclude EXFAIL common/safety/tst.zonename.d
+exclude EXFAIL common/scalars/tst.misc.d
+exclude EXFAIL common/scalars/tst.selfarray2.d
+exclude EXFAIL common/sched/tst.enqueue.d
+exclude EXFAIL common/speculation/tst.SpecSizeVariations3.d
+exclude EXFAIL common/tracemem/err.D_TRACEMEM_ADDR.badaddr.d
+exclude EXFAIL common/translators/tst.TestTransStability2.ksh
+exclude EXFAIL common/types/tst.struct.d
+exclude EXFAIL common/types/tst.typedef.d
+
+# We don't have a cpc provider.
+exclude SKIP common/cpc/err.D_PDESC_ZERO.lowfrequency.d
+exclude SKIP common/cpc/err.D_PDESC_ZERO.malformedoverflow.d
+exclude SKIP common/cpc/err.D_PDESC_ZERO.nonexistentevent.d
+exclude SKIP common/cpc/err.cpcvscpustatpart1.ksh
+exclude SKIP common/cpc/err.cpcvscpustatpart2.ksh
+exclude SKIP common/cpc/err.cputrackfailtostart.ksh
+exclude SKIP common/cpc/err.cputrackterminates.ksh
+exclude SKIP common/cpc/err.toomanyenablings.d
+exclude SKIP common/cpc/tst.allcpus.ksh
+exclude SKIP common/cpc/tst.genericevent.d
+exclude SKIP common/cpc/tst.platformevent.ksh
+
+# We don't have a mib provider.
+exclude EXFAIL common/mib/tst.icmp.ksh
+exclude EXFAIL common/mib/tst.tcp.ksh
+exclude EXFAIL common/mib/tst.udp.ksh
+
+# At the moment dtrace(1) always needs to run as root.
+exclude SKIP common/privs/tst.fds.ksh
+exclude SKIP common/privs/tst.func_access.ksh
+exclude SKIP common/privs/tst.getf.ksh
+exclude SKIP common/privs/tst.op_access.ksh
+exclude SKIP common/privs/tst.procpriv.ksh
+exclude SKIP common/privs/tst.providers.ksh
+exclude SKIP common/privs/tst.unpriv_funcs.ksh
+
+# These tests hang for reasons unknown.
+exclude SKIP common/buffering/tst.ring3.d
+exclude SKIP common/funcs/tst.chill.ksh
+exclude SKIP common/funcs/tst.index.d
+
+# No Java support at the moment.
+exclude EXFAIL common/java_api/tst.Abort.ksh
+exclude EXFAIL common/java_api/tst.Bean.ksh
+exclude EXFAIL common/java_api/tst.Close.ksh
+exclude EXFAIL common/java_api/tst.Drop.ksh
+exclude EXFAIL common/java_api/tst.Enable.ksh
+exclude EXFAIL common/java_api/tst.FunctionLookup.ksh
+exclude EXFAIL common/java_api/tst.GetAggregate.ksh
+exclude EXFAIL common/java_api/tst.MaxConsumers.ksh
+exclude EXFAIL common/java_api/tst.MultiAggPrinta.ksh
+exclude EXFAIL common/java_api/tst.ProbeData.ksh
+exclude EXFAIL common/java_api/tst.ProbeDescription.ksh
+exclude EXFAIL common/java_api/tst.StateMachine.ksh
+exclude EXFAIL common/java_api/tst.StopLock.ksh
+
+# Expects specific formatting from banner(6).
+exclude EXFAIL common/aggs/tst.aggpackbanner.ksh
+
+# Test assumes we're running on a Solaris kernel.
+exclude EXFAIL common/misc/tst.roch.d
+exclude EXFAIL common/predicates/tst.argsnotcached.d
+exclude EXFAIL common/safety/tst.vahole.d
+
+# Tests that depend on the plockstat provider.
+exclude EXFAIL common/plockstat/tst.available.d
+exclude EXFAIL common/plockstat/tst.libmap.d
+exclude EXFAIL common/usdt/tst.andpid.ksh
+
+# Depends on java.
+exclude SKIP common/drops/drp.DTRACEDROP_STKSTROVERFLOW.d
+
+# Interrupt priority isn't relevant on FreeBSD.
+exclude SKIP common/builtinvar/tst.ipl.d
+exclude SKIP common/builtinvar/tst.ipl1.d
+
+# These tests rely on being able to find a host via broadcast pings.
+exclude EXFAIL common/ip/tst.ipv4remotetcp.ksh
+exclude EXFAIL common/ip/tst.ipv4remoteudp.ksh
+exclude EXFAIL common/ip/tst.ipv6remoteicmp.ksh
+exclude EXFAIL common/ip/tst.ipv4remoteicmp.ksh
+
+# FreeBSD never places tcpcbs in the TIME_WAIT state, so the probe never fires.
+exclude EXFAIL common/ip/tst.localtcpstate.ksh
+exclude EXFAIL common/ip/tst.remotetcpstate.ksh
+
+# Depends on the number of probes in /bin/sh and the current DOF limit.
+exclude EXFAIL common/pid/err.D_PROC_CREATEFAIL.many.d
+
+# Tries to enable pid$target:libc::entry, though there's no "libc" module.
+# Currently unsure as to whether this might be a libproc bug.
+exclude EXFAIL common/pid/tst.probemod.ksh
+
+# Assumes date(1) has a pid$target::main:return probe.
+exclude EXFAIL common/pid/tst.newprobes.ksh
+
+# libproc+librtld_db don't handle dlopen(2) yet.
+exclude EXFAIL common/pid/tst.provregex2.ksh
+exclude EXFAIL common/pid/tst.provregex4.ksh
+
+# libproc doesn't properly handle probe sites that correspond to multiple
+# symbols.
+exclude EXFAIL common/pid/tst.weak1.d
+exclude EXFAIL common/pid/tst.weak2.d
+
+# This test checks for a leading tab on a line before #define. That is illegal
+# on Solaris, but the clang pre-processor on FreeBSD is happy with code like
+# that.
+exclude EXFAIL common/preprocessor/err.D_PRAGCTL_INVAL.tabdefine.d
+
+# This test uses proc:::signal-handle, which we don't appear to have.
+exclude EXFAIL common/proc/tst.signal.ksh
+
+# This test uses proc:::lwp-start, which we don't appear to have.
+exclude EXFAIL common/proc/tst.startexit.ksh
+
+# This test causes a panic at the moment because fbt instruments the lock class'
+# lc_owned method.
+exclude SKIP common/safety/tst.rw.d
+
+# Depends on some implementation details of the runtime linker.
+exclude EXFAIL common/vars/tst.ucaller.ksh
+
+# These rely on process attributes that FreeBSD doesn't carry.
+exclude EXFAIL common/scripting/tst.projid.ksh
+exclude EXFAIL common/scripting/tst.taskid.ksh
+
+# This test expects its test program to be installed without CTF data, but
+# the rest of the programs for this feature need CTF data. Not yet sure how
+# to build that.
+exclude EXFAIL common/uctf/tst.libtype.ksh
+
+# libproc doesn't have linkmap support yet.
+exclude EXFAIL common/uctf/tst.linkmap.ksh
+
+# Uses Sun-specific compiler options.
+exclude EXFAIL common/usdt/tst.badguess.ksh
+exclude EXFAIL common/usdt/tst.guess32.ksh
+exclude EXFAIL common/usdt/tst.guess64.ksh
+
+# Generated headers include <sys/sdt.h>, so _DTRACE_VERSION is always defined.
+exclude EXFAIL common/usdt/tst.nodtrace.ksh
+
+# The second dtrace -G invocation returns an error with "no probes found," which
+# makes sense to me. Not yet sure what the expected behaviour is here.
+exclude EXFAIL common/usdt/tst.static2.ksh
+
+# Uses the Solaris-specific ppriv(1).
+exclude EXFAIL common/usdt/tst.user.ksh
diff --git a/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh b/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh
new file mode 100755
index 0000000..bf0e181
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/tools/genmakefiles.sh
@@ -0,0 +1,85 @@
+# $FreeBSD$
+
+usage()
+{
+ cat <<__EOF__ >&2
+usage: $(basename $0)
+
+This script regenerates the DTrace test suite makefiles. It should be run
+whenever \$srcdir/cddl/contrib/opensolaris/cmd/dtrace/test/tst is modified.
+__EOF__
+ exit 1
+}
+
+# Format a file list for use in a make(1) variable assignment: take the
+# basename of each input file and append " \" to it.
+fmtflist()
+{
+ awk 'function bn(f) {
+ sub(".*/", "", f)
+ return f
+ }
+ {print " ", bn($1), " \\"}'
+}
+
+genmakefile()
+{
+ local basedir=$1
+
+ local tdir=${CONTRIB_TESTDIR}/${basedir}
+ local tfiles=$(find $tdir -type f -a \
+ \( -name \*.d -o -name \*.ksh -o -name \*.out \) | sort | fmtflist)
+ local tcfiles=$(find $tdir -type f -a -name \*.c | sort | fmtflist)
+ local texes=$(find $tdir -type f -a -name \*.exe | sort | fmtflist)
+
+ # One-off variable definitions.
+ local special
+ if [ "$basedir" = proc ]; then
+ special="
+LDADD.tst.sigwait.exe+= -lrt
+DPADD.tst.sigwait.exe+= \${LIBRT}
+"
+ elif [ "$basedir" = uctf ]; then
+ special="
+WITH_CTF=YES
+"
+ fi
+
+ local makefile=$(mktemp)
+ cat <<__EOF__ > $makefile
+# \$FreeBSD$
+
+#
+# This Makefile was generated by \$srcdir${ORIGINDIR#${TOPDIR}}/genmakefiles.sh.
+#
+
+TESTFILES= \\
+$tfiles
+
+TESTEXES= \\
+$texes
+
+CFILES= \\
+$tcfiles
+
+$special
+.include "../../Makefile.inc1"
+__EOF__
+
+ mv -f $makefile ${ORIGINDIR}/../common/${basedir}/Makefile
+}
+
+set -e
+
+if [ $# -ne 0 ]; then
+ usage
+fi
+
+readonly ORIGINDIR=$(realpath $(dirname $0))
+readonly TOPDIR=$(realpath ${ORIGINDIR}/../../../../..)
+readonly CONTRIB_TESTDIR=${TOPDIR}/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common
+
+# Generate a Makefile for each test group under common/.
+for dir in $(find ${CONTRIB_TESTDIR} -mindepth 1 -maxdepth 1 -type d); do
+ genmakefile $(basename $dir)
+done
diff --git a/cddl/usr.sbin/dtrace/tests/tools/gentest.sh b/cddl/usr.sbin/dtrace/tests/tools/gentest.sh
new file mode 100755
index 0000000..9c34b79
--- /dev/null
+++ b/cddl/usr.sbin/dtrace/tests/tools/gentest.sh
@@ -0,0 +1,110 @@
+# $FreeBSD$
+
+usage()
+{
+ cat <<__EOF__ >&2
+Generate ATF test cases from a set of DTrace tests.
+
+usage: sh $(basename $0) [-e <excludes>] <category> [<testfiles>]
+
+ excludes: A shell script which defines test cases that are to be skipped,
+ or aren't expected to pass.
+ category: The test category, in the form of <arch>/<feature>. For example,
+ "common/aggs" is the test category for D aggregations.
+ testfiles: The test files for the tests in the specified category.
+__EOF__
+ exit 1
+}
+
+gentestcase()
+{
+ local mod tcase tfile
+
+ tfile=$1
+ tcase=$2
+ mod=$3
+
+ cat <<__EOF__
+atf_test_case $tcase
+${tcase}_head()
+{
+ atf_set 'descr' 'DTrace test ${CATEGORY}/${tfile}'
+}
+${tcase}_body()
+{
+ $mod
+ atf_check -s exit:0 -o empty -e empty \\
+ "\$(atf_get_srcdir)/../../dtest" "\$(atf_get_srcdir)/${tfile}"
+}
+__EOF__
+}
+
+gentestcases()
+{
+ local mod tcase tfile tfiles
+
+ eval tfiles=\$$1
+ mod=$2
+
+ for tfile in ${tfiles}; do
+ case $tfile in
+ drp.*.d|err.*.d|tst.*.d|*.ksh)
+ # Test names need to be mangled for ATF.
+ tcase=$(echo "$tfile" | tr '.-' '_')
+ gentestcase "$tfile" "$tcase" "$mod"
+ TCASES="$TCASES $tcase"
+ ;;
+ esac
+ done
+}
+
+set -e
+
+#
+# Parse arguments.
+#
+case $1 in
+-e)
+ shift; EXCLUDES=$1; shift
+ ;;
+esac
+
+CATEGORY=$1
+shift
+if ! expr "$CATEGORY" : '[^/]*/[^/]*' >/dev/null 2>&1; then
+ usage
+fi
+FEATURE=$(basename ${CATEGORY})
+ARCH=$(dirname ${CATEGORY})
+
+#
+# Remove skipped tests and expected failures from the main test list.
+#
+. $EXCLUDES
+EXFAILS=$(echo -e "$EXFAIL" | grep "^${CATEGORY}/" | xargs basename -a)
+SKIPS=$(echo -e "$SKIP" | grep "^${CATEGORY}/" | xargs basename -a)
+
+FILELIST=$(mktemp)
+trap 'rm -f $FILELIST' EXIT
+
+echo "$@" | tr ' ' '\n' | xargs basename -a | sort > ${FILELIST}
+TFILES=$(printf '%s\n%s' "$EXFAILS" "$SKIPS" | sort | comm -13 /dev/stdin $FILELIST)
+
+#
+# Generate test cases.
+#
+gentestcases SKIPS "atf_skip \"test may hang or cause system instability\""
+gentestcases EXFAILS "atf_expect_fail \"test is known to fail\""
+gentestcases TFILES
+
+#
+# Generate the test init function.
+#
+cat <<__EOF__
+atf_init_test_cases()
+{
+$(for tcase in ${TCASES}; do echo " atf_add_test_case $tcase"; done)
+}
+__EOF__
+
+rm -f $FILELIST
diff --git a/cddl/usr.sbin/tests/Makefile b/cddl/usr.sbin/tests/Makefile
index 0305aee..a0e63e5 100644
--- a/cddl/usr.sbin/tests/Makefile
+++ b/cddl/usr.sbin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/cddl/usr.sbin
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/contrib/libarchive/NEWS b/contrib/libarchive/NEWS
index 6f16b88..7b5c31f 100644
--- a/contrib/libarchive/NEWS
+++ b/contrib/libarchive/NEWS
@@ -1,3 +1,10 @@
+Jan 29, 2017: Limited NFSv4 ACL support for Mac OS (Darwin)
+
+Jan 10, 2017: POSIX.1e and NFSv4 ACL support for Solaris and derivates
+
+Dec 27, 2016: NFSv4 ACL read and write support for pax
+ Deprecated functions: archive_entry_acl_text(), archive_entry_acl_text_w()
+
Oct 26, 2016: Remove liblzmadec support
Oct 23, 2016: libarchive 3.2.2 released
diff --git a/contrib/libarchive/cpio/cpio.c b/contrib/libarchive/cpio/cpio.c
index a7a747a..30c9ad3 100644
--- a/contrib/libarchive/cpio/cpio.c
+++ b/contrib/libarchive/cpio/cpio.c
@@ -703,6 +703,7 @@ file_to_archive(struct cpio *cpio, const char *srcpath)
lafe_warnc(0, "%s",
archive_error_string(cpio->archive_read_disk));
if (r <= ARCHIVE_FAILED) {
+ archive_entry_free(entry);
cpio->return_value = 1;
return (r);
}
diff --git a/contrib/libarchive/libarchive/archive_acl.c b/contrib/libarchive/libarchive/archive_acl.c
index 3653d6f..b8b6b63 100644
--- a/contrib/libarchive/libarchive/archive_acl.c
+++ b/contrib/libarchive/libarchive/archive_acl.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2003-2010 Tim Kientzle
+ * Copyright (c) 2016 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -55,25 +56,77 @@ static struct archive_acl_entry *acl_new_entry(struct archive_acl *acl,
static int archive_acl_add_entry_len_l(struct archive_acl *acl,
int type, int permset, int tag, int id, const char *name,
size_t len, struct archive_string_conv *sc);
+static int archive_acl_text_want_type(struct archive_acl *acl, int flags);
+static ssize_t archive_acl_text_len(struct archive_acl *acl, int want_type,
+ int flags, int wide, struct archive *a,
+ struct archive_string_conv *sc);
static int isint_w(const wchar_t *start, const wchar_t *end, int *result);
static int ismode_w(const wchar_t *start, const wchar_t *end, int *result);
+static int is_nfs4_flags_w(const wchar_t *start, const wchar_t *end,
+ int *result);
+static int is_nfs4_perms_w(const wchar_t *start, const wchar_t *end,
+ int *result);
static void next_field_w(const wchar_t **wp, const wchar_t **start,
const wchar_t **end, wchar_t *sep);
-static int prefix_w(const wchar_t *start, const wchar_t *end,
- const wchar_t *test);
-static void append_entry_w(wchar_t **wp, const wchar_t *prefix, int tag,
- const wchar_t *wname, int perm, int id);
+static void append_entry_w(wchar_t **wp, const wchar_t *prefix, int type,
+ int tag, int flags, const wchar_t *wname, int perm, int id);
static void append_id_w(wchar_t **wp, int id);
static int isint(const char *start, const char *end, int *result);
static int ismode(const char *start, const char *end, int *result);
+static int is_nfs4_flags(const char *start, const char *end,
+ int *result);
+static int is_nfs4_perms(const char *start, const char *end,
+ int *result);
static void next_field(const char **p, const char **start,
const char **end, char *sep);
-static int prefix_c(const char *start, const char *end,
- const char *test);
-static void append_entry(char **p, const char *prefix, int tag,
- const char *name, int perm, int id);
+static void append_entry(char **p, const char *prefix, int type,
+ int tag, int flags, const char *name, int perm, int id);
static void append_id(char **p, int id);
+static const struct {
+ const int perm;
+ const char c;
+ const wchar_t wc;
+} nfsv4_acl_perm_map[] = {
+ { ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, 'r',
+ L'r' },
+ { ARCHIVE_ENTRY_ACL_WRITE_DATA | ARCHIVE_ENTRY_ACL_ADD_FILE, 'w',
+ L'w' },
+ { ARCHIVE_ENTRY_ACL_EXECUTE, 'x', L'x' },
+ { ARCHIVE_ENTRY_ACL_APPEND_DATA | ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY,
+ 'p', L'p' },
+ { ARCHIVE_ENTRY_ACL_DELETE, 'd', L'd' },
+ { ARCHIVE_ENTRY_ACL_DELETE_CHILD, 'D', L'D' },
+ { ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, 'a', L'a' },
+ { ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, 'A', L'A' },
+ { ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, 'R', L'R' },
+ { ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, 'W', L'W' },
+ { ARCHIVE_ENTRY_ACL_READ_ACL, 'c', L'c' },
+ { ARCHIVE_ENTRY_ACL_WRITE_ACL, 'C', L'C' },
+ { ARCHIVE_ENTRY_ACL_WRITE_OWNER, 'o', L'o' },
+ { ARCHIVE_ENTRY_ACL_SYNCHRONIZE, 's', L's' }
+};
+
+static const int nfsv4_acl_perm_map_size = (int)(sizeof(nfsv4_acl_perm_map) /
+ sizeof(nfsv4_acl_perm_map[0]));
+
+static const struct {
+ const int perm;
+ const char c;
+ const wchar_t wc;
+} nfsv4_acl_flag_map[] = {
+ { ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, 'f', L'f' },
+ { ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, 'd', L'd' },
+ { ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, 'i', L'i' },
+ { ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, 'n', L'n' },
+ { ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS, 'S', L'S' },
+ { ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS, 'F', L'F' },
+ { ARCHIVE_ENTRY_ACL_ENTRY_INHERITED, 'I', L'I' }
+};
+
+static const int nfsv4_acl_flag_map_size = (int)(sizeof(nfsv4_acl_flag_map) /
+ sizeof(nfsv4_acl_flag_map[0]));
+
void
archive_acl_clear(struct archive_acl *acl)
{
@@ -340,6 +393,15 @@ archive_acl_count(struct archive_acl *acl, int want_type)
}
/*
+ * Return a bitmask of stored ACL types in an ACL list
+ */
+int
+archive_acl_types(struct archive_acl *acl)
+{
+ return (acl->acl_types);
+}
+
+/*
* Prepare for reading entries from the ACL data. Returns a count
* of entries matching "want_type", or zero if there are no
* non-extended ACL entries of that type.
@@ -375,8 +437,8 @@ archive_acl_reset(struct archive_acl *acl, int want_type)
* standard permissions and include them in the returned list.
*/
int
-archive_acl_next(struct archive *a, struct archive_acl *acl, int want_type, int *type,
- int *permset, int *tag, int *id, const char **name)
+archive_acl_next(struct archive *a, struct archive_acl *acl, int want_type,
+ int *type, int *permset, int *tag, int *id, const char **name)
{
*name = NULL;
*id = -1;
@@ -441,130 +503,273 @@ archive_acl_next(struct archive *a, struct archive_acl *acl, int want_type, int
}
/*
- * Generate a text version of the ACL. The flags parameter controls
- * the style of the generated ACL.
+ * Determine what type of ACL do we want
*/
-const wchar_t *
-archive_acl_text_w(struct archive *a, struct archive_acl *acl, int flags)
+static int
+archive_acl_text_want_type(struct archive_acl *acl, int flags)
{
- int count;
- size_t length;
- const wchar_t *wname;
- const wchar_t *prefix;
- wchar_t separator;
- struct archive_acl_entry *ap;
- int id, r;
- wchar_t *wp;
+ int want_type;
- if (acl->acl_text_w != NULL) {
- free (acl->acl_text_w);
- acl->acl_text_w = NULL;
+ /* Check if ACL is NFSv4 */
+ if ((acl->acl_types & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
+ /* NFSv4 should never mix with POSIX.1e */
+ if ((acl->acl_types & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0)
+ return (0);
+ else
+ return (ARCHIVE_ENTRY_ACL_TYPE_NFS4);
}
- separator = L',';
+ /* Now deal with POSIX.1e ACLs */
+
+ want_type = 0;
+ if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0)
+ want_type |= ARCHIVE_ENTRY_ACL_TYPE_ACCESS;
+ if ((flags & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) != 0)
+ want_type |= ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
+
+ /* By default we want both access and default ACLs */
+ if (want_type == 0)
+ return (ARCHIVE_ENTRY_ACL_TYPE_POSIX1E);
+
+ return (want_type);
+}
+
+/*
+ * Calculate ACL text string length
+ */
+static ssize_t
+archive_acl_text_len(struct archive_acl *acl, int want_type, int flags,
+ int wide, struct archive *a, struct archive_string_conv *sc) {
+ struct archive_acl_entry *ap;
+ const char *name;
+ const wchar_t *wname;
+ int count, idlen, tmp, r;
+ ssize_t length;
+ size_t len;
+
count = 0;
length = 0;
- ap = acl->acl_head;
- while (ap != NULL) {
- if ((ap->type & flags) != 0) {
- count++;
- if ((flags & ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT) &&
- (ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT))
- length += 8; /* "default:" */
- length += 5; /* tag name */
- length += 1; /* colon */
- r = archive_mstring_get_wcs(a, &ap->name, &wname);
- if (r == 0 && wname != NULL)
- length += wcslen(wname);
- else if (r < 0 && errno == ENOMEM)
- return (NULL);
- else
- length += sizeof(uid_t) * 3 + 1;
- length ++; /* colon */
+ for (ap = acl->acl_head; ap != NULL; ap = ap->next) {
+ if ((ap->type & want_type) == 0)
+ continue;
+ /*
+ * Filemode-mapping ACL entries are stored exclusively in
+ * ap->mode so they should not be in the list
+ */
+ if ((ap->type == ARCHIVE_ENTRY_ACL_TYPE_ACCESS)
+ && (ap->tag == ARCHIVE_ENTRY_ACL_USER_OBJ
+ || ap->tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ
+ || ap->tag == ARCHIVE_ENTRY_ACL_OTHER))
+ continue;
+ count++;
+ if ((want_type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) != 0
+ && (ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) != 0)
+ length += 8; /* "default:" */
+ switch (ap->tag) {
+ case ARCHIVE_ENTRY_ACL_USER_OBJ:
+ if (want_type == ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
+ length += 6; /* "owner@" */
+ break;
+ }
+ /* FALLTHROUGH */
+ case ARCHIVE_ENTRY_ACL_USER:
+ case ARCHIVE_ENTRY_ACL_MASK:
+ length += 4; /* "user", "mask" */
+ break;
+ case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
+ if (want_type == ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
+ length += 6; /* "group@" */
+ break;
+ }
+ /* FALLTHROUGH */
+ case ARCHIVE_ENTRY_ACL_GROUP:
+ case ARCHIVE_ENTRY_ACL_OTHER:
+ length += 5; /* "group", "other" */
+ break;
+ case ARCHIVE_ENTRY_ACL_EVERYONE:
+ length += 9; /* "everyone@" */
+ break;
+ }
+ length += 1; /* colon after tag */
+ if (ap->tag == ARCHIVE_ENTRY_ACL_USER ||
+ ap->tag == ARCHIVE_ENTRY_ACL_GROUP) {
+ if (wide) {
+ r = archive_mstring_get_wcs(a, &ap->name,
+ &wname);
+ if (r == 0 && wname != NULL)
+ length += wcslen(wname);
+ else if (r < 0 && errno == ENOMEM)
+ return (0);
+ else
+ length += sizeof(uid_t) * 3 + 1;
+ } else {
+ r = archive_mstring_get_mbs_l(&ap->name, &name,
+ &len, sc);
+ if (r != 0)
+ return (0);
+ if (len > 0 && name != NULL)
+ length += len;
+ else
+ length += sizeof(uid_t) * 3 + 1;
+ }
+ length += 1; /* colon after user or group name */
+ } else if (want_type != ARCHIVE_ENTRY_ACL_TYPE_NFS4)
+ length += 1; /* 2nd colon empty user,group or other */
+
+ if (((flags & ARCHIVE_ENTRY_ACL_STYLE_SOLARIS) != 0)
+ && ((want_type & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0)
+ && (ap->tag == ARCHIVE_ENTRY_ACL_OTHER
+ || ap->tag == ARCHIVE_ENTRY_ACL_MASK)) {
+ /* Solaris has no colon after other: and mask: */
+ length = length - 1;
+ }
+
+ if (want_type == ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
+ /* rwxpdDaARWcCos:fdinSFI:deny */
+ length += 27;
+ if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_DENY) == 0)
+ length += 1; /* allow, alarm, audit */
+ } else
length += 3; /* rwx */
+
+ if ((ap->tag == ARCHIVE_ENTRY_ACL_USER ||
+ ap->tag == ARCHIVE_ENTRY_ACL_GROUP) &&
+ (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID) != 0) {
length += 1; /* colon */
- length += max(sizeof(uid_t), sizeof(gid_t)) * 3 + 1;
- length ++; /* newline */
+ /* ID digit count */
+ idlen = 1;
+ tmp = ap->id;
+ while (tmp > 9) {
+ tmp = tmp / 10;
+ idlen++;
+ }
+ length += idlen;
}
- ap = ap->next;
+ length ++; /* entry separator */
}
- if (count > 0 && ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0)) {
- length += 10; /* "user::rwx\n" */
- length += 11; /* "group::rwx\n" */
- length += 11; /* "other::rwx\n" */
- }
+ /* Add filemode-mapping access entries to the length */
+ if ((want_type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
+ if ((flags & ARCHIVE_ENTRY_ACL_STYLE_SOLARIS) != 0) {
+ /* "user::rwx\ngroup::rwx\nother:rwx\n" */
+ length += 31;
+ } else {
+ /* "user::rwx\ngroup::rwx\nother::rwx\n" */
+ length += 32;
+ }
+ } else if (count == 0)
+ return (0);
+
+ /* The terminating character is included in count */
+ return (length);
+}
+
+/*
+ * Generate a wide text version of the ACL. The flags parameter controls
+ * the type and style of the generated ACL.
+ */
+wchar_t *
+archive_acl_to_text_w(struct archive_acl *acl, ssize_t *text_len, int flags,
+ struct archive *a)
+{
+ int count;
+ ssize_t length;
+ size_t len;
+ const wchar_t *wname;
+ const wchar_t *prefix;
+ wchar_t separator;
+ struct archive_acl_entry *ap;
+ int id, r, want_type;
+ wchar_t *wp, *ws;
- if (count == 0)
+ want_type = archive_acl_text_want_type(acl, flags);
+
+ /* Both NFSv4 and POSIX.1 types found */
+ if (want_type == 0)
return (NULL);
+ if (want_type == ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)
+ flags |= ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT;
+
+ length = archive_acl_text_len(acl, want_type, flags, 1, a, NULL);
+
+ if (length == 0)
+ return (NULL);
+
+ if (flags & ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA)
+ separator = L',';
+ else
+ separator = L'\n';
+
/* Now, allocate the string and actually populate it. */
- wp = acl->acl_text_w = (wchar_t *)malloc(length * sizeof(wchar_t));
- if (wp == NULL)
+ wp = ws = (wchar_t *)malloc(length * sizeof(wchar_t));
+ if (wp == NULL) {
+ if (errno == ENOMEM)
+ __archive_errx(1, "No memory");
return (NULL);
+ }
count = 0;
- if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
- append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_USER_OBJ, NULL,
+
+ if ((want_type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
+ append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, flags, NULL,
acl->mode & 0700, -1);
- *wp++ = ',';
- append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_GROUP_OBJ, NULL,
+ *wp++ = separator;
+ append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, flags, NULL,
acl->mode & 0070, -1);
- *wp++ = ',';
- append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_OTHER, NULL,
+ *wp++ = separator;
+ append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_OTHER, flags, NULL,
acl->mode & 0007, -1);
count += 3;
-
- ap = acl->acl_head;
- while (ap != NULL) {
- if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
- r = archive_mstring_get_wcs(a, &ap->name, &wname);
- if (r == 0) {
- *wp++ = separator;
- if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
- id = ap->id;
- else
- id = -1;
- append_entry_w(&wp, NULL, ap->tag, wname,
- ap->permset, id);
- count++;
- } else if (r < 0 && errno == ENOMEM)
- return (NULL);
- }
- ap = ap->next;
- }
}
-
- if ((flags & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) != 0) {
- if (flags & ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT)
+ for (ap = acl->acl_head; ap != NULL; ap = ap->next) {
+ if ((ap->type & want_type) == 0)
+ continue;
+ /*
+ * Filemode-mapping ACL entries are stored exclusively in
+ * ap->mode so they should not be in the list
+ */
+ if ((ap->type == ARCHIVE_ENTRY_ACL_TYPE_ACCESS)
+ && (ap->tag == ARCHIVE_ENTRY_ACL_USER_OBJ
+ || ap->tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ
+ || ap->tag == ARCHIVE_ENTRY_ACL_OTHER))
+ continue;
+ if (ap->type == ARCHIVE_ENTRY_ACL_TYPE_DEFAULT &&
+ (flags & ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT) != 0)
prefix = L"default:";
else
prefix = NULL;
- ap = acl->acl_head;
- count = 0;
- while (ap != NULL) {
- if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) != 0) {
- r = archive_mstring_get_wcs(a, &ap->name, &wname);
- if (r == 0) {
- if (count > 0)
- *wp++ = separator;
- if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
- id = ap->id;
- else
- id = -1;
- append_entry_w(&wp, prefix, ap->tag,
- wname, ap->permset, id);
- count ++;
- } else if (r < 0 && errno == ENOMEM)
- return (NULL);
- }
- ap = ap->next;
- }
+ r = archive_mstring_get_wcs(a, &ap->name, &wname);
+ if (r == 0) {
+ if (count > 0)
+ *wp++ = separator;
+ if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
+ id = ap->id;
+ else
+ id = -1;
+ append_entry_w(&wp, prefix, ap->type, ap->tag, flags,
+ wname, ap->permset, id);
+ count++;
+ } else if (r < 0 && errno == ENOMEM)
+ return (NULL);
}
- return (acl->acl_text_w);
-}
+ /* Add terminating character */
+ *wp++ = L'\0';
+
+ len = wcslen(ws);
+ if ((ssize_t)len > (length - 1))
+ __archive_errx(1, "Buffer overrun");
+
+ if (text_len != NULL)
+ *text_len = len;
+
+ return (ws);
+}
static void
append_id_w(wchar_t **wp, int id)
@@ -577,9 +782,11 @@ append_id_w(wchar_t **wp, int id)
}
static void
-append_entry_w(wchar_t **wp, const wchar_t *prefix, int tag,
- const wchar_t *wname, int perm, int id)
+append_entry_w(wchar_t **wp, const wchar_t *prefix, int type,
+ int tag, int flags, const wchar_t *wname, int perm, int id)
{
+ int i;
+
if (prefix != NULL) {
wcscpy(*wp, prefix);
*wp += wcslen(*wp);
@@ -588,6 +795,10 @@ append_entry_w(wchar_t **wp, const wchar_t *prefix, int tag,
case ARCHIVE_ENTRY_ACL_USER_OBJ:
wname = NULL;
id = -1;
+ if ((type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
+ wcscpy(*wp, L"owner@");
+ break;
+ }
/* FALLTHROUGH */
case ARCHIVE_ENTRY_ACL_USER:
wcscpy(*wp, L"user");
@@ -595,6 +806,10 @@ append_entry_w(wchar_t **wp, const wchar_t *prefix, int tag,
case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
wname = NULL;
id = -1;
+ if ((type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
+ wcscpy(*wp, L"group@");
+ break;
+ }
/* FALLTHROUGH */
case ARCHIVE_ENTRY_ACL_GROUP:
wcscpy(*wp, L"group");
@@ -609,154 +824,184 @@ append_entry_w(wchar_t **wp, const wchar_t *prefix, int tag,
wname = NULL;
id = -1;
break;
+ case ARCHIVE_ENTRY_ACL_EVERYONE:
+ wcscpy(*wp, L"everyone@");
+ wname = NULL;
+ id = -1;
+ break;
}
*wp += wcslen(*wp);
*(*wp)++ = L':';
- if (wname != NULL) {
- wcscpy(*wp, wname);
+ if (((type & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0) ||
+ tag == ARCHIVE_ENTRY_ACL_USER ||
+ tag == ARCHIVE_ENTRY_ACL_GROUP) {
+ if (wname != NULL) {
+ wcscpy(*wp, wname);
+ *wp += wcslen(*wp);
+ } else if (tag == ARCHIVE_ENTRY_ACL_USER
+ || tag == ARCHIVE_ENTRY_ACL_GROUP) {
+ append_id_w(wp, id);
+ if ((type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) == 0)
+ id = -1;
+ }
+ /* Solaris style has no second colon after other and mask */
+ if (((flags & ARCHIVE_ENTRY_ACL_STYLE_SOLARIS) == 0)
+ || (tag != ARCHIVE_ENTRY_ACL_OTHER
+ && tag != ARCHIVE_ENTRY_ACL_MASK))
+ *(*wp)++ = L':';
+ }
+ if ((type & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0) {
+ /* POSIX.1e ACL perms */
+ *(*wp)++ = (perm & 0444) ? L'r' : L'-';
+ *(*wp)++ = (perm & 0222) ? L'w' : L'-';
+ *(*wp)++ = (perm & 0111) ? L'x' : L'-';
+ } else {
+ /* NFSv4 ACL perms */
+ for (i = 0; i < nfsv4_acl_perm_map_size; i++) {
+ if (perm & nfsv4_acl_perm_map[i].perm)
+ *(*wp)++ = nfsv4_acl_perm_map[i].wc;
+ else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
+ *(*wp)++ = L'-';
+ }
+ *(*wp)++ = L':';
+ for (i = 0; i < nfsv4_acl_flag_map_size; i++) {
+ if (perm & nfsv4_acl_flag_map[i].perm)
+ *(*wp)++ = nfsv4_acl_flag_map[i].wc;
+ else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
+ *(*wp)++ = L'-';
+ }
+ *(*wp)++ = L':';
+ switch (type) {
+ case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
+ wcscpy(*wp, L"allow");
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_DENY:
+ wcscpy(*wp, L"deny");
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_AUDIT:
+ wcscpy(*wp, L"audit");
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_ALARM:
+ wcscpy(*wp, L"alarm");
+ break;
+ default:
+ break;
+ }
*wp += wcslen(*wp);
- } else if (tag == ARCHIVE_ENTRY_ACL_USER
- || tag == ARCHIVE_ENTRY_ACL_GROUP) {
- append_id_w(wp, id);
- id = -1;
}
- *(*wp)++ = L':';
- *(*wp)++ = (perm & 0444) ? L'r' : L'-';
- *(*wp)++ = (perm & 0222) ? L'w' : L'-';
- *(*wp)++ = (perm & 0111) ? L'x' : L'-';
if (id != -1) {
*(*wp)++ = L':';
append_id_w(wp, id);
}
- **wp = L'\0';
}
-int
-archive_acl_text_l(struct archive_acl *acl, int flags,
- const char **acl_text, size_t *acl_text_len,
+/*
+ * Generate a text version of the ACL. The flags parameter controls
+ * the type and style of the generated ACL.
+ */
+char *
+archive_acl_to_text_l(struct archive_acl *acl, ssize_t *text_len, int flags,
struct archive_string_conv *sc)
{
int count;
- size_t length;
+ ssize_t length;
+ size_t len;
const char *name;
const char *prefix;
char separator;
struct archive_acl_entry *ap;
- size_t len;
- int id, r;
- char *p;
+ int id, r, want_type;
+ char *p, *s;
- if (acl->acl_text != NULL) {
- free (acl->acl_text);
- acl->acl_text = NULL;
- }
+ want_type = archive_acl_text_want_type(acl, flags);
- *acl_text = NULL;
- if (acl_text_len != NULL)
- *acl_text_len = 0;
- separator = ',';
- count = 0;
- length = 0;
- ap = acl->acl_head;
- while (ap != NULL) {
- if ((ap->type & flags) != 0) {
- count++;
- if ((flags & ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT) &&
- (ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT))
- length += 8; /* "default:" */
- length += 5; /* tag name */
- length += 1; /* colon */
- r = archive_mstring_get_mbs_l(
- &ap->name, &name, &len, sc);
- if (r != 0)
- return (-1);
- if (len > 0 && name != NULL)
- length += len;
- else
- length += sizeof(uid_t) * 3 + 1;
- length ++; /* colon */
- length += 3; /* rwx */
- length += 1; /* colon */
- length += max(sizeof(uid_t), sizeof(gid_t)) * 3 + 1;
- length ++; /* newline */
- }
- ap = ap->next;
- }
+ /* Both NFSv4 and POSIX.1 types found */
+ if (want_type == 0)
+ return (NULL);
- if (count > 0 && ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0)) {
- length += 10; /* "user::rwx\n" */
- length += 11; /* "group::rwx\n" */
- length += 11; /* "other::rwx\n" */
- }
+ if (want_type == ARCHIVE_ENTRY_ACL_TYPE_POSIX1E)
+ flags |= ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT;
- if (count == 0)
- return (0);
+ length = archive_acl_text_len(acl, want_type, flags, 0, NULL, sc);
+
+ if (length == 0)
+ return (NULL);
+
+ if (flags & ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA)
+ separator = ',';
+ else
+ separator = '\n';
/* Now, allocate the string and actually populate it. */
- p = acl->acl_text = (char *)malloc(length);
- if (p == NULL)
- return (-1);
+ p = s = (char *)malloc(length * sizeof(char));
+ if (p == NULL) {
+ if (errno == ENOMEM)
+ __archive_errx(1, "No memory");
+ return (NULL);
+ }
count = 0;
- if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
- append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_USER_OBJ, NULL,
+
+ if ((want_type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
+ append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, flags, NULL,
acl->mode & 0700, -1);
- *p++ = ',';
- append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_GROUP_OBJ, NULL,
+ *p++ = separator;
+ append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, flags, NULL,
acl->mode & 0070, -1);
- *p++ = ',';
- append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_OTHER, NULL,
+ *p++ = separator;
+ append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_OTHER, flags, NULL,
acl->mode & 0007, -1);
count += 3;
-
- for (ap = acl->acl_head; ap != NULL; ap = ap->next) {
- if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) == 0)
- continue;
- r = archive_mstring_get_mbs_l(
- &ap->name, &name, &len, sc);
- if (r != 0)
- return (-1);
- *p++ = separator;
- if (name == NULL || (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)) {
- id = ap->id;
- } else {
- id = -1;
- }
- append_entry(&p, NULL, ap->tag, name,
- ap->permset, id);
- count++;
- }
}
-
- if ((flags & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) != 0) {
- if (flags & ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT)
+ for (ap = acl->acl_head; ap != NULL; ap = ap->next) {
+ if ((ap->type & want_type) == 0)
+ continue;
+ /*
+ * Filemode-mapping ACL entries are stored exclusively in
+ * ap->mode so they should not be in the list
+ */
+ if ((ap->type == ARCHIVE_ENTRY_ACL_TYPE_ACCESS)
+ && (ap->tag == ARCHIVE_ENTRY_ACL_USER_OBJ
+ || ap->tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ
+ || ap->tag == ARCHIVE_ENTRY_ACL_OTHER))
+ continue;
+ if (ap->type == ARCHIVE_ENTRY_ACL_TYPE_DEFAULT &&
+ (flags & ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT) != 0)
prefix = "default:";
else
prefix = NULL;
- count = 0;
- for (ap = acl->acl_head; ap != NULL; ap = ap->next) {
- if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) == 0)
- continue;
- r = archive_mstring_get_mbs_l(
- &ap->name, &name, &len, sc);
- if (r != 0)
- return (-1);
- if (count > 0)
- *p++ = separator;
- if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
- id = ap->id;
- else
- id = -1;
- append_entry(&p, prefix, ap->tag,
- name, ap->permset, id);
- count ++;
+ r = archive_mstring_get_mbs_l(
+ &ap->name, &name, &len, sc);
+ if (r != 0)
+ return (NULL);
+ if (count > 0)
+ *p++ = separator;
+ if (name == NULL ||
+ (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)) {
+ id = ap->id;
+ } else {
+ id = -1;
}
+ append_entry(&p, prefix, ap->type, ap->tag, flags, name,
+ ap->permset, id);
+ count++;
}
- *acl_text = acl->acl_text;
- if (acl_text_len != NULL)
- *acl_text_len = strlen(acl->acl_text);
- return (0);
+ /* Add terminating character */
+ *p++ = '\0';
+
+ len = strlen(s);
+
+ if ((ssize_t)len > (length - 1))
+ __archive_errx(1, "Buffer overrun");
+
+ if (text_len != NULL)
+ *text_len = len;
+
+ return (s);
}
static void
@@ -770,9 +1015,11 @@ append_id(char **p, int id)
}
static void
-append_entry(char **p, const char *prefix, int tag,
- const char *name, int perm, int id)
+append_entry(char **p, const char *prefix, int type,
+ int tag, int flags, const char *name, int perm, int id)
{
+ int i;
+
if (prefix != NULL) {
strcpy(*p, prefix);
*p += strlen(*p);
@@ -781,6 +1028,10 @@ append_entry(char **p, const char *prefix, int tag,
case ARCHIVE_ENTRY_ACL_USER_OBJ:
name = NULL;
id = -1;
+ if ((type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
+ strcpy(*p, "owner@");
+ break;
+ }
/* FALLTHROUGH */
case ARCHIVE_ENTRY_ACL_USER:
strcpy(*p, "user");
@@ -788,6 +1039,10 @@ append_entry(char **p, const char *prefix, int tag,
case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
name = NULL;
id = -1;
+ if ((type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
+ strcpy(*p, "group@");
+ break;
+ }
/* FALLTHROUGH */
case ARCHIVE_ENTRY_ACL_GROUP:
strcpy(*p, "group");
@@ -802,48 +1057,120 @@ append_entry(char **p, const char *prefix, int tag,
name = NULL;
id = -1;
break;
+ case ARCHIVE_ENTRY_ACL_EVERYONE:
+ strcpy(*p, "everyone@");
+ name = NULL;
+ id = -1;
+ break;
}
*p += strlen(*p);
*(*p)++ = ':';
- if (name != NULL) {
- strcpy(*p, name);
+ if (((type & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0) ||
+ tag == ARCHIVE_ENTRY_ACL_USER ||
+ tag == ARCHIVE_ENTRY_ACL_GROUP) {
+ if (name != NULL) {
+ strcpy(*p, name);
+ *p += strlen(*p);
+ } else if (tag == ARCHIVE_ENTRY_ACL_USER
+ || tag == ARCHIVE_ENTRY_ACL_GROUP) {
+ append_id(p, id);
+ if ((type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) == 0)
+ id = -1;
+ }
+ /* Solaris style has no second colon after other and mask */
+ if (((flags & ARCHIVE_ENTRY_ACL_STYLE_SOLARIS) == 0)
+ || (tag != ARCHIVE_ENTRY_ACL_OTHER
+ && tag != ARCHIVE_ENTRY_ACL_MASK))
+ *(*p)++ = ':';
+ }
+ if ((type & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0) {
+ /* POSIX.1e ACL perms */
+ *(*p)++ = (perm & 0444) ? 'r' : '-';
+ *(*p)++ = (perm & 0222) ? 'w' : '-';
+ *(*p)++ = (perm & 0111) ? 'x' : '-';
+ } else {
+ /* NFSv4 ACL perms */
+ for (i = 0; i < nfsv4_acl_perm_map_size; i++) {
+ if (perm & nfsv4_acl_perm_map[i].perm)
+ *(*p)++ = nfsv4_acl_perm_map[i].c;
+ else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
+ *(*p)++ = '-';
+ }
+ *(*p)++ = ':';
+ for (i = 0; i < nfsv4_acl_flag_map_size; i++) {
+ if (perm & nfsv4_acl_flag_map[i].perm)
+ *(*p)++ = nfsv4_acl_flag_map[i].c;
+ else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
+ *(*p)++ = '-';
+ }
+ *(*p)++ = ':';
+ switch (type) {
+ case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
+ strcpy(*p, "allow");
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_DENY:
+ strcpy(*p, "deny");
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_AUDIT:
+ strcpy(*p, "audit");
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_ALARM:
+ strcpy(*p, "alarm");
+ break;
+ }
*p += strlen(*p);
- } else if (tag == ARCHIVE_ENTRY_ACL_USER
- || tag == ARCHIVE_ENTRY_ACL_GROUP) {
- append_id(p, id);
- id = -1;
}
- *(*p)++ = ':';
- *(*p)++ = (perm & 0444) ? 'r' : '-';
- *(*p)++ = (perm & 0222) ? 'w' : '-';
- *(*p)++ = (perm & 0111) ? 'x' : '-';
if (id != -1) {
*(*p)++ = ':';
append_id(p, id);
}
- **p = '\0';
}
/*
- * Parse a textual ACL. This automatically recognizes and supports
- * extensions described above. The 'type' argument is used to
- * indicate the type that should be used for any entries not
- * explicitly marked as "default:".
+ * Parse a wide ACL text string.
+ *
+ * The want_type argument may be one of the following:
+ * ARCHIVE_ENTRY_ACL_TYPE_ACCESS - text is a POSIX.1e ACL of type ACCESS
+ * ARCHIVE_ENTRY_ACL_TYPE_DEFAULT - text is a POSIX.1e ACL of type DEFAULT
+ * ARCHIVE_ENTRY_ACL_TYPE_NFS4 - text is as a NFSv4 ACL
+ *
+ * POSIX.1e ACL entries prefixed with "default:" are treated as
+ * ARCHIVE_ENTRY_ACL_TYPE_DEFAULT unless type is ARCHIVE_ENTRY_ACL_TYPE_NFS4
*/
int
-archive_acl_parse_w(struct archive_acl *acl,
- const wchar_t *text, int default_type)
+archive_acl_from_text_w(struct archive_acl *acl, const wchar_t *text,
+ int want_type)
{
struct {
const wchar_t *start;
const wchar_t *end;
- } field[4], name;
+ } field[6], name;
+
+ const wchar_t *s, *st;
- int fields, n;
- int type, tag, permset, id;
+ int numfields, fields, n, r, sol, ret;
+ int type, types, tag, permset, id;
+ size_t len;
wchar_t sep;
- while (text != NULL && *text != L'\0') {
+ ret = ARCHIVE_OK;
+ types = 0;
+
+ switch (want_type) {
+ case ARCHIVE_ENTRY_ACL_TYPE_POSIX1E:
+ want_type = ARCHIVE_ENTRY_ACL_TYPE_ACCESS;
+ case ARCHIVE_ENTRY_ACL_TYPE_ACCESS:
+ case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
+ numfields = 5;
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_NFS4:
+ numfields = 6;
+ break;
+ default:
+ return (ARCHIVE_FATAL);
+ }
+
+ while (text != NULL && *text != L'\0') {
/*
* Parse the fields out of the next entry,
* advance 'text' to start of next entry.
@@ -852,7 +1179,7 @@ archive_acl_parse_w(struct archive_acl *acl,
do {
const wchar_t *start, *end;
next_field_w(&text, &start, &end, &sep);
- if (fields < 4) {
+ if (fields < numfields) {
field[fields].start = start;
field[fields].end = end;
}
@@ -860,78 +1187,210 @@ archive_acl_parse_w(struct archive_acl *acl,
} while (sep == L':');
/* Set remaining fields to blank. */
- for (n = fields; n < 4; ++n)
+ for (n = fields; n < numfields; ++n)
field[n].start = field[n].end = NULL;
- /* Check for a numeric ID in field 1 or 3. */
- id = -1;
- isint_w(field[1].start, field[1].end, &id);
- /* Field 3 is optional. */
- if (id == -1 && fields > 3)
- isint_w(field[3].start, field[3].end, &id);
-
- /*
- * Solaris extension: "defaultuser::rwx" is the
- * default ACL corresponding to "user::rwx", etc.
- */
- if (field[0].end - field[0].start > 7
- && wmemcmp(field[0].start, L"default", 7) == 0) {
- type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
- field[0].start += 7;
- } else
- type = default_type;
+ if (field[0].start != NULL && *(field[0].start) == L'#') {
+ /* Comment, skip entry */
+ continue;
+ }
+ n = 0;
+ sol = 0;
+ id = -1;
+ permset = 0;
name.start = name.end = NULL;
- if (prefix_w(field[0].start, field[0].end, L"user")) {
- if (!ismode_w(field[2].start, field[2].end, &permset))
- return (ARCHIVE_WARN);
- if (id != -1 || field[1].start < field[1].end) {
- tag = ARCHIVE_ENTRY_ACL_USER;
- name = field[1];
+
+ if (want_type != ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
+ /* POSIX.1e ACLs */
+ /*
+ * Default keyword "default:user::rwx"
+ * if found, we have one more field
+ *
+ * We also support old Solaris extension:
+ * "defaultuser::rwx" is the default ACL corresponding
+ * to "user::rwx", etc. valid only for first field
+ */
+ s = field[0].start;
+ len = field[0].end - field[0].start;
+ if (*s == L'd' && (len == 1 || (len >= 7
+ && wmemcmp((s + 1), L"efault", 6) == 0))) {
+ type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
+ if (len > 7)
+ field[0].start += 7;
+ else
+ n = 1;
} else
- tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
- } else if (prefix_w(field[0].start, field[0].end, L"group")) {
- if (!ismode_w(field[2].start, field[2].end, &permset))
- return (ARCHIVE_WARN);
- if (id != -1 || field[1].start < field[1].end) {
- tag = ARCHIVE_ENTRY_ACL_GROUP;
+ type = want_type;
+
+ /* Check for a numeric ID in field n+1 or n+3. */
+ isint_w(field[n + 1].start, field[n + 1].end, &id);
+ /* Field n+3 is optional. */
+ if (id == -1 && fields > n+3)
+ isint_w(field[n + 3].start, field[n + 3].end,
+ &id);
+
+ tag = 0;
+ s = field[n].start;
+ st = field[n].start + 1;
+ len = field[n].end - field[n].start;
+
+ switch (*s) {
+ case L'u':
+ if (len == 1 || (len == 4
+ && wmemcmp(st, L"ser", 3) == 0))
+ tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
+ break;
+ case L'g':
+ if (len == 1 || (len == 5
+ && wmemcmp(st, L"roup", 4) == 0))
+ tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
+ break;
+ case L'o':
+ if (len == 1 || (len == 5
+ && wmemcmp(st, L"ther", 4) == 0))
+ tag = ARCHIVE_ENTRY_ACL_OTHER;
+ break;
+ case L'm':
+ if (len == 1 || (len == 4
+ && wmemcmp(st, L"ask", 3) == 0))
+ tag = ARCHIVE_ENTRY_ACL_MASK;
+ break;
+ default:
+ break;
+ }
+
+ switch (tag) {
+ case ARCHIVE_ENTRY_ACL_OTHER:
+ case ARCHIVE_ENTRY_ACL_MASK:
+ if (fields == (n + 2)
+ && field[n + 1].start < field[n + 1].end
+ && ismode_w(field[n + 1].start,
+ field[n + 1].end, &permset)) {
+ /* This is Solaris-style "other:rwx" */
+ sol = 1;
+ } else if (fields == (n + 3) &&
+ field[n + 1].start < field[n + 1].end) {
+ /* Invalid mask or other field */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ break;
+ case ARCHIVE_ENTRY_ACL_USER_OBJ:
+ case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
+ if (id != -1 ||
+ field[n + 1].start < field[n + 1].end) {
+ name = field[n + 1];
+ if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ)
+ tag = ARCHIVE_ENTRY_ACL_USER;
+ else
+ tag = ARCHIVE_ENTRY_ACL_GROUP;
+ }
+ break;
+ default:
+ /* Invalid tag, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+
+ /*
+ * Without "default:" we expect mode in field 2
+ * Exception: Solaris other and mask fields
+ */
+ if (permset == 0 && !ismode_w(field[n + 2 - sol].start,
+ field[n + 2 - sol].end, &permset)) {
+ /* Invalid mode, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ } else {
+ /* NFS4 ACLs */
+ s = field[0].start;
+ len = field[0].end - field[0].start;
+ tag = 0;
+
+ switch (len) {
+ case 4:
+ if (wmemcmp(s, L"user", 4) == 0)
+ tag = ARCHIVE_ENTRY_ACL_USER;
+ break;
+ case 5:
+ if (wmemcmp(s, L"group", 5) == 0)
+ tag = ARCHIVE_ENTRY_ACL_GROUP;
+ break;
+ case 6:
+ if (wmemcmp(s, L"owner@", 6) == 0)
+ tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
+ else if (wmemcmp(s, L"group@", len) == 0)
+ tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
+ break;
+ case 9:
+ if (wmemcmp(s, L"everyone@", 9) == 0)
+ tag = ARCHIVE_ENTRY_ACL_EVERYONE;
+ default:
+ break;
+ }
+
+ if (tag == 0) {
+ /* Invalid tag, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ } else if (tag == ARCHIVE_ENTRY_ACL_USER ||
+ tag == ARCHIVE_ENTRY_ACL_GROUP) {
+ n = 1;
name = field[1];
+ isint_w(name.start, name.end, &id);
} else
- tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
- } else if (prefix_w(field[0].start, field[0].end, L"other")) {
- if (fields == 2
- && field[1].start < field[1].end
- && ismode_w(field[1].start, field[1].end, &permset)) {
- /* This is Solaris-style "other:rwx" */
- } else if (fields == 3
- && field[1].start == field[1].end
- && field[2].start < field[2].end
- && ismode_w(field[2].start, field[2].end, &permset)) {
- /* This is FreeBSD-style "other::rwx" */
- } else
- return (ARCHIVE_WARN);
- tag = ARCHIVE_ENTRY_ACL_OTHER;
- } else if (prefix_w(field[0].start, field[0].end, L"mask")) {
- if (fields == 2
- && field[1].start < field[1].end
- && ismode_w(field[1].start, field[1].end, &permset)) {
- /* This is Solaris-style "mask:rwx" */
- } else if (fields == 3
- && field[1].start == field[1].end
- && field[2].start < field[2].end
- && ismode_w(field[2].start, field[2].end, &permset)) {
- /* This is FreeBSD-style "mask::rwx" */
- } else
- return (ARCHIVE_WARN);
- tag = ARCHIVE_ENTRY_ACL_MASK;
- } else
- return (ARCHIVE_WARN);
+ n = 0;
+
+ if (!is_nfs4_perms_w(field[1 + n].start,
+ field[1 + n].end, &permset)) {
+ /* Invalid NFSv4 perms, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ if (!is_nfs4_flags_w(field[2 + n].start,
+ field[2 + n].end, &permset)) {
+ /* Invalid NFSv4 flags, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ s = field[3 + n].start;
+ len = field[3 + n].end - field[3 + n].start;
+ type = 0;
+ if (len == 4) {
+ if (wmemcmp(s, L"deny", 4) == 0)
+ type = ARCHIVE_ENTRY_ACL_TYPE_DENY;
+ } else if (len == 5) {
+ if (wmemcmp(s, L"allow", 5) == 0)
+ type = ARCHIVE_ENTRY_ACL_TYPE_ALLOW;
+ else if (wmemcmp(s, L"audit", 5) == 0)
+ type = ARCHIVE_ENTRY_ACL_TYPE_AUDIT;
+ else if (wmemcmp(s, L"alarm", 5) == 0)
+ type = ARCHIVE_ENTRY_ACL_TYPE_ALARM;
+ }
+ if (type == 0) {
+ /* Invalid entry type, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ isint_w(field[4 + n].start, field[4 + n].end, &id);
+ }
/* Add entry to the internal list. */
- archive_acl_add_entry_w_len(acl, type, permset,
+ r = archive_acl_add_entry_w_len(acl, type, permset,
tag, id, name.start, name.end - name.start);
+ if (r < ARCHIVE_WARN)
+ return (r);
+ if (r != ARCHIVE_OK)
+ ret = ARCHIVE_WARN;
+ types |= type;
}
- return (ARCHIVE_OK);
+
+ /* Reset ACL */
+ archive_acl_reset(acl, types);
+
+ return (ret);
}
/*
@@ -977,16 +1436,122 @@ ismode_w(const wchar_t *start, const wchar_t *end, int *permset)
*permset = 0;
while (p < end) {
switch (*p++) {
- case 'r': case 'R':
+ case L'r': case L'R':
*permset |= ARCHIVE_ENTRY_ACL_READ;
break;
- case 'w': case 'W':
+ case L'w': case L'W':
*permset |= ARCHIVE_ENTRY_ACL_WRITE;
break;
- case 'x': case 'X':
+ case L'x': case L'X':
*permset |= ARCHIVE_ENTRY_ACL_EXECUTE;
break;
- case '-':
+ case L'-':
+ break;
+ default:
+ return (0);
+ }
+ }
+ return (1);
+}
+
+/*
+ * Parse a string as a NFS4 ACL permission field.
+ * Returns true if the string is non-empty and consists only of NFS4 ACL
+ * permission characters, false otherwise
+ */
+static int
+is_nfs4_perms_w(const wchar_t *start, const wchar_t *end, int *permset)
+{
+ const wchar_t *p = start;
+
+ while (p < end) {
+ switch (*p++) {
+ case L'r':
+ *permset |= ARCHIVE_ENTRY_ACL_READ_DATA;
+ break;
+ case L'w':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_DATA;
+ break;
+ case L'x':
+ *permset |= ARCHIVE_ENTRY_ACL_EXECUTE;
+ break;
+ case L'p':
+ *permset |= ARCHIVE_ENTRY_ACL_APPEND_DATA;
+ break;
+ case L'D':
+ *permset |= ARCHIVE_ENTRY_ACL_DELETE_CHILD;
+ break;
+ case L'd':
+ *permset |= ARCHIVE_ENTRY_ACL_DELETE;
+ break;
+ case L'a':
+ *permset |= ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES;
+ break;
+ case L'A':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES;
+ break;
+ case L'R':
+ *permset |= ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS;
+ break;
+ case L'W':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS;
+ break;
+ case L'c':
+ *permset |= ARCHIVE_ENTRY_ACL_READ_ACL;
+ break;
+ case L'C':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_ACL;
+ break;
+ case L'o':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_OWNER;
+ break;
+ case L's':
+ *permset |= ARCHIVE_ENTRY_ACL_SYNCHRONIZE;
+ break;
+ case L'-':
+ break;
+ default:
+ return(0);
+ }
+ }
+ return (1);
+}
+
+/*
+ * Parse a string as a NFS4 ACL flags field.
+ * Returns true if the string is non-empty and consists only of NFS4 ACL
+ * flag characters, false otherwise
+ */
+static int
+is_nfs4_flags_w(const wchar_t *start, const wchar_t *end, int *permset)
+{
+ const wchar_t *p = start;
+
+ while (p < end) {
+ switch(*p++) {
+ case L'f':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT;
+ break;
+ case L'd':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT;
+ break;
+ case L'i':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY;
+ break;
+ case L'n':
+ *permset |=
+ ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT;
+ break;
+ case L'S':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS;
+ break;
+ case L'F':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS;
+ break;
+ case L'I':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_INHERITED;
+ break;
+ case L'-':
break;
default:
return (0);
@@ -1033,46 +1598,48 @@ next_field_w(const wchar_t **wp, const wchar_t **start,
}
/*
- * Return true if the characters [start...end) are a prefix of 'test'.
- * This makes it easy to handle the obvious abbreviations: 'u' for 'user', etc.
- */
-static int
-prefix_w(const wchar_t *start, const wchar_t *end, const wchar_t *test)
-{
- if (start == end)
- return (0);
-
- if (*start++ != *test++)
- return (0);
-
- while (start < end && *start++ == *test++)
- ;
-
- if (start < end)
- return (0);
-
- return (1);
-}
-
-/*
- * Parse a textual ACL. This automatically recognizes and supports
- * extensions described above. The 'type' argument is used to
- * indicate the type that should be used for any entries not
- * explicitly marked as "default:".
+ * Parse an ACL text string.
+ *
+ * The want_type argument may be one of the following:
+ * ARCHIVE_ENTRY_ACL_TYPE_ACCESS - text is a POSIX.1e ACL of type ACCESS
+ * ARCHIVE_ENTRY_ACL_TYPE_DEFAULT - text is a POSIX.1e ACL of type DEFAULT
+ * ARCHIVE_ENTRY_ACL_TYPE_NFS4 - text is as a NFSv4 ACL
+ *
+ * POSIX.1e ACL entries prefixed with "default:" are treated as
+ * ARCHIVE_ENTRY_ACL_TYPE_DEFAULT unless type is ARCHIVE_ENTRY_ACL_TYPE_NFS4
*/
int
-archive_acl_parse_l(struct archive_acl *acl,
- const char *text, int default_type, struct archive_string_conv *sc)
+archive_acl_from_text_l(struct archive_acl *acl, const char *text,
+ int want_type, struct archive_string_conv *sc)
{
struct {
const char *start;
const char *end;
- } field[4], name;
+ } field[6], name;
- int fields, n, r, ret = ARCHIVE_OK;
- int type, tag, permset, id;
+ const char *s, *st;
+ int numfields, fields, n, r, sol, ret;
+ int type, types, tag, permset, id;
+ size_t len;
char sep;
+ switch (want_type) {
+ case ARCHIVE_ENTRY_ACL_TYPE_POSIX1E:
+ want_type = ARCHIVE_ENTRY_ACL_TYPE_ACCESS;
+ case ARCHIVE_ENTRY_ACL_TYPE_ACCESS:
+ case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
+ numfields = 5;
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_NFS4:
+ numfields = 6;
+ break;
+ default:
+ return (ARCHIVE_FATAL);
+ }
+
+ ret = ARCHIVE_OK;
+ types = 0;
+
while (text != NULL && *text != '\0') {
/*
* Parse the fields out of the next entry,
@@ -1082,7 +1649,7 @@ archive_acl_parse_l(struct archive_acl *acl,
do {
const char *start, *end;
next_field(&text, &start, &end, &sep);
- if (fields < 4) {
+ if (fields < numfields) {
field[fields].start = start;
field[fields].end = end;
}
@@ -1090,72 +1657,197 @@ archive_acl_parse_l(struct archive_acl *acl,
} while (sep == ':');
/* Set remaining fields to blank. */
- for (n = fields; n < 4; ++n)
+ for (n = fields; n < numfields; ++n)
field[n].start = field[n].end = NULL;
- /* Check for a numeric ID in field 1 or 3. */
- id = -1;
- isint(field[1].start, field[1].end, &id);
- /* Field 3 is optional. */
- if (id == -1 && fields > 3)
- isint(field[3].start, field[3].end, &id);
-
- /*
- * Solaris extension: "defaultuser::rwx" is the
- * default ACL corresponding to "user::rwx", etc.
- */
- if (field[0].end - field[0].start > 7
- && memcmp(field[0].start, "default", 7) == 0) {
- type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
- field[0].start += 7;
- } else
- type = default_type;
+ if (field[0].start != NULL && *(field[0].start) == '#') {
+ /* Comment, skip entry */
+ continue;
+ }
+ n = 0;
+ sol = 0;
+ id = -1;
+ permset = 0;
name.start = name.end = NULL;
- if (prefix_c(field[0].start, field[0].end, "user")) {
- if (!ismode(field[2].start, field[2].end, &permset))
- return (ARCHIVE_WARN);
- if (id != -1 || field[1].start < field[1].end) {
- tag = ARCHIVE_ENTRY_ACL_USER;
- name = field[1];
+
+ if (want_type != ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
+ /* POSIX.1e ACLs */
+ /*
+ * Default keyword "default:user::rwx"
+ * if found, we have one more field
+ *
+ * We also support old Solaris extension:
+ * "defaultuser::rwx" is the default ACL corresponding
+ * to "user::rwx", etc. valid only for first field
+ */
+ s = field[0].start;
+ len = field[0].end - field[0].start;
+ if (*s == 'd' && (len == 1 || (len >= 7
+ && memcmp((s + 1), "efault", 6) == 0))) {
+ type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
+ if (len > 7)
+ field[0].start += 7;
+ else
+ n = 1;
} else
- tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
- } else if (prefix_c(field[0].start, field[0].end, "group")) {
- if (!ismode(field[2].start, field[2].end, &permset))
- return (ARCHIVE_WARN);
- if (id != -1 || field[1].start < field[1].end) {
- tag = ARCHIVE_ENTRY_ACL_GROUP;
+ type = want_type;
+
+ /* Check for a numeric ID in field n+1 or n+3. */
+ isint(field[n + 1].start, field[n + 1].end, &id);
+ /* Field n+3 is optional. */
+ if (id == -1 && fields > (n + 3))
+ isint(field[n + 3].start, field[n + 3].end,
+ &id);
+
+ tag = 0;
+ s = field[n].start;
+ st = field[n].start + 1;
+ len = field[n].end - field[n].start;
+
+ switch (*s) {
+ case 'u':
+ if (len == 1 || (len == 4
+ && memcmp(st, "ser", 3) == 0))
+ tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
+ break;
+ case 'g':
+ if (len == 1 || (len == 5
+ && memcmp(st, "roup", 4) == 0))
+ tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
+ break;
+ case 'o':
+ if (len == 1 || (len == 5
+ && memcmp(st, "ther", 4) == 0))
+ tag = ARCHIVE_ENTRY_ACL_OTHER;
+ break;
+ case 'm':
+ if (len == 1 || (len == 4
+ && memcmp(st, "ask", 3) == 0))
+ tag = ARCHIVE_ENTRY_ACL_MASK;
+ break;
+ default:
+ break;
+ }
+
+ switch (tag) {
+ case ARCHIVE_ENTRY_ACL_OTHER:
+ case ARCHIVE_ENTRY_ACL_MASK:
+ if (fields == (n + 2)
+ && field[n + 1].start < field[n + 1].end
+ && ismode(field[n + 1].start,
+ field[n + 1].end, &permset)) {
+ /* This is Solaris-style "other:rwx" */
+ sol = 1;
+ } else if (fields == (n + 3) &&
+ field[n + 1].start < field[n + 1].end) {
+ /* Invalid mask or other field */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ break;
+ case ARCHIVE_ENTRY_ACL_USER_OBJ:
+ case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
+ if (id != -1 ||
+ field[n + 1].start < field[n + 1].end) {
+ name = field[n + 1];
+ if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ)
+ tag = ARCHIVE_ENTRY_ACL_USER;
+ else
+ tag = ARCHIVE_ENTRY_ACL_GROUP;
+ }
+ break;
+ default:
+ /* Invalid tag, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+
+ /*
+ * Without "default:" we expect mode in field 3
+ * Exception: Solaris other and mask fields
+ */
+ if (permset == 0 && !ismode(field[n + 2 - sol].start,
+ field[n + 2 - sol].end, &permset)) {
+ /* Invalid mode, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ } else {
+ /* NFS4 ACLs */
+ s = field[0].start;
+ len = field[0].end - field[0].start;
+ tag = 0;
+
+ switch (len) {
+ case 4:
+ if (memcmp(s, "user", 4) == 0)
+ tag = ARCHIVE_ENTRY_ACL_USER;
+ break;
+ case 5:
+ if (memcmp(s, "group", 5) == 0)
+ tag = ARCHIVE_ENTRY_ACL_GROUP;
+ break;
+ case 6:
+ if (memcmp(s, "owner@", 6) == 0)
+ tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
+ else if (memcmp(s, "group@", 6) == 0)
+ tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
+ break;
+ case 9:
+ if (memcmp(s, "everyone@", 9) == 0)
+ tag = ARCHIVE_ENTRY_ACL_EVERYONE;
+ break;
+ default:
+ break;
+ }
+
+ if (tag == 0) {
+ /* Invalid tag, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ } else if (tag == ARCHIVE_ENTRY_ACL_USER ||
+ tag == ARCHIVE_ENTRY_ACL_GROUP) {
+ n = 1;
name = field[1];
+ isint(name.start, name.end, &id);
} else
- tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
- } else if (prefix_c(field[0].start, field[0].end, "other")) {
- if (fields == 2
- && field[1].start < field[1].end
- && ismode(field[1].start, field[1].end, &permset)) {
- /* This is Solaris-style "other:rwx" */
- } else if (fields == 3
- && field[1].start == field[1].end
- && field[2].start < field[2].end
- && ismode(field[2].start, field[2].end, &permset)) {
- /* This is FreeBSD-style "other::rwx" */
- } else
- return (ARCHIVE_WARN);
- tag = ARCHIVE_ENTRY_ACL_OTHER;
- } else if (prefix_c(field[0].start, field[0].end, "mask")) {
- if (fields == 2
- && field[1].start < field[1].end
- && ismode(field[1].start, field[1].end, &permset)) {
- /* This is Solaris-style "mask:rwx" */
- } else if (fields == 3
- && field[1].start == field[1].end
- && field[2].start < field[2].end
- && ismode(field[2].start, field[2].end, &permset)) {
- /* This is FreeBSD-style "mask::rwx" */
- } else
- return (ARCHIVE_WARN);
- tag = ARCHIVE_ENTRY_ACL_MASK;
- } else
- return (ARCHIVE_WARN);
+ n = 0;
+
+ if (!is_nfs4_perms(field[1 + n].start,
+ field[1 + n].end, &permset)) {
+ /* Invalid NFSv4 perms, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ if (!is_nfs4_flags(field[2 + n].start,
+ field[2 + n].end, &permset)) {
+ /* Invalid NFSv4 flags, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ s = field[3 + n].start;
+ len = field[3 + n].end - field[3 + n].start;
+ type = 0;
+ if (len == 4) {
+ if (memcmp(s, "deny", 4) == 0)
+ type = ARCHIVE_ENTRY_ACL_TYPE_DENY;
+ } else if (len == 5) {
+ if (memcmp(s, "allow", 5) == 0)
+ type = ARCHIVE_ENTRY_ACL_TYPE_ALLOW;
+ else if (memcmp(s, "audit", 5) == 0)
+ type = ARCHIVE_ENTRY_ACL_TYPE_AUDIT;
+ else if (memcmp(s, "alarm", 5) == 0)
+ type = ARCHIVE_ENTRY_ACL_TYPE_ALARM;
+ }
+ if (type == 0) {
+ /* Invalid entry type, skip entry */
+ ret = ARCHIVE_WARN;
+ continue;
+ }
+ isint(field[4 + n].start, field[4 + n].end,
+ &id);
+ }
/* Add entry to the internal list. */
r = archive_acl_add_entry_len_l(acl, type, permset,
@@ -1164,7 +1856,12 @@ archive_acl_parse_l(struct archive_acl *acl,
return (r);
if (r != ARCHIVE_OK)
ret = ARCHIVE_WARN;
+ types |= type;
}
+
+ /* Reset ACL */
+ archive_acl_reset(acl, types);
+
return (ret);
}
@@ -1230,6 +1927,112 @@ ismode(const char *start, const char *end, int *permset)
}
/*
+ * Parse a string as a NFS4 ACL permission field.
+ * Returns true if the string is non-empty and consists only of NFS4 ACL
+ * permission characters, false otherwise
+ */
+static int
+is_nfs4_perms(const char *start, const char *end, int *permset)
+{
+ const char *p = start;
+
+ while (p < end) {
+ switch (*p++) {
+ case 'r':
+ *permset |= ARCHIVE_ENTRY_ACL_READ_DATA;
+ break;
+ case 'w':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_DATA;
+ break;
+ case 'x':
+ *permset |= ARCHIVE_ENTRY_ACL_EXECUTE;
+ break;
+ case 'p':
+ *permset |= ARCHIVE_ENTRY_ACL_APPEND_DATA;
+ break;
+ case 'D':
+ *permset |= ARCHIVE_ENTRY_ACL_DELETE_CHILD;
+ break;
+ case 'd':
+ *permset |= ARCHIVE_ENTRY_ACL_DELETE;
+ break;
+ case 'a':
+ *permset |= ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES;
+ break;
+ case 'A':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES;
+ break;
+ case 'R':
+ *permset |= ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS;
+ break;
+ case 'W':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS;
+ break;
+ case 'c':
+ *permset |= ARCHIVE_ENTRY_ACL_READ_ACL;
+ break;
+ case 'C':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_ACL;
+ break;
+ case 'o':
+ *permset |= ARCHIVE_ENTRY_ACL_WRITE_OWNER;
+ break;
+ case 's':
+ *permset |= ARCHIVE_ENTRY_ACL_SYNCHRONIZE;
+ break;
+ case '-':
+ break;
+ default:
+ return(0);
+ }
+ }
+ return (1);
+}
+
+/*
+ * Parse a string as a NFS4 ACL flags field.
+ * Returns true if the string is non-empty and consists only of NFS4 ACL
+ * flag characters, false otherwise
+ */
+static int
+is_nfs4_flags(const char *start, const char *end, int *permset)
+{
+ const char *p = start;
+
+ while (p < end) {
+ switch(*p++) {
+ case 'f':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT;
+ break;
+ case 'd':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT;
+ break;
+ case 'i':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY;
+ break;
+ case 'n':
+ *permset |=
+ ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT;
+ break;
+ case 'S':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS;
+ break;
+ case 'F':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS;
+ break;
+ case 'I':
+ *permset |= ARCHIVE_ENTRY_ACL_ENTRY_INHERITED;
+ break;
+ case '-':
+ break;
+ default:
+ return (0);
+ }
+ }
+ return (1);
+}
+
+/*
* Match "[:whitespace:]*(.*)[:whitespace:]*[:,\n]". *wp is updated
* to point to just after the separator. *start points to the first
* character of the matched text and *end just after the last
@@ -1264,25 +2067,3 @@ next_field(const char **p, const char **start,
if (**p != '\0')
(*p)++;
}
-
-/*
- * Return true if the characters [start...end) are a prefix of 'test'.
- * This makes it easy to handle the obvious abbreviations: 'u' for 'user', etc.
- */
-static int
-prefix_c(const char *start, const char *end, const char *test)
-{
- if (start == end)
- return (0);
-
- if (*start++ != *test++)
- return (0);
-
- while (start < end && *start++ == *test++)
- ;
-
- if (start < end)
- return (0);
-
- return (1);
-}
diff --git a/contrib/libarchive/libarchive/archive_acl_private.h b/contrib/libarchive/libarchive/archive_acl_private.h
index 1421adb..ef0b023 100644
--- a/contrib/libarchive/libarchive/archive_acl_private.h
+++ b/contrib/libarchive/libarchive/archive_acl_private.h
@@ -56,6 +56,7 @@ struct archive_acl {
void archive_acl_clear(struct archive_acl *);
void archive_acl_copy(struct archive_acl *, struct archive_acl *);
int archive_acl_count(struct archive_acl *, int);
+int archive_acl_types(struct archive_acl *);
int archive_acl_reset(struct archive_acl *, int);
int archive_acl_next(struct archive *, struct archive_acl *, int,
int *, int *, int *, int *, const char **);
@@ -66,22 +67,17 @@ int archive_acl_add_entry_w_len(struct archive_acl *,
int archive_acl_add_entry_len(struct archive_acl *,
int, int, int, int, const char *, size_t);
-const wchar_t *archive_acl_text_w(struct archive *, struct archive_acl *, int);
-int archive_acl_text_l(struct archive_acl *, int, const char **, size_t *,
+wchar_t *archive_acl_to_text_w(struct archive_acl *, ssize_t *, int,
+ struct archive *);
+char *archive_acl_to_text_l(struct archive_acl *, ssize_t *, int,
struct archive_string_conv *);
/*
- * Private ACL parser. This is private because it handles some
- * very weird formats that clients should not be messing with.
- * Clients should only deal with their platform-native formats.
- * Because of the need to support many formats cleanly, new arguments
- * are likely to get added on a regular basis. Clients who try to use
- * this interface are likely to be surprised when it changes.
+ * ACL text parser.
*/
-int archive_acl_parse_w(struct archive_acl *,
- const wchar_t *, int /* type */);
-int archive_acl_parse_l(struct archive_acl *,
- const char *, int /* type */,
- struct archive_string_conv *);
+int archive_acl_from_text_w(struct archive_acl *, const wchar_t * /* wtext */,
+ int /* type */);
+int archive_acl_from_text_l(struct archive_acl *, const char * /* text */,
+ int /* type */, struct archive_string_conv *);
#endif /* ARCHIVE_ENTRY_PRIVATE_H_INCLUDED */
diff --git a/contrib/libarchive/libarchive/archive_entry.c b/contrib/libarchive/libarchive/archive_entry.c
index f240025..556c402 100644
--- a/contrib/libarchive/libarchive/archive_entry.c
+++ b/contrib/libarchive/libarchive/archive_entry.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2003-2007 Tim Kientzle
+ * Copyright (c) 2016 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -1446,7 +1447,7 @@ archive_entry_acl_add_entry_w(struct archive_entry *entry,
int
archive_entry_acl_types(struct archive_entry *entry)
{
- return ((&entry->acl)->acl_types);
+ return (archive_acl_types(&entry->acl));
}
/*
@@ -1486,34 +1487,121 @@ archive_entry_acl_next(struct archive_entry *entry, int want_type, int *type,
}
/*
- * Generate a text version of the ACL. The flags parameter controls
+ * Generate a text version of the ACL. The flags parameter controls
* the style of the generated ACL.
*/
+wchar_t *
+archive_entry_acl_to_text_w(struct archive_entry *entry, ssize_t *len,
+ int flags)
+{
+ return (archive_acl_to_text_w(&entry->acl, len, flags,
+ entry->archive));
+}
+
+char *
+archive_entry_acl_to_text(struct archive_entry *entry, ssize_t *len,
+ int flags)
+{
+ return (archive_acl_to_text_l(&entry->acl, len, flags, NULL));
+}
+
+char *
+_archive_entry_acl_to_text_l(struct archive_entry *entry, ssize_t *len,
+ int flags, struct archive_string_conv *sc)
+{
+ return (archive_acl_to_text_l(&entry->acl, len, flags, sc));
+}
+
+/*
+ * ACL text parser.
+ */
+int
+archive_entry_acl_from_text_w(struct archive_entry *entry,
+ const wchar_t *wtext, int type)
+{
+ return (archive_acl_from_text_w(&entry->acl, wtext, type));
+}
+
+int
+archive_entry_acl_from_text(struct archive_entry *entry,
+ const char *text, int type)
+{
+ return (archive_acl_from_text_l(&entry->acl, text, type, NULL));
+}
+
+int
+_archive_entry_acl_from_text_l(struct archive_entry *entry, const char *text,
+ int type, struct archive_string_conv *sc)
+{
+ return (archive_acl_from_text_l(&entry->acl, text, type, sc));
+}
+
+/* Deprecated */
+static int
+archive_entry_acl_text_compat(int *flags)
+{
+ if ((*flags & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) == 0)
+ return (1);
+
+ /* ABI compat with old ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID */
+ if ((*flags & OLD_ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID) != 0)
+ *flags |= ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID;
+
+ /* ABI compat with old ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT */
+ if ((*flags & OLD_ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT) != 0)
+ *flags |= ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT;
+
+ *flags |= ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA;
+
+ return (0);
+}
+
+/* Deprecated */
const wchar_t *
archive_entry_acl_text_w(struct archive_entry *entry, int flags)
{
- const wchar_t *r;
- r = archive_acl_text_w(entry->archive, &entry->acl, flags);
- if (r == NULL && errno == ENOMEM)
- __archive_errx(1, "No memory");
- return (r);
+ if (entry->acl.acl_text_w != NULL) {
+ free(entry->acl.acl_text_w);
+ entry->acl.acl_text_w = NULL;
+ }
+ if (archive_entry_acl_text_compat(&flags) == 0)
+ entry->acl.acl_text_w = archive_acl_to_text_w(&entry->acl,
+ NULL, flags, entry->archive);
+ return (entry->acl.acl_text_w);
}
+/* Deprecated */
const char *
archive_entry_acl_text(struct archive_entry *entry, int flags)
{
- const char *p;
- if (archive_acl_text_l(&entry->acl, flags, &p, NULL, NULL) != 0
- && errno == ENOMEM)
- __archive_errx(1, "No memory");
- return (p);
+ if (entry->acl.acl_text != NULL) {
+ free(entry->acl.acl_text);
+ entry->acl.acl_text = NULL;
+ }
+ if (archive_entry_acl_text_compat(&flags) == 0)
+ entry->acl.acl_text = archive_acl_to_text_l(&entry->acl, NULL,
+ flags, NULL);
+
+ return (entry->acl.acl_text);
}
+/* Deprecated */
int
_archive_entry_acl_text_l(struct archive_entry *entry, int flags,
const char **acl_text, size_t *len, struct archive_string_conv *sc)
{
- return (archive_acl_text_l(&entry->acl, flags, acl_text, len, sc));
+ if (entry->acl.acl_text != NULL) {
+ free(entry->acl.acl_text);
+ entry->acl.acl_text = NULL;
+ }
+
+ if (archive_entry_acl_text_compat(&flags) == 0)
+ entry->acl.acl_text = archive_acl_to_text_l(&entry->acl,
+ (ssize_t *)len, flags, sc);
+
+ *acl_text = entry->acl.acl_text;
+
+ return (0);
}
/*
diff --git a/contrib/libarchive/libarchive/archive_entry.h b/contrib/libarchive/libarchive/archive_entry.h
index 27c473e..40d6afb 100644
--- a/contrib/libarchive/libarchive/archive_entry.h
+++ b/contrib/libarchive/libarchive/archive_entry.h
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2003-2008 Tim Kientzle
+ * Copyright (c) 2016 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -104,6 +105,12 @@ typedef int64_t la_int64_t;
# define __LA_DECL
#endif
+#if defined(__GNUC__) && __GNUC__ >= 3 && __GNUC_MINOR__ >= 1
+# define __LA_DEPRECATED __attribute__((deprecated))
+#else
+# define __LA_DEPRECATED
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -420,6 +427,7 @@ __LA_DECL void archive_entry_copy_mac_metadata(struct archive_entry *, const voi
/*
* Inheritance values (NFS4 ACLs only); included in permset.
*/
+#define ARCHIVE_ENTRY_ACL_ENTRY_INHERITED 0x01000000
#define ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT 0x02000000
#define ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT 0x04000000
#define ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT 0x08000000
@@ -433,15 +441,16 @@ __LA_DECL void archive_entry_copy_mac_metadata(struct archive_entry *, const voi
| ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT \
| ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY \
| ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS \
- | ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS)
+ | ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS \
+ | ARCHIVE_ENTRY_ACL_ENTRY_INHERITED)
/* We need to be able to specify combinations of these. */
-#define ARCHIVE_ENTRY_ACL_TYPE_ACCESS 256 /* POSIX.1e only */
-#define ARCHIVE_ENTRY_ACL_TYPE_DEFAULT 512 /* POSIX.1e only */
-#define ARCHIVE_ENTRY_ACL_TYPE_ALLOW 1024 /* NFS4 only */
-#define ARCHIVE_ENTRY_ACL_TYPE_DENY 2048 /* NFS4 only */
-#define ARCHIVE_ENTRY_ACL_TYPE_AUDIT 4096 /* NFS4 only */
-#define ARCHIVE_ENTRY_ACL_TYPE_ALARM 8192 /* NFS4 only */
+#define ARCHIVE_ENTRY_ACL_TYPE_ACCESS 0x00000100 /* POSIX.1e only */
+#define ARCHIVE_ENTRY_ACL_TYPE_DEFAULT 0x00000200 /* POSIX.1e only */
+#define ARCHIVE_ENTRY_ACL_TYPE_ALLOW 0x00000400 /* NFS4 only */
+#define ARCHIVE_ENTRY_ACL_TYPE_DENY 0x00000800 /* NFS4 only */
+#define ARCHIVE_ENTRY_ACL_TYPE_AUDIT 0x00001000 /* NFS4 only */
+#define ARCHIVE_ENTRY_ACL_TYPE_ALARM 0x00002000 /* NFS4 only */
#define ARCHIVE_ENTRY_ACL_TYPE_POSIX1E (ARCHIVE_ENTRY_ACL_TYPE_ACCESS \
| ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)
#define ARCHIVE_ENTRY_ACL_TYPE_NFS4 (ARCHIVE_ENTRY_ACL_TYPE_ALLOW \
@@ -492,21 +501,48 @@ __LA_DECL int archive_entry_acl_next_w(struct archive_entry *, int /* want_type
* Construct a text-format ACL. The flags argument is a bitmask that
* can include any of the following:
*
+ * Flags only for archive entries with POSIX.1e ACL:
* ARCHIVE_ENTRY_ACL_TYPE_ACCESS - Include POSIX.1e "access" entries.
* ARCHIVE_ENTRY_ACL_TYPE_DEFAULT - Include POSIX.1e "default" entries.
- * ARCHIVE_ENTRY_ACL_TYPE_NFS4 - Include NFS4 entries.
- * ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID - Include extra numeric ID field in
- * each ACL entry. ('star' introduced this for POSIX.1e, this flag
- * also applies to NFS4.)
* ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT - Include "default:" before each
- * default ACL entry, as used in old Solaris ACLs.
+ * default ACL entry.
+ * ARCHIVE_ENTRY_ACL_STYLE_SOLARIS - Output only one colon after "other" and
+ * "mask" entries.
+ *
+ * Flags only for archive entries with NFSv4 ACL:
+ * ARCHIVE_ENTRY_ACL_STYLE_COMPACT - Do not output the minus character for
+ * unset permissions and flags in NFSv4 ACL permission and flag fields
+ *
+ * Flags for for archive entries with POSIX.1e ACL or NFSv4 ACL:
+ * ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID - Include extra numeric ID field in
+ * each ACL entry.
+ * ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA - Separate entries with comma
+ * instead of newline.
*/
-#define ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID 1024
-#define ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT 2048
+#define ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID 0x00000001
+#define ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT 0x00000002
+#define ARCHIVE_ENTRY_ACL_STYLE_SOLARIS 0x00000004
+#define ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA 0x00000008
+#define ARCHIVE_ENTRY_ACL_STYLE_COMPACT 0x00000010
+
+__LA_DECL wchar_t *archive_entry_acl_to_text_w(struct archive_entry *,
+ ssize_t * /* len */, int /* flags */);
+__LA_DECL char *archive_entry_acl_to_text(struct archive_entry *,
+ ssize_t * /* len */, int /* flags */);
+__LA_DECL int archive_entry_acl_from_text_w(struct archive_entry *,
+ const wchar_t * /* wtext */, int /* type */);
+__LA_DECL int archive_entry_acl_from_text(struct archive_entry *,
+ const char * /* text */, int /* type */);
+
+/* Deprecated constants */
+#define OLD_ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID 1024
+#define OLD_ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT 2048
+
+/* Deprecated functions */
__LA_DECL const wchar_t *archive_entry_acl_text_w(struct archive_entry *,
- int /* flags */);
+ int /* flags */) __LA_DEPRECATED;
__LA_DECL const char *archive_entry_acl_text(struct archive_entry *,
- int /* flags */);
+ int /* flags */) __LA_DEPRECATED;
/* Return bitmask of ACL types in an archive entry */
__LA_DECL int archive_entry_acl_types(struct archive_entry *);
diff --git a/contrib/libarchive/libarchive/archive_entry_acl.3 b/contrib/libarchive/libarchive/archive_entry_acl.3
index e85c4de..c5115f7 100644
--- a/contrib/libarchive/libarchive/archive_entry_acl.3
+++ b/contrib/libarchive/libarchive/archive_entry_acl.3
@@ -1,4 +1,5 @@
.\" Copyright (c) 2010 Joerg Sonnenberger
+.\" Copyright (c) 2016 Martin Matuska
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -22,7 +23,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd February 2, 2012
+.Dd February 15, 2017
.Dt ARCHIVE_ENTRY_ACL 3
.Os
.Sh NAME
@@ -30,10 +31,13 @@
.Nm archive_entry_acl_add_entry_w ,
.Nm archive_entry_acl_clear ,
.Nm archive_entry_acl_count ,
+.Nm archive_entry_acl_from_text ,
+.Nm archive_entry_acl_from_text_w,
.Nm archive_entry_acl_next ,
.Nm archive_entry_acl_next_w ,
.Nm archive_entry_acl_reset ,
-.Nm archive_entry_acl_text_w ,
+.Nm archive_entry_acl_to_text ,
+.Nm archive_entry_acl_to_text_w ,
.Nm archive_entry_acl_types
.Nd functions for manipulating Access Control Lists in archive entry descriptions
.Sh LIBRARY
@@ -63,6 +67,18 @@ Streaming Archive Library (libarchive, -larchive)
.Ft int
.Fn archive_entry_acl_count "struct archive_entry *a" "int type"
.Ft int
+.Fo archive_entry_acl_from_text
+.Fa "struct archive_entry *a"
+.Fa "const char *text"
+.Fa "int type"
+.Fc
+.Ft int
+.Fo archive_entry_acl_from_text_w
+.Fa "struct archive_entry *a"
+.Fa "const wchar_t *text"
+.Fa "int type"
+.Fc
+.Ft int
.Fo archive_entry_acl_next
.Fa "struct archive_entry *a"
.Fa "int type"
@@ -84,33 +100,48 @@ Streaming Archive Library (libarchive, -larchive)
.Fc
.Ft int
.Fn archive_entry_acl_reset "struct archive_entry *a" "int type"
-.Ft const wchar_t *
-.Fn archive_entry_acl_text_w "struct archive_entry *a" "int flags"
+.Ft char *
+.Fo archive_entry_acl_to_text
+.Fa "struct archive_entry *a"
+.Fa "ssize_t *len_p"
+.Fa "int flags"
+.Fc
+.Ft wchar_t *
+.Fo archive_entry_acl_to_text_w
+.Fa "struct archive_entry *a"
+.Fa "ssize_t *len_p"
+.Fa "int flags"
+.Fc
.Ft int
.Fn archive_entry_acl_types "struct archive_entry *a"
.\" enum?
.Sh DESCRIPTION
-An
-.Dq Access Control List
-is a generalisation of the classic Unix permission system.
+The
+.Dq Access Control Lists (ACLs)
+extend the standard Unix perssion model.
The ACL interface of
.Nm libarchive
-is derived from the POSIX.1e draft, but restricted to simplify dealing
-with practical implementations in various Operating Systems and archive formats.
-.Pp
-An ACL consists of a number of independent entries.
+supports both POSIX.1e and NFSv4 style ACLs. Use of ACLs is restricted by
+various levels of ACL support in operating systems, file systems and archive
+formats.
+.Ss POSIX.1e Access Control Lists
+A POSIX.1e ACL consists of a number of independent entries.
Each entry specifies the permission set as bitmask of basic permissions.
-Valid permissions are:
+Valid permissions in the
+.Fa permset
+are:
.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_EXECUTE"
-.It Dv ARCHIVE_ENTRY_ACL_EXECUTE
-.It Dv ARCHIVE_ENTRY_ACL_WRITE
-.It Dv ARCHIVE_ENTRY_ACL_READ
+.It Dv ARCHIVE_ENTRY_ACL_READ ( Sy r )
+.It Dv ARCHIVE_ENTRY_ACL_WRITE ( Sy w )
+.It Dv ARCHIVE_ENTRY_ACL_EXECUTE ( Sy x )
.El
The permissions correspond to the normal Unix permissions.
.Pp
-The tag specifies the principal to which the permission applies.
+The
+.Fa tag
+specifies the principal to which the permission applies.
Valid values are:
-.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_GROUP_OBJ"
+.Bl -hang -offset indent -compact -width "ARCHIVE_ENTRY_ACL_GROUP_OBJ"
.It Dv ARCHIVE_ENTRY_ACL_USER
The user specified by the name field.
.It Dv ARCHIVE_ENTRY_ACL_USER_OBJ
@@ -122,8 +153,9 @@ The group who owns the file.
.It Dv ARCHIVE_ENTRY_ACL_MASK
The maximum permissions to be obtained via group permissions.
.It Dv ARCHIVE_ENTRY_ACL_OTHER
-Any principal who doesn't have a user or group entry.
+Any principal who is not file owner or a member of the owning group.
.El
+.Pp
The principals
.Dv ARCHIVE_ENTRY_ACL_USER_OBJ ,
.Dv ARCHIVE_ENTRY_ACL_GROUP_OBJ
@@ -132,19 +164,123 @@ and
are equivalent to user, group and other in the classic Unix permission
model and specify non-extended ACL entries.
.Pp
-All files have an access ACL
+All files with have an access ACL
.Pq Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS .
This specifies the permissions required for access to the file itself.
Directories have an additional ACL
.Pq Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT ,
which controls the initial access ACL for newly created directory entries.
+.Ss NFSv4 Access Control Lists
+A NFSv4 ACL consists of multiple individual entries called Access Control
+Entries (ACEs).
+.Pp
+There are four possible types of a NFSv4 ACE:
+.Bl -hang -offset indent -compact -width "ARCHIVE_ENTRY_ACL_TYE_ALLOW"
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_ALLOW
+Allow principal to perform actions requiring given permissions.
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_DENY
+Prevent principal from performing actions requiring given permissions.
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_AUDIT
+Log access attempts by principal which require given permissions.
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_ALARM
+Trigger a system alarm on access attempts by principal which require given
+permissions.
+.El
+.Pp
+The
+.Fa tag
+specifies the principal to which the permission applies.
+Valid values are:
+.Bl -hang -offset indent -compact -width "ARCHIVE_ENTRY_ACL_GROUP_OBJ"
+.It Dv ARCHIVE_ENTRY_ACL_USER
+The user specified by the name field.
+.It Dv ARCHIVE_ENTRY_ACL_USER_OBJ
+The owner of the file.
+.It Dv ARCHIVE_ENTRY_ACL_GROUP
+The group specied by the name field.
+.It Dv ARCHIVE_ENTRY_ACL_GROUP_OBJ
+The group who owns the file.
+.It Dv ARCHIVE_ENTRY_ACL_EVERYONE
+Any principal who is not file owner or a member of the owning group.
+.El
+.Pp
+Entries with the
+.Dv ARCHIVE_ENTRY_ACL_USER
+or
+.Dv ARCHIVE_ENTRY_ACL_GROUP
+tag store the user and group name in the
+.Fa name
+string and optionally the user or group ID in the
+.Fa qualifier
+integer.
+.Pp
+NFSv4 ACE permissions and flags are stored in the same
+.Fa permset
+bitfield. Some permissions share the same constant and permission character but
+have different effect on directories than on files. The following ACE
+permissions are supported:
+.Bl -tag -offset indent -compact -width ARCHIV
+.It Dv ARCHIVE_ENTRY_ACL_READ_DATA ( Sy r )
+Read data (file).
+.It Dv ARCHIVE_ENTRY_ACL_LIST_DIRECTORY ( Sy r )
+List entries (directory).
+.It ARCHIVE_ENTRY_ACL_WRITE_DATA ( Sy w )
+Write data (file).
+.It ARCHIVE_ENTRY_ACL_ADD_FILE ( Sy w )
+Create files (directory).
+.It Dv ARCHIVE_ENTRY_ACL_EXECUTE ( Sy x )
+Execute file or change into a directory.
+.It Dv ARCHIVE_ENTRY_ACL_APPEND_DATA ( Sy p )
+Append data (file).
+.It Dv ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY ( Sy p )
+Create subdirectories (directory).
+.It Dv ARCHIVE_ENTRY_ACL_DELETE_CHILD ( Sy D )
+Remove files and subdirectories inside a directory.
+.It Dv ARCHIVE_ENTRY_ACL_DELETE ( Sy d )
+Remove file or directory.
+.It Dv ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES ( Sy a )
+Read file or directory attributes.
+.It Dv ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES ( Sy A )
+Write file or directory attributes.
+.It Dv ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS ( Sy R )
+Read named file or directory attributes.
+.It Dv ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS ( Sy W )
+Write named file or directory attributes.
+.It Dv ARCHIVE_ENTRY_ACL_READ_ACL ( Sy c )
+Read file or directory ACL.
+.It Dv ARCHIVE_ENTRY_ACL_WRITE_ACL ( Sy C )
+Write file or directory ACL.
+.It Dv ARCHIVE_ENTRY_ACL_WRITE_OWNER ( Sy o )
+Change owner of a file or directory.
+.It Dv ARCHIVE_ENTRY_ACL_SYNCHRONIZE ( Sy s )
+Use synchronous I/O.
+.El
.Pp
+The following NFSv4 ACL inheritance flags are supported:
+.Bl -tag -offset indent -compact -width ARCHIV
+.It Dv ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT ( Sy f )
+Inherit parent directory ACE to files.
+.It Dv ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT ( Sy d )
+Inherit parent directory ACE to subdirectories.
+.It Dv ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY ( Sy i )
+Only inherit, do not apply the permission on the directory itself.
+.It Dv ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT ( Sy n )
+Do not propagate inherit flags. Only first-level entries inherit ACLs.
+.It Dv ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS ( Sy S )
+Trigger alarm or audit on succesful access.
+.It Dv ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS ( Sy F )
+Trigger alarm or audit on failed access.
+.It Dv ARCHIVE_ENTRY_ACL_ENTRY_INHERITED ( Sy I )
+Mark that ACE was inherited.
+.El
+.Ss Functions
.Fn archive_entry_acl_add_entry
and
.Fn archive_entry_acl_add_entry_w
add a single ACL entry.
For the access ACL and non-extended principals, the classic Unix permissions
-are updated.
+are updated. An archive enry cannot contain both POSIX.1e and NFSv4 ACL
+entries.
.Pp
.Fn archive_entry_acl_clear
removes all ACL entries and resets the enumeration pointer.
@@ -153,14 +289,58 @@ removes all ACL entries and resets the enumeration pointer.
counts the ACL entries that have the given type mask.
.Fa type
can be the bitwise-or of
-.Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
-and
-.Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT .
-If
+.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_TYPE_DEFAULT"
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
+.El
+for POSIX.1e ACLs and
+.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_TYPE_ALLOW"
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_ALLOW
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_DENY
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_AUDIT
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_ALARM
+.El
+for NFSv4 ACLs. For POSIX.1e ACLs if
.Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
is included and at least one extended ACL entry is found,
the three non-extened ACLs are added.
.Pp
+.Fn archive_entry_acl_from_text
+and
+.Fn archive_entry_acl_from_text_w
+add new
+.Pq or merge with existing
+ACL entries from
+.Pq wide
+text. The argument
+.Fa type
+may take one of the following values:
+.Bl -tag -offset indent -compact -width "ARCHIVE_ENTRY_ACL_TYPE_DEFAULT"
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_NFS4
+.El
+Supports all formats that can be created with
+.Fn archive_entry_acl_to_text
+or respective
+.Fn archive_entry_acl_to_text_w .
+Existing ACL entries are preserved. To get a clean new ACL from text
+.Fn archive_entry_acl_clear
+must be called first. Entries prefixed with
+.Dq default:
+are treated as
+.Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
+unless
+.Fa type
+is
+.Dv ARCHIVE_ENTRY_ACL_TYPE_NFS4 .
+Invalid entries, non-parseable ACL entries and entries beginning with
+the
+.Sq #
+character
+.Pq comments
+are skipped.
+.Pp
.Fn archive_entry_acl_next
and
.Fn archive_entry_acl_next_w
@@ -182,19 +362,57 @@ or set using
Otherwise, the function returns the same value as
.Fn archive_entry_acl_count .
.Pp
-.Fn archive_entry_acl_text_w
-converts the ACL entries for the given type mask into a wide string.
-In addition to the normal type flags,
-.Dv ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID
+.Fn archive_entry_acl_to_text
and
-.Dv ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT
-can be specified to further customize the result.
-The returned long string is valid until the next call to
-.Fn archive_entry_acl_clear ,
-.Fn archive_entry_acl_add_entry ,
-.Fn archive_entry_acl_add_entry_w
+.Fn archive_entry_acl_to_text_w
+convert the ACL entries for the given type into a
+.Pq wide
+string of ACL entries separated by newline. If the the pointer
+.Fa len_p
+is not NULL, then the function shall return the length of the string
+.Pq not including the NULL terminator
+in the location pointed to by
+.Fa len_p .
+The
+.Fa flag
+argument is a bitwise-or.
+.Pp
+The following flags are effective only on POSIX.1e ACL:
+.Bl -tag -offset indent -compact -width ARCHIV
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
+Output access ACLs.
+.It Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
+Output POSIX.1e default ACLs.
+.It Dv ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT
+Prefix each default ACL entry with the word
+.Dq default: .
+.It Dv ARCHIVE_ENTRY_ACL_STYLE_SOLARIS
+The mask and other ACLs don not contain a double colon.
+.El
+.Pp
+The following flags are effecive only on NFSv4 ACL:
+.Bl -tag -offset indent -compact -width ARCHIV
+.It Dv ARCHIVE_ENTRY_ACL_STYLE_COMPACT
+Do not output minus characters for unset permissions and flags in NFSv4 ACL
+permission and flag fields.
+.El
+.Pp
+The following flags are effective on both POSIX.1e and NFSv4 ACL:
+.Bl -tag -offset indent -compact -width ARCHIV
+.It Dv ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID
+Add an additional colon-separated field containing the user or group id.
+.It Dv ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA
+Separate ACL entries with comma instead of newline.
+.El
+.Pp
+If the archive entry contains NFSv4 ACLs, all types of NFSv4 ACLs are returned.
+It the entry contains POSIX.1e ACLs and none of the flags
+.Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
or
-.Fn archive_entry_acl_text_w .
+.Dv ARCHIVE_ENTRY_ACL_TYPE_DEFAULT
+are specified, both access and default entries are returned and default entries
+are prefixed with
+.Dq default: .
.Pp
.Fn archive_entry_acl_types
get ACL entry types contained in an archive entry's ACL. As POSIX.1e and NFSv4
@@ -205,11 +423,20 @@ an ACL already contains POSIX.1e or NFSv4 ACL entries.
and
.Fn archive_entry_acl_reset
returns the number of ACL entries that match the given type mask.
-If the type mask includes
+For POSIX.1e ACLS if the type mask includes
.Dv ARCHIVE_ENTRY_ACL_TYPE_ACCESS
and at least one extended ACL entry exists, the three classic Unix
permissions are counted.
.Pp
+.Fn archive_entry_acl_from_text
+and
+.Fn archive_entry_acl_from_text_w
+return
+.Dv ARCHIVE_OK
+if all entries were successfully parsed and
+.Dv ARCHIVE_WARN
+if one or more entries were invalid or non-parseable.
+.Pp
.Fn archive_entry_acl_next
and
.Fn archive_entry_acl_next_w
@@ -224,23 +451,16 @@ if
.Fn archive_entry_acl_reset
has not been called first.
.Pp
-.Fn archive_entry_text_w
-returns a wide string representation of the ACL entrise matching the
-given type mask.
-The returned long string is valid until the next call to
-.Fn archive_entry_acl_clear ,
-.Fn archive_entry_acl_add_entry ,
-.Fn archive_entry_acl_add_entry_w
-or
-.Fn archive_entry_acl_text_w .
+.Fn archive_entry_acl_to_text
+returns a string representing the ACL entries matching the given type and
+flags on success or NULL on error.
+.Pp
+.Fn archive_entry_acl_to_text_w
+returns a wide string representing the ACL entries matching the given type
+and flags on success or NULL on error.
.Pp
.Fn archive_entry_acl_types
returns a bitmask of ACL entry types or 0 if archive entry has no ACL entries.
.Sh SEE ALSO
-.Xr archive_entry 3
-.Xr libarchive 3 ,
-.Sh BUGS
-.Dv ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID
-and
-.Dv ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT
-are not documented.
+.Xr archive_entry 3 ,
+.Xr libarchive 3
diff --git a/contrib/libarchive/libarchive/archive_entry_locale.h b/contrib/libarchive/libarchive/archive_entry_locale.h
index 02e024a..44550c5 100644
--- a/contrib/libarchive/libarchive/archive_entry_locale.h
+++ b/contrib/libarchive/libarchive/archive_entry_locale.h
@@ -63,9 +63,13 @@ int _archive_entry_uname_l(struct archive_entry *,
const char **, size_t *, struct archive_string_conv *);
#define archive_entry_acl_text_l _archive_entry_acl_text_l
int _archive_entry_acl_text_l(struct archive_entry *, int,
- const char **, size_t *, struct archive_string_conv *);
-
-
+const char **, size_t *, struct archive_string_conv *) __LA_DEPRECATED;
+#define archive_entry_acl_to_text_l _archive_entry_acl_to_text_l
+char *_archive_entry_acl_to_text_l(struct archive_entry *, ssize_t *, int,
+ struct archive_string_conv *);
+#define archive_entry_acl_from_text_l _archive_entry_acl_from_text_l
+int _archive_entry_acl_from_text_l(struct archive_entry *, const char* text,
+ int type, struct archive_string_conv *);
#define archive_entry_copy_gname_l _archive_entry_copy_gname_l
int _archive_entry_copy_gname_l(struct archive_entry *,
const char *, size_t, struct archive_string_conv *);
diff --git a/contrib/libarchive/libarchive/archive_entry_strmode.c b/contrib/libarchive/libarchive/archive_entry_strmode.c
index 8d7006a..d80a7d4 100644
--- a/contrib/libarchive/libarchive/archive_entry_strmode.c
+++ b/contrib/libarchive/libarchive/archive_entry_strmode.c
@@ -80,7 +80,7 @@ archive_entry_strmode(struct archive_entry *entry)
if (mode & 0001) bp[9] = 't';
else bp[9] = 'T';
}
- if (archive_entry_acl_count(entry, ARCHIVE_ENTRY_ACL_TYPE_ACCESS))
+ if (archive_entry_acl_types(entry) != 0)
bp[10] = '+';
return (bp);
diff --git a/contrib/libarchive/libarchive/archive_match.c b/contrib/libarchive/libarchive/archive_match.c
index 0719cbd..be72066 100644
--- a/contrib/libarchive/libarchive/archive_match.c
+++ b/contrib/libarchive/libarchive/archive_match.c
@@ -471,7 +471,7 @@ archive_match_path_excluded(struct archive *_a,
}
/*
- * Utilty functions to get statistic information for inclusion patterns.
+ * Utility functions to get statistic information for inclusion patterns.
*/
int
archive_match_path_unmatched_inclusions(struct archive *_a)
@@ -1270,7 +1270,7 @@ set_timefilter_pathname_wcs(struct archive_match *a, int timetype,
#endif /* _WIN32 && !__CYGWIN__ */
/*
- * Call back funtions for archive_rb.
+ * Call back functions for archive_rb.
*/
static int
cmp_node_mbs(const struct archive_rb_node *n1,
@@ -1405,7 +1405,7 @@ add_entry(struct archive_match *a, int flag,
&(a->exclusion_tree), pathname);
/*
- * We always overwrite comparison condision.
+ * We always overwrite comparison condition.
* If you do not want to overwrite it, you should not
* call archive_match_exclude_entry(). We cannot know
* what behavior you really expect since overwriting
@@ -1481,7 +1481,7 @@ time_excluded(struct archive_match *a, struct archive_entry *entry)
if (nsec == a->older_ctime_nsec &&
(a->older_ctime_filter & ARCHIVE_MATCH_EQUAL)
== 0)
- return (1); /* Eeual, skip it. */
+ return (1); /* Equal, skip it. */
}
}
if (a->newer_mtime_filter) {
@@ -1513,7 +1513,7 @@ time_excluded(struct archive_match *a, struct archive_entry *entry)
}
}
- /* If there is no excluson list, include the file. */
+ /* If there is no exclusion list, include the file. */
if (a->exclusion_entry_list.count == 0)
return (0);
@@ -1700,7 +1700,7 @@ add_owner_id(struct archive_match *a, struct id_array *ids, int64_t id)
break;
}
- /* Add oowner id. */
+ /* Add owner id. */
if (i == ids->count)
ids->ids[ids->count++] = id;
else if (ids->ids[i] != id) {
diff --git a/contrib/libarchive/libarchive/archive_platform.h b/contrib/libarchive/libarchive/archive_platform.h
index 76816c4..31383db 100644
--- a/contrib/libarchive/libarchive/archive_platform.h
+++ b/contrib/libarchive/libarchive/archive_platform.h
@@ -147,8 +147,25 @@
* acl_set_file(), and ACL_USER, we assume it has the rest of the
* POSIX.1e draft functions used in archive_read_extract.c.
*/
-#if HAVE_SYS_ACL_H && HAVE_ACL_CREATE_ENTRY && HAVE_ACL_INIT && HAVE_ACL_SET_FILE && HAVE_ACL_USER
+#if HAVE_SYS_ACL_H && HAVE_ACL_CREATE_ENTRY && HAVE_ACL_INIT && HAVE_ACL_SET_FILE
+#if HAVE_ACL_USER
#define HAVE_POSIX_ACL 1
+#elif HAVE_ACL_TYPE_EXTENDED
+#define HAVE_DARWIN_ACL 1
+#endif
+#endif
+
+/*
+ * If this platform has <sys/acl.h>, acl_get(), facl_get(), acl_set(),
+ * facl_set() and types aclent_t and ace_t it uses Solaris-style ACL functions
+ */
+#if HAVE_SYS_ACL_H && HAVE_ACL_GET && HAVE_FACL_GET && HAVE_ACL_SET && HAVE_FACL_SET && HAVE_ACLENT_T && HAVE_ACE_T
+#define HAVE_SUN_ACL 1
+#endif
+
+/* Define if platform supports NFSv4 ACLs */
+#if (HAVE_POSIX_ACL && HAVE_ACL_TYPE_NFS4) || HAVE_SUN_ACL || HAVE_DARWIN_ACL
+#define HAVE_NFS4_ACL 1
#endif
/*
diff --git a/contrib/libarchive/libarchive/archive_random.c b/contrib/libarchive/libarchive/archive_random.c
index a20b9b1..357f973 100644
--- a/contrib/libarchive/libarchive/archive_random.c
+++ b/contrib/libarchive/libarchive/archive_random.c
@@ -80,7 +80,7 @@ archive_random(void *buf, size_t nbytes)
success = CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT);
- if (!success && GetLastError() == NTE_BAD_KEYSET) {
+ if (!success && GetLastError() == (DWORD)NTE_BAD_KEYSET) {
success = CryptAcquireContext(&hProv, NULL, NULL,
PROV_RSA_FULL, CRYPT_NEWKEYSET);
}
diff --git a/contrib/libarchive/libarchive/archive_rb.c b/contrib/libarchive/libarchive/archive_rb.c
index 5b5da20..cf58ac3 100644
--- a/contrib/libarchive/libarchive/archive_rb.c
+++ b/contrib/libarchive/libarchive/archive_rb.c
@@ -312,7 +312,7 @@ __archive_rb_tree_insert_rebalance(struct archive_rb_tree *rbt,
father = RB_FATHER(self);
if (RB_BLACK_P(father)) {
/*
- * If our greatgrandpa is black, we're done.
+ * If our great-grandpa is black, we're done.
*/
return;
}
diff --git a/contrib/libarchive/libarchive/archive_read_disk.3 b/contrib/libarchive/libarchive/archive_read_disk.3
index 525dc59..2a5c130 100644
--- a/contrib/libarchive/libarchive/archive_read_disk.3
+++ b/contrib/libarchive/libarchive/archive_read_disk.3
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd February 2, 2012
+.Dd December 30, 2016
.Dt ARCHIVE_READ_DISK 3
.Os
.Sh NAME
@@ -54,9 +54,9 @@ Streaming Archive Library (libarchive, -larchive)
.Fn archive_read_disk_set_symlink_physical "struct archive *"
.Ft int
.Fn archive_read_disk_set_symlink_hybrid "struct archive *"
-.Ft int
+.Ft const char *
.Fn archive_read_disk_gname "struct archive *" "gid_t"
-.Ft int
+.Ft const char *
.Fn archive_read_disk_uname "struct archive *" "uid_t"
.Ft int
.Fo archive_read_disk_set_gname_lookup
diff --git a/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c b/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
index e9fb8ba..ef6875f 100644
--- a/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
+++ b/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c
@@ -1,6 +1,7 @@
/*-
* Copyright (c) 2003-2009 Tim Kientzle
* Copyright (c) 2010-2012 Michihiro NAKAJIMA
+ * Copyright (c) 2016 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -37,6 +38,11 @@ __FBSDID("$FreeBSD$");
#ifdef HAVE_SYS_ACL_H
#include <sys/acl.h>
#endif
+#ifdef HAVE_DARWIN_ACL
+#include <membership.h>
+#include <grp.h>
+#include <pwd.h>
+#endif
#ifdef HAVE_SYS_EXTATTR_H
#include <sys/extattr.h>
#endif
@@ -117,6 +123,15 @@ __FBSDID("$FreeBSD$");
#define ACL_GET_PERM acl_get_perm_np
#endif
+/* NFSv4 platform ACL type */
+#if HAVE_SUN_ACL
+#define ARCHIVE_PLATFORM_ACL_TYPE_NFS4 ACE_T
+#elif HAVE_DARWIN_ACL
+#define ARCHIVE_PLATFORM_ACL_TYPE_NFS4 ACL_TYPE_EXTENDED
+#elif HAVE_ACL_TYPE_NFS4
+#define ARCHIVE_PLATFORM_ACL_TYPE_NFS4 ACL_TYPE_NFS4
+#endif
+
static int setup_acls(struct archive_read_disk *,
struct archive_entry *, int *fd);
static int setup_mac_metadata(struct archive_read_disk *,
@@ -404,17 +419,38 @@ setup_mac_metadata(struct archive_read_disk *a,
}
#endif
+#if HAVE_DARWIN_ACL
+static int translate_guid(struct archive *, acl_entry_t,
+ int *, int *, const char **);
+
+static void add_trivial_nfs4_acl(struct archive_entry *);
+#endif
-#ifdef HAVE_POSIX_ACL
+#if HAVE_SUN_ACL
+static int
+sun_acl_is_trivial(acl_t *, mode_t, int *trivialp);
+#endif
+
+#if HAVE_POSIX_ACL || HAVE_NFS4_ACL
static int translate_acl(struct archive_read_disk *a,
- struct archive_entry *entry, acl_t acl, int archive_entry_acl_type);
+ struct archive_entry *entry,
+#if HAVE_SUN_ACL
+ acl_t *acl,
+#else
+ acl_t acl,
+#endif
+ int archive_entry_acl_type);
static int
setup_acls(struct archive_read_disk *a,
struct archive_entry *entry, int *fd)
{
const char *accpath;
- acl_t acl;
+#if HAVE_SUN_ACL
+ acl_t *acl;
+#else
+ acl_t acl;
+#endif
int r;
accpath = archive_entry_sourcepath(entry);
@@ -439,17 +475,20 @@ setup_acls(struct archive_read_disk *a,
acl = NULL;
-#ifdef ACL_TYPE_NFS4
- /* Try NFS4 ACL first. */
+#if HAVE_NFS4_ACL
+ /* Try NFSv4 ACL first. */
if (*fd >= 0)
-#if HAVE_ACL_GET_FD_NP
- acl = acl_get_fd_np(*fd, ACL_TYPE_NFS4);
+#if HAVE_SUN_ACL
+ /* Solaris reads both POSIX.1e and NFSv4 ACL here */
+ facl_get(*fd, 0, &acl);
+#elif HAVE_ACL_GET_FD_NP
+ acl = acl_get_fd_np(*fd, ARCHIVE_PLATFORM_ACL_TYPE_NFS4);
#else
acl = acl_get_fd(*fd);
#endif
#if HAVE_ACL_GET_LINK_NP
else if (!a->follow_symlinks)
- acl = acl_get_link_np(accpath, ACL_TYPE_NFS4);
+ acl = acl_get_link_np(accpath, ARCHIVE_PLATFORM_ACL_TYPE_NFS4);
#else
else if ((!a->follow_symlinks)
&& (archive_entry_filetype(entry) == AE_IFLNK))
@@ -458,12 +497,24 @@ setup_acls(struct archive_read_disk *a,
acl = NULL;
#endif
else
- acl = acl_get_file(accpath, ACL_TYPE_NFS4);
+#if HAVE_SUN_ACL
+ /* Solaris reads both POSIX.1e and NFSv4 ACLs here */
+ acl_get(accpath, 0, &acl);
+#else
+ acl = acl_get_file(accpath, ARCHIVE_PLATFORM_ACL_TYPE_NFS4);
+#endif
-#if HAVE_ACL_IS_TRIVIAL_NP
- if (acl != NULL && acl_is_trivial_np(acl, &r) == 0) {
- /* Ignore "trivial" ACLs that just mirror the file mode. */
- if (r) {
+
+#if HAVE_ACL_IS_TRIVIAL_NP || HAVE_SUN_ACL
+ /* Ignore "trivial" ACLs that just mirror the file mode. */
+ if (acl != NULL) {
+#if HAVE_SUN_ACL
+ if (sun_acl_is_trivial(acl, archive_entry_mode(entry),
+ &r) == 0 && r == 1)
+#elif HAVE_ACL_IS_TRIVIAL_NP
+ if (acl_is_trivial_np(acl, &r) == 0 && r == 1)
+#endif
+ {
acl_free(acl);
acl = NULL;
/*
@@ -473,17 +524,35 @@ setup_acls(struct archive_read_disk *a,
return (ARCHIVE_OK);
}
}
-#endif
+#endif /* HAVE_ACL_IS_TRIVIAL_NP || HAVE_SUN_ACL */
if (acl != NULL) {
r = translate_acl(a, entry, acl, ARCHIVE_ENTRY_ACL_TYPE_NFS4);
acl_free(acl);
if (r != ARCHIVE_OK) {
archive_set_error(&a->archive, errno,
+#if HAVE_SUN_ACL
+ "Couldn't translate ACLs: %s", accpath);
+#else
"Couldn't translate NFSv4 ACLs: %s", accpath);
+#endif
}
+#if HAVE_DARWIN_ACL
+ /*
+ * Because Mac OS doesn't support owner@, group@ and everyone@
+ * ACLs we need to add NFSv4 ACLs mirroring the file mode to
+ * the archive entry. Otherwise extraction on non-Mac platforms
+ * would lead to an invalid file mode.
+ */
+ if (archive_entry_acl_count(entry,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4) > 0)
+ add_trivial_nfs4_acl(entry);
+#endif
return (r);
}
-#endif /* ACL_TYPE_NFS4 */
+#endif /* HAVE_NFS4_ACL */
+
+#if HAVE_POSIX_ACL
+ /* This code path is skipped on MacOS and Solaris */
/* Retrieve access ACL from file. */
if (*fd >= 0)
@@ -512,8 +581,7 @@ setup_acls(struct archive_read_disk *a,
#endif
if (acl != NULL) {
- r = translate_acl(a, entry, acl,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
+ r = translate_acl(a, entry, acl, ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
acl_free(acl);
acl = NULL;
if (r != ARCHIVE_OK) {
@@ -525,6 +593,11 @@ setup_acls(struct archive_read_disk *a,
/* Only directories can have default ACLs. */
if (S_ISDIR(archive_entry_mode(entry))) {
+#if HAVE_ACL_GET_FD_NP
+ if (*fd >= 0)
+ acl = acl_get_fd_np(*fd, ACL_TYPE_DEFAULT);
+ else
+#endif
acl = acl_get_file(accpath, ACL_TYPE_DEFAULT);
if (acl != NULL) {
r = translate_acl(a, entry, acl,
@@ -538,68 +611,560 @@ setup_acls(struct archive_read_disk *a,
}
}
}
+#endif /* HAVE_POSIX_ACL */
return (ARCHIVE_OK);
}
/*
- * Translate system ACL into libarchive internal structure.
+ * Translate system ACL permissions into libarchive internal structure
*/
-
-static struct {
- int archive_perm;
- int platform_perm;
+static const struct {
+ const int archive_perm;
+ const int platform_perm;
} acl_perm_map[] = {
- {ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
- {ARCHIVE_ENTRY_ACL_WRITE, ACL_WRITE},
- {ARCHIVE_ENTRY_ACL_READ, ACL_READ},
-#ifdef ACL_TYPE_NFS4
- {ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
- {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
- {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
- {ARCHIVE_ENTRY_ACL_ADD_FILE, ACL_ADD_FILE},
- {ARCHIVE_ENTRY_ACL_APPEND_DATA, ACL_APPEND_DATA},
- {ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACL_ADD_SUBDIRECTORY},
- {ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACL_READ_NAMED_ATTRS},
- {ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACL_WRITE_NAMED_ATTRS},
- {ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACL_DELETE_CHILD},
- {ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACL_READ_ATTRIBUTES},
- {ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACL_WRITE_ATTRIBUTES},
- {ARCHIVE_ENTRY_ACL_DELETE, ACL_DELETE},
- {ARCHIVE_ENTRY_ACL_READ_ACL, ACL_READ_ACL},
- {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_ACL},
- {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_WRITE_OWNER},
- {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
+#if HAVE_SUN_ACL /* Solaris NFSv4 ACL permissions */
+ {ARCHIVE_ENTRY_ACL_EXECUTE, ACE_EXECUTE},
+ {ARCHIVE_ENTRY_ACL_READ_DATA, ACE_READ_DATA},
+ {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACE_LIST_DIRECTORY},
+ {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACE_WRITE_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_FILE, ACE_ADD_FILE},
+ {ARCHIVE_ENTRY_ACL_APPEND_DATA, ACE_APPEND_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACE_ADD_SUBDIRECTORY},
+ {ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACE_READ_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACE_WRITE_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACE_DELETE_CHILD},
+ {ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACE_READ_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACE_WRITE_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_DELETE, ACE_DELETE},
+ {ARCHIVE_ENTRY_ACL_READ_ACL, ACE_READ_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACE_WRITE_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACE_WRITE_OWNER},
+ {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACE_SYNCHRONIZE}
+#elif HAVE_DARWIN_ACL /* MacOS ACL permissions */
+ {ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
+ {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
+ {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_FILE, ACL_ADD_FILE},
+ {ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
+ {ARCHIVE_ENTRY_ACL_DELETE, ACL_DELETE},
+ {ARCHIVE_ENTRY_ACL_APPEND_DATA, ACL_APPEND_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACL_ADD_SUBDIRECTORY},
+ {ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACL_DELETE_CHILD},
+ {ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACL_READ_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACL_WRITE_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACL_READ_EXTATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACL_WRITE_EXTATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_READ_ACL, ACL_READ_SECURITY},
+ {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_SECURITY},
+ {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_CHANGE_OWNER},
+ {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
+#else /* POSIX.1e ACL permissions */
+ {ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
+ {ARCHIVE_ENTRY_ACL_WRITE, ACL_WRITE},
+ {ARCHIVE_ENTRY_ACL_READ, ACL_READ},
+#if HAVE_ACL_TYPE_NFS4 /* FreeBSD NFSv4 ACL permissions */
+ {ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
+ {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
+ {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_FILE, ACL_ADD_FILE},
+ {ARCHIVE_ENTRY_ACL_APPEND_DATA, ACL_APPEND_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACL_ADD_SUBDIRECTORY},
+ {ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACL_READ_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACL_WRITE_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACL_DELETE_CHILD},
+ {ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACL_READ_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACL_WRITE_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_DELETE, ACL_DELETE},
+ {ARCHIVE_ENTRY_ACL_READ_ACL, ACL_READ_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_WRITE_OWNER},
+ {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
#endif
+#endif /* !HAVE_SUN_ACL && !HAVE_DARWIN_ACL */
};
-#ifdef ACL_TYPE_NFS4
-static struct {
- int archive_inherit;
- int platform_inherit;
+#if HAVE_NFS4_ACL
+/*
+ * Translate system NFSv4 inheritance flags into libarchive internal structure
+ */
+static const struct {
+ const int archive_inherit;
+ const int platform_inherit;
} acl_inherit_map[] = {
- {ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_FILE_INHERIT},
+#if HAVE_SUN_ACL /* Solaris ACL inheritance flags */
+ {ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACE_FILE_INHERIT_ACE},
+ {ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACE_DIRECTORY_INHERIT_ACE},
+ {ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACE_NO_PROPAGATE_INHERIT_ACE},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACE_INHERIT_ONLY_ACE},
+ {ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS, ACE_SUCCESSFUL_ACCESS_ACE_FLAG},
+ {ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS, ACE_FAILED_ACCESS_ACE_FLAG},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERITED, ACE_INHERITED_ACE}
+#elif HAVE_DARWIN_ACL /* MacOS NFSv4 inheritance flags */
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERITED, ACL_ENTRY_INHERITED},
+ {ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_FILE_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_LIMIT_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_ONLY_INHERIT}
+#else /* FreeBSD NFSv4 ACL inheritance flags */
+ {ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_FILE_INHERIT},
{ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT},
{ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_NO_PROPAGATE_INHERIT},
- {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY}
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY},
+ {ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS, ACL_ENTRY_SUCCESSFUL_ACCESS},
+ {ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS, ACL_ENTRY_FAILED_ACCESS},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERITED, ACL_ENTRY_INHERITED}
+#endif /* !HAVE_SUN_ACL && !HAVE_DARWIN_ACL */
};
-#endif
+#endif /* HAVE_NFS4_ACL */
+
+#if HAVE_DARWIN_ACL
+static int translate_guid(struct archive *a, acl_entry_t acl_entry,
+ int *ae_id, int *ae_tag, const char **ae_name)
+{
+ void *q;
+ uid_t ugid;
+ int r, idtype;
+ struct passwd *pwd;
+ struct group *grp;
+
+ q = acl_get_qualifier(acl_entry);
+ if (q == NULL)
+ return (1);
+ r = mbr_uuid_to_id((const unsigned char *)q, &ugid, &idtype);
+ if (r != 0) {
+ acl_free(q);
+ return (1);
+ }
+ if (idtype == ID_TYPE_UID) {
+ *ae_tag = ARCHIVE_ENTRY_ACL_USER;
+ pwd = getpwuuid(q);
+ if (pwd == NULL) {
+ *ae_id = ugid;
+ *ae_name = NULL;
+ } else {
+ *ae_id = pwd->pw_uid;
+ *ae_name = archive_read_disk_uname(a, *ae_id);
+ }
+ } else if (idtype == ID_TYPE_GID) {
+ *ae_tag = ARCHIVE_ENTRY_ACL_GROUP;
+ grp = getgruuid(q);
+ if (grp == NULL) {
+ *ae_id = ugid;
+ *ae_name = NULL;
+ } else {
+ *ae_id = grp->gr_gid;
+ *ae_name = archive_read_disk_gname(a, *ae_id);
+ }
+ } else
+ r = 1;
+
+ acl_free(q);
+ return (r);
+}
+
+/*
+ * Add trivial NFSv4 ACL entries from mode
+ */
+static void
+add_trivial_nfs4_acl(struct archive_entry *entry)
+{
+ mode_t mode;
+ int i;
+ const int rperm = ARCHIVE_ENTRY_ACL_READ_DATA;
+ const int wperm = ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA;
+ const int eperm = ARCHIVE_ENTRY_ACL_EXECUTE;
+ const int pubset = ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE;
+ const int ownset = pubset | ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER;
+
+ struct {
+ const int type;
+ const int tag;
+ int permset;
+ } tacl_entry[] = {
+ {ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_USER_OBJ, 0},
+ {ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_USER_OBJ, 0},
+ {ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0},
+ {ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_USER_OBJ, ownset},
+ {ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_GROUP_OBJ, pubset},
+ {ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EVERYONE, pubset}
+ };
+
+ mode = archive_entry_mode(entry);
+
+ /* Permissions for everyone@ */
+ if (mode & 0004)
+ tacl_entry[5].permset |= rperm;
+ if (mode & 0002)
+ tacl_entry[5].permset |= wperm;
+ if (mode & 0001)
+ tacl_entry[5].permset |= eperm;
+
+ /* Permissions for group@ */
+ if (mode & 0040)
+ tacl_entry[4].permset |= rperm;
+ else if (mode & 0004)
+ tacl_entry[2].permset |= rperm;
+ if (mode & 0020)
+ tacl_entry[4].permset |= wperm;
+ else if (mode & 0002)
+ tacl_entry[2].permset |= wperm;
+ if (mode & 0010)
+ tacl_entry[4].permset |= eperm;
+ else if (mode & 0001)
+ tacl_entry[2].permset |= eperm;
+
+ /* Permissions for owner@ */
+ if (mode & 0400) {
+ tacl_entry[3].permset |= rperm;
+ if (!(mode & 0040) && (mode & 0004))
+ tacl_entry[0].permset |= rperm;
+ } else if ((mode & 0040) || (mode & 0004))
+ tacl_entry[1].permset |= rperm;
+ if (mode & 0200) {
+ tacl_entry[3].permset |= wperm;
+ if (!(mode & 0020) && (mode & 0002))
+ tacl_entry[0].permset |= wperm;
+ } else if ((mode & 0020) || (mode & 0002))
+ tacl_entry[1].permset |= wperm;
+ if (mode & 0100) {
+ tacl_entry[3].permset |= eperm;
+ if (!(mode & 0010) && (mode & 0001))
+ tacl_entry[0].permset |= eperm;
+ } else if ((mode & 0010) || (mode & 0001))
+ tacl_entry[1].permset |= eperm;
+
+ for (i = 0; i < 6; i++) {
+ if (tacl_entry[i].permset != 0) {
+ archive_entry_acl_add_entry(entry,
+ tacl_entry[i].type, tacl_entry[i].permset,
+ tacl_entry[i].tag, -1, NULL);
+ }
+ }
+
+ return;
+}
+#elif HAVE_SUN_ACL
+/*
+ * Check if acl is trivial
+ * This is a FreeBSD acl_is_trivial_np() implementation for Solaris
+ */
+static int
+sun_acl_is_trivial(acl_t *acl, mode_t mode, int *trivialp)
+{
+ int i, p;
+ const uint32_t rperm = ACE_READ_DATA;
+ const uint32_t wperm = ACE_WRITE_DATA | ACE_APPEND_DATA;
+ const uint32_t eperm = ACE_EXECUTE;
+ const uint32_t pubset = ACE_READ_ATTRIBUTES | ACE_READ_NAMED_ATTRS |
+ ACE_READ_ACL | ACE_SYNCHRONIZE;
+ const uint32_t ownset = pubset | ACE_WRITE_ATTRIBUTES |
+ ACE_WRITE_NAMED_ATTRS | ACE_WRITE_ACL | ACE_WRITE_OWNER;
+
+ ace_t *ace;
+ ace_t tace[6];
+
+ if (acl == NULL || trivialp == NULL)
+ return (-1);
+
+ *trivialp = 0;
+
+ /* ACL_IS_TRIVIAL flag must be set for both POSIX.1e and NFSv4 ACLs */
+ if ((acl->acl_flags & ACL_IS_TRIVIAL) == 0)
+ return (0);
+
+ /*
+ * POSIX.1e ACLs marked with ACL_IS_TRIVIAL are compatible with
+ * FreeBSD acl_is_trivial_np(). On Solaris they have 4 entries,
+ * including mask.
+ */
+ if (acl->acl_type == ACLENT_T) {
+ if (acl->acl_cnt == 4)
+ *trivialp = 1;
+ return (0);
+ }
+
+ if (acl->acl_type != ACE_T || acl->acl_entry_size != sizeof(ace_t))
+ return (-1);
+
+ /*
+ * Continue with checking NFSv4 ACLs
+ *
+ * Create list of trivial ace's to be compared
+ */
+
+ /* owner@ allow pre */
+ tace[0].a_flags = ACE_OWNER;
+ tace[0].a_type = ACE_ACCESS_ALLOWED_ACE_TYPE;
+ tace[0].a_access_mask = 0;
+
+ /* owner@ deny */
+ tace[1].a_flags = ACE_OWNER;
+ tace[1].a_type = ACE_ACCESS_DENIED_ACE_TYPE;
+ tace[1].a_access_mask = 0;
+
+ /* group@ deny */
+ tace[2].a_flags = ACE_GROUP | ACE_IDENTIFIER_GROUP;
+ tace[2].a_type = ACE_ACCESS_DENIED_ACE_TYPE;
+ tace[2].a_access_mask = 0;
+
+ /* owner@ allow */
+ tace[3].a_flags = ACE_OWNER;
+ tace[3].a_type = ACE_ACCESS_ALLOWED_ACE_TYPE;
+ tace[3].a_access_mask = ownset;
+
+ /* group@ allow */
+ tace[4].a_flags = ACE_GROUP | ACE_IDENTIFIER_GROUP;
+ tace[4].a_type = ACE_ACCESS_ALLOWED_ACE_TYPE;
+ tace[4].a_access_mask = pubset;
+
+ /* everyone@ allow */
+ tace[5].a_flags = ACE_EVERYONE;
+ tace[5].a_type = ACE_ACCESS_ALLOWED_ACE_TYPE;
+ tace[5].a_access_mask = pubset;
+
+ /* Permissions for everyone@ */
+ if (mode & 0004)
+ tace[5].a_access_mask |= rperm;
+ if (mode & 0002)
+ tace[5].a_access_mask |= wperm;
+ if (mode & 0001)
+ tace[5].a_access_mask |= eperm;
+
+ /* Permissions for group@ */
+ if (mode & 0040)
+ tace[4].a_access_mask |= rperm;
+ else if (mode & 0004)
+ tace[2].a_access_mask |= rperm;
+ if (mode & 0020)
+ tace[4].a_access_mask |= wperm;
+ else if (mode & 0002)
+ tace[2].a_access_mask |= wperm;
+ if (mode & 0010)
+ tace[4].a_access_mask |= eperm;
+ else if (mode & 0001)
+ tace[2].a_access_mask |= eperm;
+
+ /* Permissions for owner@ */
+ if (mode & 0400) {
+ tace[3].a_access_mask |= rperm;
+ if (!(mode & 0040) && (mode & 0004))
+ tace[0].a_access_mask |= rperm;
+ } else if ((mode & 0040) || (mode & 0004))
+ tace[1].a_access_mask |= rperm;
+ if (mode & 0200) {
+ tace[3].a_access_mask |= wperm;
+ if (!(mode & 0020) && (mode & 0002))
+ tace[0].a_access_mask |= wperm;
+ } else if ((mode & 0020) || (mode & 0002))
+ tace[1].a_access_mask |= wperm;
+ if (mode & 0100) {
+ tace[3].a_access_mask |= eperm;
+ if (!(mode & 0010) && (mode & 0001))
+ tace[0].a_access_mask |= eperm;
+ } else if ((mode & 0010) || (mode & 0001))
+ tace[1].a_access_mask |= eperm;
+
+ /* Check if the acl count matches */
+ p = 3;
+ for (i = 0; i < 3; i++) {
+ if (tace[i].a_access_mask != 0)
+ p++;
+ }
+ if (acl->acl_cnt != p)
+ return (0);
+
+ p = 0;
+ for (i = 0; i < 6; i++) {
+ if (tace[i].a_access_mask != 0) {
+ ace = &((ace_t *)acl->acl_aclp)[p];
+ /*
+ * Illumos added ACE_DELETE_CHILD to write perms for
+ * directories. We have to check against that, too.
+ */
+ if (ace->a_flags != tace[i].a_flags ||
+ ace->a_type != tace[i].a_type ||
+ (ace->a_access_mask != tace[i].a_access_mask &&
+ ((acl->acl_flags & ACL_IS_DIR) == 0 ||
+ (tace[i].a_access_mask & wperm) == 0 ||
+ ace->a_access_mask !=
+ (tace[i].a_access_mask | ACE_DELETE_CHILD))))
+ return (0);
+ p++;
+ }
+ }
+
+ *trivialp = 1;
+ return (0);
+}
+#endif /* HAVE_SUN_ACL */
+
+#if HAVE_SUN_ACL
+/*
+ * Translate Solaris POSIX.1e and NFSv4 ACLs into libarchive internal ACL
+ */
+static int
+translate_acl(struct archive_read_disk *a,
+ struct archive_entry *entry, acl_t *acl, int default_entry_acl_type)
+{
+ int e, i;
+ int ae_id, ae_tag, ae_perm;
+ int entry_acl_type;
+ const char *ae_name;
+ aclent_t *aclent;
+ ace_t *ace;
+
+ (void)default_entry_acl_type;
+
+ if (acl->acl_cnt <= 0)
+ return (ARCHIVE_OK);
+
+ for (e = 0; e < acl->acl_cnt; e++) {
+ ae_name = NULL;
+ ae_tag = 0;
+ ae_perm = 0;
+
+ if (acl->acl_type == ACE_T) {
+ ace = &((ace_t *)acl->acl_aclp)[e];
+ ae_id = ace->a_who;
+
+ switch(ace->a_type) {
+ case ACE_ACCESS_ALLOWED_ACE_TYPE:
+ entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_ALLOW;
+ break;
+ case ACE_ACCESS_DENIED_ACE_TYPE:
+ entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_DENY;
+ break;
+ case ACE_SYSTEM_AUDIT_ACE_TYPE:
+ entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_ACCESS;
+ break;
+ case ACE_SYSTEM_ALARM_ACE_TYPE:
+ entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_ALARM;
+ break;
+ default:
+ /* Unknown entry type, skip */
+ continue;
+ }
+
+ if ((ace->a_flags & ACE_OWNER) != 0)
+ ae_tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
+ else if ((ace->a_flags & ACE_GROUP) != 0)
+ ae_tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
+ else if ((ace->a_flags & ACE_EVERYONE) != 0)
+ ae_tag = ARCHIVE_ENTRY_ACL_EVERYONE;
+ else if ((ace->a_flags & ACE_IDENTIFIER_GROUP) != 0) {
+ ae_tag = ARCHIVE_ENTRY_ACL_GROUP;
+ ae_name = archive_read_disk_gname(&a->archive,
+ ae_id);
+ } else {
+ ae_tag = ARCHIVE_ENTRY_ACL_USER;
+ ae_name = archive_read_disk_uname(&a->archive,
+ ae_id);
+ }
+
+ for (i = 0; i < (int)(sizeof(acl_inherit_map) /
+ sizeof(acl_inherit_map[0])); ++i) {
+ if ((ace->a_flags &
+ acl_inherit_map[i].platform_inherit) != 0)
+ ae_perm |=
+ acl_inherit_map[i].archive_inherit;
+ }
+
+ for (i = 0; i < (int)(sizeof(acl_perm_map) /
+ sizeof(acl_perm_map[0])); ++i) {
+ if ((ace->a_access_mask &
+ acl_perm_map[i].platform_perm) != 0)
+ ae_perm |=
+ acl_perm_map[i].archive_perm;
+ }
+ } else {
+ aclent = &((aclent_t *)acl->acl_aclp)[e];
+ if ((aclent->a_type & ACL_DEFAULT) != 0)
+ entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
+ else
+ entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_ACCESS;
+ ae_id = aclent->a_id;
+
+ switch(aclent->a_type) {
+ case DEF_USER:
+ case USER:
+ ae_name = archive_read_disk_uname(&a->archive,
+ ae_id);
+ ae_tag = ARCHIVE_ENTRY_ACL_USER;
+ break;
+ case DEF_GROUP:
+ case GROUP:
+ ae_name = archive_read_disk_gname(&a->archive,
+ ae_id);
+ ae_tag = ARCHIVE_ENTRY_ACL_GROUP;
+ break;
+ case DEF_CLASS_OBJ:
+ case CLASS_OBJ:
+ ae_tag = ARCHIVE_ENTRY_ACL_MASK;
+ break;
+ case DEF_USER_OBJ:
+ case USER_OBJ:
+ ae_tag = ARCHIVE_ENTRY_ACL_USER_OBJ;
+ break;
+ case DEF_GROUP_OBJ:
+ case GROUP_OBJ:
+ ae_tag = ARCHIVE_ENTRY_ACL_GROUP_OBJ;
+ break;
+ case DEF_OTHER_OBJ:
+ case OTHER_OBJ:
+ ae_tag = ARCHIVE_ENTRY_ACL_OTHER;
+ break;
+ default:
+ /* Unknown tag type, skip */
+ continue;
+ }
+
+ if ((aclent->a_perm & 1) != 0)
+ ae_perm |= ARCHIVE_ENTRY_ACL_EXECUTE;
+ if ((aclent->a_perm & 2) != 0)
+ ae_perm |= ARCHIVE_ENTRY_ACL_WRITE;
+ if ((aclent->a_perm & 4) != 0)
+ ae_perm |= ARCHIVE_ENTRY_ACL_READ;
+ } /* default_entry_acl_type != ARCHIVE_ENTRY_ACL_TYPE_NFS4 */
+
+ archive_entry_acl_add_entry(entry, entry_acl_type,
+ ae_perm, ae_tag, ae_id, ae_name);
+ }
+ return (ARCHIVE_OK);
+}
+#else /* !HAVE_SUN_ACL */
+/*
+ * Translate POSIX.1e (Linux), FreeBSD (both POSIX.1e and NFSv4) and
+ * MacOS (NFSv4 only) ACLs into libarchive internal structure
+ */
static int
translate_acl(struct archive_read_disk *a,
struct archive_entry *entry, acl_t acl, int default_entry_acl_type)
{
acl_tag_t acl_tag;
-#ifdef ACL_TYPE_NFS4
+#if HAVE_ACL_TYPE_NFS4
acl_entry_type_t acl_type;
- acl_flagset_t acl_flagset;
int brand;
#endif
+#if HAVE_ACL_TYPE_NFS4 || HAVE_DARWIN_ACL
+ acl_flagset_t acl_flagset;
+#endif
acl_entry_t acl_entry;
acl_permset_t acl_permset;
int i, entry_acl_type;
int r, s, ae_id, ae_tag, ae_perm;
+#if !HAVE_DARWIN_ACL
+ void *q;
+#endif
const char *ae_name;
-#ifdef ACL_TYPE_NFS4
+#if HAVE_ACL_TYPE_NFS4
// FreeBSD "brands" ACLs as POSIX.1e or NFSv4
// Make sure the "brand" on this ACL is consistent
// with the default_entry_acl_type bits provided.
@@ -634,14 +1199,19 @@ translate_acl(struct archive_read_disk *a,
}
#endif
-
s = acl_get_entry(acl, ACL_FIRST_ENTRY, &acl_entry);
if (s == -1) {
archive_set_error(&a->archive, errno,
"Failed to get first ACL entry");
return (ARCHIVE_WARN);
}
- while (s == 1) {
+
+#if HAVE_DARWIN_ACL
+ while (s == 0)
+#else /* FreeBSD, Linux */
+ while (s == 1)
+#endif
+ {
ae_id = -1;
ae_name = NULL;
ae_perm = 0;
@@ -652,14 +1222,25 @@ translate_acl(struct archive_read_disk *a,
return (ARCHIVE_WARN);
}
switch (acl_tag) {
+#if !HAVE_DARWIN_ACL /* FreeBSD, Linux */
case ACL_USER:
- ae_id = (int)*(uid_t *)acl_get_qualifier(acl_entry);
- ae_name = archive_read_disk_uname(&a->archive, ae_id);
+ q = acl_get_qualifier(acl_entry);
+ if (q != NULL) {
+ ae_id = (int)*(uid_t *)q;
+ acl_free(q);
+ ae_name = archive_read_disk_uname(&a->archive,
+ ae_id);
+ }
ae_tag = ARCHIVE_ENTRY_ACL_USER;
break;
case ACL_GROUP:
- ae_id = (int)*(gid_t *)acl_get_qualifier(acl_entry);
- ae_name = archive_read_disk_gname(&a->archive, ae_id);
+ q = acl_get_qualifier(acl_entry);
+ if (q != NULL) {
+ ae_id = (int)*(gid_t *)q;
+ acl_free(q);
+ ae_name = archive_read_disk_gname(&a->archive,
+ ae_id);
+ }
ae_tag = ARCHIVE_ENTRY_ACL_GROUP;
break;
case ACL_MASK:
@@ -674,21 +1255,44 @@ translate_acl(struct archive_read_disk *a,
case ACL_OTHER:
ae_tag = ARCHIVE_ENTRY_ACL_OTHER;
break;
-#ifdef ACL_TYPE_NFS4
+#if HAVE_ACL_TYPE_NFS4
case ACL_EVERYONE:
ae_tag = ARCHIVE_ENTRY_ACL_EVERYONE;
break;
#endif
+#else /* HAVE_DARWIN_ACL */
+ case ACL_EXTENDED_ALLOW:
+ entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_ALLOW;
+ r = translate_guid(&a->archive, acl_entry, &ae_id,
+ &ae_tag, &ae_name);
+ break;
+ case ACL_EXTENDED_DENY:
+ entry_acl_type = ARCHIVE_ENTRY_ACL_TYPE_DENY;
+ r = translate_guid(&a->archive, acl_entry, &ae_id,
+ &ae_tag, &ae_name);
+ break;
+#endif /* HAVE_DARWIN_ACL */
default:
/* Skip types that libarchive can't support. */
s = acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry);
continue;
}
+#if HAVE_DARWIN_ACL
+ /* Skip if translate_guid() above failed */
+ if (r != 0) {
+ s = acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry);
+ continue;
+ }
+#endif
+
+#if !HAVE_DARWIN_ACL
// XXX acl_type maps to allow/deny/audit/YYYY bits
entry_acl_type = default_entry_acl_type;
-#ifdef ACL_TYPE_NFS4
+#endif
+#if HAVE_ACL_TYPE_NFS4 || HAVE_DARWIN_ACL
if (default_entry_acl_type & ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
+#if HAVE_ACL_TYPE_NFS4
/*
* acl_get_entry_type_np() fails with non-NFSv4 ACLs
*/
@@ -715,6 +1319,7 @@ translate_acl(struct archive_read_disk *a,
"Invalid NFSv4 ACL entry type");
return (ARCHIVE_WARN);
}
+#endif /* HAVE_ACL_TYPE_NFS4 */
/*
* Libarchive stores "flag" (NFSv4 inheritance bits)
@@ -727,7 +1332,7 @@ translate_acl(struct archive_read_disk *a,
"Failed to get flagset from a NFSv4 ACL entry");
return (ARCHIVE_WARN);
}
- for (i = 0; i < (int)(sizeof(acl_inherit_map) / sizeof(acl_inherit_map[0])); ++i) {
+ for (i = 0; i < (int)(sizeof(acl_inherit_map) / sizeof(acl_inherit_map[0])); ++i) {
r = acl_get_flag_np(acl_flagset,
acl_inherit_map[i].platform_inherit);
if (r == -1) {
@@ -737,9 +1342,9 @@ translate_acl(struct archive_read_disk *a,
return (ARCHIVE_WARN);
} else if (r)
ae_perm |= acl_inherit_map[i].archive_inherit;
- }
+ }
}
-#endif
+#endif /* HAVE_ACL_TYPE_NFS4 || HAVE_DARWIN_ACL */
if (acl_get_permset(acl_entry, &acl_permset) != 0) {
archive_set_error(&a->archive, errno,
@@ -765,15 +1370,18 @@ translate_acl(struct archive_read_disk *a,
ae_id, ae_name);
s = acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry);
+#if !HAVE_DARWIN_ACL
if (s == -1) {
archive_set_error(&a->archive, errno,
"Failed to get next ACL entry");
return (ARCHIVE_WARN);
}
+#endif
}
return (ARCHIVE_OK);
}
-#else
+#endif /* !HAVE_SUN_ACL */
+#else /* !HAVE_POSIX_ACL && !HAVE_NFS4_ACL */
static int
setup_acls(struct archive_read_disk *a,
struct archive_entry *entry, int *fd)
@@ -783,7 +1391,7 @@ setup_acls(struct archive_read_disk *a,
(void)fd; /* UNUSED */
return (ARCHIVE_OK);
}
-#endif
+#endif /* !HAVE_POSIX_ACL && !HAVE_NFS4_ACL */
#if (HAVE_FGETXATTR && HAVE_FLISTXATTR && HAVE_LISTXATTR && \
HAVE_LLISTXATTR && HAVE_GETXATTR && HAVE_LGETXATTR) || \
diff --git a/contrib/libarchive/libarchive/archive_read_disk_posix.c b/contrib/libarchive/libarchive/archive_read_disk_posix.c
index bc7fad1..b893704 100644
--- a/contrib/libarchive/libarchive/archive_read_disk_posix.c
+++ b/contrib/libarchive/libarchive/archive_read_disk_posix.c
@@ -675,7 +675,7 @@ setup_suitable_read_buffer(struct archive_read_disk *a)
asize = cf->min_xfer_size;
/* Increase a buffer size up to 64K bytes in
- * a proper incremant size. */
+ * a proper increment size. */
while (asize < 1024*64)
asize += incr;
/* Take a margin to adjust to the filesystem
@@ -1656,7 +1656,7 @@ setup_current_filesystem(struct archive_read_disk *a)
archive_set_error(&a->archive, errno, "statvfs failed");
return (ARCHIVE_FAILED);
} else if (xr == 1) {
- /* Usuall come here unless NetBSD supports _PC_REC_XFER_ALIGN
+ /* Usually come here unless NetBSD supports _PC_REC_XFER_ALIGN
* for pathconf() function. */
t->current_filesystem->xfer_align = sfs.f_frsize;
t->current_filesystem->max_xfer_size = -1;
@@ -1944,7 +1944,7 @@ setup_current_filesystem(struct archive_read_disk *a)
if (nm == -1)
# endif /* _PC_NAME_MAX */
/*
- * Some sysmtes (HP-UX or others?) incorrectly defined
+ * Some systems (HP-UX or others?) incorrectly defined
* NAME_MAX macro to be a smaller value.
*/
# if defined(NAME_MAX) && NAME_MAX >= 255
diff --git a/contrib/libarchive/libarchive/archive_read_open_filename.c b/contrib/libarchive/libarchive/archive_read_open_filename.c
index b2d52aa..64b0179 100644
--- a/contrib/libarchive/libarchive/archive_read_open_filename.c
+++ b/contrib/libarchive/libarchive/archive_read_open_filename.c
@@ -222,7 +222,7 @@ file_open(struct archive *a, void *client_data)
void *buffer;
const char *filename = NULL;
const wchar_t *wfilename = NULL;
- int fd;
+ int fd = -1;
int is_disk_like = 0;
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
off_t mediasize = 0; /* FreeBSD-specific, so off_t okay here. */
@@ -277,7 +277,7 @@ file_open(struct archive *a, void *client_data)
#else
archive_set_error(a, ARCHIVE_ERRNO_MISC,
"Unexpedted operation in archive_read_open_filename");
- return (ARCHIVE_FATAL);
+ goto fail;
#endif
}
if (fstat(fd, &st) != 0) {
@@ -287,7 +287,7 @@ file_open(struct archive *a, void *client_data)
else
archive_set_error(a, errno, "Can't stat '%s'",
filename);
- return (ARCHIVE_FATAL);
+ goto fail;
}
/*
@@ -356,11 +356,9 @@ file_open(struct archive *a, void *client_data)
mine->block_size = new_block_size;
}
buffer = malloc(mine->block_size);
- if (mine == NULL || buffer == NULL) {
+ if (buffer == NULL) {
archive_set_error(a, ENOMEM, "No memory");
- free(mine);
- free(buffer);
- return (ARCHIVE_FATAL);
+ goto fail;
}
mine->buffer = buffer;
mine->fd = fd;
@@ -372,6 +370,14 @@ file_open(struct archive *a, void *client_data)
mine->use_lseek = 1;
return (ARCHIVE_OK);
+fail:
+ /*
+ * Don't close file descriptors not opened or ones pointing referring
+ * to `FNT_STDIN`.
+ */
+ if (fd != -1 && fd != 0)
+ close(fd);
+ return (ARCHIVE_FATAL);
}
static ssize_t
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c b/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c
index 37b2f59..663e2d3 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_lz4.c
@@ -180,7 +180,7 @@ lz4_reader_bid(struct archive_read_filter_bidder *self,
return (0);
bits_checked += 8;
BD = buffer[5];
- /* A block maximum size shuld be more than 3. */
+ /* A block maximum size should be more than 3. */
if (((BD & 0x70) >> 4) < 4)
return (0);
/* Reserved bits must be "0". */
@@ -417,7 +417,7 @@ lz4_filter_read_descriptor(struct archive_read_filter *self)
/* Reserved bits must be zero. */
if (bd & 0x8f)
goto malformed_error;
- /* Get a maxinum block size. */
+ /* Get a maximum block size. */
switch (read_buf[1] >> 4) {
case 4: /* 64 KB */
state->flags.block_maximum_size = 64 * 1024;
@@ -627,7 +627,7 @@ lz4_filter_read_default_stream(struct archive_read_filter *self, const void **p)
if (state->stage == SELECT_STREAM) {
state->stage = READ_DEFAULT_STREAM;
- /* First, read a desciprtor. */
+ /* First, read a descriptor. */
if((ret = lz4_filter_read_descriptor(self)) != ARCHIVE_OK)
return (ret);
state->stage = READ_DEFAULT_BLOCK;
@@ -706,6 +706,11 @@ lz4_filter_read_legacy_stream(struct archive_read_filter *self, const void **p)
/* Make sure we have a whole block. */
read_buf = __archive_read_filter_ahead(self->upstream,
4 + compressed, NULL);
+ if (read_buf == NULL) {
+ archive_set_error(&(self->archive->archive),
+ ARCHIVE_ERRNO_MISC, "truncated lz4 input");
+ return (ARCHIVE_FATAL);
+ }
ret = LZ4_decompress_safe(read_buf + 4, state->out_block,
compressed, (int)state->out_block_size);
if (ret < 0) {
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c b/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c
index 44ac9964..a1c392f 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_lzop.c
@@ -436,7 +436,7 @@ lzop_filter_read(struct archive_read_filter *self, const void **p)
}
/*
- * Drive lzo uncompresison.
+ * Drive lzo uncompression.
*/
out_size = (lzo_uint)state->uncompressed_size;
r = lzo1x_decompress_safe(b, (lzo_uint)state->compressed_size,
diff --git a/contrib/libarchive/libarchive/archive_read_support_filter_program.c b/contrib/libarchive/libarchive/archive_read_support_filter_program.c
index 66dc2f4..b8bf128 100644
--- a/contrib/libarchive/libarchive/archive_read_support_filter_program.c
+++ b/contrib/libarchive/libarchive/archive_read_support_filter_program.c
@@ -430,6 +430,7 @@ __archive_read_program(struct archive_read_filter *self, const char *cmd)
&state->child_stdout);
if (child == -1) {
free(state->out_buf);
+ archive_string_free(&state->description);
free(state);
archive_set_error(&self->archive->archive, EINVAL,
"Can't initialize filter; unable to run program \"%s\"",
@@ -441,6 +442,7 @@ __archive_read_program(struct archive_read_filter *self, const char *cmd)
if (state->child == NULL) {
child_stop(self, state);
free(state->out_buf);
+ archive_string_free(&state->description);
free(state);
archive_set_error(&self->archive->archive, EINVAL,
"Can't initialize filter; unable to run program \"%s\"",
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_7zip.c b/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
index f8d52fb..3387eaf 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_7zip.c
@@ -552,7 +552,7 @@ skip_sfx(struct archive_read *a, ssize_t bytes_avail)
/*
* If bytes_avail > SFX_MIN_ADDR we do not have to call
* __archive_read_seek() at this time since we have
- * alredy had enough data.
+ * already had enough data.
*/
if (bytes_avail > SFX_MIN_ADDR)
__archive_read_consume(a, SFX_MIN_ADDR);
@@ -760,7 +760,7 @@ archive_read_format_7zip_read_header(struct archive_read *a,
symsize += size;
}
if (symsize == 0) {
- /* If there is no synname, handle it as a regular
+ /* If there is no symname, handle it as a regular
* file. */
zip_entry->mode &= ~AE_IFMT;
zip_entry->mode |= AE_IFREG;
@@ -3288,7 +3288,7 @@ read_stream(struct archive_read *a, const void **buff, size_t size,
return (r);
/*
- * Skip the bytes we alrady has skipped in skip_stream().
+ * Skip the bytes we already has skipped in skip_stream().
*/
while (skip_bytes) {
ssize_t skipped;
@@ -3506,7 +3506,7 @@ setup_decode_folder(struct archive_read *a, struct _7z_folder *folder,
return (ARCHIVE_FATAL);
}
- /* Allocate memory for the decorded data of a sub
+ /* Allocate memory for the decoded data of a sub
* stream. */
b[i] = malloc((size_t)zip->folder_outbytes_remaining);
if (b[i] == NULL) {
@@ -3591,7 +3591,7 @@ skip_stream(struct archive_read *a, size_t skip_bytes)
if (zip->folder_index == 0) {
/*
* Optimization for a list mode.
- * Avoid unncecessary decoding operations.
+ * Avoid unnecessary decoding operations.
*/
zip->si.ci.folders[zip->entry->folderIndex].skipped_bytes
+= skip_bytes;
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_cab.c b/contrib/libarchive/libarchive/archive_read_support_format_cab.c
index 2bdc1e2..e2f8c6b 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_cab.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_cab.c
@@ -1495,6 +1495,8 @@ cab_read_ahead_cfdata_deflate(struct archive_read *a, ssize_t *avail)
/* Cut out a tow-byte MSZIP signature(0x43, 0x4b). */
if (mszip > 0) {
+ if (bytes_avail <= 0)
+ goto nomszip;
if (bytes_avail <= mszip) {
if (mszip == 2) {
if (cab->stream.next_in[0] != 0x43)
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_cpio.c b/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
index 2a5a829..43e6ff9 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_cpio.c
@@ -356,7 +356,7 @@ archive_read_format_cpio_read_header(struct archive_read *a,
struct archive_entry *entry)
{
struct cpio *cpio;
- const void *h;
+ const void *h, *hl;
struct archive_string_conv *sconv;
size_t namelength;
size_t name_pad;
@@ -406,11 +406,11 @@ archive_read_format_cpio_read_header(struct archive_read *a,
"Rejecting malformed cpio archive: symlink contents exceed 1 megabyte");
return (ARCHIVE_FATAL);
}
- h = __archive_read_ahead(a,
+ hl = __archive_read_ahead(a,
(size_t)cpio->entry_bytes_remaining, NULL);
- if (h == NULL)
+ if (hl == NULL)
return (ARCHIVE_FATAL);
- if (archive_entry_copy_symlink_l(entry, (const char *)h,
+ if (archive_entry_copy_symlink_l(entry, (const char *)hl,
(size_t)cpio->entry_bytes_remaining, sconv) != 0) {
if (errno == ENOMEM) {
archive_set_error(&a->archive, ENOMEM,
@@ -434,7 +434,8 @@ archive_read_format_cpio_read_header(struct archive_read *a,
* header. XXX */
/* Compare name to "TRAILER!!!" to test for end-of-archive. */
- if (namelength == 11 && strcmp((const char *)h, "TRAILER!!!") == 0) {
+ if (namelength == 11 && strncmp((const char *)h, "TRAILER!!!",
+ 11) == 0) {
/* TODO: Store file location of start of block. */
archive_clear_error(&a->archive);
return (ARCHIVE_EOF);
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c b/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c
index 3807abd..ebbfc2f 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c
@@ -322,7 +322,7 @@ struct iso9660 {
struct archive_string pathname;
char seenRockridge; /* Set true if RR extensions are used. */
- char seenSUSP; /* Set true if SUSP is beging used. */
+ char seenSUSP; /* Set true if SUSP is being used. */
char seenJoliet;
unsigned char suspOffset;
@@ -374,7 +374,7 @@ struct iso9660 {
size_t utf16be_path_len;
unsigned char *utf16be_previous_path;
size_t utf16be_previous_path_len;
- /* Null buufer used in bidder to improve its performance. */
+ /* Null buffer used in bidder to improve its performance. */
unsigned char null[2048];
};
@@ -1199,7 +1199,7 @@ archive_read_format_iso9660_read_header(struct archive_read *a,
archive_string_conversion_from_charset(
&(a->archive), "UTF-16BE", 1);
if (iso9660->sconv_utf16be == NULL)
- /* Coundn't allocate memory */
+ /* Couldn't allocate memory */
return (ARCHIVE_FATAL);
}
if (iso9660->utf16be_path == NULL) {
@@ -1864,7 +1864,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
if ((file->utf16be_name = malloc(name_len)) == NULL) {
archive_set_error(&a->archive, ENOMEM,
"No memory for file name");
- return (NULL);
+ goto fail;
}
memcpy(file->utf16be_name, p, name_len);
file->utf16be_bytes = name_len;
@@ -1943,10 +1943,8 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
file->symlink_continues = 0;
rr_start += iso9660->suspOffset;
r = parse_rockridge(a, file, rr_start, rr_end);
- if (r != ARCHIVE_OK) {
- free(file);
- return (NULL);
- }
+ if (r != ARCHIVE_OK)
+ goto fail;
/*
* A file size of symbolic link files in ISO images
* made by makefs is not zero and its location is
@@ -1990,7 +1988,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
"Invalid Rockridge RE");
- return (NULL);
+ goto fail;
}
/*
* Sanity check: file does not have "CL" extension.
@@ -1999,7 +1997,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
"Invalid Rockridge RE and CL");
- return (NULL);
+ goto fail;
}
/*
* Sanity check: The file type must be a directory.
@@ -2008,7 +2006,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
"Invalid Rockridge RE");
- return (NULL);
+ goto fail;
}
} else if (parent != NULL && parent->rr_moved)
file->rr_moved_has_re_only = 0;
@@ -2022,7 +2020,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
"Invalid Rockridge CL");
- return (NULL);
+ goto fail;
}
/*
* Sanity check: The file type must be a regular file.
@@ -2031,7 +2029,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
"Invalid Rockridge CL");
- return (NULL);
+ goto fail;
}
parent->subdirs++;
/* Overwrite an offset and a number of this "CL" entry
@@ -2049,7 +2047,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
"Invalid Rockridge CL");
- return (NULL);
+ goto fail;
}
}
if (file->cl_offset == file->offset ||
@@ -2057,7 +2055,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
archive_set_error(&a->archive,
ARCHIVE_ERRNO_MISC,
"Invalid Rockridge CL");
- return (NULL);
+ goto fail;
}
}
}
@@ -2088,6 +2086,10 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
#endif
register_file(iso9660, file);
return (file);
+fail:
+ archive_string_free(&file->name);
+ free(file);
+ return (NULL);
}
static int
@@ -2407,7 +2409,7 @@ read_CE(struct archive_read *a, struct iso9660 *iso9660)
return (ARCHIVE_FATAL);
} while (heap->cnt &&
heap->reqs[0].offset == iso9660->current_position);
- /* NOTE: Do not move this consume's code to fron of
+ /* NOTE: Do not move this consume's code to front of
* do-while loop. Registration of nested CE extension
* might cause error because of current position. */
__archive_read_consume(a, step);
@@ -2729,7 +2731,7 @@ next_cache_entry(struct archive_read *a, struct iso9660 *iso9660,
if (file == NULL) {
/*
* If directory entries all which are descendant of
- * rr_moved are stil remaning, expose their.
+ * rr_moved are still remaining, expose their.
*/
if (iso9660->re_files.first != NULL &&
iso9660->rr_moved != NULL &&
@@ -2852,7 +2854,7 @@ next_cache_entry(struct archive_read *a, struct iso9660 *iso9660,
empty_files.last = &empty_files.first;
/* Collect files which has the same file serial number.
* Peek pending_files so that file which number is different
- * is not put bak. */
+ * is not put back. */
while (iso9660->pending_files.used > 0 &&
(iso9660->pending_files.files[0]->number == -1 ||
iso9660->pending_files.files[0]->number == number)) {
@@ -2860,7 +2862,7 @@ next_cache_entry(struct archive_read *a, struct iso9660 *iso9660,
/* This file has the same offset
* but it's wrong offset which empty files
* and symlink files have.
- * NOTE: This wrong offse was recorded by
+ * NOTE: This wrong offset was recorded by
* old mkisofs utility. If ISO images is
* created by latest mkisofs, this does not
* happen.
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_lha.c b/contrib/libarchive/libarchive/archive_read_support_format_lha.c
index a7f1d8d..d77a7c2 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_lha.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_lha.c
@@ -924,6 +924,9 @@ lha_read_file_header_1(struct archive_read *a, struct lha *lha)
/* Get a real compressed file size. */
lha->compsize -= extdsize - 2;
+ if (lha->compsize < 0)
+ goto invalid; /* Invalid compressed file size */
+
if (sum_calculated != headersum) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"LHa header sum error");
@@ -1711,7 +1714,7 @@ lha_crc16(uint16_t crc, const void *pp, size_t len)
*/
for (;len >= 8; len -= 8) {
/* This if statement expects compiler optimization will
- * remove the stament which will not be executed. */
+ * remove the statement which will not be executed. */
#undef bswap16
#if defined(_MSC_VER) && _MSC_VER >= 1400 /* Visual Studio */
# define bswap16(x) _byteswap_ushort(x)
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_mtree.c b/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
index 02c1251..eb695f8 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_mtree.c
@@ -715,13 +715,13 @@ detect_form(struct archive_read *a, int *is_form_d)
}
} else
break;
- } else if (strncmp(p, "/set", 4) == 0) {
+ } else if (len > 4 && strncmp(p, "/set", 4) == 0) {
if (bid_keyword_list(p+4, len-4, 0, 0) <= 0)
break;
/* This line continues. */
if (p[len-nl-1] == '\\')
multiline = 2;
- } else if (strncmp(p, "/unset", 6) == 0) {
+ } else if (len > 6 && strncmp(p, "/unset", 6) == 0) {
if (bid_keyword_list(p+6, len-6, 1, 0) <= 0)
break;
/* This line continues. */
@@ -1019,11 +1019,11 @@ read_mtree(struct archive_read *a, struct mtree *mtree)
if (*p != '/') {
r = process_add_entry(a, mtree, &global, p, len,
&last_entry, is_form_d);
- } else if (strncmp(p, "/set", 4) == 0) {
+ } else if (len > 4 && strncmp(p, "/set", 4) == 0) {
if (p[4] != ' ' && p[4] != '\t')
break;
r = process_global_set(a, &global, p);
- } else if (strncmp(p, "/unset", 6) == 0) {
+ } else if (len > 6 && strncmp(p, "/unset", 6) == 0) {
if (p[6] != ' ' && p[6] != '\t')
break;
r = process_global_unset(a, &global, p);
@@ -1608,8 +1608,11 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
if (*val == '.') {
++val;
ns = (long)mtree_atol10(&val);
- } else
- ns = 0;
+ if (ns < 0)
+ ns = 0;
+ else if (ns > 999999999)
+ ns = 999999999;
+ }
if (m > my_time_t_max)
m = my_time_t_max;
else if (m < my_time_t_min)
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_rar.c b/contrib/libarchive/libarchive/archive_read_support_format_rar.c
index 9c9f6f1..1e9849f 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_rar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_rar.c
@@ -906,7 +906,7 @@ archive_read_format_rar_read_header(struct archive_read *a,
sizeof(rar->reserved2));
}
- /* Main header is password encrytped, so we cannot read any
+ /* Main header is password encrypted, so we cannot read any
file names or any other info about files from the header. */
if (rar->main_flags & MHD_PASSWORD)
{
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_tar.c b/contrib/libarchive/libarchive/archive_read_support_format_tar.c
index 4f69c6e..446d005 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_tar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_tar.c
@@ -1,6 +1,7 @@
/*-
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2011-2012 Michihiro NAKAJIMA
+ * Copyright (c) 2016 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -203,9 +204,14 @@ static int archive_read_format_tar_read_header(struct archive_read *,
struct archive_entry *);
static int checksum(struct archive_read *, const void *);
static int pax_attribute(struct archive_read *, struct tar *,
- struct archive_entry *, const char *key, const char *value);
+ struct archive_entry *, const char *key, const char *value,
+ size_t value_length);
+static int pax_attribute_acl(struct archive_read *, struct tar *,
+ struct archive_entry *, const char *, int);
+static int pax_attribute_xattr(struct archive_entry *, const char *,
+ const char *);
static int pax_header(struct archive_read *, struct tar *,
- struct archive_entry *, char *attr);
+ struct archive_entry *, struct archive_string *);
static void pax_time(const char *, int64_t *sec, long *nanos);
static ssize_t readline(struct archive_read *, struct tar *, const char **,
ssize_t limit, size_t *);
@@ -938,7 +944,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
{
const struct archive_entry_header_ustar *header;
size_t size;
- int err;
+ int err, acl_type;
int64_t type;
char *acl, *p;
@@ -983,11 +989,12 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
switch ((int)type & ~0777777) {
case 01000000:
/* POSIX.1e ACL */
+ acl_type = ARCHIVE_ENTRY_ACL_TYPE_ACCESS;
break;
case 03000000:
- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
- "Solaris NFSv4 ACLs not supported");
- return (ARCHIVE_WARN);
+ /* NFSv4 ACL */
+ acl_type = ARCHIVE_ENTRY_ACL_TYPE_NFS4;
+ break;
default:
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Malformed Solaris ACL attribute (unsupported type %o)",
@@ -1016,8 +1023,8 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar,
return (ARCHIVE_FATAL);
}
archive_strncpy(&(tar->localname), acl, p - acl);
- err = archive_acl_parse_l(archive_entry_acl(entry),
- tar->localname.s, ARCHIVE_ENTRY_ACL_TYPE_ACCESS, tar->sconv_acl);
+ err = archive_acl_from_text_l(archive_entry_acl(entry),
+ tar->localname.s, acl_type, tar->sconv_acl);
if (err != ARCHIVE_OK) {
if (errno == ENOMEM) {
archive_set_error(&a->archive, ENOMEM,
@@ -1478,7 +1485,7 @@ header_pax_extensions(struct archive_read *a, struct tar *tar,
* and then skip any fields in the standard header that were
* defined in the pax header.
*/
- err2 = pax_header(a, tar, entry, tar->pax_header.s);
+ err2 = pax_header(a, tar, entry, &tar->pax_header);
err = err_combine(err, err2);
tar->entry_padding = 0x1ff & (-tar->entry_bytes_remaining);
return (err);
@@ -1559,16 +1566,17 @@ header_ustar(struct archive_read *a, struct tar *tar,
*/
static int
pax_header(struct archive_read *a, struct tar *tar,
- struct archive_entry *entry, char *attr)
+ struct archive_entry *entry, struct archive_string *in_as)
{
- size_t attr_length, l, line_length;
+ size_t attr_length, l, line_length, value_length;
char *p;
char *key, *value;
struct archive_string *as;
struct archive_string_conv *sconv;
int err, err2;
+ char *attr = in_as->s;
- attr_length = strlen(attr);
+ attr_length = in_as->length;
tar->pax_hdrcharset_binary = 0;
archive_string_empty(&(tar->entry_gname));
archive_string_empty(&(tar->entry_linkpath));
@@ -1633,11 +1641,13 @@ pax_header(struct archive_read *a, struct tar *tar,
}
*p = '\0';
- /* Identify null-terminated 'value' portion. */
value = p + 1;
+ /* Some values may be binary data */
+ value_length = attr + line_length - 1 - value;
+
/* Identify this attribute and set it in the entry. */
- err2 = pax_attribute(a, tar, entry, key, value);
+ err2 = pax_attribute(a, tar, entry, key, value, value_length);
if (err2 == ARCHIVE_FATAL)
return (err2);
err = err_combine(err, err2);
@@ -1758,6 +1768,66 @@ pax_attribute_xattr(struct archive_entry *entry,
return 0;
}
+static int
+pax_attribute_schily_xattr(struct archive_entry *entry,
+ const char *name, const char *value, size_t value_length)
+{
+ if (strlen(name) < 14 || (memcmp(name, "SCHILY.xattr.", 13)) != 0)
+ return 1;
+
+ name += 13;
+
+ archive_entry_xattr_add_entry(entry, name, value, value_length);
+
+ return 0;
+}
+
+static int
+pax_attribute_acl(struct archive_read *a, struct tar *tar,
+ struct archive_entry *entry, const char *value, int type)
+{
+ int r;
+ const char* errstr;
+
+ switch (type) {
+ case ARCHIVE_ENTRY_ACL_TYPE_ACCESS:
+ errstr = "SCHILY.acl.access";
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
+ errstr = "SCHILY.acl.default";
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_NFS4:
+ errstr = "SCHILY.acl.ace";
+ break;
+ default:
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+ "Unknown ACL type: %d", type);
+ return(ARCHIVE_FATAL);
+ }
+
+ if (tar->sconv_acl == NULL) {
+ tar->sconv_acl =
+ archive_string_conversion_from_charset(
+ &(a->archive), "UTF-8", 1);
+ if (tar->sconv_acl == NULL)
+ return (ARCHIVE_FATAL);
+ }
+
+ r = archive_acl_from_text_l(archive_entry_acl(entry), value, type,
+ tar->sconv_acl);
+ if (r != ARCHIVE_OK) {
+ if (r == ARCHIVE_FATAL) {
+ archive_set_error(&a->archive, ENOMEM,
+ "%s %s", "Can't allocate memory for ",
+ errstr);
+ return (r);
+ }
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_MISC, "%s %s", "Parse error: ", errstr);
+ }
+ return (r);
+}
+
/*
* Parse a single key=value attribute. key/value pointers are
* assumed to point into reasonably long-lived storage.
@@ -1773,7 +1843,7 @@ pax_attribute_xattr(struct archive_entry *entry,
*/
static int
pax_attribute(struct archive_read *a, struct tar *tar,
- struct archive_entry *entry, const char *key, const char *value)
+ struct archive_entry *entry, const char *key, const char *value, size_t value_length)
{
int64_t s;
long n;
@@ -1876,53 +1946,20 @@ pax_attribute(struct archive_read *a, struct tar *tar,
case 'S':
/* We support some keys used by the "star" archiver */
if (strcmp(key, "SCHILY.acl.access") == 0) {
- if (tar->sconv_acl == NULL) {
- tar->sconv_acl =
- archive_string_conversion_from_charset(
- &(a->archive), "UTF-8", 1);
- if (tar->sconv_acl == NULL)
- return (ARCHIVE_FATAL);
- }
-
- r = archive_acl_parse_l(archive_entry_acl(entry),
- value, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- tar->sconv_acl);
- if (r != ARCHIVE_OK) {
- err = r;
- if (err == ARCHIVE_FATAL) {
- archive_set_error(&a->archive, ENOMEM,
- "Can't allocate memory for "
- "SCHILY.acl.access");
- return (err);
- }
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_MISC,
- "Parse error: SCHILY.acl.access");
- }
+ r = pax_attribute_acl(a, tar, entry, value,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
+ if (r == ARCHIVE_FATAL)
+ return (r);
} else if (strcmp(key, "SCHILY.acl.default") == 0) {
- if (tar->sconv_acl == NULL) {
- tar->sconv_acl =
- archive_string_conversion_from_charset(
- &(a->archive), "UTF-8", 1);
- if (tar->sconv_acl == NULL)
- return (ARCHIVE_FATAL);
- }
-
- r = archive_acl_parse_l(archive_entry_acl(entry),
- value, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
- tar->sconv_acl);
- if (r != ARCHIVE_OK) {
- err = r;
- if (err == ARCHIVE_FATAL) {
- archive_set_error(&a->archive, ENOMEM,
- "Can't allocate memory for "
- "SCHILY.acl.default");
- return (err);
- }
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_MISC,
- "Parse error: SCHILY.acl.default");
- }
+ r = pax_attribute_acl(a, tar, entry, value,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT);
+ if (r == ARCHIVE_FATAL)
+ return (r);
+ } else if (strcmp(key, "SCHILY.acl.ace") == 0) {
+ r = pax_attribute_acl(a, tar, entry, value,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4);
+ if (r == ARCHIVE_FATAL)
+ return (r);
} else if (strcmp(key, "SCHILY.devmajor") == 0) {
archive_entry_set_rdevmajor(entry,
(dev_t)tar_atol10(value, strlen(value)));
@@ -1943,6 +1980,9 @@ pax_attribute(struct archive_read *a, struct tar *tar,
} else if (strcmp(key, "SCHILY.realsize") == 0) {
tar->realsize = tar_atol10(value, strlen(value));
archive_entry_set_size(entry, tar->realsize);
+ } else if (strncmp(key, "SCHILY.xattr.", 13) == 0) {
+ pax_attribute_schily_xattr(entry, key, value,
+ value_length);
} else if (strcmp(key, "SUN.holesdata") == 0) {
/* A Solaris extension for sparse. */
r = solaris_sparse_parse(a, tar, entry, value);
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_warc.c b/contrib/libarchive/libarchive/archive_read_support_format_warc.c
index a287fc2..5e22438 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_warc.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_warc.c
@@ -88,7 +88,7 @@ typedef enum {
WT_RVIS,
/* conversion, unsupported */
WT_CONV,
- /* continutation, unsupported at the moment */
+ /* continuation, unsupported at the moment */
WT_CONT,
/* invalid type */
LAST_WT
@@ -134,8 +134,8 @@ static ssize_t _warc_rdlen(const char *buf, size_t bsz);
static time_t _warc_rdrtm(const char *buf, size_t bsz);
static time_t _warc_rdmtm(const char *buf, size_t bsz);
static const char *_warc_find_eoh(const char *buf, size_t bsz);
+static const char *_warc_find_eol(const char *buf, size_t bsz);
-
int
archive_read_support_format_warc(struct archive *_a)
{
@@ -198,8 +198,8 @@ _warc_bid(struct archive_read *a, int best_bid)
/* otherwise snarf the record's version number */
ver = _warc_rdver(hdr, nrd);
- if (ver == 0U || ver > 10000U) {
- /* oh oh oh, best not to wager ... */
+ if (ver < 1200U || ver > 10000U) {
+ /* we only support WARC 0.12 to 1.0 */
return -1;
}
@@ -254,23 +254,32 @@ start_over:
&a->archive, ARCHIVE_ERRNO_MISC,
"Bad record header");
return (ARCHIVE_FATAL);
- } else if ((ver = _warc_rdver(buf, eoh - buf)) > 10000U) {
- /* nawww, I wish they promised backward compatibility
- * anyhoo, in their infinite wisdom the 28500 guys might
- * come up with something we can't possibly handle so
- * best end things here */
+ }
+ ver = _warc_rdver(buf, eoh - buf);
+ /* we currently support WARC 0.12 to 1.0 */
+ if (ver == 0U) {
archive_set_error(
&a->archive, ARCHIVE_ERRNO_MISC,
- "Unsupported record version");
+ "Invalid record version");
return (ARCHIVE_FATAL);
- } else if ((cntlen = _warc_rdlen(buf, eoh - buf)) < 0) {
+ } else if (ver < 1200U || ver > 10000U) {
+ archive_set_error(
+ &a->archive, ARCHIVE_ERRNO_MISC,
+ "Unsupported record version: %u.%u",
+ ver / 10000, (ver % 10000) / 100);
+ return (ARCHIVE_FATAL);
+ }
+ cntlen = _warc_rdlen(buf, eoh - buf);
+ if (cntlen < 0) {
/* nightmare! the specs say content-length is mandatory
* so I don't feel overly bad stopping the reader here */
archive_set_error(
&a->archive, EINVAL,
"Bad content length");
return (ARCHIVE_FATAL);
- } else if ((rtime = _warc_rdrtm(buf, eoh - buf)) == (time_t)-1) {
+ }
+ rtime = _warc_rdrtm(buf, eoh - buf);
+ if (rtime == (time_t)-1) {
/* record time is mandatory as per WARC/1.0,
* so just barf here, fast and loud */
archive_set_error(
@@ -284,7 +293,7 @@ start_over:
if (ver != w->pver) {
/* stringify this entry's version */
archive_string_sprintf(&w->sver,
- "WARC/%u.%u", ver / 10000, ver % 10000);
+ "WARC/%u.%u", ver / 10000, (ver % 10000) / 100);
/* remember the version */
w->pver = ver;
}
@@ -534,7 +543,7 @@ xstrpisotime(const char *s, char **endptr)
/* as a courtesy to our callers, and since this is a non-standard
* routine, we skip leading whitespace */
- while (isspace((unsigned char)*s))
+ while (isblank((unsigned char)*s))
++s;
/* read year */
@@ -562,7 +571,7 @@ xstrpisotime(const char *s, char **endptr)
goto out;
}
- /* massage TM to fulfill some of POSIX' contraints */
+ /* massage TM to fulfill some of POSIX' constraints */
tm.tm_year -= 1900;
tm.tm_mon--;
@@ -577,51 +586,41 @@ out:
}
static unsigned int
-_warc_rdver(const char buf[10], size_t bsz)
+_warc_rdver(const char *buf, size_t bsz)
{
static const char magic[] = "WARC/";
- unsigned int ver;
-
- (void)bsz; /* UNUSED */
+ unsigned int ver = 0U;
+ unsigned int end = 0U;
- if (memcmp(buf, magic, sizeof(magic) - 1U) != 0) {
- /* nope */
- return 99999U;
+ if (bsz < 12 || memcmp(buf, magic, sizeof(magic) - 1U) != 0) {
+ /* buffer too small or invalid magic */
+ return ver;
}
/* looks good so far, read the version number for a laugh */
buf += sizeof(magic) - 1U;
- /* most common case gets a quick-check here */
- if (memcmp(buf, "1.0\r\n", 5U) == 0) {
- ver = 10000U;
- } else {
- switch (*buf) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- if (buf[1U] == '.') {
- char *on;
-
- /* set up major version */
- ver = (buf[0U] - '0') * 10000U;
- /* minor version, anyone? */
- ver += (strtol(buf + 2U, &on, 10)) * 100U;
- /* don't parse anything else */
- if (on > buf + 2U) {
- break;
- }
- }
- /* FALLTHROUGH */
- case '9':
- default:
- /* just make the version ridiculously high */
- ver = 999999U;
- break;
+
+ if (isdigit(buf[0U]) && (buf[1U] == '.') && isdigit(buf[2U])) {
+ /* we support a maximum of 2 digits in the minor version */
+ if (isdigit(buf[3U]))
+ end = 1U;
+ /* set up major version */
+ ver = (buf[0U] - '0') * 10000U;
+ /* set up minor version */
+ if (end == 1U) {
+ ver += (buf[2U] - '0') * 1000U;
+ ver += (buf[3U] - '0') * 100U;
+ } else
+ ver += (buf[2U] - '0') * 100U;
+ /*
+ * WARC below version 0.12 has a space-separated header
+ * WARC 0.12 and above terminates the version with a CRLF
+ */
+ if (ver >= 1200U) {
+ if (memcmp(buf + 3U + end, "\r\n", 2U) != 0)
+ ver = 0U;
+ } else if (ver < 1200U) {
+ if (!isblank(*(buf + 3U + end)))
+ ver = 0U;
}
}
return ver;
@@ -631,34 +630,27 @@ static unsigned int
_warc_rdtyp(const char *buf, size_t bsz)
{
static const char _key[] = "\r\nWARC-Type:";
- const char *const eob = buf + bsz;
- const char *val;
+ const char *val, *eol;
if ((val = xmemmem(buf, bsz, _key, sizeof(_key) - 1U)) == NULL) {
/* no bother */
return WT_NONE;
}
- /* overread whitespace */
val += sizeof(_key) - 1U;
- while (val < eob && isspace((unsigned char)*val))
+ if ((eol = _warc_find_eol(val, buf + bsz - val)) == NULL) {
+ /* no end of line */
+ return WT_NONE;
+ }
+
+ /* overread whitespace */
+ while (val < eol && isblank((unsigned char)*val))
++val;
- if (val + 8U > eob) {
- ;
- } else if (memcmp(val, "resource", 8U) == 0) {
- return WT_RSRC;
- } else if (memcmp(val, "warcinfo", 8U) == 0) {
- return WT_INFO;
- } else if (memcmp(val, "metadata", 8U) == 0) {
- return WT_META;
- } else if (memcmp(val, "request", 7U) == 0) {
- return WT_REQ;
- } else if (memcmp(val, "response", 8U) == 0) {
- return WT_RSP;
- } else if (memcmp(val, "conversi", 8U) == 0) {
- return WT_CONV;
- } else if (memcmp(val, "continua", 8U) == 0) {
- return WT_CONT;
+ if (val + 8U == eol) {
+ if (memcmp(val, "resource", 8U) == 0)
+ return WT_RSRC;
+ else if (memcmp(val, "response", 8U) == 0)
+ return WT_RSP;
}
return WT_NONE;
}
@@ -667,10 +659,7 @@ static warc_string_t
_warc_rduri(const char *buf, size_t bsz)
{
static const char _key[] = "\r\nWARC-Target-URI:";
- const char *const eob = buf + bsz;
- const char *val;
- const char *uri;
- const char *eol;
+ const char *val, *uri, *eol, *p;
warc_string_t res = {0U, NULL};
if ((val = xmemmem(buf, bsz, _key, sizeof(_key) - 1U)) == NULL) {
@@ -679,25 +668,32 @@ _warc_rduri(const char *buf, size_t bsz)
}
/* overread whitespace */
val += sizeof(_key) - 1U;
- while (val < eob && isspace((unsigned char)*val))
+ if ((eol = _warc_find_eol(val, buf + bsz - val)) == NULL) {
+ /* no end of line */
+ return res;
+ }
+
+ while (val < eol && isblank((unsigned char)*val))
++val;
/* overread URL designators */
- if ((uri = xmemmem(val, eob - val, "://", 3U)) == NULL) {
+ if ((uri = xmemmem(val, eol - val, "://", 3U)) == NULL) {
/* not touching that! */
return res;
- } else if ((eol = memchr(uri, '\n', eob - uri)) == NULL) {
- /* no end of line? :O */
- return res;
}
- /* massage uri to point to after :// */
+ /* spaces inside uri are not allowed, CRLF should follow */
+ for (p = val; p < eol; p++) {
+ if (isspace(*p))
+ return res;
+ }
+
+ /* there must be at least space for ftp */
+ if (uri < (val + 3U))
+ return res;
+
+ /* move uri to point to after :// */
uri += 3U;
- /* also massage eol to point to the first whitespace
- * after the last non-whitespace character before
- * the end of the line */
- while (eol > uri && isspace((unsigned char)eol[-1]))
- --eol;
/* now then, inspect the URI */
if (memcmp(val, "file", 4U) == 0) {
@@ -720,7 +716,7 @@ static ssize_t
_warc_rdlen(const char *buf, size_t bsz)
{
static const char _key[] = "\r\nContent-Length:";
- const char *val;
+ const char *val, *eol;
char *on = NULL;
long int len;
@@ -728,14 +724,24 @@ _warc_rdlen(const char *buf, size_t bsz)
/* no bother */
return -1;
}
-
- /* strtol kindly overreads whitespace for us, so use that */
val += sizeof(_key) - 1U;
+ if ((eol = _warc_find_eol(val, buf + bsz - val)) == NULL) {
+ /* no end of line */
+ return -1;
+ }
+
+ /* skip leading whitespace */
+ while (val < eol && isblank(*val))
+ val++;
+ /* there must be at least one digit */
+ if (!isdigit(*val))
+ return -1;
len = strtol(val, &on, 10);
- if (on == NULL || !isspace((unsigned char)*on)) {
- /* hm, can we trust that number? Best not. */
+ if (on != eol) {
+ /* line must end here */
return -1;
}
+
return (size_t)len;
}
@@ -743,7 +749,7 @@ static time_t
_warc_rdrtm(const char *buf, size_t bsz)
{
static const char _key[] = "\r\nWARC-Date:";
- const char *val;
+ const char *val, *eol;
char *on = NULL;
time_t res;
@@ -751,13 +757,17 @@ _warc_rdrtm(const char *buf, size_t bsz)
/* no bother */
return (time_t)-1;
}
+ val += sizeof(_key) - 1U;
+ if ((eol = _warc_find_eol(val, buf + bsz - val)) == NULL ) {
+ /* no end of line */
+ return -1;
+ }
/* xstrpisotime() kindly overreads whitespace for us, so use that */
- val += sizeof(_key) - 1U;
res = xstrpisotime(val, &on);
- if (on == NULL || !isspace((unsigned char)*on)) {
- /* hm, can we trust that number? Best not. */
- return (time_t)-1;
+ if (on != eol) {
+ /* line must end here */
+ return -1;
}
return res;
}
@@ -766,7 +776,7 @@ static time_t
_warc_rdmtm(const char *buf, size_t bsz)
{
static const char _key[] = "\r\nLast-Modified:";
- const char *val;
+ const char *val, *eol;
char *on = NULL;
time_t res;
@@ -774,13 +784,17 @@ _warc_rdmtm(const char *buf, size_t bsz)
/* no bother */
return (time_t)-1;
}
+ val += sizeof(_key) - 1U;
+ if ((eol = _warc_find_eol(val, buf + bsz - val)) == NULL ) {
+ /* no end of line */
+ return -1;
+ }
/* xstrpisotime() kindly overreads whitespace for us, so use that */
- val += sizeof(_key) - 1U;
res = xstrpisotime(val, &on);
- if (on == NULL || !isspace((unsigned char)*on)) {
- /* hm, can we trust that number? Best not. */
- return (time_t)-1;
+ if (on != eol) {
+ /* line must end here */
+ return -1;
}
return res;
}
@@ -797,4 +811,12 @@ _warc_find_eoh(const char *buf, size_t bsz)
return hit;
}
+static const char*
+_warc_find_eol(const char *buf, size_t bsz)
+{
+ static const char _marker[] = "\r\n";
+ const char *hit = xmemmem(buf, bsz, _marker, sizeof(_marker) - 1U);
+
+ return hit;
+}
/* archive_read_support_format_warc.c ends here */
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_xar.c b/contrib/libarchive/libarchive/archive_read_support_format_xar.c
index 47ed064..7a22beb 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_xar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_xar.c
@@ -394,6 +394,7 @@ static void checksum_update(struct archive_read *, const void *,
size_t, const void *, size_t);
static int checksum_final(struct archive_read *, const void *,
size_t, const void *, size_t);
+static void checksum_cleanup(struct archive_read *);
static int decompression_init(struct archive_read *, enum enctype);
static int decompress(struct archive_read *, const void **,
size_t *, const void *, size_t *);
@@ -923,6 +924,7 @@ xar_cleanup(struct archive_read *a)
int r;
xar = (struct xar *)(a->format->data);
+ checksum_cleanup(a);
r = decompression_cleanup(a);
hdlink = xar->hdlink_list;
while (hdlink != NULL) {
@@ -933,6 +935,7 @@ xar_cleanup(struct archive_read *a)
}
for (i = 0; i < xar->file_queue.used; i++)
file_free(xar->file_queue.files[i]);
+ free(xar->file_queue.files);
while (xar->unknowntags != NULL) {
struct unknown_tag *tag;
@@ -1719,6 +1722,16 @@ decompression_cleanup(struct archive_read *a)
}
static void
+checksum_cleanup(struct archive_read *a) {
+ struct xar *xar;
+
+ xar = (struct xar *)(a->format->data);
+
+ _checksum_final(&(xar->a_sumwrk), NULL, 0);
+ _checksum_final(&(xar->e_sumwrk), NULL, 0);
+}
+
+static void
xmlattr_cleanup(struct xmlattr_list *list)
{
struct xmlattr *attr, *next;
@@ -3047,7 +3060,7 @@ xml2_read_cb(void *context, char *buffer, int len)
struct xar *xar;
const void *d;
size_t outbytes;
- size_t used;
+ size_t used = 0;
int r;
a = (struct archive_read *)context;
@@ -3171,6 +3184,9 @@ expat_xmlattr_setup(struct archive_read *a,
value = strdup(atts[1]);
if (attr == NULL || name == NULL || value == NULL) {
archive_set_error(&a->archive, ENOMEM, "Out of memory");
+ free(attr);
+ free(name);
+ free(value);
return (ARCHIVE_FATAL);
}
attr->name = name;
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_zip.c b/contrib/libarchive/libarchive/archive_read_support_format_zip.c
index 1aa7445..10dc14d 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_zip.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_zip.c
@@ -199,7 +199,7 @@ struct zip {
struct trad_enc_ctx tctx;
char tctx_valid;
- /* WinZip AES decyption. */
+ /* WinZip AES decryption. */
/* Contexts used for AES decryption. */
archive_crypto_ctx cctx;
char cctx_valid;
@@ -242,7 +242,7 @@ trad_enc_update_keys(struct trad_enc_ctx *ctx, uint8_t c)
}
static uint8_t
-trad_enc_decypt_byte(struct trad_enc_ctx *ctx)
+trad_enc_decrypt_byte(struct trad_enc_ctx *ctx)
{
unsigned temp = ctx->keys[2] | 2;
return (uint8_t)((temp * (temp ^ 1)) >> 8) & 0xff;
@@ -257,7 +257,7 @@ trad_enc_decrypt_update(struct trad_enc_ctx *ctx, const uint8_t *in,
max = (unsigned)((in_len < out_len)? in_len: out_len);
for (i = 0; i < max; i++) {
- uint8_t t = in[i] ^ trad_enc_decypt_byte(ctx);
+ uint8_t t = in[i] ^ trad_enc_decrypt_byte(ctx);
out[i] = t;
trad_enc_update_keys(ctx, t);
}
@@ -452,26 +452,38 @@ process_extra(struct archive_read *a, const char *p, size_t extra_length, struct
/* Zip64 extended information extra field. */
zip_entry->flags |= LA_USED_ZIP64;
if (zip_entry->uncompressed_size == 0xffffffff) {
- if (datasize < 8)
- break;
- zip_entry->uncompressed_size =
- archive_le64dec(p + offset);
+ uint64_t t = 0;
+ if (datasize < 8
+ || (t = archive_le64dec(p + offset)) > INT64_MAX) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Malformed 64-bit uncompressed size");
+ return ARCHIVE_FAILED;
+ }
+ zip_entry->uncompressed_size = t;
offset += 8;
datasize -= 8;
}
if (zip_entry->compressed_size == 0xffffffff) {
- if (datasize < 8)
- break;
- zip_entry->compressed_size =
- archive_le64dec(p + offset);
+ uint64_t t = 0;
+ if (datasize < 8
+ || (t = archive_le64dec(p + offset)) > INT64_MAX) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Malformed 64-bit compressed size");
+ return ARCHIVE_FAILED;
+ }
+ zip_entry->compressed_size = t;
offset += 8;
datasize -= 8;
}
if (zip_entry->local_header_offset == 0xffffffff) {
- if (datasize < 8)
- break;
- zip_entry->local_header_offset =
- archive_le64dec(p + offset);
+ uint64_t t = 0;
+ if (datasize < 8
+ || (t = archive_le64dec(p + offset)) > INT64_MAX) {
+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+ "Malformed 64-bit local header offset");
+ return ARCHIVE_FAILED;
+ }
+ zip_entry->local_header_offset = t;
offset += 8;
datasize -= 8;
}
@@ -710,7 +722,7 @@ process_extra(struct archive_read *a, const char *p, size_t extra_length, struct
break;
}
case 0x9901:
- /* WinZIp AES extra data field. */
+ /* WinZip AES extra data field. */
if (p[offset + 2] == 'A' && p[offset + 3] == 'E') {
/* Vendor version. */
zip_entry->aes_extra.vendor =
@@ -905,6 +917,7 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry,
archive_wstrcat(&s, wp);
archive_wstrappend_wchar(&s, L'/');
archive_entry_copy_pathname_w(entry, s.s);
+ archive_wstring_free(&s);
}
} else {
cp = archive_entry_pathname(entry);
@@ -915,6 +928,7 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry,
archive_strcat(&s, cp);
archive_strappend_char(&s, '/');
archive_entry_set_pathname(entry, s.s);
+ archive_string_free(&s);
}
}
}
@@ -1154,11 +1168,18 @@ zip_read_data_none(struct archive_read *a, const void **_buff,
|| (zip->hctx_valid
&& zip->entry->aes_extra.vendor == AES_VENDOR_AE_2))) {
if (zip->entry->flags & LA_USED_ZIP64) {
+ uint64_t compressed, uncompressed;
zip->entry->crc32 = archive_le32dec(p + 4);
- zip->entry->compressed_size =
- archive_le64dec(p + 8);
- zip->entry->uncompressed_size =
- archive_le64dec(p + 16);
+ compressed = archive_le64dec(p + 8);
+ uncompressed = archive_le64dec(p + 16);
+ if (compressed > INT64_MAX || uncompressed > INT64_MAX) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Overflow of 64-bit file sizes");
+ return ARCHIVE_FAILED;
+ }
+ zip->entry->compressed_size = compressed;
+ zip->entry->uncompressed_size = uncompressed;
zip->unconsumed = 24;
} else {
zip->entry->crc32 = archive_le32dec(p + 4);
@@ -1435,9 +1456,18 @@ zip_read_data_deflate(struct archive_read *a, const void **buff,
zip->unconsumed = 4;
}
if (zip->entry->flags & LA_USED_ZIP64) {
+ uint64_t compressed, uncompressed;
zip->entry->crc32 = archive_le32dec(p);
- zip->entry->compressed_size = archive_le64dec(p + 4);
- zip->entry->uncompressed_size = archive_le64dec(p + 12);
+ compressed = archive_le64dec(p + 4);
+ uncompressed = archive_le64dec(p + 12);
+ if (compressed > INT64_MAX || uncompressed > INT64_MAX) {
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT,
+ "Overflow of 64-bit file sizes");
+ return ARCHIVE_FAILED;
+ }
+ zip->entry->compressed_size = compressed;
+ zip->entry->uncompressed_size = uncompressed;
zip->unconsumed += 20;
} else {
zip->entry->crc32 = archive_le32dec(p);
@@ -1518,7 +1548,7 @@ read_decryption_header(struct archive_read *a)
case 0x6720:/* Blowfish */
case 0x6721:/* Twofish */
case 0x6801:/* RC4 */
- /* Suuported encryption algorithm. */
+ /* Supported encryption algorithm. */
break;
default:
archive_set_error(&a->archive,
@@ -1627,7 +1657,7 @@ read_decryption_header(struct archive_read *a)
__archive_read_consume(a, 4);
/*return (ARCHIVE_OK);
- * This is not fully implemnted yet.*/
+ * This is not fully implemented yet.*/
archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
"Encrypted file is unsupported");
return (ARCHIVE_FAILED);
@@ -1709,7 +1739,7 @@ init_traditional_PKWARE_decryption(struct archive_read *a)
}
/*
- * Initialize ctx for Traditional PKWARE Decyption.
+ * Initialize ctx for Traditional PKWARE Decryption.
*/
r = trad_enc_init(&zip->tctx, passphrase, strlen(passphrase),
p, ENC_HEADER_SIZE, &crcchk);
diff --git a/contrib/libarchive/libarchive/archive_string.c b/contrib/libarchive/libarchive/archive_string.c
index cf10f09..f738c54 100644
--- a/contrib/libarchive/libarchive/archive_string.c
+++ b/contrib/libarchive/libarchive/archive_string.c
@@ -219,6 +219,12 @@ archive_wstring_append(struct archive_wstring *as, const wchar_t *p, size_t s)
return (as);
}
+struct archive_string *
+archive_array_append(struct archive_string *as, const char *p, size_t s)
+{
+ return archive_string_append(as, p, s);
+}
+
void
archive_string_concat(struct archive_string *dest, struct archive_string *src)
{
@@ -597,7 +603,7 @@ archive_wstring_append_from_mbs(struct archive_wstring *dest,
wcs = dest->s + dest->length;
/*
* We cannot use mbsrtowcs/mbstowcs here because those may convert
- * extra MBS when strlen(p) > len and one wide character consis of
+ * extra MBS when strlen(p) > len and one wide character consists of
* multi bytes.
*/
while (*mbs && mbs_length > 0) {
@@ -1248,7 +1254,7 @@ create_sconv_object(const char *fc, const char *tc,
sc->cd = iconv_open(tc, fc);
if (sc->cd == (iconv_t)-1 && (sc->flag & SCONV_BEST_EFFORT)) {
/*
- * Unfortunaly, all of iconv implements do support
+ * Unfortunately, all of iconv implements do support
* "CP932" character-set, so we should use "SJIS"
* instead if iconv_open failed.
*/
@@ -1261,7 +1267,7 @@ create_sconv_object(const char *fc, const char *tc,
/*
* archive_mstring on Windows directly convert multi-bytes
* into archive_wstring in order not to depend on locale
- * so that you can do a I18N programing. This will be
+ * so that you can do a I18N programming. This will be
* used only in archive_mstring_copy_mbs_len_l so far.
*/
if (flag & SCONV_FROM_CHARSET) {
@@ -1726,7 +1732,7 @@ archive_string_conversion_from_charset(struct archive *a, const char *charset,
* in tar or zip files. But mbstowcs/wcstombs(CRT) usually use CP_ACP
* unless you use setlocale(LC_ALL, ".OCP")(specify CP_OEMCP).
* So we should make a string conversion between CP_ACP and CP_OEMCP
- * for compatibillty.
+ * for compatibility.
*/
#if defined(_WIN32) && !defined(__CYGWIN__)
struct archive_string_conv *
@@ -2220,7 +2226,7 @@ best_effort_strncat_in_locale(struct archive_string *as, const void *_p,
/*
* If a character is ASCII, this just copies it. If not, this
- * assigns '?' charater instead but in UTF-8 locale this assigns
+ * assigns '?' character instead but in UTF-8 locale this assigns
* byte sequence 0xEF 0xBD 0xBD, which are code point U+FFFD,
* a Replacement Character in Unicode.
*/
@@ -2554,7 +2560,7 @@ utf16_to_unicode(uint32_t *pwc, const char *s, size_t n, int be)
/*
* Surrogate pair values(0xd800 through 0xdfff) are only
- * used by UTF-16, so, after above culculation, the code
+ * used by UTF-16, so, after above calculation, the code
* must not be surrogate values, and Unicode has no codes
* larger than 0x10ffff. Thus, those are not legal Unicode
* values.
@@ -2903,7 +2909,7 @@ get_nfc(uint32_t uc, uint32_t uc2)
/*
* Normalize UTF-8/UTF-16BE characters to Form C and copy the result.
*
- * TODO: Convert composition exclusions,which are never converted
+ * TODO: Convert composition exclusions, which are never converted
* from NFC,NFD,NFKC and NFKD, to Form C.
*/
static int
@@ -3437,7 +3443,7 @@ strncat_from_utf8_libarchive2(struct archive_string *as,
}
/*
- * As libarchie 2.x, translates the UTF-8 characters into
+ * As libarchive 2.x, translates the UTF-8 characters into
* wide-characters in the assumption that WCS is Unicode.
*/
if (n < 0) {
@@ -3947,7 +3953,7 @@ archive_mstring_get_mbs_l(struct archive_mstring *aes,
#if defined(_WIN32) && !defined(__CYGWIN__)
/*
- * Internationalization programing on Windows must use Wide
+ * Internationalization programming on Windows must use Wide
* characters because Windows platform cannot make locale UTF-8.
*/
if (sc != NULL && (aes->aes_set & AES_SET_WCS) != 0) {
@@ -4079,7 +4085,7 @@ archive_mstring_copy_mbs_len_l(struct archive_mstring *aes,
archive_string_empty(&(aes->aes_utf8));
#if defined(_WIN32) && !defined(__CYGWIN__)
/*
- * Internationalization programing on Windows must use Wide
+ * Internationalization programming on Windows must use Wide
* characters because Windows platform cannot make locale UTF-8.
*/
if (sc == NULL) {
diff --git a/contrib/libarchive/libarchive/archive_string.h b/contrib/libarchive/libarchive/archive_string.h
index 60ebf0e..f5953d0 100644
--- a/contrib/libarchive/libarchive/archive_string.h
+++ b/contrib/libarchive/libarchive/archive_string.h
@@ -81,6 +81,10 @@ archive_strappend_char(struct archive_string *, char);
struct archive_wstring *
archive_wstrappend_wchar(struct archive_wstring *, wchar_t);
+/* Append a raw array to an archive_string, resizing as necessary */
+struct archive_string *
+archive_array_append(struct archive_string *, const char *, size_t);
+
/* Convert a Unicode string to current locale and append the result. */
/* Returns -1 if conversion fails. */
int
diff --git a/contrib/libarchive/libarchive/archive_string_composition.h b/contrib/libarchive/libarchive/archive_string_composition.h
index be41e33..8902ac1 100644
--- a/contrib/libarchive/libarchive/archive_string_composition.h
+++ b/contrib/libarchive/libarchive/archive_string_composition.h
@@ -1009,7 +1009,7 @@ static const char u_decomposable_blocks[0x1D2+1] = {
(((uc) > 0x1D244)?0:\
ccc_val[ccc_val_index[ccc_index[(uc)>>8]][((uc)>>4)&0x0F]][(uc)&0x0F])
-/* The table of the value of Canonical Cimbining Class */
+/* The table of the value of Canonical Combining Class */
static const unsigned char ccc_val[][16] = {
/* idx=0: XXXX0 - XXXXF */
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
diff --git a/contrib/libarchive/libarchive/archive_write.c b/contrib/libarchive/libarchive/archive_write.c
index f5a9f61..e441dbe 100644
--- a/contrib/libarchive/libarchive/archive_write.c
+++ b/contrib/libarchive/libarchive/archive_write.c
@@ -231,7 +231,7 @@ __archive_write_filter(struct archive_write_filter *f,
if (length == 0)
return(ARCHIVE_OK);
if (f->write == NULL)
- /* If unset, a fatal error has already ocuured, so this filter
+ /* If unset, a fatal error has already occurred, so this filter
* didn't open. We cannot write anything. */
return(ARCHIVE_FATAL);
r = (f->write)(f, buff, length);
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_program.c b/contrib/libarchive/libarchive/archive_write_add_filter_program.c
index 31a1b6f..55b5e8e 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_program.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_program.c
@@ -200,6 +200,7 @@ __archive_write_program_free(struct archive_write_program_data *data)
if (data->child)
CloseHandle(data->child);
#endif
+ free(data->program_name);
free(data->child_buf);
free(data);
}
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_xz.c b/contrib/libarchive/libarchive/archive_write_add_filter_xz.c
index 46a6c38..b0f25a6 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_xz.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_xz.c
@@ -233,7 +233,7 @@ archive_compressor_xz_init_stream(struct archive_write_filter *f,
if (f->code == ARCHIVE_FILTER_XZ) {
#ifdef HAVE_LZMA_STREAM_ENCODER_MT
if (data->threads != 1) {
- bzero(&mt_options, sizeof(mt_options));
+ memset(&mt_options, 0, sizeof(mt_options));
mt_options.threads = data->threads;
mt_options.timeout = 300;
mt_options.filters = data->lzmafilters;
diff --git a/contrib/libarchive/libarchive/archive_write_disk_acl.c b/contrib/libarchive/libarchive/archive_write_disk_acl.c
index e47384a..144ab7e 100644
--- a/contrib/libarchive/libarchive/archive_write_disk_acl.c
+++ b/contrib/libarchive/libarchive/archive_write_disk_acl.c
@@ -34,6 +34,9 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_disk.c 201159 2009-12-29 0
#define _ACL_PRIVATE /* For debugging */
#include <sys/acl.h>
#endif
+#if HAVE_DARWIN_ACL
+#include <membership.h>
+#endif
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
@@ -43,7 +46,7 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write_disk.c 201159 2009-12-29 0
#include "archive_acl_private.h"
#include "archive_write_disk_private.h"
-#ifndef HAVE_POSIX_ACL
+#if !HAVE_POSIX_ACL && !HAVE_NFS4_ACL
/* Default empty function body to satisfy mainline code. */
int
archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
@@ -56,47 +59,111 @@ archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
return (ARCHIVE_OK);
}
-#else
+#else /* HAVE_POSIX_ACL || HAVE_NFS4_ACL */
+
+#if HAVE_SUN_ACL
+#define ARCHIVE_PLATFORM_ACL_TYPE_NFS4 ACE_T
+#elif HAVE_DARWIN_ACL
+#define ARCHIVE_PLATFORM_ACL_TYPE_NFS4 ACL_TYPE_EXTENDED
+#elif HAVE_ACL_TYPE_NFS4
+#define ARCHIVE_PLATFORM_ACL_TYPE_NFS4 ACL_TYPE_NFS4
+#endif
static int set_acl(struct archive *, int fd, const char *,
struct archive_acl *,
acl_type_t, int archive_entry_acl_type, const char *tn);
-/*
- * XXX TODO: What about ACL types other than ACCESS and DEFAULT?
- */
int
archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
struct archive_acl *abstract_acl)
{
- int ret;
+ int ret = ARCHIVE_OK;
- if (archive_acl_count(abstract_acl, ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) > 0) {
- ret = set_acl(a, fd, name, abstract_acl, ACL_TYPE_ACCESS,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS, "access");
- if (ret != ARCHIVE_OK)
- return (ret);
- ret = set_acl(a, fd, name, abstract_acl, ACL_TYPE_DEFAULT,
- ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, "default");
+#if !HAVE_DARWIN_ACL
+ if ((archive_acl_types(abstract_acl)
+ & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0) {
+#if HAVE_SUN_ACL
+ /* Solaris writes POSIX.1e access and default ACLs together */
+ ret = set_acl(a, fd, name, abstract_acl, ACLENT_T,
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, "posix1e");
+#else /* HAVE_POSIX_ACL */
+ if ((archive_acl_types(abstract_acl)
+ & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0) {
+ ret = set_acl(a, fd, name, abstract_acl,
+ ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ "access");
+ if (ret != ARCHIVE_OK)
+ return (ret);
+ }
+ if ((archive_acl_types(abstract_acl)
+ & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) != 0)
+ ret = set_acl(a, fd, name, abstract_acl,
+ ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
+ "default");
+#endif /* !HAVE_SUN_ACL */
+ /* Simultaneous POSIX.1e and NFSv4 is not supported */
return (ret);
-#ifdef ACL_TYPE_NFS4
- } else if (archive_acl_count(abstract_acl, ARCHIVE_ENTRY_ACL_TYPE_NFS4) > 0) {
- ret = set_acl(a, fd, name, abstract_acl, ACL_TYPE_NFS4,
+ }
+#endif /* !HAVE_DARWIN_ACL */
+#if HAVE_NFS4_ACL
+ if ((archive_acl_types(abstract_acl) &
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
+ ret = set_acl(a, fd, name, abstract_acl,
+ ARCHIVE_PLATFORM_ACL_TYPE_NFS4,
ARCHIVE_ENTRY_ACL_TYPE_NFS4, "nfs4");
- return (ret);
-#endif
- } else
- return ARCHIVE_OK;
+ }
+#endif /* HAVE_NFS4_ACL */
+ return (ret);
}
-static struct {
- int archive_perm;
- int platform_perm;
+/*
+ * Translate system ACL permissions into libarchive internal structure
+ */
+static const struct {
+ const int archive_perm;
+ const int platform_perm;
} acl_perm_map[] = {
+#if HAVE_SUN_ACL /* Solaris NFSv4 ACL permissions */
+ {ARCHIVE_ENTRY_ACL_EXECUTE, ACE_EXECUTE},
+ {ARCHIVE_ENTRY_ACL_READ_DATA, ACE_READ_DATA},
+ {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACE_LIST_DIRECTORY},
+ {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACE_WRITE_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_FILE, ACE_ADD_FILE},
+ {ARCHIVE_ENTRY_ACL_APPEND_DATA, ACE_APPEND_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACE_ADD_SUBDIRECTORY},
+ {ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACE_READ_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACE_WRITE_NAMED_ATTRS},
+ {ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACE_DELETE_CHILD},
+ {ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACE_READ_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACE_WRITE_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_DELETE, ACE_DELETE},
+ {ARCHIVE_ENTRY_ACL_READ_ACL, ACE_READ_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACE_WRITE_ACL},
+ {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACE_WRITE_OWNER},
+ {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACE_SYNCHRONIZE}
+#elif HAVE_DARWIN_ACL /* MacOS ACL permissions */
+ {ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
+ {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
+ {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_FILE, ACL_ADD_FILE},
+ {ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
+ {ARCHIVE_ENTRY_ACL_DELETE, ACL_DELETE},
+ {ARCHIVE_ENTRY_ACL_APPEND_DATA, ACL_APPEND_DATA},
+ {ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACL_ADD_SUBDIRECTORY},
+ {ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACL_DELETE_CHILD},
+ {ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACL_READ_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACL_WRITE_ATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACL_READ_EXTATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACL_WRITE_EXTATTRIBUTES},
+ {ARCHIVE_ENTRY_ACL_READ_ACL, ACL_READ_SECURITY},
+ {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_SECURITY},
+ {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_CHANGE_OWNER},
+ {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
+#else /* POSIX.1e ACL permissions */
{ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
{ARCHIVE_ENTRY_ACL_WRITE, ACL_WRITE},
{ARCHIVE_ENTRY_ACL_READ, ACL_READ},
-#ifdef ACL_TYPE_NFS4
+#if HAVE_ACL_TYPE_NFS4 /* FreeBSD NFSv4 ACL permissions */
{ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
{ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
{ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
@@ -114,34 +181,69 @@ static struct {
{ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_WRITE_OWNER},
{ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
#endif
+#endif /* !HAVE_SUN_ACL && !HAVE_DARWIN_ACL */
};
-#ifdef ACL_TYPE_NFS4
-static struct {
- int archive_inherit;
- int platform_inherit;
+#if HAVE_NFS4_ACL
+/*
+ * Translate system NFSv4 inheritance flags into libarchive internal structure
+ */
+static const struct {
+ const int archive_inherit;
+ const int platform_inherit;
} acl_inherit_map[] = {
+#if HAVE_SUN_ACL /* Solaris NFSv4 inheritance flags */
+ {ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACE_FILE_INHERIT_ACE},
+ {ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACE_DIRECTORY_INHERIT_ACE},
+ {ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACE_NO_PROPAGATE_INHERIT_ACE},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACE_INHERIT_ONLY_ACE},
+ {ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS, ACE_SUCCESSFUL_ACCESS_ACE_FLAG},
+ {ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS, ACE_FAILED_ACCESS_ACE_FLAG},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERITED, ACE_INHERITED_ACE}
+#elif HAVE_DARWIN_ACL /* MacOS NFSv4 inheritance flags */
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERITED, ACL_ENTRY_INHERITED},
+ {ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_FILE_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_LIMIT_INHERIT},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_ONLY_INHERIT}
+#else /* FreeBSD NFSv4 ACL inheritance flags */
{ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_FILE_INHERIT},
{ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT},
{ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_NO_PROPAGATE_INHERIT},
- {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY}
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY},
+ {ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS, ACL_ENTRY_SUCCESSFUL_ACCESS},
+ {ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS, ACL_ENTRY_FAILED_ACCESS},
+ {ARCHIVE_ENTRY_ACL_ENTRY_INHERITED, ACL_ENTRY_INHERITED}
+#endif /* !HAVE_SUN_ACL && !HAVE_DARWIN_ACL */
};
-#endif
+#endif /* HAVE_NFS4_ACL */
static int
set_acl(struct archive *a, int fd, const char *name,
struct archive_acl *abstract_acl,
acl_type_t acl_type, int ae_requested_type, const char *tname)
{
+#if HAVE_SUN_ACL
+ aclent_t *aclent;
+ ace_t *ace;
+ int e, r;
+ acl_t *acl;
+#else
acl_t acl;
acl_entry_t acl_entry;
acl_permset_t acl_permset;
-#ifdef ACL_TYPE_NFS4
+#if HAVE_ACL_TYPE_NFS4 || HAVE_DARWIN_ACL
acl_flagset_t acl_flagset;
- int r;
+#endif
+#endif /* HAVE_SUN_ACL */
+#if HAVE_ACL_TYPE_NFS4
+ int r;
#endif
int ret;
int ae_type, ae_permset, ae_tag, ae_id;
+#if HAVE_DARWIN_ACL
+ uuid_t ae_uuid;
+#endif
uid_t ae_uid;
gid_t ae_gid;
const char *ae_name;
@@ -152,32 +254,165 @@ set_acl(struct archive *a, int fd, const char *name,
entries = archive_acl_reset(abstract_acl, ae_requested_type);
if (entries == 0)
return (ARCHIVE_OK);
+
+#if HAVE_SUN_ACL
+ acl = NULL;
+ acl = malloc(sizeof(acl_t));
+ if (acl == NULL) {
+ archive_set_error(a, ARCHIVE_ERRNO_MISC,
+ "Invalid ACL type");
+ return (ARCHIVE_FAILED);
+ }
+ if (acl_type == ACE_T)
+ acl->acl_entry_size = sizeof(ace_t);
+ else if (acl_type == ACLENT_T)
+ acl->acl_entry_size = sizeof(aclent_t);
+ else {
+ archive_set_error(a, ARCHIVE_ERRNO_MISC,
+ "Invalid ACL type");
+ acl_free(acl);
+ return (ARCHIVE_FAILED);
+ }
+ acl->acl_type = acl_type;
+ acl->acl_cnt = entries;
+
+ acl->acl_aclp = malloc(entries * acl->acl_entry_size);
+ if (acl->acl_aclp == NULL) {
+ archive_set_error(a, errno,
+ "Can't allocate memory for acl buffer");
+ acl_free(acl);
+ return (ARCHIVE_FAILED);
+ }
+#else /* !HAVE_SUN_ACL */
acl = acl_init(entries);
if (acl == (acl_t)NULL) {
archive_set_error(a, errno,
"Failed to initialize ACL working storage");
return (ARCHIVE_FAILED);
}
+#endif /* !HAVE_SUN_ACL */
+#if HAVE_SUN_ACL
+ e = 0;
+#endif
while (archive_acl_next(a, abstract_acl, ae_requested_type, &ae_type,
&ae_permset, &ae_tag, &ae_id, &ae_name) == ARCHIVE_OK) {
+#if HAVE_SUN_ACL
+ ace = NULL;
+ aclent = NULL;
+ if (acl->acl_type == ACE_T) {
+ ace = &((ace_t *)acl->acl_aclp)[e];
+ ace->a_who = -1;
+ ace->a_access_mask = 0;
+ ace->a_flags = 0;
+ } else {
+ aclent = &((aclent_t *)acl->acl_aclp)[e];
+ aclent->a_id = -1;
+ aclent->a_type = 0;
+ aclent->a_perm = 0;
+ }
+#else /* !HAVE_SUN_ACL */
+#if HAVE_DARWIN_ACL
+ /*
+ * Mac OS doesn't support NFSv4 ACLs for
+ * owner@, group@ and everyone@.
+ * We skip any of these ACLs found.
+ */
+ if (ae_tag == ARCHIVE_ENTRY_ACL_USER_OBJ ||
+ ae_tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ ||
+ ae_tag == ARCHIVE_ENTRY_ACL_EVERYONE)
+ continue;
+#endif
if (acl_create_entry(&acl, &acl_entry) != 0) {
archive_set_error(a, errno,
"Failed to create a new ACL entry");
ret = ARCHIVE_FAILED;
goto exit_free;
}
-
+#endif /* !HAVE_SUN_ACL */
+#if HAVE_DARWIN_ACL
+ switch (ae_type) {
+ case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
+ acl_set_tag_type(acl_entry, ACL_EXTENDED_ALLOW);
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_DENY:
+ acl_set_tag_type(acl_entry, ACL_EXTENDED_DENY);
+ break;
+ default:
+ /* We don't support any other types on MacOS */
+ continue;
+ }
+#endif
switch (ae_tag) {
+#if HAVE_SUN_ACL
case ARCHIVE_ENTRY_ACL_USER:
- acl_set_tag_type(acl_entry, ACL_USER);
ae_uid = archive_write_disk_uid(a, ae_name, ae_id);
+ if (acl->acl_type == ACE_T)
+ ace->a_who = ae_uid;
+ else {
+ aclent->a_id = ae_uid;
+ aclent->a_type |= USER;
+ }
+ break;
+ case ARCHIVE_ENTRY_ACL_GROUP:
+ ae_gid = archive_write_disk_gid(a, ae_name, ae_id);
+ if (acl->acl_type == ACE_T) {
+ ace->a_who = ae_gid;
+ ace->a_flags |= ACE_IDENTIFIER_GROUP;
+ } else {
+ aclent->a_id = ae_gid;
+ aclent->a_type |= GROUP;
+ }
+ break;
+ case ARCHIVE_ENTRY_ACL_USER_OBJ:
+ if (acl->acl_type == ACE_T)
+ ace->a_flags |= ACE_OWNER;
+ else
+ aclent->a_type |= USER_OBJ;
+ break;
+ case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
+ if (acl->acl_type == ACE_T) {
+ ace->a_flags |= ACE_GROUP;
+ ace->a_flags |= ACE_IDENTIFIER_GROUP;
+ } else
+ aclent->a_type |= GROUP_OBJ;
+ break;
+ case ARCHIVE_ENTRY_ACL_MASK:
+ aclent->a_type |= CLASS_OBJ;
+ break;
+ case ARCHIVE_ENTRY_ACL_OTHER:
+ aclent->a_type |= OTHER_OBJ;
+ break;
+ case ARCHIVE_ENTRY_ACL_EVERYONE:
+ ace->a_flags |= ACE_EVERYONE;
+ break;
+#else /* !HAVE_SUN_ACL */
+ case ARCHIVE_ENTRY_ACL_USER:
+ ae_uid = archive_write_disk_uid(a, ae_name, ae_id);
+#if !HAVE_DARWIN_ACL /* FreeBSD, Linux */
+ acl_set_tag_type(acl_entry, ACL_USER);
acl_set_qualifier(acl_entry, &ae_uid);
+#else /* MacOS */
+ if (mbr_identifier_to_uuid(ID_TYPE_UID, &ae_uid,
+ sizeof(uid_t), ae_uuid) != 0)
+ continue;
+ if (acl_set_qualifier(acl_entry, &ae_uuid) != 0)
+ continue;
+#endif /* HAVE_DARWIN_ACL */
break;
case ARCHIVE_ENTRY_ACL_GROUP:
- acl_set_tag_type(acl_entry, ACL_GROUP);
ae_gid = archive_write_disk_gid(a, ae_name, ae_id);
+#if !HAVE_DARWIN_ACL /* FreeBSD, Linux */
+ acl_set_tag_type(acl_entry, ACL_GROUP);
acl_set_qualifier(acl_entry, &ae_gid);
+#else /* MacOS */
+ if (mbr_identifier_to_uuid(ID_TYPE_GID, &ae_gid,
+ sizeof(gid_t), ae_uuid) != 0)
+ continue;
+ if (acl_set_qualifier(acl_entry, &ae_uuid) != 0)
+ continue;
+#endif /* HAVE_DARWIN_ACL */
break;
+#if !HAVE_DARWIN_ACL /* FreeBSD, Linux */
case ARCHIVE_ENTRY_ACL_USER_OBJ:
acl_set_tag_type(acl_entry, ACL_USER_OBJ);
break;
@@ -190,11 +425,13 @@ set_acl(struct archive *a, int fd, const char *name,
case ARCHIVE_ENTRY_ACL_OTHER:
acl_set_tag_type(acl_entry, ACL_OTHER);
break;
-#ifdef ACL_TYPE_NFS4
+#if HAVE_ACL_TYPE_NFS4 /* FreeBSD only */
case ARCHIVE_ENTRY_ACL_EVERYONE:
acl_set_tag_type(acl_entry, ACL_EVERYONE);
break;
#endif
+#endif /* !HAVE_DARWIN_ACL */
+#endif /* !HAVE_SUN_ACL */
default:
archive_set_error(a, ARCHIVE_ERRNO_MISC,
"Unknown ACL tag");
@@ -202,9 +439,45 @@ set_acl(struct archive *a, int fd, const char *name,
goto exit_free;
}
-#ifdef ACL_TYPE_NFS4
+#if HAVE_ACL_TYPE_NFS4 || HAVE_SUN_ACL
r = 0;
switch (ae_type) {
+#if HAVE_SUN_ACL
+ case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
+ if (ace != NULL)
+ ace->a_type = ACE_ACCESS_ALLOWED_ACE_TYPE;
+ else
+ r = -1;
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_DENY:
+ if (ace != NULL)
+ ace->a_type = ACE_ACCESS_DENIED_ACE_TYPE;
+ else
+ r = -1;
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_AUDIT:
+ if (ace != NULL)
+ ace->a_type = ACE_SYSTEM_AUDIT_ACE_TYPE;
+ else
+ r = -1;
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_ALARM:
+ if (ace != NULL)
+ ace->a_type = ACE_SYSTEM_ALARM_ACE_TYPE;
+ else
+ r = -1;
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_ACCESS:
+ if (aclent == NULL)
+ r = -1;
+ break;
+ case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
+ if (aclent != NULL)
+ aclent->a_type |= ACL_DEFAULT;
+ else
+ r = -1;
+ break;
+#else /* !HAVE_SUN_ACL */
case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
r = acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_ALLOW);
break;
@@ -221,20 +494,35 @@ set_acl(struct archive *a, int fd, const char *name,
case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
// These don't translate directly into the system ACL.
break;
+#endif /* !HAVE_SUN_ACL */
default:
archive_set_error(a, ARCHIVE_ERRNO_MISC,
"Unknown ACL entry type");
ret = ARCHIVE_FAILED;
goto exit_free;
}
+
if (r != 0) {
+#if HAVE_SUN_ACL
+ errno = EINVAL;
+#endif
archive_set_error(a, errno,
"Failed to set ACL entry type");
ret = ARCHIVE_FAILED;
goto exit_free;
}
-#endif
+#endif /* HAVE_ACL_TYPE_NFS4 || HAVE_SUN_ACL */
+#if HAVE_SUN_ACL
+ if (acl->acl_type == ACLENT_T) {
+ if (ae_permset & ARCHIVE_ENTRY_ACL_EXECUTE)
+ aclent->a_perm |= 1;
+ if (ae_permset & ARCHIVE_ENTRY_ACL_WRITE)
+ aclent->a_perm |= 2;
+ if (ae_permset & ARCHIVE_ENTRY_ACL_READ)
+ aclent->a_perm |= 4;
+ } else
+#else
if (acl_get_permset(acl_entry, &acl_permset) != 0) {
archive_set_error(a, errno,
"Failed to get ACL permission set");
@@ -247,9 +535,13 @@ set_acl(struct archive *a, int fd, const char *name,
ret = ARCHIVE_FAILED;
goto exit_free;
}
-
+#endif /* !HAVE_SUN_ACL */
for (i = 0; i < (int)(sizeof(acl_perm_map) / sizeof(acl_perm_map[0])); ++i) {
- if (ae_permset & acl_perm_map[i].archive_perm)
+ if (ae_permset & acl_perm_map[i].archive_perm) {
+#if HAVE_SUN_ACL
+ ace->a_access_mask |=
+ acl_perm_map[i].platform_perm;
+#else
if (acl_add_perm(acl_permset,
acl_perm_map[i].platform_perm) != 0) {
archive_set_error(a, errno,
@@ -257,10 +549,20 @@ set_acl(struct archive *a, int fd, const char *name,
ret = ARCHIVE_FAILED;
goto exit_free;
}
+#endif
+ }
}
-#ifdef ACL_TYPE_NFS4
- if (acl_type == ACL_TYPE_NFS4) {
+#if HAVE_NFS4_ACL
+#if HAVE_SUN_ACL
+ if (acl_type == ACE_T)
+#elif HAVE_DARWIN_ACL
+ if (acl_type == ACL_TYPE_EXTENDED)
+#else /* FreeBSD */
+ if (acl_type == ACL_TYPE_NFS4)
+#endif
+ {
+#if HAVE_POSIX_ACL || HAVE_DARWIN_ACL
/*
* acl_get_flagset_np() fails with non-NFSv4 ACLs
*/
@@ -276,8 +578,13 @@ set_acl(struct archive *a, int fd, const char *name,
ret = ARCHIVE_FAILED;
goto exit_free;
}
- for (i = 0; i < (int)(sizeof(acl_inherit_map) / sizeof(acl_inherit_map[0])); ++i) {
+#endif /* HAVE_POSIX_ACL || HAVE_DARWIN_ACL */
+ for (i = 0; i < (int)(sizeof(acl_inherit_map) /sizeof(acl_inherit_map[0])); ++i) {
if (ae_permset & acl_inherit_map[i].archive_inherit) {
+#if HAVE_SUN_ACL
+ ace->a_flags |=
+ acl_inherit_map[i].platform_inherit;
+#else /* !HAVE_SUN_ACL */
if (acl_add_flag_np(acl_flagset,
acl_inherit_map[i].platform_inherit) != 0) {
archive_set_error(a, errno,
@@ -285,38 +592,63 @@ set_acl(struct archive *a, int fd, const char *name,
ret = ARCHIVE_FAILED;
goto exit_free;
}
+#endif /* HAVE_SUN_ACL */
}
}
}
+#endif /* HAVE_NFS4_ACL */
+#if HAVE_SUN_ACL
+ e++;
#endif
}
+#if HAVE_ACL_SET_FD_NP || HAVE_ACL_SET_FD || HAVE_SUN_ACL
/* Try restoring the ACL through 'fd' if we can. */
-#if HAVE_ACL_SET_FD
- if (fd >= 0 && acl_type == ACL_TYPE_ACCESS && acl_set_fd(fd, acl) == 0)
- ret = ARCHIVE_OK;
- else
-#else
-#if HAVE_ACL_SET_FD_NP
- if (fd >= 0 && acl_set_fd_np(fd, acl, acl_type) == 0)
- ret = ARCHIVE_OK;
- else
+#if HAVE_SUN_ACL || HAVE_ACL_SET_FD_NP
+ if (fd >= 0)
+#else /* !HAVE_SUN_ACL && !HAVE_ACL_SET_FD_NP */
+ if (fd >= 0 && acl_type == ACL_TYPE_ACCESS)
#endif
+ {
+#if HAVE_SUN_ACL
+ if (facl_set(fd, acl) == 0)
+#elif HAVE_ACL_SET_FD_NP
+ if (acl_set_fd_np(fd, acl, acl_type) == 0)
+#else /* !HAVE_SUN_ACL && !HAVE_ACL_SET_FD_NP */
+ if (acl_set_fd(fd, acl) == 0)
#endif
-#if HAVE_ACL_SET_LINK_NP
- if (acl_set_link_np(name, acl_type, acl) != 0) {
- archive_set_error(a, errno, "Failed to set %s acl", tname);
- ret = ARCHIVE_WARN;
- }
+ ret = ARCHIVE_OK;
+ else {
+ if (errno == EOPNOTSUPP) {
+ /* Filesystem doesn't support ACLs */
+ ret = ARCHIVE_OK;
+ } else {
+ archive_set_error(a, errno,
+ "Failed to set %s acl on fd", tname);
+ }
+ }
+ } else
+#endif /* HAVE_ACL_SET_FD_NP || HAVE_ACL_SET_FD || HAVE_SUN_ACL */
+#if HAVE_SUN_ACL
+ if (acl_set(name, acl) != 0)
+#elif HAVE_ACL_SET_LINK_NP
+ if (acl_set_link_np(name, acl_type, acl) != 0)
#else
/* TODO: Skip this if 'name' is a symlink. */
- if (acl_set_file(name, acl_type, acl) != 0) {
- archive_set_error(a, errno, "Failed to set %s acl", tname);
- ret = ARCHIVE_WARN;
- }
+ if (acl_set_file(name, acl_type, acl) != 0)
#endif
+ {
+ if (errno == EOPNOTSUPP) {
+ /* Filesystem doesn't support ACLs */
+ ret = ARCHIVE_OK;
+ } else {
+ archive_set_error(a, errno, "Failed to set %s acl",
+ tname);
+ ret = ARCHIVE_WARN;
+ }
+ }
exit_free:
acl_free(acl);
return (ret);
}
-#endif
+#endif /* HAVE_POSIX_ACL || HAVE_NFS4_ACL */
diff --git a/contrib/libarchive/libarchive/archive_write_disk_posix.c b/contrib/libarchive/libarchive/archive_write_disk_posix.c
index c05059a..a799524 100644
--- a/contrib/libarchive/libarchive/archive_write_disk_posix.c
+++ b/contrib/libarchive/libarchive/archive_write_disk_posix.c
@@ -110,6 +110,18 @@ __FBSDID("$FreeBSD$");
#include <sys/fcntl1.h>
#endif
+/*
+ * Macro to cast st_mtime and time_t to an int64 so that 2 numbers can reliably be compared.
+ *
+ * It assumes that the input is an integer type of no more than 64 bits.
+ * If the number is less than zero, t must be a signed type, so it fits in
+ * int64_t. Otherwise, it's a nonnegative value so we can cast it to uint64_t
+ * without loss. But it could be a large unsigned value, so we have to clip it
+ * to INT64_MAX.*
+ */
+#define to_int64_time(t) \
+ ((t) < 0 ? (int64_t)(t) : (uint64_t)(t) > (uint64_t)INT64_MAX ? INT64_MAX : (int64_t)(t))
+
#if __APPLE__
#include <TargetConditionals.h>
#if TARGET_OS_MAC && !TARGET_OS_EMBEDDED && HAVE_QUARANTINE_H
@@ -308,7 +320,7 @@ struct archive_write_disk {
#define MAXIMUM_DIR_MODE 0775
/*
- * Maxinum uncompressed size of a decmpfs block.
+ * Maximum uncompressed size of a decmpfs block.
*/
#define MAX_DECMPFS_BLOCK_SIZE (64 * 1024)
/*
@@ -323,7 +335,7 @@ struct archive_write_disk {
#define RSRC_F_SIZE 50 /* Size of Resource fork footer. */
/* Size to write compressed data to resource fork. */
#define COMPRESSED_W_SIZE (64 * 1024)
-/* decmpfs difinitions. */
+/* decmpfs definitions. */
#define MAX_DECMPFS_XATTR_SIZE 3802
#ifndef DECMPFS_XATTR_NAME
#define DECMPFS_XATTR_NAME "com.apple.decmpfs"
@@ -632,9 +644,9 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
/*
* NOTE: UF_COMPRESSED is ignored even if the filesystem
* supports HFS+ Compression because the file should
- * have at least an extended attriute "com.apple.decmpfs"
+ * have at least an extended attribute "com.apple.decmpfs"
* before the flag is set to indicate that the file have
- * been compressed. If hte filesystem does not support
+ * been compressed. If the filesystem does not support
* HFS+ Compression the system call will fail.
*/
if (a->fd < 0 || fchflags(a->fd, UF_COMPRESSED) != 0)
@@ -1247,7 +1259,7 @@ hfs_drive_compressor(struct archive_write_disk *a, const char *buff,
ret = hfs_write_compressed_data(a, bytes_used + rsrc_size);
a->compressed_buffer_remaining = a->compressed_buffer_size;
- /* If the compressed size is not enouph smaller than
+ /* If the compressed size is not enough smaller than
* the uncompressed size. cancel HFS+ compression.
* TODO: study a behavior of ditto utility and improve
* the condition to fall back into no HFS+ compression. */
@@ -1352,7 +1364,7 @@ hfs_write_decmpfs_block(struct archive_write_disk *a, const char *buff,
(uint32_t *)(a->resource_fork + RSRC_H_SIZE);
/* Set the block count to the resource fork. */
archive_le32enc(a->decmpfs_block_info++, block_count);
- /* Get the position where we are goint to set compressed
+ /* Get the position where we are going to set compressed
* data. */
a->compressed_rsrc_position =
RSRC_H_SIZE + 4 + (block_count * 8);
@@ -1425,7 +1437,7 @@ hfs_write_data_block(struct archive_write_disk *a, const char *buff,
bytes_to_write = size;
/* Seek if necessary to the specified offset. */
if (a->offset < a->fd_offset) {
- /* Can't support backword move. */
+ /* Can't support backward move. */
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Seek failed");
return (ARCHIVE_FATAL);
@@ -1690,10 +1702,25 @@ _archive_write_disk_finish_entry(struct archive *_a)
* ACLs that prevent attribute changes (including time).
*/
if (a->todo & TODO_ACLS) {
- int r2 = archive_write_disk_set_acls(&a->archive, a->fd,
- archive_entry_pathname(a->entry),
- archive_entry_acl(a->entry));
+ int r2;
+#ifdef HAVE_DARWIN_ACL
+ /*
+ * On Mac OS, platform ACLs are stored also in mac_metadata by
+ * the operating system. If mac_metadata is present it takes
+ * precedence and we skip extracting libarchive NFSv4 ACLs
+ */
+ const void *metadata;
+ size_t metadata_size;
+ metadata = archive_entry_mac_metadata(a->entry, &metadata_size);
+ if (metadata == NULL || metadata_size == 0) {
+#endif
+ r2 = archive_write_disk_set_acls(&a->archive, a->fd,
+ archive_entry_pathname(a->entry),
+ archive_entry_acl(a->entry));
if (r2 < ret) ret = r2;
+#ifdef HAVE_DARWIN_ACL
+ }
+#endif
}
finish_metadata:
@@ -2065,6 +2092,7 @@ create_filesystem_object(struct archive_write_disk *a)
archive_set_error(&a->archive, error_number, "%s",
error_string.s);
free(linkname_copy);
+ archive_string_free(&error_string);
/*
* EPERM is more appropriate than error_number for our
* callers
@@ -2077,6 +2105,7 @@ create_filesystem_object(struct archive_write_disk *a)
archive_set_error(&a->archive, error_number, "%s",
error_string.s);
free(linkname_copy);
+ archive_string_free(&error_string);
/*
* EPERM is more appropriate than error_number for our
* callers
@@ -2084,6 +2113,7 @@ create_filesystem_object(struct archive_write_disk *a)
return (EPERM);
}
free(linkname_copy);
+ archive_string_free(&error_string);
r = link(linkname, a->name) ? errno : 0;
/*
* New cpio and pax formats allow hardlink entries
@@ -2252,8 +2282,12 @@ _archive_write_disk_close(struct archive *_a)
if (p->fixup & TODO_MODE_BASE)
chmod(p->name, p->mode);
if (p->fixup & TODO_ACLS)
- archive_write_disk_set_acls(&a->archive,
- -1, p->name, &p->acl);
+#ifdef HAVE_DARWIN_ACL
+ if (p->mac_metadata == NULL ||
+ p->mac_metadata_size == 0)
+#endif
+ archive_write_disk_set_acls(&a->archive,
+ -1, p->name, &p->acl);
if (p->fixup & TODO_FFLAGS)
set_fflags_platform(a, -1, p->name,
p->mode, p->fflags_set, 0);
@@ -4125,10 +4159,10 @@ older(struct stat *st, struct archive_entry *entry)
{
/* First, test the seconds and return if we have a definite answer. */
/* Definitely older. */
- if (st->st_mtime < archive_entry_mtime(entry))
+ if (to_int64_time(st->st_mtime) < to_int64_time(archive_entry_mtime(entry)))
return (1);
/* Definitely younger. */
- if (st->st_mtime > archive_entry_mtime(entry))
+ if (to_int64_time(st->st_mtime) > to_int64_time(archive_entry_mtime(entry)))
return (0);
/* If this platform supports fractional seconds, try those. */
#if HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC
diff --git a/contrib/libarchive/libarchive/archive_write_open.3 b/contrib/libarchive/libarchive/archive_write_open.3
index a52959b..457873e 100644
--- a/contrib/libarchive/libarchive/archive_write_open.3
+++ b/contrib/libarchive/libarchive/archive_write_open.3
@@ -66,6 +66,7 @@ Freeze the settings, open the archive, and prepare for writing entries.
This is the most generic form of this function, which accepts
pointers to three callback functions which will be invoked by
the compression layer to write the constructed archive.
+This does not alter the default archive padding.
.It Fn archive_write_open_fd
A convenience form of
.Fn archive_write_open
@@ -123,12 +124,21 @@ is currently in use.
You should be careful to ensure that this variable
remains allocated until after the archive is
closed.
+This function will disable padding unless you
+have specifically set the block size.
.El
More information about the
.Va struct archive
object and the overall design of the library can be found in the
.Xr libarchive 3
overview.
+.Pp
+Note that the convenience forms above vary in how
+they block the output.
+See
+.Xr archive_write_blocksize 3
+if you need to control the block size used for writes
+or the end-of-file padding behavior.
.\"
.Sh CLIENT CALLBACKS
To use this library, you will need to define and register
@@ -226,6 +236,7 @@ functions.
.Xr tar 1 ,
.Xr libarchive 3 ,
.Xr archive_write 3 ,
+.Xr archive_write_blocksize 3 ,
.Xr archive_write_filter 3 ,
.Xr archive_write_format 3 ,
.Xr archive_write_new 3 ,
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_7zip.c b/contrib/libarchive/libarchive/archive_write_set_format_7zip.c
index abd521a..41ed74d 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_7zip.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_7zip.c
@@ -1358,7 +1358,7 @@ make_header(struct archive_write *a, uint64_t offset, uint64_t pack_size,
if (r < 0)
return (r);
- /* Write Nume size. */
+ /* Write Name size. */
r = enc_uint64(a, zip->total_bytes_entry_name+1);
if (r < 0)
return (r);
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c b/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c
index a9c4123..2d858c9 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c
@@ -478,15 +478,15 @@ archive_write_gnutar_header(struct archive_write *a,
archive_entry_set_pathname(temp, "././@LongLink");
archive_entry_set_size(temp, length);
ret = archive_format_gnutar_header(a, buff, temp, 'K');
+ archive_entry_free(temp);
if (ret < ARCHIVE_WARN)
goto exit_write_header;
ret = __archive_write_output(a, buff, 512);
- if(ret < ARCHIVE_WARN)
+ if (ret < ARCHIVE_WARN)
goto exit_write_header;
- archive_entry_free(temp);
/* Write name and trailing null byte. */
ret = __archive_write_output(a, gnutar->linkname, length);
- if(ret < ARCHIVE_WARN)
+ if (ret < ARCHIVE_WARN)
goto exit_write_header;
/* Pad to 512 bytes */
ret = __archive_write_nulls(a, 0x1ff & (-(ssize_t)length));
@@ -508,12 +508,12 @@ archive_write_gnutar_header(struct archive_write *a,
archive_entry_set_pathname(temp, "././@LongLink");
archive_entry_set_size(temp, length);
ret = archive_format_gnutar_header(a, buff, temp, 'L');
+ archive_entry_free(temp);
if (ret < ARCHIVE_WARN)
goto exit_write_header;
ret = __archive_write_output(a, buff, 512);
if(ret < ARCHIVE_WARN)
goto exit_write_header;
- archive_entry_free(temp);
/* Write pathname + trailing null byte. */
ret = __archive_write_output(a, pathname, length);
if(ret < ARCHIVE_WARN)
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c b/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
index bf69c3e..4e91097 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c
@@ -161,7 +161,7 @@ struct isofile {
/* Used for managing struct isofile list. */
struct isofile *allnext;
struct isofile *datanext;
- /* Used for managing a hardlined struct isofile list. */
+ /* Used for managing a hardlinked struct isofile list. */
struct isofile *hlnext;
struct isofile *hardlink_target;
@@ -528,7 +528,7 @@ struct iso_option {
* - allow more then 8 depths of directory trees;
* - disable a version number to a File Name;
* - disable a forced period to the tail of a File Name;
- * - the maxinum length of files and directories is raised to 193.
+ * - the maximum length of files and directories is raised to 193.
* if rockridge option is disabled, raised to 207.
*/
unsigned int iso_level:3;
@@ -626,7 +626,7 @@ struct iso_option {
* : NOTE Our rockridge=useful option does not set a zero
* : to uid and gid, you should use application
* : option such as --gid,--gname,--uid and --uname
- * : badtar options instead.
+ * : bsdtar options instead.
* Type : boolean/string
* Default: Enabled as rockridge=useful
* COMPAT : mkisofs -r / -R
@@ -660,7 +660,7 @@ struct iso_option {
* : for making zisofs.
* : When the file size is less than one Logical Block
* : size, that file will not zisofs'ed since it does
- * : reduece an ISO-image size.
+ * : reduce an ISO-image size.
* :
* : When you specify option 'boot=<boot-image>', that
* : 'boot-image' file won't be converted to zisofs file.
@@ -703,7 +703,7 @@ struct iso9660 {
} all_file_list;
/* A list of struct isofile entries which have its
- * contents and are not a directory, a hardlined file
+ * contents and are not a directory, a hardlinked file
* and a symlink file. */
struct {
struct isofile *first;
@@ -1907,9 +1907,9 @@ iso9660_close(struct archive_write *a)
iso9660->primary.rootent);
if (ret < 0)
return (ret);
- /* Make sure we have UTF-16BE convertors.
- * if there is no file entry, convertors are still
- * uninitilized. */
+ /* Make sure we have UTF-16BE converters.
+ * if there is no file entry, converters are still
+ * uninitialized. */
if (iso9660->sconv_to_utf16be == NULL) {
iso9660->sconv_to_utf16be =
archive_string_conversion_to_charset(
@@ -2524,7 +2524,8 @@ get_tmfromtime(struct tm *tm, time_t *t)
tzset();
localtime_r(t, tm);
#elif HAVE__LOCALTIME64_S
- _localtime64_s(tm, t);
+ __time64_t tmp_t = (__time64_t) *t; //time_t may be shorter than 64 bits
+ _localtime64_s(tm, &tmp_t);
#else
memcpy(tm, localtime(t), sizeof(*tm));
#endif
@@ -2553,7 +2554,7 @@ set_date_time(unsigned char *p, time_t t)
static void
set_date_time_null(unsigned char *p)
{
- memset(p, '0', 16);
+ memset(p, (int)'0', 16);
p[16] = 0;
}
@@ -2959,7 +2960,7 @@ set_directory_record_rr(unsigned char *bp, int dr_len,
gid = archive_entry_gid(file->entry);
if (iso9660->opt.rr == OPT_RR_USEFUL) {
/*
- * This action is simular mkisofs -r option
+ * This action is similar to mkisofs -r option
* but our rockridge=useful option does not
* set a zero to uid and gid.
*/
@@ -3108,7 +3109,7 @@ set_directory_record_rr(unsigned char *bp, int dr_len,
/*
* flg len
* +----+----+
- * | 02 | 00 | CURREENT component.
+ * | 02 | 00 | CURRENT component.
* +----+----+ (".")
*/
if (nc != NULL) {
@@ -3947,7 +3948,7 @@ write_VD(struct archive_write *a, struct vdd *vdd)
"Abstract File", 0, D_CHAR);
if (r != ARCHIVE_OK)
return (r);
- /* Bibliongraphic File Identifier */
+ /* Bibliographic File Identifier */
r = set_file_identifier(bp, 777, 813, vdc, a, vdd,
&(iso9660->bibliographic_file_identifier),
"Bibliongraphic File", 0, D_CHAR);
@@ -4073,7 +4074,8 @@ write_information_block(struct archive_write *a)
memset(info.s, 0, info_size);
opt = 0;
#if defined(HAVE__CTIME64_S)
- _ctime64_s(buf, sizeof(buf), &(iso9660->birth_time));
+ __time64_t iso9660_birth_time_tmp = (__time64_t) iso9660->birth_time; //time_t may be shorter than 64 bits
+ _ctime64_s(buf, sizeof(buf), &(iso9660_birth_time_tmp));
#elif defined(HAVE_CTIME_R)
ctime_r(&(iso9660->birth_time), buf);
#else
@@ -6135,7 +6137,7 @@ isoent_gen_iso9660_identifier(struct archive_write *a, struct isoent *isoent,
off = ffmax - extlen;
if (off == 0) {
/* A dot('.') character
- * does't place to the first
+ * doesn't place to the first
* byte of identifier. */
off ++;
extlen --;
@@ -7149,7 +7151,7 @@ isoent_create_boot_catalog(struct archive_write *a, struct isoent *rootent)
iso9660->el_torito.catalog = isoent;
/*
- * Get a boot medai type.
+ * Get a boot media type.
*/
switch (iso9660->opt.boot_type) {
default:
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_pax.c b/contrib/libarchive/libarchive/archive_write_set_format_pax.c
index 786eec4..da4fe97 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_pax.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_pax.c
@@ -1,6 +1,7 @@
/*-
* Copyright (c) 2003-2007 Tim Kientzle
* Copyright (c) 2010-2012 Michihiro NAKAJIMA
+ * Copyright (c) 2016 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -61,15 +62,24 @@ struct pax {
struct sparse_block *sparse_tail;
struct archive_string_conv *sconv_utf8;
int opt_binary;
+
+ unsigned flags;
+#define WRITE_SCHILY_XATTR (1 << 0)
+#define WRITE_LIBARCHIVE_XATTR (1 << 1)
};
static void add_pax_attr(struct archive_string *, const char *key,
const char *value);
+static void add_pax_attr_binary(struct archive_string *,
+ const char *key,
+ const char *value, size_t value_len);
static void add_pax_attr_int(struct archive_string *,
const char *key, int64_t value);
static void add_pax_attr_time(struct archive_string *,
const char *key, int64_t sec,
unsigned long nanos);
+static int add_pax_acl(struct archive_write *,
+ struct archive_entry *, struct pax *, int);
static ssize_t archive_write_pax_data(struct archive_write *,
const void *, size_t);
static int archive_write_pax_close(struct archive_write *);
@@ -133,6 +143,8 @@ archive_write_set_format_pax(struct archive *_a)
"Can't allocate pax data");
return (ARCHIVE_FATAL);
}
+ pax->flags = WRITE_LIBARCHIVE_XATTR | WRITE_SCHILY_XATTR;
+
a->format_data = pax;
a->format_name = "pax";
a->format_options = archive_write_pax_options;
@@ -272,6 +284,17 @@ add_pax_attr_int(struct archive_string *as, const char *key, int64_t value)
static void
add_pax_attr(struct archive_string *as, const char *key, const char *value)
{
+ add_pax_attr_binary(as, key, value, strlen(value));
+}
+
+/*
+ * Add a key/value attribute to the pax header. This function handles
+ * binary values.
+ */
+static void
+add_pax_attr_binary(struct archive_string *as, const char *key,
+ const char *value, size_t value_len)
+{
int digits, i, len, next_ten;
char tmp[1 + 3 * sizeof(int)]; /* < 3 base-10 digits per byte */
@@ -279,7 +302,7 @@ add_pax_attr(struct archive_string *as, const char *key, const char *value)
* PAX attributes have the following layout:
* <len> <space> <key> <=> <value> <nl>
*/
- len = 1 + (int)strlen(key) + 1 + (int)strlen(value) + 1;
+ len = 1 + (int)strlen(key) + 1 + (int)value_len + 1;
/*
* The <len> field includes the length of the <len> field, so
@@ -310,21 +333,47 @@ add_pax_attr(struct archive_string *as, const char *key, const char *value)
archive_strappend_char(as, ' ');
archive_strcat(as, key);
archive_strappend_char(as, '=');
- archive_strcat(as, value);
+ archive_array_append(as, value, value_len);
archive_strappend_char(as, '\n');
}
+static void
+archive_write_pax_header_xattr(struct pax *pax, const char *encoded_name,
+ const void *value, size_t value_len)
+{
+ struct archive_string s;
+ char *encoded_value;
+
+ if (pax->flags & WRITE_LIBARCHIVE_XATTR) {
+ encoded_value = base64_encode((const char *)value, value_len);
+
+ if (encoded_name != NULL && encoded_value != NULL) {
+ archive_string_init(&s);
+ archive_strcpy(&s, "LIBARCHIVE.xattr.");
+ archive_strcat(&s, encoded_name);
+ add_pax_attr(&(pax->pax_header), s.s, encoded_value);
+ archive_string_free(&s);
+ }
+ free(encoded_value);
+ }
+ if (pax->flags & WRITE_SCHILY_XATTR) {
+ archive_string_init(&s);
+ archive_strcpy(&s, "SCHILY.xattr.");
+ archive_strcat(&s, encoded_name);
+ add_pax_attr_binary(&(pax->pax_header), s.s, value, value_len);
+ archive_string_free(&s);
+ }
+}
+
static int
archive_write_pax_header_xattrs(struct archive_write *a,
struct pax *pax, struct archive_entry *entry)
{
- struct archive_string s;
int i = archive_entry_xattr_reset(entry);
while (i--) {
const char *name;
const void *value;
- char *encoded_value;
char *url_encoded_name = NULL, *encoded_name = NULL;
size_t size;
int r;
@@ -345,16 +394,9 @@ archive_write_pax_header_xattrs(struct archive_write *a,
}
}
- encoded_value = base64_encode((const char *)value, size);
+ archive_write_pax_header_xattr(pax, encoded_name,
+ value, size);
- if (encoded_name != NULL && encoded_value != NULL) {
- archive_string_init(&s);
- archive_strcpy(&s, "LIBARCHIVE.xattr.");
- archive_strcat(&s, encoded_name);
- add_pax_attr(&(pax->pax_header), s.s, encoded_value);
- archive_string_free(&s);
- }
- free(encoded_value);
}
return (ARCHIVE_OK);
}
@@ -449,6 +491,45 @@ get_entry_symlink(struct archive_write *a, struct archive_entry *entry,
return (ARCHIVE_OK);
}
+/* Add ACL to pax header */
+static int
+add_pax_acl(struct archive_write *a,
+ struct archive_entry *entry, struct pax *pax, int flags)
+{
+ char *p;
+ const char *attr;
+ int acl_types;
+
+ acl_types = archive_entry_acl_types(entry);
+
+ if ((acl_types & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0)
+ attr = "SCHILY.acl.ace";
+ else if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0)
+ attr = "SCHILY.acl.access";
+ else if ((flags & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) != 0)
+ attr = "SCHILY.acl.default";
+ else
+ return (ARCHIVE_FATAL);
+
+ p = archive_entry_acl_to_text_l(entry, NULL, flags, pax->sconv_utf8);
+ if (p == NULL) {
+ if (errno == ENOMEM) {
+ archive_set_error(&a->archive, ENOMEM, "%s %s",
+ "Can't allocate memory for ", attr);
+ return (ARCHIVE_FATAL);
+ }
+ archive_set_error(&a->archive,
+ ARCHIVE_ERRNO_FILE_FORMAT, "%s %s %s",
+ "Can't translate ", attr, " to UTF-8");
+ return(ARCHIVE_WARN);
+ } else if (*p != '\0') {
+ add_pax_attr(&(pax->pax_header),
+ attr, p);
+ free(p);
+ }
+ return(ARCHIVE_OK);
+}
+
/*
* TODO: Consider adding 'comment' and 'charset' fields to
* archive_entry so that clients can specify them. Also, consider
@@ -465,6 +546,7 @@ archive_write_pax_header(struct archive_write *a,
const char *p;
const char *suffix;
int need_extension, r, ret;
+ int acl_types;
int sparse_count;
uint64_t sparse_total, real_size;
struct pax *pax;
@@ -1016,16 +1098,6 @@ archive_write_pax_header(struct archive_write *a,
if (!need_extension && p != NULL && *p != '\0')
need_extension = 1;
- /* If there are non-trivial ACL entries, we need an extension. */
- if (!need_extension && archive_entry_acl_count(entry_original,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS) > 0)
- need_extension = 1;
-
- /* If there are non-trivial ACL entries, we need an extension. */
- if (!need_extension && archive_entry_acl_count(entry_original,
- ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) > 0)
- need_extension = 1;
-
/* If there are extended attributes, we need an extension */
if (!need_extension && archive_entry_xattr_count(entry_original) > 0)
need_extension = 1;
@@ -1034,6 +1106,12 @@ archive_write_pax_header(struct archive_write *a,
if (!need_extension && sparse_count > 0)
need_extension = 1;
+ acl_types = archive_entry_acl_types(entry_original);
+
+ /* If there are any ACL entries, we need an extension */
+ if (!need_extension && acl_types != 0)
+ need_extension = 1;
+
/*
* Libarchive used to include these in extended headers for
* restricted pax format, but that confused people who
@@ -1085,43 +1163,29 @@ archive_write_pax_header(struct archive_write *a,
add_pax_attr(&(pax->pax_header), "SCHILY.fflags", p);
/* I use star-compatible ACL attributes. */
- r = archive_entry_acl_text_l(entry_original,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
- ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID,
- &p, NULL, pax->sconv_utf8);
- if (r != 0) {
- if (errno == ENOMEM) {
- archive_set_error(&a->archive, ENOMEM,
- "Can't allocate memory for "
- "ACL.access");
+ if ((acl_types & ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0) {
+ ret = add_pax_acl(a, entry_original, pax,
+ ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID |
+ ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA |
+ ARCHIVE_ENTRY_ACL_STYLE_COMPACT);
+ if (ret == ARCHIVE_FATAL)
return (ARCHIVE_FATAL);
- }
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Can't translate ACL.access to UTF-8");
- ret = ARCHIVE_WARN;
- } else if (p != NULL && *p != '\0') {
- add_pax_attr(&(pax->pax_header),
- "SCHILY.acl.access", p);
}
- r = archive_entry_acl_text_l(entry_original,
- ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
- ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID,
- &p, NULL, pax->sconv_utf8);
- if (r != 0) {
- if (errno == ENOMEM) {
- archive_set_error(&a->archive, ENOMEM,
- "Can't allocate memory for "
- "ACL.default");
+ if (acl_types & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) {
+ ret = add_pax_acl(a, entry_original, pax,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
+ ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID |
+ ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA);
+ if (ret == ARCHIVE_FATAL)
+ return (ARCHIVE_FATAL);
+ }
+ if (acl_types & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) {
+ ret = add_pax_acl(a, entry_original, pax,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
+ ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID |
+ ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA);
+ if (ret == ARCHIVE_FATAL)
return (ARCHIVE_FATAL);
- }
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
- "Can't translate ACL.default to UTF-8");
- ret = ARCHIVE_WARN;
- } else if (p != NULL && *p != '\0') {
- add_pax_attr(&(pax->pax_header),
- "SCHILY.acl.default", p);
}
/* We use GNU-tar-compatible sparse attributes. */
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_warc.c b/contrib/libarchive/libarchive/archive_write_set_format_warc.c
index ea66929..8b6daf9 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_warc.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_warc.c
@@ -79,7 +79,7 @@ typedef enum {
WT_RVIS,
/* conversion, unsupported */
WT_CONV,
- /* continutation, unsupported at the moment */
+ /* continuation, unsupported at the moment */
WT_CONT,
/* invalid type */
LAST_WT
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_xar.c b/contrib/libarchive/libarchive/archive_write_set_format_xar.c
index da6daac..495f0d4 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_xar.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_xar.c
@@ -63,7 +63,7 @@ __FBSDID("$FreeBSD$");
* - When writing an XML element <link type="<file-type>">, <file-type>
* which is a file type a symbolic link is referencing is always marked
* as "broken". Xar utility uses stat(2) to get the file type, but, in
- * libarcive format writer, we should not use it; if it is needed, we
+ * libarchive format writer, we should not use it; if it is needed, we
* should get about it at archive_read_disk.c.
* - It is possible to appear both <flags> and <ext2> elements.
* Xar utility generates <flags> on BSD platform and <ext2> on Linux
@@ -1227,7 +1227,7 @@ make_file_entry(struct archive_write *a, xmlTextWriterPtr writer,
case AE_IFLNK:
/*
* xar utility has checked a file type, which
- * a symblic-link file has referenced.
+ * a symbolic-link file has referenced.
* For example:
* <link type="directory">../ref/</link>
* The symlink target file is "../ref/" and its
@@ -1237,8 +1237,8 @@ make_file_entry(struct archive_write *a, xmlTextWriterPtr writer,
* The symlink target file is "../f" and its
* file type is a regular file.
*
- * But our implemention cannot do it, and then we
- * always record that a attribute "type" is "borken",
+ * But our implementation cannot do it, and then we
+ * always record that a attribute "type" is "broken",
* for example:
* <link type="broken">foo/bar</link>
* It means "foo/bar" is not reachable.
@@ -1544,7 +1544,7 @@ make_toc(struct archive_write *a)
}
/*
- * Start recoding TOC
+ * Start recording TOC
*/
r = xmlTextWriterStartElement(writer, BAD_CAST("xar"));
if (r < 0) {
@@ -1961,6 +1961,7 @@ file_free(struct file *file)
archive_string_free(&(file->basename));
archive_string_free(&(file->symlink));
archive_string_free(&(file->script));
+ archive_entry_free(file->entry);
free(file);
}
@@ -2484,7 +2485,7 @@ file_connect_hardlink_files(struct xar *xar)
archive_entry_set_nlink(target->entry, hl->nlink);
if (hl->nlink > 1)
/* It means this file is a hardlink
- * targe itself. */
+ * target itself. */
target->hardlink_target = target;
for (nf = target->hlnext;
nf != NULL; nf = nf->hlnext) {
@@ -2913,7 +2914,7 @@ compression_init_encoder_xz(struct archive *a,
*strm = lzma_init_data;
#ifdef HAVE_LZMA_STREAM_ENCODER_MT
if (threads > 1) {
- bzero(&mt_options, sizeof(mt_options));
+ memset(&mt_options, 0, sizeof(mt_options));
mt_options.threads = threads;
mt_options.timeout = 300;
mt_options.filters = lzmafilters;
diff --git a/contrib/libarchive/libarchive/archive_write_set_format_zip.c b/contrib/libarchive/libarchive/archive_write_set_format_zip.c
index a69ce20..38a9abf 100644
--- a/contrib/libarchive/libarchive/archive_write_set_format_zip.c
+++ b/contrib/libarchive/libarchive/archive_write_set_format_zip.c
@@ -878,7 +878,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
|| zip->entry_encryption == ENCRYPTION_WINZIP_AES256)) {
memcpy(e, "\001\231\007\000\001\000AE", 8);
- /* AES vendoer version AE-2 does not store a CRC.
+ /* AES vendor version AE-2 does not store a CRC.
* WinZip 11 uses AE-1, which does store the CRC,
* but it does not store the CRC when the file size
* is less than 20 bytes. So we simulate what
@@ -1013,7 +1013,7 @@ archive_write_zip_data(struct archive_write *a, const void *buff, size_t s)
if (zip->entry_flags & ZIP_ENTRY_FLAG_ENCRYPTED) {
switch (zip->entry_encryption) {
case ENCRYPTION_TRADITIONAL:
- /* Initialize traditoinal PKWARE encryption context. */
+ /* Initialize traditional PKWARE encryption context. */
if (!zip->tctx_valid) {
ret = init_traditional_pkware_encryption(a);
if (ret != ARCHIVE_OK)
@@ -1499,7 +1499,7 @@ trad_enc_update_keys(struct trad_enc_ctx *ctx, uint8_t c)
}
static uint8_t
-trad_enc_decypt_byte(struct trad_enc_ctx *ctx)
+trad_enc_decrypt_byte(struct trad_enc_ctx *ctx)
{
unsigned temp = ctx->keys[2] | 2;
return (uint8_t)((temp * (temp ^ 1)) >> 8) & 0xff;
@@ -1515,7 +1515,7 @@ trad_enc_encrypt_update(struct trad_enc_ctx *ctx, const uint8_t *in,
for (i = 0; i < max; i++) {
uint8_t t = in[i];
- out[i] = t ^ trad_enc_decypt_byte(ctx);
+ out[i] = t ^ trad_enc_decrypt_byte(ctx);
trad_enc_update_keys(ctx, t);
}
return i;
@@ -1626,7 +1626,7 @@ init_winzip_aes_encryption(struct archive_write *a)
return (ARCHIVE_FAILED);
}
- /* Set a passowrd verification value after the 'salt'. */
+ /* Set a password verification value after the 'salt'. */
salt[salt_len] = derived_key[key_len * 2];
salt[salt_len + 1] = derived_key[key_len * 2 + 1];
diff --git a/contrib/libarchive/libarchive/libarchive-formats.5 b/contrib/libarchive/libarchive/libarchive-formats.5
index 9cec760..62359dd 100644
--- a/contrib/libarchive/libarchive/libarchive-formats.5
+++ b/contrib/libarchive/libarchive/libarchive-formats.5
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 18, 2012
+.Dd December 27, 2016
.Dt LIBARCHIVE-FORMATS 5
.Os
.Sh NAME
@@ -191,8 +191,6 @@ and device numbers.
.It Solaris extensions
Libarchive recognizes ACL and extended attribute records written
by Solaris tar.
-Currently, libarchive only has support for old-style ACLs; the
-newer NFSv4 ACLs are recognized but discarded.
.El
.Pp
The first tar program appeared in Seventh Edition Unix in 1979.
diff --git a/contrib/libarchive/libarchive/tar.5 b/contrib/libarchive/libarchive/tar.5
index 6e6f0c0..30b837dc 100644
--- a/contrib/libarchive/libarchive/tar.5
+++ b/contrib/libarchive/libarchive/tar.5
@@ -1,4 +1,5 @@
.\" Copyright (c) 2003-2009 Tim Kientzle
+.\" Copyright (c) 2016 Martin Matuska
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -24,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 23, 2011
+.Dd December 27, 2016
.Dt TAR 5
.Os
.Sh NAME
@@ -440,11 +441,11 @@ archives to store files much larger than the historic 8GB limit.
Vendor-specific attributes used by Joerg Schilling's
.Nm star
implementation.
-.It Cm SCHILY.acl.access , Cm SCHILY.acl.default
-Stores the access and default ACLs as textual strings in a format
+.It Cm SCHILY.acl.access , Cm SCHILY.acl.default, Cm SCHILY.acl.ace
+Stores the access, default and NFSv4 ACLs as textual strings in a format
that is an extension of the format specified by POSIX.1e draft 17.
-In particular, each user or group access specification can include a fourth
-colon-separated field with the numeric UID or GID.
+In particular, each user or group access specification can include
+an additional colon-separated field with the numeric UID or GID.
This allows ACLs to be restored on systems that may not have complete
user or group information available (such as when NIS/YP or LDAP services
are temporarily unavailable).
diff --git a/contrib/libarchive/libarchive/test/main.c b/contrib/libarchive/libarchive/test/main.c
index 4f3cdac..d75f1ab 100644
--- a/contrib/libarchive/libarchive/test/main.c
+++ b/contrib/libarchive/libarchive/test/main.c
@@ -216,6 +216,12 @@ invalid_parameter_handler(const wchar_t * expression,
unsigned int line, uintptr_t pReserved)
{
/* nop */
+ // Silence unused-parameter compiler warnings.
+ (void)expression;
+ (void)function;
+ (void)file;
+ (void)line;
+ (void)pReserved;
}
#endif
@@ -1412,6 +1418,8 @@ assertion_file_mode(const char *file, int line, const char *pathname, int expect
failure_start(file, line, "assertFileMode not yet implemented for Windows");
(void)mode; /* UNUSED */
(void)r; /* UNUSED */
+ (void)pathname; /* UNUSED */
+ (void)expected_mode; /* UNUSED */
#else
{
struct stat st;
@@ -2421,6 +2429,132 @@ extract_reference_files(const char **names)
extract_reference_file(*names++);
}
+/* Set ACLs */
+void
+archive_test_set_acls(struct archive_entry *ae,
+ struct archive_test_acl_t *acls, int n)
+{
+ int i;
+
+ archive_entry_acl_clear(ae);
+ for (i = 0; i < n; i++) {
+ failure("type=%#010x, permset=%#010x, tag=%d, qual=%d name=%s",
+ acls[i].type, acls[i].permset, acls[i].tag,
+ acls[i].qual, acls[i].name);
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_add_entry(ae,
+ acls[i].type, acls[i].permset, acls[i].tag,
+ acls[i].qual, acls[i].name));
+ }
+}
+
+static int
+archive_test_acl_match(struct archive_test_acl_t *acl, int type, int permset,
+ int tag, int qual, const char *name)
+{
+ if (type != acl->type)
+ return (0);
+ if (permset != acl->permset)
+ return (0);
+ if (tag != acl->tag)
+ return (0);
+ if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ)
+ return (1);
+ if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ)
+ return (1);
+ if (tag == ARCHIVE_ENTRY_ACL_EVERYONE)
+ return (1);
+ if (tag == ARCHIVE_ENTRY_ACL_OTHER)
+ return (1);
+ if (qual != acl->qual)
+ return (0);
+ if (name == NULL) {
+ if (acl->name == NULL || acl->name[0] == '\0')
+ return (1);
+ return (0);
+ }
+ if (acl->name == NULL) {
+ if (name[0] == '\0')
+ return (1);
+ return (0);
+ }
+ return (0 == strcmp(name, acl->name));
+}
+
+/* Compare ACLs */
+void
+archive_test_compare_acls(struct archive_entry *ae,
+ struct archive_test_acl_t *acls, int cnt, int want_type, int mode)
+{
+ int *marker;
+ int i, r, n;
+ int type, permset, tag, qual;
+ int matched;
+ const char *name;
+
+ n = 0;
+ marker = malloc(sizeof(marker[0]) * cnt);
+
+ for (i = 0; i < cnt; i++) {
+ if ((acls[i].type & want_type) != 0) {
+ marker[n] = i;
+ n++;
+ }
+ }
+
+ failure("No ACL's to compare, type mask: %d", want_type);
+ assert(n > 0);
+ if (n == 0)
+ return;
+
+ while (0 == (r = archive_entry_acl_next(ae, want_type,
+ &type, &permset, &tag, &qual, &name))) {
+ for (i = 0, matched = 0; i < n && !matched; i++) {
+ if (archive_test_acl_match(&acls[marker[i]], type,
+ permset, tag, qual, name)) {
+ /* We found a match; remove it. */
+ marker[i] = marker[n - 1];
+ n--;
+ matched = 1;
+ }
+ }
+ if (type == ARCHIVE_ENTRY_ACL_TYPE_ACCESS
+ && tag == ARCHIVE_ENTRY_ACL_USER_OBJ) {
+ if (!matched) printf("No match for user_obj perm\n");
+ failure("USER_OBJ permset (%02o) != user mode (%02o)",
+ permset, 07 & (mode >> 6));
+ assert((permset << 6) == (mode & 0700));
+ } else if (type == ARCHIVE_ENTRY_ACL_TYPE_ACCESS
+ && tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ) {
+ if (!matched) printf("No match for group_obj perm\n");
+ failure("GROUP_OBJ permset %02o != group mode %02o",
+ permset, 07 & (mode >> 3));
+ assert((permset << 3) == (mode & 0070));
+ } else if (type == ARCHIVE_ENTRY_ACL_TYPE_ACCESS
+ && tag == ARCHIVE_ENTRY_ACL_OTHER) {
+ if (!matched) printf("No match for other perm\n");
+ failure("OTHER permset (%02o) != other mode (%02o)",
+ permset, mode & 07);
+ assert((permset << 0) == (mode & 0007));
+ } else {
+ failure("Could not find match for ACL "
+ "(type=%#010x,permset=%#010x,tag=%d,qual=%d,"
+ "name=``%s'')", type, permset, tag, qual, name);
+ assert(matched == 1);
+ }
+ }
+ assertEqualInt(ARCHIVE_EOF, r);
+ if ((want_type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) != 0)
+ assert((mode_t)(mode & 0777) == (archive_entry_mode(ae)
+ & 0777));
+ failure("Could not find match for ACL "
+ "(type=%#010x,permset=%#010x,tag=%d,qual=%d,name=``%s'')",
+ acls[marker[0]].type, acls[marker[0]].permset,
+ acls[marker[0]].tag, acls[marker[0]].qual, acls[marker[0]].name);
+ assert(n == 0); /* Number of ACLs not matched should == 0 */
+ free(marker);
+}
+
/*
*
* TEST management
diff --git a/contrib/libarchive/libarchive/test/test.h b/contrib/libarchive/libarchive/test/test.h
index f7ec59f..dc3f590 100644
--- a/contrib/libarchive/libarchive/test/test.h
+++ b/contrib/libarchive/libarchive/test/test.h
@@ -121,6 +121,32 @@
#endif
/*
+ * If this platform has <sys/acl.h>, acl_create(), acl_init(),
+ * acl_set_file(), and ACL_USER, we assume it has the rest of the
+ * POSIX.1e draft functions used in archive_read_extract.c.
+ */
+#if HAVE_SYS_ACL_H && HAVE_ACL_CREATE_ENTRY && HAVE_ACL_INIT && HAVE_ACL_SET_FILE
+#if HAVE_ACL_USER
+#define HAVE_POSIX_ACL 1
+#elif HAVE_ACL_TYPE_EXTENDED
+#define HAVE_DARWIN_ACL 1
+#endif
+#endif
+
+/*
+ * If this platform has <sys/acl.h>, acl_get(), facl_get(), acl_set(),
+ * facl_set() and types aclent_t and ace_t it uses Solaris-style ACL functions
+ */
+#if HAVE_SYS_ACL_H && HAVE_ACL_GET && HAVE_FACL_GET && HAVE_ACL_SET && HAVE_FACL_SET && HAVE_ACLENT_T && HAVE_ACE_T
+#define HAVE_SUN_ACL 1
+#endif
+
+/* Define if platform supports NFSv4 ACLs */
+#if (HAVE_POSIX_ACL && HAVE_ACL_TYPE_NFS4) || HAVE_SUN_ACL || HAVE_DARWIN_ACL
+#define HAVE_NFS4_ACL 1
+#endif
+
+/*
* Redefine DEFINE_TEST for use in defining the test functions.
*/
#undef DEFINE_TEST
@@ -346,6 +372,23 @@ extern const char *testworkdir;
#include "archive.h"
#include "archive_entry.h"
+/* ACL structure */
+struct archive_test_acl_t {
+ int type; /* Type of ACL */
+ int permset; /* Permissions for this class of users. */
+ int tag; /* Owner, User, Owning group, group, other, etc. */
+ int qual; /* GID or UID of user/group, depending on tag. */
+ const char *name; /* Name of user/group, depending on tag. */
+};
+
+/* Set ACLs */
+void archive_test_set_acls(struct archive_entry *, struct archive_test_acl_t *,
+ int);
+
+/* Compare ACLs */
+void archive_test_compare_acls(struct archive_entry *,
+ struct archive_test_acl_t *, int, int, int);
+
/* Special customized read-from-memory interface. */
int read_open_memory(struct archive *, const void *, size_t, size_t);
/* _minimal version exercises a slightly different set of libarchive APIs. */
diff --git a/contrib/libarchive/libarchive/test/test_acl_nfs4.c b/contrib/libarchive/libarchive/test/test_acl_nfs4.c
index c8f5937..f4e66f5 100644
--- a/contrib/libarchive/libarchive/test/test_acl_nfs4.c
+++ b/contrib/libarchive/libarchive/test/test_acl_nfs4.c
@@ -33,15 +33,7 @@ __FBSDID("$FreeBSD$");
* filesystems support ACLs or not.
*/
-struct acl_t {
- int type; /* Type of entry: "allow" or "deny" */
- int permset; /* Permissions for this class of users. */
- int tag; /* Owner, User, Owning group, group, everyone, etc. */
- int qual; /* GID or UID of user/group, depending on tag. */
- const char *name; /* Name of user/group, depending on tag. */
-};
-
-static struct acl_t acls1[] = {
+static struct archive_test_acl_t acls1[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_READ_DATA,
@@ -52,7 +44,7 @@ static struct acl_t acls1[] = {
ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" },
};
-static struct acl_t acls2[] = {
+static struct archive_test_acl_t acls2[] = {
/* An entry for each type. */
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, 0,
ARCHIVE_ENTRY_ACL_USER, 108, "user108" },
@@ -136,7 +128,7 @@ static struct acl_t acls2[] = {
* Entries that should be rejected when we attempt to set them
* on an ACL that already has NFS4 entries.
*/
-static struct acl_t acls_bad[] = {
+static struct archive_test_acl_t acls_bad[] = {
/* POSIX.1e ACL types */
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_USER, 78, "" },
@@ -156,95 +148,6 @@ static struct acl_t acls_bad[] = {
ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" },
};
-static void
-set_acls(struct archive_entry *ae, struct acl_t *acls, int n)
-{
- int i;
-
- archive_entry_acl_clear(ae);
- for (i = 0; i < n; i++) {
- failure("type=%d, permset=%d, tag=%d, qual=%d name=%s",
- acls[i].type, acls[i].permset, acls[i].tag,
- acls[i].qual, acls[i].name);
- assertEqualInt(ARCHIVE_OK,
- archive_entry_acl_add_entry(ae,
- acls[i].type, acls[i].permset, acls[i].tag,
- acls[i].qual, acls[i].name));
- }
-}
-
-static int
-acl_match(struct acl_t *acl, int type, int permset, int tag, int qual,
- const char *name)
-{
- if (acl == NULL)
- return (0);
- if (type != acl->type)
- return (0);
- if (permset != acl->permset)
- return (0);
- if (tag != acl->tag)
- return (0);
- if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ)
- return (1);
- if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ)
- return (1);
- if (tag == ARCHIVE_ENTRY_ACL_EVERYONE)
- return (1);
- if (qual != acl->qual)
- return (0);
- if (name == NULL) {
- if (acl->name == NULL || acl->name[0] == '\0')
- return (1);
- return (0);
- }
- if (acl->name == NULL) {
- if (name[0] == '\0')
- return (1);
- return (0);
- }
- return (0 == strcmp(name, acl->name));
-}
-
-static void
-compare_acls(struct archive_entry *ae, struct acl_t *acls, int n)
-{
- int *marker = malloc(sizeof(marker[0]) * n);
- int i;
- int r;
- int type, permset, tag, qual;
- int matched;
- const char *name;
-
- for (i = 0; i < n; i++)
- marker[i] = i;
-
- while (0 == (r = archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_NFS4,
- &type, &permset, &tag, &qual, &name))) {
- for (i = 0, matched = 0; i < n && !matched; i++) {
- if (acl_match(&acls[marker[i]], type, permset,
- tag, qual, name)) {
- /* We found a match; remove it. */
- marker[i] = marker[n - 1];
- n--;
- matched = 1;
- }
- }
- failure("Could not find match for ACL "
- "(type=%d,permset=%d,tag=%d,qual=%d,name=``%s'')",
- type, permset, tag, qual, name);
- assertEqualInt(1, matched);
- }
- assertEqualInt(ARCHIVE_EOF, r);
- failure("Could not find match for ACL "
- "(type=%d,permset=%d,tag=%d,qual=%d,name=``%s'')",
- acls[marker[0]].type, acls[marker[0]].permset,
- acls[marker[0]].tag, acls[marker[0]].qual, acls[marker[0]].name);
- assertEqualInt(0, n); /* Number of ACLs not matched should == 0 */
- free(marker);
-}
-
DEFINE_TEST(test_acl_nfs4)
{
struct archive_entry *ae;
@@ -256,22 +159,31 @@ DEFINE_TEST(test_acl_nfs4)
archive_entry_set_mode(ae, S_IFREG | 0777);
/* Store and read back some basic ACL entries. */
- set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
+ archive_test_set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
+
+ /* Check that entry contains only NFSv4 types */
+ assert((archive_entry_acl_types(ae) &
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) == 0);
+ assert((archive_entry_acl_types(ae) &
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4) != 0);
+
assertEqualInt(4,
archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_NFS4));
- compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
+ archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
/* A more extensive set of ACLs. */
- set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
+ archive_test_set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
assertEqualInt(32,
archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_NFS4));
- compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
+ archive_test_compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
/*
* Check that clearing ACLs gets rid of them all by repeating
* the first test.
*/
- set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
+ archive_test_set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
failure("Basic ACLs shouldn't be stored as extended ACLs");
assertEqualInt(4,
archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_NFS4));
@@ -280,9 +192,9 @@ DEFINE_TEST(test_acl_nfs4)
* Different types of malformed ACL entries that should
* fail when added to existing NFS4 ACLs.
*/
- set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
+ archive_test_set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
for (i = 0; i < (int)(sizeof(acls_bad)/sizeof(acls_bad[0])); ++i) {
- struct acl_t *p = &acls_bad[i];
+ struct archive_test_acl_t *p = &acls_bad[i];
failure("Malformed ACL test #%d", i);
assertEqualInt(ARCHIVE_FAILED,
archive_entry_acl_add_entry(ae,
diff --git a/contrib/libarchive/libarchive/test/test_acl_pax.c b/contrib/libarchive/libarchive/test/test_acl_pax.c
index 5fcf61b..8dfa0e0 100644
--- a/contrib/libarchive/libarchive/test/test_acl_pax.c
+++ b/contrib/libarchive/libarchive/test/test_acl_pax.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2003-2007 Tim Kientzle
+ * Copyright (c) 2016 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,7 +28,7 @@ __FBSDID("$FreeBSD$");
/*
* Exercise the system-independent portion of the ACL support.
- * Check that pax archive can save and restore ACL data.
+ * Check that pax archive can save and restore POSIX.1e ACL data.
*
* This should work on all systems, regardless of whether local
* filesystems support ACLs or not.
@@ -35,15 +36,7 @@ __FBSDID("$FreeBSD$");
static unsigned char buff[16384];
-struct acl_t {
- int type; /* Type of ACL: "access" or "default" */
- int permset; /* Permissions for this class of users. */
- int tag; /* Owner, User, Owning group, group, other, etc. */
- int qual; /* GID or UID of user/group, depending on tag. */
- const char *name; /* Name of user/group, depending on tag. */
-};
-
-static struct acl_t acls0[] = {
+static struct archive_test_acl_t acls0[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
@@ -52,7 +45,7 @@ static struct acl_t acls0[] = {
ARCHIVE_ENTRY_ACL_OTHER, 0, "" },
};
-static struct acl_t acls1[] = {
+static struct archive_test_acl_t acls1[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
@@ -63,7 +56,7 @@ static struct acl_t acls1[] = {
ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
};
-static struct acl_t acls2[] = {
+static struct archive_test_acl_t acls2[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTRY_ACL_READ,
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
@@ -78,101 +71,149 @@ static struct acl_t acls2[] = {
ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
};
-static void
-set_acls(struct archive_entry *ae, struct acl_t *acls, int n)
-{
- int i;
-
- archive_entry_acl_clear(ae);
- for (i = 0; i < n; i++) {
- archive_entry_acl_add_entry(ae,
- acls[i].type, acls[i].permset, acls[i].tag, acls[i].qual,
- acls[i].name);
- }
-}
+static struct archive_test_acl_t acls3[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
+};
-static int
-acl_match(struct acl_t *acl, int type, int permset, int tag, int qual, const char *name)
-{
- if (type != acl->type)
- return (0);
- if (permset != acl->permset)
- return (0);
- if (tag != acl->tag)
- return (0);
- if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ)
- return (1);
- if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ)
- return (1);
- if (tag == ARCHIVE_ENTRY_ACL_OTHER)
- return (1);
- if (qual != acl->qual)
- return (0);
- if (name == NULL)
- return (acl->name == NULL || acl->name[0] == '\0');
- if (acl->name == NULL)
- return (name == NULL || name[0] == '\0');
- return (0 == strcmp(name, acl->name));
-}
+static struct archive_test_acl_t acls4[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE |
+ ARCHIVE_ENTRY_ACL_ENTRY_INHERITED,
+ ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 78, "user78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY,
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+ ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
+};
-static void
-compare_acls(struct archive_entry *ae, struct acl_t *acls, int n, int mode)
-{
- int *marker = malloc(sizeof(marker[0]) * n);
- int i;
- int r;
- int type, permset, tag, qual;
- int matched;
- const char *name;
-
- for (i = 0; i < n; i++)
- marker[i] = i;
-
- while (0 == (r = archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name))) {
- for (i = 0, matched = 0; i < n && !matched; i++) {
- if (acl_match(&acls[marker[i]], type, permset,
- tag, qual, name)) {
- /* We found a match; remove it. */
- marker[i] = marker[n - 1];
- n--;
- matched = 1;
- }
- }
- if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ) {
- if (!matched) printf("No match for user_obj perm\n");
- failure("USER_OBJ permset (%02o) != user mode (%02o)",
- permset, 07 & (mode >> 6));
- assert((permset << 6) == (mode & 0700));
- } else if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ) {
- if (!matched) printf("No match for group_obj perm\n");
- failure("GROUP_OBJ permset %02o != group mode %02o",
- permset, 07 & (mode >> 3));
- assert((permset << 3) == (mode & 0070));
- } else if (tag == ARCHIVE_ENTRY_ACL_OTHER) {
- if (!matched) printf("No match for other perm\n");
- failure("OTHER permset (%02o) != other mode (%02o)",
- permset, mode & 07);
- assert((permset << 0) == (mode & 0007));
- } else {
- failure("Could not find match for ACL "
- "(type=%d,permset=%d,tag=%d,qual=%d,name=``%s'')",
- type, permset, tag, qual, name);
- assert(matched == 1);
- }
- }
- assertEqualInt(ARCHIVE_EOF, r);
- assert((mode_t)(mode & 0777) == (archive_entry_mode(ae) & 0777));
- failure("Could not find match for ACL "
- "(type=%d,permset=%d,tag=%d,qual=%d,name=``%s'')",
- acls[marker[0]].type, acls[marker[0]].permset,
- acls[marker[0]].tag, acls[marker[0]].qual, acls[marker[0]].name);
- assert(n == 0); /* Number of ACLs not matched should == 0 */
- free(marker);
-}
+static struct archive_test_acl_t acls5[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS,
+ ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALARM,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS,
+ ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
+};
-DEFINE_TEST(test_acl_pax)
+DEFINE_TEST(test_acl_pax_posix1e)
{
struct archive *a;
struct archive_entry *ae;
@@ -197,23 +238,23 @@ DEFINE_TEST(test_acl_pax)
archive_entry_set_mode(ae, S_IFREG | 0777);
/* Basic owner/owning group should just update mode bits. */
- set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
+ archive_test_set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
assertA(0 == archive_write_header(a, ae));
/* With any extended ACL entry, we should read back a full set. */
- set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
+ archive_test_set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
assertA(0 == archive_write_header(a, ae));
/* A more extensive set of ACLs. */
- set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
+ archive_test_set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
assertA(0 == archive_write_header(a, ae));
/*
* Check that clearing ACLs gets rid of them all by repeating
* the first test.
*/
- set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
+ archive_test_set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
assertA(0 == archive_write_header(a, ae));
archive_entry_free(ae);
@@ -227,13 +268,13 @@ DEFINE_TEST(test_acl_pax)
fclose(f);
/* Write out the reference data to a file for manual inspection. */
- extract_reference_file("test_acl_pax.tar");
- reference = slurpfile(&reference_size, "test_acl_pax.tar");
+ extract_reference_file("test_acl_pax_posix1e.tar");
+ reference = slurpfile(&reference_size, "test_acl_pax_posix1e.tar");
/* Assert that the generated data matches the built-in reference data.*/
- failure("Generated pax archive does not match reference; compare 'testout' to 'test_acl_pax.tar' reference file.");
+ failure("Generated pax archive does not match reference; compare 'testout' to 'test_acl_pax_posix1e.tar' reference file.");
assertEqualMem(buff, reference, reference_size);
- failure("Generated pax archive does not match reference; compare 'testout' to 'test_acl_pax.tar' reference file.");
+ failure("Generated pax archive does not match reference; compare 'testout' to 'test_acl_pax_posix1e.tar' reference file.");
assertEqualInt((int)used, reference_size);
free(reference);
@@ -255,15 +296,18 @@ DEFINE_TEST(test_acl_pax)
assertA(0 == archive_read_next_header(a, &ae));
failure("One extended ACL should flag all ACLs to be returned.");
assert(4 == archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
- compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]), 0142);
+ archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0142);
failure("Basic ACLs should set mode to 0142, not %04o",
archive_entry_mode(ae)&0777);
assert((archive_entry_mode(ae) & 0777) == 0142);
/* Third item has pretty extensive ACLs */
assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(6, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
- compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]), 0543);
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
+ archive_test_compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0543);
failure("Basic ACLs should set mode to 0543, not %04o",
archive_entry_mode(ae)&0777);
assert((archive_entry_mode(ae) & 0777) == 0543);
@@ -280,3 +324,93 @@ DEFINE_TEST(test_acl_pax)
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
+
+DEFINE_TEST(test_acl_pax_nfs4)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ size_t used;
+ FILE *f;
+ void *reference;
+ size_t reference_size;
+
+ /* Write an archive to memory. */
+ assert(NULL != (a = archive_write_new()));
+ assertA(0 == archive_write_set_format_pax(a));
+ assertA(0 == archive_write_add_filter_none(a));
+ assertA(0 == archive_write_set_bytes_per_block(a, 1));
+ assertA(0 == archive_write_set_bytes_in_last_block(a, 1));
+ assertA(0 == archive_write_open_memory(a, buff, sizeof(buff), &used));
+
+ /* Write a series of files to the archive with different ACL info. */
+
+ /* Create a simple archive_entry. */
+ assert((ae = archive_entry_new()) != NULL);
+ archive_entry_set_pathname(ae, "file");
+ archive_entry_set_mode(ae, S_IFREG | 0777);
+
+ /* NFS4 ACLs mirroring 0754 file mode */
+ archive_test_set_acls(ae, acls3, sizeof(acls3)/sizeof(acls3[0]));
+ assertA(0 == archive_write_header(a, ae));
+
+ /* A more extensive set of NFS4 ACLs. */
+ archive_test_set_acls(ae, acls4, sizeof(acls4)/sizeof(acls4[0]));
+ assertA(0 == archive_write_header(a, ae));
+
+ /* Set with special (audit, alarm) NFS4 ACLs. */
+ archive_test_set_acls(ae, acls5, sizeof(acls5)/sizeof(acls5[0]));
+ assertA(0 == archive_write_header(a, ae));
+
+ archive_entry_free(ae);
+
+ /* Close out the archive. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+ /* Write out the data we generated to a file for manual inspection. */
+ assert(NULL != (f = fopen("testout", "wb")));
+ assertEqualInt(used, (size_t)fwrite(buff, 1, (unsigned int)used, f));
+ fclose(f);
+
+ /* Write out the reference data to a file for manual inspection. */
+ extract_reference_file("test_acl_pax_nfs4.tar");
+ reference = slurpfile(&reference_size, "test_acl_pax_nfs4.tar");
+
+ /* Assert that the generated data matches the built-in reference data.*/
+ failure("Generated pax archive does not match reference; compare 'testout' to 'test_acl_pax_nfs4.tar' reference file.");
+ assertEqualMem(buff, reference, reference_size);
+ failure("Generated pax archive does not match reference; compare 'testout' to 'test_acl_pax_nfs4.tar' reference file.");
+ assertEqualInt((int)used, reference_size);
+ free(reference);
+
+ /* Read back each entry and check that the ACL data is right. */
+ assert(NULL != (a = archive_read_new()));
+ assertA(0 == archive_read_support_format_all(a));
+ assertA(0 == archive_read_support_filter_all(a));
+ assertA(0 == archive_read_open_memory(a, buff, used));
+
+ /* First item has NFS4 ACLs mirroring file mode */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(3, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_ALLOW));
+ archive_test_compare_acls(ae, acls3, sizeof(acls3)/sizeof(acls3[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, 0);
+
+ /* Second item has has more fine-grained NFS4 ACLs */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_test_compare_acls(ae, acls4, sizeof(acls4)/sizeof(acls4[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
+
+ /* Third item has has audit and alarm NFS4 ACLs */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_test_compare_acls(ae, acls5, sizeof(acls5)/sizeof(acls5[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
+
+ /* Close the archive. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_acl_pax_nfs4.tar.uu b/contrib/libarchive/libarchive/test/test_acl_pax_nfs4.tar.uu
new file mode 100644
index 0000000..ffc5cc2
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_acl_pax_nfs4.tar.uu
@@ -0,0 +1,129 @@
+begin 644 test_acl_pax_nfs4.tar
+M4&%X2&5A9&5R+V9I;&4`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#<W-R``,#`P,#`P(``P,#`P,#`@`#`P,#`P,#`P,3,R
+M(#`P,#`P,#`P,#`P(#`Q,C`P,P`@>```````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````!U<W1A<@`P,```````
+M````````````````````````````````````````````````````````````
+M```````````````````P,#`P,#`@`#`P,#`P,"``````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````Y,"!30TA)3%DN86-L+F%C93UO=VYE<D`Z<G=X
+M<&%!4E=C0V]S.CIA;&QO=RQG<F]U<$`Z<G=P85)C<SHZ86QL;W<L979E<GEO
+M;F5`.G)A4F-S.CIA;&QO=PH`````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````&9I;&4`````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````````````````````P
+M,#`W-S<@`#`P,#`P,"``,#`P,#`P(``P,#`P,#`P,#`P,"`P,#`P,#`P,#`P
+M,"`P,3`P,C0`(#``````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````=7-T87(`,#``````````````````````
+M````````````````````````````````````````````````````````````
+M````,#`P,#`P(``P,#`P,#`@````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````4&%X2&5A9&5R+V9I;&4`````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````#`P,#<W-R``,#`P,#`P(``P,#`P,#`@`#`P,#`P
+M,#`P,C4V(#`P,#`P,#`P,#`P(#`Q,C`Q,@`@>```````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````!U<W1A<@`P
+M,```````````````````````````````````````````````````````````
+M```````````````````````````P,#`P,#`@`#`P,#`P,"``````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````Q-S0@4T-(24Q9+F%C;"YA8V4];W=N
+M97)`.G)W<&%!4E=C0V]S.CIA;&QO=RQU<V5R.G5S97(W-SIR85)C<SI).F%L
+M;&]W.C<W+'5S97(Z=7-E<C<X.G)W>#HZ9&5N>3HW."QG<F]U<$`Z<G=P85)C
+M<SHZ86QL;W<L9W)O=7`Z9W)O=7`W.#IW<$%70V\Z.F1E;GDZ-S@L979E<GEO
+M;F5`.G)A4F-S.CIA;&QO=PH`````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````````````&9I;&4`
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````P,#`W-S<@`#`P,#`P,"``,#`P,#`P(``P,#`P,#`P,#`P,"`P,#`P
+M,#`P,#`P,"`P,3`P,C0`(#``````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````=7-T87(`,#``````````````
+M````````````````````````````````````````````````````````````
+M````````````,#`P,#`P(``P,#`P,#`@````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````4&%X2&5A9&5R+V9I;&4`````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````#`P,#<W-R``,#`P,#`P(``P,#`P,#`@
+M`#`P,#`P,#`P,C8R(#`P,#`P,#`P,#`P(#`Q,C`P-P`@>```````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````````````!U
+M<W1A<@`P,```````````````````````````````````````````````````
+M```````````````````````````````````P,#`P,#`@`#`P,#`P,"``````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````Q-S@@4T-(24Q9+F%C;"YA
+M8V4];W=N97)`.G)W>'!A05)78T-O<SHZ86QL;W<L=7-E<CIU<V5R-S<Z<G=P
+M85)C;W,Z.F%L;&]W.C<W+'5S97(Z=7-E<C<W.G=P.E,Z875D:70Z-S<L9W)O
+M=7!`.G)W<&%28W,Z.F%L;&]W+&=R;W5P.F=R;W5P-S@Z<F%28SI&.F%L87)M
+M.C<X+&5V97)Y;VYE0#IR85)C<SHZ86QL;W<*````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`&9I;&4`````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````P,#`W-S<@`#`P,#`P,"``,#`P,#`P(``P,#`P,#`P,#`P
+M,"`P,#`P,#`P,#`P,"`P,3`P,C0`(#``````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````=7-T87(`,#``````
+M````````````````````````````````````````````````````````````
+M````````````````````,#`P,#`P(``P,#`P,#`@````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+'````````````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_acl_pax.tar.uu b/contrib/libarchive/libarchive/test/test_acl_pax_posix1e.tar.uu
index 58d7b62..46cf975 100644
--- a/contrib/libarchive/libarchive/test/test_acl_pax.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_acl_pax_posix1e.tar.uu
@@ -1,4 +1,4 @@
-begin 644 test_acl_pax.tar
+begin 644 test_acl_pax_posix1e.tar
M9FEL90``````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````#`P,#$T,B``,#`P,#`P(``P,#`P,#`@`#`P,#`P,#`P,#`P
diff --git a/contrib/libarchive/libarchive/test/test_acl_freebsd_nfs4.c b/contrib/libarchive/libarchive/test/test_acl_platform_nfs4.c
index 89861d6..01c1dc5 100644
--- a/contrib/libarchive/libarchive/test/test_acl_freebsd_nfs4.c
+++ b/contrib/libarchive/libarchive/test/test_acl_platform_nfs4.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2003-2010 Tim Kientzle
+ * Copyright (c) 2017 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,10 +26,15 @@
#include "test.h"
__FBSDID("$FreeBSD$");
-#if defined(__FreeBSD__) && __FreeBSD__ >= 8
+#if HAVE_POSIX_ACL || HAVE_NFS4_ACL
#define _ACL_PRIVATE
#include <sys/acl.h>
+#if HAVE_DARWIN_ACL
+#include <membership.h>
+#endif
+#endif
+#if HAVE_NFS4_ACL
struct myacl_t {
int type;
int permset;
@@ -38,11 +44,12 @@ struct myacl_t {
};
static struct myacl_t acls_reg[] = {
+#if !HAVE_DARWIN_ACL
/* For this test, we need the file owner to be able to read and write the ACL. */
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_READ_ACL | ARCHIVE_ENTRY_ACL_WRITE_ACL | ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
-
+#endif
/* An entry for each type. */
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_USER, 108, "user108" },
@@ -84,17 +91,53 @@ static struct myacl_t acls_reg[] = {
// ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_GROUP, 136, "group136" },
+#if !HAVE_DARWIN_ACL
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+#else /* MacOS - mode 0654 */
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+#endif
};
+static const int acls_reg_cnt = (int)(sizeof(acls_reg)/sizeof(acls_reg[0]));
static struct myacl_t acls_dir[] = {
/* For this test, we need to be able to read and write the ACL. */
+#if !HAVE_DARWIN_ACL
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_READ_ACL,
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
+#endif
/* An entry for each type. */
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
@@ -144,6 +187,9 @@ static struct myacl_t acls_dir[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY,
ARCHIVE_ENTRY_ACL_USER, 304, "user304" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_INHERITED,
+ ARCHIVE_ENTRY_ACL_USER, 305, "user305" },
#endif
#if 0
@@ -161,12 +207,47 @@ static struct myacl_t acls_dir[] = {
ARCHIVE_ENTRY_ACL_USER, 501, "user501" },
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
ARCHIVE_ENTRY_ACL_GROUP, 502, "group502" },
+#if !HAVE_DARWIN_ACL
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+#else /* MacOS - mode 0654 */
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+#endif
};
+static const int acls_dir_cnt = (int)(sizeof(acls_dir)/sizeof(acls_dir[0]));
+
static void
set_acls(struct archive_entry *ae, struct myacl_t *acls, int start, int end)
{
@@ -188,9 +269,50 @@ set_acls(struct archive_entry *ae, struct myacl_t *acls, int start, int end)
}
static int
+#ifdef HAVE_SUN_ACL
+acl_permset_to_bitmap(uint32_t a_access_mask)
+#else
acl_permset_to_bitmap(acl_permset_t opaque_ps)
+#endif
{
static struct { int machine; int portable; } perms[] = {
+#ifdef HAVE_SUN_ACL /* Solaris NFSv4 ACL permissions */
+ {ACE_EXECUTE, ARCHIVE_ENTRY_ACL_EXECUTE},
+ {ACE_READ_DATA, ARCHIVE_ENTRY_ACL_READ_DATA},
+ {ACE_LIST_DIRECTORY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY},
+ {ACE_WRITE_DATA, ARCHIVE_ENTRY_ACL_WRITE_DATA},
+ {ACE_ADD_FILE, ARCHIVE_ENTRY_ACL_ADD_FILE},
+ {ACE_APPEND_DATA, ARCHIVE_ENTRY_ACL_APPEND_DATA},
+ {ACE_ADD_SUBDIRECTORY, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY},
+ {ACE_READ_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS},
+ {ACE_WRITE_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS},
+ {ACE_DELETE_CHILD, ARCHIVE_ENTRY_ACL_DELETE_CHILD},
+ {ACE_READ_ATTRIBUTES, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES},
+ {ACE_WRITE_ATTRIBUTES, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES},
+ {ACE_DELETE, ARCHIVE_ENTRY_ACL_DELETE},
+ {ACE_READ_ACL, ARCHIVE_ENTRY_ACL_READ_ACL},
+ {ACE_WRITE_ACL, ARCHIVE_ENTRY_ACL_WRITE_ACL},
+ {ACE_WRITE_OWNER, ARCHIVE_ENTRY_ACL_WRITE_OWNER},
+ {ACE_SYNCHRONIZE, ARCHIVE_ENTRY_ACL_SYNCHRONIZE}
+#elif HAVE_DARWIN_ACL /* MacOS NFSv4 ACL permissions */
+ {ACL_READ_DATA, ARCHIVE_ENTRY_ACL_READ_DATA},
+ {ACL_LIST_DIRECTORY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY},
+ {ACL_WRITE_DATA, ARCHIVE_ENTRY_ACL_WRITE_DATA},
+ {ACL_ADD_FILE, ARCHIVE_ENTRY_ACL_ADD_FILE},
+ {ACL_EXECUTE, ARCHIVE_ENTRY_ACL_EXECUTE},
+ {ACL_DELETE, ARCHIVE_ENTRY_ACL_DELETE},
+ {ACL_APPEND_DATA, ARCHIVE_ENTRY_ACL_APPEND_DATA},
+ {ACL_ADD_SUBDIRECTORY, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY},
+ {ACL_DELETE_CHILD, ARCHIVE_ENTRY_ACL_DELETE_CHILD},
+ {ACL_READ_ATTRIBUTES, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES},
+ {ACL_WRITE_ATTRIBUTES, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES},
+ {ACL_READ_EXTATTRIBUTES, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS},
+ {ACL_WRITE_EXTATTRIBUTES, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS},
+ {ACL_READ_SECURITY, ARCHIVE_ENTRY_ACL_READ_ACL},
+ {ACL_WRITE_SECURITY, ARCHIVE_ENTRY_ACL_WRITE_ACL},
+ {ACL_CHANGE_OWNER, ARCHIVE_ENTRY_ACL_WRITE_OWNER},
+ {ACL_SYNCHRONIZE, ARCHIVE_ENTRY_ACL_SYNCHRONIZE},
+#else /* FreeBSD NFSv4 ACL permissions */
{ACL_EXECUTE, ARCHIVE_ENTRY_ACL_EXECUTE},
{ACL_WRITE, ARCHIVE_ENTRY_ACL_WRITE},
{ACL_READ, ARCHIVE_ENTRY_ACL_READ},
@@ -210,51 +332,201 @@ acl_permset_to_bitmap(acl_permset_t opaque_ps)
{ACL_WRITE_ACL, ARCHIVE_ENTRY_ACL_WRITE_ACL},
{ACL_WRITE_OWNER, ARCHIVE_ENTRY_ACL_WRITE_OWNER},
{ACL_SYNCHRONIZE, ARCHIVE_ENTRY_ACL_SYNCHRONIZE}
+#endif
};
int i, permset = 0;
for (i = 0; i < (int)(sizeof(perms)/sizeof(perms[0])); ++i)
+#if HAVE_SUN_ACL
+ if (a_access_mask & perms[i].machine)
+#else
if (acl_get_perm_np(opaque_ps, perms[i].machine))
+#endif
permset |= perms[i].portable;
return permset;
}
static int
+#if HAVE_SUN_ACL
+acl_flagset_to_bitmap(uint16_t a_flags)
+#else
acl_flagset_to_bitmap(acl_flagset_t opaque_fs)
+#endif
{
static struct { int machine; int portable; } flags[] = {
+#if HAVE_SUN_ACL /* Solaris NFSv4 ACL inheritance flags */
+ {ACE_FILE_INHERIT_ACE, ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT},
+ {ACE_DIRECTORY_INHERIT_ACE, ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT},
+ {ACE_NO_PROPAGATE_INHERIT_ACE, ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT},
+ {ACE_INHERIT_ONLY_ACE, ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY},
+ {ACE_SUCCESSFUL_ACCESS_ACE_FLAG, ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS},
+ {ACE_FAILED_ACCESS_ACE_FLAG, ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS},
+ {ACE_INHERITED_ACE, ARCHIVE_ENTRY_ACL_ENTRY_INHERITED}
+#elif HAVE_DARWIN_ACL /* MacOS NFSv4 ACL inheritance flags */
+ {ACL_ENTRY_INHERITED, ARCHIVE_ENTRY_ACL_ENTRY_INHERITED},
+ {ACL_ENTRY_FILE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT},
+ {ACL_ENTRY_DIRECTORY_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT},
+ {ACL_ENTRY_LIMIT_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT},
+ {ACL_ENTRY_ONLY_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY}
+#else /* FreeBSD NFSv4 ACL inheritance flags */
{ACL_ENTRY_FILE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT},
{ACL_ENTRY_DIRECTORY_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT},
{ACL_ENTRY_NO_PROPAGATE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT},
+ {ACL_ENTRY_SUCCESSFUL_ACCESS, ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS},
+ {ACL_ENTRY_NO_PROPAGATE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS},
{ACL_ENTRY_INHERIT_ONLY, ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY},
+#endif
};
int i, flagset = 0;
for (i = 0; i < (int)(sizeof(flags)/sizeof(flags[0])); ++i)
+#if HAVE_SUN_ACL
+ if (a_flags & flags[i].machine)
+#else
if (acl_get_flag_np(opaque_fs, flags[i].machine))
+#endif
flagset |= flags[i].portable;
return flagset;
}
static int
+#if HAVE_SUN_ACL
+acl_match(ace_t *ace, struct myacl_t *myacl)
+#else
acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+#endif
{
+#if !HAVE_SUN_ACL
+#if HAVE_DARWIN_ACL
+ void *q;
+ uid_t ugid;
+ int r, idtype;
+#else
gid_t g, *gp;
uid_t u, *up;
+ acl_entry_type_t entry_type;
+#endif /* !HAVE_DARWIN_ACL */
acl_tag_t tag_type;
acl_permset_t opaque_ps;
acl_flagset_t opaque_fs;
+#endif /* !HAVE_SUN_ACL */
int perms;
+#if HAVE_SUN_ACL
+ perms = acl_permset_to_bitmap(ace->a_access_mask) | acl_flagset_to_bitmap(ace->a_flags);
+#else
acl_get_tag_type(aclent, &tag_type);
+#if !HAVE_DARWIN_ACL
+ acl_get_entry_type_np(aclent, &entry_type);
+#endif
/* translate the silly opaque permset to a bitmap */
acl_get_permset(aclent, &opaque_ps);
acl_get_flagset_np(aclent, &opaque_fs);
perms = acl_permset_to_bitmap(opaque_ps) | acl_flagset_to_bitmap(opaque_fs);
+#endif
if (perms != myacl->permset)
return (0);
+#if HAVE_SUN_ACL
+ switch (ace->a_type) {
+ case ACE_ACCESS_ALLOWED_ACE_TYPE:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_ALLOW)
+ return (0);
+ break;
+ case ACE_ACCESS_DENIED_ACE_TYPE:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_DENY)
+ return (0);
+ break;
+ case ACE_SYSTEM_AUDIT_ACE_TYPE:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_AUDIT)
+ return (0);
+ break;
+ case ACE_SYSTEM_ALARM_ACE_TYPE:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_ALARM)
+ return (0);
+ break;
+ default:
+ return (0);
+ }
+
+ if (ace->a_flags & ACE_OWNER) {
+ if (myacl->tag != ARCHIVE_ENTRY_ACL_USER_OBJ)
+ return (0);
+ } else if (ace->a_flags & ACE_GROUP) {
+ if (myacl->tag != ARCHIVE_ENTRY_ACL_GROUP_OBJ)
+ return (0);
+ } else if (ace->a_flags & ACE_EVERYONE) {
+ if (myacl->tag != ARCHIVE_ENTRY_ACL_EVERYONE)
+ return (0);
+ } else if (ace->a_flags & ACE_IDENTIFIER_GROUP) {
+ if (myacl->tag != ARCHIVE_ENTRY_ACL_GROUP)
+ return (0);
+ if ((gid_t)myacl->qual != ace->a_who)
+ return (0);
+ } else {
+ if (myacl->tag != ARCHIVE_ENTRY_ACL_USER)
+ return (0);
+ if ((uid_t)myacl->qual != ace->a_who)
+ return (0);
+ }
+#elif HAVE_DARWIN_ACL
+ r = 0;
+ switch (tag_type) {
+ case ACL_EXTENDED_ALLOW:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_ALLOW)
+ return (0);
+ break;
+ case ACL_EXTENDED_DENY:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_DENY)
+ return (0);
+ break;
+ default:
+ return (0);
+ }
+ q = acl_get_qualifier(aclent);
+ if (q == NULL)
+ return (0);
+ r = mbr_uuid_to_id((const unsigned char *)q, &ugid, &idtype);
+ acl_free(q);
+ if (r != 0)
+ return (0);
+ switch (idtype) {
+ case ID_TYPE_UID:
+ if (myacl->tag != ARCHIVE_ENTRY_ACL_USER)
+ return (0);
+ if ((uid_t)myacl->qual != ugid)
+ return (0);
+ break;
+ case ID_TYPE_GID:
+ if (myacl->tag != ARCHIVE_ENTRY_ACL_GROUP)
+ return (0);
+ if ((gid_t)myacl->qual != ugid)
+ return (0);
+ break;
+ default:
+ return (0);
+ }
+#else /* !HAVE_SUN_ACL && !HAVE_DARWIN_ACL */
+ switch (entry_type) {
+ case ACL_ENTRY_TYPE_ALLOW:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_ALLOW)
+ return (0);
+ break;
+ case ACL_ENTRY_TYPE_DENY:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_DENY)
+ return (0);
+ break;
+ case ACL_ENTRY_TYPE_AUDIT:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_AUDIT)
+ return (0);
+ case ACL_ENTRY_TYPE_ALARM:
+ if (myacl->type != ARCHIVE_ENTRY_ACL_TYPE_ALARM)
+ return (0);
+ default:
+ return (0);
+ }
+
switch (tag_type) {
case ACL_USER_OBJ:
if (myacl->tag != ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
@@ -287,17 +559,29 @@ acl_match(acl_entry_t aclent, struct myacl_t *myacl)
if (myacl->tag != ARCHIVE_ENTRY_ACL_EVERYONE) return (0);
break;
}
+#endif /* !HAVE_SUN_ACL && !HAVE_DARWIN_ACL */
return (1);
}
static void
-compare_acls(acl_t acl, struct myacl_t *myacls, const char *filename, int start, int end)
+compare_acls(
+#if HAVE_SUN_ACL
+ acl_t *acl,
+#else
+ acl_t acl,
+#endif
+ struct myacl_t *myacls, const char *filename, int start, int end)
{
int *marker;
- int entry_id = ACL_FIRST_ENTRY;
int matched;
int i, n;
+#if HAVE_SUN_ACL
+ int e;
+ ace_t *acl_entry;
+#else
+ int entry_id = ACL_FIRST_ENTRY;
acl_entry_t acl_entry;
+#endif
n = end - start;
marker = malloc(sizeof(marker[0]) * (n + 1));
@@ -313,10 +597,20 @@ compare_acls(acl_t acl, struct myacl_t *myacls, const char *filename, int start,
* Iterate over acls in system acl object, try to match each
* one with an item in the myacls array.
*/
- while (1 == acl_get_entry(acl, entry_id, &acl_entry)) {
+#if HAVE_SUN_ACL
+ for (e = 0; e < acl->acl_cnt; e++)
+#elif HAVE_DARWIN_ACL
+ while (0 == acl_get_entry(acl, entry_id, &acl_entry))
+#else
+ while (1 == acl_get_entry(acl, entry_id, &acl_entry))
+#endif
+ {
+#if HAVE_SUN_ACL
+ acl_entry = &((ace_t *)acl->acl_aclp)[e];
+#else
/* After the first time... */
entry_id = ACL_NEXT_ENTRY;
-
+#endif
/* Search for a matching entry (tag and qualifier) */
for (i = 0, matched = 0; i < n && !matched; i++) {
if (acl_match(acl_entry, &myacls[marker[i]])) {
@@ -327,14 +621,15 @@ compare_acls(acl_t acl, struct myacl_t *myacls, const char *filename, int start,
}
}
- failure("ACL entry on file %s that shouldn't be there", filename);
+ failure("ACL entry on file %s that shouldn't be there",
+ filename);
assert(matched == 1);
}
/* Dump entries in the myacls array that weren't in the system acl. */
for (i = 0; i < n; ++i) {
failure(" ACL entry %d missing from %s: "
- "type=%d,permset=%x,tag=%d,qual=%d,name=``%s''\n",
+ "type=%#010x,permset=%#010x,tag=%d,qual=%d,name=``%s''\n",
marker[i], filename,
myacls[marker[i]].type, myacls[marker[i]].permset,
myacls[marker[i]].tag, myacls[marker[i]].qual,
@@ -368,7 +663,8 @@ compare_entry_acls(struct archive_entry *ae, struct myacl_t *myacls, const char
* Iterate over acls in entry, try to match each
* one with an item in the myacls array.
*/
- assertEqualInt(n, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ assertEqualInt(n, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
while (ARCHIVE_OK == archive_entry_acl_next(ae,
ARCHIVE_ENTRY_ACL_TYPE_NFS4, &type, &permset, &tag, &qual, &name)) {
@@ -386,7 +682,7 @@ compare_entry_acls(struct archive_entry *ae, struct myacl_t *myacls, const char
}
failure("ACL entry on file that shouldn't be there: "
- "type=%d,permset=%x,tag=%d,qual=%d",
+ "type=%#010x,permset=%#010x,tag=%d,qual=%d",
type,permset,tag,qual);
assert(matched == 1);
}
@@ -394,7 +690,7 @@ compare_entry_acls(struct archive_entry *ae, struct myacl_t *myacls, const char
/* Dump entries in the myacls array that weren't in the system acl. */
for (i = 0; i < n; ++i) {
failure(" ACL entry %d missing from %s: "
- "type=%d,permset=%x,tag=%d,qual=%d,name=``%s''\n",
+ "type=%#010x,permset=%#010x,tag=%d,qual=%d,name=``%s''\n",
marker[i], filename,
myacls[marker[i]].type, myacls[marker[i]].permset,
myacls[marker[i]].tag, myacls[marker[i]].qual,
@@ -403,53 +699,109 @@ compare_entry_acls(struct archive_entry *ae, struct myacl_t *myacls, const char
}
free(marker);
}
-#endif
+#endif /* HAVE_NFS4_ACL */
/*
- * Verify ACL restore-to-disk. This test is FreeBSD-specific.
+ * Verify ACL restore-to-disk. This test is Platform-specific.
*/
-DEFINE_TEST(test_acl_freebsd_nfs4)
+DEFINE_TEST(test_acl_platform_nfs4)
{
-#if !defined(__FreeBSD__)
- skipping("FreeBSD-specific NFS4 ACL restore test");
-#elif __FreeBSD__ < 8
- skipping("NFS4 ACLs supported only on FreeBSD 8.0 and later");
+#if !HAVE_NFS4_ACL
+ skipping("NFS4 ACLs are not supported on this platform");
#else
char buff[64];
struct stat st;
struct archive *a;
struct archive_entry *ae;
int i, n;
+ char *func;
+#if HAVE_DARWIN_ACL /* On MacOS we skip trivial ACLs in some tests */
+ const int regcnt = acls_reg_cnt - 4;
+ const int dircnt = acls_dir_cnt - 4;
+#else
+ const int regcnt = acls_reg_cnt;
+ const int dircnt = acls_dir_cnt;
+#endif
+#if HAVE_SUN_ACL
+ acl_t *acl;
+#else /* !HAVE_SUN_ACL */
+#if HAVE_DARWIN_ACL
+ acl_entry_t aclent;
+ acl_permset_t permset;
+ const uid_t uid = 1000;
+ uuid_t uuid;
+#endif /* HAVE_DARWIN_ACL */
acl_t acl;
+#endif /* !HAVE_SUN_ACL */
/*
* First, do a quick manual set/read of ACL data to
* verify that the local filesystem does support ACLs.
* If it doesn't, we'll simply skip the remaining tests.
*/
+#if HAVE_POSIX_ACL && HAVE_ACL_TYPE_NFS4
acl = acl_from_text("owner@:rwxp::allow,group@:rwp:f:allow");
+ failure("acl_from_text(): errno = %d (%s)", errno, strerror(errno));
+ assert((void *)acl != NULL);
+#elif HAVE_DARWIN_ACL
+ acl = acl_init(1);
assert((void *)acl != NULL);
+ assertEqualInt(0, acl_create_entry(&acl, &aclent));
+ assertEqualInt(0, acl_set_tag_type(aclent, ACL_EXTENDED_ALLOW));
+ assertEqualInt(0, acl_get_permset(aclent, &permset));
+ assertEqualInt(0, acl_add_perm(permset, ACL_READ_DATA));
+ assertEqualInt(0, acl_add_perm(permset, ACL_WRITE_DATA));
+ assertEqualInt(0, acl_add_perm(permset, ACL_APPEND_DATA));
+ assertEqualInt(0, acl_add_perm(permset, ACL_EXECUTE));
+ assertEqualInt(0, acl_set_permset(aclent, permset));
+ assertEqualInt(0, mbr_identifier_to_uuid(ID_TYPE_UID, &uid,
+ sizeof(uid_t), uuid));
+ assertEqualInt(0, acl_set_qualifier(aclent, uuid));
+#endif
+
/* Create a test dir and try to set an ACL on it. */
if (!assertMakeDir("pretest", 0755)) {
+#if !HAVE_SUN_ACL
acl_free(acl);
+#endif
return;
}
+#if HAVE_SUN_ACL
+ func = "acl_get()";
+ n = acl_get("pretest", 0, &acl);
+#else
+ func = "acl_set_file()";
+#if HAVE_DARWIN_ACL
+ n = acl_set_file("pretest", ACL_TYPE_EXTENDED, acl);
+#else
n = acl_set_file("pretest", ACL_TYPE_NFS4, acl);
+#endif
acl_free(acl);
- if (n != 0 && errno == EOPNOTSUPP) {
- skipping("NFS4 ACL tests require that NFS4 ACLs"
- " be enabled on the filesystem");
- return;
+#endif
+ if (n != 0) {
+#if HAVE_SUN_ACL
+ if (errno == ENOSYS)
+#else
+ if (errno == EOPNOTSUPP || errno == EINVAL)
+#endif
+ {
+ skipping("NFS4 ACL is not supported on this filesystem");
+ return;
+ }
}
- if (n != 0 && errno == EINVAL) {
- skipping("This filesystem does not support NFS4 ACLs");
+ failure("%s: errno = %d (%s)", func, errno, strerror(errno));
+ assertEqualInt(0, n);
+
+#if HAVE_SUN_ACL
+ if (acl->acl_type != ACE_T) {
+ acl_free(acl);
+ skipping("NFS4 ACL is not supported on this filesystem");
return;
}
- failure("acl_set_file(): errno = %d (%s)",
- errno, strerror(errno));
- assertEqualInt(0, n);
+ acl_free(acl);
+#endif
/* Create a write-to-disk object. */
assert(NULL != (a = archive_write_disk_new()));
@@ -464,7 +816,7 @@ DEFINE_TEST(test_acl_freebsd_nfs4)
archive_entry_set_perm(ae, 0654);
archive_entry_set_mtime(ae, 123456, 7890);
archive_entry_set_size(ae, 0);
- set_acls(ae, acls_reg, 0, (int)(sizeof(acls_reg)/sizeof(acls_reg[0])));
+ set_acls(ae, acls_reg, 0, acls_reg_cnt);
/* Write the entry to disk, including ACLs. */
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
@@ -474,10 +826,10 @@ DEFINE_TEST(test_acl_freebsd_nfs4)
archive_entry_set_filetype(ae, AE_IFDIR);
archive_entry_set_perm(ae, 0654);
archive_entry_set_mtime(ae, 123456, 7890);
- set_acls(ae, acls_dir, 0, (int)(sizeof(acls_dir)/sizeof(acls_dir[0])));
+ set_acls(ae, acls_dir, 0, acls_dir_cnt);
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
- for (i = 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
+ for (i = 0; i < acls_dir_cnt; ++i) {
sprintf(buff, "dir%d", i);
archive_entry_set_pathname(ae, buff);
archive_entry_set_filetype(ae, AE_IFDIR);
@@ -496,28 +848,62 @@ DEFINE_TEST(test_acl_freebsd_nfs4)
/* Verify the data on disk. */
assertEqualInt(0, stat("testall", &st));
assertEqualInt(st.st_mtime, 123456);
+#if HAVE_SUN_ACL
+ n = acl_get("testall", 0, &acl);
+ failure("acl_get(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+#else
+#if HAVE_DARWIN_ACL
+ acl = acl_get_file("testall", ACL_TYPE_EXTENDED);
+#else
acl = acl_get_file("testall", ACL_TYPE_NFS4);
+#endif
+ failure("acl_get_file(): errno = %d (%s)", errno, strerror(errno));
assert(acl != (acl_t)NULL);
- compare_acls(acl, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/sizeof(acls_reg[0])));
+#endif
+ compare_acls(acl, acls_reg, "testall", 0, regcnt);
acl_free(acl);
/* Verify single-permission dirs on disk. */
- for (i = 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
- sprintf(buff, "dir%d", i);
- assertEqualInt(0, stat(buff, &st));
- assertEqualInt(st.st_mtime, 123456 + i);
- acl = acl_get_file(buff, ACL_TYPE_NFS4);
- assert(acl != (acl_t)NULL);
- compare_acls(acl, acls_dir, buff, i, i + 1);
- acl_free(acl);
+ for (i = 0; i < dircnt; ++i) {
+ sprintf(buff, "dir%d", i);
+ assertEqualInt(0, stat(buff, &st));
+ assertEqualInt(st.st_mtime, 123456 + i);
+#if HAVE_SUN_ACL
+ n = acl_get(buff, 0, &acl);
+ failure("acl_get(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+#else
+#if HAVE_DARWIN_ACL
+ acl = acl_get_file(buff, ACL_TYPE_EXTENDED);
+#else
+ acl = acl_get_file(buff, ACL_TYPE_NFS4);
+#endif
+ failure("acl_get_file(): errno = %d (%s)", errno,
+ strerror(errno));
+ assert(acl != (acl_t)NULL);
+#endif
+ compare_acls(acl, acls_dir, buff, i, i + 1);
+ acl_free(acl);
}
/* Verify "dirall" on disk. */
assertEqualInt(0, stat("dirall", &st));
assertEqualInt(st.st_mtime, 123456);
+#if HAVE_SUN_ACL
+ n = acl_get("dirall", 0, &acl);
+ failure("acl_get(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+#else
+#if HAVE_DARWIN_ACL
+ acl = acl_get_file("dirall", ACL_TYPE_EXTENDED);
+#else
acl = acl_get_file("dirall", ACL_TYPE_NFS4);
+#endif
+ failure("acl_get_file(): errno = %d (%s)", errno, strerror(errno));
assert(acl != (acl_t)NULL);
- compare_acls(acl, acls_dir, "dirall", 0, (int)(sizeof(acls_dir)/sizeof(acls_dir[0])));
+#endif
+ compare_acls(acl, acls_dir, "dirall", 0, dircnt);
acl_free(acl);
/* Read and compare ACL via archive_read_disk */
@@ -528,7 +914,7 @@ DEFINE_TEST(test_acl_freebsd_nfs4)
archive_entry_set_pathname(ae, "testall");
assertEqualInt(ARCHIVE_OK,
archive_read_disk_entry_from_file(a, ae, -1, NULL));
- compare_entry_acls(ae, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/sizeof(acls_reg[0])));
+ compare_entry_acls(ae, acls_reg, "testall", 0, acls_reg_cnt);
archive_entry_free(ae);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
@@ -539,9 +925,9 @@ DEFINE_TEST(test_acl_freebsd_nfs4)
assert(ae != NULL);
archive_entry_set_pathname(ae, "dirall");
assertEqualInt(ARCHIVE_OK,
- archive_read_disk_entry_from_file(a, ae, -1, NULL));
- compare_entry_acls(ae, acls_dir, "dirall", 0, (int)(sizeof(acls_dir)/sizeof(acls_dir[0])));
+ archive_read_disk_entry_from_file(a, ae, -1, NULL));
+ compare_entry_acls(ae, acls_dir, "dirall", 0, acls_dir_cnt);
archive_entry_free(ae);
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
-#endif
+#endif /* HAVE_NFS4_ACL */
}
diff --git a/contrib/libarchive/libarchive/test/test_acl_freebsd_posix1e.c b/contrib/libarchive/libarchive/test/test_acl_platform_posix1e.c
index 2eb0a00..1d55a33 100644
--- a/contrib/libarchive/libarchive/test/test_acl_freebsd_posix1e.c
+++ b/contrib/libarchive/libarchive/test/test_acl_platform_posix1e.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2003-2008 Tim Kientzle
+ * Copyright (c) 2017 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,18 +26,16 @@
#include "test.h"
__FBSDID("$FreeBSD: head/lib/libarchive/test/test_acl_freebsd.c 189427 2009-03-06 04:21:23Z kientzle $");
-#if defined(__FreeBSD__) && __FreeBSD__ > 4
+#if HAVE_POSIX_ACL || HAVE_SUN_ACL
#include <sys/acl.h>
+#if HAVE_ACL_GET_PERM
+#include <acl/libacl.h>
+#define ACL_GET_PERM acl_get_perm
+#elif HAVE_ACL_GET_PERM_NP
+#define ACL_GET_PERM acl_get_perm_np
+#endif
-struct myacl_t {
- int type; /* Type of ACL: "access" or "default" */
- int permset; /* Permissions for this class of users. */
- int tag; /* Owner, User, Owning group, group, other, etc. */
- int qual; /* GID or UID of user/group, depending on tag. */
- const char *name; /* Name of user/group, depending on tag. */
-};
-
-static struct myacl_t acls2[] = {
+static struct archive_test_acl_t acls2[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTRY_ACL_READ,
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
@@ -53,35 +52,37 @@ static struct myacl_t acls2[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ | ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_MASK, -1, "" },
- { 0, 0, 0, 0, NULL }
};
-static void
-set_acls(struct archive_entry *ae, struct myacl_t *acls)
-{
- int i;
-
- archive_entry_acl_clear(ae);
- for (i = 0; acls[i].name != NULL; i++) {
- archive_entry_acl_add_entry(ae,
- acls[i].type, acls[i].permset, acls[i].tag, acls[i].qual,
- acls[i].name);
- }
-}
-
static int
-acl_entry_get_perm(acl_entry_t aclent) {
+#if HAVE_SUN_ACL
+acl_entry_get_perm(aclent_t *aclent)
+#else
+acl_entry_get_perm(acl_entry_t aclent)
+#endif
+{
int permset = 0;
+#if HAVE_POSIX_ACL
acl_permset_t opaque_ps;
+#endif
+#if HAVE_SUN_ACL
+ if (aclent->a_perm & 1)
+ permset |= ARCHIVE_ENTRY_ACL_EXECUTE;
+ if (aclent->a_perm & 2)
+ permset |= ARCHIVE_ENTRY_ACL_WRITE;
+ if (aclent->a_perm & 4)
+ permset |= ARCHIVE_ENTRY_ACL_READ;
+#else
/* translate the silly opaque permset to a bitmap */
acl_get_permset(aclent, &opaque_ps);
- if (acl_get_perm_np(opaque_ps, ACL_EXECUTE))
+ if (ACL_GET_PERM(opaque_ps, ACL_EXECUTE))
permset |= ARCHIVE_ENTRY_ACL_EXECUTE;
- if (acl_get_perm_np(opaque_ps, ACL_WRITE))
+ if (ACL_GET_PERM(opaque_ps, ACL_WRITE))
permset |= ARCHIVE_ENTRY_ACL_WRITE;
- if (acl_get_perm_np(opaque_ps, ACL_READ))
+ if (ACL_GET_PERM(opaque_ps, ACL_READ))
permset |= ARCHIVE_ENTRY_ACL_READ;
+#endif
return permset;
}
@@ -127,45 +128,96 @@ acl_get_specific_entry(acl_t acl, acl_tag_t requested_tag_type, int requested_ta
#endif
static int
-acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+#if HAVE_SUN_ACL
+acl_match(aclent_t *aclent, struct archive_test_acl_t *myacl)
+#else
+acl_match(acl_entry_t aclent, struct archive_test_acl_t *myacl)
+#endif
{
+#if HAVE_POSIX_ACL
gid_t g, *gp;
uid_t u, *up;
acl_tag_t tag_type;
+#endif
if (myacl->permset != acl_entry_get_perm(aclent))
return (0);
+#if HAVE_SUN_ACL
+ switch (aclent->a_type)
+#else
acl_get_tag_type(aclent, &tag_type);
- switch (tag_type) {
+ switch (tag_type)
+#endif
+ {
+#if HAVE_SUN_ACL
+ case DEF_USER_OBJ:
+ case USER_OBJ:
+#else
case ACL_USER_OBJ:
+#endif
if (myacl->tag != ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
break;
+#if HAVE_SUN_ACL
+ case DEF_USER:
+ case USER:
+#else
case ACL_USER:
+#endif
if (myacl->tag != ARCHIVE_ENTRY_ACL_USER)
return (0);
+#if HAVE_SUN_ACL
+ if ((uid_t)myacl->qual != aclent->a_id)
+ return (0);
+#else
up = acl_get_qualifier(aclent);
u = *up;
acl_free(up);
if ((uid_t)myacl->qual != u)
return (0);
+#endif
break;
+#if HAVE_SUN_ACL
+ case DEF_GROUP_OBJ:
+ case GROUP_OBJ:
+#else
case ACL_GROUP_OBJ:
+#endif
if (myacl->tag != ARCHIVE_ENTRY_ACL_GROUP_OBJ) return (0);
break;
+#if HAVE_SUN_ACL
+ case DEF_GROUP:
+ case GROUP:
+#else
case ACL_GROUP:
+#endif
if (myacl->tag != ARCHIVE_ENTRY_ACL_GROUP)
return (0);
+#if HAVE_SUN_ACL
+ if ((gid_t)myacl->qual != aclent->a_id)
+ return (0);
+#else
gp = acl_get_qualifier(aclent);
g = *gp;
acl_free(gp);
if ((gid_t)myacl->qual != g)
return (0);
+#endif
break;
+#if HAVE_SUN_ACL
+ case DEF_CLASS_OBJ:
+ case CLASS_OBJ:
+#else
case ACL_MASK:
+#endif
if (myacl->tag != ARCHIVE_ENTRY_ACL_MASK) return (0);
break;
+#if HAVE_SUN_ACL
+ case DEF_OTHER_OBJ:
+ case OTHER_OBJ:
+#else
case ACL_OTHER:
+#endif
if (myacl->tag != ARCHIVE_ENTRY_ACL_OTHER) return (0);
break;
}
@@ -173,33 +225,42 @@ acl_match(acl_entry_t aclent, struct myacl_t *myacl)
}
static void
-compare_acls(acl_t acl, struct myacl_t *myacls)
+#if HAVE_SUN_ACL
+compare_acls(acl_t *acl, struct archive_test_acl_t *myacls, int n)
+#else
+compare_acls(acl_t acl, struct archive_test_acl_t *myacls, int n)
+#endif
{
int *marker;
- int entry_id = ACL_FIRST_ENTRY;
int matched;
- int i, n;
+ int i;
+#if HAVE_SUN_ACL
+ int e;
+ aclent_t *acl_entry;
+#else
+ int entry_id = ACL_FIRST_ENTRY;
acl_entry_t acl_entry;
+#endif
/* Count ACL entries in myacls array and allocate an indirect array. */
- for (n = 0; myacls[n].name != NULL; ++n)
- continue;
- if (n) {
- marker = malloc(sizeof(marker[0]) * n);
- if (marker == NULL)
- return;
- for (i = 0; i < n; i++)
- marker[i] = i;
- } else
- marker = NULL;
+ marker = malloc(sizeof(marker[0]) * n);
+ if (marker == NULL)
+ return;
+ for (i = 0; i < n; i++)
+ marker[i] = i;
/*
* Iterate over acls in system acl object, try to match each
* one with an item in the myacls array.
*/
+#if HAVE_SUN_ACL
+ for(e = 0; e < acl->acl_cnt; e++) {
+ acl_entry = &((aclent_t *)acl->acl_aclp)[e];
+#else
while (1 == acl_get_entry(acl, entry_id, &acl_entry)) {
/* After the first time... */
entry_id = ACL_NEXT_ENTRY;
+#endif
/* Search for a matching entry (tag and qualifier) */
for (i = 0, matched = 0; i < n && !matched; i++) {
@@ -219,7 +280,7 @@ compare_acls(acl_t acl, struct myacl_t *myacls)
/* Dump entries in the myacls array that weren't in the system acl. */
for (i = 0; i < n; ++i) {
failure(" ACL entry missing from file: "
- "type=%d,permset=%d,tag=%d,qual=%d,name=``%s''\n",
+ "type=%#010x,permset=%#010x,tag=%d,qual=%d,name=``%s''\n",
myacls[marker[i]].type, myacls[marker[i]].permset,
myacls[marker[i]].tag, myacls[marker[i]].qual,
myacls[marker[i]].name);
@@ -232,30 +293,41 @@ compare_acls(acl_t acl, struct myacl_t *myacls)
/*
- * Verify ACL restore-to-disk. This test is FreeBSD-specific.
+ * Verify ACL restore-to-disk. This test is Platform-specific.
*/
-DEFINE_TEST(test_acl_freebsd_posix1e_restore)
+DEFINE_TEST(test_acl_platform_posix1e_restore)
{
-#if !defined(__FreeBSD__)
- skipping("FreeBSD-specific ACL restore test");
-#elif __FreeBSD__ < 5
- skipping("ACL restore supported only on FreeBSD 5.0 and later");
-#else
+#if !HAVE_SUN_ACL && !HAVE_POSIX_ACL
+ skipping("POSIX.1e ACLs are not supported on this platform");
+#else /* HAVE_SUN_ACL || HAVE_POSIX_ACL */
struct stat st;
struct archive *a;
struct archive_entry *ae;
int n, fd;
+ char *func;
+#if HAVE_SUN_ACL
+ acl_t *acl, *acl2;
+#else
acl_t acl;
+#endif
/*
* First, do a quick manual set/read of ACL data to
* verify that the local filesystem does support ACLs.
* If it doesn't, we'll simply skip the remaining tests.
*/
+#if HAVE_SUN_ACL
+ n = acl_fromtext("user::rwx,user:1:rw-,group::rwx,group:15:r-x,other:rwx,mask:rwx", &acl);
+ failure("acl_fromtext(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+#else
acl = acl_from_text("u::rwx,u:1:rw,g::rwx,g:15:rx,o::rwx,m::rwx");
+ failure("acl_from_text(): errno = %d (%s)", errno, strerror(errno));
assert((void *)acl != NULL);
- /* Create a test file and try to set an ACL on it. */
+#endif
+
+ /* Create a test file and try ACL on it. */
fd = open("pretest", O_WRONLY | O_CREAT | O_EXCL, 0777);
failure("Could not create test file?!");
if (!assert(fd >= 0)) {
@@ -263,21 +335,51 @@ DEFINE_TEST(test_acl_freebsd_posix1e_restore)
return;
}
- n = acl_set_fd(fd, acl);
- acl_free(acl);
- if (n != 0 && errno == EOPNOTSUPP) {
+#if HAVE_SUN_ACL
+ n = facl_get(fd, 0, &acl2);
+ if (n != 0) {
close(fd);
- skipping("ACL tests require that ACL support be enabled on the filesystem");
+ acl_free(acl);
+ }
+ if (errno == ENOSYS) {
+ skipping("POSIX.1e ACLs are not supported on this filesystem");
return;
}
- if (n != 0 && errno == EINVAL) {
- close(fd);
- skipping("This filesystem does not support POSIX.1e ACLs");
+ failure("facl_get(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+
+ if (acl2->acl_type != ACLENT_T) {
+ acl_free(acl2);
+ skipping("POSIX.1e ACLs are not supported on this filesystem");
return;
}
- failure("acl_set_fd(): errno = %d (%s)",
- errno, strerror(errno));
+ acl_free(acl2);
+
+ func = "facl_set()";
+ n = facl_set(fd, acl);
+#else
+ func = "acl_set_fd()";
+ n = acl_set_fd(fd, acl);
+#endif
+ acl_free(acl);
+ if (n != 0) {
+#if HAVE_SUN_ACL
+ if (errno == ENOSYS)
+#else
+ if (errno == EOPNOTSUPP || errno == EINVAL)
+#endif
+ {
+ close(fd);
+ skipping("POSIX.1e ACLs are not supported on this filesystem");
+ return;
+ }
+ }
+ failure("%s: errno = %d (%s)", func, errno, strerror(errno));
assertEqualInt(0, n);
+
+#if HAVE_SUN_ACL
+
+#endif
close(fd);
/* Create a write-to-disk object. */
@@ -291,7 +393,7 @@ DEFINE_TEST(test_acl_freebsd_posix1e_restore)
archive_entry_set_pathname(ae, "test0");
archive_entry_set_mtime(ae, 123456, 7890);
archive_entry_set_size(ae, 0);
- set_acls(ae, acls2);
+ archive_test_set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
archive_entry_free(ae);
@@ -302,28 +404,38 @@ DEFINE_TEST(test_acl_freebsd_posix1e_restore)
/* Verify the data on disk. */
assertEqualInt(0, stat("test0", &st));
assertEqualInt(st.st_mtime, 123456);
+#if HAVE_SUN_ACL
+ n = acl_get("test0", 0, &acl);
+ failure("acl_get(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+#else
acl = acl_get_file("test0", ACL_TYPE_ACCESS);
+ failure("acl_get_file(): errno = %d (%s)", errno, strerror(errno));
assert(acl != (acl_t)NULL);
- compare_acls(acl, acls2);
- acl_free(acl);
#endif
+ compare_acls(acl, acls2, sizeof(acls2)/sizeof(acls2[0]));
+ acl_free(acl);
+#endif /* HAVE_SUN_ACL || HAVE_POSIX_ACL */
}
/*
- * Verify ACL reaed-from-disk. This test is FreeBSD-specific.
+ * Verify ACL read-from-disk. This test is Platform-specific.
*/
-DEFINE_TEST(test_acl_freebsd_posix1e_read)
+DEFINE_TEST(test_acl_platform_posix1e_read)
{
-#if !defined(__FreeBSD__)
- skipping("FreeBSD-specific ACL read test");
-#elif __FreeBSD__ < 5
- skipping("ACL read supported only on FreeBSD 5.0 and later");
+#if !HAVE_SUN_ACL && !HAVE_POSIX_ACL
+ skipping("POSIX.1e ACLs are not supported on this platform");
#else
struct archive *a;
struct archive_entry *ae;
- int n, fd;
- const char *acl1_text, *acl2_text;
- acl_t acl1, acl2;
+ int n, fd, flags, dflags;
+ char *func, *acl_text;
+ const char *acl1_text, *acl2_text, *acl3_text;
+#if HAVE_SUN_ACL
+ acl_t *acl, *acl1, *acl2, *acl3;
+#else
+ acl_t acl1, acl2, acl3;
+#endif
/*
* Manually construct a directory and two files with
@@ -332,30 +444,77 @@ DEFINE_TEST(test_acl_freebsd_posix1e_read)
*/
/* Create a test file f1 with acl1 */
- acl1_text = "user::rwx,group::rwx,other::rwx,user:1:rw-,group:15:r-x,mask::rwx";
+#if HAVE_SUN_ACL
+ acl1_text = "user::rwx,"
+ "group::rwx,"
+ "other:rwx,"
+ "user:1:rw-,"
+ "group:15:r-x,"
+ "mask:rwx";
+ n = acl_fromtext(acl1_text, &acl1);
+ failure("acl_fromtext(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+#else
+ acl1_text = "user::rwx\n"
+ "group::rwx\n"
+ "other::rwx\n"
+ "user:1:rw-\n"
+ "group:15:r-x\n"
+ "mask::rwx";
acl1 = acl_from_text(acl1_text);
+ failure("acl_from_text(): errno = %d (%s)", errno, strerror(errno));
assert((void *)acl1 != NULL);
+#endif
fd = open("f1", O_WRONLY | O_CREAT | O_EXCL, 0777);
failure("Could not create test file?!");
if (!assert(fd >= 0)) {
acl_free(acl1);
return;
}
- n = acl_set_fd(fd, acl1);
- acl_free(acl1);
- if (n != 0 && errno == EOPNOTSUPP) {
+#if HAVE_SUN_ACL
+ /* Check if Solaris filesystem supports POSIX.1e ACLs */
+ n = facl_get(fd, 0, &acl);
+ if (n != 0)
close(fd);
- skipping("ACL tests require that ACL support be enabled on the filesystem");
+ if (n != 0 && errno == ENOSYS) {
+ acl_free(acl1);
+ skipping("POSIX.1e ACLs are not supported on this filesystem");
return;
}
- if (n != 0 && errno == EINVAL) {
+ failure("facl_get(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+
+ if (acl->acl_type != ACLENT_T) {
+ acl_free(acl);
+ acl_free(acl1);
close(fd);
- skipping("This filesystem does not support POSIX.1e ACLs");
+ skipping("POSIX.1e ACLs are not supported on this filesystem");
return;
}
- failure("acl_set_fd(): errno = %d (%s)",
- errno, strerror(errno));
+
+ func = "facl_set()";
+ n = facl_set(fd, acl1);
+#else
+ func = "acl_set_fd()";
+ n = acl_set_fd(fd, acl1);
+#endif
+ acl_free(acl1);
+
+ if (n != 0) {
+#if HAVE_SUN_ACL
+ if (errno == ENOSYS)
+#else
+ if (errno == EOPNOTSUPP || errno == EINVAL)
+#endif
+ {
+ close(fd);
+ skipping("POSIX.1e ACLs are not supported on this filesystem");
+ return;
+ }
+ }
+ failure("%s: errno = %d (%s)", func, errno, strerror(errno));
assertEqualInt(0, n);
+
close(fd);
assertMakeDir("d", 0700);
@@ -371,48 +530,124 @@ DEFINE_TEST(test_acl_freebsd_posix1e_read)
* to read ACLs, resulting in reading the ACL from a like-named
* file in the wrong directory.
*/
- acl2_text = "user::rwx,group::rwx,other::---,user:1:r--,group:15:r--,mask::rwx";
+#if HAVE_SUN_ACL
+ acl2_text = "user::rwx,"
+ "group::rwx,"
+ "other:---,"
+ "user:1:r--,"
+ "group:15:r--,"
+ "mask:rwx";
+ n = acl_fromtext(acl2_text, &acl2);
+ failure("acl_fromtext(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+#else
+ acl2_text = "user::rwx\n"
+ "group::rwx\n"
+ "other::---\n"
+ "user:1:r--\n"
+ "group:15:r--\n"
+ "mask::rwx";
acl2 = acl_from_text(acl2_text);
+ failure("acl_from_text(): errno = %d (%s)", errno, strerror(errno));
assert((void *)acl2 != NULL);
+#endif
fd = open("d/f1", O_WRONLY | O_CREAT | O_EXCL, 0777);
failure("Could not create test file?!");
if (!assert(fd >= 0)) {
acl_free(acl2);
return;
}
+#if HAVE_SUN_ACL
+ func = "facl_set()";
+ n = facl_set(fd, acl2);
+#else
+ func = "acl_set_fd()";
n = acl_set_fd(fd, acl2);
+#endif
acl_free(acl2);
- if (n != 0 && errno == EOPNOTSUPP) {
+ if (n != 0)
close(fd);
- skipping("ACL tests require that ACL support be enabled on the filesystem");
- return;
- }
- if (n != 0 && errno == EINVAL) {
- close(fd);
- skipping("This filesystem does not support POSIX.1e ACLs");
- return;
- }
- failure("acl_set_fd(): errno = %d (%s)",
- errno, strerror(errno));
+ failure("%s: errno = %d (%s)", func, errno, strerror(errno));
assertEqualInt(0, n);
close(fd);
+ /* Create directory d2 with default ACLs */
+ assertMakeDir("d2", 0755);
+
+#if HAVE_SUN_ACL
+ acl3_text = "user::rwx,"
+ "group::r-x,"
+ "other:r-x,"
+ "user:2:r--,"
+ "group:16:-w-,"
+ "mask:rwx,"
+ "default:user::rwx,"
+ "default:user:1:r--,"
+ "default:group::r-x,"
+ "default:group:15:r--,"
+ "default:mask:rwx,"
+ "default:other:r-x";
+ n = acl_fromtext(acl3_text, &acl3);
+ failure("acl_fromtext(): errno = %d (%s)", errno, strerror(errno));
+ assertEqualInt(0, n);
+#else
+ acl3_text = "user::rwx\n"
+ "user:1:r--\n"
+ "group::r-x\n"
+ "group:15:r--\n"
+ "mask::rwx\n"
+ "other::r-x";
+ acl3 = acl_from_text(acl3_text);
+ failure("acl_from_text(): errno = %d (%s)", errno, strerror(errno));
+ assert((void *)acl3 != NULL);
+#endif
+
+#if HAVE_SUN_ACL
+ func = "acl_set()";
+ n = acl_set("d2", acl3);
+#else
+ func = "acl_set_file()";
+ n = acl_set_file("d2", ACL_TYPE_DEFAULT, acl3);
+#endif
+ acl_free(acl3);
+
+ failure("%s: errno = %d (%s)", func, errno, strerror(errno));
+ assertEqualInt(0, n);
+
/* Create a read-from-disk object. */
assert(NULL != (a = archive_read_disk_new()));
assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "."));
assert(NULL != (ae = archive_entry_new()));
+#if HAVE_SUN_ACL
+ flags = ARCHIVE_ENTRY_ACL_TYPE_POSIX1E
+ | ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA
+ | ARCHIVE_ENTRY_ACL_STYLE_SOLARIS;
+ dflags = flags;
+#else
+ flags = ARCHIVE_ENTRY_ACL_TYPE_ACCESS;
+ dflags = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT;
+#endif
+
/* Walk the dir until we see both of the files */
while (ARCHIVE_OK == archive_read_next_header2(a, ae)) {
archive_read_disk_descend(a);
if (strcmp(archive_entry_pathname(ae), "./f1") == 0) {
- assertEqualString(archive_entry_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS), acl1_text);
-
+ acl_text = archive_entry_acl_to_text(ae, NULL, flags);
+ assertEqualString(acl_text, acl1_text);
+ free(acl_text);
} else if (strcmp(archive_entry_pathname(ae), "./d/f1") == 0) {
- assertEqualString(archive_entry_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS), acl2_text);
+ acl_text = archive_entry_acl_to_text(ae, NULL, flags);
+ assertEqualString(acl_text, acl2_text);
+ free(acl_text);
+ } else if (strcmp(archive_entry_pathname(ae), "./d2") == 0) {
+ acl_text = archive_entry_acl_to_text(ae, NULL, dflags);
+ assertEqualString(acl_text, acl3_text);
+ free(acl_text);
}
}
- archive_free(a);
+ archive_entry_free(ae);
+ assertEqualInt(ARCHIVE_OK, archive_free(a));
#endif
}
diff --git a/contrib/libarchive/libarchive/test/test_acl_posix1e.c b/contrib/libarchive/libarchive/test/test_acl_posix1e.c
index 9984d44..01167da 100644
--- a/contrib/libarchive/libarchive/test/test_acl_posix1e.c
+++ b/contrib/libarchive/libarchive/test/test_acl_posix1e.c
@@ -27,21 +27,14 @@ __FBSDID("$FreeBSD: src/lib/libarchive/test/test_acl_basic.c,v 1.6 2008/10/19 00
/*
* Exercise the system-independent portion of the ACL support.
- * Check that archive_entry objects can save and restore POSIX.1e-style ACL data.
+ * Check that archive_entry objects can save and restore POSIX.1e-style
+ * ACL data.
*
* This should work on all systems, regardless of whether local
* filesystems support ACLs or not.
*/
-struct acl_t {
- int type; /* Type of ACL: "access" or "default" */
- int permset; /* Permissions for this class of users. */
- int tag; /* Owner, User, Owning group, group, other, etc. */
- int qual; /* GID or UID of user/group, depending on tag. */
- const char *name; /* Name of user/group, depending on tag. */
-};
-
-static struct acl_t acls0[] = {
+static struct archive_test_acl_t acls0[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
@@ -50,7 +43,7 @@ static struct acl_t acls0[] = {
ARCHIVE_ENTRY_ACL_OTHER, 0, "" },
};
-static struct acl_t acls1[] = {
+static struct archive_test_acl_t acls1[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE,
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
@@ -61,7 +54,7 @@ static struct acl_t acls1[] = {
ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
};
-static struct acl_t acls2[] = {
+static struct archive_test_acl_t acls2[] = {
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTRY_ACL_READ,
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
@@ -80,7 +73,7 @@ static struct acl_t acls2[] = {
* NFS4 entry types; attempts to set these on top of POSIX.1e
* attributes should fail.
*/
-static struct acl_t acls_nfs4[] = {
+static struct archive_test_acl_t acls_nfs4[] = {
/* NFS4 types */
{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ,
ARCHIVE_ENTRY_ACL_USER, 78, "" },
@@ -104,106 +97,6 @@ static struct acl_t acls_nfs4[] = {
ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
};
-static void
-set_acls(struct archive_entry *ae, struct acl_t *acls, int n)
-{
- int i;
-
- archive_entry_acl_clear(ae);
- for (i = 0; i < n; i++) {
- archive_entry_acl_add_entry(ae,
- acls[i].type, acls[i].permset, acls[i].tag, acls[i].qual,
- acls[i].name);
- }
-}
-
-static int
-acl_match(struct acl_t *acl, int type, int permset, int tag, int qual, const char *name)
-{
- if (type != acl->type)
- return (0);
- if (permset != acl->permset)
- return (0);
- if (tag != acl->tag)
- return (0);
- if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ)
- return (1);
- if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ)
- return (1);
- if (tag == ARCHIVE_ENTRY_ACL_OTHER)
- return (1);
- if (qual != acl->qual)
- return (0);
- if (name == NULL) {
- if (acl->name == NULL || acl->name[0] == '\0')
- return (1);
- return (0);
- }
- if (acl->name == NULL) {
- if (name[0] == '\0')
- return (1);
- return (0);
- }
- return (0 == strcmp(name, acl->name));
-}
-
-static void
-compare_acls(struct archive_entry *ae, struct acl_t *acls, int n, int mode)
-{
- int *marker = malloc(sizeof(marker[0]) * n);
- int i;
- int r;
- int type, permset, tag, qual;
- int matched;
- const char *name;
-
- for (i = 0; i < n; i++)
- marker[i] = i;
-
- while (0 == (r = archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name))) {
- for (i = 0, matched = 0; i < n && !matched; i++) {
- if (acl_match(&acls[marker[i]], type, permset,
- tag, qual, name)) {
- /* We found a match; remove it. */
- marker[i] = marker[n - 1];
- n--;
- matched = 1;
- }
- }
- if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ) {
- if (!matched) printf("No match for user_obj perm\n");
- failure("USER_OBJ permset (%02o) != user mode (%02o)",
- permset, 07 & (mode >> 6));
- assert((permset << 6) == (mode & 0700));
- } else if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ) {
- if (!matched) printf("No match for group_obj perm\n");
- failure("GROUP_OBJ permset %02o != group mode %02o",
- permset, 07 & (mode >> 3));
- assert((permset << 3) == (mode & 0070));
- } else if (tag == ARCHIVE_ENTRY_ACL_OTHER) {
- if (!matched) printf("No match for other perm\n");
- failure("OTHER permset (%02o) != other mode (%02o)",
- permset, mode & 07);
- assert((permset << 0) == (mode & 0007));
- } else {
- failure("Could not find match for ACL "
- "(type=%d,permset=%d,tag=%d,qual=%d,name=``%s'')",
- type, permset, tag, qual, name);
- assert(matched == 1);
- }
- }
- assertEqualInt(ARCHIVE_EOF, r);
- assert((mode_t)(mode & 0777) == (archive_entry_mode(ae) & 0777));
- failure("Could not find match for ACL "
- "(type=%d,permset=%d,tag=%d,qual=%d,name=``%s'')",
- acls[marker[0]].type, acls[marker[0]].permset,
- acls[marker[0]].tag, acls[marker[0]].qual, acls[marker[0]].name);
- assert(n == 0); /* Number of ACLs not matched should == 0 */
- free(marker);
-}
-
DEFINE_TEST(test_acl_posix1e)
{
struct archive_entry *ae;
@@ -223,7 +116,7 @@ DEFINE_TEST(test_acl_posix1e)
* triggering unnecessary extensions. It's better to identify
* trivial ACLs at the point they are being read from disk.
*/
- set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
+ archive_test_set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
failure("Basic ACLs shouldn't be stored as extended ACLs");
assert(0 == archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
failure("Basic ACLs should set mode to 0142, not %04o",
@@ -232,19 +125,28 @@ DEFINE_TEST(test_acl_posix1e)
/* With any extended ACL entry, we should read back a full set. */
- set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
+ archive_test_set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
failure("One extended ACL should flag all ACLs to be returned.");
+
+ /* Check that entry contains only POSIX.1e types */
+ assert((archive_entry_acl_types(ae) &
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4) == 0);
+ assert((archive_entry_acl_types(ae) &
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0);
+
assert(4 == archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
- compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]), 0142);
+ archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0142);
failure("Basic ACLs should set mode to 0142, not %04o",
archive_entry_mode(ae)&0777);
assert((archive_entry_mode(ae) & 0777) == 0142);
/* A more extensive set of ACLs. */
- set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
+ archive_test_set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
assertEqualInt(6, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
- compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]), 0543);
+ archive_test_compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0543);
failure("Basic ACLs should set mode to 0543, not %04o",
archive_entry_mode(ae)&0777);
assert((archive_entry_mode(ae) & 0777) == 0543);
@@ -253,7 +155,7 @@ DEFINE_TEST(test_acl_posix1e)
* Check that clearing ACLs gets rid of them all by repeating
* the first test.
*/
- set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
+ archive_test_set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
failure("Basic ACLs shouldn't be stored as extended ACLs");
assert(0 == archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
failure("Basic ACLs should set mode to 0142, not %04o",
@@ -264,9 +166,9 @@ DEFINE_TEST(test_acl_posix1e)
* Different types of malformed ACL entries that should
* fail when added to existing POSIX.1e ACLs.
*/
- set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
+ archive_test_set_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]));
for (i = 0; i < (int)(sizeof(acls_nfs4)/sizeof(acls_nfs4[0])); ++i) {
- struct acl_t *p = &acls_nfs4[i];
+ struct archive_test_acl_t *p = &acls_nfs4[i];
failure("Malformed ACL test #%d", i);
assertEqualInt(ARCHIVE_FAILED,
archive_entry_acl_add_entry(ae,
diff --git a/contrib/libarchive/libarchive/test/test_acl_text.c b/contrib/libarchive/libarchive/test/test_acl_text.c
new file mode 100644
index 0000000..f3d2b10
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_acl_text.c
@@ -0,0 +1,473 @@
+/*-
+ * Copyright (c) 2016 Martin Matuska
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+/*
+ * Test converting ACLs to text, both wide and non-wide
+ *
+ * This should work on all systems, regardless of whether local
+ * filesystems support ACLs or not.
+ */
+
+static struct archive_test_acl_t acls0[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ |
+ ARCHIVE_ENTRY_ACL_WRITE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, 100, "user100" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0,
+ ARCHIVE_ENTRY_ACL_USER, 1000, "user1000" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ |
+ ARCHIVE_ENTRY_ACL_WRITE,
+ ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+ ARCHIVE_ENTRY_ACL_READ |
+ ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, 101, "user101"},
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT,
+ ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_GROUP, 79, "group79" },
+};
+
+static struct archive_test_acl_t acls1[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+ ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY,
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_DELETE_CHILD |
+ ARCHIVE_ENTRY_ACL_DELETE |
+ ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT |
+ ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT |
+ ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY |
+ ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT,
+ ARCHIVE_ENTRY_ACL_USER, 101, "user101" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_ENTRY_INHERITED,
+ ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
+};
+
+const char* acltext[] = {
+ "user::rwx\n"
+ "group::r-x\n"
+ "other::r-x\n"
+ "user:user100:r-x\n"
+ "user:user1000:---\n"
+ "group:group78:rwx\n"
+ "default:user::r-x\n"
+ "default:group::r-x\n"
+ "default:other::---\n"
+ "default:user:user101:r-x\n"
+ "default:group:group79:--x",
+
+ "user::rwx\n"
+ "group::r-x\n"
+ "other::r-x\n"
+ "user:user100:r-x:100\n"
+ "user:user1000:---:1000\n"
+ "group:group78:rwx:78\n"
+ "default:user::r-x\n"
+ "default:group::r-x\n"
+ "default:other::---\n"
+ "default:user:user101:r-x:101\n"
+ "default:group:group79:--x:79",
+
+ "u::rwx\n"
+ "g::r-x\n"
+ "o::r-x\n"
+ "u:user100:r-x:100\n"
+ "u:user1000:---:1000\n"
+ "g:group78:rwx:78\n"
+ "d:user::r-x\n"
+ "d:group::r-x\n"
+ "d:other::---\n"
+ "d:user:user101:r-x:101\n"
+ "d:group:group79:--x:79",
+
+ "user::rwx\n"
+ "group::r-x\n"
+ "other::r-x\n"
+ "user:user100:r-x\n"
+ "user:user1000:---\n"
+ "group:group78:rwx",
+
+ "user::rwx,"
+ "group::r-x,"
+ "other::r-x,"
+ "user:user100:r-x,"
+ "user:user1000:---,"
+ "group:group78:rwx",
+
+ "user::rwx\n"
+ "group::r-x\n"
+ "other::r-x\n"
+ "user:user100:r-x:100\n"
+ "user:user1000:---:1000\n"
+ "group:group78:rwx:78",
+
+ "user::r-x\n"
+ "group::r-x\n"
+ "other::---\n"
+ "user:user101:r-x\n"
+ "group:group79:--x",
+
+ "user::r-x\n"
+ "group::r-x\n"
+ "other::---\n"
+ "user:user101:r-x:101\n"
+ "group:group79:--x:79",
+
+ "default:user::r-x\n"
+ "default:group::r-x\n"
+ "default:other::---\n"
+ "default:user:user101:r-x\n"
+ "default:group:group79:--x",
+
+ "user:user77:rw-p--a-R-c-o-:-------:allow\n"
+ "user:user101:-w-pdD--------:fdin---:deny\n"
+ "group:group78:r-----a-R-c---:------I:allow\n"
+ "owner@:rwxp--aARWcCo-:-------:allow\n"
+ "group@:rw-p--a-R-c---:-------:allow\n"
+ "everyone@:r-----a-R-c--s:-------:allow",
+
+ "user:user77:rw-p--a-R-c-o-:-------:allow:77\n"
+ "user:user101:-w-pdD--------:fdin---:deny:101\n"
+ "group:group78:r-----a-R-c---:------I:allow:78\n"
+ "owner@:rwxp--aARWcCo-:-------:allow\n"
+ "group@:rw-p--a-R-c---:-------:allow\n"
+ "everyone@:r-----a-R-c--s:-------:allow",
+
+ "user:user77:rwpaRco::allow:77\n"
+ "user:user101:wpdD:fdin:deny:101\n"
+ "group:group78:raRc:I:allow:78\n"
+ "owner@:rwxpaARWcCo::allow\n"
+ "group@:rwpaRc::allow\n"
+ "everyone@:raRcs::allow"
+};
+
+static wchar_t *
+convert_s_to_ws(const char *s)
+{
+ size_t len;
+ wchar_t *ws = NULL;
+
+ if (s != NULL) {
+ len = strlen(s) + 1;
+ ws = malloc(len * sizeof(wchar_t));
+ assert(mbstowcs(ws, s, len) != (size_t)-1);
+ }
+
+ return (ws);
+}
+
+static void
+compare_acl_text(struct archive_entry *ae, int flags, const char *s)
+{
+ char *text;
+ wchar_t *wtext;
+ wchar_t *ws;
+ ssize_t slen;
+
+ ws = convert_s_to_ws(s);
+
+ text = archive_entry_acl_to_text(ae, &slen, flags);
+ assertEqualString(text, s);
+ if (text != NULL)
+ assertEqualInt(strlen(text), slen);
+ wtext = archive_entry_acl_to_text_w(ae, &slen, flags);
+ assertEqualWString(wtext, ws);
+ if (wtext != NULL) {
+ assertEqualInt(wcslen(wtext), slen);
+ }
+ free(text);
+ free(wtext);
+ free(ws);
+}
+
+DEFINE_TEST(test_acl_from_text)
+{
+ struct archive_entry *ae;
+ wchar_t *ws = NULL;
+
+ /* Create an empty archive_entry. */
+ assert((ae = archive_entry_new()) != NULL);
+
+ /* 1a. Read POSIX.1e access ACLs from text */
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text(ae, acltext[5],
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755);
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
+
+ /* 1b. Now read POSIX.1e default ACLs and append them */
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text(ae, acltext[7],
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
+ assertEqualInt(11, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_entry_acl_clear(ae);
+
+ /* 1a and 1b with wide strings */
+ ws = convert_s_to_ws(acltext[5]);
+
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text_w(ae, ws,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0755);
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
+
+ free(ws);
+ ws = convert_s_to_ws(acltext[7]);
+
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text_w(ae, ws,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
+ assertEqualInt(11, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_entry_acl_clear(ae);
+
+ /* 2. Read POSIX.1e default ACLs from text */
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text(ae, acltext[7],
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0);
+ assertEqualInt(5, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
+ archive_entry_acl_clear(ae);
+
+ /* ws is still acltext[7] */
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text_w(ae, ws,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0);
+ assertEqualInt(5, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
+ archive_entry_acl_clear(ae);
+
+ /* 3. Read POSIX.1e access and default ACLs from text */
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text(ae, acltext[1],
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
+ assertEqualInt(11, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_entry_acl_clear(ae);
+
+ free(ws);
+ ws = convert_s_to_ws(acltext[1]);
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text_w(ae, ws,
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
+ assertEqualInt(11, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_entry_acl_clear(ae);
+
+ /* 4. Read POSIX.1e access and default ACLs from text (short form) */
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text(ae, acltext[2],
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
+ assertEqualInt(11, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_entry_acl_clear(ae);
+
+ free(ws);
+ ws = convert_s_to_ws(acltext[2]);
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text_w(ae, ws,
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E, 0755);
+ assertEqualInt(11, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_POSIX1E));
+ archive_entry_acl_clear(ae);
+
+ /* 5. Read NFSv4 ACLs from text */
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text(ae, acltext[10],
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_entry_acl_clear(ae);
+
+ free(ws);
+ ws = convert_s_to_ws(acltext[10]);
+
+ assertEqualInt(ARCHIVE_OK,
+ archive_entry_acl_from_text_w(ae, ws,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_entry_acl_clear(ae);
+
+ free(ws);
+ archive_entry_free(ae);
+}
+
+DEFINE_TEST(test_acl_to_text)
+{
+ struct archive_entry *ae;
+
+ /* Create an empty archive_entry. */
+ assert((ae = archive_entry_new()) != NULL);
+
+ /* Write POSIX.1e ACLs */
+ archive_test_set_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]));
+
+ /* No flags should give output like getfacl(1) on linux */
+ compare_acl_text(ae, 0, acltext[0]);
+
+ /* This should give the same output as previous test */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, acltext[0]);
+
+ /* This should give the same output as previous two tests */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
+ ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT, acltext[0]);
+
+ /* POSIX.1e access and default ACLs with appended ID */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[1]);
+
+ /* POSIX.1e access acls only, like getfacl(1) on FreeBSD */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS, acltext[3]);
+
+ /* POSIX.1e access acls separated with comma */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
+ ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA,
+ acltext[4]);
+
+ /* POSIX.1e access acls with appended user or group ID */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS |
+ ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[5]);
+
+ /* POSIX.1e default acls */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, acltext[6]);
+
+ /* POSIX.1e default acls with appended user or group ID */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
+ ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[7]);
+
+ /* POSIX.1e default acls prefixed with default: */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT |
+ ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT, acltext[8]);
+
+ /* Write NFSv4 ACLs */
+ archive_test_set_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]));
+
+ /* NFSv4 ACLs like getfacl(1) on FreeBSD */
+ compare_acl_text(ae, 0, acltext[9]);
+
+ /* NFSv4 ACLs like "getfacl -i" on FreeBSD */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID, acltext[10]);
+
+ /* NFSv4 ACLs like "getfacl -i" on FreeBSD with stripped minus chars */
+ compare_acl_text(ae, ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID |
+ ARCHIVE_ENTRY_ACL_STYLE_COMPACT, acltext[11]);
+
+ archive_entry_free(ae);
+}
diff --git a/contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c b/contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c
index 68dec10..0ce5a76 100644
--- a/contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c
+++ b/contrib/libarchive/libarchive/test/test_archive_read_add_passphrase.c
@@ -191,7 +191,7 @@ DEFINE_TEST(test_archive_read_add_passphrase_set_callback3)
/* Fist call, we should get "passCallBack" as a passphrase. */
assertEqualString("passCallBack", __archive_read_next_passphrase(ar));
__archive_read_reset_passphrase(ar);
- /* After reset passphrase, we should get "passCallBack"passphrase. */
+ /* After reset passphrase, we should get "passCallBack" passphrase. */
assertEqualString("passCallBack", __archive_read_next_passphrase(ar));
/* Second call, we should get NULL which means all the passphrases
* are passed already. */
diff --git a/contrib/libarchive/libarchive/test/test_archive_string.c b/contrib/libarchive/libarchive/test/test_archive_string.c
index 9e3f907..7fa743b 100644
--- a/contrib/libarchive/libarchive/test/test_archive_string.c
+++ b/contrib/libarchive/libarchive/test/test_archive_string.c
@@ -67,6 +67,8 @@ test_archive_string_ensure(void)
assert(&s == archive_string_ensure(&s, EXTENT + 1));
assertNonNULLString(0, 2 * EXTENT, s);
+
+ archive_string_free(&s);
}
static void
@@ -92,6 +94,8 @@ test_archive_strcat(void)
/* non-empty target, non-empty source */
assert(&s == archive_strcat(&s, "baz"));
assertExactString(8, EXTENT, "fubarbaz", s);
+
+ archive_string_free(&s);
}
static void
@@ -109,6 +113,8 @@ test_archive_strappend_char(void)
/* non-empty target */
archive_strappend_char(&s, 'Y');
assertExactString(2, EXTENT, "XY", s);
+
+ archive_string_free(&s);
}
/* archive_strnXXX() tests focus on length handling.
@@ -134,6 +140,8 @@ test_archive_strncat(void)
/* long read is ok too! */
assert(&s == archive_strncat(&s, "snafu", 8));
assertExactString(13, EXTENT, "snafubarsnafu", s);
+
+ archive_string_free(&s);
}
static void
@@ -155,6 +163,8 @@ test_archive_strncpy(void)
/* long read is ok too! */
assert(&s == archive_strncpy(&s, "snafu", 8));
assertExactString(5, EXTENT, "snafu", s);
+
+ archive_string_free(&s);
}
static void
@@ -176,6 +186,8 @@ test_archive_strcpy(void)
/* dirty target, empty source */
assert(&s == archive_strcpy(&s, ""));
assertExactString(0, EXTENT, "", s);
+
+ archive_string_free(&s);
}
static void
@@ -222,6 +234,11 @@ test_archive_string_concat(void)
archive_string_concat(&t, &s);
assertExactString(5, EXTENT, "snafu", s);
assertExactString(5, EXTENT, "snafu", t);
+
+ archive_string_free(&v);
+ archive_string_free(&u);
+ archive_string_free(&t);
+ archive_string_free(&s);
}
static void
@@ -274,6 +291,11 @@ test_archive_string_copy(void)
archive_string_copy(&t, &s);
assertExactString(5, EXTENT, "fubar", s);
assertExactString(5, EXTENT, "fubar", t);
+
+ archive_string_free(&v);
+ archive_string_free(&u);
+ archive_string_free(&t);
+ archive_string_free(&s);
}
static void
@@ -328,6 +350,8 @@ test_archive_string_sprintf(void)
archive_string_empty(&s);
archive_string_sprintf(&s, "%d", 1234567890);
assertExactString(10, 8 * EXTENT, "1234567890", s);
+
+ archive_string_free(&s);
}
DEFINE_TEST(test_archive_string)
diff --git a/contrib/libarchive/libarchive/test/test_compat_gtar.c b/contrib/libarchive/libarchive/test/test_compat_gtar.c
index b33e6ab..975b824 100644
--- a/contrib/libarchive/libarchive/test/test_compat_gtar.c
+++ b/contrib/libarchive/libarchive/test/test_compat_gtar.c
@@ -142,6 +142,8 @@ test_compat_gtar_2(void)
assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_NONE);
assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_GNUTAR);
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
DEFINE_TEST(test_compat_gtar)
diff --git a/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c b/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c
index d4654d0..3d063c1 100644
--- a/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c
+++ b/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2003-2009 Tim Kientzle
+ * Copyright (c) 2016 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,101 +27,239 @@
__FBSDID("$FreeBSD$");
/*
- * Exercise support for reading Solaris-style ACL data
- * from tar archives.
+ * Verify reading entries with POSIX.1e and NFSv4 ACLs from archives created
+ * with Solaris tar.
*
- * This should work on all systems, regardless of whether local
- * filesystems support ACLs or not.
+ * This should work on all systems, regardless of whether local filesystems
+ * support ACLs or not.
*/
+static struct archive_test_acl_t acls0[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_WRITE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 71, "lp" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, 666, "666" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, 1000, "1000" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_MASK, -1, ""},
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+};
+
+static struct archive_test_acl_t acls1[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, 2, "bin" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP, 3, "sys" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_MASK, -1, ""},
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+};
+
+static struct archive_test_acl_t acls2[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1 ,"" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, 2, "bin" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP, 3, "sys" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_MASK, -1, ""},
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+};
+
+static struct archive_test_acl_t acls3[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP, 12, "daemon" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP, 2, "bin" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER, 4, "adm" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
+};
+
+static struct archive_test_acl_t acls4[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE |
+ ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT |
+ ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT |
+ ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY,
+ ARCHIVE_ENTRY_ACL_USER, 1100, "1100" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE |
+ ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT |
+ ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT,
+ ARCHIVE_ENTRY_ACL_GROUP, 4, "adm" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_DELETE_CHILD |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
+};
+
DEFINE_TEST(test_compat_solaris_tar_acl)
{
+ char name[] = "test_compat_solaris_tar_acl.tar";
struct archive *a;
struct archive_entry *ae;
- const char *reference1 = "test_compat_solaris_tar_acl.tar";
- int type, permset, tag, qual;
- const char *name;
- /* Sample file generated on Solaris 10 */
- extract_reference_file(reference1);
+ /* Read archive file */
assert(NULL != (a = archive_read_new()));
- assertA(0 == archive_read_support_format_all(a));
- assertA(0 == archive_read_support_filter_all(a));
- assertA(0 == archive_read_open_filename(a, reference1, 512));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ extract_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name,
+ 10240));
- /* Archive has 1 entry with some ACLs set on it. */
+ /* First item has access ACLs */
assertA(0 == archive_read_next_header(a, &ae));
+ failure("One extended ACL should flag all ACLs to be returned.");
+ assertEqualInt(7, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0644);
failure("Basic ACLs should set mode to 0644, not %04o",
archive_entry_mode(ae)&0777);
- assertEqualInt((archive_entry_mode(ae) & 0777), 0644);
- assertEqualInt(7, archive_entry_acl_reset(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
- assertEqualInt(ARCHIVE_OK, archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name));
- assertEqualInt(ARCHIVE_ENTRY_ACL_TYPE_ACCESS, type);
- assertEqualInt(006, permset);
- assertEqualInt(ARCHIVE_ENTRY_ACL_USER_OBJ, tag);
- assertEqualInt(-1, qual);
- assert(name == NULL);
-
- assertEqualInt(ARCHIVE_OK, archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name));
- assertEqualInt(ARCHIVE_ENTRY_ACL_TYPE_ACCESS, type);
- assertEqualInt(004, permset);
- assertEqualInt(ARCHIVE_ENTRY_ACL_GROUP_OBJ, tag);
- assertEqualInt(-1, qual);
- assert(name == NULL);
+ assert((archive_entry_mode(ae) & 0777) == 0644);
- assertEqualInt(ARCHIVE_OK, archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name));
- assertEqualInt(ARCHIVE_ENTRY_ACL_TYPE_ACCESS, type);
- assertEqualInt(004, permset);
- assertEqualInt(ARCHIVE_ENTRY_ACL_OTHER, tag);
- assertEqualInt(-1, qual);
- assert(name == NULL);
-
- assertEqualInt(ARCHIVE_OK, archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name));
- assertEqualInt(ARCHIVE_ENTRY_ACL_TYPE_ACCESS, type);
- assertEqualInt(001, permset);
- assertEqualInt(ARCHIVE_ENTRY_ACL_USER, tag);
- assertEqualInt(71, qual);
- assertEqualString(name, "lp");
-
- assertEqualInt(ARCHIVE_OK, archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name));
- assertEqualInt(ARCHIVE_ENTRY_ACL_TYPE_ACCESS, type);
- assertEqualInt(004, permset);
- assertEqualInt(ARCHIVE_ENTRY_ACL_USER, tag);
- assertEqualInt(666, qual);
- assertEqualString(name, "666");
-
- assertEqualInt(ARCHIVE_OK, archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name));
- assertEqualInt(ARCHIVE_ENTRY_ACL_TYPE_ACCESS, type);
- assertEqualInt(007, permset);
- assertEqualInt(ARCHIVE_ENTRY_ACL_USER, tag);
- assertEqualInt(1000, qual);
- assertEqualString(name, "trasz");
+ /* Second item has default and access ACLs */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
+ archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0750);
+ failure("Basic ACLs should set mode to 0750, not %04o",
+ archive_entry_mode(ae)&0777);
+ assert((archive_entry_mode(ae) & 0777) == 0750);
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
+ archive_test_compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0750);
- assertEqualInt(ARCHIVE_OK, archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name));
- assertEqualInt(ARCHIVE_ENTRY_ACL_TYPE_ACCESS, type);
- assertEqualInt(004, permset);
- assertEqualInt(ARCHIVE_ENTRY_ACL_MASK, tag);
- assertEqualInt(-1, qual);
- assertEqualString(name, NULL);
+ /* Third item has NFS4 ACLs */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_test_compare_acls(ae, acls3, sizeof(acls3)/sizeof(acls3[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
- assertEqualInt(ARCHIVE_EOF, archive_entry_acl_next(ae,
- ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
- &type, &permset, &tag, &qual, &name));
+ /* Fourth item has NFS4 ACLs and inheritance flags */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(5, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_test_compare_acls(ae, acls4, sizeof(acls4)/sizeof(acls0[4]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
/* Close the archive. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
diff --git a/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.tar.uu b/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.tar.uu
index 229b335..028dd61 100644
--- a/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.tar.uu
+++ b/contrib/libarchive/libarchive/test/test_compat_solaris_tar_acl.tar.uu
@@ -1,61 +1,163 @@
-$FreeBSD$
-begin 644 test_acl_solaris.tar
-M9FEL92UW:71H+7!O<VEX+6%C;',`````````````````````````````````
-M````````````````````````````````````````````````````````````
-M`````````````#`P,#`V-#0`,#`P,3<U,``P,#`P,#`P`#`P,#`P,#`P,30T
-M`#$Q,3<T-C`T,34W`#`P,34Q-S8`00``````````````````````````````
-M````````````````````````````````````````````````````````````
-M``````````````````````````````````````````!U<W1A<@`P,'1R87-Z
-M````````````````````````````````````<F]O=```````````````````
-M```````````````````P,#`P,C$P`#`P,#`P,3``````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M```````````````````````Q,#`P,#`W`'5S97(Z.G)W+2QU<V5R.FQP.BTM
-M>#HW,2QU<V5R.C8V-CIR+2TZ-C8V+'5S97(Z=')A<WHZ<G=X.C$P,#`L9W)O
-M=7`Z.G(M+2QM87-K.G(M+2QO=&AE<CIR+2T``````````3````````/-@```
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````!%&8`````````&L`````,3`P,#`P-P!U
+begin 644 test_compat_solaris_tar_acl.tar
+M9FEL92UW:71H+7!O<VEX+6%C;',
+M
+M # P,# V-#0 ,# P,3<U, P,# P,# P # P,# P,# P,30S
+M #$Q,3<T-C T,34W # P,30Q,C$ 00
+M
+M !U<W1A<@ P,
+M <F]O=
+M P,# P-#$T # P,# P,#,
+M
+M
+M
+M Q,# P,# W '5S97(Z.G)W+2QU<V5R.FQP.BTM
+M>#HW,2QU<V5R.C8V-CIR+2TZ-C8V+'5S97(Z,3 P,#IR=W@Z,3 P,"QG<F]U
+M<#HZ<BTM+&UA<VLZ<BTM+&]T:&5R.G(M+0 # !
+M
+M
+M
+M
+M
+M
+M (Q@@( &L ,3 P,# P-P!U
M<V5R.CIR=RTL=7-E<CIL<#HM+7@Z-S$L=7-E<CHV-C8Z<BTM.C8V-BQU<V5R
-M.G1R87-Z.G)W>#HQ,#`P+&=R;W5P.CIR+2TL;6%S:SIR+69I;&4M=VET:"UP
-M;W-I>"UA8VQS````````````````````````````````````````````````
-M```````````````````````````````````````````````````````````P
-M,#`P-C0T`#`P,#$W-3``,#`P,#`P,``P,#`P,#`P,#`P,``Q,3$W-#8P-#$U
-M-P`P,#$U,30T`#``````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````=7-T87(`,#!T<F%S>@``````````````
-M`````````````````````')O;W0`````````````````````````````````
-M````,#`P,#(Q,``P,#`P,#$P````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-M````````````````````````````````````````````````````````````
-H````````````````````````````````````````````````````````
-`
+M.C$P,# Z<G=X.C$P,# L9W)O=7 Z.G(M+2QM87-K.G(M+69I;&4M=VET:"UP
+M;W-I>"UA8VQS
+M P
+M,# P-C0T # P,#$W-3 ,# P,# P, P,# P,# P,# P, Q,3$W-#8P-#$U
+M-P P,#$T,#<P #
+M
+M =7-T87( ,#
+M ')O;W0
+M ,# P,#0Q- P,# P,# S
+M
+M
+M
+M 9&ER+7=I=&@M<&]S:7@M86-L<R\
+M
+M # P,# W-3 ,# P,3<U, P,# P,# P # P,# P
+M,# P,S P #$S,#,V-3$R,C4T # P,30P,C, 00
+M
+M !U<W1A<@ P
+M, <F]O=
+M P,# P-#$T # P,# P,#,
+M
+M
+M
+M Q,# P,#$T '5S97(Z.G)W>"QU<V5R
+M.F)I;CIR=W@Z,BQG<F]U<#HZ<BUX+&=R;W5P.G-Y<SIR+7@Z,RQM87-K.G(M
+M>"QO=&AE<CHM+2TL9&5F875L='5S97(Z.G)W>"QD969A=6QT=7-E<CIB:6XZ
+M<G=X.C(L9&5F875L=&=R;W5P.CIR+7@L9&5F875L=&=R;W5P.G-Y<SIR+7@Z
+M,RQD969A=6QT;6%S:SIR=W@L9&5F875L=&]T:&5R.BTM+0 @ #C%
+M" @
+M
+M
+M
+M
+M
+M &1I<BUW
+M:71H+7!O<VEX+6%C;',O
+M
+M P,# P-S4P # P,#$W-3 ,# P,# P, P,# P,# P,# P, Q,S S
+M-C4Q,C(U- P,#$T,# T #4
+M
+M =7-T87( ,#
+M ')O;W0
+M ,# P,#0Q- P,# P,# S
+M
+M
+M
+M 9FEL92UW:71H+6YF<W8T+6%C;',
+M
+M # P,# V-# ,# P,3<U, P,# P,# P
+M # P,# P,# P,S8T #$S,#,V-3$S-C0Q # P,30P,34 00
+M
+M !U
+M<W1A<@ P, <F]O=
+M P,# P-#$T # R,# P,#(
+M
+M
+M
+M S,# P,# V &=R;W5P.F1A
+M96UO;CIR=WAP+2UA05)78T-O<SHM+2TM+2TM.F1E;GDZ,3(L9W)O=7 Z8FEN
+M.G)W>' M+2TM+2TM+2US.BTM+2TM+2TZ86QL;W<Z,BQU<V5R.F%D;3IR+2TM
+M+2UA+5(M8RTM<SHM+2TM+2TM.F%L;&]W.C0L;W=N97) .G)W+7 M+6%!4E=C
+M0V]S.BTM+2TM+2TZ86QL;W<L9W)O=7! .G(M+2TM+6$M4BUC+2US.BTM+2TM
+M+2TZ86QL;W<L979E<GEO;F5 .BTM+2TM+6$M4BUC+2US.BTM+2TM+2TZ86QL
+M;W< &@
+M
+M F-8(" #[ #,P,# P,#8
+M9W)O=7 Z9&%E;6]N.G)W>' M+6%!4E=C0V]S.BTM+2TM+2TZ9&5N>3HQ,BQG
+M<F]U<#IB:6XZ<G=X<"TM+2TM+2TM+7,Z+2TM+2TM+3IA;&QO=SHR+'5S97(Z
+M861M.G(M+2TM+6$M4BUC+2US.BTM+2TM+2TZ86QL;W<Z-"QO=VYE<D Z<G<M
+M<&9I;&4M=VET:"UN9G-V-"UA8VQS
+M
+M P,# P-C0P # P,#$W-3 ,# P,# P, P,# P,# P,# P
+M, Q,S S-C4Q,S8T,0 P,#$S-S4W #
+M
+M =7-T87( ,#
+M ')O;W0
+M ,# P,#0Q- P,C P,# R
+M
+M
+M
+M 9&ER+7=I=&@M;F9S=C0M86-L<R\
+M
+M # P,# W-3 ,# P,# P, P
+M,# P,# P # P,# P,# P,S$T #$S,#,V-3$S-S,U # P,30V,C, 00
+M
+M
+M !U<W1A<@ P,')O;W0
+M<F]O= P,# P-#$T # R,# P
+M,#(
+M
+M
+M S,# P,# U '5S
+M97(Z,3$P,#IR=WAP+2UA05)78T-O<SIF9&DM+2TM.F%L;&]W.C$Q,# L9W)O
+M=7 Z861M.G(M+2TM+6$M4BUC+2US.F9D+2TM+2TZ86QL;W<Z-"QO=VYE<D Z
+M<G=X<"U$84%25V-#;W,Z+2TM+2TM+3IA;&QO=RQG<F]U<$ Z<BUX+2TM82U2
+M+6,M+7,Z+2TM+2TM+3IA;&QO=RQE=F5R>6]N94 Z+2TM+2TM82U2+6,M+7,Z
+M+2TM+2TM+3IA;&QO=P 4
+M
+M "HUP@( -, ,S P,# P-0!U<V5R.C$Q,# Z<G=X
+M<"TM84%25V-#;W,Z9F1I+2TM+3IA;&QO=SHQ,3 P+&=R;W5P.F%D;3IR+2TM
+M+2UA+5(M8RTM<SIF9"TM+2TM.F%L;&]W.C0L;W=N97) .G)W>' M1&%!4E=C
+M0V]S.BTM+2TM+2TZ86QL;W<L9W)O=7! .G(M>"TM+6$M4BUC+2US.BTM+2TM
+M+2TZ86QL;W<L979E<GEO;F5 .BTM+2TM+6$M4BUC+2US.BTM+2TM+2TZ86QL
+M;W< &1I<BUW:71H+6YF<W8T+6%C;',O
+M
+M P,# P-S4P # P,# P,# ,# P,# P, P,# P
+M,# P,# P, Q,S S-C4Q,S<S-0 P,#$T-3<W #4
+M
+M =7-T87(
+M,#!R;V]T ')O;W0
+M ,# P,#0Q- P,C P,# R
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+M
+-
+
end
diff --git a/contrib/libarchive/libarchive/test/test_compat_star_acl.c b/contrib/libarchive/libarchive/test/test_compat_star_acl.c
new file mode 100644
index 0000000..f2a78b2
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_compat_star_acl.c
@@ -0,0 +1,321 @@
+/*-
+ * Copyright (c) 2003-2007 Tim Kientzle
+ * Copyright (c) 2016 Martin Matuska
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "test.h"
+__FBSDID("$FreeBSD$");
+
+/*
+ * Verify reading entries with POSIX.1e and NFSv4 ACLs from archives created
+ * by star.
+ *
+ * This should work on all systems, regardless of whether local filesystems
+ * support ACLs or not.
+ */
+
+static struct archive_test_acl_t acls0[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, -1, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_MASK, -1, ""},
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_WRITE,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+};
+
+static struct archive_test_acl_t acls1[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, -1, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0,
+ ARCHIVE_ENTRY_ACL_USER, -1, "user78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0007,
+ ARCHIVE_ENTRY_ACL_GROUP, -1, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0007,
+ ARCHIVE_ENTRY_ACL_MASK, -1, ""},
+ { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+};
+
+static struct archive_test_acl_t acls2[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, -1 ,"" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_USER, -1, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_READ,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_GROUP, -1, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_READ | ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_MASK, -1, ""},
+ { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_WRITE,
+ ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+};
+
+static struct archive_test_acl_t acls3[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
+};
+
+static struct archive_test_acl_t acls4[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE |
+ ARCHIVE_ENTRY_ACL_ENTRY_INHERITED,
+ ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE,
+ ARCHIVE_ENTRY_ACL_USER, 78, "user78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY,
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+ ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
+};
+
+static struct archive_test_acl_t acls5[] = {
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_USER_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE |
+ ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT |
+ ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT,
+ ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_GROUP_OBJ, 0, "" },
+ { ARCHIVE_ENTRY_ACL_TYPE_DENY,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_WRITE_DATA |
+ ARCHIVE_ENTRY_ACL_APPEND_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_DELETE |
+ ARCHIVE_ENTRY_ACL_DELETE_CHILD |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_ACL |
+ ARCHIVE_ENTRY_ACL_WRITE_OWNER |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE |
+ ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT |
+ ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT,
+ ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+ { ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+ ARCHIVE_ENTRY_ACL_READ_DATA |
+ ARCHIVE_ENTRY_ACL_EXECUTE |
+ ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES |
+ ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS |
+ ARCHIVE_ENTRY_ACL_READ_ACL |
+ ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+ ARCHIVE_ENTRY_ACL_EVERYONE, 0, "" },
+};
+
+DEFINE_TEST(test_compat_star_acl_posix1e)
+{
+ char name[] = "test_compat_star_acl_posix1e.tar";
+ struct archive *a;
+ struct archive_entry *ae;
+
+ /* Read archive file */
+ assert(NULL != (a = archive_read_new()));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ extract_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name,
+ 10240));
+
+ /* First item has a few ACLs */
+ assertA(0 == archive_read_next_header(a, &ae));
+ failure("One extended ACL should flag all ACLs to be returned.");
+ assertEqualInt(5, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
+ archive_test_compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0142);
+ failure("Basic ACLs should set mode to 0142, not %04o",
+ archive_entry_mode(ae)&0777);
+ assert((archive_entry_mode(ae) & 0777) == 0142);
+
+ /* Second item has pretty extensive ACLs */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(7, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
+ archive_test_compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0543);
+ failure("Basic ACLs should set mode to 0543, not %04o",
+ archive_entry_mode(ae)&0777);
+ assert((archive_entry_mode(ae) & 0777) == 0543);
+
+ /* Third item has default ACLs */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
+ archive_test_compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, 0142);
+ failure("Basic ACLs should set mode to 0142, not %04o",
+ archive_entry_mode(ae)&0777);
+ assert((archive_entry_mode(ae) & 0777) == 0142);
+
+ /* Close the archive. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_compat_star_acl_nfs4)
+{
+ char name[] = "test_compat_star_acl_nfs4.tar";
+ struct archive *a;
+ struct archive_entry *ae;
+
+ /* Read archive file */
+ assert(NULL != (a = archive_read_new()));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+ extract_reference_file(name);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 10240
+));
+
+ /* First item has NFS4 ACLs mirroring file mode */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(3, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_ALLOW));
+ archive_test_compare_acls(ae, acls3, sizeof(acls3)/sizeof(acls3[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, 0);
+
+ /* Second item has has fine-grained NFS4 ACLs */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(6, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_test_compare_acls(ae, acls4, sizeof(acls4)/sizeof(acls0[4]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
+
+ /* Third item has file and directory inheritance NFS4 ACLs */
+ assertA(0 == archive_read_next_header(a, &ae));
+ assertEqualInt(5, archive_entry_acl_reset(ae,
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4));
+ archive_test_compare_acls(ae, acls5, sizeof(acls5)/sizeof(acls5[0]),
+ ARCHIVE_ENTRY_ACL_TYPE_NFS4, 0);
+
+ /* Close the archive. */
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_compat_star_acl_nfs4.tar.uu b/contrib/libarchive/libarchive/test/test_compat_star_acl_nfs4.tar.uu
new file mode 100644
index 0000000..79b228e
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_compat_star_acl_nfs4.tar.uu
@@ -0,0 +1,231 @@
+begin 644 test_compat_star_acl_nfs4.tar
+M+B\N+T!087A(96%D97(`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#`V,#`@,#`P,#`P,"`P,#`P,#`P(#`P,#`P,#`P,C<R
+M(#`P,#`P,#`P,#`P(#`P,38P-S0@9P``````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````!U<W1A<@`P,')O;W0`
+M````````````````````````````````````=VAE96P`````````````````
+M```````````````````P,#`P,#`P(#`P,#`P,#`@````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````P,#`P,#`P,#`P,"`P,#`P,#`P
+M,#`P,"`````````````````U-R!30TA)3%DN<F5L96%S93US=&%R(#$N-2XS
+M("AA;60V-"UU;FMN;W=N+69R965B<V0Q,2XP*0HR-R!30TA)3%DN87)C:'1Y
+M<&4]97AU<W1A<@HT-R!30TA)3%DN=F]L:&1R+F1U;7!D871E/3$T-SDQ-C<W
+M,C<N,38W,C(U,C@Q"C(U(%-#2$E,62YV;VQH9'(N=F]L;F\],0HS,"!30TA)
+M3%DN=F]L:&1R+F)L;V-K<VEZ93TR,`H`````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````"XO+B]`4&%X2&5A
+M9&5R````````````````````````````````````````````````````````
+M```````````````````````````````````````````````````````````P
+M,#`P-C`P(#`P,#`P,#`@,#`P,#`P,"`P,#`P,#`P,#,S-"`P,#`P,#`P,#`P
+M,"`P,#$V,3$T('@`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````=7-T87(`,#!R;V]T````````````````
+M`````````````````````'=H965L````````````````````````````````
+M````,#`P,#`P,"`P,#`P,#`P(```````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````,#`P,#`P,#`P,#`@,#`P,#`P,#`P,#`@````````
+M````````,S`@871I;64],30W.3$Q.34U-"XP-#,U-#DP,#`*,S`@8W1I;64]
+M,30W.3$Q.3DQ,BXY,SDQ-C@P,#`*,S`@;71I;64],30W.3$Q.34U-"XP-#,U
+M-#DP,#`*,3,P(%-#2$E,62YA8VPN86-E/6]W;F5R0#IR=WAP+2UA05)78T-O
+M<SHM+2TM+2TM.F%L;&]W+&=R;W5P0#IR=RUP+2UA+5(M8RTM<SHM+2TM+2TM
+M.F%L;&]W+&5V97)Y;VYE0#IR+2TM+2UA+5(M8RTM<SHM+2TM+2TM.F%L;&]W
+M"@``````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````!F:6QE,0``````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````,#`P,#<V-"`P,#`P
+M,#`P(#`P,#`P,#`@,#`P,#`P,#`P,#`@,3,P,3(S,3$S,#(@,#`Q-#8S-B`P
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````'5S=&%R`#`P<F]O=```````````````````````````````
+M``````!W:&5E;````````````````````````````````````#`P,#`P,#`@
+M,#`P,#`P,"``````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````#$S,#$R,S$Q,S`R(#$S,#$R,S$R,#4P(````````````````"XO+B]`
+M4&%X2&5A9&5R````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````P,#`P-C`P(#`P,#`P,#`@,#`P,#`P,"`P,#`P,#`P,#4T,"`P,#`P
+M,#`P,#`P,"`P,#$V,3$S('@`````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````=7-T87(`,#!R;V]T````````
+M`````````````````````````````'=H965L````````````````````````
+M````````````,#`P,#`P,"`P,#`P,#`P(```````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````,#`P,#`P,#`P,#`@,#`P,#`P,#`P,#`@
+M````````````````,S`@871I;64],30W.3$Q.34U-2XR-C<P,3@P,#`*,S`@
+M8W1I;64],30W.3$V,34Y."XY,SDV-#8P,#`*,S`@;71I;64],30W.3$Q.34U
+M-2XR-C<P,3@P,#`*,C8R(%-#2$E,62YA8VPN86-E/75S97(Z=7-E<C<X.G)W
+M>"TM+2TM+2TM+2TM.BTM+2TM+2TZ9&5N>3HW."QG<F]U<#IG<F]U<#<X.BUW
+M+7`M+2U!+5<M0V\M.BTM+2TM+2TZ9&5N>3HW."QU<V5R.G5S97(W-SIR+2TM
+M+2UA+5(M8RTM<SHM+2TM+2U).F%L;&]W.C<W+&]W;F5R0#IR=RUP+2UA05)7
+M8T-O<SHM+2TM+2TM.F%L;&]W+&=R;W5P0#IR=RUP+2UA+5(M8RTM<SHM+2TM
+M+2TM.F%L;&]W+&5V97)Y;VYE0#IR+2TM+2UA+5(M8RTM<SHM+2TM+2TM.F%L
+M;&]W"@``````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````!F:6QE,@``````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````,#`P,#8V
+M-"`P,#`P,#`P(#`P,#`P,#`@,#`P,#`P,#`P,#`@,3,P,3(S,3$S,#,@,#`Q
+M-#8U-R`P````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````'5S=&%R`#`P<F]O=```````````````````````
+M``````````````!W:&5E;````````````````````````````````````#`P
+M,#`P,#`@,#`P,#`P,"``````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#$S,#$R,S$Q,S`S(#$S,#$R-#,S,S<V(```````````````
+M`"XO+B]`4&%X2&5A9&5R````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````P,#`P-C`P(#`P,#`P,#`@,#`P,#`P,"`P,#`P,#`P,#0V
+M-2`P,#`P,#`P,#`P,"`P,#$V,3(Q('@`````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````=7-T87(`,#!R;V]T
+M`````````````````````````````````````'=H965L````````````````
+M````````````````````,#`P,#`P,"`P,#`P,#`P(```````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````,#`P,#`P,#`P,#`@,#`P,#`P
+M,#`P,#`@````````````````,S`@871I;64],30W.3$V-S0Y-2XV.#<X-C8P
+M,#`*,S`@8W1I;64],30W.3$V-S<R,RXT-#`X-C<P,#`*,S`@;71I;64],30W
+M.3$R,#8W."XT-#$U.#`P,#`*,C$Y(%-#2$E,62YA8VPN86-E/6=R;W5P.F=R
+M;W5P-S@Z<G=X<$1D84%25V-#;W,Z9F0M+2TM+3ID96YY.C<X+'5S97(Z=7-E
+M<C<W.G(M+2TM+6$M4BUC+2US.F9D+2TM+2TZ86QL;W<Z-S<L;W=N97)`.G)W
+M>'`M+6%!4E=C0V]S.BTM+2TM+2TZ86QL;W<L9W)O=7!`.G)W>'`M+6%!4E=C
+M+2US.BTM+2TM+2TZ86QL;W<L979E<GEO;F5`.G(M>"TM+6$M4BUC+2US.BTM
+M+2TM+2TZ86QL;W<*````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````!D:7(Q+P``````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M,#`P,#<W-2`P,#`P,#`P(#`P,#`P,#`@,#`P,#`P,#`P,#`@,3,P,3(S,3,T
+M-#8@,#`Q-#8S,2`U````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````'5S=&%R`#`P<F]O=```````````````
+M``````````````````````!W:&5E;```````````````````````````````
+M`````#`P,#`P,#`@,#`P,#`P,"``````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````#$S,#$R-#0W,#`W(#$S,#$R-#0W,S4S(```````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+9````````````````````````````````````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_compat_star_acl_posix1e.c b/contrib/libarchive/libarchive/test/test_compat_star_acl_posix1e.c
deleted file mode 100644
index 10bffd9..0000000
--- a/contrib/libarchive/libarchive/test/test_compat_star_acl_posix1e.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/*-
- * Copyright (c) 2003-2007 Tim Kientzle
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "test.h"
-__FBSDID("$FreeBSD$");
-
-/*
- * Verify reading entries with POSIX.1e ACLs from archives created by star
- *
- * This should work on all systems, regardless of whether local filesystems
- * support ACLs or not.
- */
-
-struct acl_t {
- int type; /* Type of ACL: "access" or "default" */
- int permset; /* Permissions for this class of users. */
- int tag; /* Owner, User, Owning group, group, other, etc. */
- const char *name; /* Name of user/group, depending on tag. */
-};
-
-static struct acl_t acls0[] = {
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE,
- ARCHIVE_ENTRY_ACL_USER_OBJ, "" },
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
- ARCHIVE_ENTRY_ACL_USER, "user77" },
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
- ARCHIVE_ENTRY_ACL_GROUP_OBJ, "" },
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
- ARCHIVE_ENTRY_ACL_MASK, ""},
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_WRITE,
- ARCHIVE_ENTRY_ACL_OTHER, "" },
-};
-
-static struct acl_t acls1[] = {
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTRY_ACL_READ,
- ARCHIVE_ENTRY_ACL_USER_OBJ, "" },
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
- ARCHIVE_ENTRY_ACL_USER, "user77" },
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0,
- ARCHIVE_ENTRY_ACL_USER, "user78" },
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
- ARCHIVE_ENTRY_ACL_GROUP_OBJ, "" },
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0007,
- ARCHIVE_ENTRY_ACL_GROUP, "group78" },
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0007,
- ARCHIVE_ENTRY_ACL_MASK, ""},
- { ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_EXECUTE,
- ARCHIVE_ENTRY_ACL_OTHER, "" },
-};
-
-static struct acl_t acls2[] = {
- { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_EXECUTE,
- ARCHIVE_ENTRY_ACL_USER_OBJ, "" },
- { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_READ,
- ARCHIVE_ENTRY_ACL_USER, "user77" },
- { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_READ,
- ARCHIVE_ENTRY_ACL_GROUP_OBJ, "" },
- { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_EXECUTE,
- ARCHIVE_ENTRY_ACL_GROUP, "group78" },
- { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_READ | ARCHIVE_ENTRY_ACL_EXECUTE,
- ARCHIVE_ENTRY_ACL_MASK, ""},
- { ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, ARCHIVE_ENTRY_ACL_WRITE,
- ARCHIVE_ENTRY_ACL_OTHER, "" },
-};
-
-static int
-acl_match(struct acl_t *acl, int type, int permset, int tag, const char *name)
-{
- if (type != acl->type)
- return (0);
- if (permset != acl->permset)
- return (0);
- if (tag != acl->tag)
- return (0);
- if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ)
- return (1);
- if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ)
- return (1);
- if (tag == ARCHIVE_ENTRY_ACL_OTHER)
- return (1);
- if (tag == ARCHIVE_ENTRY_ACL_MASK)
- return (1);
- if (name == NULL)
- return (acl->name == NULL || acl->name[0] == '\0');
- if (acl->name == NULL)
- return (name == NULL || name[0] == '\0');
- return (0 == strcmp(name, acl->name));
-}
-
-static void
-compare_acls(struct archive_entry *ae, struct acl_t *acls, int n, int mode,
- int want_type)
-{
- int *marker = malloc(sizeof(marker[0]) * n);
- int i;
- int r;
- int type, permset, tag, qual;
- int matched;
- const char *name;
-
- for (i = 0; i < n; i++)
- marker[i] = i;
-
- while (0 == (r = archive_entry_acl_next(ae, want_type,
- &type, &permset, &tag, &qual, &name))) {
- for (i = 0, matched = 0; i < n && !matched; i++) {
- if (acl_match(&acls[marker[i]], type, permset,
- tag, name)) {
- /* We found a match; remove it. */
- marker[i] = marker[n - 1];
- n--;
- matched = 1;
- }
- }
- if (tag == ARCHIVE_ENTRY_ACL_USER_OBJ) {
- if (!matched) printf("No match for user_obj perm\n");
- if (want_type == ARCHIVE_ENTRY_ACL_TYPE_ACCESS) {
- failure("USER_OBJ permset (%02o) != user mode (%02o)",
- permset, 07 & (mode >> 6));
- assert((permset << 6) == (mode & 0700));
- }
- } else if (tag == ARCHIVE_ENTRY_ACL_GROUP_OBJ) {
- if (!matched) printf("No match for group_obj perm\n");
- if (want_type == ARCHIVE_ENTRY_ACL_TYPE_ACCESS) {
- failure("GROUP_OBJ permset %02o != group mode %02o",
- permset, 07 & (mode >> 3));
- assert((permset << 3) == (mode & 0070));
- }
- } else if (tag == ARCHIVE_ENTRY_ACL_OTHER) {
- if (!matched) printf("No match for other perm\n");
- if (want_type == ARCHIVE_ENTRY_ACL_TYPE_ACCESS) {
- failure("OTHER permset (%02o) != other mode (%02o)",
- permset, mode & 07);
- assert((permset << 0) == (mode & 0007));
- }
- } else if (tag != ARCHIVE_ENTRY_ACL_MASK) {
- failure("Could not find match for ACL "
- "(type=%d,permset=%d,tag=%d,name=``%s'')",
- type, permset, tag, name);
- assert(matched == 1);
- }
- }
- assertEqualInt(ARCHIVE_EOF, r);
- assert((mode_t)(mode & 0777) == (archive_entry_mode(ae) & 0777));
- failure("Could not find match for ACL "
- "(type=%d,permset=%d,tag=%d,name=``%s'')",
- acls[marker[0]].type, acls[marker[0]].permset,
- acls[marker[0]].tag, acls[marker[0]].name);
- assert(n == 0); /* Number of ACLs not matched should == 0 */
- free(marker);
-}
-
-DEFINE_TEST(test_compat_star_acl_posix1e)
-{
- char name[] = "test_compat_star_acl_posix1e.tar";
- struct archive *a;
- struct archive_entry *ae;
-
- /* Read archive file */
- assert(NULL != (a = archive_read_new()));
- assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
- assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
- extract_reference_file(name);
- assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 10240));
-
- /* First item has a few ACLs */
- assertA(0 == archive_read_next_header(a, &ae));
- failure("One extended ACL should flag all ACLs to be returned.");
- assertEqualInt(5, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
- compare_acls(ae, acls0, sizeof(acls0)/sizeof(acls0[0]), 0142, ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
- failure("Basic ACLs should set mode to 0142, not %04o",
- archive_entry_mode(ae)&0777);
- assert((archive_entry_mode(ae) & 0777) == 0142);
-
- /* Second item has pretty extensive ACLs */
- assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(7, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS));
- compare_acls(ae, acls1, sizeof(acls1)/sizeof(acls1[0]), 0543, ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
- failure("Basic ACLs should set mode to 0543, not %04o",
- archive_entry_mode(ae)&0777);
- assert((archive_entry_mode(ae) & 0777) == 0543);
-
- /* Third item has default ACLs */
- assertA(0 == archive_read_next_header(a, &ae));
- assertEqualInt(6, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT));
- compare_acls(ae, acls2, sizeof(acls2)/sizeof(acls2[0]), 0142, ARCHIVE_ENTRY_ACL_TYPE_DEFAULT);
- failure("Basic ACLs should set mode to 0142, not %04o",
- archive_entry_mode(ae)&0777);
- assert((archive_entry_mode(ae) & 0777) == 0142);
-
- /* Close the archive. */
- assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
- assertEqualInt(ARCHIVE_OK, archive_read_free(a));
-}
diff --git a/contrib/libarchive/libarchive/test/test_compat_uudecode.c b/contrib/libarchive/libarchive/test/test_compat_uudecode.c
index 95b1c9a..cfb17c8 100644
--- a/contrib/libarchive/libarchive/test/test_compat_uudecode.c
+++ b/contrib/libarchive/libarchive/test/test_compat_uudecode.c
@@ -40,7 +40,7 @@ static char archive_data[] = {
};
/*
- * Compatibility: uudecode command ignores junk data placed ater the "end"
+ * Compatibility: uudecode command ignores junk data placed after the "end"
* marker.
*/
DEFINE_TEST(test_compat_uudecode)
diff --git a/contrib/libarchive/libarchive/test/test_fuzz.c b/contrib/libarchive/libarchive/test/test_fuzz.c
index b70a415a..e896f60 100644
--- a/contrib/libarchive/libarchive/test/test_fuzz.c
+++ b/contrib/libarchive/libarchive/test/test_fuzz.c
@@ -406,10 +406,12 @@ DEFINE_TEST(test_fuzz_tar)
"test_read_format_tar_empty_filename.tar",
NULL
};
+#if HAVE_LIBLZO2 && HAVE_LZO_LZO1X_H && HAVE_LZO_LZOCONF_H
static const char *fileset9[] = {
"test_compat_lzop_1.tar.lzo",
NULL
};
+#endif
static const struct files filesets[] = {
{0, fileset1}, /* Exercise bzip2 decompressor. */
{1, fileset1},
@@ -420,7 +422,9 @@ DEFINE_TEST(test_fuzz_tar)
{0, fileset6}, /* Exercise xz decompressor. */
{0, fileset7},
{0, fileset8},
+#if HAVE_LIBLZO2 && HAVE_LZO_LZO1X_H && HAVE_LZO_LZOCONF_H
{0, fileset9}, /* Exercise lzo decompressor. */
+#endif
{1, NULL}
};
test_fuzz(filesets);
diff --git a/contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c b/contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c
index 31eb76b..c9aca8f 100644
--- a/contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c
+++ b/contrib/libarchive/libarchive/test/test_read_disk_directory_traversals.c
@@ -1320,11 +1320,13 @@ test_callbacks(void)
assertUtimes("cb", 886622, 0, 886622, 0);
assert((ae = archive_entry_new()) != NULL);
- if (assert((a = archive_read_disk_new()) != NULL)) {
+ assert((a = archive_read_disk_new()) != NULL);
+ if (a == NULL) {
archive_entry_free(ae);
return;
}
- if (assert((m = archive_match_new()) != NULL)) {
+ assert((m = archive_match_new()) != NULL);
+ if (m == NULL) {
archive_entry_free(ae);
archive_read_free(a);
archive_match_free(m);
@@ -1377,6 +1379,10 @@ test_callbacks(void)
/* Close the disk object. */
assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ /* Reset name filter */
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_disk_set_matching(a, NULL, NULL, NULL));
+
/*
* Test2: Traversals with a metadata filter.
*/
@@ -1394,7 +1400,7 @@ test_callbacks(void)
while (file_count--) {
archive_entry_clear(ae);
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
- failure("File 'cb/f1' should be exclueded");
+ failure("File 'cb/f1' should be excluded");
assert(strcmp(archive_entry_pathname(ae), "cb/f1") != 0);
if (strcmp(archive_entry_pathname(ae), "cb") == 0) {
assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_lzop.c b/contrib/libarchive/libarchive/test/test_read_filter_lzop.c
index 86a5e6e..acce6a4 100644
--- a/contrib/libarchive/libarchive/test/test_read_filter_lzop.c
+++ b/contrib/libarchive/libarchive/test/test_read_filter_lzop.c
@@ -39,13 +39,16 @@ DEFINE_TEST(test_read_filter_lzop)
assert((a = archive_read_new()) != NULL);
r = archive_read_support_filter_lzop(a);
if (r != ARCHIVE_OK) {
- if (r == ARCHIVE_WARN && !canLzop()) {
+ if (!canLzop()) {
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
skipping("lzop compression is not supported "
"on this platform");
- } else
+ return;
+ } else if (r != ARCHIVE_WARN) {
assertEqualIntA(a, ARCHIVE_OK, r);
- return;
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ return;
+ }
}
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
assertEqualIntA(a, ARCHIVE_OK,
diff --git a/contrib/libarchive/libarchive/test/test_read_filter_lzop_multiple_parts.c b/contrib/libarchive/libarchive/test/test_read_filter_lzop_multiple_parts.c
index 3b0febb..82eaf35 100644
--- a/contrib/libarchive/libarchive/test/test_read_filter_lzop_multiple_parts.c
+++ b/contrib/libarchive/libarchive/test/test_read_filter_lzop_multiple_parts.c
@@ -36,12 +36,16 @@ DEFINE_TEST(test_read_filter_lzop_multiple_parts)
assert((a = archive_read_new()) != NULL);
r = archive_read_support_filter_lzop(a);
if (r != ARCHIVE_OK) {
- if (r == ARCHIVE_WARN && !canLzop()) {
- assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+ if (!canLzop()) {
skipping("lzop compression is not supported "
"on this platform");
+ } else if (r == ARCHIVE_WARN) {
+ skipping("lzop multiple parts decoding is not "
+ "supported via external program");
+
} else
assertEqualIntA(a, ARCHIVE_OK, r);
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
return;
}
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
diff --git a/contrib/libarchive/libarchive/test/test_read_format_7zip.c b/contrib/libarchive/libarchive/test/test_read_format_7zip.c
index 14447de..1d1e4c7 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_7zip.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_7zip.c
@@ -688,7 +688,7 @@ test_symname()
assertEqualInt(32, archive_read_data(a, buff, sizeof(buff)));
assertEqualMem(buff, "hellohellohello\nhellohellohello\n", 32);
- /* Verify symbolic-linke symlinkfile. */
+ /* Verify symbolic-link symlinkfile. */
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualInt((AE_IFLNK | 0755), archive_entry_mode(ae));
assertEqualString("symlinkfile", archive_entry_pathname(ae));
diff --git a/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c b/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c
index 16065eb..95d3171 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_cpio_afio.c
@@ -27,7 +27,7 @@
__FBSDID("$FreeBSD$");
/*
-ecute the following to rebuild the data for this program:
+execute the following to rebuild the data for this program:
tail -n +33 test_read_format_cpio_afio.c | /bin/sh
# How to make a sample data.
diff --git a/contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c b/contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c
index 3cb30a4..bff385c 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_isorr_bz2.c
@@ -26,7 +26,7 @@
__FBSDID("$FreeBSD$");
/*
-PLEASE use old cdrtools; mkisofs verion is 2.01.
+PLEASE use old cdrtools; mkisofs version is 2.01.
This version mkisofs made wrong "SL" System Use Entry of RRIP.
Execute the following command to rebuild the data for this program:
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip.c b/contrib/libarchive/libarchive/test/test_read_format_zip.c
index 62a49ba..29b3fc2 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip.c
@@ -126,6 +126,7 @@ test_basic(void)
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
assertEqualIntA(a, ARCHIVE_OK, read_open_memory(a, p, s, 31));
verify_basic(a, 0);
+ free(p);
}
/*
@@ -195,6 +196,7 @@ test_info_zip_ux(void)
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
assertEqualIntA(a, ARCHIVE_OK, read_open_memory(a, p, s, 108));
verify_info_zip_ux(a, 0);
+ free(p);
}
/*
@@ -258,6 +260,7 @@ test_extract_length_at_end(void)
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
assertEqualIntA(a, ARCHIVE_OK, read_open_memory(a, p, s, 108));
verify_extract_length_at_end(a, 0);
+ free(p);
}
static void
@@ -294,6 +297,8 @@ test_symlink(void)
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+ free(p);
}
DEFINE_TEST(test_read_format_zip)
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c b/contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c
index d2b935d..b92b288 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_comment_stored.c
@@ -63,6 +63,8 @@ verify(const char *refname)
assertEqualInt(archive_entry_is_encrypted(ae), 0);
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+ free(p);
}
DEFINE_TEST(test_read_format_zip_comment_stored)
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_filename.c b/contrib/libarchive/libarchive/test/test_read_format_zip_filename.c
index 93ba09b..4dd2e8a 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_filename.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_filename.c
@@ -1116,7 +1116,7 @@ cleanup:
* - the filename of second file is stored in UTF-8.
*
* Whenever hdrcharset option is specified, we will correctly read the
- * filename of sencod file, which is stored in UTF-8.
+ * filename of second file, which is stored in UTF-8.
*/
DEFINE_TEST(test_read_format_zip_filename_KOI8R_UTF8_2)
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c b/contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c
index 97aa427..99b7012 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_mac_metadata.c
@@ -112,4 +112,6 @@ DEFINE_TEST(test_read_format_zip_mac_metadata)
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+ free(p);
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c b/contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c
index 2327d91..e14a3f5 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_malformed.c
@@ -53,6 +53,7 @@ test_malformed1(void)
assertEqualIntA(a, ARCHIVE_OK, read_open_memory(a, p, s, 31));
assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+ free(p);
}
DEFINE_TEST(test_read_format_zip_malformed)
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c b/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c
index 6830afb..5f6edf2 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_nested.c
@@ -65,6 +65,8 @@ DEFINE_TEST(test_read_format_zip_nested)
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+ free(p);
+
/* Inspect inner Zip. */
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_padded.c b/contrib/libarchive/libarchive/test/test_read_format_zip_padded.c
index dae88ab..2094eca 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_padded.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_padded.c
@@ -53,6 +53,8 @@ verify_padded_archive(const char *refname)
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+ free(p);
}
/*
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c b/contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c
index d5992d3..dc76ef9 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_sfx.c
@@ -60,4 +60,6 @@ DEFINE_TEST(test_read_format_zip_sfx)
assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
+
+ free(p);
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c b/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c
index 2700be1..3052615 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_traditional_encryption_data.c
@@ -28,7 +28,7 @@ __FBSDID("$FreeBSD$");
DEFINE_TEST(test_read_format_zip_traditional_encryption_data)
{
- /* This file is password protected (Traditional PKWARE Enctypted).
+ /* This file is password protected (Traditional PKWARE Encrypted).
The headers are NOT encrypted. Password is "12345678". */
const char *refname =
"test_read_format_zip_traditional_encryption_data.zip";
@@ -36,7 +36,7 @@ DEFINE_TEST(test_read_format_zip_traditional_encryption_data)
struct archive *a;
char buff[512];
- /* Check if running system has cryptographic functionarity. */
+ /* Check if running system has cryptographic functionality. */
assert((a = archive_write_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a));
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c
index 082337d..cc1e311 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes.c
@@ -33,7 +33,7 @@ test_winzip_aes(const char *refname, int need_libz)
struct archive *a;
char buff[512];
- /* Check if running system has cryptographic functionarity. */
+ /* Check if running system has cryptographic functionality. */
assert((a = archive_write_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a));
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
diff --git a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c
index a40d5cf..6c40ae7 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_zip_winzip_aes_large.c
@@ -34,7 +34,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
char buff[512];
- /* Check if running system has cryptographic functionarity. */
+ /* Check if running system has cryptographic functionality. */
assert((a = archive_write_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a));
assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
diff --git a/contrib/libarchive/libarchive/test/test_read_pax_schily_xattr.c b/contrib/libarchive/libarchive/test/test_read_pax_schily_xattr.c
new file mode 100644
index 0000000..7554f6d
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_pax_schily_xattr.c
@@ -0,0 +1,70 @@
+/*-
+ * Copyright (c) 2016 IBM Corporation
+ * Copyright (c) 2003-2007 Tim Kientzle
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This test case's code has been derived from test_entry.c
+ */
+#include "test.h"
+
+DEFINE_TEST(test_schily_xattr_pax)
+{
+ struct archive *a;
+ struct archive_entry *ae;
+ const char *refname = "test_read_pax_schily_xattr.tar";
+ const char *xname; /* For xattr tests. */
+ const void *xval; /* For xattr tests. */
+ size_t xsize; /* For xattr tests. */
+ const char *string, *array;
+
+ assert((a = archive_read_new()) != NULL);
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+
+ extract_reference_file(refname);
+ assertEqualIntA(a, ARCHIVE_OK,
+ archive_read_open_filename(a, refname, 10240));
+
+ assertEqualInt(ARCHIVE_OK, archive_read_next_header(a, &ae));
+ assertEqualInt(2, archive_entry_xattr_count(ae));
+ assertEqualInt(2, archive_entry_xattr_reset(ae));
+
+ assertEqualInt(0, archive_entry_xattr_next(ae, &xname, &xval, &xsize));
+ assertEqualString(xname, "security.selinux");
+ string = "system_u:object_r:unlabeled_t:s0";
+ assertEqualString(xval, string);
+ /* the xattr's value also contains the terminating \0 */
+ assertEqualInt((int)xsize, strlen(string) + 1);
+
+ assertEqualInt(0, archive_entry_xattr_next(ae, &xname, &xval, &xsize));
+ assertEqualString(xname, "security.ima");
+ assertEqualInt((int)xsize, 265);
+ /* we only compare the first 12 bytes */
+ array = "\x03\x02\x04\xb0\xe9\xd6\x79\x01\x00\x2b\xad\x1e";
+ assertEqualMem(xval, array, 12);
+
+ /* Close the archive. */
+ assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_pax_schily_xattr.tar.uu b/contrib/libarchive/libarchive/test/test_read_pax_schily_xattr.tar.uu
new file mode 100644
index 0000000..52f7a8f
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_pax_schily_xattr.tar.uu
@@ -0,0 +1,231 @@
+begin 644 test_schily_xattr_pax.tar
+M+B]087A(96%D97)S+C$U,C4O8V]N9F9I;&5S````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#`V-#0`,#`P,#`P,``P,#`P,#`P`#`P,#`P,#`P-C0W
+M`#$R-S$R,C$P-3`V`#`Q,C4V-@`@>```````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````!U<W1A<@`P,```````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````S,"!A=&EM93TQ-#8R,S`Y,S8Y+C<Q-#DW-3DP
+M.0HS,"!C=&EM93TQ-#8R,S`Y,S8Y+C<W.#DW-C(Q,PHR.38@4T-(24Q9+GAA
+M='1R+G-E8W5R:71Y+FEM83T#`@2PZ=9Y`0`KK1Z%635)4!FT,I"<49LTXR`'
+M@42;2R:POQ9`JQA=+16.AY^<_[XK597$><QT!GLCT8_IF@@:/Z<?]<HQ0T7I
+MO&87D9-4,L'!GUG'K%=]KEPC<<)&@`J)'T89MBPB7],R(#&7"#>W6X5O?Y6:
+M9^':P2MZR[4)$@W<NV(VUT&(R0R-_S>?)B6GX0U@<,0M%6YNMO%OG+IS%/.<
+M,"A(N&S.F9]=!*5=\).X."2$GUGJ,0C:@+G#$M_E8UQP,LU-G(8IKW^K^<8*
+M*3_.N0'%8.^$8S$`D9XOF+DK<<)U34U'_"O5/2<N#T*!'!4Z73X-X4W!/LCF
+M/,721A`CQF:PGDD/"C8W(%-#2$E,62YX871T<BYS96-U<FET>2YS96QI;G5X
+M/7-Y<W1E;5]U.F]B:F5C=%]R.G5N;&%B96QE9%]T.G,P``H`````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````"XO8V]N9F9I;&5S
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````````````````````P
+M,#`P-C0T`#`P,#`P,#``,#`P,#`P,``P,#`P,#`P,#`T,0`Q,C<Q,C(Q,#4P
+M-@`P,3,P-S,`(#``````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````=7-T87(`,#!R;V]T````````````````
+M`````````````````````')O;W0`````````````````````````````````
+M````,#`P,#`P,``P,#`P,#`P````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````+V5T8R]D969A=6QT+VEM82UP;VQI8WDN:6YA8W1I=F4*````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+9````````````````````````````````````
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_sparse_basic.c b/contrib/libarchive/libarchive/test/test_sparse_basic.c
index 06f2c9d..9d45f0f 100644
--- a/contrib/libarchive/libarchive/test/test_sparse_basic.c
+++ b/contrib/libarchive/libarchive/test/test_sparse_basic.c
@@ -57,7 +57,7 @@ __FBSDID("$FreeBSD$");
/*
* NOTE: On FreeBSD and Solaris, this test needs ZFS.
- * You may should perfom this test as
+ * You may perform this test as
* 'TMPDIR=<a directory on the ZFS> libarchive_test'.
*/
diff --git a/contrib/libarchive/libarchive/test/test_write_disk_secure746.c b/contrib/libarchive/libarchive/test/test_write_disk_secure746.c
index 460aafe..5ce1fd9 100644
--- a/contrib/libarchive/libarchive/test/test_write_disk_secure746.c
+++ b/contrib/libarchive/libarchive/test/test_write_disk_secure746.c
@@ -72,6 +72,9 @@ DEFINE_TEST(test_write_disk_secure746a)
/* Verify that target file contents are unchanged. */
assertTextFileContents("unmodified", "../target/foo");
+
+ assertEqualIntA(a, ARCHIVE_FATAL, archive_write_close(a));
+ archive_write_free(a);
#endif
}
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lz4.c b/contrib/libarchive/libarchive/test/test_write_filter_lz4.c
index a043698..4f2135a 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lz4.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lz4.c
@@ -56,6 +56,7 @@ DEFINE_TEST(test_write_filter_lz4)
} else {
assertEqualInt(ARCHIVE_OK, r);
}
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
buffsize = 2000000;
assert(NULL != (buff = (char *)malloc(buffsize)));
@@ -299,6 +300,7 @@ test_options(const char *options)
} else {
assertEqualInt(ARCHIVE_OK, r);
}
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
buffsize = 2000000;
assert(NULL != (buff = (char *)malloc(buffsize)));
diff --git a/contrib/libarchive/libarchive/test/test_write_filter_lzop.c b/contrib/libarchive/libarchive/test/test_write_filter_lzop.c
index a32932c..92db7bf 100644
--- a/contrib/libarchive/libarchive/test/test_write_filter_lzop.c
+++ b/contrib/libarchive/libarchive/test/test_write_filter_lzop.c
@@ -43,12 +43,12 @@ DEFINE_TEST(test_write_filter_lzop)
assert((a = archive_write_new()) != NULL);
r = archive_write_add_filter_lzop(a);
+ assertEqualInt(ARCHIVE_OK, archive_write_free(a));
if (r != ARCHIVE_OK) {
if (canLzop() && r == ARCHIVE_WARN)
use_prog = 1;
else {
skipping("lzop writing not supported on this platform");
- assertEqualInt(ARCHIVE_OK, archive_write_free(a));
return;
}
}
@@ -92,7 +92,7 @@ DEFINE_TEST(test_write_filter_lzop)
assert((a = archive_read_new()) != NULL);
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
r = archive_read_support_filter_lzop(a);
- if (r == ARCHIVE_WARN) {
+ if (r == ARCHIVE_WARN && !use_prog) {
skipping("Can't verify lzop writing by reading back;"
" lzop reading not fully supported on this platform");
} else {
@@ -212,7 +212,7 @@ DEFINE_TEST(test_write_filter_lzop)
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
r = archive_read_support_filter_lzop(a);
- if (r == ARCHIVE_WARN) {
+ if (r == ARCHIVE_WARN && !use_prog) {
skipping("lzop reading not fully supported on this platform");
} else {
assertEqualIntA(a, ARCHIVE_OK,
diff --git a/contrib/libarchive/libarchive/test/test_write_format_iso9660.c b/contrib/libarchive/libarchive/test/test_write_format_iso9660.c
index ee6db6f..e4e98bb 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_iso9660.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_iso9660.c
@@ -719,7 +719,7 @@ DEFINE_TEST(test_write_format_iso9660)
assertEqualInt(5, archive_entry_ctime(ae));
assert(archive_entry_mtime_is_set(ae));
assertEqualInt(5, archive_entry_mtime(ae));
- /* Trim lngname to 64 characters. */
+ /* Trim longname to 64 characters. */
longname[64] = '\0';
assertEqualString(longname, archive_entry_pathname(ae));
assert((AE_IFREG | 0400) == archive_entry_mode(ae));
diff --git a/contrib/libarchive/libarchive/test/test_write_format_iso9660_zisofs.c b/contrib/libarchive/libarchive/test/test_write_format_iso9660_zisofs.c
index 136255b..2140ed8 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_iso9660_zisofs.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_iso9660_zisofs.c
@@ -25,7 +25,7 @@
#include "test.h"
/*
- * Check that a "zisofs" ISO 9660 imaeg is correctly created.
+ * Check that a "zisofs" ISO 9660 image is correctly created.
*/
static const unsigned char primary_id[] = {
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_large.c b/contrib/libarchive/libarchive/test/test_write_format_zip_large.c
index d73dd62..88788b5 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_large.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_large.c
@@ -470,5 +470,6 @@ DEFINE_TEST(test_write_format_zip_large)
assertEqualMem(cd_start, "PK\001\002", 4);
fileblocks_free(fileblocks);
+ free(buff);
free(nulldata);
}
diff --git a/contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c b/contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c
index b83aeab..c5f00a2 100644
--- a/contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c
+++ b/contrib/libarchive/libarchive/test/test_write_format_zip_zip64.c
@@ -49,6 +49,8 @@ verify_zip_filesize(uint64_t size, int expected)
archive_entry_set_size(ae, size);
assertEqualInt(expected, archive_write_header(a, ae));
+ archive_entry_free(ae);
+
/* Don't actually write 4GB! ;-) */
assertEqualIntA(a, ARCHIVE_OK, archive_write_free(a));
}
diff --git a/contrib/libarchive/libarchive/xxhash.c b/contrib/libarchive/libarchive/xxhash.c
index d7f8e96..6f5ba52 100644
--- a/contrib/libarchive/libarchive/xxhash.c
+++ b/contrib/libarchive/libarchive/xxhash.c
@@ -29,10 +29,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You can contact the author at :
- xxHash source repository : http://code.google.com/p/xxhash/
*/
+#include "archive_platform.h"
+
#include <stdlib.h>
#include <string.h>
-#include "archive_platform.h"
#include "archive_xxhash.h"
#ifdef HAVE_LIBLZ4
@@ -60,7 +61,7 @@ You can contact the author at :
** By default, xxHash library provides endian-independent Hash values, based on little-endian convention.
** Results are therefore identical for little-endian and big-endian CPU.
** This comes at a performance cost for big-endian CPU, since some swapping is required to emulate little-endian format.
-** Should endian-independance be of no importance for your application, you may set the #define below to 1.
+** Should endian-independence be of no importance for your application, you may set the #define below to 1.
** It will improve speed for Big-endian CPU.
** This option has no impact on Little_Endian CPU.
*/
diff --git a/contrib/libarchive/tar/test/test_option_uid_uname.c b/contrib/libarchive/tar/test/test_option_uid_uname.c
index 0a8a9bb..80c0619 100644
--- a/contrib/libarchive/tar/test/test_option_uid_uname.c
+++ b/contrib/libarchive/tar/test/test_option_uid_uname.c
@@ -45,25 +45,25 @@ DEFINE_TEST(test_option_uid_uname)
/* Again with both --uid and --uname */
failure("Error invoking %s c", testprog);
assertEqualInt(0,
- systemf("%s cf archive2 --uid=17 --uname=foofoofoo --format=ustar file >stdout2.txt 2>stderr2.txt",
+ systemf("%s cf archive2 --uid=65123 --uname=foofoofoo --format=ustar file >stdout2.txt 2>stderr2.txt",
testprog));
assertEmptyFile("stdout2.txt");
assertEmptyFile("stderr2.txt");
data = slurpfile(&s, "archive2");
/* Should force uid and uname fields in ustar header. */
- assertEqualMem(data + 108, "000021 \0", 8);
+ assertEqualMem(data + 108, "177143 \0", 8);
assertEqualMem(data + 265, "foofoofoo\0", 10);
free(data);
/* Again with just --uid */
failure("Error invoking %s c", testprog);
assertEqualInt(0,
- systemf("%s cf archive3 --uid=17 --format=ustar file >stdout3.txt 2>stderr3.txt",
+ systemf("%s cf archive3 --uid=65123 --format=ustar file >stdout3.txt 2>stderr3.txt",
testprog));
assertEmptyFile("stdout3.txt");
assertEmptyFile("stderr3.txt");
data = slurpfile(&s, "archive3");
- assertEqualMem(data + 108, "000021 \0", 8);
+ assertEqualMem(data + 108, "177143 \0", 8);
/* Uname field in ustar header should be empty. */
assertEqualMem(data + 265, "\0", 1);
free(data);
diff --git a/contrib/libarchive/tar/util.c b/contrib/libarchive/tar/util.c
index f845600..84dc53f 100644
--- a/contrib/libarchive/tar/util.c
+++ b/contrib/libarchive/tar/util.c
@@ -140,6 +140,7 @@ safe_fprintf(FILE *f, const char *fmt, ...)
} else {
/* Leave fmtbuff pointing to the truncated
* string in fmtbuff_stack. */
+ fmtbuff = fmtbuff_stack;
length = sizeof(fmtbuff_stack) - 1;
break;
}
diff --git a/contrib/libc++/include/memory b/contrib/libc++/include/memory
index 662faa0..804b351 100644
--- a/contrib/libc++/include/memory
+++ b/contrib/libc++/include/memory
@@ -1950,11 +1950,11 @@ public:
typedef const typename remove_reference<_T1>::type& _T1_const_reference;
typedef const typename remove_reference<_T2>::type& _T2_const_reference;
- _LIBCPP_INLINE_VISIBILITY __libcpp_compressed_pair_imp() {}
+ _LIBCPP_INLINE_VISIBILITY __libcpp_compressed_pair_imp() : __first_(), __second_() {}
_LIBCPP_INLINE_VISIBILITY explicit __libcpp_compressed_pair_imp(_T1_param __t1)
- : __first_(_VSTD::forward<_T1_param>(__t1)) {}
+ : __first_(_VSTD::forward<_T1_param>(__t1)), __second_() {}
_LIBCPP_INLINE_VISIBILITY explicit __libcpp_compressed_pair_imp(_T2_param __t2)
- : __second_(_VSTD::forward<_T2_param>(__t2)) {}
+ : __first_(), __second_(_VSTD::forward<_T2_param>(__t2)) {}
_LIBCPP_INLINE_VISIBILITY __libcpp_compressed_pair_imp(_T1_param __t1, _T2_param __t2)
: __first_(_VSTD::forward<_T1_param>(__t1)), __second_(_VSTD::forward<_T2_param>(__t2)) {}
@@ -2043,9 +2043,9 @@ public:
typedef const _T1& _T1_const_reference;
typedef const typename remove_reference<_T2>::type& _T2_const_reference;
- _LIBCPP_INLINE_VISIBILITY __libcpp_compressed_pair_imp() {}
+ _LIBCPP_INLINE_VISIBILITY __libcpp_compressed_pair_imp() : __second_() {}
_LIBCPP_INLINE_VISIBILITY explicit __libcpp_compressed_pair_imp(_T1_param __t1)
- : _T1(_VSTD::forward<_T1_param>(__t1)) {}
+ : _T1(_VSTD::forward<_T1_param>(__t1)), __second_() {}
_LIBCPP_INLINE_VISIBILITY explicit __libcpp_compressed_pair_imp(_T2_param __t2)
: __second_(_VSTD::forward<_T2_param>(__t2)) {}
_LIBCPP_INLINE_VISIBILITY __libcpp_compressed_pair_imp(_T1_param __t1, _T2_param __t2)
@@ -2133,11 +2133,11 @@ public:
typedef const typename remove_reference<_T1>::type& _T1_const_reference;
typedef const _T2& _T2_const_reference;
- _LIBCPP_INLINE_VISIBILITY __libcpp_compressed_pair_imp() {}
+ _LIBCPP_INLINE_VISIBILITY __libcpp_compressed_pair_imp() : __first_() {}
_LIBCPP_INLINE_VISIBILITY explicit __libcpp_compressed_pair_imp(_T1_param __t1)
: __first_(_VSTD::forward<_T1_param>(__t1)) {}
_LIBCPP_INLINE_VISIBILITY explicit __libcpp_compressed_pair_imp(_T2_param __t2)
- : _T2(_VSTD::forward<_T2_param>(__t2)) {}
+ : _T2(_VSTD::forward<_T2_param>(__t2)), __first_() {}
_LIBCPP_INLINE_VISIBILITY __libcpp_compressed_pair_imp(_T1_param __t1, _T2_param __t2)
_NOEXCEPT_(is_nothrow_move_constructible<_T1>::value &&
is_nothrow_move_constructible<_T2>::value)
diff --git a/contrib/netbsd-tests/bin/cat/d_align.in b/contrib/netbsd-tests/bin/cat/d_align.in
index 31bf4a7..37d30c7 100644
--- a/contrib/netbsd-tests/bin/cat/d_align.in
+++ b/contrib/netbsd-tests/bin/cat/d_align.in
@@ -1,3 +1,5 @@
a b c
+
1 2 3
+
x y z
diff --git a/contrib/netbsd-tests/bin/cat/d_align.out b/contrib/netbsd-tests/bin/cat/d_align.out
index fd32469..4f44c00 100644
--- a/contrib/netbsd-tests/bin/cat/d_align.out
+++ b/contrib/netbsd-tests/bin/cat/d_align.out
@@ -1,3 +1,5 @@
1 a b c$
+ $
2 1 2 3$
+ $
3 x y z$
diff --git a/contrib/netbsd-tests/bin/cat/d_se_output.in b/contrib/netbsd-tests/bin/cat/d_se_output.in
new file mode 100644
index 0000000..0d3c8c1
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_se_output.in
@@ -0,0 +1,3 @@
+
+Of course it runs NetBSD
+
diff --git a/contrib/netbsd-tests/bin/cat/d_se_output.out b/contrib/netbsd-tests/bin/cat/d_se_output.out
new file mode 100644
index 0000000..c4767c3
--- /dev/null
+++ b/contrib/netbsd-tests/bin/cat/d_se_output.out
@@ -0,0 +1,3 @@
+$
+Of course it runs NetBSD$
+$
diff --git a/contrib/netbsd-tests/bin/cat/t_cat.sh b/contrib/netbsd-tests/bin/cat/t_cat.sh
index 1b7a930..799a748 100755
--- a/contrib/netbsd-tests/bin/cat/t_cat.sh
+++ b/contrib/netbsd-tests/bin/cat/t_cat.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_cat.sh,v 1.2 2012/03/27 17:57:02 jruoho Exp $
+# $NetBSD: t_cat.sh,v 1.3 2016/06/16 01:04:58 sevan Exp $
#
# Copyright (c) 2012 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -52,8 +52,20 @@ nonexistent_body() {
-x "cat /some/name/that/does/not/exist"
}
+atf_test_case se_output
+se_output_head() {
+ atf_set "descr" "Test that cat(1) prints a $ sign " \
+ "on blank lines with options '-se' (PR bin/51250)"
+}
+
+se_output_body() {
+ atf_check -s ignore -o file:$(atf_get_srcdir)/d_se_output.out \
+ -x "cat -se $(atf_get_srcdir)/d_se_output.in"
+}
+
atf_init_test_cases()
{
atf_add_test_case align
atf_add_test_case nonexistent
+ atf_add_test_case se_output
}
diff --git a/contrib/netbsd-tests/bin/sh/dotcmd/scoped_command b/contrib/netbsd-tests/bin/sh/dotcmd/scoped_command
index fda4e53..36e712b 100755
--- a/contrib/netbsd-tests/bin/sh/dotcmd/scoped_command
+++ b/contrib/netbsd-tests/bin/sh/dotcmd/scoped_command
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $NetBSD: scoped_command,v 1.1 2014/05/31 14:29:06 christos Exp $
+# $NetBSD: scoped_command,v 1.2 2016/03/27 14:57:50 christos Exp $
#
# Copyright (c) 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -30,6 +30,27 @@
# POSSIBILITY OF SUCH DAMAGE.
#
+: ${TEST_SH:=/bin/sh}
+
+sane_sh()
+{
+ set -- ${TEST_SH}
+ case "$#" in
+ (0) set /bin/sh;;
+ (1|2) ;;
+ (*) set "$1";; # Just ignore options if we cannot make them work
+ esac
+
+ case "$1" in
+ /*) TEST_SH="$1${2+ }$2";;
+ ./*) TEST_SH="${PWD}${1#.}${2+ }$2";;
+ */*) TEST_SH="${PWD}/$1${2+ }$2";;
+ *) TEST_SH="$( command -v "$1" )${2+ }$2";;
+ esac
+}
+
+sane_sh
+
set -e
# USAGE:
@@ -52,7 +73,7 @@ cmd="echo 'before ${3}'
${2}
echo 'after ${3}, return value:' ${?}"
-echo "#!/bin/sh"
+echo "#!${TEST_SH}"
[ 'func' = "${1}" ] && cat <<EOF
func()
diff --git a/contrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh b/contrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh
index b365b1d..8e9b277 100755
--- a/contrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh
+++ b/contrib/netbsd-tests/bin/sh/dotcmd/t_dotcmd.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_dotcmd.sh,v 1.1 2014/05/31 14:29:06 christos Exp $
+# $NetBSD: t_dotcmd.sh,v 1.2 2016/03/27 14:57:50 christos Exp $
#
# Copyright (c) 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -33,6 +33,10 @@
# in C/C++ so, for example, if the dotcmd is in a loop's body, a break in
# the sourced file can be used to break out of that loop.
+# Note that the standard does not require this, and allows lexically
+# scoped interpretation of break/continue (and permits dynamic scope
+# as an optional extension.)
+
cmds='return break continue'
scopes='case compound file for func subshell until while'
diff --git a/contrib/netbsd-tests/bin/sh/t_arith.sh b/contrib/netbsd-tests/bin/sh/t_arith.sh
new file mode 100755
index 0000000..d7b5083
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_arith.sh
@@ -0,0 +1,1035 @@
+# $NetBSD: t_arith.sh,v 1.5 2016/05/12 14:25:11 kre Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+# Requirement is to support at least "signed long" whatever that means
+# (number of bits in "long" is not specified - but should be at least 32).
+
+# These tests use -o inline:"..." rather than -o match:'...' as we have
+# only digits to examine, and it is good to be sure that 1 + 1 really gives 2
+# and that 42 or 123 don't look like success because there is a 2 in them.
+
+ARITH_BITS='?'
+discover_range()
+{
+ # cannot use arithmetic "test" operators, range of test in
+ # ATF_SHELL (or even TEST_SH) might not be as big as that
+ # supported by $(( )) in TEST_SH
+
+ if ! ${TEST_SH} -c ': $(( 0x10000 ))' 2>/dev/null
+ then
+ # 16 bits or less, or hex unsupported, just give up...
+ return
+ fi
+ test $( ${TEST_SH} -c 'echo $(( 0x1FFFF ))' ) = 131071 || return
+
+ # when attempting to exceed the number of available bits
+ # the shell may react in any of 3 (rational) ways
+ # 1. syntax error (maybe even core dump...) and fail
+ # 2. represent a positive number input as negative value
+ # 3. keep the number positive, but not the value expected
+ # (perhaps pegged at the max possible value)
+ # any of those may be accompanied by a message to stderr
+
+ # Must check all 3 possibilities for each plausible size
+ # Tests do not use 0x8000... because that value can have weird
+ # other side effects that are not relevant to discover here.
+ # But we do want to try and force the sign bit set.
+
+ if ! ${TEST_SH} -c ': $(( 0xC0000000 ))' 2>/dev/null
+ then
+ # proobably shell detected overflow and complained
+ ARITH_BITS=32
+ return
+ fi
+ if ${TEST_SH} 2>/dev/null \
+ -c 'case $(( 0xC0000000 )); in (-*) exit 0;; esac; exit 1'
+ then
+ ARITH_BITS=32
+ return
+ fi
+ if ${TEST_SH} -c '[ $(( 0xC0000000 )) != 3221225472 ]' 2>/dev/null
+ then
+ ARITH_BITS=32
+ return
+ fi
+
+ if ! ${TEST_SH} -c ': $(( 0xC000000000000000 ))' 2>/dev/null
+ then
+ ARITH_BITS=64
+ return
+ fi
+ if ${TEST_SH} 2>/dev/null \
+ -c 'case $(( 0xC000000000000000 )); in (-*) exit 0;; esac; exit 1'
+ then
+ ARITH_BITS=64
+ return
+ fi
+ if ${TEST_SH} 2>/dev/null \
+ -c '[ $((0xC000000000000000)) != 13835058055282163712 ]'
+ then
+ ARITH_BITS=64
+ return
+ fi
+
+ if ${TEST_SH} 2>/dev/null -c \
+ '[ $((0x123456781234567812345678)) = 5634002657842756053938493048 ]'
+ then
+ # just assume... (for now anyway, revisit when it happens...)
+ ARITH_BITS=96
+ return
+ fi
+}
+
+atf_test_case constants
+constants_head()
+{
+ atf_set "descr" "Tests that arithmetic expansion can handle constants"
+}
+constants_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $((0x0))'
+
+ # atf_expect_fail "PR bin/50959"
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $((0X0))'
+ # atf_expect_pass
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $((000))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 000000001 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x000000 ))'
+
+ atf_check -s exit:0 -o inline:'99999\n' -e empty \
+ ${TEST_SH} -c 'echo $((99999))'
+
+ [ ${ARITH_BITS} -gt 44 ] &&
+ atf_check -s exit:0 -o inline:'9191919191919\n' -e empty \
+ ${TEST_SH} -c 'echo $((9191919191919))'
+
+ atf_check -s exit:0 -o inline:'13\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xD ))'
+ atf_check -s exit:0 -o inline:'11\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 013 ))'
+ atf_check -s exit:0 -o inline:'7\n' -e empty ${TEST_SH} -c \
+ 'x=7;echo $(($x))'
+ atf_check -s exit:0 -o inline:'9\n' -e empty ${TEST_SH} -c \
+ 'x=9;echo $((x))'
+
+ atf_check -s exit:0 -o inline:'11\n' -e empty \
+ ${TEST_SH} -c 'x=0xB; echo $(( $x ))'
+ atf_check -s exit:0 -o inline:'27\n' -e empty \
+ ${TEST_SH} -c 'x=0X1B; echo $(( x ))'
+ atf_check -s exit:0 -o inline:'27\n' -e empty \
+ ${TEST_SH} -c 'X=033; echo $(( $X ))'
+ atf_check -s exit:0 -o inline:'219\n' -e empty \
+ ${TEST_SH} -c 'X=0333; echo $(( X ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty \
+ ${TEST_SH} -c 'NULL=; echo $(( NULL ))'
+
+ # Not clear if this is 0, nothing, or an error, so omit for now
+ # atf_check -s exit:0 -o inline:'0\n' -e empty \
+ # ${TEST_SH} -c 'echo $(( ))'
+
+ # not clear whether this should return 0 or an error, so omit for now
+ # atf_check -s exit:0 -o inline:'0\n' -e empty \
+ # ${TEST_SH} -c 'echo $(( UNDEFINED_VAR ))'
+}
+
+
+atf_test_case do_unary_plus
+do_unary_plus_head()
+{
+ atf_set "descr" "Tests that unary plus works as expected"
+}
+do_unary_plus_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( +0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( +1 ))'
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( + 6 ))'
+ atf_check -s exit:0 -o inline:'4321\n' -e empty ${TEST_SH} -c \
+ 'echo $(( + 4321 ))'
+ atf_check -s exit:0 -o inline:'17185\n' -e empty ${TEST_SH} -c \
+ 'echo $(( + 0x4321 ))'
+}
+
+atf_test_case do_unary_minus
+do_unary_minus_head()
+{
+ atf_set "descr" "Tests that unary minus works as expected"
+}
+do_unary_minus_body()
+{
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 0 ))'
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 1 ))'
+ atf_check -s exit:0 -o inline:'-6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 6 ))'
+ atf_check -s exit:0 -o inline:'-4321\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 4321 ))'
+ atf_check -s exit:0 -o inline:'-2257\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 04321 ))'
+ atf_check -s exit:0 -o inline:'-7\n' -e empty ${TEST_SH} -c \
+ 'echo $((-7))'
+}
+
+atf_test_case do_unary_not
+do_unary_not_head()
+{
+ atf_set "descr" "Tests that unary not (boolean) works as expected"
+}
+do_unary_not_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! 0 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( !1234 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( !0xFFFF ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! 000000 ))'
+}
+
+atf_test_case do_unary_tilde
+do_unary_tilde_head()
+{
+ atf_set "descr" "Tests that unary not (bitwise) works as expected"
+}
+do_unary_tilde_body()
+{
+ # definitely 2's complement arithmetic here...
+
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ~ 0 ))'
+ atf_check -s exit:0 -o inline:'-2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ~ 1 ))'
+
+ atf_check -s exit:0 -o inline:'-1235\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ~1234 ))'
+ atf_check -s exit:0 -o inline:'-256\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ~0xFF ))'
+}
+
+atf_test_case elementary_add
+elementary_add_head()
+{
+ atf_set "descr" "Tests that simple addition works as expected"
+}
+elementary_add_body()
+{
+ # some of these tests actually test unary ops & op precedence...
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 + 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 + 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 + 1 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 + 1 ))'
+ atf_check -s exit:0 -o inline:'10\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 4 + 6 ))'
+ atf_check -s exit:0 -o inline:'10\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 6 + 4 ))'
+ atf_check -s exit:0 -o inline:'5555\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1234 + 4321 ))'
+ atf_check -s exit:0 -o inline:'3333\n' -e empty ${TEST_SH} -c \
+ 'echo $((1111+2222))'
+ atf_check -s exit:0 -o inline:'5555\n' -e empty ${TEST_SH} -c \
+ 'echo $((+3333+2222))'
+ atf_check -s exit:0 -o inline:'7777\n' -e empty ${TEST_SH} -c \
+ 'echo $((+3333 + +4444))'
+ atf_check -s exit:0 -o inline:'-7777\n' -e empty ${TEST_SH} -c \
+ 'echo -$((+4125+ +3652))'
+}
+
+atf_test_case elementary_sub
+elementary_sub_head()
+{
+ atf_set "descr" "Tests that simple subtraction works as expected"
+}
+elementary_sub_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 - 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 - 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 - 1 ))'
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 - 1 ))'
+ atf_check -s exit:0 -o inline:'488\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1066 - 578 ))'
+ atf_check -s exit:0 -o inline:'-3662\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2016-5678 ))'
+ atf_check -s exit:0 -o inline:'-3662\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2016+-5678 ))'
+ atf_check -s exit:0 -o inline:'-3662\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2016-+5678 ))'
+ atf_check -s exit:0 -o inline:'-7694\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -2016-5678 ))'
+ atf_check -s exit:0 -o inline:'--1\n' -e empty ${TEST_SH} -c \
+ 'echo -$(( -1018 - -1017 ))'
+}
+
+atf_test_case elementary_mul
+elementary_mul_head()
+{
+ atf_set "descr" "Tests that simple multiplication works as expected"
+}
+elementary_mul_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 * 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 * 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 * 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 * 1 ))'
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 * 1 ))'
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 * -1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 * -1 ))'
+ atf_check -s exit:0 -o inline:'391\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 17 * 23 ))'
+ atf_check -s exit:0 -o inline:'169\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 13*13 ))'
+ atf_check -s exit:0 -o inline:'-11264\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -11 *1024 ))'
+ atf_check -s exit:0 -o inline:'-16983\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 17* -999 ))'
+ atf_check -s exit:0 -o inline:'9309\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -29*-321 ))'
+}
+
+atf_test_case elementary_div
+elementary_div_head()
+{
+ atf_set "descr" "Tests that simple division works as expected"
+}
+elementary_div_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 / 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 / 1 ))'
+ test ${ARITH_BITS} -ge 38 &&
+ atf_check -s exit:0 -o inline:'99999999999\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 99999999999 / 1 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 / 1 ))'
+
+ atf_check -s exit:0 -o inline:'3\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 / 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 / 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 / 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 / 4 ))'
+
+ atf_check -s exit:0 -o inline:'173\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 123456 / 713 ))'
+ atf_check -s exit:0 -o inline:'13\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 169 / 13 ))'
+}
+
+atf_test_case elementary_rem
+elementary_rem_head()
+{
+ atf_set "descr" "Tests that simple modulus works as expected"
+}
+elementary_rem_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 % 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 % 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 % 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9999 % 1 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 % 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 % 2 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 % 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xFFFF % 2 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 % 3 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 % 3 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 % 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 % 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3123 % 3 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9999 % 2 ))'
+
+ atf_check -s exit:0 -o inline:'107\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 123456%173 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $((169%13))'
+}
+
+atf_test_case elementary_shl
+elementary_shl_head()
+{
+ atf_set "descr" "Tests that simple shift left works as expected"
+}
+elementary_shl_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 << 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 << 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 << 17 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 << 0 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 << 1 ))'
+ atf_check -s exit:0 -o inline:'131072\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 << 17 ))'
+
+ atf_check -s exit:0 -o inline:'2021161080\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x3C3C3C3C << 1 ))'
+
+ test "${ARITH_BITS}" -ge 40 &&
+ atf_check -s exit:0 -o inline:'129354309120\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x3C3C3C3C << 7 ))'
+ test "${ARITH_BITS}" -ge 72 &&
+ atf_check -s exit:0 -o inline:'1111145054534149079040\n' \
+ -e empty ${TEST_SH} -c 'echo $(( 0x3C3C3C3C << 40 ))'
+
+ return 0
+}
+
+atf_test_case elementary_shr
+elementary_shr_head()
+{
+ atf_set "descr" "Tests that simple shift right works as expected"
+}
+elementary_shr_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 >> 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 >> 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 >> 17 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 >> 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 >> 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 >> 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 >> 1 ))'
+
+ atf_check -s exit:0 -o inline:'4\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x10 >> 2 ))'
+ atf_check -s exit:0 -o inline:'4\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 022 >> 2 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 131072 >> 17 ))'
+
+ test ${ARITH_BITS} -ge 40 &&
+ atf_check -s exit:0 -o inline:'8\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x4000000000 >> 35 ))'
+ test ${ARITH_BITS} -ge 80 &&
+ atf_check -s exit:0 -o inline:'4464\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x93400FACE005C871000 >> 64 ))'
+
+ return 0
+}
+
+atf_test_case elementary_eq
+elementary_eq_head()
+{
+ atf_set "descr" "Tests that simple equality test works as expected"
+}
+elementary_eq_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0000 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0x00 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 == 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'X=30; Y=0x1E; echo $(( X == Y ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1234 == 4660 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1234 == 011064 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0000000000000001 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 == 0x10000000000000 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 == 2 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'X=3; Y=7; echo $(( X == Y ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1234 == 0x4660 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 01234 == 0x11064 ))'
+}
+atf_test_case elementary_ne
+elementary_ne_head()
+{
+ atf_set "descr" "Tests that simple inequality test works as expected"
+}
+elementary_ne_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 != 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x71 != 17 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1234 != 01234 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1234 != 01234 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'X=3; echo $(( X != 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'X=3; Y=0x11; echo $(( X != Y ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 != 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 != 0x0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xA != 012 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'X=1; echo $(( X != 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'X=0xC; Y=014; echo $(( X != Y ))'
+}
+atf_test_case elementary_lt
+elementary_lt_head()
+{
+ atf_set "descr" "Tests that simple less than test works as expected"
+}
+elementary_lt_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 < 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 < 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 < 10 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 100 < 101 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xA1 < 200 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 < 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 < 0 ))'
+
+ test ${ARITH_BITS} -ge 40 &&
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1BEEFF00D < 0x1FACECAFE ))'
+
+ return 0
+}
+atf_test_case elementary_le
+elementary_le_head()
+{
+ atf_set "descr" "Tests that simple less or equal test works as expected"
+}
+elementary_le_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 <= 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 <= 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 <= 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 <= 10 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 100 <= 101 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xA1 <= 161 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 <= 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -100 <= -200 ))'
+
+ test ${ARITH_BITS} -ge 40 &&
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'cost=; AUD=; echo $(( $cost 0x2FEEDBABE <= $AUD 12866927294 ))'
+
+ return 0
+}
+atf_test_case elementary_gt
+elementary_gt_head()
+{
+ atf_set "descr" "Tests that simple greater than works as expected"
+}
+elementary_gt_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 > 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 > -1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 11 > 012 ))'
+
+ # atf_expect_fail "PR bin/50959"
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2147483647 > 0X7FFFFF0 ))'
+ # atf_expect_pass
+
+ test ${ARITH_BITS} -gt 32 &&
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x80000000 > 0x7FFFFFFF ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 > 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 > 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 > 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 > 10 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2015 > 2016 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xA1 > 200 ))'
+
+ test ${ARITH_BITS} -ge 44 &&
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x7F07F07F0 > 34099628014 ))'
+
+ return 0
+}
+atf_test_case elementary_ge
+elementary_ge_head()
+{
+ atf_set "descr" "Tests that simple greater or equal works as expected"
+}
+elementary_ge_body()
+{
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 >= 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 >= 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -100 >= -101 ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( -1 >= 0 ))'
+}
+
+atf_test_case fiddle_bits_and
+fiddle_bits_and_head()
+{
+ atf_set "descr" "Test bitwise and operations in arithmetic expressions"
+}
+fiddle_bits_and_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 & 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 & 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 & 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 & 1 ))'
+
+ atf_check -s exit:0 -o inline:'255\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xFF & 0xFF ))'
+ atf_check -s exit:0 -o inline:'255\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xFFFF & 0377 ))'
+
+ test "${ARITH_BITS}" -ge 48 &&
+ atf_check -s exit:0 -o inline:'70377641607203\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x5432FEDC0123 & 0x42871357BAB3 ))'
+
+ return 0
+}
+atf_test_case fiddle_bits_or
+fiddle_bits_or_head()
+{
+ atf_set "descr" "Test bitwise or operations in arithmetic expressions"
+}
+fiddle_bits_or_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 | 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 | 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 | 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 | 1 ))'
+
+ atf_check -s exit:0 -o inline:'4369\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1111 | 0x1111 ))'
+ atf_check -s exit:0 -o inline:'255\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xAA | 0125 ))'
+
+ test "${ARITH_BITS}" -ge 48 &&
+ atf_check -s exit:0 -o inline:'95348271856563\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x5432FEDC0123 | 0x42871357BAB3 ))'
+
+ return 0
+}
+atf_test_case fiddle_bits_xor
+fiddle_bits_xor_head()
+{
+ atf_set "descr" "Test bitwise xor operations in arithmetic expressions"
+}
+fiddle_bits_xor_body()
+{
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 ^ 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 ^ 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 ^ 1 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 ^ 1 ))'
+
+ atf_check -s exit:0 -o inline:'255\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xF0 ^ 0x0F ))'
+ atf_check -s exit:0 -o inline:'15\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xF0 ^ 0xFF ))'
+
+ test "${ARITH_BITS}" -ge 48 &&
+ atf_check -s exit:0 -o inline:'24970630249360\n' -e empty \
+ ${TEST_SH} -c 'echo $(( 0x5432FEDC0123 ^ 0x42871357BAB3 ))'
+
+ return 0
+}
+
+atf_test_case logical_and
+logical_and_head()
+{
+ atf_set "descr" "Test logical and operations in arithmetic expressions"
+}
+logical_and_body()
+{
+ # cannot test short-circuit eval until sh implements side effects...
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 && 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 && 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 && 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 && 1 ))'
+
+ # atf_expect_fail "PR bin/50960"
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1111 && 01234 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xFFFF && 0xF0F0 ))'
+}
+atf_test_case logical_or
+logical_or_head()
+{
+ atf_set "descr" "Test logical or operations in arithmetic expressions"
+}
+logical_or_body()
+{
+ # cannot test short-circuit eval until sh implements side effects...
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 || 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 || 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 || 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 || 1 ))'
+
+ # atf_expect_fail "PR bin/50960"
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1111 || 01234 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x33 || 0xF0F0 ))'
+}
+
+atf_test_case make_selection
+make_selection_head()
+{
+ atf_set "descr" "Test ?: operator in arithmetic expressions"
+}
+make_selection_body()
+{
+ # atf_expect_fail "PR bin/50958"
+
+ atf_check -s exit:0 -o inline:'3\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0 ? 2 : 3 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 ? 2 : 3 ))'
+
+ atf_check -s exit:0 -o inline:'111\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0x1234 ? 111 : 222 ))'
+
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 < 2 ? -1 : 1 > 2 ? 1 : 0 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 < 1 ? -1 : 1 > 1 ? 1 : 0 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 < 1 ? -1 : 2 > 1 ? 1 : 0 ))'
+}
+
+atf_test_case operator_precedence
+operator_precedence_head()
+{
+ atf_set "descr" "Test operator precedence without parentheses"
+}
+operator_precedence_body()
+{
+ # NB: apart from $(( )) ** NO ** parentheses in the expressions.
+
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 + 2 + 3 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 - 2 + 3 ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 - 2 - 1 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 - 2 + 1 ))'
+
+ atf_check -s exit:0 -o inline:'-1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - 2 + 1 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 + -1 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! 2 + 1 ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 + !1 ))'
+
+ atf_check -s exit:0 -o inline:'8\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 * 2 + 2 ))'
+ atf_check -s exit:0 -o inline:'7\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 + 2 * 2 ))'
+ atf_check -s exit:0 -o inline:'12\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 * 2 * 2 ))'
+
+ atf_check -s exit:0 -o inline:'5\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 / 3 + 2 ))'
+ atf_check -s exit:0 -o inline:'10\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + 3 / 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 / 3 / 2 ))'
+
+ atf_check -s exit:0 -o inline:'72\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 << 1 + 2 ))'
+ atf_check -s exit:0 -o inline:'48\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + 3 << 2 ))'
+ atf_check -s exit:0 -o inline:'288\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 << 3 << 2 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 >> 1 + 2 ))'
+ atf_check -s exit:0 -o inline:'3\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + 3 >> 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 >> 3 >> 1 ))'
+
+ atf_check -s exit:0 -o inline:'4\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 >> 3 << 1 ))'
+ atf_check -s exit:0 -o inline:'76\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 << 3 >> 1 ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 + 3 < 3 * 2 ))'
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 << 3 >= 3 << 2 ))'
+
+ # sh inherits C's crazy operator precedence...
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 0xfD & 0xF == 0xF ))'
+}
+
+parentheses_head()
+{
+ atf_set "descr" "Test use of () to group sub-expressions"
+}
+parentheses_body()
+{
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( (1 + 2) + 3 ))'
+ atf_check -s exit:0 -o inline:'-4\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 1 - (2 + 3) ))'
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 - (2 - 1) ))'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 - ( 2 + 1 ) ))'
+
+ atf_check -s exit:0 -o inline:'-3\n' -e empty ${TEST_SH} -c \
+ 'echo $(( - (2 + 1) ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ! (2 + 1) ))'
+
+ atf_check -s exit:0 -o inline:'12\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 * (2 + 2) ))'
+ atf_check -s exit:0 -o inline:'10\n' -e empty ${TEST_SH} -c \
+ 'echo $(( (3 + 2) * 2 ))'
+ atf_check -s exit:0 -o inline:'12\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 3 * (2 * 2) ))'
+
+ atf_check -s exit:0 -o inline:'1\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 / (3 + 2) ))'
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ( 9 + 3 ) / 2 ))'
+ atf_check -s exit:0 -o inline:'9\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 / ( 3 / 2 ) ))'
+
+ atf_check -s exit:0 -o inline:'20\n' -e empty ${TEST_SH} -c \
+ 'echo $(( ( 9 << 1 ) + 2 ))'
+ atf_check -s exit:0 -o inline:'21\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + (3 << 2) ))'
+ atf_check -s exit:0 -o inline:'36864\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 << (3 << 2) ))'
+
+ atf_check -s exit:0 -o inline:'6\n' -e empty ${TEST_SH} -c \
+ 'echo $(( (9 >> 1) + 2 ))'
+ atf_check -s exit:0 -o inline:'9\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 9 + (3 >> 2) ))'
+ atf_check -s exit:0 -o inline:'9\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 >> (3 >> 1) ))'
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 >> (3 << 1) ))'
+ atf_check -s exit:0 -o inline:'38\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 19 << (3 >> 1) ))'
+
+ atf_check -s exit:0 -o inline:'2\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 + (3 < 3) * 2 ))'
+ atf_check -s exit:0 -o inline:'32\n' -e empty ${TEST_SH} -c \
+ 'echo $(( 2 << ((3 >= 3) << 2) ))'
+
+ # sh inherits C's crazy operator precedence...
+
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'echo $(( (0xfD & 0xF) == 0xF ))'
+}
+
+atf_test_case arithmetic_fails
+arithmetic_fails_head()
+{
+ atf_set "descr" "Dummy test to force failure"
+}
+arithmetic_fails_body()
+{
+ atf_fail "Cannot estimate number of bits supported by $(( ))"
+}
+
+atf_init_test_cases() {
+
+ discover_range
+
+ test "${ARITH_BITS}" = '?' && {
+ atf_add_test_case arithmetic_fails
+ return 0
+ }
+
+ # odd names are to get atf's sort order semi-rational
+
+ atf_add_test_case constants
+ atf_add_test_case do_unary_plus
+ atf_add_test_case do_unary_minus
+ atf_add_test_case do_unary_not
+ atf_add_test_case do_unary_tilde
+ atf_add_test_case elementary_add
+ atf_add_test_case elementary_sub
+ atf_add_test_case elementary_mul
+ atf_add_test_case elementary_div
+ atf_add_test_case elementary_rem
+ atf_add_test_case elementary_shl
+ atf_add_test_case elementary_shr
+ atf_add_test_case elementary_eq
+ atf_add_test_case elementary_ne
+ atf_add_test_case elementary_lt
+ atf_add_test_case elementary_le
+ atf_add_test_case elementary_gt
+ atf_add_test_case elementary_ge
+ atf_add_test_case fiddle_bits_and
+ atf_add_test_case fiddle_bits_or
+ atf_add_test_case fiddle_bits_xor
+ atf_add_test_case logical_and
+ atf_add_test_case logical_or
+ atf_add_test_case make_selection
+ atf_add_test_case operator_precedence
+ atf_add_test_case parentheses
+ # atf_add_test_case progressive # build up big expr
+ # atf_add_test_case test_errors # erroneous input
+ # atf_add_test_case torture # hard stuff (if there is any)
+ # atf_add_test_case var_assign # assignment ops
+ # atf_add_test_case vulgarity # truly evil inputs (syntax in vars...)
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_cmdsub.sh b/contrib/netbsd-tests/bin/sh/t_cmdsub.sh
new file mode 100755
index 0000000..f3ee210
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_cmdsub.sh
@@ -0,0 +1,783 @@
+# $NetBSD: t_cmdsub.sh,v 1.4 2016/04/04 12:40:13 christos Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+#
+# This file tests command substitutions ( `...` and $( ... ) )
+#
+# CAUTION:
+# Be careful attempting running these tests outside the ATF environment
+# Some of the tests run "rm *" in the current directory to clean up
+# An ATF test directory should be empty already, outside ATF, anything
+
+atf_test_case a_basic_cmdsub
+a_basic_cmdsub_head() {
+ atf_set "descr" 'Test operation of simple $( ) substitutions'
+}
+a_basic_cmdsub_body() {
+ atf_check -s exit:0 -o match:'Result is true today' -e empty \
+ ${TEST_SH} -c \
+ 'echo Result is $( true && echo true || echo false ) today'
+
+ atf_check -s exit:0 -o match:'Result is false today' -e empty \
+ ${TEST_SH} -c \
+ 'echo Result is $( false && echo true || echo false ) today'
+
+ atf_check -s exit:0 -o match:'aaabbbccc' -e empty \
+ ${TEST_SH} -c 'echo aaa$( echo bbb )ccc'
+ atf_check -s exit:0 -o match:'aaabbb cccddd' -e empty \
+ ${TEST_SH} -c 'echo aaa$( echo bbb ccc )ddd'
+ atf_check -s exit:0 -o inline:'aaabbb cccddd\n' -e empty \
+ ${TEST_SH} -c 'echo aaa$( echo bbb; echo ccc )ddd'
+ atf_check -s exit:0 -o inline:'aaabbb\ncccddd\n' -e empty \
+ ${TEST_SH} -c 'echo "aaa$( echo bbb; echo ccc )ddd"'
+
+ atf_check -s exit:0 -o inline:'some string\n' -e empty \
+ ${TEST_SH} -c 'X=$( echo some string ); echo "$X"'
+ atf_check -s exit:0 -o inline:'weird; string *\n' -e empty \
+ ${TEST_SH} -c 'X=$( echo "weird; string *" ); echo "$X"'
+
+ rm -f * 2>/dev/null || :
+ for f in file-1 file-2
+ do
+ cp /dev/null "$f"
+ done
+
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found $( echo * )'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found "$( echo * )"'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found $('" echo '*' )"
+ atf_check -s exit:0 -o match:'Found \*' -e empty \
+ ${TEST_SH} -c 'echo Found "$('" echo '*' "')"'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found $('" echo \\* )"
+ atf_check -s exit:0 -o match:'Found \*' -e empty \
+ ${TEST_SH} -c 'echo Found "$('" echo \\* )"\"
+}
+
+atf_test_case b_basic_backticks
+b_basic_backticks_head() {
+ atf_set "descr" 'Test operation of old style ` ` substitutions'
+}
+b_basic_backticks_body() {
+ atf_check -s exit:0 -o match:'Result is true today' -e empty \
+ ${TEST_SH} -c \
+ 'echo Result is `true && echo true || echo false` today'
+
+ atf_check -s exit:0 -o match:'Result is false today' -e empty \
+ ${TEST_SH} -c \
+ 'echo Result is `false && echo true || echo false` today'
+
+ atf_check -s exit:0 -o match:'aaabbbccc' -e empty \
+ ${TEST_SH} -c 'echo aaa` echo bbb `ccc'
+ atf_check -s exit:0 -o match:'aaabbb cccddd' -e empty \
+ ${TEST_SH} -c 'echo aaa` echo bbb ccc `ddd'
+ atf_check -s exit:0 -o inline:'aaabbb cccddd\n' -e empty \
+ ${TEST_SH} -c 'echo aaa` echo bbb; echo ccc `ddd'
+ atf_check -s exit:0 -o inline:'aaabbb\ncccddd\n' -e empty \
+ ${TEST_SH} -c 'echo "aaa` echo bbb; echo ccc `ddd"'
+
+ atf_check -s exit:0 -o inline:'some string\n' -e empty \
+ ${TEST_SH} -c 'X=` echo some string `; echo "$X"'
+ atf_check -s exit:0 -o inline:'weird; string *\n' -e empty \
+ ${TEST_SH} -c 'X=` echo "weird; string *" `; echo "$X"'
+
+ rm -f * 2>/dev/null || :
+ for f in file-1 file-2
+ do
+ cp /dev/null "$f"
+ done
+
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found ` echo * `'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found "` echo * `"'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found `'" echo '*' "'`'
+ atf_check -s exit:0 -o match:'Found \*' -e empty \
+ ${TEST_SH} -c 'echo Found "`'" echo '*' "'`"'
+ atf_check -s exit:0 -o match:'Found file-1 file-2' -e empty \
+ ${TEST_SH} -c 'echo Found `'" echo \\* "'`'
+ atf_check -s exit:0 -o match:'Found \*' -e empty \
+ ${TEST_SH} -c 'echo Found "`'" echo \\* "'`"'
+}
+
+atf_test_case c_nested_cmdsub
+c_nested_cmdsub_head() {
+ atf_set "descr" "Test that cmd substitutions can be nested"
+}
+c_nested_cmdsub_body() {
+ atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+ ${TEST_SH} -c 'echo __$( echo foo$(echo bar)bletch )__'
+ atf_check -s exit:0 -o match:'_abcde_' -e empty \
+ ${TEST_SH} -c 'echo _$(echo a$(echo $(echo b)c$(echo d))e )_'
+ atf_check -s exit:0 -o match:'123454321' -e empty \
+ ${TEST_SH} -c 'echo 1$(echo 2$(echo 3$(echo 4$(echo 5)4)3)2)1'
+}
+
+atf_test_case d_nested_backticks
+d_nested_backticks_head() {
+ atf_set "descr" "Tests that old style backtick cmd subs can be nested"
+}
+d_nested_backticks_body() {
+ atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+ ${TEST_SH} -c 'echo __` echo foo\`echo bar\`bletch `__'
+ atf_check -s exit:0 -o match:'_abcde_' -e empty \
+ ${TEST_SH} -c \
+ 'echo _`echo a\`echo \\\`echo b\\\`c\\\`echo d\\\`\`e `_'
+ atf_check -s exit:0 -o match:'123454321' -e empty \
+ ${TEST_SH} -c \
+ 'echo 1`echo 2\`echo 3\\\`echo 4\\\\\\\`echo 5\\\\\\\`4\\\`3\`2`1'
+}
+
+atf_test_case e_perverse_mixing
+e_perverse_mixing_head() {
+ atf_set "descr" \
+ "Checks various mixed new and old style cmd substitutions"
+}
+e_perverse_mixing_body() {
+ atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+ ${TEST_SH} -c 'echo __$( echo foo`echo bar`bletch )__'
+ atf_check -s exit:0 -o match:'__foobarbletch__' -e empty \
+ ${TEST_SH} -c 'echo __` echo foo$(echo bar)bletch `__'
+ atf_check -s exit:0 -o match:'_abcde_' -e empty \
+ ${TEST_SH} -c 'echo _$(echo a`echo $(echo b)c$(echo d)`e )_'
+ atf_check -s exit:0 -o match:'_abcde_' -e empty \
+ ${TEST_SH} -c 'echo _`echo a$(echo \`echo b\`c\`echo d\`)e `_'
+ atf_check -s exit:0 -o match:'12345654321' -e empty \
+ ${TEST_SH} -c \
+ 'echo 1`echo 2$(echo 3\`echo 4\\\`echo 5$(echo 6)5\\\`4\`3)2`1'
+}
+
+atf_test_case f_redirect_in_cmdsub
+f_redirect_in_cmdsub_head() {
+ atf_set "descr" "Checks that redirects work in command substitutions"
+}
+f_redirect_in_cmdsub_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f file 2>/dev/null || :
+ atf_check -s exit:0 -o match:'_aa_' -e empty \
+ ${TEST_SH} -c 'echo _$( echo a$( echo b > file )a)_'
+ atf_check -s exit:0 -o match:b -e empty ${TEST_SH} -c 'cat file'
+ atf_check -s exit:0 -o match:'_aba_' -e empty \
+ ${TEST_SH} -c 'echo _$( echo a$( cat < file )a)_'
+ atf_check -s exit:0 -o match:'_aa_' -e empty \
+ ${TEST_SH} -c 'echo _$( echo a$( echo d >> file )a)_'
+ atf_check -s exit:0 -o inline:'b\nd\n' -e empty ${TEST_SH} -c 'cat file'
+ atf_check -s exit:0 -o match:'_aa_' -e match:'not error' \
+ ${TEST_SH} -c 'echo _$( echo a$( echo not error >&2 )a)_'
+}
+
+atf_test_case g_redirect_in_backticks
+g_redirect_in_backticks_head() {
+ atf_set "descr" "Checks that redirects work in old style cmd sub"
+}
+g_redirect_in_backticks_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f file 2>/dev/null || :
+ atf_check -s exit:0 -o match:'_aa_' -e empty \
+ ${TEST_SH} -c 'echo _` echo a\` echo b > file \`a`_'
+ atf_check -s exit:0 -o match:b -e empty ${TEST_SH} -c 'cat file'
+ atf_check -s exit:0 -o match:'_aba_' -e empty \
+ ${TEST_SH} -c 'echo _` echo a\` cat < file \`a`_'
+ atf_check -s exit:0 -o match:'_aa_' -e empty \
+ ${TEST_SH} -c 'echo _` echo a\` echo d >> file \`a`_'
+ atf_check -s exit:0 -o inline:'b\nd\n' -e empty ${TEST_SH} -c 'cat file'
+ atf_check -s exit:0 -o match:'_aa_' -e match:'not error' \
+ ${TEST_SH} -c 'echo _` echo a\` echo not error >&2 \`a`_'
+}
+
+atf_test_case h_vars_in_cmdsub
+h_vars_in_cmdsub_head() {
+ atf_set "descr" "Check that variables work in command substitutions"
+}
+h_vars_in_cmdsub_body() {
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo __$( echo ${X} )__'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo __$( echo "${X}" )__'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__$( echo ${X} )__"'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__$( echo "${X}" )__"'
+
+ atf_check -s exit:0 -o inline:'a\n\nb\n\nc\n' -e empty \
+ ${TEST_SH} -c "for X in a '' b '' c"'; do echo $( echo "$X" ); done'
+
+ atf_check -s exit:0 -o match:'__acd__' -e empty \
+ ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X-b}${Y-c}d)__"'
+ atf_check -s exit:0 -o match:'__abcd__' -e empty \
+ ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X:-b}${Y:-c}d)__"'
+ atf_check -s exit:0 -o match:'__XYX__' -e empty \
+ ${TEST_SH} -c 'X=X; echo "__${X}$( X=Y; echo ${X} )${X}__"'
+ atf_check -s exit:0 -o match:'__def__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__$(X=def; echo "${X}" )__"'
+ atf_check -s exit:0 -o inline:'abcdef\nabc\n' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "$X$(X=def; echo ${X} )"; echo $X'
+}
+
+atf_test_case i_vars_in_backticks
+i_vars_in_backticks_head() {
+ atf_set "descr" "Checks that variables work in old style cmd sub"
+}
+i_vars_in_backticks_body() {
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo __` echo ${X} `__'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo __` echo "${X}" `__'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__` echo ${X} `__"'
+ atf_check -s exit:0 -o match:'__abc__' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "__` echo \"${X}\" `__"'
+
+ atf_check -s exit:0 -o inline:'a\n\nb\n\nc\n' -e empty \
+ ${TEST_SH} -c "for X in a '' b '' c"'; do echo $( echo "$X" ); done'
+
+ atf_check -s exit:0 -o match:'__acd__' -e empty \
+ ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X-b}${Y-c}d)__"'
+ atf_check -s exit:0 -o match:'__abcd__' -e empty \
+ ${TEST_SH} -c 'X=; unset Y; echo "__$( echo a${X:-b}${Y:-c}d)__"'
+ atf_check -s exit:0 -o match:'__XYX__' -e empty \
+ ${TEST_SH} -c 'X=X; echo "__${X}$( X=Y; echo ${X} )${X}__"'
+ atf_check -s exit:0 -o inline:'abcdef\nabc\n' -e empty \
+ ${TEST_SH} -c 'X=abc; echo "$X`X=def; echo \"${X}\" `";echo $X'
+
+ # The following is nonsense, so is not included ...
+ # atf_check -s exit:0 -o match:'__abc__' -e empty \
+ # oV cV oV cV
+ # ${TEST_SH} -c 'X=abc; echo "__`X=def echo "${X}" `__"'
+ # `start in " ^ " ends, ` not yet
+}
+
+atf_test_case j_cmdsub_in_varexpand
+j_cmdsub_in_varexpand_head() {
+ atf_set "descr" "Checks that command sub can be used in var expansion"
+}
+j_cmdsub_in_varexpand_body() {
+ atf_check -s exit:0 -o match:'foo' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X+$(echo foo)}'
+ atf_check -s exit:0 -o match:'set' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X-$(echo foo)}'
+ rm -f bar 2>/dev/null || :
+ atf_check -s exit:0 -o match:'set' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X-$(echo foo > bar)}'
+ test -f bar && atf_fail "bar should not exist, but does"
+ atf_check -s exit:0 -o inline:'\n' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X+$(echo foo > bar)}'
+ test -f bar || atf_fail "bar should exist, but does not"
+}
+
+atf_test_case k_backticks_in_varexpand
+k_backticks_in_varexpand_head() {
+ atf_set "descr" "Checks that old style cmd sub works in var expansion"
+}
+k_backticks_in_varexpand_body() {
+ atf_check -s exit:0 -o match:'foo' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X+`echo foo`}'
+ atf_check -s exit:0 -o match:'set' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X-`echo foo`}'
+ rm -f bar 2>/dev/null || :
+ atf_check -s exit:0 -o match:'set' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X-`echo foo > bar`}'
+ test -f bar && atf_fail "bar should not exist, but does"
+ atf_check -s exit:0 -o inline:'\n' -e empty \
+ ${TEST_SH} -c 'X=set; echo ${X+`echo foo > bar`}'
+ test -f bar || atf_fail "bar should exist, but does not"
+}
+
+atf_test_case l_arithmetic_in_cmdsub
+l_arithmetic_in_cmdsub_head() {
+ atf_set "descr" "Checks that arithmetic works in cmd substitutions"
+}
+l_arithmetic_in_cmdsub_body() {
+ atf_check -s exit:0 -o inline:'1 + 1 = 2\n' -e empty \
+ ${TEST_SH} -c 'echo 1 + 1 = $( echo $(( 1 + 1 )) )'
+ atf_check -s exit:0 -o inline:'X * Y = 6\n' -e empty \
+ ${TEST_SH} -c 'X=2; Y=3; echo X \* Y = $( echo $(( X * Y )) )'
+ atf_check -s exit:0 -o inline:'Y % X = 1\n' -e empty \
+ ${TEST_SH} -c 'X=2; Y=3; echo Y % X = $( echo $(( $Y % $X )) )'
+}
+
+atf_test_case m_arithmetic_in_backticks
+m_arithmetic_in_backticks_head() {
+ atf_set "descr" "Checks that arithmetic works in old style cmd sub"
+}
+m_arithmetic_in_backticks_body() {
+ atf_check -s exit:0 -o inline:'2 + 3 = 5\n' -e empty \
+ ${TEST_SH} -c 'echo 2 + 3 = ` echo $(( 2 + 3 )) `'
+ atf_check -s exit:0 -o inline:'X * Y = 6\n' -e empty \
+ ${TEST_SH} -c 'X=2; Y=3; echo X \* Y = ` echo $(( X * Y )) `'
+ atf_check -s exit:0 -o inline:'Y % X = 1\n' -e empty \
+ ${TEST_SH} -c 'X=2; Y=3; echo Y % X = ` echo $(( $Y % $X )) `'
+}
+
+atf_test_case n_cmdsub_in_arithmetic
+n_cmdsub_in_arithmetic_head() {
+ atf_set "descr" "Tests uses of command substitutions in arithmetic"
+}
+n_cmdsub_in_arithmetic_body() {
+ atf_check -s exit:0 -o inline:'7\n' -e empty \
+ ${TEST_SH} -c 'echo $(( $( echo 3 ) $( echo + ) $( echo 4 ) ))'
+ atf_check -s exit:0 -o inline:'11\n7\n18\n4\n1\n' -e empty \
+ ${TEST_SH} -c \
+ 'for op in + - \* / %
+ do
+ echo $(( $( echo 9 ) $( echo "${op}" ) $( echo 2 ) ))
+ done'
+}
+
+atf_test_case o_backticks_in_arithmetic
+o_backticks_in_arithmetic_head() {
+ atf_set "descr" "Tests old style cmd sub used in arithmetic"
+}
+o_backticks_in_arithmetic_body() {
+ atf_check -s exit:0 -o inline:'33\n' -e empty \
+ ${TEST_SH} -c 'echo $(( `echo 77` `echo -` `echo 44`))'
+ atf_check -s exit:0 -o inline:'14\n8\n33\n3\n2\n' -e empty \
+ ${TEST_SH} -c \
+ 'for op in + - \* / %
+ do
+ echo $((`echo 11``echo "${op}"``echo 3`))
+ done'
+}
+
+atf_test_case p_cmdsub_in_heredoc
+p_cmdsub_in_heredoc_head() {
+ atf_set "descr" "Checks that cmdsubs work inside a here document"
+}
+p_cmdsub_in_heredoc_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'line 1+1\nline 2\nline 3\n' -e empty \
+ ${TEST_SH} -c \
+ 'cat <<- EOF
+ $( echo line 1 )$( echo +1 )
+ $( echo line 2;echo line 3 )
+ EOF'
+}
+
+atf_test_case q_backticks_in_heredoc
+q_backticks_in_heredoc_head() {
+ atf_set "descr" "Checks that old style cmdsubs work in here docs"
+}
+q_backticks_in_heredoc_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a\nlittle\nlamb\n' -e empty \
+ ${TEST_SH} -c \
+ 'cat <<- EOF
+ `echo Mary ` `echo had a `
+ ` echo little; echo lamb `
+ EOF'
+}
+
+atf_test_case r_heredoc_in_cmdsub
+r_heredoc_in_cmdsub_head() {
+ atf_set "descr" "Checks that here docs work inside cmd subs"
+}
+r_heredoc_in_cmdsub_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a\nlittle\nlamb\n' -e empty \
+ ${TEST_SH} -c 'echo "$( cat <<- \EOF
+ Mary had a
+ little
+ lamb
+ EOF
+ )"'
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'Mary had 1\nlittle\nlamb\nMary had 4\nlittle\nlambs\n' \
+ ${TEST_SH} -c 'for N in 1 4; do echo "$( cat <<- EOF
+ Mary had ${N}
+ little
+ lamb$( [ $N -gt 1 ] && echo s )
+ EOF
+ )"; done'
+
+
+ atf_check -s exit:0 -o inline:'A Calculation:\n2 * 7 = 14\n' -e empty \
+ ${TEST_SH} -c 'echo "$( cat <<- EOF
+ A Calculation:
+ 2 * 7 = $(( 2 * 7 ))
+ EOF
+ )"'
+}
+
+atf_test_case s_heredoc_in_backticks
+s_heredoc_in_backticks_head() {
+ atf_set "descr" "Checks that here docs work inside old style cmd subs"
+}
+s_heredoc_in_backticks_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a little lamb\n' -e empty \
+ ${TEST_SH} -c 'echo ` cat <<- \EOF
+ Mary had a
+ little
+ lamb
+ EOF
+ `'
+
+ atf_check -s exit:0 -o inline:'A Calculation:\n17 / 3 = 5\n' -e empty \
+ ${TEST_SH} -c 'echo "` cat <<- EOF
+ A Calculation:
+ 17 / 3 = $(( 17 / 3 ))
+ EOF
+ `"'
+}
+
+atf_test_case t_nested_cmdsubs_in_heredoc
+t_nested_cmdsubs_in_heredoc_head() {
+ atf_set "descr" "Checks nested command substitutions in here docs"
+}
+t_nested_cmdsubs_in_heredoc_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f * 2>/dev/null || :
+ echo "Hello" > File
+
+ atf_check -s exit:0 -o inline:'Hello U\nHelp me!\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ $(cat File) U
+ $( V=$(cat File); echo "${V%lo}p" ) me!
+ EOF'
+
+ rm -f * 2>/dev/null || :
+ echo V>V ; echo A>A; echo R>R
+ echo Value>VAR
+
+ atf_check -s exit:0 -o inline:'$2.50\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ $(Value='\''$2.50'\'';eval echo $(eval $(cat V)$(cat A)$(cat R)=\'\''\$$(cat $(cat V)$(cat A)$(cat R))\'\''; eval echo \$$(set -- *;echo ${3}${1}${2})))
+ EOF'
+}
+
+atf_test_case u_nested_backticks_in_heredoc
+u_nested_backticks_in_heredoc_head() {
+ atf_set "descr" "Checks nested old style cmd subs in here docs"
+}
+u_nested_backticks_in_heredoc_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f * 2>/dev/null || :
+ echo "Hello" > File
+
+ atf_check -s exit:0 -o inline:'Hello U\nHelp me!\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ `cat File` U
+ `V=\`cat File\`; echo "${V%lo}p" ` me!
+ EOF'
+
+ rm -f * 2>/dev/null || :
+ echo V>V ; echo A>A; echo R>R
+ echo Value>VAR
+
+ atf_check -s exit:0 -o inline:'$5.20\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ `Value='\''$5.20'\'';eval echo \`eval \\\`cat V\\\`\\\`cat A\\\`\\\`cat R\\\`=\\\'\''\\\$\\\`cat \\\\\\\`cat V\\\\\\\`\\\\\\\`cat A\\\\\\\`\\\\\\\`cat R\\\\\\\`\\\`\\\'\''; eval echo \\\$\\\`set -- *;echo \\\\\${3}\\\\\${1}\\\\\${2}\\\`\``
+ EOF'
+}
+
+atf_test_case v_cmdsub_paren_tests
+v_cmdsub__paren_tests_head() {
+ atf_set "descr" "tests with cmdsubs containing embedded ')'"
+}
+v_cmdsub_paren_tests_body() {
+
+ # Tests from:
+ # http://www.in-ulm.de/~mascheck/various/cmd-subst/
+ # (slightly modified.)
+
+ atf_check -s exit:0 -o inline:'A.1\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in x) echo A.1;; esac
+ )'
+
+ atf_check -s exit:0 -o inline:'A.2\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in x) echo A.2;; esac # comment
+ )'
+
+ atf_check -s exit:0 -o inline:'A.3\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in (x) echo A.3;; esac
+ )'
+
+ atf_check -s exit:0 -o inline:'A.4\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in (x) echo A.4;; esac # comment
+ )'
+
+ atf_check -s exit:0 -o inline:'A.5\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ case x in (x) echo A.5
+ esac
+ )'
+
+ atf_check -s exit:0 -o inline:'B: quoted )\n' -e empty ${TEST_SH} -c \
+ 'echo $(
+ echo '\''B: quoted )'\''
+ )'
+
+ atf_check -s exit:0 -o inline:'C: comment then closing paren\n' \
+ -e empty ${TEST_SH} -c \
+ 'echo $(
+ echo C: comment then closing paren # )
+ )'
+
+ atf_check -s exit:0 -o inline:'D.1: here-doc with )\n' \
+ -e empty ${TEST_SH} -c \
+ 'echo $(
+ cat <<-\eof
+ D.1: here-doc with )
+ eof
+ )'
+
+ # D.2 is a bogus test.
+
+ atf_check -s exit:0 -o inline:'D.3: here-doc with \()\n' \
+ -e empty ${TEST_SH} -c \
+ 'echo $(
+ cat <<-\eof
+ D.3: here-doc with \()
+ eof
+ )'
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'E: here-doc terminated with a parenthesis ("academic")\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ cat <<-\)
+ E: here-doc terminated with a parenthesis ("academic")
+ )
+ )'
+
+ atf_check -s exit:0 -e empty \
+-o inline:'F.1: here-doc embed with unbal single, back- or doublequote '\''\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ cat <<-"eof"
+ F.1: here-doc embed with unbal single, back- or doublequote '\''
+ eof
+ )'
+ atf_check -s exit:0 -e empty \
+ -o inline:'F.2: here-doc embed with unbal single, back- or doublequote "\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ cat <<-"eof"
+ F.2: here-doc embed with unbal single, back- or doublequote "
+ eof
+ )'
+ atf_check -s exit:0 -e empty \
+ -o inline:'F.3: here-doc embed with unbal single, back- or doublequote `\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ cat <<-"eof"
+ F.3: here-doc embed with unbal single, back- or doublequote `
+ eof
+ )'
+
+ atf_check -s exit:0 -e empty -o inline:'G: backslash at end of line\n' \
+ ${TEST_SH} -c \
+ 'echo $(
+ echo G: backslash at end of line # \
+ )'
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'H: empty command-substitution\n' \
+ ${TEST_SH} -c 'echo H: empty command-substitution $( )'
+}
+
+atf_test_case w_heredoc_outside_cmdsub
+w_heredoc_outside_cmdsub_head() {
+ atf_set "descr" "Checks that here docs work inside cmd subs"
+}
+w_heredoc_outside_cmdsub_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a\nlittle\nlamb\n' -e empty \
+ ${TEST_SH} -c 'echo "$( cat <<- \EOF )"
+ Mary had a
+ little
+ lamb
+ EOF
+ '
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'Mary had 1\nlittle\nlamb\nMary had 4\nlittle\nlambs\n' \
+ ${TEST_SH} -c 'for N in 1 4; do echo "$( cat <<- EOF )"
+ Mary had ${N}
+ little
+ lamb$( [ $N -gt 1 ] && echo s )
+ EOF
+ done'
+
+
+ atf_check -s exit:0 -o inline:'A Calculation:\n2 * 7 = 14\n' -e empty \
+ ${TEST_SH} -c 'echo "$( cat <<- EOF)"
+ A Calculation:
+ 2 * 7 = $(( 2 * 7 ))
+ EOF
+ '
+}
+
+atf_test_case x_heredoc_outside_backticks
+x_heredoc_outside_backticks_head() {
+ atf_set "descr" "Checks that here docs work inside old style cmd subs"
+}
+x_heredoc_outside_backticks_body() {
+ atf_require_prog cat
+
+ atf_check -s exit:0 -o inline:'Mary had a little lamb\n' -e empty \
+ ${TEST_SH} -c 'echo ` cat <<- \EOF `
+ Mary had a
+ little
+ lamb
+ EOF
+ '
+
+ atf_check -s exit:0 -o inline:'A Calculation:\n17 / 3 = 5\n' -e empty \
+ ${TEST_SH} -c 'echo "` cat <<- EOF `"
+ A Calculation:
+ 17 / 3 = $(( 17 / 3 ))
+ EOF
+ '
+}
+
+atf_test_case t_nested_cmdsubs_in_heredoc
+t_nested_cmdsubs_in_heredoc_head() {
+ atf_set "descr" "Checks nested command substitutions in here docs"
+}
+t_nested_cmdsubs_in_heredoc_body() {
+ atf_require_prog cat
+ atf_require_prog rm
+
+ rm -f * 2>/dev/null || :
+ echo "Hello" > File
+
+ atf_check -s exit:0 -o inline:'Hello U\nHelp me!\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ $(cat File) U
+ $( V=$(cat File); echo "${V%lo}p" ) me!
+ EOF'
+
+ rm -f * 2>/dev/null || :
+ echo V>V ; echo A>A; echo R>R
+ echo Value>VAR
+
+ atf_check -s exit:0 -o inline:'$2.50\n' -e empty \
+ ${TEST_SH} -c 'cat <<- EOF
+ $(Value='\''$2.50'\'';eval echo $(eval $(cat V)$(cat A)$(cat R)=\'\''\$$(cat $(cat V)$(cat A)$(cat R))\'\''; eval echo \$$(set -- *;echo ${3}${1}${2})))
+ EOF'
+}
+
+atf_test_case z_absurd_heredoc_cmdsub_combos
+z_absurd_heredoc_cmdsub_combos_head() {
+ atf_set "descr" "perverse and unusual cmd substitutions & more"
+}
+z_absurd_heredoc_cmdsub_combos_body() {
+
+ echo "Help!" > help
+
+ # This version works in NetBSD (& FreeBSD)'s sh (and most others)
+ atf_check -s exit:0 -o inline:'Help!\nMe 2\n' -e empty ${TEST_SH} -c '
+ cat <<- EOF
+ $(
+ cat <<- STOP
+ $(
+ cat `echo help`
+ )
+ STOP
+ )
+ $(
+ cat <<- END 4<<-TRASH
+ Me $(( 1 + 1 ))
+ END
+ This is unused noise!
+ TRASH
+ )
+ EOF
+ '
+
+ # atf_expect_fail "PR bin/50993 - heredoc parsing done incorrectly"
+ atf_check -s exit:0 -o inline:'Help!\nMe 2\n' -e empty ${TEST_SH} -c '
+ cat <<- EOF
+ $(
+ cat << STOP
+ $(
+ cat `echo help`
+ )
+ STOP
+ )
+ $(
+ cat <<- END 4<<TRASH
+ Me $(( 1 + 1 ))
+ END
+ This is unused noise!
+ TRASH
+ )
+ EOF
+ '
+}
+
+atf_init_test_cases() {
+ atf_add_test_case a_basic_cmdsub
+ atf_add_test_case b_basic_backticks
+ atf_add_test_case c_nested_cmdsub
+ atf_add_test_case d_nested_backticks
+ atf_add_test_case e_perverse_mixing
+ atf_add_test_case f_redirect_in_cmdsub
+ atf_add_test_case g_redirect_in_backticks
+ atf_add_test_case h_vars_in_cmdsub
+ atf_add_test_case i_vars_in_backticks
+ atf_add_test_case j_cmdsub_in_varexpand
+ atf_add_test_case k_backticks_in_varexpand
+ atf_add_test_case l_arithmetic_in_cmdsub
+ atf_add_test_case m_arithmetic_in_backticks
+ atf_add_test_case n_cmdsub_in_arithmetic
+ atf_add_test_case o_backticks_in_arithmetic
+ atf_add_test_case p_cmdsub_in_heredoc
+ atf_add_test_case q_backticks_in_heredoc
+ atf_add_test_case r_heredoc_in_cmdsub
+ atf_add_test_case s_heredoc_in_backticks
+ atf_add_test_case t_nested_cmdsubs_in_heredoc
+ atf_add_test_case u_nested_backticks_in_heredoc
+ atf_add_test_case v_cmdsub_paren_tests
+ atf_add_test_case w_heredoc_outside_cmdsub
+ atf_add_test_case x_heredoc_outside_backticks
+ atf_add_test_case z_absurd_heredoc_cmdsub_combos
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_evaltested.sh b/contrib/netbsd-tests/bin/sh/t_evaltested.sh
index e40f8bd..128a55c 100755
--- a/contrib/netbsd-tests/bin/sh/t_evaltested.sh
+++ b/contrib/netbsd-tests/bin/sh/t_evaltested.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_evaltested.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_evaltested.sh,v 1.2 2016/03/27 14:50:01 christos Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,6 +24,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
atf_test_case evaltested
@@ -43,7 +45,7 @@ fi
echo "passed"
exit 0
EOF
- output="$(/bin/sh helper.sh)"
+ output="$($TEST_SH helper.sh)"
[ $? = 0 ] && return
if [ -n "$output" ]
diff --git a/contrib/netbsd-tests/bin/sh/t_exit.sh b/contrib/netbsd-tests/bin/sh/t_exit.sh
index 62c5869..17ed230 100755
--- a/contrib/netbsd-tests/bin/sh/t_exit.sh
+++ b/contrib/netbsd-tests/bin/sh/t_exit.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_exit.sh,v 1.3 2012/04/13 06:12:32 jruoho Exp $
+# $NetBSD: t_exit.sh,v 1.6 2016/05/07 23:51:30 kre Exp $
#
# Copyright (c) 2007 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,74 +24,124 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
-crud() {
- test yes = no
-
- cat <<EOF
-$?
-EOF
-}
atf_test_case background
background_head() {
atf_set "descr" "Tests that sh(1) sets '$?' properly when running " \
- "a command in the background (PR bin/46327)"
+ "a command in the background (PR bin/46327)"
}
background_body() {
- atf_check -s exit:0 -o ignore -e ignore -x "true; true & echo $?"
- atf_check -s exit:0 -o ignore -e ignore -x "false; true & echo $?"
+ atf_check -o match:0 -e empty ${TEST_SH} -c 'true; true & echo $?'
+ # atf_expect_fail "PR bin/46327" (now fixed?)
+ atf_check -o match:0 -e empty ${TEST_SH} -c 'false; true & echo $?'
}
atf_test_case function
function_head() {
- atf_set "descr" "Tests that \$? is correctly updated inside" \
- "a function"
+ atf_set "descr" "Tests that \$? is correctly updated inside " \
+ "a function"
}
function_body() {
- foo=`crud`
- atf_check_equal 'x$foo' 'x1'
+ atf_check -s exit:0 -o match:STATUS=1-0 -e empty \
+ ${TEST_SH} -c '
+ crud() {
+ test yes = no
+
+ cat <<-EOF
+ STATUS=$?
+ EOF
+ }
+ foo=$(crud)
+ echo "${foo}-$?"
+ '
}
atf_test_case readout
readout_head() {
- atf_set "descr" "Tests that \$? is correctly updated in a" \
- "compound expression"
+ atf_set "descr" "Tests that \$? is correctly updated in a " \
+ "compound expression"
}
readout_body() {
- atf_check_equal '$( true && ! true | false; echo $? )' '0'
+ atf_check -s exit:0 -o match:0 -e empty \
+ ${TEST_SH} -c 'true && ! true | false; echo $?'
}
atf_test_case trap_subshell
trap_subshell_head() {
- atf_set "descr" "Tests that the trap statement in a subshell" \
- "works when the subshell exits"
+ atf_set "descr" "Tests that the trap statement in a subshell " \
+ "works when the subshell exits"
}
trap_subshell_body() {
- atf_check -s eq:0 -o inline:'exiting\n' -x \
- '( trap "echo exiting" EXIT; /usr/bin/true )'
+ atf_check -s exit:0 -o inline:'exiting\n' -e empty \
+ ${TEST_SH} -c '( trap "echo exiting" EXIT; /usr/bin/true )'
}
atf_test_case trap_zero__implicit_exit
+trap_zero__implicit_exit_head() {
+ atf_set "descr" "Tests that the trap statement in a subshell in a " \
+ "script works when the subshell simply runs out of commands"
+}
trap_zero__implicit_exit_body() {
- # PR bin/6764: sh works but ksh does not"
+ # PR bin/6764: sh works but ksh does not
echo '( trap "echo exiting" 0 )' >helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/sh helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/ksh helper.sh
+ atf_check -s exit:0 -o match:exiting -e empty ${TEST_SH} helper.sh
+ # test ksh by setting TEST_SH to /bin/ksh and run the entire set...
+ # atf_check -s exit:0 -o match:exiting -e empty /bin/ksh helper.sh
}
atf_test_case trap_zero__explicit_exit
+trap_zero__explicit_exit_head() {
+ atf_set "descr" "Tests that the trap statement in a subshell in a " \
+ "script works when the subshell executes an explicit exit"
+}
trap_zero__explicit_exit_body() {
- echo '( trap "echo exiting" 0; exit )' >helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/sh helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/ksh helper.sh
+ echo '( trap "echo exiting" 0; exit; echo NO_NO_NO )' >helper.sh
+ atf_check -s exit:0 -o match:exiting -o not-match:NO_NO -e empty \
+ ${TEST_SH} helper.sh
+ # test ksh by setting TEST_SH to /bin/ksh and run the entire set...
+ # atf_check -s exit:0 -o match:exiting -e empty /bin/ksh helper.sh
}
-atf_test_case trap_zero__explicit_return
-trap_zero__explicit_return_body() {
- echo '( trap "echo exiting" 0; return )' >helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/sh helper.sh
- atf_check -s eq:0 -o match:exiting -e empty /bin/ksh helper.sh
+atf_test_case simple_exit
+simple_exit_head() {
+ atf_set "descr" "Tests that various values for exit status work"
+}
+# Note: ATF will not allow tests of exit values > 255, even if they would work
+simple_exit_body() {
+ for N in 0 1 2 3 4 5 6 42 99 101 125 126 127 128 129 200 254 255
+ do
+ atf_check -s exit:$N -o empty -e empty \
+ ${TEST_SH} -c "exit $N; echo FOO; echo BAR >&2"
+ done
+}
+
+atf_test_case subshell_exit
+subshell_exit_head() {
+ atf_set "descr" "Tests that subshell exit status works and \$? gets it"
+}
+# Note: ATF will not allow tests of exit values > 255, even if they would work
+subshell_exit_body() {
+ for N in 0 1 2 3 4 5 6 42 99 101 125 126 127 128 129 200 254 255
+ do
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c "(exit $N); test \$? -eq $N"
+ done
+}
+
+atf_test_case subshell_background
+subshell_background_head() {
+ atf_set "descr" "Tests that sh(1) sets '$?' properly when running " \
+ "a subshell in the background"
+}
+subshell_background_body() {
+ atf_check -o match:0 -e empty \
+ ${TEST_SH} -c 'true; (false || true) & echo $?'
+ # atf_expect_fail "PR bin/46327" (now fixed?)
+ atf_check -o match:0 -e empty \
+ ${TEST_SH} -c 'false; (false || true) & echo $?'
}
atf_init_test_cases() {
@@ -101,5 +151,7 @@ atf_init_test_cases() {
atf_add_test_case trap_subshell
atf_add_test_case trap_zero__implicit_exit
atf_add_test_case trap_zero__explicit_exit
- atf_add_test_case trap_zero__explicit_return
+ atf_add_test_case simple_exit
+ atf_add_test_case subshell_exit
+ atf_add_test_case subshell_background
}
diff --git a/contrib/netbsd-tests/bin/sh/t_expand.sh b/contrib/netbsd-tests/bin/sh/t_expand.sh
index eeaad5f..e785e1f 100755
--- a/contrib/netbsd-tests/bin/sh/t_expand.sh
+++ b/contrib/netbsd-tests/bin/sh/t_expand.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_expand.sh,v 1.2 2013/10/06 21:05:50 ast Exp $
+# $NetBSD: t_expand.sh,v 1.8 2016/04/29 18:29:17 christos Exp $
#
# Copyright (c) 2007, 2009 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,6 +24,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
#
# This file tests the functions in expand.c.
@@ -50,19 +52,15 @@ dollar_at_head() {
}
dollar_at_body() {
# This one should work everywhere.
- got=`echo "" "" | sed 's,$,EOL,'`
- atf_check_equal ' EOL' '$got'
+ atf_check -s exit:0 -o inline:' EOL\n' -e empty \
+ ${TEST_SH} -c 'echo "" "" | '" sed 's,\$,EOL,'"
# This code triggered the bug.
- set -- "" ""
- got=`echo "$@" | sed 's,$,EOL,'`
- atf_check_equal ' EOL' '$got'
+ atf_check -s exit:0 -o inline:' EOL\n' -e empty \
+ ${TEST_SH} -c 'set -- "" ""; echo "$@" | '" sed 's,\$,EOL,'"
- set -- -
- shift
- n_arg() { echo $#; }
- n_args=`n_arg "$@"`
- atf_check_equal '0' '$n_args'
+ atf_check -s exit:0 -o inline:'0\n' -e empty ${TEST_SH} -c \
+ 'set -- -; shift; n_arg() { echo $#; }; n_arg "$@"'
}
atf_test_case dollar_at_with_text
@@ -71,15 +69,61 @@ dollar_at_with_text_head() {
"within the quotes. PR bin/33956."
}
dollar_at_with_text_body() {
- set --
- atf_check_equal '' "$(delim_argv "$@")"
- atf_check_equal '>foobar<' "$(delim_argv "foo$@bar")"
- atf_check_equal '>foo bar<' "$(delim_argv "foo $@ bar")"
- set -- a b c
- atf_check_equal '>a< >b< >c<' "$(delim_argv "$@")"
- atf_check_equal '>fooa< >b< >cbar<' "$(delim_argv "foo$@bar")"
- atf_check_equal '>foo a< >b< >c bar<' "$(delim_argv "foo $@ bar")"
+ cat <<'EOF' > h-f1
+
+delim_argv() {
+ str=
+ while [ $# -gt 0 ]; do
+ if [ -z "${str}" ]; then
+ str=">$1<"
+ else
+ str="${str} >$1<"
+ fi
+ shift
+ done
+ echo "${str}"
+}
+
+EOF
+ cat <<'EOF' > h-f2
+
+delim_argv() {
+ str=
+ while [ $# -gt 0 ]; do
+
+ str="${str}${str:+ }>$1<"
+ shift
+
+ done
+ echo "${str}"
+}
+
+EOF
+
+ chmod +x h-f1 h-f2
+
+ for f in 1 2
+ do
+ atf_check -s exit:0 -o inline:'\n' -e empty ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- ; delim_argv "$@"'
+ atf_check -s exit:0 -o inline:'>foobar<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- ; delim_argv "foo$@bar"'
+ atf_check -s exit:0 -o inline:'>foo bar<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- ; delim_argv "foo $@ bar"'
+
+ atf_check -s exit:0 -o inline:'>a< >b< >c<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- a b c; delim_argv "$@"'
+ atf_check -s exit:0 -o inline:'>fooa< >b< >cbar<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- a b c; delim_argv "foo$@bar"'
+ atf_check -s exit:0 -o inline:'>foo a< >b< >c bar<\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./h-f${f}; "'set -- a b c; delim_argv "foo $@ bar"'
+ done
}
atf_test_case strip
@@ -91,8 +135,25 @@ strip_head() {
strip_body() {
line='#define bindir "/usr/bin" /* comment */'
stripped='#define bindir "/usr/bin" '
- atf_expect_fail "PR bin/43469"
- atf_check_equal '$stripped' '${line%%/\**}'
+
+ # atf_expect_fail "PR bin/43469" -- now fixed
+ for exp in \
+ '${line%%/\**}' \
+ '${line%%"/*"*}' \
+ '${line%%'"'"'/*'"'"'*}' \
+ '"${line%%/\**}"' \
+ '"${line%%"/*"*}"' \
+ '"${line%%'"'"'/*'"'"'*}"' \
+ '${line%/\**}' \
+ '${line%"/*"*}' \
+ '${line%'"'"'/*'"'"'*}' \
+ '"${line%/\**}"' \
+ '"${line%"/*"*}"' \
+ '"${line%'"'"'/*'"'"'*}"'
+ do
+ atf_check -o inline:":$stripped:\n" -e empty ${TEST_SH} -c \
+ "line='${line}'; echo :${exp}:"
+ done
}
atf_test_case varpattern_backslashes
@@ -103,7 +164,8 @@ varpattern_backslashes_head() {
varpattern_backslashes_body() {
line='/foo/bar/*/baz'
stripped='/foo/bar/'
- atf_check_equal $stripped ${line%%\**}
+ atf_check -o inline:'/foo/bar/\n' -e empty ${TEST_SH} -c \
+ 'line="/foo/bar/*/baz"; echo ${line%%\**}'
}
atf_test_case arithmetic
@@ -114,9 +176,13 @@ arithmetic_head() {
"this is true."
}
arithmetic_body() {
- atf_check_equal '3' '$((1 + 2))'
- atf_check_equal '2147483647' '$((0x7fffffff))'
- atf_check_equal '9223372036854775807' '$(((1 << 63) - 1))'
+
+ atf_check -o inline:'3' -e empty ${TEST_SH} -c \
+ 'printf %s $((1 + 2))'
+ atf_check -o inline:'2147483647' -e empty ${TEST_SH} -c \
+ 'printf %s $((0x7fffffff))'
+ atf_check -o inline:'9223372036854775807' -e empty ${TEST_SH} -c \
+ 'printf %s $(((1 << 63) - 1))'
}
atf_test_case iteration_on_null_parameter
@@ -126,10 +192,178 @@ iteration_on_null_parameter_head() {
"PR bin/48202."
}
iteration_on_null_parameter_body() {
- s1=`/bin/sh -uc 'N=; set -- ${N}; for X; do echo "[$X]"; done' 2>&1`
- s2=`/bin/sh -uc 'N=; set -- ${N:-}; for X; do echo "[$X]"; done' 2>&1`
- atf_check_equal '' '$s1'
- atf_check_equal '[]' '$s2'
+ atf_check -o empty -e empty ${TEST_SH} -c \
+ 'N=; set -- ${N}; for X; do echo "[$X]"; done'
+}
+
+atf_test_case iteration_on_quoted_null_parameter
+iteration_on_quoted_null_parameter_head() {
+ atf_set "descr" \
+ 'Check iteration of "$@" in for loop when set to null;'
+}
+iteration_on_quoted_null_parameter_body() {
+ atf_check -o inline:'[]\n' -e empty ${TEST_SH} -c \
+ 'N=; set -- "${N}"; for X; do echo "[$X]"; done'
+}
+
+atf_test_case iteration_on_null_or_null_parameter
+iteration_on_null_or_null_parameter_head() {
+ atf_set "descr" \
+ 'Check expansion of null parameter as default for another null'
+}
+iteration_on_null_or_null_parameter_body() {
+ atf_check -o empty -e empty ${TEST_SH} -c \
+ 'N=; E=; set -- ${N:-${E}}; for X; do echo "[$X]"; done'
+}
+
+atf_test_case iteration_on_null_or_missing_parameter
+iteration_on_null_or_missing_parameter_head() {
+ atf_set "descr" \
+ 'Check expansion of missing parameter as default for another null'
+}
+iteration_on_null_or_missing_parameter_body() {
+ # atf_expect_fail 'PR bin/50834'
+ atf_check -o empty -e empty ${TEST_SH} -c \
+ 'N=; set -- ${N:-}; for X; do echo "[$X]"; done'
+}
+
+nl='
+'
+reset()
+{
+ TEST_NUM=0
+ TEST_FAILURES=''
+ TEST_FAIL_COUNT=0
+ TEST_ID="$1"
+}
+
+check()
+{
+ fail=false
+ TEMP_FILE=$( mktemp OUT.XXXXXX )
+ TEST_NUM=$(( $TEST_NUM + 1 ))
+ MSG=
+
+ # our local shell (ATF_SHELL) better do quoting correctly...
+ # some of the tests expect us to expand $nl internally...
+ CMD="$1"
+
+ result="$( ${TEST_SH} -c "${CMD}" 2>"${TEMP_FILE}" )"
+ STATUS=$?
+
+ if [ "${STATUS}" -ne "$3" ]; then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} expected exit code $3, got ${STATUS}"
+
+ # don't actually fail just because of wrong exit code
+ # unless we either expected, or received "good"
+ case "$3/${STATUS}" in
+ (*/0|0/*) fail=true;;
+ esac
+ fi
+
+ if [ "$3" -eq 0 ]; then
+ if [ -s "${TEMP_FILE}" ]; then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} Messages produced on stderr unexpected..."
+ MSG="${MSG}${nl}$( cat "${TEMP_FILE}" )"
+ fail=true
+ fi
+ else
+ if ! [ -s "${TEMP_FILE}" ]; then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} Expected messages on stderr,"
+ MSG="${MSG} nothing produced"
+ fail=true
+ fi
+ fi
+ rm -f "${TEMP_FILE}"
+
+ # Remove newlines (use local shell for this)
+ oifs="$IFS"
+ IFS="$nl"
+ result="$(echo $result)"
+ IFS="$oifs"
+ if [ "$2" != "$result" ]
+ then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} Expected output '$2', received '$result'"
+ fail=true
+ fi
+
+ if $fail
+ then
+ MSG="${MSG}${MSG:+${nl}}[$TEST_NUM]"
+ MSG="${MSG} Full command: <<${CMD}>>"
+ fi
+
+ $fail && test -n "$TEST_ID" && {
+ TEST_FAILURES="${TEST_FAILURES}${TEST_FAILURES:+${nl}}"
+ TEST_FAILURES="${TEST_FAILURES}${TEST_ID}[$TEST_NUM]:"
+ TEST_FAILURES="${TEST_FAILURES} Test of '$1' failed.";
+ TEST_FAILURES="${TEST_FAILURES}${nl}${MSG}"
+ TEST_FAIL_COUNT=$(( $TEST_FAIL_COUNT + 1 ))
+ return 0
+ }
+ $fail && atf_fail "Test[$TEST_NUM] of '$1' failed${nl}${MSG}"
+ return 0
+}
+
+results()
+{
+ test -z "${TEST_ID}" && return 0
+ test -z "${TEST_FAILURES}" && return 0
+
+ echo >&2 "=========================================="
+ echo >&2 "While testing '${TEST_ID}'"
+ echo >&2 " - - - - - - - - - - - - - - - - -"
+ echo >&2 "${TEST_FAILURES}"
+ atf_fail \
+ "Test ${TEST_ID}: $TEST_FAIL_COUNT subtests (of $TEST_NUM) failed - see stderr"
+}
+
+atf_test_case shell_params
+shell_params_head() {
+ atf_set "descr" "Test correct operation of the numeric parameters"
+}
+shell_params_body() {
+ atf_require_prog mktemp
+
+ reset shell_params
+
+ check 'set -- a b c; echo "$#: $1 $2 $3"' '3: a b c' 0
+ check 'set -- a b c d e f g h i j k l m; echo "$#: ${1}0 ${10} $10"' \
+ '13: a0 j a0' 0
+ check 'x="$0"; set -- a b; y="$0";
+ [ "x${x}y" = "x${y}y" ] && echo OK || echo x="$x" y="$y"' \
+ 'OK' 0
+ check "${TEST_SH} -c 'echo 0=\$0 1=\$1 2=\$2' a b c" '0=a 1=b 2=c' 0
+
+ echo 'echo 0="$0" 1="$1" 2="$2"' > helper.sh
+ check "${TEST_SH} helper.sh a b c" '0=helper.sh 1=a 2=b' 0
+
+ check 'set -- a bb ccc dddd eeeee ffffff ggggggg hhhhhhhh \
+ iiiiiiiii jjjjjjjjjj kkkkkkkkkkk
+ echo "${#}: ${#1} ${#2} ${#3} ${#4} ... ${#9} ${#10} ${#11}"' \
+ '11: 1 2 3 4 ... 9 10 11' 0
+
+ check 'set -- a b c; echo "$#: ${1-A} ${2-B} ${3-C} ${4-D} ${5-E}"' \
+ '3: a b c D E' 0
+ check 'set -- a "" c "" e
+ echo "$#: ${1:-A} ${2:-B} ${3:-C} ${4:-D} ${5:-E}"' \
+ '5: a B c D e' 0
+ check 'set -- a "" c "" e
+ echo "$#: ${1:+A} ${2:+B} ${3:+C} ${4:+D} ${5:+E}"' \
+ '5: A C E' 0
+ check 'set -- "abab*cbb"
+ echo "${1} ${1#a} ${1%b} ${1##ab} ${1%%b} ${1#*\*} ${1%\**}"' \
+ 'abab*cbb bab*cbb abab*cb ab*cbb abab*cb cbb abab' 0
+ check 'set -- "abab?cbb"
+ echo "${1}:${1#*a}+${1%b*}-${1##*a}_${1%%b*}%${1#[ab]}=${1%?*}/${1%\?*}"' \
+ 'abab?cbb:bab?cbb+abab?cb-b?cbb_a%bab?cbb=abab?cb/abab' 0
+ check 'set -- a "" c "" e; echo "${2:=b}"' '' 1
+
+ results
}
atf_init_test_cases() {
@@ -139,4 +373,8 @@ atf_init_test_cases() {
atf_add_test_case varpattern_backslashes
atf_add_test_case arithmetic
atf_add_test_case iteration_on_null_parameter
+ atf_add_test_case iteration_on_quoted_null_parameter
+ atf_add_test_case iteration_on_null_or_null_parameter
+ atf_add_test_case iteration_on_null_or_missing_parameter
+ atf_add_test_case shell_params
}
diff --git a/contrib/netbsd-tests/bin/sh/t_fsplit.sh b/contrib/netbsd-tests/bin/sh/t_fsplit.sh
index 2c3dbae..a37804b 100755
--- a/contrib/netbsd-tests/bin/sh/t_fsplit.sh
+++ b/contrib/netbsd-tests/bin/sh/t_fsplit.sh
@@ -1,6 +1,6 @@
-# $NetBSD: t_fsplit.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_fsplit.sh,v 1.4 2016/03/27 14:50:01 christos Exp $
#
-# Copyright (c) 2007 The NetBSD Foundation, Inc.
+# Copyright (c) 2007-2016 The NetBSD Foundation, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -33,22 +33,51 @@
# the "${x-" and "}" were absent from the input line.
#
# So: sh -c 'set ${x-a b c}; echo $#' should give 3.
+# and: sh -c 'set -- ${x-}' echo $#' shold give 0
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
nl='
'
check()
{
- result="$(eval $1)"
+ TEST=$((${TEST} + 1))
+
+ case "$#" in
+ (2) ;;
+ (*) atf_fail "Internal test error, $# args to check test ${TEST}";;
+ esac
+
+ result=$( ${TEST_SH} -c "unset x; $1" )
+ STATUS="$?"
+
# Remove newlines
oifs="$IFS"
IFS="$nl"
result="$(echo $result)"
IFS="$oifs"
+
+ # trim the test text in case we use it in a message below
+ case "$1" in
+ ????????????????*)
+ set -- "$(expr "$1" : '\(............\).*')..." "$2" ;;
+ esac
+
if [ "$2" != "$result" ]
then
- atf_fail "expected [$2], found [$result]"
+ if [ "${STATUS}" = "0" ]
+ then
+ atf_fail "Test ${TEST} '$1': expected [$2], found [$result]"
+ else
+ atf_fail \
+ "TEST ${TEST} '$1' failed ($STATUS): expected [$2], found [$result]"
+ fi
+ elif [ "${STATUS}" != 0 ]
+ then
+ atf_fail "TEST ${TEST} '$1' failed ($STATUS)"
fi
}
@@ -59,6 +88,7 @@ for_head() {
for_body() {
unset x
+ TEST=0
# Since I managed to break this, leave the test in
check 'for f in $x; do echo x${f}y; done' ''
}
@@ -68,17 +98,121 @@ default_val_head() {
atf_set "descr" "Checks field splitting in variable default values"
}
default_val_body() {
- unset x
-
+ TEST=0
# Check that IFS is applied to text from ${x-...} unless it is inside
# any set of "..."
- check 'set ${x-a b c}; echo $#' 3
- check 'for i in ${x-a b c}; do echo "z${i}z"; done' 'zaz zbz zcz'
- check 'for i in ${x-"a b" c}; do echo "z${i}z"; done' 'za bz zcz'
- check 'for i in ${x-"a ${x-b c}" d}; do echo "z${i}z"; done' 'za b cz zdz'
- check 'for i in ${x-"a ${x-"b c"}" d}; do echo "z${i}z"; done' 'za b cz zdz'
- check 'for i in ${x-a ${x-"b c"} d}; do echo "z${i}z"; done' 'zaz zb cz zdz'
- check 'for i in ${x-a ${x-b c} d}; do echo "z${i}z"; done' 'zaz zbz zcz zdz'
+ check 'set -- ${x-a b c}; echo $#' 3
+
+ check 'set -- ${x-"a b" c}; echo $#' 2
+ check 'set -- ${x-a "b c"}; echo $#' 2
+ check 'set -- ${x-"a b c"}; echo $#' 1
+
+ check "set -- \${x-'a b' c}; echo \$#" 2
+ check "set -- \${x-a 'b c'}; echo \$#" 2
+ check "set -- \${x-'a b c'}; echo \$#" 1
+
+ check 'set -- ${x-a\ b c}; echo $#' 2
+ check 'set -- ${x-a b\ c}; echo $#' 2
+ check 'set -- ${x-a\ b\ c}; echo $#' 1
+
+ check 'set -- ${x}; echo $#' 0
+ check 'set -- ${x-}; echo $#' 0
+ check 'set -- ${x-""}; echo $#' 1
+ check 'set -- ""${x}; echo $#' 1
+ check 'set -- ""${x-}; echo $#' 1
+ check 'set -- ""${x-""}; echo $#' 1
+ check 'set -- ${x}""; echo $#' 1
+ check 'set -- ${x-}""; echo $#' 1
+ check 'set -- ${x-""}""; echo $#' 1
+ check 'set -- ""${x}""; echo $#' 1
+ check 'set -- ""${x-}""; echo $#' 1
+ check 'set -- ""${x-""}""; echo $#' 1
+
+ check 'for i in ${x-a b c}; do echo "z${i}z"; done' \
+ 'zaz zbz zcz'
+ check 'for i in ${x-"a b" c}; do echo "z${i}z"; done' \
+ 'za bz zcz'
+ check 'for i in ${x-"a ${x-b c}" d}; do echo "z${i}z"; done' \
+ 'za b cz zdz'
+ check 'for i in ${x-a ${x-b c} d}; do echo "z${i}z"; done' \
+ 'zaz zbz zcz zdz'
+
+ # I am not sure these two are correct, the rules on quoting word
+ # in ${var-word} are peculiar, and hard to fathom...
+ # They are what the NetBSD shell does, and bash, not the freebsd shell
+ # (as of Mar 1, 2016)
+
+ check 'for i in ${x-"a ${x-"b c"}" d}; do echo "z${i}z"; done' \
+ 'za b cz zdz'
+ check 'for i in ${x-a ${x-"b c"} d}; do echo "z${i}z"; done' \
+ 'zaz zb cz zdz'
+}
+
+atf_test_case replacement_val
+replacement_val_head() {
+ atf_set "descr" "Checks field splitting in variable replacement values"
+}
+replacement_val_body() {
+ TEST=0
+
+ # Check that IFS is applied to text from ${x+...} unless it is inside
+ # any set of "...", or whole expansion is quoted, or both...
+
+ check 'x=BOGUS; set -- ${x+a b c}; echo $#' 3
+
+ check 'x=BOGUS; set -- ${x+"a b" c}; echo $#' 2
+ check 'x=BOGUS; set -- ${x+a "b c"}; echo $#' 2
+ check 'x=BOGUS; set -- ${x+"a b c"}; echo $#' 1
+
+ check "x=BOGUS; set -- \${x+'a b' c}; echo \$#" 2
+ check "x=BOGUS; set -- \${x+a 'b c'}; echo \$#" 2
+ check "x=BOGUS; set -- \${x+'a b c'}; echo \$#" 1
+
+ check 'x=BOGUS; set -- ${x+a\ b c}; echo $#' 2
+ check 'x=BOGUS; set -- ${x+a b\ c}; echo $#' 2
+ check 'x=BOGUS; set -- ${x+a\ b\ c}; echo $#' 1
+
+ check 'x=BOGUS; set -- ${x+}; echo $#' 0
+ check 'x=BOGUS; set -- ${x+""}; echo $#' 1
+ check 'x=BOGUS; set -- ""${x+}; echo $#' 1
+ check 'x=BOGUS; set -- ""${x+""}; echo $#' 1
+ check 'x=BOGUS; set -- ${x+}""; echo $#' 1
+ check 'x=BOGUS; set -- ${x+""}""; echo $#' 1
+ check 'x=BOGUS; set -- ""${x+}""; echo $#' 1
+ check 'x=BOGUS; set -- ""${x+""}""; echo $#' 1
+
+ # verify that the value of $x does not affecty the value of ${x+...}
+ check 'x=BOGUS; set -- ${x+}; echo X$1' X
+ check 'x=BOGUS; set -- ${x+""}; echo X$1' X
+ check 'x=BOGUS; set -- ""${x+}; echo X$1' X
+ check 'x=BOGUS; set -- ""${x+""}; echo X$1' X
+ check 'x=BOGUS; set -- ${x+}""; echo X$1' X
+ check 'x=BOGUS; set -- ${x+""}""; echo X$1' X
+ check 'x=BOGUS; set -- ""${x+}""; echo X$1' X
+ check 'x=BOGUS; set -- ""${x+""}""; echo X$1' X
+
+ check 'x=BOGUS; set -- ${x+}; echo X${1-:}X' X:X
+ check 'x=BOGUS; set -- ${x+""}; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ""${x+}; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ""${x+""}; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ${x+}""; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ${x+""}""; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ""${x+}""; echo X${1-:}X' XX
+ check 'x=BOGUS; set -- ""${x+""}""; echo X${1-:}X' XX
+
+ # and validate that the replacement can be used as expected
+ check 'x=BOGUS; for i in ${x+a b c}; do echo "z${i}z"; done'\
+ 'zaz zbz zcz'
+ check 'x=BOGUS; for i in ${x+"a b" c}; do echo "z${i}z"; done'\
+ 'za bz zcz'
+ check 'x=BOGUS; for i in ${x+"a ${x+b c}" d}; do echo "z${i}z"; done'\
+ 'za b cz zdz'
+ check 'x=BOGUS; for i in ${x+"a ${x+"b c"}" d}; do echo "z${i}z"; done'\
+ 'za b cz zdz'
+ check 'x=BOGUS; for i in ${x+a ${x+"b c"} d}; do echo "z${i}z"; done'\
+ 'zaz zb cz zdz'
+ check 'x=BOGUS; for i in ${x+a ${x+b c} d}; do echo "z${i}z"; done'\
+ 'zaz zbz zcz zdz'
}
atf_test_case ifs_alpha
@@ -89,13 +223,19 @@ ifs_alpha_head() {
ifs_alpha_body() {
unset x
+ TEST=0
# repeat with an alphabetic in IFS
check 'IFS=q; set ${x-aqbqc}; echo $#' 3
- check 'IFS=q; for i in ${x-aqbqc}; do echo "z${i}z"; done' 'zaz zbz zcz'
- check 'IFS=q; for i in ${x-"aqb"qc}; do echo "z${i}z"; done' 'zaqbz zcz'
- check 'IFS=q; for i in ${x-"aq${x-bqc}"qd}; do echo "z${i}z"; done' 'zaqbqcz zdz'
- check 'IFS=q; for i in ${x-"aq${x-"bqc"}"qd}; do echo "z${i}z"; done' 'zaqbqcz zdz'
- check 'IFS=q; for i in ${x-aq${x-"bqc"}qd}; do echo "z${i}z"; done' 'zaz zbqcz zdz'
+ check 'IFS=q; for i in ${x-aqbqc}; do echo "z${i}z"; done' \
+ 'zaz zbz zcz'
+ check 'IFS=q; for i in ${x-"aqb"qc}; do echo "z${i}z"; done' \
+ 'zaqbz zcz'
+ check 'IFS=q; for i in ${x-"aq${x-bqc}"qd}; do echo "z${i}z"; done' \
+ 'zaqbqcz zdz'
+ check 'IFS=q; for i in ${x-"aq${x-"bqc"}"qd}; do echo "z${i}z"; done' \
+ 'zaqbqcz zdz'
+ check 'IFS=q; for i in ${x-aq${x-"bqc"}qd}; do echo "z${i}z"; done' \
+ 'zaz zbqcz zdz'
}
atf_test_case quote
@@ -106,6 +246,7 @@ quote_head() {
quote_body() {
unset x
+ TEST=0
# Some quote propagation checks
check 'set "${x-a b c}"; echo $#' 1
check 'set "${x-"a b" c}"; echo $1' 'a b c'
@@ -120,19 +261,44 @@ dollar_at_head() {
dollar_at_body() {
unset x
+ TEST=0
# Check we get "$@" right
- check 'set ""; for i; do echo "z${i}z"; done' 'zz'
- check 'set ""; for i in "$@"; do echo "z${i}z"; done' 'zz'
- check 'set "" ""; for i; do echo "z${i}z"; done' 'zz zz'
- check 'set "" ""; for i in "$@"; do echo "z${i}z"; done' 'zz zz'
- check 'set "" ""; for i in $@; do echo "z${i}z"; done' ''
- check 'set "a b" c; for i; do echo "z${i}z"; done' 'za bz zcz'
- check 'set "a b" c; for i in "$@"; do echo "z${i}z"; done' 'za bz zcz'
- check 'set "a b" c; for i in $@; do echo "z${i}z"; done' 'zaz zbz zcz'
- check 'set " a b " c; for i in "$@"; do echo "z${i}z"; done' 'z a b z zcz'
- check 'set --; for i in x"$@"x; do echo "z${i}z"; done' 'zxxz'
- check 'set a; for i in x"$@"x; do echo "z${i}z"; done' 'zxaxz'
- check 'set a b; for i in x"$@"x; do echo "z${i}z"; done' 'zxaz zbxz'
+
+ check 'set --; for i in x"$@"x; do echo "z${i}z"; done' 'zxxz'
+ check 'set a; for i in x"$@"x; do echo "z${i}z"; done' 'zxaxz'
+ check 'set a b; for i in x"$@"x; do echo "z${i}z"; done' 'zxaz zbxz'
+
+ check 'set --; for i; do echo "z${i}z"; done' ''
+ check 'set --; for i in $@; do echo "z${i}z"; done' ''
+ check 'set --; for i in "$@"; do echo "z${i}z"; done' ''
+ # atf_expect_fail "PR bin/50834"
+ check 'set --; for i in ""$@; do echo "z${i}z"; done' 'zz'
+ # atf_expect_pass
+ check 'set --; for i in $@""; do echo "z${i}z"; done' 'zz'
+ check 'set --; for i in ""$@""; do echo "z${i}z"; done' 'zz'
+ check 'set --; for i in """$@"; do echo "z${i}z"; done' 'zz'
+ check 'set --; for i in "$@"""; do echo "z${i}z"; done' 'zz'
+ check 'set --; for i in """$@""";do echo "z${i}z"; done' 'zz'
+
+ check 'set ""; for i; do echo "z${i}z"; done' 'zz'
+ check 'set ""; for i in "$@"; do echo "z${i}z"; done' 'zz'
+ check 'set "" ""; for i; do echo "z${i}z"; done' 'zz zz'
+ check 'set "" ""; for i in "$@"; do echo "z${i}z"; done' 'zz zz'
+ check 'set "" ""; for i in $@; do echo "z${i}z"; done' ''
+
+ check 'set "a b" c; for i; do echo "z${i}z"; done' \
+ 'za bz zcz'
+ check 'set "a b" c; for i in "$@"; do echo "z${i}z"; done' \
+ 'za bz zcz'
+ check 'set "a b" c; for i in $@; do echo "z${i}z"; done' \
+ 'zaz zbz zcz'
+ check 'set " a b " c; for i in "$@"; do echo "z${i}z"; done' \
+ 'z a b z zcz'
+
+ check 'set a b c; for i in "$@$@"; do echo "z${i}z"; done' \
+ 'zaz zbz zcaz zbz zcz'
+ check 'set a b c; for i in "$@""$@";do echo "z${i}z"; done' \
+ 'zaz zbz zcaz zbz zcz'
}
atf_test_case ifs
@@ -143,6 +309,7 @@ ifs_head() {
ifs_body() {
unset x
+ TEST=0
# Some IFS tests
check 't="-- "; IFS=" "; set $t; IFS=":"; r="$*"; IFS=; echo $# $r' '0'
check 't=" x"; IFS=" x"; set $t; IFS=":"; r="$*"; IFS=; echo $# $r' '1'
@@ -165,19 +332,26 @@ var_length_head() {
"a variable's length"
}
var_length_body() {
- unset x
+ TEST=0
- # Check that we apply IFS to ${#var}
long=12345678123456781234567812345678
long=$long$long$long$long
- check 'echo ${#long}; IFS=2; echo ${#long}; set 1 ${#long};echo $#' '128 1 8 3'
- check 'IFS=2; set ${x-${#long}}; IFS=" "; echo $* $#' '1 8 2'
- check 'IFS=2; set ${x-"${#long}"}; IFS=" "; echo $* $#' '128 1'
+ export long
+
+ # first test that the test method works...
+ check 'set -u; : ${long}; echo ${#long}' '128'
+
+ # Check that we apply IFS to ${#var}
+ check 'echo ${#long}; IFS=2; echo ${#long}; set 1 ${#long};echo $#' \
+ '128 1 8 3'
+ check 'IFS=2; set ${x-${#long}}; IFS=" "; echo $* $#' '1 8 2'
+ check 'IFS=2; set ${x-"${#long}"}; IFS=" "; echo $* $#' '128 1'
}
atf_init_test_cases() {
atf_add_test_case for
atf_add_test_case default_val
+ atf_add_test_case replacement_val
atf_add_test_case ifs_alpha
atf_add_test_case quote
atf_add_test_case dollar_at
diff --git a/contrib/netbsd-tests/bin/sh/t_here.sh b/contrib/netbsd-tests/bin/sh/t_here.sh
index 250c686..27307f5 100755
--- a/contrib/netbsd-tests/bin/sh/t_here.sh
+++ b/contrib/netbsd-tests/bin/sh/t_here.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_here.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_here.sh,v 1.6 2016/03/31 16:21:52 christos Exp $
#
# Copyright (c) 2007 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,50 +24,542 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
nl='
'
+reset()
+{
+ TEST_NUM=0
+ TEST_FAILURES=''
+ TEST_FAIL_COUNT=0
+ TEST_ID="$1"
+}
+
check()
{
- SVIFS="$IFS"
- result="$(eval $1)"
- # Remove newlines
+ fail=false
+ TEMP_FILE=$( mktemp OUT.XXXXXX )
+ TEST_NUM=$(( $TEST_NUM + 1 ))
+
+ # our local shell (ATF_SHELL) better do quoting correctly...
+ # some of the tests expect us to expand $nl internally...
+ CMD="nl='${nl}'; $1"
+
+ result="$( ${TEST_SH} -c "${CMD}" 2>"${TEMP_FILE}" )"
+ STATUS=$?
+
+ if [ "${STATUS}" -ne "$3" ]; then
+ echo >&2 "[$TEST_NUM] expected exit code $3, got ${STATUS}"
+
+ # don't actually fail just because of wrong exit code
+ # unless we either expected, or received "good"
+ case "$3/${STATUS}" in
+ (*/0|0/*) fail=true;;
+ esac
+ fi
+
+ if [ "$3" -eq 0 ]; then
+ if [ -s "${TEMP_FILE}" ]; then
+ echo >&2 \
+ "[$TEST_NUM] Messages produced on stderr unexpected..."
+ cat "${TEMP_FILE}" >&2
+ fail=true
+ fi
+ else
+ if ! [ -s "${TEMP_FILE}" ]; then
+ echo >&2 \
+ "[$TEST_NUM] Expected messages on stderr, nothing produced"
+ fail=true
+ fi
+ fi
+ rm -f "${TEMP_FILE}"
+
+ # Remove newlines (use local shell for this)
oifs="$IFS"
IFS="$nl"
result="$(echo $result)"
IFS="$oifs"
if [ "$2" != "$result" ]
then
- atf_fail "expected [$2], found [$result]"
+ echo >&2 "[$TEST_NUM] Expected output '$2', received '$result'"
+ fail=true
fi
- IFS="$SVIFS"
+
+ if $fail
+ then
+ echo >&2 "[$TEST_NUM] Full command: <<${CMD}>>"
+ fi
+
+ $fail && test -n "$TEST_ID" && {
+ TEST_FAILURES="${TEST_FAILURES}${TEST_FAILURES:+
+}${TEST_ID}[$TEST_NUM]: test of '$1' failed";
+ TEST_FAIL_COUNT=$(( $TEST_FAIL_COUNT + 1 ))
+ return 0
+ }
+ $fail && atf_fail "Test[$TEST_NUM] of '$1' failed"
+ return 0
}
-atf_test_case all
-all_head() {
+results()
+{
+ test -z "${TEST_ID}" && return 0
+ test -z "${TEST_FAILURES}" && return 0
+
+ echo >&2 "=========================================="
+ echo >&2 "While testing '${TEST_ID}'"
+ echo >&2 " - - - - - - - - - - - - - - - - -"
+ echo >&2 "${TEST_FAILURES}"
+ atf_fail \
+ "Test ${TEST_ID}: $TEST_FAIL_COUNT subtests (of $TEST_NUM) failed - see stderr"
+}
+
+atf_test_case do_simple
+do_simple_head() {
atf_set "descr" "Basic tests for here documents"
}
-all_body() {
+do_simple_body() {
y=x
- IFS=
- check 'x=`cat <<EOF'$nl'text'${nl}EOF$nl'`; echo $x' 'text'
- check 'x=`cat <<\EOF'$nl'text'${nl}EOF$nl'`; echo $x' 'text'
+ reset 'simple'
+ IFS=' '
+ check 'x=`cat <<EOF'$nl'text'${nl}EOF$nl'`; echo $x' 'text' 0
+ check 'x=`cat <<\EOF'$nl'text'${nl}EOF$nl'`; echo $x' 'text' 0
+
+ check "y=${y};"'x=`cat <<EOF'$nl'te${y}t'${nl}EOF$nl'`; echo $x' \
+ 'text' 0
+ check "y=${y};"'x=`cat <<\EOF'$nl'te${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te${y}t' 0
+ check "y=${y};"'x=`cat <<"EOF"'$nl'te${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te${y}t' 0
+ check "y=${y};"'x=`cat <<'"'EOF'"$nl'te${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te${y}t' 0
+
+ # check that quotes in the here doc survive and cause no problems
+ check "cat <<EOF${nl}te'xt${nl}EOF$nl" "te'xt" 0
+ check "cat <<\EOF${nl}te'xt${nl}EOF$nl" "te'xt" 0
+ check "cat <<'EOF'${nl}te'xt${nl}EOF$nl" "te'xt" 0
+ check "cat <<EOF${nl}te\"xt${nl}EOF$nl" 'te"xt' 0
+ check "cat <<\EOF${nl}te\"xt${nl}EOF$nl" 'te"xt' 0
+ check "cat <<'EOF'${nl}te\"xt${nl}EOF$nl" 'te"xt' 0
+ check "cat <<'EO'F${nl}te\"xt${nl}EOF$nl" 'te"xt' 0
+
+ check "y=${y};"'x=`cat <<EOF'$nl'te'"'"'${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te'"'"'xt' 0
+ check "y=${y};"'x=`cat <<EOF'$nl'te'"''"'${y}t'${nl}EOF$nl'`; echo $x' \
+ 'te'"''"'xt' 0
+
+ # note that the blocks of empty space in the following must
+ # be entirely tab characters, no spaces.
+
+ check 'x=`cat <<EOF'"$nl text${nl}EOF$nl"'`; echo "$x"' \
+ ' text' 0
+ check 'x=`cat <<-EOF'"$nl text${nl}EOF$nl"'`; echo $x' \
+ 'text' 0
+ check 'x=`cat <<-EOF'"${nl}text${nl} EOF$nl"'`; echo $x' \
+ 'text' 0
+ check 'x=`cat <<-\EOF'"$nl text${nl} EOF$nl"'`; echo $x' \
+ 'text' 0
+ check 'x=`cat <<- "EOF"'"$nl text${nl}EOF$nl"'`; echo $x' \
+ 'text' 0
+ check 'x=`cat <<- '"'EOF'${nl}text${nl} EOF$nl"'`; echo $x' \
+ 'text' 0
+ results
+}
+
+atf_test_case end_markers
+end_markers_head() {
+ atf_set "descr" "Tests for various end markers of here documents"
+}
+end_markers_body() {
+
+ reset 'end_markers'
+ for end in EOF 1 \! '$$$' "string " a\\\ a\\\ \ '&' '' ' ' ' ' \
+ --STRING-- . '~~~' ')' '(' '#' '()' '(\)' '(\/)' '--' '\' '{' '}' \
+VERYVERYVERYVERYLONGLONGLONGin_fact_absurdly_LONG_LONG_HERE_DOCUMENT_TERMINATING_MARKER_THAT_goes_On_forever_and_ever_and_ever...
+ do
+ # check unquoted end markers
+ case "${end}" in
+ ('' | *[' ()\$&#*~']* ) ;; # skip unquoted endmark test for these
+ (*) check \
+ 'x=$(cat << '"${end}${nl}text${nl}${end}${nl}"'); printf %s "$x"' 'text' 0
+ ;;
+ esac
+
+ # and quoted end markers
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}${nl}"'); printf %s "$x"' 'text' 0
+
+ # and see what happens if we encounter "almost" an end marker
+ case "${#end}" in
+ (0|1) ;; # too short to try truncation tests
+ (*) check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end%?}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end%?}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end#?}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end#?}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end%?}+${nl}${end}${nl}"');printf %s "$x"' \
+ "text ${end%?}+" 0
+ ;;
+ esac
+
+ # or something that is a little longer
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}x${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}x" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}!${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text !${end}" 0
+
+ # or which does not begin at start of line
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl} ${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl} ${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}" 0
+
+ # or end at end of line
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end} ${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end} " 0
+
+ # or something that is correct much of the way, but then...
+
+ case "${#end}" in
+ (0) ;; # cannot test this one
+ (1) check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}${end}" 0
+ ;;
+ (2-7) pfx="${end%?}"
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}${pfx}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}${pfx}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${pfx}${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${pfx}${end}" 0
+ ;;
+ (*) pfx=${end%??????}; sfx=${end#??????}
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${end}${sfx}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${end}${sfx}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${pfx}${end}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${pfx}${end}" 0
+ check \
+ 'x=$(cat <<'"'${end}'${nl}text${nl}${pfx}${sfx}${nl}${end}${nl}"'); printf %s "$x"' \
+ "text ${pfx}${sfx}" 0
+ ;;
+ esac
+ done
+
+ # Add striptabs tests (in similar way) here one day...
+
+ results
+}
+
+atf_test_case incomplete
+incomplete_head() {
+ atf_set "descr" "Basic tests for incomplete here documents"
+}
+incomplete_body() {
+ reset incomplete
+
+ check 'cat <<EOF' '' 2
+ check 'cat <<- EOF' '' 2
+ check 'cat <<\EOF' '' 2
+ check 'cat <<- \EOF' '' 2
+
+ check 'cat <<EOF'"${nl}" '' 2
+ check 'cat <<- EOF'"${nl}" '' 2
+ check 'cat <<'"'EOF'${nl}" '' 2
+ check 'cat <<- "EOF"'"${nl}" '' 2
+
+ check 'cat << EOF'"${nl}${nl}" '' 2
+ check 'cat <<-EOF'"${nl}${nl}" '' 2
+ check 'cat << '"'EOF'${nl}${nl}" '' 2
+ check 'cat <<-"EOF"'"${nl}${nl}" '' 2
+
+ check 'cat << EOF'"${nl}"'line 1'"${nl}" '' 2
+ check 'cat <<-EOF'"${nl}"' line 1'"${nl}" '' 2
+ check 'cat << EOF'"${nl}"'line 1'"${nl}"' line 2'"${nl}" '' 2
+ check 'cat <<-EOF'"${nl}"' line 1'"${nl}"'line 2'"${nl}" '' 2
+
+ check 'cat << EOF'"${nl}line 1${nl}${nl}line3${nl}${nl}5!${nl}" '' 2
+
+ results
+}
+
+atf_test_case lineends
+lineends_head() {
+ atf_set "descr" "Tests for line endings in here documents"
+}
+lineends_body() {
+ reset lineends
+
+ # note that "check" removes newlines from stdout before comparing.
+ # (they become blanks, provided there is something before & after)
+
+ check 'cat << \echo'"${nl}"'\'"${nl}echo${nl}echo${nl}" '\' 0
+ check 'cat << echo'"${nl}"'\'"${nl}echo${nl}echo${nl}" 'echo' 0
+ check 'cat << echo'"${nl}"'\\'"${nl}echo${nl}echo${nl}" '\' 0
+
+ check 'X=3; cat << ec\ho'"${nl}"'$X\'"${nl}echo${nl}echo${nl}" \
+ '$X\' 0
+ check 'X=3; cat << echo'"${nl}"'$X'"${nl}echo${nl}echo${nl}" \
+ '3' 0
+ check 'X=3; cat << echo'"${nl}"'$X\'"${nl}echo${nl}echo${nl}" \
+ '' 0
+ check 'X=3; cat << echo'"${nl}"'${X}\'"${nl}echo${nl}echo${nl}" \
+ '3echo' 0
+ check 'X=3; cat << echo'"${nl}"'\$X\'"${nl}echo${nl}echo${nl}" \
+ '$Xecho' 0
+ check 'X=3; cat << echo'"${nl}"'\\$X \'"${nl}echo${nl}echo${nl}" \
+ '\3 echo' 0
+
+ check \
+ 'cat << "echo"'"${nl}"'line1\'"${nl}"'line2\'"${nl}echo${nl}echo${nl}" \
+ 'line1\ line2\' 0
+ check \
+ 'cat << echo'"${nl}"'line1\'"${nl}"'line2\'"${nl}echo${nl}echo${nl}" \
+ 'line1line2echo' 0
+
+ results
+}
+
+atf_test_case multiple
+multiple_head() {
+ atf_set "descr" "Tests for multiple here documents on one cmd line"
+}
+multiple_body() {
+ reset multiple
+
+ check \
+ "(cat ; cat <&3) <<EOF0 3<<EOF3${nl}STDIN${nl}EOF0${nl}-3-${nl}EOF3${nl}" \
+ 'STDIN -3-' 0
+
+ check "(read line; echo \"\$line\"; cat <<EOF1; echo \"\$line\") <<EOF2
+The File
+EOF1
+The Line
+EOF2
+" 'The Line The File The Line' 0
+
+ check "(read line; echo \"\$line\"; cat <<EOF; echo \"\$line\") <<EOF
+The File
+EOF
+The Line
+EOF
+" 'The Line The File The Line' 0
+
+ check "V=1; W=2; cat <<-1; cat <<2; cat <<- 3; cat <<'4';"' cat <<\5
+ $V
+ $W
+ 3
+ 4
+ 5
+ 1
+2
+ 5
+ 4*$W+\$V
+ 3
+$W
+1
+2
+3
+4
+7+$V
+$W+6
+5
+' '1 2 3 4 5 5 4*2+$V $W 1 2 3 7+$V $W+6' 0
+
+ results
+}
+
+atf_test_case nested
+nested_head() {
+ atf_set "descr" "Tests for nested here documents for one cmd"
+}
+nested_body() {
+ reset nested
+
+ check \
+'cat << EOF1'"${nl}"'$(cat << EOF2'"${nl}LINE${nl}EOF2${nl}"')'"${nl}EOF1${nl}"\
+ 'LINE' 0
+
+# This next one fails ... and correctly, so we will omit it (bad test)
+# Reasoning is that the correct data "$(cat << EOF2)\nLINE\nEOF2\n" is
+# collected for the outer (EOF1) heredoc, when that is parsed, it looks
+# like
+# $(cat <<EOF2)
+# LINE
+# EOF2
+# which looks like a good command - except it is being parsed in "heredoc"
+# syntax, which means it is enclosed in double quotes, which means that
+# the newline after the ')' in the first line is not a newline token, but
+# just a character. The EOF2 heredoc cannot start until after the next
+# newline token, of which there are none here... LINE and EOF2 are just
+# more data in the outer EOF1 heredoc for its "cat" command to read & write.
+#
+# The previous sub-test works because there the \n comes inside the
+# $( ), and in there, the outside quoting rules are suspended, and it
+# all starts again - so that \n is a newline token, and the EOF2 heredoc
+# is processed.
+#
+# check \
+# 'cat << EOF1'"${nl}"'$(cat << EOF2 )'"${nl}LINE${nl}EOF2${nl}EOF1${nl}" \
+# 'LINE' 0
+
+ L='cat << EOF1'"${nl}"'LINE1$(cat << EOF2'"${nl}"
+ L="${L}"'LINE2$(cat << EOF3'"${nl}"
+ L="${L}"'LINE3$(cat << EOF4'"${nl}"
+ L="${L}"'LINE4$(cat << EOF5'"${nl}"
+ L="${L}LINE5${nl}EOF5${nl})4${nl}EOF4${nl})3${nl}"
+ L="${L}EOF3${nl})2${nl}EOF2${nl})1${nl}EOF1${nl}"
+
+ # That mess is ...
+ #
+ # cat <<EOF1
+ # LINE1$(cat << EOF2
+ # LINE2$(cat << EOF3
+ # LINE3$(cat << EOF4
+ # LINE4$(cat << EOF5
+ # LINE5
+ # EOF5
+ # )4
+ # EOF4
+ # )3
+ # EOF3
+ # )2
+ # EOF2
+ # )1
+ # EOF1
+
+ check "${L}" 'LINE1LINE2LINE3LINE4LINE54321' 0
+
+ results
+}
+
+atf_test_case quoting
+quoting_head() {
+ atf_set "descr" "Tests for use of quotes inside here documents"
+}
+quoting_body() {
+ reset quoting
+
+ check 'X=!; cat <<- E\0F
+ <'\''"'\'' \\$X\$X "'\''" \\>
+ E0F
+ ' '<'\''"'\'' \\$X\$X "'\''" \\>' 0
+
+ check 'X=!; cat <<- E0F
+ <'\''"'\'' \\$X\$X "'\''" \\>
+ E0F
+ ' '<'\''"'\'' \!$X "'\''" \>' 0
+
+ check 'cat <<- END
+ $( echo "'\''" ) $( echo '\''"'\'' ) $( echo \\ )
+ END
+ ' "' \" \\" 0
+
+ check 'X=12345; Y="string1 line1?-line2"; Z=; unset W; cat <<-EOF
+ ${#X}${Z:-${Y}}${W+junk}${Y%%l*}${Y#*\?}
+ "$Z"'\''$W'\'' ${Y%" "*} $(( X + 54321 ))
+ EOF
+ ' '5string1 line1?-line2string1 -line2 ""'\'\'' string1 66666' 0
+
+ results
+}
+
+atf_test_case side_effects
+side_effects_head() {
+ atf_set "descr" "Tests how side effects in here documents are handled"
+}
+side_effects_body() {
+
+ atf_check -s exit:0 -o inline:'2\n1\n' -e empty ${TEST_SH} -c '
+ unset X
+ cat <<-EOF
+ ${X=2}
+ EOF
+ echo "${X-1}"
+ '
+}
+
+atf_test_case vicious
+vicious_head() {
+ atf_set "descr" "Tests for obscure and obnoxious uses of here docs"
+}
+vicious_body() {
+ reset
+
+ cat <<- \END_SCRIPT > script
+ cat <<ONE && cat \
+ <<TWO
+ a
+ ONE
+ b
+ TWO
+ END_SCRIPT
+
+ atf_check -s exit:0 -o inline:'a\nb\n' -e empty ${TEST_SH} script
+
+ # This next one is causing discussion currently (late Feb 2016)
+ # amongst stds writers & implementors. Consequently we
+ # will not check what it produces. The eventual result
+ # seems unlikely to be what we currently output, which
+ # is:
+ # A:echo line 1
+ # B:echo line 2)" && prefix DASH_CODE <<DASH_CODE
+ # B:echo line 3
+ # line 4
+ # line 5
+ #
+ # The likely intended output is ...
+ #
+ # A:echo line 3
+ # B:echo line 1
+ # line 2
+ # DASH_CODE:echo line 4)"
+ # DASH_CODE:echo line 5
+ #
+ # The difference is explained by differing opinions on just
+ # when processing of a here doc should start
+
+ cat <<- \END_SCRIPT > script
+ prefix() { sed -e "s/^/$1:/"; }
+ DASH_CODE() { :; }
- check 'x=`cat <<EOF'$nl'te${y}t'${nl}EOF$nl'`; echo $x' 'text'
- check 'x=`cat <<\EOF'$nl'te${y}t'${nl}EOF$nl'`; echo $x' 'te${y}t'
- check 'x=`cat <<"EOF"'$nl'te${y}t'${nl}EOF$nl'`; echo $x' 'te${y}t'
- check 'x=`cat <<'"'EOF'"$nl'te${y}t'${nl}EOF$nl'`; echo $x' 'te${y}t'
+ prefix A <<XXX && echo "$(prefix B <<XXX
+ echo line 1
+ XXX
+ echo line 2)" && prefix DASH_CODE <<DASH_CODE
+ echo line 3
+ XXX
+ echo line 4)"
+ echo line 5
+ DASH_CODE
+ END_SCRIPT
- check 'x=`cat <<EOF'$nl'te'"'"'xt'${nl}EOF$nl'`; echo $x' 'te'"'"'xt'
- check 'x=`cat <<\EOF'$nl'te'"'"'xt'${nl}EOF$nl'`; echo $x' 'te'"'"'xt'
- check 'x=`cat <<"EOF"'$nl'te'"'"'xt'${nl}EOF$nl'`; echo $x' 'te'"'"'xt'
+ # we will just verify that the shell can parse the
+ # script somehow, and doesn't fall over completely...
- check 'x=`cat <<EOF'$nl'te'"'"'${y}t'${nl}EOF$nl'`; echo $x' 'te'"'"'xt'
- check 'x=`cat <<EOF'$nl'te'"''"'${y}t'${nl}EOF$nl'`; echo $x' 'te'"''"'xt'
+ atf_check -s exit:0 -o ignore -e empty ${TEST_SH} script
}
atf_init_test_cases() {
- atf_add_test_case all
+ atf_add_test_case do_simple # not worthy of a comment
+ atf_add_test_case end_markers # the mundane, the weird, the bizarre
+ atf_add_test_case incomplete # where the end marker isn't...
+ atf_add_test_case lineends # test weird line endings in heredocs
+ atf_add_test_case multiple # multiple << operators on one cmd
+ atf_add_test_case nested # here docs inside here docs
+ atf_add_test_case quoting # stuff quoted inside
+ atf_add_test_case side_effects # here docs that modify environment
+ atf_add_test_case vicious # evil test from the austin-l list...
}
diff --git a/contrib/netbsd-tests/bin/sh/t_option.sh b/contrib/netbsd-tests/bin/sh/t_option.sh
new file mode 100755
index 0000000..eae2110
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_option.sh
@@ -0,0 +1,674 @@
+# $NetBSD: t_option.sh,v 1.3 2016/03/08 14:19:28 christos Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+# The standard
+# http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
+# says:
+# ...[lots]
+
+test_option_on_off()
+{
+ atf_require_prog tr
+
+ for opt
+ do
+ # t is needed, as inside $()` $- appears to lose
+ # the 'e' option if it happened to already be
+ # set. Must check if that is what should
+ # happen, but that is a different issue.
+
+ test -z "${opt}" && continue
+
+ # if we are playing with more that one option at a
+ # time, the code below requires that we start with no
+ # options set, or it will mis-diagnose the situation
+ CLEAR=''
+ test "${#opt}" -gt 1 &&
+ CLEAR='xx="$-" && xx=$(echo "$xx" | tr -d cs) && test -n "$xx" && set +"$xx";'
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ "opt=${opt}"'
+ x() {
+ echo "ERROR: Unable to $1 option $2" >&2
+ exit 1
+ }
+ s() {
+ set -"$1"
+ t="$-"
+ x=$(echo "$t" | tr -d "$1")
+ test "$t" = "$x" && x set "$1"
+ return 0
+ }
+ c() {
+ set +"$1"
+ t="$-"
+ x=$(echo "$t" | tr -d "$1")
+ test "$t" != "$x" && x clear "$1"
+ return 0
+ }
+ '"${CLEAR}"'
+
+ # if we do not do this, -x tracing splatters stderr
+ # for some shells, -v does as well (is that correct?)
+ case "${opt}" in
+ (*[xv]*) exec 2>/dev/null;;
+ esac
+
+ o="$-"
+ x=$(echo "$o" | tr -d "$opt")
+
+ if [ "$o" = "$x" ]; then # option was off
+ s "${opt}"
+ c "${opt}"
+ else
+ c "${opt}"
+ s "${opt}"
+ fi
+ '
+ done
+}
+
+test_optional_on_off()
+{
+ RET=0
+ OPTS=
+ for opt
+ do
+ test "${opt}" = n && continue
+ ${TEST_SH} -c "set -${opt}" 2>/dev/null &&
+ OPTS="${OPTS} ${opt}" || RET=1
+ done
+
+ test -n "${OPTS}" && test_option_on_off ${OPTS}
+
+ return "${RET}"
+}
+
+atf_test_case set_a
+set_a_head() {
+ atf_set "descr" "Tests that 'set -a' turns on all var export " \
+ "and that it behaves as defined by the standard"
+}
+set_a_body() {
+ atf_require_prog env
+ atf_require_prog grep
+
+ test_option_on_off a
+
+ # without -a, new variables should not be exported (so grep "fails")
+ atf_check -s exit:1 -o empty -e empty ${TEST_SH} -ce \
+ 'unset VAR; set +a; VAR=value; env | grep "^VAR="'
+
+ # with -a, they should be
+ atf_check -s exit:0 -o match:VAR=value -e empty ${TEST_SH} -ce \
+ 'unset VAR; set -a; VAR=value; env | grep "^VAR="'
+}
+
+atf_test_case set_C
+set_C_head() {
+ atf_set "descr" "Tests that 'set -C' turns on no clobber mode " \
+ "and that it behaves as defined by the standard"
+}
+set_C_body() {
+ atf_require_prog ls
+
+ test_option_on_off C
+
+ # Check that the environment to use for the tests is sane ...
+ # we assume current dir is a new tempory directory & is empty
+
+ test -z "$(ls)" || atf_skip "Test execution directory not clean"
+ test -c "/dev/null" || atf_skip "Problem with /dev/null"
+
+ echo Dummy_Content > Junk_File
+ echo Precious_Content > Important_File
+
+ # Check that we can redirect onto file when -C is not set
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '
+ D=$(ls -l Junk_File) || exit 1
+ set +C
+ echo "Overwrite it now" > Junk_File
+ A=$(ls -l Junk_File) || exit 1
+ test "${A}" != "${D}"
+ '
+
+ # Check that we cannot redirect onto file when -C is set
+ atf_check -s exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ '
+ D=$(ls -l Important_File) || exit 1
+ set -C
+ echo "Fail to Overwrite it now" > Important_File
+ A=$(ls -l Important_File) || exit 1
+ test "${A}" = "${D}"
+ '
+
+ # Check that we can append to file, even when -C is set
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '
+ D=$(ls -l Junk_File) || exit 1
+ set -C
+ echo "Append to it now" >> Junk_File
+ A=$(ls -l Junk_File) || exit 1
+ test "${A}" != "${D}"
+ '
+
+ # Check that we abort on attempt to redirect onto file when -Ce is set
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ '
+ set -Ce
+ echo "Fail to Overwrite it now" > Important_File
+ echo "Should not reach this point"
+ '
+
+ # Last check that we can override -C for when we really need to
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '
+ D=$(ls -l Junk_File) || exit 1
+ set -C
+ echo "Change the poor bugger again" >| Junk_File
+ A=$(ls -l Junk_File) || exit 1
+ test "${A}" != "${D}"
+ '
+}
+
+atf_test_case set_e
+set_e_head() {
+ atf_set "descr" "Tests that 'set -e' turns on error detection " \
+ "and that a simple case behaves as defined by the standard"
+}
+set_e_body() {
+ test_option_on_off e
+
+ # Check that -e does nothing if no commands fail
+ atf_check -s exit:0 -o match:I_am_OK -e empty \
+ ${TEST_SH} -c \
+ 'false; printf "%s" I_am; set -e; true; printf "%s\n" _OK'
+
+ # and that it (silently, but with exit status) aborts if cmd fails
+ atf_check -s not-exit:0 -o match:I_am -o not-match:Broken -e empty \
+ ${TEST_SH} -c \
+ 'false; printf "%s" I_am; set -e; false; printf "%s\n" _Broken'
+
+ # same, except -e this time is on from the beginning
+ atf_check -s not-exit:0 -o match:I_am -o not-match:Broken -e empty \
+ ${TEST_SH} -ec 'printf "%s" I_am; false; printf "%s\n" _Broken'
+
+ # More checking of -e in other places, there is lots to deal with.
+}
+
+atf_test_case set_f
+set_f_head() {
+ atf_set "descr" "Tests that 'set -f' turns off pathname expansion " \
+ "and that it behaves as defined by the standard"
+}
+set_f_body() {
+ atf_require_prog ls
+
+ test_option_on_off f
+
+ # Check that the environment to use for the tests is sane ...
+ # we assume current dir is a new tempory directory & is empty
+
+ test -z "$(ls)" || atf_skip "Test execution directory not clean"
+
+ # we will assume that atf will clean up this junk directory
+ # when we are done. But for testing pathname expansion
+ # we need files
+
+ for f in a b c d e f aa ab ac ad ae aaa aab aac aad aba abc bbb ccc
+ do
+ echo "$f" > "$f"
+ done
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -ec \
+ 'X=$(echo b*); Y=$(echo b*); test "${X}" != "a*";
+ test "${X}" = "${Y}"'
+
+ # now test expansion is different when -f is set
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -ec \
+ 'X=$(echo b*); Y=$(set -f; echo b*); test "${X}" != "${Y}"'
+}
+
+atf_test_case set_n
+set_n_head() {
+ atf_set "descr" "Tests that 'set -n' supresses command execution " \
+ "and that it behaves as defined by the standard"
+}
+set_n_body() {
+ # pointless to test this, if it turns on, it stays on...
+ # test_option_on_off n
+ # so just allow the tests below to verify it can be turned on
+
+ # nothing should be executed, hence no output...
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -enc 'echo ABANDON HOPE; echo ALL YE; echo ...'
+
+ # this is true even when the "commands" do not exist
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -enc 'ERR; FAIL; ABANDON HOPE'
+
+ # but if there is a syntax error, it should be detected (w or w/o -e)
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -enc 'echo JUMP; for frogs swim; echo in puddles'
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -nc 'echo ABANDON HOPE; echo "ALL YE; echo ...'
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -enc 'echo ABANDON HOPE;; echo ALL YE; echo ...'
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -nc 'do YOU ABANDON HOPE; for all eternity?'
+
+ # now test enabling -n in the middle of a script
+ # note that once turned on, it cannot be turned off again.
+ #
+ # omit more complex cases, as those can send some shells
+ # into infinite loops, and believe it or not, that might be OK!
+
+ atf_check -s exit:0 -o match:first -o not-match:second -e empty \
+ ${TEST_SH} -c 'echo first; set -n; echo second'
+ atf_check -s exit:0 -o match:first -o not-match:third -e empty \
+ ${TEST_SH} -c 'echo first; set -n; echo second; set +n; echo third'
+ atf_check -s exit:0 -o inline:'a\nb\n' -e empty \
+ ${TEST_SH} -c 'for x in a b c d
+ do
+ case "$x" in
+ a);; b);; c) set -n;; d);;
+ esac
+ printf "%s\n" "$x"
+ done'
+
+ # This last one is a bit more complex to explain, so I will not try
+
+ # First, we need to know what signal number is used for SIGUSR1 on
+ # the local (testing) system (signal number is $(( $XIT - 128 )) )
+
+ # this will take slightly over 1 second elapsed time (the sleep 1)
+ # The "10" for the first sleep just needs to be something big enough
+ # that the rest of the commands have time to complete, even on
+ # very slow testing systems. 10 should be enough. Otherwise irrelevant
+
+ # The shell will usually blather to stderr about the sleep 10 being
+ # killed, but it affects nothing, so just allow it to cry.
+
+ (sleep 10 & sleep 1; kill -USR1 $!; wait $!)
+ XIT="$?"
+
+ # The exit value should be an integer > 128 and < 256 (often 158)
+ # If it is not just skip the test
+
+ # If we do run the test, it should take (slightly over) either 1 or 2
+ # seconds to complete, depending upon the shell being tested.
+
+ case "${XIT}" in
+ ( 129 | 1[3-9][0-9] | 2[0-4][0-9] | 25[0-5] )
+
+ # The script below should exit with the same code - no output
+
+ # Or that is the result that seems best explanable.
+ # "set -n" in uses like this is not exactly well defined...
+
+ # This script comes from a member of the austin group
+ # (they author changes to the posix shell spec - and more.)
+ # The author is also an (occasional?) NetBSD user.
+ atf_check -s exit:${XIT} -o empty -e empty ${TEST_SH} -c '
+ trap "set -n" USR1
+ { sleep 1; kill -USR1 $$; sleep 1; } &
+ false
+ wait && echo t || echo f
+ wait
+ echo foo
+ '
+ ;;
+ esac
+}
+
+atf_test_case set_u
+set_u_head() {
+ atf_set "descr" "Tests that 'set -u' turns on unset var detection " \
+ "and that it behaves as defined by the standard"
+}
+set_u_body() {
+ test_option_on_off u
+
+ # first make sure it is OK to unset an unset variable
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -ce \
+ 'unset _UNSET_VARIABLE_; echo OK'
+ # even if -u is set
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -cue \
+ 'unset _UNSET_VARIABLE_; echo OK'
+
+ # and that without -u accessing an unset variable is harmless
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -ce \
+ 'unset X; echo ${X}; echo OK'
+ # and that the unset variable test expansion works properly
+ atf_check -s exit:0 -o match:OKOK -e empty ${TEST_SH} -ce \
+ 'unset X; printf "%s" ${X-OK}; echo OK'
+
+ # Next test that with -u set, the shell aborts on access to unset var
+ # do not use -e, want to make sure it is -u that causes abort
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; set -u; echo ${X}; echo ERR'
+ # quoting should make no difference...
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; set -u; echo "${X}"; echo ERR'
+
+ # Now a bunch of accesses to unset vars, with -u, in ways that are OK
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -ce \
+ 'unset X; set -u; echo ${X-GOOD}; echo OK'
+ atf_check -s exit:0 -o match:OK -e empty ${TEST_SH} -ce \
+ 'unset X; set -u; echo ${X-OK}'
+ atf_check -s exit:0 -o not-match:ERR -o match:OK -e empty \
+ ${TEST_SH} -ce 'unset X; set -u; echo ${X+ERR}; echo OK'
+
+ # and some more ways that are not OK
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; set -u; echo ${X#foo}; echo ERR'
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; set -u; echo ${X%%bar}; echo ERR'
+
+ # lastly, just while we are checking unset vars, test aborts w/o -u
+ atf_check -s not-exit:0 -o not-match:ERR -e not-empty ${TEST_SH} -c \
+ 'unset X; echo ${X?}; echo ERR'
+ atf_check -s not-exit:0 -o not-match:ERR -e match:X_NOT_SET \
+ ${TEST_SH} -c 'unset X; echo ${X?X_NOT_SET}; echo ERR'
+}
+
+atf_test_case set_v
+set_v_head() {
+ atf_set "descr" "Tests that 'set -v' turns on input read echoing " \
+ "and that it behaves as defined by the standard"
+}
+set_v_body() {
+ test_option_on_off v
+
+ # check that -v does nothing if no later input line is read
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e empty \
+ ${TEST_SH} -ec 'printf "%s" OK; set -v; echo OK; exit 0'
+
+ # but that it does when there are multiple lines
+ cat <<- 'EOF' |
+ set -v
+ printf %s OK
+ echo OK
+ exit 0
+ EOF
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e match:printf -e match:OK -e match:echo \
+ -e not-match:set ${TEST_SH}
+
+ # and that it can be disabled again
+ cat <<- 'EOF' |
+ set -v
+ printf %s OK
+ set +v
+ echo OK
+ exit 0
+ EOF
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e match:printf -e match:OK -e not-match:echo \
+ ${TEST_SH}
+
+ # and lastly, that shell keywords do get output when "read"
+ cat <<- 'EOF' |
+ set -v
+ for i in 111 222 333
+ do
+ printf %s $i
+ done
+ exit 0
+ EOF
+ atf_check -s exit:0 \
+ -o match:111222333 -o not-match:printf \
+ -o not-match:for -o not-match:do -o not-match:done \
+ -e match:printf -e match:111 -e not-match:111222 \
+ -e match:for -e match:do -e match:done \
+ ${TEST_SH}
+}
+
+atf_test_case set_x
+set_x_head() {
+ atf_set "descr" "Tests that 'set -x' turns on command exec logging " \
+ "and that it behaves as defined by the standard"
+}
+set_x_body() {
+ test_option_on_off x
+
+ # check that cmd output appears after -x is enabled
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e not-match:printf -e match:OK -e match:echo \
+ ${TEST_SH} -ec 'printf "%s" OK; set -x; echo OK; exit 0'
+
+ # and that it stops again afer -x is disabled
+ atf_check -s exit:0 \
+ -o match:OKOK -o not-match:echo -o not-match:printf \
+ -e match:printf -e match:OK -e not-match:echo \
+ ${TEST_SH} -ec 'set -x; printf "%s" OK; set +x; echo OK; exit 0'
+
+ # also check that PS4 is output correctly
+ atf_check -s exit:0 \
+ -o match:OK -o not-match:echo \
+ -e match:OK -e match:Run:echo \
+ ${TEST_SH} -ec 'PS4=Run:; set -x; echo OK; exit 0'
+
+ return 0
+
+ # This one seems controversial... I suspect it is NetBSD's sh
+ # that is wrong to not output "for" "while" "if" ... etc
+
+ # and lastly, that shell keywords do not get output when "executed"
+ atf_check -s exit:0 \
+ -o match:111222333 -o not-match:printf \
+ -o not-match:for \
+ -e match:printf -e match:111 -e not-match:111222 \
+ -e not-match:for -e not-match:do -e not-match:done \
+ ${TEST_SH} -ec \
+ 'set -x; for i in 111 222 333; do printf "%s" $i; done; echo; exit 0'
+}
+
+opt_test_setup()
+{
+ test -n "$1" || { echo >&2 "Internal error"; exit 1; }
+
+ cat > "$1" << 'END_OF_FUNCTIONS'
+local_opt_check()
+{
+ local -
+}
+
+instr()
+{
+ expr "$2" : "\(.*$1\)" >/dev/null
+}
+
+save_opts()
+{
+ local -
+
+ set -e
+ set -u
+
+ instr e "$-" && instr u "$-" && return 0
+ echo ERR
+}
+
+fiddle_opts()
+{
+ set -e
+ set -u
+
+ instr e "$-" && instr u "$-" && return 0
+ echo ERR
+}
+
+local_test()
+{
+ set +eu
+
+ save_opts
+ instr '[eu]' "$-" || printf %s "OK"
+
+ fiddle_opts
+ instr e "$-" && instr u "$-" && printf %s "OK"
+
+ set +eu
+}
+END_OF_FUNCTIONS
+}
+
+atf_test_case restore_local_opts
+restore_local_opts_head() {
+ atf_set "descr" "Tests that 'local -' saves and restores options. " \
+ "Note that "local" is a local shell addition"
+}
+restore_local_opts_body() {
+ atf_require_prog cat
+ atf_require_prog expr
+
+ FN="test-funcs.$$"
+ opt_test_setup "${FN}" || atf_skip "Cannot setup test environment"
+
+ ${TEST_SH} -ec ". './${FN}'; local_opt_check" 2>/dev/null ||
+ atf_skip "sh extension 'local -' not supported by ${TEST_SH}"
+
+ atf_check -s exit:0 -o match:OKOK -o not-match:ERR -e empty \
+ ${TEST_SH} -ec ". './${FN}'; local_test"
+}
+
+atf_test_case vi_emacs_VE_toggle
+vi_emacs_VE_toggle_head() {
+ atf_set "descr" "Tests enabling vi disables emacs (and v.v - but why?)"\
+ " Note that -V and -E are local shell additions"
+}
+vi_emacs_VE_toggle_body() {
+
+ test_optional_on_off V E ||
+ atf_skip "One or both V & E opts unsupported by ${TEST_SH}"
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '
+ q() {
+ eval "case \"$-\" in
+ (*${2}*) return 1;;
+ (*${1}*) return 0;;
+ esac"
+ return 1
+ }
+ x() {
+ echo >&2 "Option set or toggle failure:" \
+ " on=$1 off=$2 set=$-"
+ exit 1
+ }
+ set -V; q V E || x V E
+ set -E; q E V || x E V
+ set -V; q V E || x V E
+ set +EV; q "" "[VE]" || x "" VE
+ exit 0
+ '
+}
+
+atf_test_case xx_bogus
+xx_bogus_head() {
+ atf_set "descr" "Tests that attempting to set a nonsense option fails."
+}
+xx_bogus_body() {
+ # Biggest problem here is picking a "nonsense option" that is
+ # not implemented by any shell, anywhere. Hopefully this will do.
+
+ # 'set' is a special builtin, so a conforming shell should exit
+ # on an arg error, and the ERR should not be printed.
+ atf_check -s not-exit:0 -o empty -e not-empty \
+ ${TEST_SH} -c 'set -% ; echo ERR'
+}
+
+atf_test_case Option_switching
+Option_switching_head() {
+ atf_set "descr" "options can be enabled and disabled"
+}
+Option_switching_body() {
+
+ # Cannot test -m, setting it causes test shell to fail...
+ # (test shell gets SIGKILL!) Wonder why ... something related to atf
+ # That is, it works if just run as "sh -c 'echo $-; set -m; echo $-'"
+
+ # Don't bother testing toggling -n, once on, it stays on...
+ # (and because the test fn refuses to allow us to try)
+
+ # Cannot test -o or -c here, or the extension -s
+ # they can only be used, not switched
+
+ # these are the posix options, that all shells should implement
+ test_option_on_off a b C e f h u v x # m
+
+ # and these are extensions that might not exist (non-fatal to test)
+ # -i and -s (and -c) are posix options, but are not required to
+ # be accessable via the "set" command, just the command line.
+ # We allow for -i to work with set, as that makes some sense,
+ # -c and -s do not.
+ test_optional_on_off E i I p q V || true
+
+ # Also test (some) option combinations ...
+ # only testing posix options here, because it is easier...
+ test_option_on_off aeu vx Ca aCefux
+}
+
+atf_init_test_cases() {
+ # tests are run in order sort of names produces, so choose names wisely
+
+ # this one tests turning on/off all the mandatory. and extra flags
+ atf_add_test_case Option_switching
+ # and this tests the NetBSD "local -" functionality in functions.
+ atf_add_test_case restore_local_opts
+
+ # no tests for -m (no idea how to do that one)
+ # -I (no easy way to generate the EOF it ignores)
+ # -i (not sure how to test that one at the minute)
+ # -p (because we aren't going to run tests setuid)
+ # -V/-E (too much effort, and a real test would be huge)
+ # -c (because almost all the other tests test it anyway)
+ # -q (because, for now, I am lazy)
+ # -s (coming soon, hopefully)
+ # -o (really +o: again, hopefully soon)
+ # -o longname (again, just laziness, don't wait...)
+ # -h/-b (because NetBSD doesn't implement them)
+ atf_add_test_case set_a
+ atf_add_test_case set_C
+ atf_add_test_case set_e
+ atf_add_test_case set_f
+ atf_add_test_case set_n
+ atf_add_test_case set_u
+ atf_add_test_case set_v
+ atf_add_test_case set_x
+
+ atf_add_test_case vi_emacs_VE_toggle
+ atf_add_test_case xx_bogus
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_redir.sh b/contrib/netbsd-tests/bin/sh/t_redir.sh
new file mode 100755
index 0000000..580de88
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_redir.sh
@@ -0,0 +1,903 @@
+# $NetBSD: t_redir.sh,v 1.9 2016/05/14 00:33:02 kre Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+# Any failures in this first test means it is not worth bothering looking
+# for causes of failures in any other tests, make this one work first.
+
+# Problems with this test usually mean inadequate ATF_SHELL used for testing.
+# (though if all pass but the last, it might be a TEST_SH problem.)
+
+atf_test_case basic_test_method_test
+basic_test_method_test_head()
+{
+ atf_set "descr" "Tests that test method works as expected"
+}
+basic_test_method_test_body()
+{
+ cat <<- 'DONE' |
+ DONE
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+ cat <<- 'DONE' |
+ DONE
+ atf_check -s exit:0 -o match:0 -e empty ${TEST_SH} -c 'wc -l'
+
+ cat <<- 'DONE' |
+ echo hello
+ DONE
+ atf_check -s exit:0 -o match:hello -e empty ${TEST_SH}
+ cat <<- 'DONE' |
+ echo hello
+ DONE
+ atf_check -s exit:0 -o match:1 -e empty ${TEST_SH} -c 'wc -l'
+
+ cat <<- 'DONE' |
+ echo hello\
+ world
+ DONE
+ atf_check -s exit:0 -o match:helloworld -e empty ${TEST_SH}
+ cat <<- 'DONE' |
+ echo hello\
+ world
+ DONE
+ atf_check -s exit:0 -o match:2 -e empty ${TEST_SH} -c 'wc -l'
+
+ printf '%s\n%s\n%s\n' Line1 Line2 Line3 > File
+ atf_check -s exit:0 -o inline:'Line1\nLine2\nLine3\n' -e empty \
+ ${TEST_SH} -c 'cat File'
+
+ cat <<- 'DONE' |
+ set -- X "" '' Y
+ echo ARGS="${#}"
+ echo '' -$1- -$2- -$3- -$4-
+ cat <<EOF
+ X=$1
+ EOF
+ cat <<\EOF
+ Y=$4
+ EOF
+ DONE
+ atf_check -s exit:0 -o match:ARGS=4 -o match:'-X- -- -- -Y-' \
+ -o match:X=X -o match:'Y=\$4' -e empty ${TEST_SH}
+}
+
+atf_test_case do_input_redirections
+do_input_redirections_head()
+{
+ atf_set "descr" "Tests that simple input redirection works"
+}
+do_input_redirections_body()
+{
+ printf '%s\n%s\n%s\nEND\n' 'First Line' 'Second Line' 'Line 3' >File
+
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c 'cat < File'
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c 'cat <File'
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c 'cat< File'
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c 'cat < "File"'
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c '< File cat'
+
+ ln File wc
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH} -c '< wc cat'
+
+ mv wc cat
+ atf_check -s exit:0 -e empty -o match:4 \
+ ${TEST_SH} -c '< cat wc'
+
+
+ cat <<- 'EOF' |
+ for l in 1 2 3; do
+ read line < File
+ echo "$line"
+ done
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nFirst Line\nFirst Line\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ for l in 1 2 3; do
+ read line
+ echo "$line"
+ done <File
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ for l in 1 2 3; do
+ read line < File
+ echo "$line"
+ done <File
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nFirst Line\nFirst Line\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ line=
+ while [ "$line" != END ]; do
+ read line || exit 1
+ echo "$line"
+ done <File
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ while :; do
+ read line || exit 0
+ echo "$line"
+ done <File
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ l=''
+ while read line < File
+ do
+ echo "$line"
+ l="${l}x"
+ [ ${#l} -ge 3 ] && break
+ done
+ echo DONE
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nFirst Line\nFirst Line\nDONE\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ while read line
+ do
+ echo "$line"
+ done <File
+ echo DONE
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nEND\nDONE\n' \
+ ${TEST_SH}
+
+ cat <<- 'EOF' |
+ l=''
+ while read line
+ do
+ echo "$line"
+ l="${l}x"
+ [ ${#l} -ge 3 ] && break
+ done <File
+ echo DONE
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line\nSecond Line\nLine 3\nDONE\n' ${TEST_SH}
+
+ cat <<- 'EOF' |
+ l=''
+ while read line1 <File
+ do
+ read line2
+ echo "$line1":"$line2"
+ l="${l}x"
+ [ ${#l} -ge 2 ] && break
+ done <File
+ echo DONE
+ EOF
+ atf_check -s exit:0 -e empty \
+ -o inline:'First Line:First Line\nFirst Line:Second Line\nDONE\n' \
+ ${TEST_SH}
+}
+
+atf_test_case do_output_redirections
+do_output_redirections_head()
+{
+ atf_set "descr" "Test Output redirections"
+}
+do_output_redirections_body()
+{
+nl='
+'
+ T=0
+ i() { T=$(expr "$T" + 1); }
+
+ rm -f Output 2>/dev/null || :
+ test -f Output && atf_fail "Unable to remove Output file"
+#1
+ i; atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '> Output'
+ test -f Output || atf_fail "#$T: Did not make Output file"
+#2
+ rm -f Output 2>/dev/null || :
+ i; atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '>> Output'
+ test -f Output || atf_fail "#$T: Did not make Output file"
+#3
+ rm -f Output 2>/dev/null || :
+ i; atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '>| Output'
+ test -f Output || atf_fail "#$T: Did not make Output file"
+
+#4
+ rm -f Output 2>/dev/null || :
+ i
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c 'echo Hello >Output'
+ test -s Output || atf_fail "#$T: Did not make non-empty Output file"
+ test "$(cat Output)" = "Hello" ||
+ atf_fail "#$T: Incorrect Output: Should be 'Hello' is '$(cat Output)'"
+#5
+ i
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c 'echo Hello>!Output'
+ test -s Output || atf_fail "#$T: Did not make non-empty Output file"
+ test "$(cat Output)" = "Hello" ||
+ atf_fail "#$T: Incorrect Output: Should be 'Hello' is '$(cat Output)'"
+#6
+ i
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c 'echo Bye >>Output'
+ test -s Output || atf_fail "#$T: Removed Output file"
+ test "$(cat Output)" = "Hello${nl}Bye" || atf_fail \
+ "#$T: Incorrect Output: Should be 'Hello\\nBye' is '$(cat Output)'"
+#7
+ i; atf_check -s exit:0 -o inline:'line 1\nline 2\n' -e empty \
+ ${TEST_SH} -c \
+ 'echo line 1 > Output; echo line 2 >> Output; cat Output'
+ test "$(cat Output)" = "line 1${nl}line 2" || atf_fail \
+ "#$T: Incorrect Output: Should be 'line 1\\nline 2' is '$(cat Output)'"
+#8
+ i; atf_check -s exit:0 -o inline:'line 2\n' -e empty \
+ ${TEST_SH} -c 'echo line 1 > Output; echo line 2'
+ test "$(cat Output)" = "line 1" || atf_fail \
+ "#$T: Incorrect Output: Should be 'line 1' is '$(cat Output)'"
+#9
+ i; atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c '(echo line 1; echo line 2 > Out2) > Out1'
+ test "$(cat Out1)" = "line 1" || atf_fail \
+ "#$T: Incorrect Out1: Should be 'line 1' is '$(cat Out1)'"
+ test "$(cat Out2)" = "line 2" || atf_fail \
+ "#$T: Incorrect Out2: Should be 'line 2' is '$(cat Out2)'"
+#10
+ i; atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c '{ echo line 1; echo line 2 > Out2;} > Out1'
+ test "$(cat Out1)" = "line 1" || atf_fail \
+ "#$T: Incorrect Out1: Should be 'line 1' is '$(cat Out1)'"
+ test "$(cat Out2)" = "line 2" || atf_fail \
+ "#$T: Incorrect Out2: Should be 'line 2' is '$(cat Out2)'"
+#11
+ i; rm -f Out1 Out2 2>/dev/null || :
+ cat <<- 'EOF' |
+ for arg in 'line 1' 'line 2' 'line 3'
+ do
+ echo "$arg"
+ echo "$arg" > Out1
+ done > Out2
+ EOF
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+ test "$(cat Out1)" = "line 3" || atf_fail \
+ "#$T: Incorrect Out1: Should be 'line 3' is '$(cat Out1)'"
+ test "$(cat Out2)" = "line 1${nl}line 2${nl}line 3" || atf_fail \
+ "#$T: Incorrect Out2: Should be 'line 1\\nline 2\\nline 3' is '$(cat Out2)'"
+#12
+ i; rm -f Out1 Out2 2>/dev/null || :
+ cat <<- 'EOF' |
+ for arg in 'line 1' 'line 2' 'line 3'
+ do
+ echo "$arg"
+ echo "$arg" >> Out1
+ done > Out2
+ EOF
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+ test "$(cat Out1)" = "line 1${nl}line 2${nl}line 3" || atf_fail \
+ "#$T: Incorrect Out1: Should be 'line 1\\nline 2\\nline 3' is '$(cat Out1)'"
+ test "$(cat Out2)" = "line 1${nl}line 2${nl}line 3" || atf_fail \
+ "#$T: Incorrect Out2: Should be 'line 1\\nline 2\\nline 3' is '$(cat Out2)'"
+}
+
+atf_test_case fd_redirections
+fd_redirections_head()
+{
+ atf_set "descr" "Tests redirections to/from specific descriptors"
+}
+fd_redirections_body()
+{
+ atf_require_prog /bin/echo
+
+ cat <<- 'DONE' > helper.sh
+ f() {
+ /bin/echo nothing "$1" >& "$1"
+ }
+ for n
+ do
+ eval "f $n $n"'> file-$n'
+ done
+ DONE
+ cat <<- 'DONE' > reread.sh
+ f() {
+ (read -r var; echo "${var}") <&"$1"
+ }
+ for n
+ do
+ x=$( eval "f $n $n"'< file-$n' )
+ test "${x}" = "nothing $n" || echo "$n"
+ done
+ DONE
+
+ validate()
+ {
+ for n
+ do
+ test -e "file-$n" || atf_fail "file-$n not created"
+ C=$(cat file-"$n")
+ test "$C" = "nothing $n" ||
+ atf_fail "file-$n contains '$C' not 'nothing $n'"
+ done
+ }
+
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 1 2 3 4 5 6 7 8 9
+ validate 1 2 3 4 5 6 7 8 9
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 3 4 5 6 7 8 9
+
+ L=$(ulimit -n)
+ if [ "$L" -ge 30 ]
+ then
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 10 15 19 20 25 29
+ validate 10 15 19 20 25 29
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 10 15 19 20 25 29
+ fi
+ if [ "$L" -ge 100 ]
+ then
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 32 33 49 50 51 63 64 65 77 88 99
+ validate 32 33 49 50 51 63 64 65 77 88 99
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 32 33 49 50 51 63 64 65 77 88 99
+ fi
+ if [ "$L" -ge 500 ]
+ then
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 100 101 199 200 222 333 444 499
+ validate 100 101 199 200 222 333 444 499
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 100 101 199 200 222 333 444 499
+ fi
+ if [ "$L" -gt 1005 ]
+ then
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} helper.sh 1000 1001 1002 1003 1004 1005
+ validate 1000 1001 1002 1003 1004 1005
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} reread.sh 1000 1001 1002 1003 1004 1005
+ fi
+}
+
+atf_test_case local_redirections
+local_redirections_head()
+{
+ atf_set "descr" \
+ "Tests that exec can reassign file descriptors in the shell itself"
+}
+local_redirections_body()
+{
+ cat <<- 'DONE' > helper.sh
+ for f
+ do
+ eval "exec $f"'> file-$f'
+ done
+
+ for f
+ do
+ printf '%s\n' "Hello $f" >&"$f"
+ done
+
+ for f
+ do
+ eval "exec $f"'>&-'
+ done
+
+ for f
+ do
+ eval "exec $f"'< file-$f'
+ done
+
+ for f
+ do
+ exec <& "$f"
+ read -r var || echo >&2 "No data in file-$f"
+ read -r x && echo >&2 "Too much data in file-${f}: $x"
+ test "${var}" = "Hello $f" ||
+ echo >&2 "file-$f contains '${var}' not 'Hello $f'"
+ done
+ DONE
+
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 3 4 5 6 7 8 9
+
+ L=$(ulimit -n)
+ if [ "$L" -ge 30 ]
+ then
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 10 11 13 15 16 19 20 28 29
+ fi
+ if [ "$L" -ge 100 ]
+ then
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 30 31 32 63 64 65 77 88 99
+ fi
+ if [ "$L" -ge 500 ]
+ then
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 100 101 111 199 200 201 222 333 499
+ fi
+ if [ "$L" -ge 1005 ]
+ then
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} helper.sh 1000 1001 1002 1003 1004 1005
+ fi
+}
+
+atf_test_case named_fd_redirections
+named_fd_redirections_head()
+{
+ atf_set "descr" "Tests redirections to /dev/stdout (etc)"
+
+}
+named_fd_redirections_body()
+{
+ if test -c /dev/stdout
+ then
+ atf_check -s exit:0 -o inline:'OK\n' -e empty \
+ ${TEST_SH} -c 'echo OK >/dev/stdout'
+ atf_check -s exit:0 -o inline:'OK\n' -e empty \
+ ${TEST_SH} -c '/bin/echo OK >/dev/stdout'
+ fi
+
+ if test -c /dev/stdin
+ then
+ atf_require_prog cat
+
+ echo GOOD | atf_check -s exit:0 -o inline:'GOOD\n' -e empty \
+ ${TEST_SH} -c 'read var </dev/stdin; echo $var'
+ echo GOOD | atf_check -s exit:0 -o inline:'GOOD\n' -e empty \
+ ${TEST_SH} -c 'cat </dev/stdin'
+ fi
+
+ if test -c /dev/stderr
+ then
+ atf_check -s exit:0 -e inline:'OK\n' -o empty \
+ ${TEST_SH} -c 'echo OK 2>/dev/stderr >&2'
+ atf_check -s exit:0 -e inline:'OK\n' -o empty \
+ ${TEST_SH} -c '/bin/echo OK 2>/dev/stderr >&2'
+ fi
+
+ if test -c /dev/fd/8 && test -c /dev/fd/9
+ then
+ atf_check -s exit:0 -o inline:'EIGHT\n' -e empty \
+ ${TEST_SH} -c 'printf "%s\n" EIGHT 8>&1 >/dev/fd/8 |
+ cat 9<&0 </dev/fd/9'
+ fi
+
+ return 0
+}
+
+atf_test_case redir_in_case
+redir_in_case_head()
+{
+ atf_set "descr" "Tests that sh(1) allows just redirections " \
+ "in case statements. (PR bin/48631)"
+}
+redir_in_case_body()
+{
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c 'case x in (whatever) >foo;; esac'
+
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c 'case x in (whatever) >foo 2>&1;; esac'
+
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c 'case x in (whatever) >foo 2>&1 </dev/null;; esac'
+
+ atf_check -s exit:0 -o empty -e empty \
+ ${TEST_SH} -c 'case x in (whatever) >${somewhere};; esac'
+}
+
+atf_test_case incorrect_redirections
+incorrect_redirections_head()
+{
+ atf_set "descr" "Tests that sh(1) correctly ignores non-redirections"
+}
+incorrect_redirections_body() {
+
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c 'echo foo>'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c 'read foo<'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c 'echo foo<>'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x > '"$nl"
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'read x < '"$nl"
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x <> '"$nl"
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x >< anything'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x >>< anything'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x >|< anything'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'echo x > ; read x < /dev/null || echo bad'
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ 'read x < & echo y > /dev/null; wait && echo bad'
+
+ rm -f Output 2>/dev/null || :
+ atf_check -s exit:0 -e empty -o inline:'A Line > Output\n' \
+ ${TEST_SH} -c 'echo A Line \> Output'
+ test -f Output && atf_file "File 'Output' appeared and should not have"
+
+ rm -f Output 2>/dev/null || :
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} -c 'echo A Line \>> Output'
+ test -f Output || atf_file "File 'Output' not created when it should"
+ test "$(cat Output)" = 'A Line >' || atf_fail \
+ "Output file contains '$(cat Output)' instead of '"'A Line >'\'
+
+ rm -f Output \> 2>/dev/null || :
+ atf_check -s exit:0 -e empty -o empty \
+ ${TEST_SH} -c 'echo A Line >\> Output'
+ test -f Output && atf_file "File 'Output' appeared and should not have"
+ test -f '>' || atf_file "File '>' not created when it should"
+ test "$(cat '>')" = 'A Line Output' || atf_fail \
+ "Output file ('>') contains '$(cat '>')' instead of 'A Line Output'"
+}
+
+# Many more tests in t_here, so here we have just rudimentary checks
+atf_test_case redir_here_doc
+redir_here_doc_head()
+{
+ atf_set "descr" "Tests that sh(1) correctly processes 'here' doc " \
+ "input redirections"
+}
+redir_here_doc_body()
+{
+ # nb: the printf is not executed, it is data
+ cat <<- 'DONE' |
+ cat <<EOF
+ printf '%s\n' 'hello\n'
+ EOF
+ DONE
+ atf_check -s exit:0 -o match:printf -o match:'hello\\n' \
+ -e empty ${TEST_SH}
+}
+
+atf_test_case subshell_redirections
+subshell_redirections_head()
+{
+ atf_set "descr" "Tests redirection interactions between shell and " \
+ "its sub-shell(s)"
+}
+subshell_redirections_body()
+{
+ atf_require_prog cat
+
+ LIM=$(ulimit -n)
+
+ cat <<- 'DONE' |
+ exec 6>output-file
+
+ ( printf "hello\n" >&6 )
+
+ exec 8<output-file
+
+ ( read hello <&8 ; test hello = "$hello" || echo >&2 Hello )
+
+ ( printf "bye-bye\n" >&6 )
+
+ ( exec 8<&- )
+ read bye <&8 || echo >&2 "Closed?"
+ echo Bye="$bye"
+ DONE
+ atf_check -s exit:0 -o match:Bye=bye-bye -e empty \
+ ${TEST_SH}
+
+ cat <<- 'DONE' |
+ for arg in one-4 two-24 three-14
+ do
+ fd=${arg#*-}
+ file=${arg%-*}
+ eval "exec ${fd}>${file}"
+ done
+
+ for arg in one-5 two-7 three-19
+ do
+ fd=${arg#*-}
+ file=${arg%-*}
+ eval "exec ${fd}<${file}"
+ done
+
+ (
+ echo line-1 >&4
+ echo line-2 >&24
+ echo line-3 >&14
+ echo go
+ ) | (
+ read go
+ read x <&5
+ read y <&7
+ read z <&19
+
+ printf "%s\n" "${x}" "${y}" "${z}"
+ )
+ DONE
+ atf_check -s exit:0 -o inline:'line-1\nline-2\nline-3\n' \
+ -e empty ${TEST_SH}
+
+ cat <<- 'DONE' |
+ for arg in one-4-5 two-6-7 three-8-9 four-11-10 five-3-12
+ do
+ ofd=${arg##*-}
+ file=${arg%-*}
+ ifd=${file#*-}
+ file=${file%-*}
+ eval "exec ${ofd}>${file}"
+ eval "exec ${ifd}<${file}"
+ done
+
+ ( ( ( echo line-1 >& 13 ) 13>&12 ) 12>&5 ) >stdout 2>errout
+ ( ( ( echo line-2 >& 4) 13>&12 ) 4>&7 ) >>stdout 2>>errout
+ ( ( ( echo line-3 >& 6) 8>&1 6>&11 >&12) 11>&9 >&7 ) >>stdout
+
+ ( ( ( cat <&13 >&12 ) 13<&8 12>&10 ) 10>&1 8<&6 ) 6<&4
+ ( ( ( cat <&4 ) <&4 6<&8 8<&11 )
+ <&4 4<&6 6<&8 8<&11 ) <&4 4<&6 6<&8 8<&11 11<&3
+ ( ( ( cat <&7 >&1 ) 7<&6 >&10 ) 10>&2 6<&8 ) 2>&1
+ DONE
+ atf_check -s exit:0 -o inline:'line-1\nline-2\nline-3\n' \
+ -e empty ${TEST_SH}
+}
+
+atf_test_case ulimit_redirection_interaction
+ulimit_redirection_interaction_head()
+{
+ atf_set "descr" "Tests interactions between redirect and ulimit -n "
+}
+ulimit_redirection_interaction_body()
+{
+ atf_require_prog ls
+
+ cat <<- 'DONE' > helper.sh
+ oLIM=$(ulimit -n)
+ HRD=$(ulimit -H -n)
+ test "${oLIM}" -lt "${HRD}" && ulimit -n "${HRD}"
+ LIM=$(ulimit -n)
+
+ FDs=
+ LFD=-1
+ while [ ${LIM} -gt 16 ]
+ do
+ FD=$(( ${LIM} - 1 ))
+ if [ "${FD}" -eq "${LFD}" ]; then
+ echo >&2 "Infinite loop... (busted $(( )) ??)"
+ exit 1
+ fi
+ LFD="${FD}"
+
+ eval "exec ${FD}"'> /dev/null'
+ FDs="${FD}${FDs:+ }${FDs}"
+
+ (
+ FD=$(( ${LIM} + 1 ))
+ eval "exec ${FD}"'> /dev/null'
+ echo "Reached unreachable command"
+ ) 2>/dev/null && echo >&2 "Opened beyond limit!"
+
+ (eval 'ls 2>&1 3>&1 4>&1 5>&1 '"${FD}"'>&1') >&"${FD}"
+
+ LIM=$(( ${LIM} / 2 ))
+ ulimit -S -n "${LIM}"
+ done
+
+ # Even though ulimit has been reduced, open fds should work
+ for FD in ${FDs}
+ do
+ echo ${FD} in ${FDs} >&"${FD}" || exit 1
+ done
+
+ ulimit -S -n "${oLIM}"
+
+ # maybe more later...
+
+ DONE
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} helper.sh
+}
+
+atf_test_case validate_fn_redirects
+validate_fn_redirects_head()
+{
+ # These test cases inspired by PR bin/48875 and the sh
+ # changes that were required to fix it.
+
+ atf_set "descr" "Tests various redirections applied to functions " \
+ "See PR bin/48875"
+}
+validate_fn_redirects_body()
+{
+ cat <<- 'DONE' > f-def
+ f() {
+ printf '%s\n' In-Func
+ }
+ DONE
+
+ atf_check -s exit:0 -o inline:'In-Func\nsuccess1\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f ; printf '%s\n' success1"
+ atf_check -s exit:0 -o inline:'success2\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f >/dev/null; printf '%s\n' success2"
+ atf_check -s exit:0 -o inline:'success3\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f >&- ; printf '%s\n' success3"
+ atf_check -s exit:0 -o inline:'In-Func\nsuccess4\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f & wait; printf '%s\n' success4"
+ atf_check -s exit:0 -o inline:'success5\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f >&- & wait; printf '%s\n' success5"
+ atf_check -s exit:0 -o inline:'In-Func\nIn-Func\nsuccess6\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; f;f; printf '%s\n' success6"
+ atf_check -s exit:0 -o inline:'In-Func\nIn-Func\nsuccess7\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; { f;f;}; printf '%s\n' success7"
+ atf_check -s exit:0 -o inline:'In-Func\nIn-Func\nsuccess8\n' -e empty \
+ ${TEST_SH} -c ". ./f-def; { f;f;}& wait; printf '%s\n' success8"
+ atf_check -s exit:0 -o inline:'In-Func\nsuccess9\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./f-def; { f>/dev/null;f;}& wait; printf '%s\n' success9"
+ atf_check -s exit:0 -o inline:'In-Func\nsuccess10\n' -e empty \
+ ${TEST_SH} -c \
+ ". ./f-def; { f;f>/dev/null;}& wait; printf '%s\n' success10"
+
+ # This one tests the issue etcupdate had with the original 48875 fix
+ atf_check -s exit:0 -o inline:'Func a\nFunc b\nFunc c\n' -e empty \
+ ${TEST_SH} -c '
+ f() {
+ echo Func "$1"
+ }
+ exec 3<&0 4>&1
+ ( echo x-a; echo y-b; echo z-c ) |
+ while read A
+ do
+ B=${A#?-}
+ f "$B" <&3 >&4
+ done >&2'
+
+ # And this tests a similar condition with that same fix
+ cat <<- 'DONE' >Script
+ f() {
+ printf '%s' " hello $1"
+ }
+ exec 3>&1
+ echo $( for i in a b c
+ do printf '%s' @$i; f $i >&3; done >foo
+ )
+ printf '%s\n' foo=$(cat foo)
+ DONE
+ atf_check -s exit:0 -e empty \
+ -o inline:' hello a hello b hello c\nfoo=@a@b@c\n' \
+ ${TEST_SH} Script
+
+ # Tests with sh reading stdin, which is not quite the same internal
+ # mechanism.
+ echo ". ./f-def || echo >&2 FAIL
+ f
+ printf '%s\n' stdin1
+ "| atf_check -s exit:0 -o inline:'In-Func\nstdin1\n' -e empty ${TEST_SH}
+
+ echo '
+ . ./f-def || echo >&2 FAIL
+ f >&-
+ printf "%s\n" stdin2
+ ' | atf_check -s exit:0 -o inline:'stdin2\n' -e empty ${TEST_SH}
+
+ cat <<- 'DONE' > fgh.def
+ f() {
+ echo -n f >&3
+ sleep 4
+ echo -n F >&3
+ }
+ g() {
+ echo -n g >&3
+ sleep 2
+ echo -n G >&3
+ }
+ h() {
+ echo -n h >&3
+ }
+ DONE
+
+ atf_check -s exit:0 -o inline:'fFgGh' -e empty \
+ ${TEST_SH} -c '. ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ f; g; h'
+
+ atf_check -s exit:0 -o inline:'fghGF' -e empty \
+ ${TEST_SH} -c '. ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ f & sleep 1; g & sleep 1; h; wait'
+
+ atf_check -s exit:0 -o inline:'fFgGhX Y\n' -e empty \
+ ${TEST_SH} -c '. ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ echo X $( f ; g ; h ) Y'
+
+ # This one is the real test for PR bin/48875. If the
+ # cmdsub does not complete before f g (and h) exit,
+ # then the 'F' & 'G' will precede 'X Y' in the output.
+ # If the cmdsub finishes while f & g are still running,
+ # then the X Y will appear before the F and G.
+ # The trailing "sleep 3" is just so we catch all the
+ # output (otherwise atf_check will be finished while
+ # f & g are still sleeping).
+
+ atf_check -s exit:0 -o inline:'fghX Y\nGF' -e empty \
+ ${TEST_SH} -c '. ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ echo X $( f >&- & sleep 1; g >&- & sleep 1 ; h ) Y
+ sleep 3
+ exec 4>&1 || echo FD_FAIL
+ '
+
+ # Do the test again to verify it also all works reading stdin
+ # (which is a slightly different path through the shell)
+ echo '
+ . ./fgh.def || echo >&2 FAIL
+ exec 3>&1
+ echo X $( f >&- & sleep 1; g >&- & sleep 1 ; h ) Y
+ sleep 3
+ exec 4>&1 || echo FD_FAIL
+ ' | atf_check -s exit:0 -o inline:'fghX Y\nGF' -e empty ${TEST_SH}
+}
+
+atf_init_test_cases() {
+ atf_add_test_case basic_test_method_test
+ atf_add_test_case do_input_redirections
+ atf_add_test_case do_output_redirections
+ atf_add_test_case fd_redirections
+ atf_add_test_case local_redirections
+ atf_add_test_case incorrect_redirections
+ atf_add_test_case named_fd_redirections
+ atf_add_test_case redir_here_doc
+ atf_add_test_case redir_in_case
+ atf_add_test_case subshell_redirections
+ atf_add_test_case ulimit_redirection_interaction
+ atf_add_test_case validate_fn_redirects
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_redircloexec.sh b/contrib/netbsd-tests/bin/sh/t_redircloexec.sh
new file mode 100755
index 0000000..7659606
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_redircloexec.sh
@@ -0,0 +1,178 @@
+# $NetBSD: t_redircloexec.sh,v 1.3 2016/05/15 15:44:43 kre Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Christos Zoulas.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+mkhelper() {
+ name=$1
+ fd=$2
+ shift 2
+
+ echo "$@" > ./"${name}1"
+ echo "echo ${name}2" ">&${fd}" > ./"${name}2"
+}
+
+runhelper() {
+ ${TEST_SH} "./${1}1"
+}
+
+cleanhelper() {
+ # not really needed, atf cleans up...
+ rm -f ./"${1}1" ./"${1}2" out
+}
+
+atf_test_case exec_redir_closed
+exec_redir_closed_head() {
+ atf_set "descr" "Tests that redirections created by exec are closed on exec"
+}
+exec_redir_closed_body() {
+
+ mkhelper exec 6 \
+ "exec 6> out; echo exec1 >&6; ${TEST_SH} exec2; exec 6>&-"
+
+ atf_check -s exit:0 -o empty -e not-empty ${TEST_SH} ./exec1
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -e ./exec1
+
+ mkhelper exec 9 \
+ "exec 9> out; echo exec1 >&9; ${TEST_SH} exec2"
+
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} ./exec1
+
+ mkhelper exec 8 \
+ "exec 8> out; printf OK; echo exec1 >&8;" \
+ "printf OK; ${TEST_SH} exec2; printf ERR"
+
+ atf_check -s not-exit:0 -o match:OKOK -o not-match:ERR -e not-empty \
+ ${TEST_SH} -e ./exec1
+
+ mkhelper exec 7 \
+ "exec 7> out; printf OK; echo exec1 >&7;" \
+ "printf OK; ${TEST_SH} exec2 || printf ERR"
+
+ atf_check -s exit:0 -o match:OKOKERR -e not-empty \
+ ${TEST_SH} ./exec1
+
+ cleanhelper exec
+}
+
+atf_test_case exec_redir_open
+exec_redir_open_head() {
+ atf_set "descr" "Tests that redirections created by exec can remain open"
+}
+exec_redir_open_body() {
+
+ mkhelper exec 6 \
+ "exec 6> out 6>&6; echo exec1 >&6; ${TEST_SH} exec2; exec 6>&-"
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} ./exec1
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -e ./exec1
+
+ mkhelper exec 9 \
+ "exec 9> out ; echo exec1 >&9; ${TEST_SH} exec2 9>&9"
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} ./exec1
+
+ mkhelper exec 8 \
+ "exec 8> out; printf OK; exec 8>&8; echo exec1 >&8;" \
+ "printf OK; ${TEST_SH} exec2; printf OK"
+
+ atf_check -s exit:0 -o match:OKOKOK -e empty \
+ ${TEST_SH} -e ./exec1
+
+ mkhelper exec 7 \
+ "exec 7> out; printf OK; echo exec1 >&7;" \
+ "printf OK; ${TEST_SH} 7>&7 exec2; printf OK"
+
+ atf_check -s exit:0 -o match:OKOKOK -e empty \
+ ${TEST_SH} -e ./exec1
+
+ cleanhelper exec
+}
+
+atf_test_case loop_redir_open
+loop_redir_open_head() {
+ atf_set "descr" "Tests that redirections in loops don't close on exec"
+}
+loop_redir_open_body() {
+ mkhelper for 3 "for x in x; do ${TEST_SH} ./for2; done 3>out"
+ atf_check -s exit:0 \
+ -o empty \
+ -e empty \
+ ${TEST_SH} ./for1
+ cleanhelper for
+}
+
+atf_test_case compound_redir_open
+compound_redir_open_head() {
+ atf_set "descr" "Tests that redirections in compound statements don't close on exec"
+}
+compound_redir_open_body() {
+ mkhelper comp 3 "{ ${TEST_SH} ./comp2; } 3>out"
+ atf_check -s exit:0 \
+ -o empty \
+ -e empty \
+ ${TEST_SH} ./comp1
+ cleanhelper comp
+}
+
+atf_test_case simple_redir_open
+simple_redir_open_head() {
+ atf_set "descr" "Tests that redirections in simple commands don't close on exec"
+}
+simple_redir_open_body() {
+ mkhelper simp 4 "${TEST_SH} ./simp2 4>out"
+ atf_check -s exit:0 \
+ -o empty \
+ -e empty \
+ ${TEST_SH} ./simp1
+ cleanhelper simp
+}
+
+atf_test_case subshell_redir_open
+subshell_redir_open_head() {
+ atf_set "descr" "Tests that redirections on subshells don't close on exec"
+}
+subshell_redir_open_body() {
+ mkhelper comp 5 "( ${TEST_SH} ./comp2; ${TEST_SH} ./comp2 ) 5>out"
+ atf_check -s exit:0 \
+ -o empty \
+ -e empty \
+ ${TEST_SH} ./comp1
+ cleanhelper comp
+}
+
+atf_init_test_cases() {
+ atf_add_test_case exec_redir_closed
+ atf_add_test_case exec_redir_open
+ atf_add_test_case loop_redir_open
+ atf_add_test_case compound_redir_open
+ atf_add_test_case simple_redir_open
+ atf_add_test_case subshell_redir_open
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_set_e.sh b/contrib/netbsd-tests/bin/sh/t_set_e.sh
index 8dfe6e4..b56ab22 100755
--- a/contrib/netbsd-tests/bin/sh/t_set_e.sh
+++ b/contrib/netbsd-tests/bin/sh/t_set_e.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_set_e.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_set_e.sh,v 1.4 2016/03/31 16:22:27 christos Exp $
#
# Copyright (c) 2007 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -30,7 +30,7 @@
# http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html
# the implementation of "sh" to test
-: ${TEST_SH:="sh"}
+: ${TEST_SH:="/bin/sh"}
failwith()
{
@@ -63,7 +63,7 @@ dcheck()
# is thus important to test. (PR bin/29861)
echeck()
{
- check1 'eval '"'($1)'" "$2" "eval '($1)'"
+ check1 'eval '"'( $1 )'" "$2" "eval '($1)'"
}
atf_test_case all
@@ -81,8 +81,8 @@ all_body() {
# first, check basic functioning.
# The ERR shouldn't print; the result of the () should be 1.
# Henceforth we'll assume that we don't need to check $?.
- dcheck '(set -e; false; echo ERR$?); echo -n OK$?' 'OK1'
- echeck '(set -e; false; echo ERR$?); echo -n OK$?' 'OK1'
+ dcheck '(set -e; false; echo ERR$?); echo OK$?' 'OK1'
+ echeck '(set -e; false; echo ERR$?); echo OK$?' 'OK1'
# these cases should be equivalent to the preceding.
dcheck '(set -e; /nonexistent; echo ERR); echo OK' 'OK'
@@ -205,6 +205,9 @@ all_body() {
# According to dsl@ in PR bin/32282, () is not defined as a
# subshell, only as a grouping operator [and a scope, I guess]
+
+ # (This is incorrect. () is definitely a sub-shell)
+
# so the nested false ought to cause the whole shell to exit,
# not just the subshell. dholland@ would like to see C&V,
# because that seems like a bad idea. (Among other things, it
@@ -215,8 +218,10 @@ all_body() {
#
# XXX: the second set has been disabled in the name of making
# all tests "pass".
+ #
+ # As they should be, they are utter nonsense.
- # 1. error if the whole shell exits (current behavior)
+ # 1. error if the whole shell exits (current correct behavior)
dcheck 'echo OK; (set -e; false); echo OK' 'OK OK'
echeck 'echo OK; (set -e; false); echo OK' 'OK OK'
# 2. error if the whole shell does not exit (dsl's suggested behavior)
@@ -232,29 +237,32 @@ all_body() {
# backquote expansion (PR bin/17514)
- # correct
+ # (in-)correct
#dcheck '(set -e; echo ERR `false`; echo ERR); echo OK' 'OK'
#dcheck '(set -e; echo ERR $(false); echo ERR); echo OK' 'OK'
#dcheck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'OK'
#dcheck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'OK'
- # wrong current behavior
+ # Not-wrong current behavior
+ # the exit status of ommand substitution is ignored in most cases
+ # None of these should be causing the shell to exit.
dcheck '(set -e; echo ERR `false`; echo ERR); echo OK' 'ERR ERR OK'
dcheck '(set -e; echo ERR $(false); echo ERR); echo OK' 'ERR ERR OK'
dcheck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'ERR ERR OK'
dcheck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'ERR ERR OK'
+ # This is testing one case (the case?) where the exit status is used
dcheck '(set -e; x=`false`; echo ERR); echo OK' 'OK'
dcheck '(set -e; x=$(false); echo ERR); echo OK' 'OK'
dcheck '(set -e; x=`exit 3`; echo ERR); echo OK' 'OK'
dcheck '(set -e; x=$(exit 3); echo ERR); echo OK' 'OK'
- # correct
+ # correct (really just commented out incorrect nonsense)
#echeck '(set -e; echo ERR `false`; echo ERR); echo OK' 'OK'
#echeck '(set -e; echo ERR $(false); echo ERR); echo OK' 'OK'
#echeck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'OK'
#echeck '(set -e; echo ERR $(exit 3); echo ERR); echo OK' 'OK'
- # wrong current behavior
+ # not-wrong current behavior (as above)
echeck '(set -e; echo ERR `false`; echo ERR); echo OK' 'ERR ERR OK'
echeck '(set -e; echo ERR $(false); echo ERR); echo OK' 'ERR ERR OK'
echeck '(set -e; echo ERR `exit 3`; echo ERR); echo OK' 'ERR ERR OK'
@@ -267,11 +275,19 @@ all_body() {
# shift (PR bin/37493)
# correct
+ # Actually, both ways are correct, both are permitted
#dcheck '(set -e; shift || true; echo OK); echo OK' 'OK OK'
#echeck '(set -e; shift || true; echo OK); echo OK' 'OK OK'
- # wrong current behavior
- dcheck '(set -e; shift || true; echo OK); echo OK' 'OK'
- echeck '(set -e; shift || true; echo OK); echo OK' 'OK'
+ # (not-) wrong current behavior
+ #dcheck '(set -e; shift || true; echo OK); echo OK' 'OK'
+ #echeck '(set -e; shift || true; echo OK); echo OK' 'OK'
+
+ # what is wrong is this test assuming one behaviour or the other
+ # (and incidentally this has nothing whatever to do with "-e",
+ # the test should really be moved elsewhere...)
+ # But for now, leave it here, and correct it:
+ dcheck '(set -e; shift && echo OK); echo OK' 'OK'
+ echeck '(set -e; shift && echo OK); echo OK' 'OK'
# Done.
diff --git a/contrib/netbsd-tests/bin/sh/t_shift.sh b/contrib/netbsd-tests/bin/sh/t_shift.sh
new file mode 100755
index 0000000..f65c6c2
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_shift.sh
@@ -0,0 +1,181 @@
+# $NetBSD: t_shift.sh,v 1.2 2016/05/17 09:05:14 kre Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+atf_test_case basic_shift_test
+basic_shift_test_head() {
+ atf_set "descr" "Test correct operation of valid shifts"
+}
+basic_shift_test_body() {
+
+ for a in \
+ "one-arg::0:one-arg" \
+ "one-arg:1:0:one-arg" \
+ "one-arg:0:1 one-arg" \
+ "a b c::2 b c:a" \
+ "a b c:1:2 b c:a" \
+ "a b c:2:1 c:a:b" \
+ "a b c:3:0:a:b:c" \
+ "a b c:0:3 a b c" \
+ "a b c d e f g h i j k l m n o p:1:15 b c d e f g h i j k l m n o p"\
+ "a b c d e f g h i j k l m n o p:9:7 j k l m n o p:a:b:c:g:h:i" \
+ "a b c d e f g h i j k l m n o p:13:3 n o p:a:b:c:d:k:l:m" \
+ "a b c d e f g h i j k l m n o p:16:0:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p"
+ do
+ oIFS="${IFS}"
+ IFS=:; set -- $a
+ IFS="${oIFS}"
+
+ init="$1"; n="$2"; res="$3"; shift 3
+
+ not=
+ for b
+ do
+ not="${not} -o not-match:$b"
+ done
+
+ atf_check -s exit:0 -o "match:${res}" ${not} -e empty \
+ ${TEST_SH} -c "set -- ${init}; shift $n;"' echo "$# $*"'
+ done
+
+ atf_check -s exit:0 -o match:complete -o not-match:ERR -e empty \
+ ${TEST_SH} -c \
+ 'set -- a b c d e;while [ $# -gt 0 ];do shift||echo ERR;done;echo complete'
+}
+
+atf_test_case excessive_shift
+excessive_shift_head() {
+ atf_set "descr" "Test acceptable operation of shift too many"
+}
+# In:
+#
+# http://pubs.opengroup.org/onlinepubs/9699919799
+# /utilities/V3_chap02.html#tag_18_26_01
+#
+# (that URL should be one line, with the /util... immediately after ...9799)
+#
+# POSIX says of shift (in the "EXIT STATUS" paragraph):
+#
+# If the n operand is invalid or is greater than "$#", this may be considered
+# a syntax error and a non-interactive shell may exit; if the shell does not
+# exit in this case, a non-zero exit status shall be returned.
+# Otherwise, zero shall be returned.
+#
+# NetBSD's sh treats it as an error and exits (if non-interactive, as here),
+# other shells do not.
+#
+# Either behaviour is acceptable - so the test allows for both
+# (and checks that if the shell does not exit, "shift" returns status != 0)
+
+excessive_shift_body() {
+ for a in \
+ "one-arg:2" \
+ "one-arg:4" \
+ "one-arg:13" \
+ "one two:3" \
+ "one two:7" \
+ "one two three four five:6" \
+ "I II III IV V VI VII VIII IX X XI XII XIII XIV XV:16" \
+ "I II III IV V VI VII VIII IX X XI XII XIII XIV XV:17" \
+ "I II III IV V VI VII VIII IX X XI XII XIII XIV XV:30" \
+ "I II III IV V VI VII VIII IX X XI XII XIII XIV XV:9999"
+ do
+ oIFS="${IFS}"
+ IFS=:; set -- $a
+ IFS="${oIFS}"
+
+ atf_check -s not-exit:0 -o match:OK -o not-match:ERR \
+ -e ignore ${TEST_SH} -c \
+ "set -- $1 ;"'echo OK:$#-'"$2;shift $2 && echo ERR"
+ done
+}
+
+atf_test_case function_shift
+function_shift_head() {
+ atf_set "descr" "Test that shift in a function does not affect outside"
+}
+function_shift_body() {
+ : # later...
+}
+
+atf_test_case non_numeric_shift
+non_numeric_shift_head() {
+ atf_set "descr" "Test that non-numeric args to shift are detected"
+}
+
+# from the DESCRIPTION section at the URL mentioned with the excessive_shift
+# test:
+#
+# The value n shall be an unsigned decimal integer ...
+#
+# That is not hex (octal will be treated as if it were decimal, a leading 0
+# will simply be ignored - we test for this by giving an "octal" value that
+# would be OK if parsed as octal, but not if parsed (correctly) as decimal)
+#
+# Obviously total trash like roman numerals or alphabetic strings are out.
+#
+# Also no signed values (no + or -) and not a string that looks kind of like
+# a number, but only if you're generous
+#
+# But as the EXIT STATUS section quoted above says, with an invalid 'n'
+# the shell has the option of exiting, or returning status != 0, so
+# again this test allows both.
+
+non_numeric_shift_body() {
+
+ # there are 9 args set, 010 is 8 if parsed octal, 10 decimal
+ for a in a I 0x12 010 5V -1 ' ' '' +1 ' 1'
+ do
+ atf_check -s not-exit:0 -o empty -e ignore ${TEST_SH} -c \
+ "set -- a b c d e f g h i; shift '$a' && echo ERROR"
+ done
+}
+
+atf_test_case too_many_args
+too_many_args_head() {
+ # See PR bin/50896
+ atf_set "descr" "Test that sh detects invalid extraneous args to shift"
+}
+# This is a syntax error, a non-interactive shell (us) must exit $? != 0
+too_many_args_body() {
+ # This tests the bug in PR bin/50896 is fixed
+
+ for a in "1 1" "1 0" "1 2 3" "1 foo" "1 --" "-- 1"
+ do
+ atf_check -s not-exit:0 -o empty -e not-empty ${TEST_SH} -c \
+ " set -- a b c d; shift ${a} ; echo FAILED "
+ done
+}
+
+atf_init_test_cases() {
+ atf_add_test_case basic_shift_test
+ atf_add_test_case excessive_shift
+ atf_add_test_case function_shift
+ atf_add_test_case non_numeric_shift
+ atf_add_test_case too_many_args
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_ulimit.sh b/contrib/netbsd-tests/bin/sh/t_ulimit.sh
index 3e7c0a6..094a2ee 100755
--- a/contrib/netbsd-tests/bin/sh/t_ulimit.sh
+++ b/contrib/netbsd-tests/bin/sh/t_ulimit.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_ulimit.sh,v 1.1 2012/06/11 18:32:59 njoly Exp $
+# $NetBSD: t_ulimit.sh,v 1.3 2016/03/27 14:50:01 christos Exp $
#
# Copyright (c) 2012 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,6 +24,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
# ulimit builtin test.
@@ -31,13 +33,22 @@ atf_test_case limits
limits_head() {
atf_set "descr" "Checks for limits flags"
}
+
+get_ulimits() {
+ local limits=$(${TEST_SH} -c 'ulimit -a' |
+ sed -e 's/.*\(-[A-Za-z0-9]\)[^A-Za-z0-9].*/\1/' | sort -u)
+ if [ -z "$limits" ]; then
+ # grr ksh
+ limits="-a -b -c -d -f -l -m -n -p -r -s -t -v"
+ fi
+ echo "$limits"
+}
+
limits_body() {
- atf_check -s eq:0 -o ignore -e empty \
- /bin/sh -c "ulimit -a"
- for l in $(ulimit -a | sed 's,^.*(,,;s, .*$,,');
+ atf_check -s eq:0 -o ignore -e empty ${TEST_SH} -c "ulimit -a"
+ for l in $(get_ulimits)
do
- atf_check -s eq:0 -o ignore -e empty \
- /bin/sh -c "ulimit $l"
+ atf_check -s eq:0 -o ignore -e empty ${TEST_SH} -c "ulimit $l"
done
}
diff --git a/contrib/netbsd-tests/bin/sh/t_varquote.sh b/contrib/netbsd-tests/bin/sh/t_varquote.sh
index 1768777..3811d85 100755
--- a/contrib/netbsd-tests/bin/sh/t_varquote.sh
+++ b/contrib/netbsd-tests/bin/sh/t_varquote.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_varquote.sh,v 1.2 2012/03/25 18:50:19 christos Exp $
+# $NetBSD: t_varquote.sh,v 1.5 2016/03/27 14:50:01 christos Exp $
#
# Copyright (c) 2007 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,6 +24,8 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
# Variable quoting test.
@@ -39,30 +41,70 @@ all_head() {
atf_set "descr" "Basic checks for variable quoting"
}
all_body() {
- foo='${a:-foo}'
- check "$foo" '${a:-foo}'
- foo="${a:-foo}"
- check "$foo" "foo"
+ cat <<-'EOF' > script.sh
+ T=0
+ check() {
+ T=$((${T} + 1))
- foo=${a:-"'{}'"}
- check "$foo" "'{}'"
+ if [ "$1" != "$2" ]
+ then
+ printf '%s\n' "T${T}: expected [$2], found [$1]"
+ exit 1
+ fi
+ }
- foo=${a:-${b:-"'{}'"}}
- check "$foo" "'{}'"
+ #1
+ foo='${a:-foo}'
+ check "$foo" '${a:-foo}'
+ #2
+ foo="${a:-foo}"
+ check "$foo" "foo"
+ #3
+ foo=${a:-"'{}'"}
+ check "$foo" "'{}'"
+ #4
+ foo=${a:-${b:-"'{}'"}}
+ check "$foo" "'{}'"
+ #5
+ # ${ } The ' are inside ".." so are literal (not quotes).
+ foo="${a-'}'}"
+ check "$foo" "''}"
+ #6
+ # The rules for quoting in ${var-word} expressions are somewhat
+ # weird, in the following there is not one quoted string being
+ # assigned to foo (with internally quoted sub-strings), rather
+ # it is a mixed quoted/unquoted string, with parts that are
+ # quoted, separated by 2 unquoted sections...
+ # qqqqqqqqqq uuuuuuuuuu qq uuuu qqqq
+ foo="${a:-${b:-"${c:-${d:-"x}"}}y}"}}z}"
+ # " z*"
+ # ${a:- }
+ # ${b:- }
+ # " y*"
+ # ${c:- }
+ # ${d:- }
+ # "x*"
+ check "$foo" "x}y}z}"
+ #7
+ # And believe it or not, this is the one that gives
+ # most problems, with 3 different observed outputs...
+ # qqqqq qq q is one interpretation
+ # qqqqq QQQQ q is another (most common)
+ # (the third is syntax error...)
+ foo="${a:-"'{}'"}"
+ check "$foo" "'{}'"
- foo="${a:-"'{}'"}"
- check "$foo" "'{}'"
+ EOF
- foo="${a:-${b:-"${c:-${d:-"x}"}}y}"}}z}"
- # " z*"
- # ${a:- }
- # ${b:- }
- # " y*"
- # ${c:- }
- # ${d:- }
- # "x*"
- check "$foo" "x}y}z}"
+ OUT=$( ${TEST_SH} script.sh 2>&1 )
+ if [ $? -ne 0 ]
+ then
+ atf_fail "${OUT}"
+ elif [ -n "${OUT}" ]
+ then
+ atf_fail "script.sh unexpectedly said: ${OUT}"
+ fi
}
atf_test_case nested_quotes_multiword
@@ -72,10 +114,21 @@ nested_quotes_multiword_head() {
}
nested_quotes_multiword_body() {
atf_check -s eq:0 -o match:"first-word second-word" -e empty \
- /bin/sh -c 'echo "${foo:="first-word"} second-word"'
+ ${TEST_SH} -c 'echo "${foo:="first-word"} second-word"'
+}
+
+atf_test_case default_assignment_with_arith
+default_assignment_with_arith_head() {
+ atf_set "descr" "Tests default variable assignment with arithmetic" \
+ "string works (PR bin/50827)"
+}
+default_assignment_with_arith_body() {
+ atf_check -s eq:0 -o empty -e empty ${TEST_SH} -c ': "${x=$((1))}"'
+ atf_check -s eq:0 -o match:1 -e empty ${TEST_SH} -c 'echo "${x=$((1))}"'
}
atf_init_test_cases() {
atf_add_test_case all
atf_add_test_case nested_quotes_multiword
+ atf_add_test_case default_assignment_with_arith
}
diff --git a/contrib/netbsd-tests/bin/sh/t_varval.sh b/contrib/netbsd-tests/bin/sh/t_varval.sh
new file mode 100755
index 0000000..94e306b
--- /dev/null
+++ b/contrib/netbsd-tests/bin/sh/t_varval.sh
@@ -0,0 +1,251 @@
+# $NetBSD: t_varval.sh,v 1.1 2016/03/16 15:49:19 christos Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+# Test all kinds of weird values in various ways to use shell $... expansions
+
+oneline()
+{
+ q="'"
+ test $# -eq 4 && q=""
+
+ v=$( printf '\\%3.3o' $(( $2 & 0xFF )) )
+ printf "%s" "$1"
+ if [ $2 != 39 ]; then
+ printf "%sprefix${v}suffix%s" "$q" "$q"
+ elif [ $# -ne 4 ]; then
+ printf %s prefix\"\'\"suffix
+ else
+ printf %s prefix\'suffix
+ fi
+ printf "%s\n" "$3"
+}
+
+mkdata() {
+ quote= pfx=
+ while [ $# -gt 0 ]
+ do
+ case "$1" in
+ --) shift; break;;
+ -q) quote=no; shift; continue;;
+ esac
+
+ pfx="${pfx}${pfx:+ }${1}"
+ shift
+ done
+
+ sfx=
+ while [ $# -gt 0 ]
+ do
+ sfx="${sfx}${sfx:+ }${1}"
+ shift
+ done
+
+ i=1 # '\0' is not expected to work, anywhere...
+ while [ $i -lt 256 ]
+ do
+ oneline "${pfx}" "$i" "${sfx}" $quote
+ i=$(( $i + 1 ))
+ done
+}
+
+atf_test_case aaa
+aaa_head() {
+ atf_set "descr" "Check that this test has a hope of working. " \
+ "Just give up on these tests if the aaa test fails".
+}
+aaa_body() {
+ oneline "echo " 9 '' |
+ atf_check -s exit:0 -o inline:'prefix\tsuffix\n' -e empty \
+ ${TEST_SH}
+
+ oneline "VAR=" 65 '; echo "${#VAR}:${VAR}"' |
+ atf_check -s exit:0 -o inline:'13:prefixAsuffix\n' -e empty \
+ ${TEST_SH}
+
+ oneline "VAR=" 1 '; echo "${#VAR}:${VAR}"' |
+ atf_check -s exit:0 -o inline:'13:prefixsuffix\n' -e empty \
+ ${TEST_SH}
+
+ oneline "VAR=" 10 '; echo "${#VAR}:${VAR}"' |
+ atf_check -s exit:0 -o inline:'13:prefix\nsuffix\n' -e empty \
+ ${TEST_SH}
+
+ rm -f prefix* 2>/dev/null || :
+ oneline "echo hello >" 45 "" |
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+ test -f "prefix-suffix" ||
+ atf_fail "failed to create prefix-suffix (45)"
+ test -s "prefix-suffix" ||
+ atf_fail "no data in prefix-suffix (45)"
+ test "$(cat prefix-suffix)" = "hello" ||
+ atf_fail "incorrect data in prefix-suffix (45)"
+
+ return 0
+}
+
+atf_test_case assignment
+assignment_head() {
+ atf_set "descr" "Check that all chars can be assigned to vars"
+}
+assignment_body() {
+ atf_require_prog grep
+ atf_require_prog rm
+
+ rm -f results || :
+ mkdata "VAR=" -- '; echo ${#VAR}' |
+ atf_check -s exit:0 -o save:results -e empty ${TEST_SH}
+ test -z $( grep -v "^13$" results ) ||
+ atf_fail "Incorrect lengths: $(grep -nv '^13$' results)"
+
+ return 0
+}
+
+atf_test_case cmdline
+cmdline_head() {
+ atf_set "descr" "Check vars containing all chars can be used"
+}
+cmdline_body() {
+ atf_require_prog rm
+ atf_require_prog wc
+
+ rm -f results || :
+ mkdata "VAR=" -- '; echo "${VAR}"' |
+ atf_check -s exit:0 -o save:results -e empty ${TEST_SH}
+
+ # 256 because one output line contains a \n ...
+ test $( wc -l < results ) -eq 256 ||
+ atf_fail "incorrect line count in results"
+ test $(wc -c < results) -eq $(( 255 * 14 )) ||
+ atf_fail "incorrect character count in results"
+
+ return 0
+}
+
+atf_test_case redirect
+redirect_head() {
+ atf_set "descr" "Check vars containing all chars can be used"
+}
+redirect_body() {
+ atf_require_prog ls
+ atf_require_prog wc
+ atf_require_prog rm
+ atf_require_prog mkdir
+ atf_require_prog rmdir
+
+ nl='
+'
+
+ rm -f prefix* suffix || :
+
+ mkdir prefix # one of the files will be prefix/suffix
+ mkdata "VAR=" -- '; echo "${VAR}" > "${VAR}"' |
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH}
+
+ test -f "prefix/suffix" ||
+ atf_fail "Failed to create file in subdirectory"
+ test $( wc -l < "prefix/suffix" ) -eq 1 ||
+ atf_fail "Not exactly one line in prefix/suffix file"
+
+ atf_check -s exit:0 -o empty -e empty rm "prefix/suffix"
+ atf_check -s exit:0 -o empty -e empty rmdir "prefix"
+
+ test -f "prefix${nl}suffix" ||
+ atf_fail "Failed to create file with newline in its name"
+ test $( wc -l < "prefix${nl}suffix" ) -eq 2 ||
+ atf_fail "NewLine file did not contain embedded newline"
+
+ atf_check -s exit:0 -o empty -e empty rm "prefix${nl}suffix"
+
+ # Now there should be 253 files left...
+ test $( ls | wc -l ) -eq 253 ||
+ atf_fail \
+ "Did not create all expected files: wanted: 253, found ($( ls | wc -l ))"
+
+ # and each of them should have a name that is 13 chars long (+ \n)
+ test $( ls | wc -c ) -eq $(( 253 * 14 )) ||
+ atf_fail "File names do not appear to be as expected"
+
+ return 0
+}
+
+atf_test_case read
+read_head() {
+ atf_set "descr" "Check vars containing all chars can be used"
+}
+read_body() {
+ atf_require_prog ls
+ atf_require_prog wc
+ atf_require_prog rm
+ atf_require_prog mkdir
+ atf_require_prog rmdir
+
+ nl='
+'
+
+ rm -f prefix* suffix || :
+
+ mkdir prefix # one of the files will be prefix/suffix
+ mkdata -q |
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c '
+ while read -r VAR
+ do
+ # skip the mess made by embedded newline
+ case "${VAR}" in
+ (prefix | suffix) continue;;
+ esac
+ echo "${VAR}" > "${VAR}"
+ done'
+
+ test -f "prefix/suffix" ||
+ atf_fail "Failed to create file in subdirectory"
+ test $( wc -l < "prefix/suffix" ) -eq 1 ||
+ atf_fail "Not exactly one line in prefix/suffix file"
+
+ atf_check -s exit:0 -o empty -e empty rm "prefix/suffix"
+ atf_check -s exit:0 -o empty -e empty rmdir "prefix"
+
+ # Now there should be 253 files left...
+ test $( ls | wc -l ) -eq 253 ||
+ atf_fail \
+ "Did not create all expected files: wanted: 253, found ($( ls | wc -l ))"
+
+ # and each of them should have a name that is 13 chars long (+ \n)
+ test $( ls | wc -c ) -eq $(( 253 * 14 )) ||
+ atf_fail "File names do not appear to be as expected"
+
+ return 0
+}
+
+atf_init_test_cases() {
+ atf_add_test_case aaa
+ atf_add_test_case assignment
+ atf_add_test_case cmdline
+ atf_add_test_case redirect
+ atf_add_test_case read
+}
diff --git a/contrib/netbsd-tests/bin/sh/t_wait.sh b/contrib/netbsd-tests/bin/sh/t_wait.sh
index 99b47df..eaad7e0 100755
--- a/contrib/netbsd-tests/bin/sh/t_wait.sh
+++ b/contrib/netbsd-tests/bin/sh/t_wait.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_wait.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_wait.sh,v 1.8 2016/03/31 16:22:54 christos Exp $
#
# Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -24,36 +24,172 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
+# the implementation of "sh" to test
+: ${TEST_SH:="/bin/sh"}
+
+atf_test_case basic_wait
+basic_wait_head() {
+ atf_set "descr" "Tests simple uses of wait"
+}
+basic_wait_body() {
+ atf_require_prog sleep
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '(echo nothing >/dev/null) & wait'
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ '(exit 3) & wait $!; S=$?; test $S -eq 3 || {
+ echo "status: $S"; exit 1; }'
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ 'sleep 3 & sleep 2 & sleep 1 & wait'
+
+ atf_check -s exit:0 -o empty -e empty ${TEST_SH} -c \
+ 'sleep 3 & (exit 2) & sleep 1 & wait'
+}
atf_test_case individual
individual_head() {
- atf_set "descr" "Tests that waiting for individual jobs works"
+ atf_set "descr" "Tests that waiting for individual processes works"
}
individual_body() {
+ atf_require_prog sleep
+
+ cat >individualhelper.sh <<\EOF
+sleep 3 & P1=$!
+sleep 1 & P2=$!
+
+wait ${P1}
+S=$?
+if [ $S -ne 0 ]; then
+ echo "Waiting for first process failed: $S"
+ exit 1
+fi
+
+wait ${P2}
+S=$?
+if [ $? -ne 0 ]; then
+ echo "Waiting for second process failed"
+ exit 1
+fi
+
+exit 0
+EOF
+ output=$(${TEST_SH} individualhelper.sh 2>&1)
+ [ $? -eq 0 ] || atf_fail "${output}"
+}
+
+atf_test_case jobs
+jobs_head() {
+ atf_set "descr" "Tests that waiting for individual jobs works"
+}
+jobs_body() {
# atf-sh confuses wait for some reason; work it around by creating
# a helper script that executes /bin/sh directly.
- cat >helper.sh <<EOF
+
+ if ! ${TEST_SH} -c 'sleep 1 & wait %1' 2>/dev/null
+ then
+ atf_skip "No job control support in this shell"
+ fi
+
+ cat >individualhelper.sh <<\EOF
sleep 3 &
sleep 1 &
wait %1
-if [ \$? -ne 0 ]; then
- echo "Waiting of first job failed"
+if [ $? -ne 0 ]; then
+ echo "Waiting for first job failed"
+ exit 1
+fi
+
+wait %2
+if [ $? -ne 0 ]; then
+ echo "Waiting for second job failed"
+ exit 1
+fi
+
+exit 0
+EOF
+ output=$(${TEST_SH} individualhelper.sh 2>&1)
+ [ $? -eq 0 ] || atf_fail "${output}"
+
+ cat >individualhelper.sh <<\EOF
+{ sleep 3; exit 3; } &
+{ sleep 1; exit 7; } &
+
+wait %1
+S=$?
+if [ $S -ne 3 ]; then
+ echo "Waiting for first job failed - status: $S != 3 (expected)"
exit 1
fi
wait %2
-if [ \$? -ne 0 ]; then
- echo "Waiting of second job failed"
+S=$?
+if [ $S -ne 7 ]; then
+ echo "Waiting for second job failed - status: $S != 7 (expected)"
exit 1
fi
exit 0
EOF
- output=$(/bin/sh helper.sh)
+
+ output=$(${TEST_SH} individualhelper.sh 2>&1)
[ $? -eq 0 ] || atf_fail "${output}"
}
+atf_test_case kill
+kill_head() {
+ atf_set "descr" "Tests that killing the shell while in wait calls trap"
+}
+kill_body() {
+ atf_require_prog sleep
+ atf_require_prog kill
+
+ s=killhelper.sh
+ z=killhelper.$$
+ pid=
+
+ # waiting for a specific process that is not a child
+ # should return exit status of 127 according to the spec
+ # This test is here before the next, to avoid that one
+ # entering an infinite loop should the shell have a bug here.
+
+ atf_check -s exit:127 -o empty -e ignore ${TEST_SH} -c 'wait 1'
+
+ cat > "${s}" <<'EOF'
+
+trap "echo SIGHUP" 1
+(sleep 5; exit 3) &
+sl=$!
+wait
+S=$?
+echo $S
+LS=9999
+while [ $S -ne 0 ] && [ $S != 127 ]; do
+ wait $sl; S=$?; echo $S
+ test $S = $LS && { echo "wait repeats..."; exit 2; }
+ LS=$S
+ done
+EOF
+
+ ${TEST_SH} $s > $z &
+ pid=$!
+ sleep 1
+
+ kill -HUP "${pid}"
+ wait
+
+ output="$(cat $z | tr '\n' ' ')"
+
+ if [ "$output" != "SIGHUP 129 3 127 " ]; then
+ atf_fail "${output} != 'SIGHUP 129 3 127 '"
+ fi
+}
+
atf_init_test_cases() {
+ atf_add_test_case basic_wait
atf_add_test_case individual
+ atf_add_test_case jobs
+ atf_add_test_case kill
}
diff --git a/contrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh b/contrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh
index aa7af27..f460cf5 100755
--- a/contrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh
+++ b/contrib/netbsd-tests/crypto/libcrypto/t_libcrypto.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_libcrypto.sh,v 1.3 2010/11/08 19:06:12 pooka Exp $
+# $NetBSD: t_libcrypto.sh,v 1.4 2016/10/13 09:25:37 martin Exp $
#
# Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -49,7 +49,7 @@ atf_test_case bn
bn_head()
{
atf_set "descr" "Checks BIGNUM library"
- atf_set "timeout" "300"
+ atf_set "timeout" "360"
}
bn_body()
{
diff --git a/contrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh b/contrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh
index 1453e75..eb8d0f5 100755
--- a/contrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh
+++ b/contrib/netbsd-tests/crypto/libcrypto/t_pubkey.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_pubkey.sh,v 1.3 2011/06/09 05:25:21 spz Exp $
+# $NetBSD: t_pubkey.sh,v 1.4 2016/10/13 09:25:37 martin Exp $
#
# Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -49,7 +49,7 @@ atf_test_case rsa
rsa_head()
{
atf_set "descr" "Checks RSA"
- atf_set "timeout" "300"
+ atf_set "timeout" "420"
}
rsa_body()
{
@@ -60,7 +60,7 @@ atf_test_case ec
ec_head()
{
atf_set "descr" "Checks EC cipher"
- atf_set "timeout" "300"
+ atf_set "timeout" "480"
}
ec_body()
{
@@ -81,7 +81,7 @@ atf_test_case ecdsa
ecdsa_head()
{
atf_set "descr" "Checks ECDSA algorithm"
- atf_set "timeout" "300"
+ atf_set "timeout" "480"
}
ecdsa_body()
{
diff --git a/contrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh b/contrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh
index f7faa3a..e8e3f28 100755
--- a/contrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh
+++ b/contrib/netbsd-tests/crypto/opencrypto/t_opencrypto.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_opencrypto.sh,v 1.4 2014/01/18 15:15:16 pgoyette Exp $
+# $NetBSD: t_opencrypto.sh,v 1.6 2015/12/26 07:10:03 pgoyette Exp $
#
# Copyright (c) 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -80,7 +80,11 @@ arc4_body() {
}
arc4_cleanup() {
- common_cleanup
+ # No cleanup required since test is skipped. Trying to run rump.halt
+ # at this point fails, causing the ATF environment to erroneously
+ # report a failed test!
+ #
+ # common_cleanup
}
atf_test_case camellia cleanup
@@ -98,7 +102,7 @@ camellia_cleanup() {
atf_test_case cbcdes cleanup
cbcdes_head() {
- common_head "Test ARC4 crypto"
+ common_head "Test DES_CBC crypto"
}
cbcdes_body() {
diff --git a/contrib/netbsd-tests/dev/audio/h_pad.c b/contrib/netbsd-tests/dev/audio/h_pad.c
index dd481ac..b760d04 100644
--- a/contrib/netbsd-tests/dev/audio/h_pad.c
+++ b/contrib/netbsd-tests/dev/audio/h_pad.c
@@ -1,4 +1,4 @@
-/* $NetBSD: h_pad.c,v 1.1 2010/08/04 13:15:15 pooka Exp $ */
+/* $NetBSD: h_pad.c,v 1.2 2016/10/15 07:08:06 nat Exp $ */
/*
* Copyright (c) 2010 Antti Kantee. All Rights Reserved.
@@ -56,14 +56,14 @@ main(int argc, char *argv[])
ssize_t n;
rump_init();
- audiofd = rump_sys_open("/dev/audio0", O_RDWR);
- if (audiofd == -1)
- err(1, "open audio");
-
padfd = rump_sys_open("/dev/pad0", O_RDONLY);
if (padfd == -1)
err(1, "open pad");
+ audiofd = rump_sys_open("/dev/audio0", O_RDWR);
+ if (audiofd == -1)
+ err(1, "open audio");
+
if ((n = rump_sys_write(audiofd, musa, sizeof(musa))) != sizeof(musa))
err(1, "write");
diff --git a/contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue b/contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue
index 0aadfa7..969ad9c 100644
--- a/contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue
+++ b/contrib/netbsd-tests/dev/audio/t_pad_output.bz2.uue
@@ -1,998 +1,1040 @@
begin 644 t_pad_output.bz2
-M0EIH.3%!629368,\S/H`A(]_____________________________________
-M________X)/JWW=]LJ1DQ(V-I-I+:VTPD*VTAK31))5F;9)60#$TK+5K#:U*
-M-:*D!0Q6EMLA*CJG75+322@`44*+KJ[*:U%`=]N\V@VVF]YP#E5K*A78P,S#
-MZT/(+W<.M[<YW=V9MW;N[N7O=>>RM[LO9>]N>KVVVVU[MVU7+6MC5M6U%;5E
-ML)MD:LTBI`6RBM)!"VL!D))"-@4VJM56U;9JFF@VK`!M@#+8S0%3:-K6VU,V
-MQK&@`*!FV;6S9MLU5K8:M9K62MA;`J:+:(V9I2W6NUFUK,VJ:NMVZVSK;O96
-M[N]W=W=>WO>;6M[W;W=[WO>\Y]SN]#??>>'&P/6$<PP9:BH<L>RM"O;IU+34
-MFG(=*=!IK(YZ=U(J4%`]!0#1IC5NTN.DU1;44F&#1HUEELQ;`VK&UJE(JJ:8
-MYP:41,@3``T!,"::&F!`9#3)@33331IH-``TT9`U,&@TR&0R833`$T,F$Q#$
-M8`$T9&C1IDR,F(--&3330#0(-)(1H`!H``````````"8`3`3(P3$P$8!!HT$
-MP#(TT:$P``)@$G@)HTP)IZ$QI,$,`%!II*(3``P8":::!&`F@$P308@3$-4\
-MP1-3]3$CR9$8;4U/*&T;4F3$S2:>IDR9#!&0T,U`:`&AZ)Y)ZC0QJ;4]0S4>
-MIH9&@"34E*2)E&R>I[;8$CTH8"3!)X4]-,30:!&3)J>BGDP*::-I,AC*:-#0
-M-&F@`!IH`:::!D>H````````#3(``!E2@3Q(T8--#0F@D],U3\03830Q4_$:
-M3,)B9-3T:,"(]&IL29Z5/3PDS331H:$\*83::9)ZGHTR>B8JG^FC0&3$T4_1
-M,FT9&2;:FAJ;)I,:&BH)-2DH04]-4_9MJHQGFI--$,F@9)DRC:;5,T%-E-JF
-M]4;PIZI^H:GIFHU/TU0\DV(RGE&F9-BIY30]3)^J-/4_4TC0S1I-!ZGJ9-,0
-M\4T9/4:>H/:D>H'E&0>IH>HVD_P'^!QBM$WZH<N9/\1AOU@ZQ5]&G\[MS3YI
-M6?/_),4?*E&(/&KL?TQ4)#,_/\R3!CVT)[6U_/W^%I;'5`^^GU,B_&^CJ0ZS
-M\Z?2(7O]E$)GK^WQ_MV9V-#]T*,>/L1P,O'$"(@>"7Z["OJJJC@L[DDKWX>;
-M.I?\7_4S95A_"B0(B%P@`<W$S8:C^KZ-WW-I>M:^O>ZN;N>U[CV8\/P,*1D\
-M7FF<DTDH"""2022!;*!5@!XO/X_SM7=WNY^?_NZ_L#L0%!5%8,1%03&,",8Q
-M@8P,8@8QDLF$342>6F$[Y:6L3:\[_+_H\CA[6TL6?19]ONV3@J2HH`B+%I;W
-M(>S39[Z?/-HJX`Q!(#:_XGN6K[U>EW4[>PI':-BK]?0U_<!:4DQ)+7"JKB1B
-ML'$%H(I<T&D:N7DZ2@W>-QOB$O00%%Q](-)Q'ARFMZF:4`2*C^K!H/K3RKK]
-M-!9O<*COJ&H>OZ>?,I"7:06C:]$#!7=16YRM^YR+4QSHV:?UYS-:GS>'Q=RQ
-MJZ,5W7X32SQ$BH3;@MD0(9(:S=IYT\NE&+^6.SB+>\:ITL]=6UAGJM2M)W:(
-MJ<GF$0+!0&BKRH`GT'2ER_/3S.R=$_0M7N9V?Q;5FGJU;K>L&O*9A]EW6N7E
-MT$1*_C_D\Z#.K+*R1LK?8&:X&741@Y7;2OI4^=RX&FBJO1*H5P0`W[?B=1S]
-MJXQJ3RQ_#P1&\SW>R<6MHC1*ME4`1/!DV<`FG!NU#,,JP_VGKDJ-W'7A.6-2
-MH`@6BQ/H[0!?G+3#@BKUE&XG'87&!\'ZM:%FJ1+QPCSS0J$0`\ZO.D@Y?+5F
-MJA&]I_8/'_YW56@=6IBWCI<93`!/!(_%C%.;ZLRBTGM4?'A=G=<>6D:!@&N;
-M=TH@$3>I<;'M)5'3VR4VAD/M+707S3Z(2YR*8E+3FF@$7C[M0Q!NV;BJ(CE2
-M-&U^="F<R_@]-N,K!\PY8*B@1`"'M,V0V%#<:.C-T6>V54K:M?GT>6J*KZ3/
-MO_/9:G327;0T03)*,[RJK)$0%5,/RR65<-0YN"ITIRPN^UD^_^(W,^WOR/(4
-MVI*`3A>M3S""->70*,S":;ARXQSC5TV0X50Z)=GTWO9TS"0#C_CGU`UFBHF3
-M+;]/P;'"@*G:SJH4G4W"\"1=+^O,/M-XO^%*VYMJ>?VUL)0<R687AST;\U)0
-M"+'Q#WL]]$QX*.181O6;^?R:3"+[SXG>`1G[M:"=>*)G"?50.UXBV(=QK'_H
-M^S&@@09*)H!`;`RL74"ZY1NUEI&<@6?):>8W*IZFE5<TV%:?:HD")C`C8??]
-M9P7+VM2M7/1NSU$)V?7S7^$]/H8F)6(B%!ZZRO!65Y$V]W$GW!0P)VWR>UI/
-M1R(YCJ,..G[%050`52\01%GW-7V6N6VY)^\7"N;]\_OL/L^^W#5EN352!#:Z
-M9Z$:0G406)N$S-QB*V?YG;RFPMG)`H#IT^ZPV[#E<HK@@6>X/X[HHMB<F&5H
-MX6PP<=I;W%FF/#<_BQB*"#FU$@1,/5M]ZP@FB1':RN614]H7?Z^R&E4U%2XW
-MHR:74)Q$"A:_M4+9*0Z^Y;X%.+'/S[/D7MGQL953F44G(VX>4''<*2RS(K.B
-MH*9$"IDAYG.-6D+G2KB34-#K?6CJ_S/<V&J_CJ_'=18[7F9K:X5R`*#Z<!^=
-M*"XVXQU?,8+_8U;]^6DE.LI-U8[_G8YQ"Z\.!LJE5SZPW+0!$U7MJ1=ECW.@
-M2-^@=%YTU5Q&[E&84ZUT$\FK2D"`HJ78@E%LLMK"YZSF5?D+%=YMKG=U=65>
-ML+"GC(B(AYESJ5[#I"'8+FV9)N83_1DF::W>MV<51?SO>O^6'\9+L^UVR&?3
-MD$VR$H2IG/^-,G_SHI&;*/,GEHV@[VK:/2F0+4G@$.&F)A`'<)WDV:A<-ZHC
-MV;TU1BO%#Z15\%HR\!^%,8GZ#GP)J`@18-;CR`L<B\UGWY#EX'K&LL8E]0+3
-M7<-="XJN3QB!1($/KY<6M^KKY"$UW(P,Z>\T>D<F1X454&+\O-9!*5*Q"B$X
-M@"^ZLG[_XZT!L\K:Q(-9OU?^35>)YM&Q)B:0`_ILC@";7*VII!'K'N_LIANE
-M:[1]QOVP<_1HM?;=\.;VT^SL_5UOT9HAI!)BL-@ZP*U@6K=5WR1XFY5YK+N7
-MX.ZBJ)B75\@BJGB*%?!%I]3CC6.TB[8+O*9QXU-IH;F;O;=B\_!G-MV_VU3G
-M9R$Z<N@$2_]]?'96SG@19#X&:V9?Z[#VCM5IN#-\CP:*6O6+&E(Z-T7+VJ)0
-M8PI+`!%%YZ(="+'C')WG9Y(^>R63O\BUT&@JWK;]M.PD$6MOQ%\@23E-:2P>
-MUJF0('!QZM$KBAMAF:2??OX"3I9Z+FO=WTL3ET8(-RJX3X&0'1N#[H6[8Z>X
-M&N25R7<KN&E^*Z0`IL&C)+1W1%M$;NYR/@6&LF>J<C52F>KAWA;W_,$/KZ]1
-M`!:>@T8(OG%LS"]ZJ`'"B-K/PU/HK6&U+#G%\>%L9'7I.*YS9);!$-9U_-HY
-M.O!%_0W\5+LF:SK"(O%HM@IMD_MA?A,O&G*MR@1%P:$$*E0\6FL)>74^?E(5
-MTS_S=,8R'-MY^=7NN)A"VO(GG*@(%U<`RJ`#/<@QUHM:YZO@<"*UO.HKR]K>
-M;DPH*5+;*`!!OI-N"G'',0\WP<2=5HB'TBO>A;P*KK-&S4NO>:O?5RN"(=O?
-M5(!3:2.+`>V(H(AR<(^)5PMK5/Y<C*<I24P0%E%=M?EW^?(`:#6_SJH?M"WR
-MUN;<6SS4SM9_=S4;@,`YS[%+E#Z?%HK-TV%]G.+1K9`%.L=N`/ZOK;$H/^\6
-MLSE7.3@/$LET8W><6OXD].Z&J8R2$4E3<P`9K-Z"8II[@6Z9OB=@A7)JC!8?
-M?/^^YRP;&($BGE"#E2K*N"-AH8BF5JQND\3#N6[KN4-4</.3O4\/-6`1#\@.
-M]=-V87UAJI$Z+4J4>!,!-82,ZN.&UR*ZNXQ'SQI[EH=,#^6*">)R"MTI!&IX
-ML6"=@QS3A&ZZ5>KMRS+ZKI29EHO,]GI*G76AU_<T_7X]2;AJ[C7B]0?"1;5\
-M$19MN@?*0%QT/PP1;#%L#'B8]=B:2DQM+B2_QY%W@*I`#]X/H#E`%!L*P_K3
-M[=/FCVT@S05&_[.'_*DL'\.;[A^C1>?.<K-LX!/&CT`#G9!GZT`TN#@SQ_5E
-MFAP9Y2_U]*&&T82"S7="`+PD1K[7YEI:-9>?Q2-2I3^-JUV6400"Z0$QN+0/
-M>-=L2C%NZAHE#I):\G`BA-\1,:"_GFZDY4OT^U5:S5:8=J3O>9]N[2J@(A7(
-M+"?@`"1L:*6!;?\TO*],-NG:>"I]*4]UATF[$G6E2``UOB<"(E21ZG0]6%62
-M4?'\1N5Y3B;O1UQBS6`XT6"KR%(`!X^:Y.D.$IJ&5X6=SO_1;NG%W>Y9TUC,
-M["W_2#@*!$0I.!@Z-[V7D("$\ZPS/T*'#=<AO&^6HE:H`R8M7;ZG>1WV_O@T
-M$-1*H(B;IL$.9"./.-O5G+\)Q<7Y5V;3(6,WFN7U%2TU2B1`7<[<86JV5T`!
-MYQ5;+_4NRDMY)27_;Y@LGM@>=!E$C7+OB5OKYQ_JVZ^#:KA`AF][SYKE@$Z.
-MKL+!<"V'J/;-CB/-+M6!@:8J?=5,$7*87[_H;V;D$6;\'&B':[GERN[CL[)C
-M'Z\:.7UY$N#3O/&[;;P:US6P0&FMP0]7YK.Q'-ZHJ+N8GF6IANBI@R@ZVKW]
-M/[?A94->@!$*<$2HS*@9*CR,JJW84EL86668I9DIC<K`,5J.W\_K9%0B`.\3
-MQ`BUFZN+3FC].3]*<WCSSOEO#492IVU',.<'(Y?/^M4``IT'5E0"Z.'F<Y<B
-M5&[\[JK,Z1):FT<G'4MO*]/[]/^5A@H`0$9>$0U3R@9(&/XISJ;O<,K]U%BU
-MSZ1W7VY;)\*DBH@`6(!9-550K(H$-2JAIS(J=J1!$\T;+@I!$.5]6T@4[H97
-MLKD='QVHK%;I1^Y>)2=K'"=PC=]3*WF\Z`B`NY-G<B!>O"%@.XJNS)Q8IWM<
-M['Z*7@RNX/$:/SYG6YN\O1LH)#9?\<DI^5NO%X_U67!HIX/Z^I)Q6JT5&T+#
-M;^/]PJ4`"PKY>NSQ)BUG34?L$;J9V=:>I.]>RT66G\VN=KW*?VY"J0`L>-A]
-MD$.KY:H;B-Q<6ZKG#LK>VLXM`Y>3CT-TG@`2_8(ICBUL6QR:8RTY4#7/[N'D
-M9+/?KZ6RD$\B(,]UW<1J>P"7,XXK(?KJJ"'B32W=5.RE-ROA4@LY+>NU500$
-M)[_KYKSL`@-0%SIJ6R*XIS2RZN8:/J[80?PJ*:VT,+G?5^ZJ"+M=KQ63:">:
-M00LGQX?8;#OBE5(N'U/?^4KO_1(IP("^B\&D]OE($J<WY^30#0/6V9F9\LI=
-M96-KK6-B":"$?Q:9SG"`&:@DKT,\7:]4-^V;D46N:RD,X:EM_BK@2L1UKW/X
-MF3\HOE<$!B_?5N!$A:RR7UG1_.'O>)6^%GG@KVU7H:;GJMTH`B%P"+/VUMXL
-MM`H,JWO;._<,SA?!GAWG%^ZSS@?9_%%2J``!C22`U&2;6U1TD[T/.R3%R]S:
-M@RN_';NSQT%-!1HF?S@Q\DWM``,9R&4@SO;;91IS&.J^E3UD5C\=.CH)\\T=
-M[BL)(Y-;*^$`W/S8+'<8*#\UW']]%D7*MF9%5]`]&4HWJ!Q,I,1*INU8`%[T
-M\@7KRUFYK"PYH&:`?>L^_O.'+TSL8[V,`R[MEXL,$]<3JV1`?UHY'7@%;BVZ
-MG-]Z^PL"[P$-'N'6<BA?<O/M']3@1/#\_-H(K??-B7UQJVBOE\8I\/KP;)O7
-M')">AU)/(A*O(!*-=Y>-`[JY&EV>FY2S;U*BV:C<MMGDFV;401?-L?@0&[P4
-MW#L>7T6/:\C?MO@:-<^W5=.T\`Z8W:;BLFE'.9B2X>+.=!JVI!QUO>XT--O)
-M[=ZS2&L>69P3_>8&HD]YO%24B+%7M0?K2(N"%2TTXV+,IH&$\O)OB1_A(8AQ
-M7A.!:]I_@Y;%1``'K9:V!B,NF``:OPF?!9S[A/3>LS%+Z!5TNL;^]CFCD_Y,
-M3R`?(A$J`1!1BZH]R,&XRWJJ?G_NP2M(=YJ*0=,,S+98/\?O7S>7'U$XXV<E
-M+?Q;($&CX0'TI.50`A0S_MQ>.XW%N\;-Q,`T0'+$5Z;F&ZZA]@V(D"BD?:`;
-M=S>)A-.=D9J8S\+(1K\R/P?E6O</!U8'\*9C(`U60TG>!"J^?\W-1#\S?1>Q
-MS[PV>Z9M[RE3)>NX2DF%GF5<M@!Q%"B$"@65)MY]R@4X3L9*LSB60+Z\_<]0
-M`"<^KZK/2D3#%L*`/EI*0'.U2I5Z,-GEE(O\PZF0+:7#I:WV>JR+.Z(2BI22
-MB;KN%RX7I/]0D`$N8K5Q9'"!?I>K'$_TQ9Q@_U<,':[%<N$G6\`@X/XZ:+UG
-M5$G&OU+47MCTKOVB0%:]\O"\B4$_Y0V=B2>6RYA^"9RM.@_+>*:ZQB]?$?ZJ
-M,QBKG_)*"7KO7P(&T^/P$'#"=8\Y)3C)).KOW;W#$ZK#8%*U7=U2QQ_[_V-5
-MB("08I,$3D/,Y_O.X$G?;WRZ%R:T#1V%)+(O3#@@-#DZK[!]<TU.;F1/8VML
-MP\YRHW=R(9<&[UEPX("1L;8@_?*WU[=[EH3Q6/LG5BEV*ICKE-L6`@-=N"(B
-M_R:[#,GKH==O/DE%L8P(0@+U+^DSN/PZ*`(!.:]GJ"!17MNVH:V`:DV4K'Y!
-MUDD0OO0)Z80&]S%`F2>4DU,=5X&GCA;22225I!AS0\_.D/@*J67P1?`GX4NB
-MM+WX?[#5IV$U5-6;8B#`3/Z/GTC>E4``\&WQR(?:\Y+T'VG?%7$].V>IA\5=
-MWKZ?7J0(/?8[MN@DR(>-$T'IC@M)FG]4#LE7.O&OWT77(2(.6D``T&_GMEE4
-M8R)HJY%Y##J,/(N>"Q9#JM*QF?E1*9`LGG>[R\*P(`/47`4QF\_/L\4-TL60
-MH'?1"-Z>'882<1"DIK($5)<S^4DG.$4U,/N*\K+.QZ7/6;)"0R>0"A?U((?&
-MB[RFPV#OB!Q:W`H6^(/^ZR"<Y%;!.S^.=4O_<!/4N\KVK[\74:3A6M9193*2
-M35&^A>)'HZ-`0`X_!Z,WXI&U#7P8%4V[YE\Y=UE^M5W?QW-TQ5[_UNM`@,QV
-M:($!,;*%[OR&35=\:Z;3E4+'CK]55]XX5K>J?Y1(%P_?;;.&KB(E]NE$7Z/4
-MA^KG)K4,F'5#[X'??SK)UDVI3R(5]D`0MK5=V=GT;@W=;7>OF39G]ED7^XQ7
-M/S"*A?84/HU@@7>T2CQ@"O6S4*QPQ9BGF512;):"I=E5_#QA_J%,$4^1$%)G
-MN)[OT@KO'UL_]22:=PV&TYH\?N6X9[;YBINKW3^#4+8!:1YLP1;6DY*P)968
-MT!52)%K7@9,9.4]4UDRN52/\Z@1`=S:."8`0YW@B&9YL,7@R69XDD(!Y2##/
-M`K'9/WK+RW(9`2IV[`+LULJG_2*#%4S>=T?OXZ$PI!"5WUHS7Y`#)\B!38#$
-MXJ]FWZDII/45>LKFO(A)*BDPT/G,\'@/+0`"*^;E3A:S53A$-1VD##4S_,7<
-MKO7Y^ED$4'[&)0`;HOP<X$3L>8Y-K0S-6^7W`D]'6U3&QYO@LG)#+I\#8Z]3
-M``[6+`$CT2?-=6_NMD:G#_R=:F#$ECZW]O/]S`25;1]0D9S!URG"8]HVP'8H
-ML>U>A79$N1B)RG[]8E!+]9V9!O&!B]M,&]8%+P8^(J=-:MDHV;Y:#:-]SO=0
-MU>-O%,`AE^1!SNJ!%?8L6>;%:1U\^]ST%C^I_VT5[J2<MHG@A6V^)_462N@"
-MS%3-.'4#R+2`[>EM52T>V))!8/8!`8LCK?SQG!%$DQ"H4&C=77246E/XR:!1
-M\N^XK%W@"&)^K?!K]QBL-P/N)+CY!!1XYZ4K91D+;ZJ)`6_*(A6T6JG'01$Q
-M%;/;.^]B.%WHD=)CB*S?IX!>*9;'H@0\3YW=O%3JLIOBMLU?)Z2/Y.-=>U\+
-MN_M(U:&-DE0B'?Y,FT4Q$66G?[7-W0J=-C=G=S^G05M:S)9"WR=THUP`+XSR
-MB]P'<ZL<LW6G^ZH3DT7?G<A'X]DSK)T8W*3])VG!7(%_W/OO<"'<9_OO]VR[
-M3HI8T_S]&#RQPN^LU[U,)Q$6D8,W8D`)W6.&3Y']VOT5E??9-Q6'=E@W+X7>
-MV?/-X,(,J`@5Y5;[Q[Q(8`0$BGM]Z^;56<(B/=W%D5XF@/9*^KWZ^6@?;5AD
-M4R(1T^YH^20+*X4W_<:[4RZT.KJO72BYYV(4?)6XRH1#!^620);6EKH5JH(@
-MG$.O-G1RZU_$?\T\`F*$UK\`6QSW$V+/W5-H?;P="7=KV]5_0K?%2!#8WSZ"
-M(=K95/UB]E:=K.[Z?_P(]LL[+D.P4K<9$`L-.$K$!FNLV<"/]0`$"4VO1[//
-M>Q`R!4#K+OXX'N4OI>T@085=/J`(N<@A=H0(0L+U+WF17Z0=1NV+?R9C2T.]
-MH>[SM%:5>@6O',,S,K$0RCGRR!"M0OU\5W^[VI?^V-4L=%);).JFEF^G</J=
-M3B+%"/5O43,"?EXWUEB<02=@LK#?F87,S6?R5)E-#=:&DM9AC,EY?W2D&+Y.
-M6JR0$CXMV6R#CJ9O!6+!9WV5Y,W4X"Y@6<JGJS-0U>`J`$J_#?2-UI01;`(L
-M-=>0(O\4]73WL6T*MO4MX4[VKM-RH$"OO?[IF%(@,TJ<;/A.4^.S\O;L203&
-M];U^M>4]\7+,)-UYX#]20,""YW*\4W)0EXQ,B&LTS+6[81RMJ&.OA1/=]B`,
-MQ<6E>`!44N1]'2Z.G'FCO,Y1R"AS?2CMUJ=M^V_X;7.9Y``4UZW3N``/?$^?
-MUN/WV[YVI%W`C3/%YYPZK2T'5PZ2(B$%^>5(@':XR/PB*=]VG'"W$7>EF<RY
-M\>RXRN66F&E5(A5Y^Z`(<ZC]?>=968%Y=U46D3>'NMI+*4#&[/5[>-6E8@-:
-M0((WTR>U@0]*7X;X>$H7Q22X4:BT/K?R3@(1J:^""+%'UFZ[:_&!#7DD_X)"
-MVV\79J=PO$U\-Y99Y)`:M7ZKG#2CT=MSUV=X;)MV2PB-4S)G24Z^0=,5F&FN
-M%3I;C\.>V/^47`1#$T.'W.41%]'S3=Q04:A'W[AUY/T+#E9<?9M+W1?/>*)$
-M$K]7^?<^<`!D(_N.G.P<AY[82/0F&9>#%3;:O3EN@\LE(+S[E^JL&733?-`(
-M0K/ED]OP79<DTUVO</\\3`TU=%YC&?5YAZ##MM-0K8!3JJFP!^8!`1#HT_UP
-MU"TO.T%E,AX7WT6BY?.\_*:WOM8*8@=W<C[0"/2]82#I(30@N+@!OJ,]L\_T
-MO4][YRC;[..VZ-O%,$&QPU>,C@"%NF-_]V^0<Z3\_U<UD:_<^[\?8\U9Y>-<
-MZ6P@N3OB9%8B*VZG;UX[_,`(9/M<F7OUF5\#2V]"S7AS%QJEPU?IN\.;7US-
-MYN`SE4K$"2YB[PYKY[W83H`'VQ[Y(;@"Y&TT"+R?'%85XK*S+B\7#5IR$40"
-M;(6>0F?<$`)]!48ENTNK1J^KT:U"\EAHNTZU1>;F7">""]QN?,1NV$AYO$"(
-M5>4W_9\Q_&MNY_L/;TOCP:Q@D>G'1RZO=95!14Q1?J"(+L\]YGY^=@4J0*\7
-M6<ERZ:0MNC\Z55-II1O=MONG%.2.ZX55OF`2BU.1M6"3S\MZ6>3I,2.G69B>
-MTL]SD\HK<A(`9X$!_=]3^)A^'_!I[]UF[9ZR]E40BNWBR1^XJ$"NIBX(`'U/
-M*4\)*M>-A--A.>K:/^F2CCL:V\!3;6)L/$`@P8]>H(L@"@>\R0S*(MDGMZXR
-MNFE08'-<Y4J.0=<77/RB[\N0KD5+M%1PH\4@`UK<-[].F2OH-V]?K\"^F*7;
-M55]V?T6XTSNJ*H(?:LT_@`(6E/BZ??0B')]VD?5A4"G+ZOD?),(7R7YM@0!8
-MF>''9/U][FBFF@1G!9VSW&/T/=9$)I*W@7.-LFNT($$[TT=#=^=5;>1?N-PJ
-MJFE9Z55TBG"PVD;;OJ'X*W6B`S\]S]^"(3'0I;'JO06]92\N*V0-++C9,=I.
-MI.5%=>A\UE,JY`.EI<Z92]\#Y"!"MN.]_6EI1>MPF&9]RUF-"LR^8#?@1\JN
-M+M_!=WR_A.7Y=8`*:UE?ZR(#_EOJV$8T^YLU&',YJSTJYF[1IY76J%AW"B1<
-M'/\JC(@/TS<1.$8SXL99,WI%.R8IN[O;UFI5(Q.!!K!$*GWP,3M=S2IO>Y&6
-MJUO'MQ\9M/;&J\84\&J7&ZG((W4OW*;R0?*C/?`]GNLF=LMUQF>-]-!_#PM=
-M]M8R8"B((DLK@VWRS-7YRD9WX,BCZ\LB5#8RLF(%;A5</**8!,&*S4B[EP`!
-M^!:)4A.*0ED64_FFFM8;N-4U2:MBB;1?<L981?R%@B[2]_>D!$*_(==E[/0B
-MKEDZY=*VF3[:GY#QQN*@01^UU23@#VJ@(9;E-_-JR!">Z-M1]_CO79T,UVOJ
-M<7C<XM1NL6[QSCN2]8WQ+LJO57%7<^LD"CU2T(B_&6%]<JL,)339]44M9Y>V
-MXZWE)8`<O]\:#4-9`@ZW7E75)X9F9`7R9H3)?M>H-MD'M_"<`%3HL+K2``4$
-M?O=[_II043;+9ORML+!YX$&K>%2(HB4WE;4`BIFK1*W."MU%%GU[,J.]`S\2
-M.J[57M!#(B!9R"(@5'U[_OUNQSF)@[?AXOFBQQFU"D+C?9KN-C=I$B!BX;+X
-M.R5P03;Z>!$%Q>XEHY,]-E:^M_6<7T[,<[2KU,Q/;N]R&I>E@$_<3@;E13B(
-M$MAE[<A/?5.^2E]4[[NN,P8(>74'7JYBNHW(C,%5"N`/?!*OU^=6ED""&;>W
-MC)\7"9C9."X330W+=+#MUJ+#\M_=40`N\#O8F3($+&OW&CKUN655SEJD;OF^
-M;2=\A>DX0!Q0QUT_+<'&A#`#NX*RZ`0O'[IWGQZ^)^-;WZ'I,SDY<DS"A)WX
-M3%ZVON>M++,JI`6FEZNG2"("QW,EX^%EDBQL`Z;.2V\C884:S:]`G%$4'YO:
-MPB`4?B\\6/IEC!D8%B\2/H&@U-KQ,MRB$,\1*^<]/;M=XL@@6I9V^"QT93W:
-M[Y#=#Y8V'6.*LY99X?+U$U&^W@J*`AZTNST47H01%_STWZ+R+B9X5<=S[4WD
-M?EJU@,.27;_&QCI<.DG$A><76W7UBJ,6B!.;YH[C;K"OOB(@B9C\NZ#`KZQ^
-M69US2F5&@UQI^BYQ(`SFVR6UK-(@("H@&>\4*.`Z9$0SGGB_/H?#H/K>>I66
-M#E(<^*_!I1=]$W[&C?OJ@$&/M\F4GE;P?*@75*KC'"?H.:Z-U;HU0AY4*?/8
-M>K(B"=G-&K;!HW&#@?LWSW^&AX-N-)3,P&16?[11`'^B)[6D0&M??UVX_#2I
-MK;JFEY2#3S,DH)8;<_VOSS\1[VF<7[BA!`JRUDN;I?1O8ZXOK<_KJ'?5W3\G
-M.G=<KC<[G.'%(BJ,)S5TK_B!#@XS/HO9ZO+>XJTRT:DSV"F^]XQ-!T[-65E(
-M%OV#</F3``N*SGUFOI8S89AR4$W@*$&89:QD9YW1.!":4FXZ`1>6B]38E!_T
-M[][;B&\7VG,9()1_78^$U:"JX"6K]K6K#&J@O5I-4P?GV%F:!,;CD&F+^I*[
-M?U+\C)H]6FIKBSW"Z0/ZH*30$`UE!"IK`6-'ZY?%0/NGGA3I`IUET[1"?*L0
-M'5[?=5MQ1,`!`F9-L^NSRM[V>;(/3[@/?`][C<_/2U>PSF1HWU\"Q1RD.AJ7
-M'?V>.!PN1E]%3SO1H""7K[9E0'6;QN7C*E.FZ+I,X]I&-ND28<E8S+*($M#]
-M8B`P?#%9>M7(^//T"ZF\-+V#*H]#2,D+D$\@G=3=D"*&O.0_1ZM],YS.Q@^I
-M>GU#)EM2@RY5/EYAW6I-!!GK(QE)\JEPQA)#)$6SA:<>B:=/L;&EO$I]$"G%
-M>KMQ3/Y$`Q('#C)7IU7^4>TI(AE:>@U.U8X<AMN40*#XN*/94=19T`)'U65Z
-MX[&`53_FE[ITC.M\:KBN*YD%UG8#FYK7>3`U$MW5!(-IOT*K=^[%/.B45/UV
-MD8G]4>N-[+F&FF82)^JF$ZBO:UU&2!]W#QC&_>F^R<;%S5)N-2VN*>&V0\'R
-M]:1$`$6-Z.PQ0@/&\;>RK#'X=-,545(]M[V'E:.IDN<LS435%K9"DJIS=Z90
-MAP0&>C^YG/^O85GX+$MQ+E7JQZ%RJZF`75RX/'6^\;T0`!%S]%C.FZ^75]SC
-MXEYF,*DVJC,KC-D7R!TTY/SSED5C$Y+-,X-/&7[5'$DXSZID6&Q06J_U[]&W
-M%C#Z74[B+JA5N4&Q6:\O*Q6:+TY;[TX`*?QO+T;JRJ>!L<W0CZ\3@;24:X)B
-M@7?8\;M[RQ;"``/0FFGJW=^E"\SU;_0_GG0^@RNG9%$X^,VX?E#Y_S7.-X<:
-MP`4W,?JTY"1JU7]\*WI-5I%%$8U1++*7.3Z?3@G_W>]<`!<95:[2_\ZC#>1U
-MG6#4F]Y+.@3#<7>86G%3(//9]+>@`(3<8QL_\;QA=;)-RE\AY)5=Y!IY52EG
-MA\*'55#J1`!=I85^WU.;G_Q=VG79*G89%1_>3]SN\J4%AS(L;-R$O8LJX"L,
-MSW>P]@B+3H6M7TEE<4Z/^EC!&BL?5(U6K.:@LD#)SWGSPF?;_'\I#Z0(G3!R
-M]@O=M$IY*I_V4?VE*CN>JOZSG3"DD4"(EMR5/R_/VQ*DHD`3;"]JXZCK4_-2
-M[S%W>S;K2VM)*DK9PQ5"4#AY/!:_Q:J_^.4/_X&`@0ED9\LU>$KH.-X!LWV\
-M3H-&`W.UH??+DTZE;Q85P,:8#'!!.[.CZ5[E;')_BCSXHY9)($$Y_=8G[_#3
-MR*"BEF;+!77`[!<4"\YAP.9V9EZE$H@`&A*"E47\5_E\M,H^GVR[NT9Y>M[U
-ME9:M?@UTE,%A,=+WM2;S!$Y/K=W&5+1:PU+16%-<'\HL7V;A9/]'JTUKS=)R
-M%%..\LU+2LL@//Y$1/[(\UQOT_>`],HX\:-;SV4;T5))ZUJ"FC&!J(X"S,"'
-M`CIKC4ZZNLJ61`AA3*:)M<Q?EJN3L(7G9IAL?$B>CRL'/LQM"?B]C'K6DF&%
-M<,8&,8P,8B*#W<ZA]FKCI>ED'1U<HN,^+LY@!SK[K'VRG4HI5()7!B!C$#`Q
-MC$XC(!9)U/%J<)!0%4$8"Q4`0#J&.+M_F<)@^<#+I$/$Y:@\`G()BJ.2!.H`
-M`'VI?M9$1*,$A(`D#.]B@'US/`37>^222>@K]314[E`^,R`?L^WD%L]1H*,B
-MM.AP#P5)X!%)J3;E3X*9,V^S8K"A24(*Y\:12`!>4=,</<?.+X(3A;=VHJ;)
-M0SJJ!?C(U+@HKCHW^['TS`C$30XY6BDKYU7;/>H004(7YH?=8`\A:&J8L9\J
-M2)!?['A8I7(2(RD=4:NL(4B!#FK\V%.+#=G>)6/7M62!')**!';IM9SW141@
-M7YZ[.XF5<N$LUY!_,NA]J'/L?3T(Q$]9DJK2<V=SH)9D>%@_(#>_`@>;HX$W
-MJ%^S_TX15?":L&/-'I>"?5GA2YT0VWV06#"L=<G0#$^*NLK/!R\1(!"*"ENC
-MAL('HM\BV_\@(JY']9@.:]UK#XU*\J?(0'AI4F'BFB:V6HIP->^)R;F//*`K
-MKKT@\%''`1=\QHF0@[W^2H`\[R'?RQWH0]2>('^+TV?16WU,0<64_'0RC:4$
-MW+(Q`,&0!M(*PM^4_8>Z7T!`7--Z$UDMY9`0@*K2+48SF#RMR>^UO.!1'E?P
-M*:^[C-WI-4WB$@ML0$P\<E2S"`BKK@J']>6FQZ$7ZP.AM<1:BJ\%(1RPSKR]
-MV.H>!<UD7Y'?C3YE].+&8/%L,KM%3Z0)X!2XM#8UJL-7/9S(&KNG*CK!(K0+
-M)N>"$U#*]%8(@GI^U*86WRM#VN$N9_?U!T$RTHA\1K>;M"`5)K2BQQ'I4FL<
-M\'R#S4CQ>-1S^+Y2GJ$PAXZ?RY(76<?3A!%U@::0UR`_$%JU'E.!X$WT^\(>
-MJN1N1'O"Y(H9$M,6V':I)0X3=FS\$)\P]5B$J.N<WU6(^!YXC$^3D<2*7Z^K
-MI'1FS46C`H+B]!4%U&]\]X^=$7E(Y\?LQV6/D3O'-K?L;8!SBRB'^.ZYT![+
-MM>2_.#VYU>TER!M&9E2BKC.\80#LZO71W]\UGP!L'5L-\^B^^JYW`!:/WT6D
-M.D[:L<;PHF"=(6&XC<7]&@1('A[1P'9TUNOU`%I%YOM'P/EHLKS++Q>$B2X-
-MRO\:_73A5A4=*L\71_*4PSBZ,O:%FF6V/$WXS&A`K:'X\4^,)_IUK[`;9&W^
-M@U$8>!6[5;@OGLZ+Y1%^]\O:T:*03K8>#>]4X6!HYL>I6B[<Z0C.ET!A<_!.
-M#7IC[;L!@'TSD_/`6:TK'!!:H,]XH7YT!F[&Y39PA6O<BE'T(N$'7'&E_LR0
-M_GN_U;/(3SK@//;NE2?%1C$;,Q$J?)T]4ZQ3@&"F\P\)NQ`]SSC,U\@)[H0.
-M:P*D3^EX9&!>_I=7XB*&21)'EG27&A/%_YZ1^2"$/H5(Y9U59^QKW1R:=20X
-MG-[/RQ.O$`3T$^G"OXC2)48<'^S$N7NVQW*'7E]`]>ICVZC0BU^XZ//49DIQ
-MIYMK/9@\69A':D^H*E^EI)EVUGQ[A'A3Q,?Y;@-_IU*#B'L"5_/;X&M0A#)G
-M2'",.?/->/YMS]2=?1_$^`(NOZ$KQ">,*[.<;HDEC&V[7T2B9'4'++,W4:L4
-MAP2+/:!QT<G3TS(>`S?1NZ7V:XS+$'19_9P#[WQ3N[=_:=`E"W#^M2$>,U<]
-M<X*W+1F4F149FA.#"+]:8V)ZRT`[:S911TDN$\N3G#0E9L46DDC@J--FD3@Q
-MHSK6^G!;/55DILO#T-^F2/\&R1>CCDJ=`R3&9M^P=)%8(_^@5,0,YLS1D+VX
-MB"0NBQG*CR40N(B>@&CHB;7EHX(/7IP&WYKXA4"$7M<@2SQWSINR$O67IRIG
-MI:FI`0QZ<;SY;K`2K+\CB=U:E;7L`HCZ=8X,:Q'[#3WIS?@+?ZO3GTS*N?DM
-MH1=PQ/Y:7,AQW1H1-S729BK:J#01*W`K:R50HJA`WF(DH(L.F";C=WYDT9#T
-M\V%:D(KI6OAU+&*U!T@JE2VN.BCH]S+L`7PO^HW+2%-;.%]@HG9\.`,$VKQX
-M%WAH)LR2+J+7XM5?GG"R@F=U\OAQR&[<MI3G2TFKYY8ADV"O>-;[!]Q*_VEW
-MG%6O0&4QVV!U'G`3_\GVR/B'1._WPDEQ8)B;NB76D[B3501)7:A8FMO4:#P0
-M5UK?R/#HZ[12_W)A7<C]3>3Q\T0KX/S0\NA9P*#^V93Z%H]A!'*>W)BX]:T$
-M)"RPZ3IOQXHT%9];7_;@[!<2[?VA1K3>9-^,-&Y(-,KS^OGG+5GPYVU3^=^/
-MC:Y(<@O:Q?)6'*):@C<>B86)XP+++-0%GX?UY3OA`;TJBLL.1`];EA:W@H1+
-MFWQ5ZU`:XQ%.6NQLI4$I:K4M#-L2$#E5Z;6I0+N:(;UTWG4H$"@G>EW>CAFS
-M_^,1KGV^^Y%EU#_RT6R!;+P)O%.C-5:D0>N8CNIV?H&92%D0E=99K'J0@OH?
-MI\:R:MSFH(?'=7OF^4T=-3NOPN<)?F+9SG9I^Z_N6P7&Y<K+J;V>#GKT[S$*
-M#A++4^(1<1P\C&0UAU,I>8Q9<NA9\6H(=#7+_6=_FJ+('D?L>PG1B]C\VRX_
-M9JP&[6SYP*.V0ZX%@]2T.SX`E+EY077*6$]FQM##@K7Y^@X/DM@>A:G;@^^,
-M?<WA#Z^U!G=.A>+U1N8;'*;2@U<"6C=+]Z1-?OE1`";C],MJ!.!?`>K&8CP=
-M7GAO3D05MC\5$_,&%";AV0@3.M4`-U.S7;E%@7WT?:25M]7NAS"Y^2QISKK_
-MH+]&5V?3?+NMH0W/UW6_SN"]37@2Z08YSF']P'%`B'?]G#$6DR<\UQ8#SI%P
-MXI&$\FD%Y<1U;;N9SV@=UE@D=&B#P3DR6`U+3FMA"(LR?%(B3Q#D'3YP#&^?
-M0'2B5'(?Q&$T1*+CY?^/I)C&`1J3>1P+1+W_D)\(3`#J)](_A+&"!^?SU]8?
-M"28QC`P0W\UV'Z[,B!_B].@W[(>E_JH(=DP6$^DB0XQ`&!&'[J;T?/OQ!I>C
-M@FZA5`_UVSAXP`X;H>/?"S,,UT2QS.WVRQ9XI>\PSRYGIL(SI+`G`KU8F,M/
-MAT)KJZ;9$_UNX)_DCN4$`:?,W=.O<Q700`"8GIAI]?7XLFEWZL8'/Z9G9CZ:
-M23'XR-:QR!FQ$#_;:,4\?(QS)D@M'"U/RYH#UD>+I5?V`,N3W)I<C\@WTCBQ
-MIT"W1"HP_IA/DA^E=!2\IUPJ7Z:U%G]#[2GC$VQO+GV(!"OK!C.D6+UGL;?0
-M?HQ^&[UFAR%YZCI".4-)VC0Z(!B_0X;8TF3H>W?CA/[UBW`DB,/4PA/2SF6H
-M6+7S$O]DOWX,NM7A:Z`\>&))AA*C==8X=24JS!`LTMRD[S.*EF8-D,-DD@:*
-M`=3P-VF4A^B/=RWXI2,+*T63O'5DW0&>5S"4AHZ*0BCHZ==]0M4G;VF*!^\6
-MPI&[M#O6T.[KGZ-`2N*L9%E,#CYF@>0P%A[&%'8/X#;[+,FRA\YXGS!E"^M=
-MLO"?+QDY1*I8:/L"]I[_"ZTI('ALL45>)ON$!V>$]5WBOO08KW`%3&$IT7'/
-M"N:MRTF!W]L>04)N8(4:*$5SZ_2-3?X_/QI&'&"72U5M^'KU[)`^T7ZB":X]
-M6&@+NJ5@NS;>@E'L?9ECR1IJ?\_++8Q@A%-8W^,W.!"2V5WK3.[4['`*427>
-MHF4\&/2?"P@9<34N<%"UBGHT/VD[8<2Y%W!T+\^3@]G0\M(&IG-':+K?%:-#
-M_6F.RN0LWE@_<NA9H8_#.`L>X,-IJRT>..QNN(95O?[+9B2F$^L)*^2V_`<_
-M'.S&Z9DGXB5FAUZ1J.!Z*),WD5X,^@?69UOAHIO?"HH$7W'1HAOS/35PGO.J
-M@_5A7?%5="PEW1M":87D>>X!)63T;%S@K,'#117&"AR\MWQWE,E(R&YN`-"I
-MEP=CNPU'S0=8^1F!;.^4F2%A]Y;F>&=+&A]5S>_/W=`;W\N4@916C.7A[DD<
-M$9E"P=Q701:G,KG:^Y<G&&P@HT],YD_.G**^3M)/MI*^P24>K2JZ8*]D/U-M
-M':[)`D!W-"7GH-T(C06CQWKDTP'MPAZ7]^BV>C-`V9P1C2;&V&3[`M)CW>#U
-M8#VWB[FYG])/?#='&KTI#9V.`^5/I<,=?M4UFV%50VUL:CPLU=$5%MF"O*+3
-M&`^'DSEED>LQ')8!5V1O/]DDM]R6%TTL#55QA;M@<L;;Z\SB?JGO7WA="U![
-M-@>`QEHE=5L1X^ML58"4]C-\(S0W0H7C0:G\!\T`P>P(+95&J83<WW/5QQTX
-M0K'P^,Y%-OPIQG39G3!XU_4I=":-F-"8LQ5>^.,;[;ZWB2XME-9^4*HZ5_*"
-M%I7$49.OATU(>X][?>OL+>]]T.`O1/H?M[KCGT%GQ.#R,[>!G/M)RHX&'UY&
-M$"[,Y*#!=N7AM-$8"*:^[CJ:A.,RO4H`'GR7[.=,(7[$;U#'8;4TV<Y6O;=?
-M`AV/FP\YA*!TTL=G?5?'?)$_$)GLR2=S_,^)\WKM]UROQ4ET/*^1[+\+?&^B
-M8U)]$#A-#%(QBD4GN,:("A/;/>^9:P*_>LI)"I.8%>;`/J`\#T$0ES"FT.H7
-MJ\Y)^XP[;^-2UJ1M2?3!JS#";.9]Z*L=37:E=EP`@^GCB!Y]2,-8@RZV3_+P
-MW4.$)`2=)\).D`F*<4MV'YX0^3H7X&U)A[->$]HTP-*9]_R\]'&L]'V3+K9K
-M\&0S2PV+A%J@W2,.Y2=276YF0T-:`YK7?H:/Z,5;GC<&?O#]V8;?M/#6EVF(
-M#5TE8'F_LIMC[/-WTW)?<44-@K/E3)BDH/L??^?.7X0ORS*;M<I=FA>3B'9_
-MZK</$8I^VE-;-Q:M0&G9('^ZB@*UG)>VX<)<AEP0L#=DH*KJ8LNQ_1#E1^_N
-M>B3!K#%#=`DYC]#6<-7/1!IV.&D,[=KE7/`H^7W_O@:BGFPUNJ[)\@X4MTZT
-M&X:T%J2&/X3C%C3_OSFO5+GAA&<#?.`RP_@8E/9%(O6%H8N'0S&L:;A&]P:%
-M4+V_2D^;+C1WILVC6MMP^0<(.4)[Q!B_KW7`JS<B_SNYT3QI#1?-OS'^C)8>
-M_>-=3-"A0FA6Z=^/]FTX;_.]LX&S$,P7=@+BSC(<<N!S>_I-1I[HT.TLMW3O
-MAB$T+!`&6.8@-2LBY,*1//D4\"$7`L:W"Y-@S<_K?*=2]2.]G(DX%#J=4VN7
-M2?(Z7.!02!QS$K]NWLB)LWG*/-S`OW4TH.8/[HX.XL:].'N5>X69DX*=A$%,
-M<RM>S9V%#T_\P&K5G@=;.BHI[+EO)B;5O_^YWFK^B.+-13E0N+)2T^VDA7+A
-MW'"`VRG35`ILVT7YS%;Z`!Z4!_[NZZ2&<K1E^%#&;^"-RL>&"><L^Q6PL;##
-M=]WK`[TF1(7F_VIS#TX=?BH?$N,\\.HFZ9+-6ZSNAMZO0FN/`R/-T5BB%IE/
-M[&YAS77"9E^-C0I4XI82^"9/M*FNW["[M9V<4[3Z*9`V^<9V-X^=;Y62B\^Z
-M="[_2E];U"UF.AJ5ZR-ND9FG[]49QR[S('%VV8#C(9*"G16#@H)<I'2.O;[5
-M`J@2=G=/RH77WTV<R]-)EY;;72=1NZB/R0.F<0IMJ3CG=])GAN$+S:1N:,(0
-MO4.C"UFI/\%R`R\V>8UT<[`?OU&5+.S],$3<<@YG>$>7'@CCPKCB7)GX%3YJ
-M>2S\^[M[J>`E3KT`[@A_+^-==!5@C(*$/GL):0B"2",A%16+`%6+%@`"H*R!
-M]F@65A#^T)]]]%8+?WZYE0`PJ(PC?MK/)=LL>"NMJ'4S6"+/#H5)^N:8KG$#
-M+3FFWEX'6&1PV?K`";@&G`-89]<*,JCW/&=WZ&AQ1*),G3DZOV!YSOS.G:@)
-MQEI+Z(LGU^EGW/@3L)0M_.)#07V_K/%Q#O;'PIV$32-Y]])>_;=JVR+"8.MB
-MHNE6*WQX'O@,O^@PP5_O>7E^++)E./$O8#?GFAZI>V:-K1V8/8G1NB&P]+;D
-M-J_/VLR'5.#U>JE"JEY446",M2K:(Y8_S'_:+&8A\`G_=60]0WHGW357C&:_
-MXQUA#0D=>U'%V-K[V[(>PB%IC_@P>W@:^\[GESH8WT3N.Q\B_&RV;D4;_1F!
-M^N!C<=^@>H\R*OK4M6V#0AS]>FT[4.687DP=GYYF(CXEE-#3'K_#,C[SG:7$
-M77R'I/!R=B8-9+%T78&8P=/(FAP5U^*874P2@^B#FY?X1SC&4O"-4N61PQ3*
-M1?'8X&F4EN<P]ZOP<EO_KLNJ9Q3P1""(RG1=\,Y=0UQ!7\+.?`VIS8<3>.PF
-M+U2A3L"0WJ3J//YDC\4K68=*=@8M?F2J-E4'A<?!^VOE$QM4X9BBT2^]Y7J=
-MI:4MA(/V+&A_LUTUPJ+]0FX\]+&S>@VNX:2JFR$6O&]?]/\2.G=M$ST6JF\[
-M1"K1\[XW?4!YZB(9TJPU,'/2/\%XGK'4KT&K836D=73KH"6[?O;(X"8%N%'2
-M1>KFL_CI&<#GMQHY30BCNV2+UHG<T<U"FGD,E8+.S="H@X\@V7Z4N,QJP\Q'
-MXY+3(AS.Q,.\<X("6]])PG67X$_89@<_O&CF8]X%&YYJ1X*`[@\_G1VA@F&N
-MY@>3Q71@?$4@.!Q!XCN(JGQR6MQX@/F`DS&(QD0G&0%`18P%(*=QD(?J$/;D
-M/YZ#GX[E%W#`D;EMZ-"GC@8@LVFFK[D$<X;3(@.9Z(%9=<CG5*\@$7OQB1M^
-M&Z.MI(+*$RA3TH<S.Z("SB/\ASQIZ/0L.:2^N9_<Z%Q[PEQDB)\B%@\#^MOA
-M[Q,$'$%YQ8CBP(.<S#\`L1[VQ>X)@>LBNE+2W'FAOUVI,2O'MF76=X6S4][D
-ME#K,,EU[!EY&![\='&Q:CE^]S7B];DHF7N\$I[,S87TCA_['[:?^_/X0F>6]
-M6[RV?"38Z5_0V%N\02$L??^&N]1<+7ZNWAJ\PHGJ7N"6!IF?V["%X5F$E_"T
-MDVB;9?NV#Q9F)DE-?4H]`;!T`D88=7\,.1>CSK_+:LWHHY/*T6!?ZQK"CTZ$
-M7,*=R$+B/E-/#/E-MR<!P**-*+7R#I;6E:N]BC:(4IN7WM97P3UU]=H^:/7$
-MRFDK:6>`G1KITJNSC'49,W3O26+.`ZTC(!OLURMI$KIP'J8)VI09<-K1PM%Y
-M9Z%KC"Q@0(Z)^VH=)IB'%28NV@*SWQ\-EF_5\9\PT:S?[^,SM4.3S#AR-)G]
-M#7X.MJ[V]SM[;ZYXDBTC'),',6>1+.+W%H-+S.'PN6Q-VDDS)4WM#48(/4AT
-MX]Y^D*:HW0R+F6R96QTC(\P,^ZQ:UT2'"II,\(_7U%5L;$B/;HBVXVY@#$6W
-M!@8P,-28XP)4/O/_E7,1,C*%&0\]@?O$@?DO3ZZ(?%ESHB/=;E'#01P^8?:#
-MP>V:3T_SB3Q@'B,<0#PH3*`!^=Z`5="Q=9[$08RKR88_T/[A]ZNIV@R5ZBT.
-MQUY$%=SF9][:FJ&W.^0)^U0DRG[!;#!A%BD$YU0J9I1^%EMW(*<GKIV8PO\+
-M.XPBH,EE#`PT^-X^9?PM;PRF6M]@9WASK;XBUC>GQ.VF_2FAE8-+_F[X6N^$
-M>U+.=P-_^0<Q/T&L$?\H\YQ$O[\VLL\FD,[B/*9EX[.JKDP<K\-<<]SV/Q3A
-MQL#*.!F9/IAUV084<75A@Z/&Z6N3U8]>K:]M<%;\I'<T">,I'SVRB&H+/NX&
-MY3<G41C[M'(4F[L&*'K?XCZ+$TXV<ZHSSI;\:#GJ[D</OZ6!=<%)J)-M#B[%
-MJ;,[-5]B-IA395CNX"Q50T('$1Y5K9.*\-X195HB37L",!1HFNH65>8=6B]^
-M^G?]C<YOW.8T["]*E%97LD;."`N!5S;$;1U`6[!RG;IK&G3&H;5Q_>,NU^F.
-MTTUH+=F9*#'G1..67TN#F;)Q8<?9M#C?K<?GD;,J2[!/(F6V9/21U[&+HT;D
-M+0QCV_4/13/[OV'.]%^J]&[T6B4>X^_J'W?WS#69<H,@;Z`/M&A204@?:H"P
-M]$5'P'S4FR^=D!G1-[)MNF,#(<".`>C#DG%3NS=SW:-Y;94J3;!]!8,.QADJ
-M.@Q5D(9:W?0'8-D.B*JL#I==_^"*/:DQ];FN,FYO&>='RYE):\)PT;EO[>0@
-MD=^Z"1%=W&_D-'4Q_I^>L1]K"N=MLD[QF^7/^&[6DHSRA[AOV8E7=@.,'#!"
-MDJJMULZVQX=5-&^F^YS>^]WXY/?Q,""<&_JWTQNH5J@WF@<?>C[FQY4?A1_`
-M_4IMFN(1:D:,.GTGU$)3IO6HF8]4'Y1FMLQ%A'28([*+E!M9>(;Q'B.B9>A?
-M'!W:L5U*@G5?.N\UT4-G&UJ[&B;T7]YNOTL6(_7/S$Y*K[&I<564J2^T^;TR
-MG>OU=*364D10/3"S-)K7JIRZSE4EG9&AFGI%(F2O3KP.]K>G62P=^[W?KQI6
-M/"`W@!X0!!0`=%$NE%8?5,4DH`?,0(@8$,W6`?A('BO3/%R=G!G#QKE[LZ+K
-M3Y1USS[F8:,K9A8-]EA;UNVV]]F(.A4[AGW&A.4#G[%_V>>":UB%T7`@=T]A
-M(I:GC!@1(*H6Q+7DOL90\29`HY`A].GJ?58A<'9SJ1H_C!24(]>3L+/7@WSV
-M!W8_+.^X*:>JZ981ZACHJT7JX\L2JZ(W:<6!0)^;K@TF[K3=FU%ZE.Q"^/YL
-MW=01W'S*@I"CC4,K&;G_!M';W1]QPWMKG5(^\&3XY$(S?Q.]1BZ+7N(#KR!>
-M+XS$_[YS3V<&*`P3D:(<F&%0"H9(,/54>45+1PKJSGI^,E4N@2`P/ZY."=I5
-MR@HW-L#:^3["SRD#3.!Y.4@CO4:93H#F-K^7Y9\9^HKV?E?./"^)\Z?._`G,
-M>X'UTZJI^XJ3YJBGS:J0H4144160_B(2=#YU?$YEI\)A8.5NGU/SCYWA^LJ#
-M!Z,#A;R$T-[7V!O((RHW2M^GKDYU8'6IQ_'OW&>@USA6X31S>1C==W-.^'K/
-MOF:'"4_F\&(B7MM<X/N;_;TT7(KN3LF56_X,JIG1ZL_Q5+VS!SF:!<QQY;>I
-M-?01",'5/Y3FDI[N9)][S@)(>EB"2S.M\V^N-ZZXKJ(I.GUT`:WG&AN7S#)B
-MCXGE^^%[!*'7:WN$?\LH_Q+I=.@1!0LHR#IT]^BQ,3+9NGU9$''G2;8GQO^-
-MKNU3#O*1,_/TT>G\%[*#A817^$RXOL8\,D6CR\Q-;KV952D7)6GTP0N7#'+4
-MQZH$[E\N3\;+F04'R.D>C]542>YGU2';JE0]\'TMJL,DL'V"!H6IC%*HYETD
-MET]G3==\MA<>;D/`1)7YGDUV2]<GS+G=F_\(!JY_.4[;3:_PZS#+/LTKFORE
-MUV\H+O$WF\Y,E'6=IRZ=-WAF"$K#$UY_Q3U;UE,Q@K=>HJ%M]V^?OPO-6E-4
-M!.U2:%Y+8$2;T/'?.Z6/FO?:^AONRI&<]J)T5I#ZP<09]5QMS**@^.,('PSE
-MK8V#4W)GWH@M[&'G1F!QH00UU&N@^L="L=^(2#B(&"9J)GH;U!!U;0Q9*E%K
-MWZ^E??%\0/XQ,G`2%M(6,6K*3.M**8Y2$6'N65?U33-BZ^0\*\U8Z@J*RJK&
-MI3>,I+Q]2=-9;+4X.9*>G,8%+&,#&,8%3BG...-2U4(R#112Q11*82'P?^_I
-M4?,E>L^E\P^P-1+AM=35*`W5/%"G9>.>GQ<V+G@-L-:_.#:+KAS.R'F/5^A?
-M-NO;_C^$9$YZ>@R6F2.=`CZXYCZ3X!,+99G%;M&2'?XMC_<3;:^(RO6W:3H\
-MRCIZ0T?O.:243'^KO&[@*3WG?(U',;O^^W;YU,^Y%V=NU!'TYFQPV_JU!XQH
-M?&MVQHS89&VV*S^M7-]N<)0?,56;0^GG2$2JF,><L9Q>HE:-20HCHMY7H;5F
-M"=#LL''.$[^!^;G1.B:G)M_KXTLB!J//U^O;4*-53%060*`44!8>DD)\^CXZ
-M1D8SQDGQY!$)9#[WG>T?(GLT8!K-8*FZ-JH1IU\./AK]B5)@I%V\!3Y1@,Z,
-MH&3_2':#WC8VT?=A:)5@(E9QC@=UX(<KUVMO`5%[>PVLV-3^_XPJ*3P$'K/I
-M[`L*0_AC%**F(Y3'=9<PPA2*<4M:"T>O=@P<#P<2B\+USU.;1_XF%S"JNZF9
-M,PK/'?TIV3FV=C*']')LVF7M73R8&#<VAJ=WI]AW;L2^$JN>A<4C1'(TK,(\
-MP8927*$.764Q@)([*%E)4$#Y@)%A-P#V>*K"(Q8$+1063M^R>5[)RU^L,&B&
-M$;I4+'8RYTM,\G9+VY.5//>!?*D?2(:)K/7L\PB9,@$2H&?I4BD3TF>:KFVG
-MPD&OOTH/1`0,^K6'82:#X5@;1*./%3N+T%1)[/YKJ#5MK*V)?W94]P@%Q41C
-MX3E8^OK;=V6QA9&?1H+-?5NKTGLYV'8A6MJ;6I+8W1/9VVYZAO2HRDG(N,C(
-M,ZI$(3QZ./`C/5]6"J'J@Q6>K9J`,@JL6U2F>K5`!0C%D_QLGK?D(>LR?0BS
-MRK:I_6JO6]>)Z_N!FGR#T/>!D:%N#V.J"'HZKG2FQK.*W7>5UKNEI%==OOPA
-M-4AI%-]_G\)5&=$153PP/NM3FC=J*VC,?X(.IO%WP-"[;]LSA._&=?#N=WD<
-M-2VT[>31V)+@DQH1FZQ94YN85,3L9J7(YE2KV%[.J]817+ZAOCU@!:W@)FB5
-M(#"=&/09NL3=W4)#T@IGI`P9#TC_XDH].I41BJM-$D*BC``QC:HQ1;U%_8Q'
-M`T9&1FS-;8F*)`[#U=<U=L\,+4=P9:<M>'5::S9IK@K&!TM#YW'^)\7C]LC[
-M5?1$Z134@8E.L=SV-J<;D4BI6^3\N,N,:^M)SLF)JN$U(MW_)_:\3T(\G/YN
-M=)7PYF'\_-Q.?X4K+;K2+F5?T<R*MD8UNQP[C.5E`W?'X_@(1]AZWN/4/4GI
-M^GZD3U(Q1@>H2>HP4*'[5I`U,A\XXB(`XP,0#;81A^-(+CR?,;F.X!XQAQ?B
-M@<-+'W,C'"0M_TUW5<AQ[3QS;F/5!64K5;!U8ICX,K]$?!*4>$H8J?/^2UQF
-MKQ:#(,"B8FV")YF1X2F'PKJ2R2?#5\I\H"I9(9('K8%>D@EG^8:M5L$;BI_&
-M2F3.LB.F<Q*2_G%Y-3O\8-LQ9U0C%=%@7U?:59H2]HM+&$K91]B%=G1F!"^N
-M;NVJV`Z/RR2],\:)--S9]%";(SCE)D"9!QCVE$\?Q6"IXP"R'BP4BTE*TU$(
-M'/!)!"%OY1'9I]PGPNT'7)2_[52LF[UQ:Z'U+[XI7I+C:Q'<'X@BD*QO;5TX
-M[KKHA9QF9C+A!.;].4;"A2(&V[*#3HW$Q5V*^&O7?,GJ,NG"(6H)=6KY*\G\
-M[,^96=]OB>C@,^9YUG\.[\C0;-K._$J6X;<_!JB_RN!!D5'V\IVCA4LZMZ,'
-M7^%V-3,?#]I;\M5=B/W%4?:'HM\AO^&H<RJ&%'AIB,*/#*=33%)+$/"R4*J`
-M%$41/"P84!Y!C/PA;@TDWNFRST#$1%W^V`T1?-=.1&J*HG1'Z[E<5\9/&U;D
-M?:--ZDW:+X><S&^E*D3&>^FY&1.PLG&RLG@=O^*X1VTI+=SJ79*BY<1Y$%:V
-MI)!MHEL%"EM`+8*G.(OBB(D@G-*6PE)>DG('CYHD^CU!\:2F-26*-TX6K:=6
-MFJM'YX/&J^(ZGE2P,.JBB]1ZK=3/JRO<>Q7V4JDZ1*/J*R?8%1Q2YOJ)?._N
-M8U0#TUY[0^@"\?5X]'1SW3H\W2&@HTA6TI&D55*^8$%&1V.OJ.T+9AVE5%$A
-MVB"(=%*%5\2J(!T5%&)"X7HQ0Y_''P^X^M]]=YWB=EZ7_*I^&]3]KMO0\7Y8
-M1C-:-CRWBVZ-M;'^N1\I9`D)Z5VF/>K+FK)Z>GIR)/2'=143B=<\F'.SF>=@
-M[!=]Y,>F=6Z=;"C;U>J(G5"JZMJ5@5(H*=5"D58B+`:H@'W+`*!0ZR2F@ZO6
-ME)P#BXF#>*0&DN@H'CSF$OS\MU#K24)E(._\7N6I4L#Y:9\/>-[4`>/6I_WQ
-M`T2+H-^Q,"9I%=2L[/++2>H)OW35%CN!+?9*5!Q5A`I'9;4G:LZ#YB>E*JB=
-M4>_]B_;'Q.9WO!X`YVJ>U@=UM0=[?G=G=3F45W6I*@HTU(6)$13RJJ+`#NRP
-M>3W3NIW:FK46]F?5]WO]\W-Y-J>VKAFO</,=Q2^U05I^-VTO/I\\7GKA0KD2
-M[[=!\44XB)3$F3N`E?<TE%73E1%OI;V7E94R9-:P:#FP'-CS);D[0[Z]>2A>
-M*9Y`ST"9X%U0J!,])$04`+AC)N!SY-TW>UW3V?C_3YMW.^P^IC\SV7LOVCT_
-MI^^RAUX?U+DH?^18E?LYI0KPB>1"[R+:I"77J:BGI"BA*"JBUZGE-@J)YQ6Y
-M<V>6%550T'WZ_VO:_$GM>U.OV4['SNQV47X1VE#M':@IV@4&JD.U`$8BI`.G
-M!JJ8':4/A?W>W+=OMGP_AOPY\VWS3.XF7RO$IN/;\^$UU67U[;Z($:Y=<$GV
-M!;Z!R@F'):4H)R<AYJ>9.N6XS<H:(-4Y8\IRZUG+(\K1*%(I)RA!1=UI6$)J
-M)H!C-(#2TQP:@SAHRHA]SV,V\9%1-,N]\G''F9;+]K)+M?.?-N$E$HH4W(RI
-M-_E;_GXF-E9>9E?J#J]7C]835WK-C=*<;=M$"V+8MVE6V0"Q`BIU4(P1'JU)
-M&`+(*'59"=5I$B.!!P$2/J8.-(Y#Q,KJ-6'*VYG\)<7_S?>&KVC_5M'@M_2*
-M3HR[!,1**?^.5E#)W\HX.'?X^-E8V1ZBM5[2I(K`+6G5`E05154,540HI15-
-M"K(<DG&DY&6$58B%))$4.2BM1`'FDQ0Q@U`YJ$S,P]=$';HYNFN'F.KE]12\
-M&SF4NUZ.UY2-8[.?/IB4@3$L8N#AX>+A>7VV(,7,W?C\;%ZGMMZT0;%=A6U9
-M",3>LIB65(LH"0ED5>95$G4DC!%BH]-IA`ZD+5TZAU)TP$WD0;XIP_>+B_7:
-M?[R\;88GAZ^[X&'+]*;35!*7]D'`RHEI"<@2DI"F)F)%&%OZG0XN(]'Q:U3C
-M05.,./A18#QG#:H%@AQL*6ZH4DDN8),@'(JJAR`V.0<>N_/='/YVT;/Q_,]'
-M['S\7V,CT_;^Z/CU_E[.)D+)O_M<`X^'BX^%CN8L8C3K2DY_/J;&PE:HHK*A
-M-4.0Y/=R<DB,$$@<D@*LBJ$G)'CJ@XXB:#S20/GS`CX=;3DG4PFFP,TURJGB
-M2;,PFA=1TV?RJ$LJ2S@EI:.A>AA7V%AXN'W^QP=BORZ=4#*JTF5!595%.JP%
-M*J,1&%2$%5$0$8<;"`BS9R03N4A9[W1GJE>7/;4=+EY>C1Q_F_4]4'3]=ZJ_
-M][?7]/`\![Z.X/L7TB1P,7#[+%P,'&]L(Z5_AB&*%4!BB9$H(YZ0Z$@VHH9)
-M8@(P%"'/(LZ!MHJ;4$40)2);X:@BTQV8WQ[;WVEQCZ7_[W:S/1_!\S@7RQ2<
-M+RL,X%Z#$(P^OS%#:9K)FM4J7':U2K`S0%`-\`6=^W((BA)F%8AD4,VZZI1@
-M][3;_G=N_J>;K?$[KY_Y!ON!U\"3?,K\SF<OF#N0]MJ(GE44`]""#)@`"0(!
-M`9+`H)8(<54B`H*23;(IM9!VL5#JE<X0VS;58C0&U%Z6C=]!?:R/?Y,GW-_Z
-ML7]]R/9WW:1ZP$\0"!*%M4(&J9Q<[3*":I!$N9)I0!05C(35+(4A8"D^`!X.
-MVF%X/=P+G6^MGCH#[`ON3[(>_%_VWI/-6Y<@N8,]TVS:M;5-I%FV6K;:4.IA
-M+2"BFUA*$4"%05S4`PS&J<L^\^I^^WO:/^SSOK<GT#)\G([Y.O_OXX?9<VCQ
-M+9NK7.4QU3/1F,Q+&:"D,PI,:I18I`S`?\$`WFZ)%`F??U*A0+G$9U=8&T2+
-MMTB\-K0\7Q?Z?-4?9_?#(LRC?-[_WDCI&_Z/Z=05.1D1QD$8EX6T5KS1DUPJ
-M"AHD8)<PC("FNU^LU`#80D$H@C`4K0500042,$T<@LDK&:,49&UW7(V\*DG_
-MOZU[!Y&[JYEK;#'9L*BY9@F#54&)!C`*"8I2(BA"I.)Q:JEAP^*IQ3K?![T^
-MSYFW\^[WI7>=/\$[AR_"[GK9>4]++!-F5$SBT@L84A-4(L@=+907(I%(!0JR
-M8"U@3`=O&8T=[ZI/K.9S"R.3KY$=E19'&8<AMPC/&;RMI\BN`]`H?$`($A"0
-M!`C$DW8`GBLJ*$FD4TF]H"::44:6TM8WAR709^@_!`/%N_;\L_V]\3*'Q?8[
-M%E,"31I$",9T<FB%C4&,@J<"AODX-^UBU5`M(^WM8"B19`4;,HM52$-\-^*+
-M#?XS@Y>+ZXOO\CZ^[Q[[[S7</-$&[6T%P6+DN2B5))<RA8@JBP`J4JB80`1*
-M*2S,5AJE0J@I4LU!J:GR=3R/,[=?!#&=;6=VN9IVK;;>VIILT--!2PVTLQ3>
-MTH&JKF51"P&C(4HJHL"4"P,PN9!(4(%ND6Z6AHC2H,#+VIY8N_A<>]Q!!!!7
-M=O%X/$(ZC""7@\22""`Q(8B083!D"YA<RZJBK))0S')=!C`\'E!KL118#!KP
-M/P;T'S;'RO6<KQ@L\,D9/$??*/5GZST!8AI:"32JJ;NDTJF%2%FEAI4)[H`H
-M2D50A4&DJ0TTTI4RTG*:-5.7;P=GGGAZ'0\._I`5_G?O:I^NIW[&-8I41%''
-M&P1K$J1A49&D1$9!01HC"U4`J19(L%`F@=@E9]9CK9]W0\SZ7-'P=LSPQ,+]
-MR%Y=?*OL(HH7DI"ZTJ7D&G58)J@1OH"DBTR$2]I8R%3HM6M89T<+;AT<1QI.
-M#\-]S7VOGY<_#N=SR,<L<C"V.5D*`RJB406+`Q"`QD#(BPO!<H9556RZ%L[9
-MY#S^KN)S>;W9TO,7'CX\;;XZ;:4%6<"FQA:I:BZHEI%L@,@BJPEI(6<46YBP
-M,C(2X0B02`^!4=?7.=XOB8/CVAJD69S51N5ES)R%)H$B:A54DB:R,#W24))1
-M(+`6$+XJDOOJ@JZ<7#.'L=+BCT/SLYG-+,N6<+2I"H*&D%,H2&D!I,D@R:20
-M:0TGA:2HNT:M^4,M\\0X_J4_I'+S<<UF[?+MW`HF`*LP@WM!*A%D,$E1!U5(
-M%@4OJC510#;`P,,#`PO4^[/NON_.X--$JC'?QPQ=_$Q#`NYE&.(E*DJ$4AJD
-M`7%1$4A$14)"!H-`-"<),-D:ON:70Y0Z]ES5U>):UIX:#32S&P8TF-4+`H!C
-M%A-PA%C&$F,4`-%H!6J;>K9()<U3SM?M/*Y''^!FS>%GUMAR\00Z%5770"X!
-MAQ:"5(."M#&`5)!%933(3"*0R"S`6834<)=V^03DXO/Z_N.E;I>+W?-_.^GU
-MN7:V/1S%/::K;MVU5+-#0-"14$DT)"Y%`I(B*!*)F$3&,$MFNK,=RTT8F.'Y
-MOZ>[Y&[J=:MG=Y]<EPP&.`IIB\EPJ&`8`JPP"&$@BB$-D,D!V54V;*>CNINU
-MT2GKG)QZ5Y!P=W7P:[A"J)<-U1ET%)=(.MH"Z$1%@L4N0JJ*0)0L-?,JM=MP
-MZ?-[7F^KZ&TWO+^CW)N%;B;@;A>0O4%$OH(R$4(J(2%X7LI6!0-53#FFYO37
-M#=A#>OZ.F)!2@+,\)#TSP^KZOU?PO"Y>W;'"C:EQ5UUU*6LU1C9,6E86)<$6
-M`B$+$BDC50A:62A)0"PL%LYS3O<'[$^X-\]S[WEX:;D2X=;5774%UQ<>YUAJ
-M9="*%@A<R+!8TI44@%0N"XX2_@X#G]#H>=^DZO>]$X>IGD7X7%%Y>)A9J2T6
-M(S`%BF#5JD+0BR3K),6$0PHJ3#&F:C'4>WL468SI(Y6H*/'^D/D=;EZ/`?`+
-MBYUEUI05+J5H2JHGBA="YK54+$AKDFXP*15LR!K)J8(ZVI4W-9X]PC<:;?&/
-M&[_-.`W$=SQMQYNYN`%122\@I%(Q"DDO)+P%O!;S+?>I?&47$.Y_/U>5SL;H
-M[>QV!IN6K0<`;"..$(0V2'$#"`,4`*+)&"0F:,SF>:J3(S<<GJY=`]:CO=KP
-M88X[Y?O\W7+PO`OD6&IH8%$D;ZE,(5"Z^:)K"+Z;-$V+7J3AM"Z+UT=7V8M!
-MMJ]IBT&(Z(T=55=*D%;*:!+JI0HD=E`@%,D*'-(&P:3*T,F:@V.PHYAL\1<S
-MMG:[6&/L=K?->%_2\?L<(CG1E61D0RD%4)D!@PE#!2$RBC$F39DA0C8):#8C
-MI.UWAO5WZ?)6?JUZ;P@*(#;("$4S/#MVJ0VZM*XCG:<ZUCG0M535`$3G#"(!
-MJ5(4BC&`I),X+G#/GJL]7&<N9G,SJFKMV];G=/DU<AR>>=S3/=ANY9N5.<LD
-MS@,0,R"P!7513)#.3)*%24U12&29S'%RQQZICEI&D.D8VONJB]$4+V\*!9?+
-MVDID80$&`%X"JN5@+EJ(WM2FU+EI+ZX/-S\GCKPF_P[+K5?+]=]Q+H7(R+!0
-MNJB%$DN2E0"H(RX2BJ0N+<VXSZ'--AY_F\?>\B_ENY5OUXISC!3`P#!D2:V2
-M)`%!0)A+\+6E6%TOTTZ6/'Y-W:UZ]9PFO6E5KLFNU5KAK09#<*HAK)&U!"E8
-M$HULFNHZ5:Q;;P\//,0ZV?.-SA\.KR\OEZR\O"\BD4A>0%A#+?0$J(R@X30A
-M?+JO;I5ZY>2O&R\RW.ZNW7X'3Z.[T<-3:T'-UTLVI%EFU1+60$%D"P`I(*$+
-M`L#$B(8W75,2TT5KZ>CQ_<]7]_M:?A[NZ;KIAI]##%,8H8R8H#`P:%9"I`%`
-MF!,$:11FE%,X*6!M36N9M.I5&MK]CF[I;:(SVVQ4N`Z1!K![&+#'&JJ+%,0F
-M-%0"B$60F,,$@EY2'G721I9^<&'6V-2QJ<BFTTV4;G*TK0#0#2JJ3D`:28@`
-MN+",4%Q,<>*PRIEUIEGW,SR>7=./C]KC\GXO=TV.]O;W#I-'0TT!8:0!$-2$
-MT`BR%D*%9`TAO52PHF@Z4*G";71RS[O!YWF^7X.[AQN>6O#&JF)E4J9"Y`H*
-M90%DR0$"(PBQ2$R@JF654U,C(Q-_B.+KGG?9W\^["\O+]RZXM11+")<187$E
-MTD52`JB)2`:U4+E)<W76JUMSHNLV]GD^R]+V#N'9[/1OV5D:,,#1P%QJ..#B
-MT%*S"3!F1)B0TTR-T0*@2YACP*`K(4+`*"&1I@8F&+AR1T;AH[_9Z)CCC@7I
-M@U2%Y??1=:U4M]5"M=J+T$EFF4$B--)`N"^^J64%W0O+ZX@U^\2ZO)W_T?Y7
-MZ?ARRY[,0QYZ89.39"@,C%@9)J24044)(B26DR81YE0JQ4)*`1')J4Z=.LD0
-MX>H&IJ*:QG-S1;:MN%NX.H<;EO>V%LZ9@X.H&`8(H"3!@4HA*A!9(BL@;`V)
-M0PHF>RHRJ0QV9F9P9Y>GCZ'M>O[\ZAL,^'+/I!F9NQ2IL1,G9-@TRH68U4A4
-M)-B`I"DDH14-2G43"5-@6:ARK8NQQKJMFML6WN;ZGI]YACC;#E9CE%QF#-J9
-MJB9FF2H126`BBA#0%YE-4(:):4III-XX]M5EEP\/#V.+L8X#EV'/C,9?C,84
-M06&),$)BV0E226:0E`B"(8%YK-#P<[K_;];7[\ZW4N+]?0PW^#62:X10-<`U
-MH0C'@J`RZU0H>"F[?PX.KE\?DN]7Q?%.<\WG!G+U<X5!8Y:E*HD.U@C%B(%T
-M`6!VJRJ@2I29;T)I/-NO.7S/Z_PL3#'2TA;\IENRW1RH(:3&2-5`RD(+`,H<
-M%IE.)E&6'@\<\"[+TKVMI\4:WSX:`+@;;#5!L@$-(X0X$4JXI%@@68&<`4`F
-M2J&6<7-Y]9W=S'G]3UL/5]3L=7I]7CK+/+-,S$S%F8&9)2%*@9P)F@+",SJI
-M3%*S+`Y6JCB-AQ<5CBWMAO=SSNSMKV--WR>EPCNTFS9G,A,Z!$%AF18"R8D!
-M29I)0P4"5)FTE1S,[8!EPYT]7I[N9U^_Z_Q.,PPW^;KH+J"YD3514H%`1@7`
-M`7!*"4)@ES):T(NUY=[+AXD-#5V2RZ.)9V@W9<%,N!P$DN($SJB4D9(9JP*0
-M"G)HS0',U=38\=<;QUNG%IV.8E'G'P/)R,CK]ASRZJ')LV&Q8O)30FZ(F,Q1
-M"8U1*DF*$N80H`Q8(8.+14-4/@,5I^PUGV>AUM/GO#<N059X=<>?T"0P$A]5
-M4/A\J91BLF-KKBI)2%TD%"69(Q1990L'@'JBU8#`%D51N:D"[,/"T;FR"0[F
-MNO5GWP\CKS[`I8%+%*54J2U5)4@I+2`H!9"4,DJ$$$A'T?*JJ$$O"L\^I"O6
-MK7;>?R=#0IM-3M!C;3;85'*DRDR2,'&BDR`LR#"+D@08*-@EL$HVK;;=(%MN
-MH;@J4]/G=AZ1Z,6*2O"?/@@?$`@)@(+I-$2!HJL!DB@32J*9`=VJH0""2(!`
-M'`Z:1U'1L[@L[EZQ8#3E758VZ"Z0)9#K;:+E"LJ9/$8(B@@"P`Q!568Y5EPY
-M]2JZQUR^5U-7EULU_1@I5"\Z^\]2?IA8`#`PI`00@@"!8$S!(+`AB"B@VAFF
-M1S<OE[.SABG8>Y^/Y7K?)_'>_^/YAM\$ZFWJ<[>TW3>4-#0TFZB!HEFY@H:F
-M25("@9$6-5"%$6+F8A;-AMX^"VY)Z'@Z^&')@7S<N+BE-;<%$6704@LEP`H`
-MED``3`2I4HIEB92FTC;5;C4AJOVO8-V1H6FS:HVHWMBZY,'$J8S%3'!#&$%!
-M8!02(A#`FZP9-VV=!L>R6-W/?X/>>>F9\7Y/#E>I>:]S74I2B(+KJ@J'-044
-M!)!1UU)$!$E@F.61+$PWC-6:*6:T%TK?0X0BFZXH3:\42$AL*J-L(R$8IE!8
-M9)$A)E!5#(14,K9-0!6FT:;BKZRYPXHZ':2HA66=,S)H6:)+%FB:$EE00+]$
-M199!"*!>WMD)8BHEI>RR%%Y5Q0Z[VKZY</!7P/1ZQH;W-UG-W'<M4JU%3<YM
-M24"@I*(H&DR]ERC)*`N:90IE2\JFLM7TAN3<XZX>+WO-W]SJUT2Y-XK>WF88
-MBXWU6*AB19JD%4(L#$@*$%),06"E),9BA`:55:#0:,R::T8GFQ2Y5GB:L73L
-M#5WG8#`JP&`/H]`H@A8AO$1AHA$`4-&18I*8!2.FB)H;NFE+R3N=7QVNR:^W
-M=[SE+KQB:[]<N6U%(704%$9+B`H`*2%PLEQ+HI<W6&Z[I'3>+DR\/.ZMQTL>
-MM.GSL,2BE,3%'&"F.-$HBK"H$IQ2+(A>56"G:.:=3J75VSP^AT?:Z'=E^QL'
-M:EY,I"]D2`982"A,I+TO&FJV*4CC,3$HA29TR<A%$="WS?!YFJ+M)RG4I5*A
-MN+`L*R9Y,\*-DSL!,X!G`4#.R%(!4D6"DAG!""^H"PSY$$-5:`5EJ'3',LZS
-M\R<3-F"I-G$3D*32HG"19:"R8)3"4$O0!2$0%P<+6*+SK&+N7\?4Y:\<N[/0
-MW^?BXTC,"]O+RUK!8O9?+D(DBD+T@,$1&7BR_7=3?:F:<Z[LGK?`W.RW::85
-M5]QS;]=Y?2@D4U,LA4BQ2]D9(L(H0O)>I<W%RW56EV\;W5WIO<N*XN-8A?IC
-MEE4RI,29$R100RJB4$%DR)%@3)I@%`8D%RFB+D:;'+,X'M=?B+^\=''Q\LC*
-M98Y.5449!D`929,BD0BPDR(L69&5-&*%9(F+JMT*4<WF'CGC[^/;]3SN@89Y
-ME9Y99.1DY+4'(6553)@ADU')A9%)&$%)3$0B$PRB"R\,>9S[N+CWSXIQG6P=
-M_FFX[A>+#*7C%)>12*$.TA`O24DE-]`!1<MDH*:`4RR"+-2:5EC8XV?=L3IM
-M@9T^(&(4`X'74SM1LSU*;`E$'.B+",`SHK8PU,)J21"6=E9F'*G$8>#M^9AT
-M,7J3DN-SZ/<IK<+DK74*H8,-;%I*A)K0!DW)K6*&^;YQ<?=\A]'SC@[G%Z7#
-MP\!A,:K'@PRF09,0RQ2!DR,BK!JH))BADPEJJ2)%AE-4RK@H.#8=<3K[N'E\
-MIARXNN:TUM0K6'C6W+4U#<35KHL0L54DH((D=94E,A1N;E&L2UD$\836]/H]
-M.O;5<>;W?)YVYH[=RZXNNNJC75!8N99DHFID@P!9K2DE,DN5"'T95424V:&M
-MQUE"7&Z7[R<\X6GI&KGRTM]+?>E]!EOI`J%Z4R4$&(2]IDO0!@IPLF6Z\H;Y
-M5;XRX;E-:QN<S1F]1P\.)=5367-Q=-;+I4/;W4*"+)3()(7,`HH@F!)4PB8A
-M)*+,28ZZ1-A%ZYK[>LZ-ZO>/:#H]K>&A:>&HXF,N1#"J"A!"&#"(04@8(181
-M@IC!Q*$Q:HJ*Y$QG52P[^X[KZ[K>%SCNLO0R[.YM&YN#MUMFG<Z=51IFG33%
-M-,1@O$8&FD*A%.8@4D)8EP9.6.556JJ.7Q_'/(5>B>'EZ/O?2N-P/&`W!W*+
-M-F%@1FXC`4DW`(2@1!*,H!2F9*S)69F+11@#)<NTA$O7W=K=W]+9CCTK%.E2
-M!P[=II-NE3:%,IA4-M5"@!5`W4D#:$VRJ*-LU30VB[IO:=_M\5>8=KW_AQR,
-MNEF=+$$5Q,[49!D*&5-$0,JI$*0B2"DR3)`I`LP*++CE54AR9X9=_#+I7G-N
-M-=QO:7E^$P55,,`O0,"+"F,`4`PA>TX4TH85-142J+@WK]ZY>3'O\>^7&-U]
-M:[V7M\+S6WR7T4!4(VJ`D"]*2$6`42^K[00#!-0$$!Y]II&@<[.<&O:Y78V]
-M3;VZNAHK#3?@GP,4SP2)])M5V^)8J3;50VLEI*011B2+)#:!?GHR>I`84*OV
-M8!(,`VQEX..D66N-DY"!550F04(2_QE"*`B9!0$HBE``H!*,&0!C"ADX]"@M
-M`T]&K'M<;H]#O^LZ^NX5RC6MHPK&XR:FBM^6@I+$LR4PF_)+DLTPBD!#>8F]
-M2'2WZ"C5;;:C:[=_>>KMV\_9V\)W.%<CI=OFM;?&UJ.*8F9F2%(8A8!0EAD0
-MA3(4P"T4QM+511:UJK?8%C9VBW$X>?MLI3>G:WWB@L+P+T)<DJ$EZ$62#`C(
-M4(4)$HRAF'+$\9)T[M2O9#UE^9+,O*ERGU("I,4J#'5=80DH`JZUH24H:[AI
-M"MZ^7UF782N-.G;^CS.R[G<W\[CBYG7!"->A%0IB(11$")2(E("DD1&)`J!0
-MD%@I!A(I-$T(.BI4JM:M%$1`9U#.4KG74T:5Z[JS[3S@<<KMJ6RV&P&R@(0E
-M`V9&$,4D$6&08PR1U6MEED^)CX_2\D\/>Z_!>>-STX-\RWI+Q;FZZ%$+U2F%
-M((0WRMS(BE``0DH',R@PC+54E2J$)-!)<N98M[7-X?,U(J$+8;1M'-"B)E49
-MFD&$,T!DD,PQQ)B6K'/-M@5D,AK3V=?<V+D4VX;F:!FW&PX7`K;@)0H&R'$`
-M4@ID*@188I!9%A&"BPSCD4)FM8UECPG6Q[E>,>+]%XIXHI]$GBE12>*K[MLR
-M%I`6187)."/!H+I4X)VAP:L7&U2;6UXWC:YQ,O"RY8T&4RS*D6"!E$BR#"3+
-M50@I<D!@RSEE,Q&2&,#"1F29R9<Y<P9D%"3P8N5N<L<9<_B9W"I<.K!/!WAG
-M'1IM$-YIFTLQA2;44&&UD4!(:K"%-,D8H:M)JYI3KSEY^,EU9[8[//MWW+[@
-M[BM0U,!YF(<E,;6E86B6$2R@64(IBD2!9`*0*9(AC&FQ;)J8#M8<BMK:,QSN
-M9U-LSMWG=3:T^%3IBC0B`H"$$Q1"*("?$K`5$0`,2@@))6HM*,B0-#)`89T3
-MGM,T37'1OEUZY1HZ1O\_K^/Z/0[&PZ7;Z_7QOQK%HHLN(P8&+%((DB213%,6
-M0J119CBB7G7+K\*Z_D^-O^-S=_R.#GF_?=<")<$-9":T*2YDEB*%R6>?KN.?
-M-2Y.G7&4;@MC8.YMQ;SP;#0SF\Y6*Q(U<5U#(601(`1TQ@.PM5B%H04ADR"+
-MF9UL.`,]W.4[N64]/L<G8X3H=5O,+IN7S"U48.`',A,*J*`H5(2["B0I()*:
-M*I)?8M5HF&Y=O[]_0[7*8]_WWH;^7F=/I]WNG4-.-WM-M5O&BF@:52E231(D
-M(:,`0T=&4,:XPVZ;:K;Q[Q]+\K+"ZY->YK=^KKI<I+K4%$N5*2F34PE20N8+
-M(4DA4/&JI=%+HW%UWMCEEW0ZV&_?U,.OSZPWEQ,)BB8J&$NQLR8FJB%2&*0$
-MA.8E("R248!B87CKZ5U'7^F_%;_!UN+LF^[_4NER#KNH:@7,*2B%P(LB`:VX
-MU5(!4B-I=:K-I=5M_@U&#O\"99+U?>_+^1CP8Y9<\Y_0KH&>6<;59S)#("8"
-M2"PC)C12E!9LS(O,,7*Q1CJR\?5XECE/-ZW;?D_3^C\CK[,"_(9@8!B<`&+3
-M6-%$E$#)`%("$AL@HI;28@+2F;.G::V!=<Y7/[)9W1XNCI:6?I0716GA56>;
-M=NU".FVD*)M8,)M':P%D0AHP-K"&HI8-IQPY!/>>\V;MU]W2.QAQ=C*M6)B]
-M3*Q13E,IE,D8Y3)$#(5(A#U$*9#)(4PF9FQ,L^/CW1>/>XGX?E?#Y.QMWMW(
-M,2\W'"84)=J:E0*0@D"]A`9+V4E[8E%TZ=,OM:NG=TZ\&'@]7X./AY;CD,#@
-MX1R.#A-F<V354H,W86=5I0:F#(8,!2(0P22D@5)A#8A@,<:K#4-/#8X%;>/2
-MY5X<(TC2FDB&E(:0R1(32JIOT."Q$$@#+)`6$#,((&0F8;]3EK#(J2-K*&IJ
-M1V+%N>)Z3VE$Q,;Z*AB8:K2P"ZG%C)@RD)00\1).*A*8"0XIQ1&<7,</':.T
-MX/!*X*+GG"G!4.$(G"`X210&`H'!`G!5D@@\*A89*IE$C*17(9*YCQ#=7=L<
-M39Z7!@#]9T-DAPMHT6%L@DELD&*9`9"4R%`!3`RF"1'51D7&<&Q21Q3/JFKR
-M!2W^3O<KLKFLYP[K[^:_F@D0*_`4>(@"/HTT$S1"*#)!5`DR$<U$9558+.)T
-M;+5=S9TRM.'S^SA<<)S;]<UW5"I<C+@+E2#)+F4PYC"R1`+AA"Y"5*JM;"TN
-MMJH"H3,I1RA'.$VZUTM/ITML7@]7>B=6*"!8$5T/AXH^$4&8)4)0R`A"RL@+
-M)$+-%BBQRLPCQ.GR#LNS36.Q[,I#LX'9ID2Y)<2X$C)#J^HJ060B'NJ]V/,H
-M]WJ>).A-^W:L6:.YP[YXW"G7/6/E=QQN%V%V]5V!&:=)E,*126%*%"06$!AH
-M`@@$T`04`S(-7:N0,DJJI"DE0)G:2$K.D3.HO..`Y_#54:&W3;PSV?+F9Q_!
-MZ.S8XF&-54<#&S)>XHD;4LU)C).8(',M4@6D@*$,2]QMCJM2K4J50I5H&==F
-M8.SR^&.*+<T3K=&=.()G!23.$X`SL9B%0*0IDH(+@@LBD`87+5&"%L%5&$AA
-M(BHT7&`N-JW1HT0]L#;X>X-T;.]`^X`XVJN`"TRSJ"2HQ8`P@4D,V`,SJJ4S
-M,TAIR<+]R5Q=_IU[MC;J`SILVX+E05$L@55>#Q>12Z20"(+C$5083M@8I321
-M""R`8P,4%2'@\ZCP=%5\*2JV:U45&'>B&UOP4ALU+3;SH===4IL%FRFA(9HQ
-M(,`S=B+)(U1144T^+A7;<SG;CVW/#1-W092\ONF4IOBWWU1*5+Z(-]4Q082B
-M,&0EZ12D@4%YEJE%K+H+BJNJ\ULYVW=9TXQQLIE'+6E64%N87#'*:64!B"$R
-MC!2)(94520$G"K+<4@QA.8*0#II"V-V[K7+(IZ5*S:6JQAHN1F,N//!0JO`/
-M.XTT+)C$!(8L6!J,A4@8,F(P(D@!Z01&KP4O&BL5G0IMYUNM3?="F9-(G$3B
-M")LA1.1+(DP8%"2B1$)@0F`@JQ9540!2=-5)S&(HG`DD5M&W4UN5V?0[7J:>
-MIG5FJU9'*JN!75`*8$K"HF`&$9&!@,!D#!BDD0,$*2I@C!,*!W-I-K:.1M<_
-MG]3ZOH=#R_G6U>9JV+%FUK3=TJVB6AHM6&Q0MH#I30T`D-%C)&$F9(`DS+5"
-MT%FF[-D#-,P[F[CMZKF/5[V<Z7*<Q]$7JM;0T0P+#(54A@00J85A$,(2?"`2
-M0JJ@AJI0':,@A#.P`9,\SF=3H7,,Y<G*.AR^WTWOB]]\WM>#Q]-NS9L%S53'
-M/.IF&:JQ"9F=%(1)"D$5@I20J&21<C&NOCQ>QYGF^1Z'+T<>3Q#9-K9V3"L"
-M[`PF$K`P)A304A4'"HDF$84R5"3BJP1(4DH,&,.0[-%K<C9G.%T.7L\G:RX?
-M+>F[,]F69LLF=BJ-5DS-@FQ8[`-C55<X74L9"F(@L%`9),$)&8*:>"NJA!O/
-M2:M6Y>T\[C=&S>@&V^\\CR../.AQCK"C`CJ.JBI)2L+(5))L&$B138D3";.+
-MB,>WQX^9X3X!Y?GW\>'':K\,!;@OOHHDJ0O!581(`7@7L1KBM>8/"8S%,.'+
-MO=KWVO6.O2YN+II=S+%I>:I"\JJ"7+?02@)2L",N1O:3EN2[<[R06]>Y<N+T
-M:/F]CW&GW$C2U+4,_3@GI/2?`!!`R?("2$02"`"4C("YHR*0B29C9ST(;5R9
-MS6<_2Y&U8O]\>3\7S_P7PSWATY#/Z!S0CTX&8&<S7.I4*B,S&,!06&9(8LF:
-M+%D4@AF2RXYTB9'EO4S]Z>ET_(/\7ZM\KBM?=><)A,,)?A!00#`5(,D,$@L(
-M,.;@%P\*486PQKQ,)VN$R\JU9>I^2.=Z7I'@\SJE=;AZVUVAM-KMK;M#;`7:
-MK!DAM0+,E20VH(R4A)4=M33=1-._Y&CZ'8]#R_+._\3O'_XX&?UO4._U>AJV
-MQM'$P#!F,"HU1#%%EU4*`P@;$:=VT"R%F4R2@MU*HHMT^H.\9]GE\WH6MW?E
-M][_=Y2]_IZ9-O;Y5)B8!@LP1F1,"82<5%@(28,IDDH!<##;97*+9"DH6SW9I
-M\3N[V;G=KKR_,'9<ZN.C8%B'9@APA82$T%(*&@!#"$6%2Q5((0I,XD%((0#.
-M&J!GJBC/GV<YR]#T3H]'F<WJ;/8;[NS$]3:V&+CMVQ'4A@#,64`8L&$Q10,;
-MJ*2!<$**J$R,"X,64PK%&8B\&QT/HCWRG9[&.9*F;-UDN<IFB;.$DD4BTJ&:
-MC2$E"C0`<8U22)".-#>T04D9*JJ,!<.''?UCP_7__33SZ>>='P,*Q,<&L7'(
-MFG-.DXNG24HNF$TQ@I!`,D50(R/0HS*9GF9U113Y7:U'G^9CKQKP&YUM9T->
-M_OX8$PDP$88#!@8(B09)@TE,`$F$5,)@?5XE7[_F=8ZIT_*[?]#T1^J]9^5^
-MY_;9.OY'(MB6QM&TLV"S!`4+(P+)$(&(K%)(DLP;"F,<:;3U+FW.F9'5S[NM
-MM[>OR?&]C7(V;6Z_&:A@B8&!,,*)1*9(P`P8I`0Z4(#JE22`Z07%(;#;D[>_
-M[\@8>W]UN9_)O[M_GKH:#S[[N]54G)RZ&C$'0J)-$:J@-"'NXR,"&C)NH0K1
-M$L#5:!RTM:;W*\9Z_X3S_?_&X^D_H#_]]X.[W7;ECM[8RZK#:&-@<6D+K29(
-MP$DLL&#(3%6]DER0NC8,+6JCUAS7'F:F&'"\JO7UZSNCU7E;$CTUYF`+I%H6
-MK5JE006@2,D481$!$1(5%$2`4"203/&1`FLB@03.9S.KGG<'.'J>MU^GL&@\
-MGR?-/TO>_ZSTO79,EV&[C3CP-P*2V(#J82*(!A&`(@1'41VVK+]0&()`5UUZ
-M0MM\ZNMK7?]?S>\Y:^A(_\UV'88?5Z>I_<[?K;NC>->G7FCGQ=&OG#7D->)!
-M8"P2&O$"Y"@)H9`0-=IH=;7US7-T];N[G/JC=W.]-WG^OKO:O=]8\\^5]`?-
-M'9<^GTL#<%3E;E6J*LF15IBI54;B52"2!6((#E:HARQDUI1(<B#$",.1Y4C:
-MP<BM32'P!]?7T\V0C,RC/Z%?X!C'CW%&9>)B</-%GFIM-0R(?2HQ1M+(S@P9
-MUX49PN_PEF,E*,83H(Q(*`@0X`A2@`4",1@#7$\T(HAJ;\W0T?CC&[<2>[NW
-M>$4:)#5QLY8_09!4CE3&JH3Z%@@&4112:F0J0#38+IL/*20W["9(9$49J'.-
-MR877489,.\W!PKL19QJG?>NF6'V;%_(77&%J\_@\!(A%AB%]%@#Q0@`O!8$)
-M4$D2$68I"DD+!<6;&$N]5F6QFV^^G/WCZSH_N_YS^`KU:<<>C,C+(R0J@Q<H
-MH%23*U41!)#YB%,O9F*V&'B,+$S.9DF:EM6K(Z[I<5RK6NO#L^Z(@^YP)#GA
-MRQP7DI/KGB!A@#Z/@$/(I#Y1D+08*,":BBL@)%P9$+3&TL-!0\\^BS>WNB[S
-M5AJB'FZW<Q1*O.]9X7M.^_/\#Q@K.N)&7@48Z(M`1TG!#@A.!C!80IG`+XC4
-M!A)P,%E]68`@5!&220A$<1$<;&1B**?/^7B_,4KI\>=L<3>V;5K`>3FV4TS%
-M0U'`%Q60NQ2H)"ENHA0068HI%D0,:9IH,QE50LZDU'FAS+J]+G9CK>3N_TM5
-M?M[/MOEE]U]>I*PY''##$!5C),%(L8)"8VJ4K`]VP-2$M,2D,)CR/)R&.2][
-MTSZWY?6ZPK?3D8'2\SY.$O`P9/#]T>[PL/[WN?2\VU101T4C&5$!1)-$44,2
-ME8!K(JK&!-#(L%)$#0IGI-`:#0'&%H45ASK2VC9'L/]/@>)[!E63Y7C45P),
-MB1@8'!ZG<4]41ZQ%&BD471**FN:&:[<-$N60-=@BLC"&BYNN((J"B"@(H%*(
-M"I%H`B@:)UMS!Y/K_4>X^#Q_J[PZ'%,B1SXL#2[KTF^JX*8WJ=6/'-'42E1C
-M2.DP)192(-)@`-(JJ('4*4B"4$G[])+(>RA"C^GR'B:J.24UR!Y2\L[GP?E9
-M>^^+6K>U>]W\'`^E_*]*]=\'!@PL#Z5\;YS!BBX`H8B0O,H,AH`%"@*`22!3
-M4`VBBL,65("ASHR`S:QV\Y!AB'>'#NR'0TFS,C(P>G/Y+UGSD"#WYY!H?0K'
-MWU)/HZ-ILXF(\L^L\L30&=G!F<AQ!Q<"'$%69#A&"P$`%)N"*2(2DJJD8$8T
-M"J\0TJ8-&GWO>_/]#2[R+^IDCH^>;^_ONG@7WY;/#[S=\&C7?Z^N:_3.QV#8
-M38V$UZ1-@V&(!L,&,61(0X&0668?4VH@,)PBSR5X>`^DXN+_E]-Y0]WD*XQ.
-MAXD<&[C=>=DIACVSJ4:MW.UI$ILH9L34VVT,X`XS;E.'$X$VF;6X\#C&(Z3`
-M.G(V2I#I)#4%:JZ;8A2,$8!TT48K%@DDY:"@C(ZU22I.6*Z30&XQH$,YFYN@
-M3-L#0R::E\'B=LWY:3`0&^>:-)^-'<>4C*"`^DK+=N59/6@RIK-P^ZX/,.'?
-M.'A!X;(<)#Q8(HR!PHH,Z:$-U+,(5#B1%XH<*;G?MW^(XZ^O/F_8^#F<IRK[
-M'R?!^Z^M^W^U]OXWB'F279/JOCX'M\LY>%B7^%N6<'&GC8VAMC;6P+6U:/.&
-M;7KD3DKH'2(@A'I5%I*A`Z3%1D(PZ21*Z0$B8`Q-C=:G$WO<&3<VC+MVI:Q$
-MI0/97TQFH3+X?HGHS>?^.KFYUN/'D"7AX%]A8F#1CC7$R>D-E*24A+*1BDA0
-MTE(`)%)2%*(*)D4I@5(3C*B(J8W7$+@XTH=A]MO6\3[#VO$B("'S6/TM\L=Z
-MJWY__<V':7><1V5\M8A#1<7&):3]D--^Z:F)!S#2$>:65-,ZQ_EJHTI#,"95
-MRFG?OANL^[$"/Y^Z#TT8BFZ!GW4NC&)1+I)(%PH42V20@(")<()%LHB*%-S>
-M[_?K]+CZ(*]3J<C2I\CD_D[Y`;G.71\#L2?DYXUTO&PTOD.?NT>01(\^RYCV
-M+F81;Y'4GKKG5_<J<GY=L8J^I=45='R-&^QLO,UN$)[S>3DS[X7]AS7Z.PM#
-M`V.CL#9E$%X[/0()V;&TB;3`NHI4W@F]O)`8*K(P"]%`ZK%`8Q`C$!`F"L<#
-MJDX_KX"!*!,Z\=_O7V\LQ]I[8[7AQM1NV5.=X5,ZIG9,2N9#)]]?-_%_?.AA
-M\L!FB4A,A78\D0JWU/\CIZXL(RI2&C92NS75;=I48KYE31%3(6WJ.+I\?(KV
-M\;8KQQO^36PFW1EU+[=S!2Z_N+'LAK`;\BJ6;V_;CF\1#1WO"%%'BOA/#/"L
-M\(3PKYJ`4RD5!^HHDEC`H8&!G<QP,#$2`Q$<5.8"'!Q(YCNG$^:)B<M<4^TH
-MFK1YISY>OSF>V\UR?/;I;/88"BI'T@R%U[XFV<[ZOR8&A45^=I,9=[U13ED^
-MCH$16\CO2FIF,_BY-<?P,ZI1<WZ=";3Q9XOJ8X4^S#P>Z'=^F79U\/7UP:VJ
-M-4PZJ!O'0(+22HC&,@?Y&=QD^F2E&"3R5?:2@,>.#X'T:5X`J3/QG\_K&2Z"
-MP=.)MRD=6;BT?3S9^VP9B6Z/V3$@,BXG_[&)*/+2^6A0C)$DF^EO>]<@V&XP
-ME=*[>=E&:Y0Y%I75I".K=NC<K=,X7U!,44X\KIV/6U*&OEUG)/8J,+RI40[#
-M>"%%.6T*'!T,Q$Z#++QLM$-)LM"M9&(0<*")V93T6AIE/?,J!"Y`B(G6ZV\G
-M?<GK9#O/W']#V/IN&SC6QDG^VANW*@GM"1\1JVONWKH$[4W29'=M@ZMC')^!
-MQD"-+M*1R_D%3[/9]/4UE/RW;]J=Y&+WG87?RLZ)T:;:25EX'O7I46)KYK63
-M!#'%AY,T3\B:,1-?6UAH=P[<-BD.XL`\E$8B))UO$HLRE21D!/1@&PV^,0!X
-M@]F,`]BG!2JN^OH?3J=Y/;(7(KS/^G@1V$^L4U9);FKHY?BU7:S"2?4[]7V-
-M([(>8M+$ZK?/E^=9&9"9[:-TW0H5G\+T)*2T(G+V*&7QN'!J4-#(\+I9?PX/
-MG5,O$P]G$'G^\R>Y:Q'8(<L3\W$KPS,@596,-NR_:M=7J_3^?MZGG'Y/C."'
-MFOGR<3YXC'SN80%1BBBP8$`.XH0$A!K*H1"`%&X.$Q=S43JP:@:VO0_`9[G]
-M'S?.D^2](-><AX^YR>]P'[YQX<)^#^!F?1=S6U7ET29M.JLL?17H):RW-RP7
-M_AN\)44@?F#EOV,/_TSZ=1I[%I8?-H9%CFZDNA,I4Z3>'XLK"MXTVG#/P)`G
-M5:53;VZNUM;+03O57>QU!WULR,JI1)WT1%(R`=_O411&?(0"I<@DW(=T_-WC
-M[3C&/E[W\WT.+^@;SWGL_C>9O?HGY9Y'ZJ$XJAW;56,H[&'_#)PTQ^.U=@?H
-M/^0-?-Z2#Y)JM*1>]4`I(J7)G>M19'#1.>H]6)6IO@>+S,,X`E8V7@S9N,+K
-MD7)Q\M<OUL=6Q3FR<^*M8NYKET^FSMO;&V!(VTWKMZC;JD@;PI(;R#$%(D`Z
-MK-X0$CQXX\:!/,!QC0.`K01P-@*H1%45!H/CO07N[[&V<^F>;^LR_U_J[TMW
-MS4B61\"8MVZFYZ-+^GFGT]FP]JDXQ@L4^B5ORJXW,JND]#0=ZOMT05L:<1_Z
-M>7E;.I.-JEJ=5H^=F2A_!5L_C/97>5_BBCQO:?$SK&%=UZ=V.5I8]X/U,>9[
-M@=[E`7]N?QM[0(/3]*>F=?4P]-<^*H>F`*>V?3449!A`]-D6;PDP;E&#)]6*
-M7/H5^L]R>#OZGP,G@GA#[7ZP^C[KY6J?)R0OIZXEZP=/3A6L=P[6#ASE(>3)
-MW#:JJO/Q_T.I$*HIZ@Q$.JBM5WW`^/HP][\J^A4H+'4TZ?JTFDQO`7[A1.;#
-MH^$Q-O<HDXI]-GY<[Z5EE\Z,EJ26-"O/'[QP7*EW'$.5J-:`\O#KY;/K0)Y"
-MJN?QV]7Q]2KJZ>/"V+>I;O5$]Y\H<'/%&CDGS_A'M+Y<U7A;V:]8]ELT';]D
-M]BU%0/88Q49`]<8B1^^JDC`GL>O0#7P;6&*"W,H-1)&1.?SY\`XQ@>-:R8.-
-MO#"5((70P-%W<L#U!>'SO5F)C^[Y$8'@Z1>-.>AO..PW"'G>OT1O7YH7HJ;0
-MZISSV0Q<#L9PD!]6^9B(/R,.YUUI(I;?Z>JY:V(9)!?1)LUEK.@9M@HA_-_E
-MHP4K)2^.=S*`K9Y;3IZ+;0F.["`\GA8A@9':L-^,'BX%K-P<QRIS9_\TYX<M
-MCVIR(\KH7+W$1!1L]W#_N/A]WP:^EBQ:\9^SW5NT#N8E?-[/'U^2T/J"V>$#
-M-TNVZ8!Z8%8$%!J=)-@D`5B.D#VZ`IM"2OC4Q1$121`"WQJ@(R")P.)S$>)M
-M(/452SI[UFG9WASW'OL]Q[8_A-<J*(S/E9^<67#!Z7@#SM_+X@^'*?#K-^])
-M++!24IE:RLY2.G.=@I=A=Y!E-II2?G3%TP=[+T.R>]4U8$E/3#!S^6;J;%E[
-M#QK(.J:5VU=<1_M,3AQ`?O?#:>O@;<,]C^+<KM)G;F&3[5OU$!C0+R(#3GVG
-M3J/!6,;3IFG87ER@G="\[!+JHB!2Y%U=XUS=>4QG?]LHEC]JY)=:2<IA6CG1
-MN8CX>:)SAXUS:!6R^QYT8JK#Y'&NN>L3[P'2U8CRO\(I1F@I&H(03\K**R<7
-M=:VV-4I*A49N>WXCGV3DQWQ&,P--.REC)]+59H60/DQY9D*FL"S->0*O(Q&.
-M/'B(%I(2PJJ@L"$$8060$5061D(B$8D!9(08'EI^[1C(D^J$)X2`$8@$$`,H
-M@*!`$*ZZ@HOY'%H*`/V/E<)%EYFRP\&2&V\3HE^K9&S>L6C)KR)JZZ.V^J$]
-M;,!Z;&R?Q@P84,RMM0L[/5\6B@WXN&]]N]UBB)VX3MT8&%F$Z>C%&PO,BOOO
-MHJZ_IT,0P-PX5C<?[R)\%71OKIGQ&^@-51WS$['JDC8J#.;IMU$W*^3U]OF/
-M="+=?7G"#PG)96//82JHG9$3O;R/_R"@A[N!L/VA#OTB5*$3)/GLW/DFDP?;
-MI'F,-L8=_W>([/KA%QTV$0X/:HXC2?K^K['</@J=I'=N^9OGB*K"X3_O1:HV
-M9@DAZHFLTU$W#SFZQN*,M'6GAKS+9:+:`K4GI;60-<^<]T^FKLQ$M;E6MXO6
-MP"9I'_0Q\U(3KC9.`<J7ZPBZP.9/*G85@=7NK5)M@Y:YHJN"5Z4_"Z+15%/*
-M5ASQFTY7/.'[S-IGO@\[V/\+VWB?F9`]PSSS#UWF7'A+`];!3L$)YZJ***$/
-M.A0TC&$@H>$BK]VT@L`0\X3[1GY#=YZ,//3\N>@>ADJLW@^XK\I/<_YIJ[WV
-MO\YR$8M`2:C;T9IW#YXI+A(K8_:>$ICD[BO?TRD:U%2&GC\P<<&90?KV9I.S
-MXM1H*+Q)W-_).SB$,>8%"A)X43[[@I_R*83!:4>WM/)9\[^M>Y6.)OYY1Y[U
-MH.R=T14/ML/V3XM\;5&QLFB(V'%;$9EV`J[#G/T9#8?)D71ZT,5!_&+C#"];
-M6>'E=@N!.-I)^!82HG?2YK\TJ6]!^I[U`O>&,^WC"%D$<TG'[A]AI6?FF_QU
-M,KKGL0`\![/O9X4-#-+;^_"19,I&3M%\^F(";"/&LGYS0/#-N(T;_6O,.D?,
-MQ$)E=U#H(ETS!]PH9W2T:U09,8%I]IU97:Z2:?$V1I(H50^U*NZ6VG6B#&@I
-M9VLK&,.4)"Y8PBZPT09OCR0ILD?+.A)=ZIGKPKWY3!O-@99NRE^5<83U^"G3
-M7=XE(U&C$?1S'+R6AQ$GMV)]DA!56'V3`*#W"1&23P&`7S#F`Q$1Q#\S7R&+
-M2-IRCX",8!&`1L`"U"4<=@`8`P>YSH8?!X#SX324!1_W+I6,TG1GX$M,^P1!
-M+S[]WL`&1=4AF\[PH)95Y-2;9+!UDE>?5K%&H5X399N=1M?SS]?VJ[*`Z[J<
-M-CZ.X\`CT,OQ%)OT<)[W88NE&3,(#?^E"@[3&-GCLLMS>A4U1UYX^NWU[.LK
-M;6FC0>?'FNMG)(F[50M?/XTRYU]I49?/C'.YN5]][@LM0W\8)"ZW".RAF*@Q
-M!'R;4JBBW-$&EGO\=0LS5+(AF6S.SO<=E&G'C+DZ0[]M:)9T%+G3#+ON1NI2
-MPD'O,1&X=VQ$DGP-*X0;;<-'X]27@!H%X:A.H[%WBG[:ULQ(B4L)2EF($Z,A
-MS3[G\YQ,%(IDLB><#VJ(!)C!+9F4B8"=&`ROHS65RG26Q0,NPE*G-X=M$S$.
-M'6U<Z>Z4&!L?F&):[T1KD:WK8\4`G:67B77+O$)F6$QU7YGO2?WO!7C[&Y[E
-MGW'VQ_%\"Z>_$9ZRO+)/O8JFFR![\%8"'J$!20]^BQ$/:)*8""PVH?(ACAP'
-M7`T\A`W*PQ5$/N+4T&G8*C/!F?]310_2Y548:[99]-4K6&[I8#_S3JXU5%3M
-M(U:.&S^`*W$WL+S-7G*+T:#[YX?<?5#)XO-\);3MZX=?5A:EOM+<%9%J9SEA
-MP@'F1AFZB,#`\WO1\O29>,G+BWSU7X$;+):PJM_>$:>'XK/8C+'$D`]J'O4G
-M6PY*J'E&"68MBV2;MJ&8.N",STQ@?F:F:9YGU.EVL]Y871^T7RJP]?K6G!MV
-M%+'^M)UFJ4>4CI0O8&67O8Q87L\)>(DI:\Z+1L>QJ&LO]6CO*FU0U6J\*#?A
-M[E6C?;[):YL:=N*=0-Y@WT<VYLJ[SH<.59X^]6>9<T>^%=F+COK:RCYGX-AS
-ML&H9KI*G`#DQ3O>OEM1:[M66\93RNK:120N4;ZIMWA_-A6?B1*MNA3@_Y*IY
-MK#-QLB-V@;XI(/PV6I9G<P]&*%84@Q14LI53GW0^"[E%ATU7X478KQKM%9*0
-MP7G,-CD6$XX#^$)4Y(+V.V/9[,.$YHLU[/K,#<&6K;/':3UC+6R[(%4*5,78
-M7[1$!H=;KVT!6<^G^%;W?X(75/A?=>'NSQ\A#^?V>3C7`?#%!9#S_O_;\`R,
-M1`.R3X9+J"@AZA@4R'O6*2)#Z'H'PT^3Z40'SJ\X=#%V*SPZL]J!!:$[*G`>
-M16AW/%-+[(:"&P\;4Y92L>?LXJ*Z,Y<A5>(%1\)GP+`H=8HCKL64K:0"L&LQ
-MF<;#2M"KUKIVD_AA1J7H)>26C`+X/.L@L=9@5BB)*XWPHZ9RY!@U82YU$,,Q
-MWBWN\ZN%N%F2P$!C!D>0DR2DK^J$WJEK:H1";Z3`+;4-"@H.6"'A-^K!VG_9
-MFCPYC(4-A[!:J%UJ\H]M<0Q].]#A:O+`'E"^V<S/M,&SP*3W>Y0=S'['?4YH
-M;CA$SJ=7\8)'$K.ZG:+A"K;J@)/NI*C*5^(Q]V>V%#?B^>\SZ`A?JU&J,VCV
-M_Q&#7MS87?=\KH*Y#6+))D$0<Q>A6/B:=BKLL;DCTY=4%->L.F;KC@\Y/UTE
-ML4+:T"]DQ?!0J#F`<TSXU3G:=,H_<4S[Y*5Z.Y=4Y%^?]+H]YQR')B73,(8?
-M!$Y\WC14;K]WEZNP7/A#U]3WXD;)'U6P,?WD=7_;3U+PL=PDF-]W52M2[L7-
-M2L)3W7RY6B$I%'""M0C&87Y51&%O48CHA9>-G.<UP?!H92M<:3:W^X2E,VJR
-M^NGMA9C59MSS+++TS"`S8W*=0HFTCQN37V?N:I9V.4D-/M]A28E^V@*+^WT>
-M+=J[&%>-#O07N>OX31K="'0M!QK&:-JMJ<CZ72"?$A8PFJM]D&_'.&)*K5!>
-M@H9``=NQAZ'5'`]$[$[3WIB<C`(QDVXWQ;XR$X%B'P<8B`[UI2+#[9)#[I"6
-MU!46?B$E0D/D,GA?I.?0'WBI#Q-5$/T[1[MGM@>>RCYZ=:@^I]S/5^?3^7JI
-M\\5-@H'P?BC.B,#W_42;XSP25C:X>_PCTV>%,I\`"Z3'V<1;\W?R!`<$LBU[
-MD0S-4]KMHM8G%[:9_W`PCA-G@+]>H?NSGKDDWD[D2&=Z6M4D'OHWCQ%>WXAV
-M+*BKES1"]#>!WW4UHKK(^6XPB&MZ=#?/Y(U@,6Q'N?TC:"X)S],$W6N<_S7M
-M#SNN;WMYJU+3^")NLFZ[E.B`+/.]I"M-3:"L9&^;D#Q"RD,M:.K10TA(0L#,
-M^]84EAOGMA=8T_1N-#N[2"IVMM'!^GZ7I*K'A<&%^>__MF6E-'9N0GD`VN)P
-M.]W(74:'RLZ:W'RBLX_CZN8F)F9G3%VL*%I."FX1AXLU/&]LX7H,$O;]VT>R
-MA354>J<*(7S>Z5@9VFP3AF>F9QIL6KP2K+TXF6PA-W<()S)_W37^O333C3@:
-M&2@=#TTZ"YM'K5@0`:D/S\5[T(41"#X/Q<0CZ]E@Q=V-M=_A\^7XS`RGN&9=
-MOBZ.I=4.W`A0AUH9Y+F-MTZ2G[4HW+_'G"9_Y:JT!J#Z0W9TNF&_ROBLV?:^
-M+Q"BQZ^CO*Y>+<09(65'F!M-$6N\G!.337V(QLRIA$-A>"C09?=6-?&UG4X0
-MAD,L1(-%2?5B[,!;G`RU^:?$'5@0-0EB!6]+5<1Z^TIPGZ3.B(?P;7$&RVQK
-M>4%U8,-D?`V4Z=+);$=',HWY\X1>@).V=(:!>)WH_@*/O@]R=1G3,Y(C78S*
-MH(N+5U4^,85FLX./@BY^IV!`3`KV'$[X0%$1:MWDZFX2H96&[/',$(5/#+^%
-M:I22A55W9OAKR$!K26&L1'1R62+?,*J;&_)N?'C>.\-I\XU\]"0BK/F1VA4)
-MP<?8.(!#HF?U74;J3Y7.KW@NXN#G@1J^YS59W.WN[24^<_E)MC$#9U?2GH[F
-MBE,^9>2`-,'5KC2&TK\H8'C(;LDX570PSB>3$#Z1K^J.#L"Z]J8#.@W7.`M%
-M!(/`/!C":0AZY.`K&",#L!DA3/(5BP_42>VNWR=_/(50,\B9TX*XP<*T#CQH
-M+LBGC3QP2,;,K@&;V.NOO)T37^G6T(@W[.K>74Y=90'6M*W2SEKQ\:J+@.K$
-M&;06$``Y.*L=-B,P_$'9OB0)$"1]#,#>>:Y=@W!-4$AM\IHMN4TW9A<S@/=S
-M]Q]*QRXXDYIBC;`<C-,O=V(U<)!JSY$X+K;!<0W^#_ES'-L76;T+?<_'_(?A
-MY.#_IG<W!=A;S79FI1Q7>:6%VKP>'RJP>*DVOU-@52EF&<A=^._UU*9[&)>]
-M';+'4QG&,]NFH/:&9CR!:$/0]<7PD',:+.]5>QM.;W-A60ER;:U5N]<A69?(
-M<`]AY!\:<X6CSSKD*WQHGK`0HSB%*(:&_9;D;@T!/M[EA-'5AL'=&\85NF3A
-M]PF.D6'G/_X>!CMF7Q[D==POQR!1+#BLCJO.$>O>O,^_5P<\)/BJCMKM><`[
-MNX_`V/EGZ0.#15Y(?,F_L\FVW<!U9/HVGBU"F-Z:UN;M1F>_E6O'!3>#1[-P
-M5D[-IBQ&F;(T8ZI_0N_9_Q-+9&NOCK=Y_WJ#G$=`P.;&N]CN[8*M]6C](,XY
-MYH8VD<+^7_?\8?;U"P!%/ND6D%VML;.2MT`+),IDS4<-E4+F8^35'>\N)3"V
-M:XDX);1<&-89YIFC1G`)`R'&AZ,ZUEE4?<W81J+V6L1*"IW$(T'1EUJ"G!/F
-M6C+-:<SFP@[VK6Z`9'6?N\C=(8WTZ-1&INGNO(WM%T&]G)O_`XFS(@1;_#F*
-MUG+81UD^#K1BT>*1B-CVS!1`1&QRBZRNU./^AL,9C:5'#E!T=?;V.:'%DRES
-M'OJ8`>N6K4FZE#1U:N/,TOU<R2S`N;L.P73)RJEBS4$:H+<B;SUVQ&)^AW%)
-MWU[F6]^APT&=JQ6VHXYNT)J.?]F6H-";$ND'5-"(U?"\KKB*23A6T9"$,.GT
-M.`42EJ',W_/S4(FL'%&:25'4EJFH4?756HK);.$91Y+,O4H4@\>+.K9N2SV,
-MM+;)<X<S,@9R@@;9]F..!:I!N??BGC.4!J^PCOVI*KV9N1W)<NWTYIKFM;WQ
-MA;[UY1Z_G.[IW;A75=.39`5FERI:+;&VD26I3K:F?I?C%1))[^']VVI.K0('
-M90(#7W#/K7[\JRCFR?M;MPX@%DAL941>T#WT.YD#`=;F$$R926<P@E;HD829
-M\"+62@L@-3Z*JU[Z^97=U8/VU,8;,FC'OT&81'$5==".=\#T`0YA3(JKDT$<
-MU-F`6ISTT<)8`!D^;K4<T$(HP`ZC%4G8JP4%DG[+#[9#YS(*"_AU2/S$FCX5
-M&0AOU/E^7<&&0]UXWZ$N3VK-[X$/ZK<SG.C]/VOA<NR46B[`4N)+W7S#5Q@R
-M-WWGE?R6SR!V=/N3^[_65`9?:AJ/4:]RSK_$5IW4_RAY5H!QH2SIJ(@G[QAP
-M\D:3IY/#K];)"SFJ7T<?[I2E]]0:&]1R+#`F(U/:'!E&*@]^6D+%Z-#33M.Y
-MUS1DF*W\&W.""]O$HDL37+I[L6O[X70YR.-0CKH'5Y/_<#SL#J8JY?+V&9>#
-M/U70PT51@%D+"U*<WKH*<TA=(,_Q?D!M4>W>HP\C>9%)=\`XCIS%9!R!/YA'
-M4SA\]RVUD-0&.`J_PX>_MO``SY+!YAQKZ)K#B[N&!/MCS-TZK=DL;U++>F3*
-M@Y=[6U:Z(>J-_F'_.WX!;Z3[X9=96F;V$JM%XCA"VPU,.06#06C<NJUV;I=T
-MH\N)?9VV4OZ`\H5J83I6^'^Z!U1W;L?.*GNR6\9*-ZA#@B3LB,L\*5;R$H:5
-MEQ3P4AMO:@\Q?\_7GS-D]M/U\,8?K*4Q/N>Z!X-MWN96/.`WS]P)E0J`-HA-
-M7D!_AX)E5"OQ@?\NC7Y/F"![\.$T=VO;354>S-"_.=S9FAPJG:,-%3Z&AZ4=
-M:V%#?W:[7>(12,WZOR_4E7C3!T:?@&-5E!!_,)KH1[=*[-N!USQ#02O-Y+>I
-MY"-2%54K2?^0;Y<&4L%2&!>7Q'#A]XS^)`:J/O[NCZF*LT`]MMEU>0:..IV/
-MU*(T/FTP1L]KWS5'`Y7X="#BXUG=5.&:+7'>L"FS).6)'+_40@+/WTW]%F@T
-M@2/B&O^,OV',!R`?3@"5R"WCW,3?LIS24M,GCR&9G["]==T:&>Q*$A1J,FS'
-M"&9^6Y#_V#1'-(MZ[RQ?J<A[&3"5.^370@.:%37,;\L=8@<^P'B.>@K94FA$
-M2QI77=Z@^*/8?#$0X7P6L:!JO/MS@A!^^&;.A/RIH>-1Y1?:(UXF+NE,M?#T
-M+[:;,>E'C&R@A`?,&^@Z7;SY_/>CP(YGO2RH-)]HRRM7-/V="\W9PX]T)RM)
-M^WGFXX"08N2H?S1FR9("PS)PS?.Z"IZF+^[M\.'<3MT/+KSL%3EQM(,?3EF]
-M!(=B[="R_MK*LD#1,<+>@=OR>G0G1:+VX?J[I%@7ZBZ'7<KBOTQPM#KJ4>\P
-M[2QH)3F*"D$KYQRRB*W`23H@N$DR@4*E>LL$QUO]!P0(0P**ZZL]."YT'_?K
-M6UDU/D\8[KWF^R(2"5&#;%:@O$<C3QW-`IXQ69AB'"7%OR-=HBYGPY1R)S#N
-M5,]=C$JX$A?X[/G"=)A_#R86B40H-&:UUMQR2F`UM`K9>:L3]MDQ\<YS!"%P
-MI(]YN"L.99IT2"22&+_6.E=\?DI0>O8^8!,1[?5#1MAWHD"+OO!PX5^SG!.6
-M,0#(,YM1"V*N[643BA]L=Q;7S4]WL?"MEZ39S5'/1,B]C3A-ZLF#C/]LX>*M
-MT?N+4HIO/\X:KBVNC/I%W>S+N*3PGJ9@"31/],=MNS<^FF$3HRP?$2+-X)@+
-M"2TA_M^OD40AT>GOG$;,!`]8Y)$0Z#B&$&1JR&Y]5W(T)I%F.4[)T08`6V=-
-MS.'2("&MC"`OG&WO#0*>YB#2@*0`<CWZ:U(YGD?*_*#]+]UN>;4_[>AZN@]@
-MA^>;YD/8,GYHJ?'6J]VU(0/D_%_TW$F_0!8""21?B(`$E(L6*HC`!8",)!44
-M545&,1545&$`%06(!%('QO@W'7158HJ*J"R+`_@,GP7]%NJI2'IH:$[WT_FO
-MNJF_8C@@PQS@N*CDI*!@8Q@#(?[/&,./RTO7'P6@2R^B$BUF?.(P,P+V0.`E
-M]IT&W0R0ED.R&=)JW\K;GT+SNYPEC/7_[G\+P`EY4W)CVHV:U#>T@X\B)5NY
-M6HV=E-J?).P['@?O;+G^'@2/=?R\I=*D`3/@B'1>O@>!*[SBU]U@)$SL30`C
-M:&/VCU4*:3`*6/+.V'[</AJ#P&4.@]56'2.@2F6VL@B-X[?+MC@<L\93HS:2
-M`3J[N;/B_'+28\#Q5-[$'(TAD3W;HNY,7P"<L^"WB,#ZD-/KH3?8%7&K9@_,
-M$SU(:PWEB"@]1FMMZ;1</YKO$7T00H^%/0GA&W,,$'Z>K?)2`%K<+^X754U(
-M=;.Z_)(Y$'+'?(M+T,:>(GVGK6>G&@VUV;VGP'@0,0^Y2>VP*@I,/E30?Z'L
-M6Q\)R[/>.T^WQ)2@V2GTZU2_$B<47FU2J.;X;FC!\$N7Z_&L5/AY>Z^-_F=O
-MAHY$&N3Z4PPCUD`W<1T)SE!W#@:$$_H3V@S!OFWE4>(O389=DZ,K)BY"PFGB
-M169)&!(BC?SB09SY5PC(KR'BVW"JUOSZRNELQO05-VN1+!U>6BH1N0>(!FUB
-MCBCC]RBYE)H"TJ2:!JGN.;6?;21TBN]D_H\-VP(??L4/=,]:P5`#^Q`N)+R>
-M(=+Q6#NW%0N?N='/Z'B'=QK>."M\B;S7\@3Y$Y>./]C0P\H<CS/?[GRBW)=U
-MLP[2$:?`W/>BA]I^B/$@FL:F7>8>!*L1`<!W>_Y^(`GDS*]1@);R'=J/I$\@
-M^"N-]@:8:;W?Y>_83GQ/"'+DLO'V[9TM@*;Y7%\"6OS50;DZ=+`0@(:X=]YH
-M[;;?8X.Y"3F@[/[R_A.%LNE@2)5B[V3A:RAP]F3#GK%M.@=-U('I`7/\XO`>
-MCY)FDI/8'87D\OI9T+K#XWCZR;%V#0*+&:V*R-8V_<A&&P(@??KSA3FDC2LJ
-MZ.0CHWT7L]Q6#A\-Q.$WAPX[R<%?$9_H#M?7A5FI0@+M;]&-F3H%_F_OKC4>
-MBUWC,BOX0[.;+8_?@U^N1O<?(0==97U<7['=-%/OY*@+^6NR4#HPZK_>4!?]
-M(;\\&/DU3SHX][0$/X>RSK]ED+BMRZ."8'W;[KI=&:.`P+CRXIB`/VYH+ZM&
-M3I*WT_4T0$+6'`20G=K*"]O32[%YX:.*2W0Z0C6)N+D-9S?]G<9X^0W,JAGN
-M$R>3&Q9\%\UZ,XY!N:]>NI%*C?5#!!"HE_:4J+5`0$'V#V3!.SNO:JWX<B?(
-M11WI>+$.D]7RE`PY84M+Z'G(1#:4=/Z*$PJ39?+J!T,W?J@HDT,+SXE$"1/\
-MHX-*;`IJ_!S8&/U6G^+U%G@-JR.H$WY*4X)[U-YH\Q;?C&R$EF^M,[:@0@*2
-M&'`AC?^ZI\OE`;*W.C:>/P^/Z%[$=3XS'DNZ7@_6P.%V+SI84&:.52EU[X;H
-MX!WD;S-6L0'"+*R30&+9X^:.E0?BN8>'GO5&/7Y(<U5KR]^MF5<!3Q-H^OQ'
-MGB?XRMRLG<U\I8D5T`^9?WY&AF$0'G".(N%<D2COO")6+Z6%3.1Z8,`?H60E
-M4$.07_W\^0D,YX"G4>Q+&`9M-UNU.C$9P,?\!H<[9([*?`7XFQ$?2?LZ=(7\
-M!P[+,]8':?6U1TG5XF@+</6Q0O>A!X1U-FF/?-?DTO1JFPBC*K`<QDXJJ\7S
-M?_6C`O'E-ZVKY"`0;8X<FZX1B$^-FJ0B%7]UN7[2Z=+(\:Y`P-2Z<\Z68NNI
-M+@;W1QB`Z!EX*P+UK!HL]M*`/=%('`=BP,UW[;VWJ$7$:`WP*\O'07`Q?GNZ
-M<:I?G5FX0@,?HR+WRUCKMAPCP>7#($6%/8A<JOXF\!$0IM1Y]5K9Q8-84FI>
-M*_@K)X:=2-Q$4<.]S'&$DL6?;6#6R+(>68FZ;NE+_H\M(S<>(E\LYZ=/8'1,
-M_]S04FV/QPK)\QW/*'JJ=)X2F>`6[3G!67(LX'#\$F<TK&'[E.M]L\0F^Q^:
-M@"HV7ECNFA`+?"`GYOWK9W4],AD.>Q[$[G=2[<[YKNM-*>*\E#=)3$*BI;[,
-M:5J/%VJ-/B8=(_P"CCN3LP%KN&K7_%@Y?3]<Z5#VN@18+VJ>55AM,?*N?R+"
-MP[SXHS_('QIW8BRK%181UQY0&MP._*MR$(\1K2:X?(9LP93H0M<!-<9!I#JF
-MZ#N^!Q]DV"POM>64RA"`F`!DOJ$6Z#A.+=0A@:G0^@*F0-[Z+%D#TN;ZZ8BM
-MO2V+`>:6`/E]*0A]EF7VYT8,,ID7FQWBH=9C;L^3Y=T(`M8Y(V5;USQ).SFX
-M0%M5R@A3HLZ@"6U9XX$D_RBMIRW.!+7D>&(#8J&!JY+P'BE?3VD4E8S/]+Y?
-M\`)\*4KDL;;GB3*,%/^_2\,^FX#36$6&K6E?F8)&'DL^:"NLG^,MIDRE@:I(
-M!(Z?;[2T(:MUL4E)0%9O_((D'RDNTQK9X@X>B(>N2!SK-V.88'8N,^<#QBOI
-M!N<(:GE`!,T>.V9TNCOX<A;ZXUCDRP[!P;^I0`\!Z\=T"+N_:3<U,#7U_<.%
-M^K9P^C^(WGFBH2VP!U7&W8G8G?`#;7"'<<-P/4!%Z]GM6>:*D]2;@4)!P;S1
-M-+/SF,T`&B5J];J:\=J&"(P%'=O%38F?[O8=_&/"EZFR(LEK09Y8K9DGP=_&
-ML.]WJULB(.#QW!?D(26%T@%C<,:^HM@)@\_9:=3S3Q?6I(N#.]ZH!&B$Y!%3
-MZ]C.`@FF$!IS`%]T;B'-OE+.,;4">J[K1QV]K5S$GJ<9-N>#@9V^F!+.NSE-
-M^MUQ"VKD((]_$-59OXCD''42L"%M=-U-0H,N^@!<S&@@%P(!3@K5AU"&`035
-MN2V;,XA#`I;2/VQ#?]CKGEBER(1Z("D_&X\?:R?_0R%O)J[@K%T[RR\--D!N
-M=/"O)_``%KK);;'QJ<L12BY3'AX&*KV0`<.-GUQUBWLO2[.YZTU]N";W_*_A
-MO>?"29/KE//86TH!*/C+RQ[Q:?:HS9!?N>A@P+!IFJ#157@%L;S!FB3DY+?O
-MF=J`3,?,_=CG<I5VWH*TF6+"NB`F%^'>,)!PY[R`5&0IY4_06_LUIO^K@(!V
-M2!N(;\E<@D$0,.K9=`@@1R!()VJ!!!'\2&WQC':;KY'R(>SS)789D*;5*W0[
-M_P8AT@$=.[NHMQ\O0:0!XR$[W+W?YE^?@4:*4-'N/1^AQ@]A^)1)],7I=M[S
-M[G('0TJ#TE/CI)J.CZ%TGW7\K_RKDCXH('$3?H;?Z6EHD!AZ3GH_<L@@,Y!B
-M6.6MG59(`JD`2,XD1&'V?`^]\C$_&S_@=C]EV`=B+%8(K(L%D444BPB@>L.V
-MJ4RF2@?X?TOHOY/ZOD_*X$)MV[-_D5?%E<00*"`$M92^<WVZ_E7N4$0)W4$1
-MXD'Q`X5YVU<E=%')5P:HE)^9O).8.1P\BZ1R!6B]6^OW8_>:,/8<&7VRFC@@
-MLU/-IYKCOU$]==0E?>>[*`B",EWWY;>AMTL@UM^:^4!Z.S2W&4:^RE@BPI?=
-M+_]1]9ZZSB.]9"\X`DF8,%GG3ZC]*+,`AK4.ZU6):Z/YXD.3.+ST?M+?-<44
-M((;6%M='K):S?%FBD.\[V:,1!7K'&VDO-MVR545@/_*5:;%;Y$.J&1`9*>QZ
-M_(,GZ?Z*5SNP0D+M@@WP.-K83>]V0@=)G^A\_G'I!$26\FSU(\)%O`VT3L1@
-M'R`Q$ISR4L]V.[_M<;-QB9:<2,/@#N3SK$CQ-GJ77JHWV/3)``>U:`--&OX.
-M#S-4[F;>S-HD(!=6897[+_$Q=2#@\GL'XZ0"A*>E'X%A(Y<;MSN=P:=`!DDZ
-M8SU\F3NI"81\TSO=V\\ZV/@A(3KC7;/<;F*57`S@<D\0%AT_S#<6!/_QI!OS
-M/`@LK>1J9/A>%\Z7QZB,P,&-^6QF$A(Y<4[=GV4J*$S<6ZNZBKX*,`L^GT;8
-MZ"L98KT1^4YN()"WR6O`M>51.^,R3F_,/F(@RP:2.FR=/_)D2YWC97@!5?/Q
-MNQ83BYM-S87.\VN$M:9'``0.&5A?&C%K[,Y2WZ+$U2(`=."QI;N@%3=H]VO4
-M.RP^8MD%C%E,G[AT67L.*[DH-W#&B@AI'SZ\&%)V"2_">XW]FCX(>R4KX+JO
-MY?]2[AHS4RF6&4LEO;HX!0=[X^!<[`LZD[2RFOLKGP0EI34W:YP1U-_E]&_?
-MO(R,O=$THQ`#)7/,=NF';*I6]W]Y(Q"&`6;4WKH@1[+\US21L6J[R;SW+1R(
-M=O[XGC_R+':MS]5.V5-X1#'5_C2J7%T=FA]BW7$$"=B(!T=$MT]G?9MP>&[@
-M+0*$O*1V#UGJ<]X+OT_#T%'(R\U09F#]3?N?,`(;]F/@;:/YA2]UFJH'1M7]
-M$<`4R:^9&@5@3/BS06I#GI[XA(AD&'W+M&++I-G&$SC7^9]/910"F?W]]V!.
-M2DE'->YP$<(9`>2#98/T`(^D-1/>VO>$=6(0`DX/A8^V$RM@-UGDMN#[MZU)
-M(%_ZFSBN0J7AY6<9\]F/(]*D1B`>6#V!(FN*@LL9E3X`]@/C8OU):W1X`&6-
-M%);EL8<?N";<UO>DTQ$^I^ZI6T8@&PY4SA<Z4KT;F-<=BXSCHI$(!MT-3S)\
-MNM?C]SB1M'*:L&=%``?4KE^RR`I*JSWV]CL@F2`U.*C$"YV*]O:`N'TY#@P&
-M[2!P_LB$2I@\`2Y5T>GYOKV%?%(0`RQ#UB-'<T,/3[RB^'?BON`4EZ\;>:?K
-M$6+EQ+T*YFZ*Z42%I83OWZZ01$C>.M(>00;UHM3Y-(?`7J&_MJ\J)\D=_M\I
-M/'CX(9RM;P7!'ZHX6QWFE@6.F12'U>,W%5XFY-)E8?-3<.AD2A</Z3!WH2.V
-MJQ%Q`GB#;R+PK=UX!!X78:TX5':\=92``K2?MQM6"/6>/!/67G\A"`PJNM)D
-MUJ&PK6W=C/<)J2001,\=X7PBJ\_X`D(*AX#,GCQ;M*(AUEB)#\]5Q7J>YUNL
-MOCR,1?#B_K1P1X\@^V$$LD/<K-;,5(+Y:3,)Y4TD%QQP4A`HJ/C:0#$MW12"
-MFGE?`F41-+:1O3+CE)QVIW<629$0+R;G7,#J?GP.4OUWCW".\2`#!>?`:AO]
-M2Q*^U#$V`I$9`D,'JJ@-_Q&155;VJ>>BC(&]4`>GX0MUK8WBU&HS=O+2N*`,
-MWY`.EKI<6?PK5H!2W$\+[56/G_RB8/].OP^W:]OH8LD>"X5>77@Y353MO>\*
-M"#>V2J*14K]+_:?+^Q>_XF6HY`^`L-&OY/(%:0[)9&F[5MC#P`_Z"\E'ZBQ/
-M@IT9TG6D_OGZ)`7\]_<+D3!X$(_@+IP3FG-``"J9Z-.22<Z)A`GMVP5"I`WW
-MRC$/(\+4XS'9#0<='`)+FL-CT>C3B^E_//]C<N8/@#LKU$`UX^(;;7E-&^FT
-M0$Y.79!,&W;HON65+L>+)^/OXJLD$0DFDKJ!5N!S]&8A'7X^`*<AV+R27D1-
-MOCY$H5+USNR!)4D'J*09'U[$YB(A`02XD;P(^>VN@S[5\JA#(NU;$7:Y/EP.
-M>=XW?8K"B])0`=P7G]`EG.82?EFKU(!.'T@S^:<O0`FU0C&O8.W4PT,`=<`?
-MC!F$8=O3PE`CM:*"@77_@/9Z<X*!61`>!<:[!&^?>;1F]BQ?>%$`R;MZP3FB
-M)HPT'8O3Y-5-_<H4+>\[6;UCA.7\T0BR=31@!P&=IZCA+;EL9K@>J&1P!--T
-M[!D5`)M>QO'UQX"$>"`5>_^$507D[\38R@FE*G4SR00$NRO-Z"H>]1-ZJ0J7
-MGO?^C;+X>Z[Q8)M%BZ(R4QVU[3"(<U:S1$X3L#KWO`&:>=;-4<4XD&Z#5H^%
-M20`+=ADJ<@EBTD//@Y5@/@ER*FP/Z[=WF(R-(GR#&E@ANN8X;H=2=7HY91!>
-MWSMT0BOR=X,>^'@7\7W@>AC("H66:_@X1]ZG#?TMR.KN62"`;,_=(P*-2-P]
-MYQ57<@\1"*1*\%8@?!J@+?KO"*?(O3/XV.02M760^0@$)4`AT!CKM>WO#9J4
-MIHE6`>U"E)A$N;L`<=U1AT]'<RW_;2H#WLF<)=8<RB41$M1*W>`+/<:Z7K(T
-MV^[&`<ZM'(ATB1Y[.:P;KJ'B$!&,>`37:C#LO;JMXP(@,[-N_.)O/9&.?PWH
-MGOU9;T;Y;)46EP0FP[/YN/OMM7FD8.&S^$"W>T0PM/8;>,G48)X@.!M*"JSJ
-M3[Y/@O"AXFAZ5PD8/PAN20%S[/8X^]G;8OM)09W%'(F7S1LJJ>,A.)@R9P:O
-MPD7LRWUC(37JY\#"]7<(!.\0?ES3X>(]0/#22#+;:A41)()K_'R9Z>P5&13M
-MM(X['KTT@,G(;%TN.J[@8O>0$&^KB%AR=/Z9JF@OV:P@7KHI`(9HYPN*L$-I
-M5ENTV3IZ'!:=:4SV4LB9[=:>2"]Z.6YYL,!*OT0R`N5?8>8AFND_,%`CMV`R
-M(']&(J=UW?;(0W`YW>6-+L'FOK@`YRU2VL[$^>;M*DA,WY<T1AL/&T/53+1R
-M<Y,D[SA#M6K>CCZ;-)!#N<T\J$7PEW*HDT!./9\0)%4+6*\((;6@FNQU:/F9
-M)X[>1>Z&_2P!@`#VJ>2M"]3;+DS[JG)1%Z=Z`&MN3`_9F@ETS;<IQ2@5H\$`
-M[?9D3!W!:+_`78";R:.0U*7#D!4^Y*V[N^F47!ITCO!?\V,!"_H)0%Y8FS2F
-M1@U?50P-II>>HWH(="JK/I@)-XU4Z(3]'$3RJTB&'928F(9?+N,`C@"K(E$.
-M&-YOUJ<ESV>I102QXJV(2IL%PVO:J6,47["0P5+%W--4`!KVW07_8*F['9S"
-M("_Y;T[_WP/9S_:E!.;$OU(2+Y)NK(1#>SNT-O*:EY:0"N*:@(@E<#*P_19G
-M>IAD8'[;2I)I_&U0RO%;YVF7$B-_Q;(.-\``Z,L*T1X>NK?8@+OAX!`3W'F<
-M3;;CE'R<>K``%HM;$L/UU"4YI,C?9A'`=JLBT?=IWT1\1X9:"1`+2D!*Z&P3
-M,3L&?8.3Z^4UAC`"H[.,X)$);/\ZT]=_"P?T=^C-Z.S2`+Q>8?$`+G>IC?>Z
-M=&/@2A"E]#4WRG4%4]P'N1062HNE/EF<]$2_(#<>`]71!#&"#U=4-I)P.GSF
-M;"*14/H(J7ROZ/98AX<UVVGKDB`_4[Z;G.]C,(-W62TNQ/R0"A[UF`$HFQF^
-MRUZ)N8IAF$4$P:P@%J0IXM(:VM.1@NP2,0PNMHR)DZJW]155W,8@AD(--V)!
-MIW5C^YB(R&K0P.\10R'P=I5G^J*U#(&6=,P00!=[P[@=ITI)"!3Y=?2@+[W9
-M"A0$"O'C3B>P>=X]SR&4;QPO$P$GYS.=(B$=X*W-5PR$VEMJO8CB5>*!:+H'
-M<1;CI%@3G<W/@.7W=`BVJR"H:R#9>ROAL2RZ?[\TV9_?5`>GGK4;>HD0W>\`
-M#9X.L4'53*6CEN77\"&?EM`+")WCF4FA!#FN/'^2[PB1/P.D[3WK\S,V",A;
-MMLS2@B^E<+?"DZ:W2(C9=_]Z_:$BFR^?;'+DGH7T3/@^T2`&:IK-_"+O2J,\
-MU(I")8_O%D!.V%YX)2D28IV6TMK6-`_))`1T41#5K20\B'GKS]JR;=(Q8=):
-MW'#(F6\1PCH[Y+'R?>&X\@$+F[\Z]/JFX/WB@_'"%9U2+4HW)<%[F>%PR*(3
-M!*Z;&$!2R@WV,2,9M\@_W2*"J/3'D0L/TC.FQ!UV%9%)J20[+VILG+(@L;3'
-MJ4ZU&/#+\-9'DHB\<CF)P`MSS*7%3:2R\+5.NBV*_]R`IZCE-2.GVR1;01DZ
-MRPHP1]D/NGJ$4U_`[$V^K8"-U!'$ZVJ9^PF=(*\_J%=*`E&,[[$-&Q4'NTC%
-M6;I"0Z=Q<D":HM-]W!TG+QZ/0J&]1Q=4$P0)8=J2JL]N/YBSRWG=B$K11X22
-M*C@;RQM7P@&WG)+6T6+BR>D(@+T4/OO"++X5C%.&R_]HT)**=DMC2"`I(QWC
-MUFFA^=,:]J1[3&B__-R=8*!";O@"6??F+AZ"<E3S9J>\M^A*()`!=W;63[.$
-M"T*4'5]I\],)6QK$4"7UY`/EYW_:TBLUCE?XB8E`LC)Q2`>=Z[CNZ79I3(A*
-MR^#N"D(7G;K7XSTCBA5@3-!NRE`+,T'1*2"'<(L/-<U2684(Q<]1JCO<1"R/
-MYV$[R=8(XED^Y]/F5P0MF?91T1H,JWW?CAX``J;Z/[]N,D:$IWU$=6HJ,0A?
-M>D_-DRI`3;7U0Z;)>OD9'`J5L@%)4F+Z[H77]D(68S4>S,D06Z.LZRNG:S!S
-M]9!9D428`+62>C$"5$6;RR>\')].P3D$$](H$P`+Q$#R9EM],/LF@J(<\D$.
-M/5Z&N(%&=::F4A=/.[EPZ3,D0?,TDHW$5#VJ_.+9+T:K@@-AS%F]'`C^0RN6
-M.T3PP8P/*Y'L<'%D6,M?KEX1GTQ[F(9"7L'']09$3[G=+LLC3'M&O\_2D"J.
-M-23_-0=UH]+PB_]$2:EHB(LCL+EZ9_L$K.P?_<R#1QN/X[D!:=+HH[ZOSBL(
-MY/106QP:"&(%SL@O;*2MQ^`5T)-FE\%F`*W_?.\7F+!!&V-PD`NJC2H`%7-V
-MZOFUMD;#30[DBC#-^[Z^C^.RV>!%C4V@TJGK^RF'5?3&HH#W4<^([=]`GB(*
-MD5I(S67Z/>1&OB,!+&4]W!]L15^9&!#?R>\^KRQ1*/45V%@$06[2:O-W1)4;
-M5P@K=*ED%_UM9$F,;'O,ZY(K.AE-9\B+4;OV3YR(NU(3Z&/-6M70(BN9+N\'
-ML6C@L['=3AH(!OA(W687;HO@OIEU!I<8"+%8DSU=CH3+KG7])+2RW&G9)9!$
-MQ3;ITH2B6!BN`1`O#JF@(/QQ`10C/`7':QDX8,LL'T0#(.<RO77&7`"7TND]
-MB3#&)*^X(@C]?40_AQI`"*$=J4ZF2=X>-2M,NJR,(=0>`1/&Y[*7J[B?1AG%
-M9-1B$-Z+7N*DI('6:N>R8MBAV_Z_7(O.3=5P8[)($D+5KG$;E14J\-D@R_UF
-MLF&AA&/2@6)ZJ;TZ"\7E;.)/TN*8W)V^ICH>)^QR\OC]+_7M)4#V.("KGD7?
-M9_&Y+>H95?]3-GMO9,YO+``27<Z\Q6W&F/^V)_'S\;WA9@B)C2K;'J2$XYJ'
-M6,^A+32M&#?!-0$4GCT:W#8.8:0157)LZ[SXM<IZ]4V5REDT:W-^;J.#0+Z@
-M0@$O[!9UG\+Z,Z(XGV:&C_K';"L4JO#2@1!<,VI[*P&%\;0?O//I^I0NM2<E
-M)9.J;,?7['@""ZT5=+Y?V54^30D\<>79/YN6']*5(!!*+T\?CMLH@"7+1>[/
-MD0(#@&)QD)H9/ODAR$DD)/>;%E;NN8`?8H>.\=GM&$A]>FMMU]R]\GP4Z;Z?
-M&K\1"`'8'_&H2<YBP-$K*P("\2`R7L-([!)>9W967@\S[B@0/F@@@$"@$$$"
-M[H'M:I>M='#:"WN/&D).V0(?^EY+-1M?,[Z5E14BV`0Q$FYY5JF1__B[DBG"
-&A(09YF?0
+M0EIH.3%!629360S39&D`<XA_____________________________________
+M________X)S;?=A%%?,RM9MH`$E-`-;8#;;8#6E)9>>;SS,K;%2@`2::%N=I
+MVR86:*KOO>O99MMM-XP&76N]W/6T=[SW@<[G'3H:Z'K1F?=WON]WO>]S=WN^
+ML]W>^WN[[W;V\VW>[OMN^WW;;3+3/=TK*Y5E4LVE#-E5H:"S530#1IB5LS:V
+MJHK6!JVA2M9LR*V:MFUJ55JBM:Q4*EL,5$`50)L6M11:P55:V%+55:U5C!I3
+M1L,BU5-5JV-%F55-5EL;:@5:K+%5:S--;5-;:M5MJVZZ[:V]>[:7NTN>][;>
+M[O/MO-M[NYOM]WN^[K69ON\^][WO(Q/N8ZZ![N''=O3VP[V/>RCRX[0VJ7FW
+M-FQJ%7-G0R;9MB*N\G'>PTM*5H%``-LF2NKF=-LQFU*50444`446P`&FV06V
+MUE17-HDJB[#--!MBC$-1L#;!MF@JALFIM-IE3-30"JH#2D`$`!,F$R83(830
+M--,AD!H&AH`R#$9`:&AHR`Q-`,":8)D8C`3)@FF":8@P"9,$,"&)D#0)@$&D
+MD$TPF@`)@```````-`"8`)@"8F$R8`F3$`)@`:&F@),R83":8$Q---,"8"8(
+M,:1D#!,H--)2:$$VF##`"#329,1A-!,Q$:F)A-#$-3TT4>F4]">IZ0&U#3:@
+MVC4#`-(/4#3T@#30&@/1/1#0#1D``#$-!HR:-!)I2E$H&3TVPVH\BE/QIHC1
+M3,34T4]IE-I0WD4?IJ33T0`R:&T0`9!IM0&CRC(`!HT&AZ@`&@``````````
+M``TI$#1IHIFU,F`T:F*>"G@$F:3TP"-3T9&"&FT*/3"3R,33)I/":&C(T&(T
+M4\T-`GIDR-,$T:GIJ>1B831II/(&D\C4S(::8F)HU-02:E)*!#5/%/>V,B-H
+MB&"-#(TF(Q38BFVE3_48AM!-(]4_*GJ:>4>-4V*'IIE/RFIY-3RFU#$S4WJA
+MH](](]&H::/1/4:>IZFF:0/2!DVIZAH-J9`>4!H:?.1!_\Q4%G*&;V<K+2:B
+M#-=F:>=R9PT='B<1$&>Y2K7;'1<S<U!I%6/'`QC'&!$""X/]V/5\G9WG^^S[
+MT8!$`D`96HT$[KU3.RQ]H1DC%%$1--*"?K_K_L?RO_GZ7^KZOYW;=N=Q$%%(
+M+/21/#(VN>?;<MJM`B1$0'QZGCKO:O7_KPT*>`L!0$`X6":FH$!$6!]N]*1&
+M`>)4`P7%5$G@V]E5TZFK&($]>M7]W^OSGV?[[OM^+<I,Z+M=;I-766`];EA(
+M3\\&0+[8)=[Y>/=V,U7MZH"`7P^J9Y.4XK0O)T]ML=,$]>C2&`+KJIP7B%<G
+MIZ6"=\I"7.(D2$"9.7QCWB8!6)5E8;+5F?ZI-I<._LLU7*H(A'M]1VM=&Z'<
+MM%N0#J#6*R?%;:908&RHH34(@"]*2&:1G;Q?WYYUP%E2(@\E"WEXC:)^AFY*
+M"V/%2"!1ZR#N-2&W@1/`>-.A(A^%=L6PJT7:EU&#0$"\C_*-.JQ+2^W+*<`+
+M[7C&UXHH9B@ULW[I"-T:`@7%]:`B#,.N],:_+:SN\[:H0"]MG;I((-):D9I@
+MEY+M.9\`=/Z'Y5'G)UUBI`$7\=-,6\WB0M^K1(IGM("()_S^&EB%H$,(T:^:
+MUJXAFG+?)LZ=2(B>DJ4`+\#0+:GW.!F9[Y0"67\4D'5N=?C<2IH"`B?%D\H0
+MGG&<U$6JZ"MKF>E/!&")G6)];))G]L??MF>!#;?]*:P<1'/-^\77VA0`%Z]R
+ME-$,ZC*8W\V[=O*,`"`LNLU]SC!;I4"KG=/S#X!?7Y]N/BU*2;"=,Y6JXJ7(
+M\0$Q,LORY367(RS2IZ5>L>\@(%\(7%0'&&F:-KRF&'2:+-/TMFDH`&<+FRQ]
+M<IGV44@6#9TX"-:T$Y%0M=)96!4T8(<=/^652ZJ2A6^.;;S%)FK1@@/X9Q=@
+M(>2/+>LL58^19Q"!7L,11[)RREOK.2B(B\T[XU`#;W%RR(G[K(5$X17%G>A!
+M5%N-\(U<88J#4CQIX2R!95&T"Z:FJFOLXD$6)JV@!<T3-KJ-HTMC@87CT)TB
+M*J]FW0&`38'0\>^C#B[K7^`23@`L&RH8#R4AD93YM`Q3];.J--PN6QM[K)JH
+M(O;C-[U@O)%QFS:U:_'AEV+O+ML-FTP(.3(!E'S>H'.(0@#>MJ$"'FJI*?4K
+MJ(^8_>2M:QGP"F_OWH5:].!EVM>UB'TW=R@(I#\VT2P%KT]_6]DV]DSX*:$B
+M$\P$5TX-N@FLFP9/6Z#&OW(]F)2R!;.(FW!F6.80[RE%T=?O6H/*`%S(]JQ[
+MR7,>5IA_&NS_C[WLV",$5K/Y3CA9I<=R)5=2;=$"#3;X4$!A3SS<4MFG&3LO
+M(C(AK8$A:MCVU5]2F6(!3!"(X/?9Y:@`ZT))M.B\B78]MY1`BX"?4#9]!56Z
+M)(%K(4E%,HP1?M]'(<M'M'RM4SY$-*"/CI,JNSL#_3,S:Q7QT`O['-[B??UR
+M.0J-J"64EOZ")$E6GTJ.(S'2(9A1[A"3H,]OVI!WENC_:($%9:S/($2!&27F
+M=E+6YJ$;F*XDT@@+E:B0$R_/;5<8KN[X87?;PTH(I[RF!9ZIRCM"1\*Q0B30
+M)`0]^YI)3+CZ>C@/O^H")>Y@&LC0T?.?#9A!9W#]194/2$B@/0R$+"9F]7%,
+M*1BYC&C`#LQ@*O)X;[/:@Q((+?>_Z#+K*>EX6<1R+?T&:\=DJ!\#0UPA_,^E
+MKZ<2Y.D"5H,L:04L5`\;Q^3FH0!$N<-%2!`?/ZS>I:''+V&_V'MP$I)`W;W0
+M<("[Y"-384_['P.#[FK55I#5</3;EMY4\W\^9_"[7[54(A*R?T%W:1EK6:Y[
+M">ZVMM[DH!4-F!?_"G;WQ+<>IO:.A1D`8W/]@0M8>%BW/(+<-&H2+N=9T(HE
+M8\P<XK$H'SL!""$808X%/B<P[8P[Q]-<_N0=4D$.Q!`DEUQ'1DCH3-ZF@V!#
+M@JE?O+5#H*[@F9Y"`,+:9JP`_,\PQ6@)X?SY$F8?"VP=X=K\=CF/:?!/G'ZG
+M4`E6'7M<%DV&9:$((?2PL2Z62Q^Q6KX\"WFSW!"WZC?7]+:LW`0`!3E._'27
+M;()&=S.4RFUCCY6W?!*KW6HGKG^?862W8T"00$5%7P;%M#Z!QAQ:KH4^H/`"
+MP@ES?4Y?F7?+C-,[,K8E31$!JJ[@S0)=\FJ8#<OIN+[(NB]R,@&WTN\+T2%1
+MRU"PR>HC>;Y(&31@"8(L>$>5^/YP&:Y@'%$18BM3_NBBG3?7>!ZKL^1-#L?/
+MI`&OUVRZ_+Y/!HD`*"]TF31QJ9YV"1#B\R/?U",@5[-@I;.4&_W%90)LS8U+
+M`,#YI0(2X6ML1-K;[$WRF]A\#Y!IMEPB$/?B%:LF@SS8@#$1(96`NH:/6&-`
+M!:=-[T<("%]0_N*VT8X/5G4]+'5W>2@57]UECJP$[[:29VK4&^<0`O3I=VF?
+MKR@)6"J[:JVG6:T`(X0_F^G'Y[@#IX#*^6`L@0>X[PUGR@1M8&GY?GK+(:KI
+M_U,(@U>K55\YIW+R5A#A_I*4^UE*=FQJ$`;GLX^GP`%VFAMHQ<YM/D+GA>LA
+MVW-FEG)_<:*\3(P705=2"A.U_T1]?;OU(#\LK5$7LA$\:N3_/7'@3_L2$4!K
+MJ6$S1,[?R[77H`%;Q,<;P<]WB#C?6PY9\/V7UF*!4\2`M<&]Z=&$0`^[XVX`
+MP>#"!:ZO,V=QZ_BB!8WP5-F0XF%^[*`J8WXH"<]L!5-</9[HZ6PTFO\0)AXO
+MDS3O-N,];XM$0Q%N0S7:2,FEH[^H0`,"+IERF@W1-/3/``\LXT%'>)?B<UTZ
+MV15$R,@_KULJ[L%N'@]`+&4^?P!$0Z(+)XV;VJ^\ZY=V_:P3)"*C(+:U(.'4
+M.A6YU2"N#&7B,!OWTNN%2<(L1V?!YB'\])UFPY%YE4`'CKX!_`'*_7M@K)A9
+MAS[1""])62%G]5YHCQ/BL\D*[6<\DW>8P\`,YVUF%`M%7EW:-*$+>N64?@;#
+M6+FLFTL@'_E2321+T;G=ZYGMTB0'"&+[8**(!6Z&96X#]H(:2NZ%,2"$GFN,
+M1!^?3G/A^`L*^I@/+HZ6G:DLBAZ_E30+MJ_"3C6J2\[8"57T0*Q`"%5OI.Y.
+M:BNS&C[E[K4@%]-&1?WDI(=$YD<?>ICRZ]&1/M.`*SX?V1W6>I79`5A)E)=C
+MC=S#.CUY].X/Z]T\1.%B=8L[(9KD:Y=]^`D`AJ=I:%X(.1-A<7W`!S-]'$IU
+M%-,2`BN_0O@K[OJ'6R\VPY5,3$:,BZ"HE]\AB;53X3@H[X^"Q3E2>4%#6-2:
+M>^%"&#=/Z`@,;KO?/M\""U$)66_)4NJ?&F2ZTN,QPSL<'S\O.`#\I/;_'\T\
+M\-UI3`?SYZ:\L#\%AH`3:"O?XZN.EK961YEOS49"&]N%ZP3[JVOQ(P=(?G.6
+M@"M:W;)3<$\42B["?<D!>O/^=:1F#6]NZ$72@W50#Y79>"J>K0,*`@N)KT"+
+MZ#V_U(:?,N,'9\5&MI`$7^7$@&/KSB6TZC+HW]3$;[NL`N)UQ1FMLA(2OD\,
+MU-4^]`5TS)K^W:"%9?8I@#2TGV8,J0KY?V?HZW)%R@*_M:XB%7\[7[?P:+XG
+M]Q&X;\NX'>`&K2Z:_Q+0S=C1O(G$9#64P!8K][WE]U4>TJFLWGKV#V18-2@R
+M8+PTOK0G!;/I"G/^B\0/-;"WIP@_PRA]#,0B6+V)K?EQ=JK2J^C(DC[`S_#X
+MY"3TWE]1\OSVL0(N;%("2?M9ZI%FL[<HB]5+";IQ`C<Q8VU&='MB>0`%"TQ]
+MLWN_%Q7@Q^2]DUETH`>JNY1%N_++1LROZ>56$Q,7?.DD3?D:TBT$%+8?@O=,
+MI("V5)HR`5A@RVJ<H=;Y*`C+(A/6^JGSCI4Y2[+TY_$J^=OCQ3O?_GXV0)%7
+M8G8UBIWG7`L_NKY=)("RZ$I(1K_J"*YJJ!-D>DL_?A(029R?[YENFJ2&8AT%
+MAH6LF-70$`OWGS?-)?`A8JG!J?%BHFQ9=TR**BD@F:4QF(@.L`,57(WQ!&7*
+MGC:=$3`_\4$,7F=+;N-@^ORPA65Q4U)$1_U9=>^G^O)/=\V,['3Z#NE@24'X
+M=@U7X)-@E=Q@E'!@5_O2O$2"(_!93W=VB(#"F-EGAUAGK"PI/7HT9!#`D5[Y
+M\+'#?L&`?+99C>0W1!!Z[=:J17*V6,CT(^FX5>=WB+G?#?J>A=T@<1CRU($&
+M2/KW2SC-%H(8X0R]O``AJ6;Q6%^K*1B208.WI0!J4>@[T4Z6:D(9;.)+M_1-
+MD"V&FA!;[J;:O3>;"4Q<%,4Y9Y.."\W*KZ:-!PZ3;$/=\"N4*'#KN#<9_N@B
+MQ2=Z3G3EXJ/09W=Q:+STH`I>+,97UO,$<R&;<_0O'QW32(Q7&.H<?B@H6GTF
+MMYUP_-E9;WKGAII%!=+GR<5L.\`)'ZHLR%CN`I%8`ACZ+OP6W'.8.U`\'%"0
+M%X8"O\\>WD!()PS]%F:D('H[F.JU@(>YN9OAUH:$_GW-1*(O^MOQS@06;P87
+M:-R?;K+]`04'98(@+A!K949?(_%S,4L9H$=7%`"GS.&9\=+H:;/X_;W^YMH<
+M"`NS<HM5,X?)TD^Y=$5RI]B^DSJP?4(5_`$:ITEJFM`/`7'UBP!KJO;/[[DI
+M'?H!E$YLR`+<">4-HBV;9?TX0@D-MV//U([Z4A$+WJ^K::^5S2Z<NT)8I(07
+MF:A[WFO!$JYY\;VSF'OM<8:LN;T`7F08/Y3Z3?#QH"J:L4+>JW[N0=5QIYEJ
+M=&Z\W[TBD`7-[6J=-74GF61-$`:NXFO.%)=[[['PD6!H:;V/CZ?H.Q@V*Y3)
+M(*(U*S_(`/X`@=4A8N1X;%PR]WU'P@+J3H?%;:O%,!M`$NVB]R")87^3<RP<
+M'"D2]I=(Q8(!S++_?'ZBM(AE&+F#44#CS.;='!>W$@Z@#S-W_E3`9X%)L4B]
+M6_71C<D3_0KNV3L>'P<+:@@B2Q8.33:?)*X7!K<\Y@""[>-"CM-^)"A0$'ZQ
+MUML"Y6[R\SL]`>$W58Z2ZL/G<&BN`"S?9P>JEF>9LK)Z?`TF2@=J?D?SU%]\
+MW2C2*QY;KIS^#>[A@(M]1Q3>IZ28P$!0&!DN>1#QKZ+6SW.]/5S;\E4CTD_V
+MU!):LAW$J=&UU6.(N<Z';C+W_!/CE<KX:WU9&._S$E@%TY6IQM_XGC?+N>$C
+MLD@@W6R<I\AR``6YO'[].30F&YUII48E)RAW`+CGY_F[UVHU(3/Z<>R($]<N
+MNXYKBGSG(;L!']%1>+)$-=IJ=G_\M`\%7E[I+&X(JO-968S9V4N@0@/FM[:`
+M_DOHOVK;9]H"`YSN@MDXZ5!^\;IM^0"ZT[=\^+)':SZM<12_B%("*PA+=^-6
+M4X_PN14]E.7-."Q^B5'&6TA[JYMVGDV@!"6IH/Z6JH<S02(O3\>@=S^?QJF3
+M!%)(6*9O6O[NA.NF%0*E0`7VVG[["W;V*1;OZ\<X0+6X3J<DO,6&XY`J6G>T
+MW:K[M91`=CW>?L7]P`2I.^9+5TYAQM`E(0%F$ZV>R`(-RC7H&]XXFP:UY%BC
+M`)R"D*N0[730$"U_3>;"DF%<'PC3?1;![F/0$!`7,+9HVZ(Q&0*AY&)ULVCY
+M+1$(Q-SG5-O"<=//)P//$5`7SK)KA'4P'#J4"OU;LGD<B`].ZS0B9J.V:3#=
+MFHMH6CNHZ:?&4O4SY$O>;/`VB,,ES0$FE7$DK=#UHE`B"R(_/."6="48`%=C
+MEUSNIQ$$'36Q-I&5Q98XY)(("#_'Q/I<SXWV4`^'^0K6<T$3I7Z'N'Z?7R]`
+M$`D$$E-$A`GA_G\'@T>0`.M?]'YG8[&O\#T,WD(20@3N/<J*0*$E#%&`('[Y
+MJ?H^\H^GVU&E^/(?*V/S;`]-I?A_5KN#[_2`-3VO6\;OO![0[?MPD#[=](@'
+MGL^NG^%UTDDGD*_]=%3F(!C#"(`7$6TJYOB'9$BU+YQ#8@0%'I)PQ]0<(OV9
+ME,"Z5$S6[`$X]M#TB(,?',/M/'%!J1PF\>DL_0J^9;`\([->'9A>G7GCX\9E
+M0@!M=I66J/(],51@(@0?HS\478WX*Y0T*XJ_O=U@*6WFC3'B"(E.&1'DANP8
+MA"9[NDG#6V]/W#46R."#QGG`O/#C)\[4?2`5H^5G3W+1P5.,(-QBP&W;-.%?
+M>-((FRE+9_]=P/6!9$?X[H"/MB#IS`3J?[;1Z39%A=G\K;XFA6OI;)8DN$C"
+M7BML%@PI!R4,UBVE3B=_ZKF<0@AH@GWQH836)<,FH8K\Z1<`_]C"$EEWC%^!
+M/Y>[K2`I79%TH]PM=ML)@!SW*@GM%S$@J3N28M)R-`A+=E0XY^IL#V`"]FQ+
+M^_4^]%/H2!_ZO.Z:1OO/.8$>DXQ6NJ6@RJ$@&7W`;:(MKWWPFQW;(@(#-U?F
+M5&F]RJ`A#+VFVB@-@,'YAF.IL?V!1W3A`*O%]39V9A:^=$086@"=9YY/=SI%
+MP.43I]O%5,)TL*VCMQ>K<+1@HN)6<DO+TW)G@4%D%_J\0:[+[PVLM"$J9\JF
+M#R7Z$#1,3DX]3^`>`Y+R!4_X_[?Z1FD()>SVM"YCWW&/D(N1E:+:6?SS"^T^
+M>=9VH1@3/V1P?4WZR_1P%2B?BLO6(!4HEY]22&L[0O;91=\SO%,3IA"MH[!B
+M%CFMX;((MF&F@-:$#^/NR4^?H#P+/T?`(?"H1O\3JUR+0$3,YUPX/"V!XHN$
+M4I81(I##TI)/`O^DT'P/ALO4[G$M3G3UU0\M=O((04/Q><LC!49)[_/LC1A"
+MHC\'@:H/BD`);51$73^<"/TI:.TU6\/@59<'J]X\/%#-4QYP*EWKE4N4;[3$
+M!*R=!LX;O0JD`,M):D[^9;VT.FN`4QXM_,GRE:(8%>A^QPA4[V'_/X-$'J#`
+MO+<T!:]1:&Z`XNC?+<X!](-S\#U?81%G&!*R.1B,9PL0LO-B>+H<>8QCBZ$W
+M<E;M=V>)UR&A$!99;W<4^-+"5>D]I#=H>!H8G2&P7(Q_(!?:3VM_H>=M^AN)
+M]$08[0JX/,N;+V:J5'I6(6V.$(:0ZX_O4^QL.>\MF$P#[-<S,`6"VKFP^LNR
+M&3NU+`.`3>^RDL0I]Q%IA\Z7&&FQAHOC`D/9^WQY/_D&5RP';_%[KSXRXR"-
+MF8_*GR>O=!,]"!HE3EGA09H#U/^0V<TZ32Z`>%;4=#9/YAX%'X,O\!"!B0Q?
+M0.$N*`P//0.Z40@-,IF["EION'/2:'+N!#DP7<P_I-08$P_;PV6!!ZI,ZAL?
+MS+=DO9NCF3.:S=;P#U.$5GNZ=)TAH]3DRELO!6<QECQ-'-TU!_@5#]+*-+P8
+MJQ=TCG'B9?]G0.)KL0_03L!U_YX'H;,Z723I$<8PW\\Q8CYC/;R@FM3\#X`A
+M?#U^MQRU?ONC?*CR30M9*VS4>4'%[`W6W$.LT!L1>2LAH-3&4=%D#P&9C[JB
+M];D8SD-)BOV;`_Z^+M/#??G`.L6]X+VMQ,0,SZ)HV(7+922%)EYPV/>7YUQJ
+M!F5L#3[/:P0.`4%JR2QH)>8$]JHLV*0:[,(?IQ8<-C8[FQCJ78RA5_6X:=%?
+ML;9!'+Z7+@8YD,W<V<)%C(G_`=Z"&:=30QM[;P1'8YD-TGEG1;P7:XL_("57
+MELV.6Z*!#>0.Z!V<.E@:$%BG_<]G3G5ZM]/H,].8:E4@PJ!J(D)H".9OD;4'
+M"EQJXO^TH/ZS1L+=5L$%Z]`8O]7IOZY=8C-N1>,Q1=^BFR@T+P:'@C3,3:*.
+M3`"L]U%/UP=A9X#@_-05U7IC2>XUP/.GC'>F"Y[4=*YQM^4F*N%V!PAFPKE1
+M6C!"G!@N@+W^R3SZV=E77GWPH-/N38#!++$4!=X:K+&1A2:W][17AS990I0;
+M_Y#W\L@\:%VI#A:K9PY?,VY!>'`[-/7_S]GZET(W$\(#P:6IV9-1`H;VP=R?
+M$<N/WPTJ-X9YZAPB9'`[BT%>`$G:%9(6N(ABM$"PMCR#P^[&TL]\"<,%S_QL
+MQ(0B^P3W;T0R$$,%O,Q.5^I:K:OQNEMR8W^HR9"+KL.A[&]/%$`O)-.G_<7:
+MIEO@!2J#72LI4S)[\@T]>'F\[H=F?&BM:7\O0^-ICQSRP&+Y9<=`EM^-,*'X
+M?.R(5S.U$/)84-J#B5/5X#K<8L^0]0=L2#DD<D,5F+GB`;YY+-PGB_?6`C\_
+MR9%@_@@XPBRB57T*^W(3V4G:]S.IN1]^6:30?#GR73'[Z_\_![KSGY;W4$ZU
+MR?RC@S--B"&QZ21ICG;8)W)5I#K[2PQ7I.C&'[VQQ1I<EW`A\'B\\V'*G#2C
+MQIN&$CTL6;ALSO9OV8L$^Y_&R%ZL0A13=HAOKQD@JY`2:^CG0A2'E;AY]R?2
+MQNE??40QJ5I^>7]O],#(!9[U@83@F_Q:-[OF*D/&+-'5/=5`+VG)*RF0!&^C
+M6JEQSUE0R*U.P`*S^=SAK8%RM=JW9#^Y\7`(?6_56S7G8;R>EHQ[,XHQCI_6
+M:2&_SJDYG\[4`..FZBLFED?N/A(KAL;1^9VFA:LF05>S^-5\:T/A\T.W2`9Z
+MCR5SH84"^^CO0=:VV;P.D748UHW-!?N2_1E1I$^UWXVY#??7?O7MSNQE*Y-H
+M`P:-/D3G!;1RA!ZK]T"0R3#7TR$X)IH7CXG#@3499,D8:^1/?H!S7?-HM(@Q
+M5K9@4,%"4ZEMT/"_\0SAXXEGRN_`)&U1H,4XI9J%((D#1[,AX1TPPPPBAZA&
+M!3:"V2`C$8#"*&6;GU'3+`_,_6_`]S@AW#.X23A3AL[JPI?;_?6!8+%_D?YJ
+M"=RQ9,"'UT26,!(G^/'S\&#HPY'/H]/]YA#ZW![^Q`)_(&S?W>C!PZDI$S*_
+MUF+Y[5.P1GTK/PX0EJ?`18=(:`&YJA^N]`U#AQ"+T\#6/?[DT&&`FCR7_5SE
+M3GT=O`34]-,T2!`[DP:*Y=PT_6.H1]9U[%)JHU=TQC$I`Y;L,@;.$8:7L$%I
+MM"XSG]H0%WK:P_]@,2PP)2Z[_1E93+*BL864<KXMI\-?_3(>BUC^]U@OC2?,
+M5HK_HTJ(^6Z-<^88P#OK\;*<(OS,[<;O2_HSYBTHY1P_+Q'R&J6YG@G!0OC:
+M>\X;HTP3T>WODBO/KV&');,/W9PJI3G"N7[P80""\*]K-:J[PN8WX-`')Z0Q
+M--X#0N7R,,".J0^Z!RMW)_]S`QNHH4L"$:\H;!ENOD+(_R]9VD9X/7%Q)JQ[
+MY9[BYU8,+$#4ST5"'!V*CZA;H/`[?D#]_FIH,]/BKM(!O7/T:`3.2LX]F,#-
+M[&$7Y@#SAXL^MW08\-[)B=,(V35`ZHLV.H?2C%@DT.Q^0G;L;W8S,YX'S5FQ
+M0]`-49S:KL`7G8CO5,>\PM[OA%:@E#8=HV(YA%,P&#W:#`)SIG$0JJYFRR/@
+M(+%6W79$,W]AO<]5W6UR([/ON4,7;95RLCA'%$_H<%;3OAEL?Y*9]>;#3](/
+M-R@-JH$4LK_`R'1W(2^VPAL`8/K@^'`+$>7=IVL\&G3>NVAYP3\X<%:[TM`<
+M+"9Y@CBSG?P=]85NZ'DQNQPA!/)PX)?/^[,<+7DFE6(ATIMM]^U008;L8X"W
+M[8QF_,%\FX'5WG$,N8?F+;B7G56R`2>UAA`.;N#K#>-B/V":GQTZEP/"@+2&
+MM-+T9%?KWB3'YE+;FW'U5"7A(PKWH;<S`F,,VJ#Z=WM_!5U!8F@>VK.F%=ZR
+MS(3]Q`&IWIBP]V+H4P=LP3L=6"K5"Q!G2@<(:94)[VKP&H^:!QE?V@6C?E),
+MA4_]'=&O[1+0WBN:K)FZG#59EBBC)ZRR15_BZIL0V4+V[VH?0'#+A<$__@*:
+M1$AF]*;V'!.;(TG+1/DO!74UZ1,RB[-,9@O7`ZQMR^81(%,/IHK.9)N=HY+J
+M37V]PXP0V*+*^_O=>@,TN;S0AFDU#U+)-BRD?9MJ[U>W/BZE9/])=8,]$&EZ
+M-Z39$`8='K/B)J?HK#-E2]+<55)7Y&H@J2T:"NY[7`PCXUIG0`QX[;&;C@%;
+M;&NIZ^J,7XHX7#2P-7?AB>&#0K5LYF<C]4=YO.-U[,'LR!7&,T\L*U4+'M[5
+M7`C?7D?=#::X$[J]*X?<5LD//O1FZCZJ%O.A/L\6$,?$+G_?TSVEB<GBB'.V
+M\X)K+;;AR@.*L$H9DTO,K6V'O[ZV@RY-;*:.-*DD,"-'.H6T=TFZOUU`>Y=Y
+M?>J;Q;S[(`!>@[EW>7(]]!87MS_!V'$>`/2*"7SXXURC&\UN(&G0';=SP@7+
+MVNAG47FKWFQVT\M&VP^@";ZN!DB&`R26G&XEN>YYQSY0TZ!(-B`EO>HF'`86
+M,#9Z;[R_`0AA)_K.`#-#T?P?T.UTGTR5.Y9\QA/20\KYWM?DZ1I*,56:J`?J
+M`<%`JBA\SG0%)YC\Y]/C';2K_N94D+)VP-.<ELE1("1NB'1,*C2JY=LC?*PC
+M$:]NE*#/;$MD8((PPG":RJJP>#6J[.J0D"*&/'$1Z#4\9?C"_#R^!U=*?2B4
+M$O5>N6J@)VM%-A"%>T7Z<[%`W1,_8CPJVZ!]I2H'MGX\859[G^:;[;.ZT@K2
+MXD/QA?6&O;P39*5)-]]-!88S!6L>*9IUY)MRD(OKWQ;C(LFW*,/)LR0&.IS0
+M*BDINQ+[8/GQ$OIDDC.$:;IWCB5CYV4MA6Y_[PU[)W.K'OOG!J605KP./&_@
+M9>_3AG1%CUH("==L#X3WT%UMUM>O>8O<#OH@O#>DK+CV8J]I]Z++#\?\@"3#
+M7&*,YQ)VG)<3AKJ..-128TQGSL\E]G]MT*S_L+84<L&MN78Q_-E'=BG!KXK8
+M6^J&'C-L*-?^_.:<:'.CWF/7#T`9QFC\,_"ER8#$>9W@I1C>-;)FK,/*H7KR
+M*W'9T`MJ,UV%J)E-X;(.TQAC=CV63Q[;`TQ;6EC-6^OAH?ZY8X^W%YHPXYOK
+MJ(5*.U*W0]@^VE4!(N%D;#CC&>YZ^\K[=.QZ/N-%]TS/3O=.$KLF<=V7_@8D
+MHVW1N<_W4^R#N&+6H:W2S0Q&@,=)Z,/G9'J=O#[2:X"KS4&#9*4E+FJA=+<Q
+M'9-A22ARS$S]Z?UP4J:Z:G`M`P&XT3](GXTV+-8CE4:G<:E%-2C]QG\RGC%1
+MCEE<^9\'#XL,.7([K:*BFM>MIBA.]H>Q78=?8#9:.G@*9W:JJLW<N+1B.XP0
+M&VU$:N%7?MV*<T7NA`@%8?;W-C+C`LQ7\*,,R]T=M5L'W6L^\A'2JJ?BWO&S
+M#?08\A=\3<&_CKPW?!2^!/FMX])*T2::Q=-XQG)>@HI>6Y-:[VB4+=@Q!O_T
+M+^?.I*GUM.AGE44K_[PI*NZJ?YG3[DQE+;!QH$J:`F&I85,[_J>UR$]Y]_I"
+MK)#L[22+9XSI4+CC[9*R]'64IG+*KR`;=.Z@-L4Q/O:%,3V%7LE%ZIN\$_.*
+MP$987+OB2FN'*F\M11A6MHY1E(\4D2Q#D%*M1\WXSIE=;*?9F(IYT@BI`M;J
+MNBC-P7<#+SYY$?:&(<S%@^J*6I.!Q9TPI#X7'/MJ1\'?0>Q/G>KJQ\YFKXWW
+M-2QBHGCI#\_Z"<NRHJB(*0.:!\C^A5D&*0_%9+)"()((R$5%8L`58L6``*@K
+M('PD"Q6!"U!@^*:;`-^@T=-$`84Z81K[;*RN6:(!>C;C2F;(0AX=:D/T[3!P
+MI`RQ@#5U=#2]%(&<_6$$_"-&P-D9]??T^\>AAG.&@009*9,DAU:7U#7-GS.'
+M*,*!ECV-23)VX_1Z/B2_,G,]"D@5?7P^_8<<Y4#W46-$FC\SS%X+MW+/'XTP
+M3/Y1:M9IO)@^Q[RWZ+&OE_PN?EN1UTZB%@O8.?SN3<:"H-!VGZ\'OE'>@@Z7
+MF<QVX>'?9XZ6-B]O:`*R;E1.X09Z#%H="PVY^^%3V8'!+@[^L%Z'D3&DV-TR
+MFN"DMW,-!*[?E')VOE]F>QWJ(A8L/M8+YZ<[KPVC8&7>"7QC#%NYJ.S,6C_T
+M-@_IZ6L9^@>G\N*69H*7-C3#1>G7:]J'0,*RPG7S2<%$P;,:#3$K_',B;KIZ
+MSXKNY@.[6\S:F"CV1;.5!DPVKB<(UB:]*WR9AL!_2_HG[SZJ.T_!NSEW/$>!
+M@O%K:V5/"!V&RTS?S^7YG+-?W4;LU\A"F04VLZ1Q!@8,9?1&+%T/K-K+\.YO
+M';3N&L19V=E=\CB<'`0]I'&==V-<_L<+@ENI+=&QR?OF9:_&OEDL.^U@UII<
+MZX6RLGR&GS/8THS3VLF;@^@B3U%!/QDMP>GU6`HMC<U7P0$?U97CTL3-]2=5
+M37$U8[1UP\#T_C64)PSGV)I.'42O\%XG'&4+B&JZ/&QM975Z;2S9TECDW$F:
+M`V`Y(3X;21CC`2J%]&3F1IIK2%4YQK4;$4=P<XBLI$4P+<,&X>RX`C\,[(Q\
+M@0%&)S2>O$Z9H/7A0@*%^XUITX;\A1`KPKDO<6/Z,\PCEM(BC-884!CC8HM)
+MF=3146A@FSQ@F=<)^_*J3W8>!#NO7?.T\&D#)_9W.5\[`*)Z]I)*G\9I(P:U
+M@I"4D8JJJ'OT@?I&8^6(=28]6\HNX8$I<MV0Q9XX&(92[U-M@@CG+=>&&YF3
+M#L#OXN;7LJ`2/!&SDLZ(O5Q_5&*.Y$*FK#:9XQQ?)!?Y!,&CT2=^,HFS1G]:
+MPN.WO7,A!3)$*G4#^YNOJR8'Z"+T"J'(Y0-]'XUPJA@YM>>C!L,>NE'1S]*#
+MAKO>,3+%V9K>L#BU.W;)-\BV]74>NU\SE422.BPFD&\VN#BM&<,6?0$S2&+T
+MW]7@6U%Y$^]M.P'_MMDGHW'F3[+0<%!C<]8!*31_W\--]';+?ZN=6U6XG7'L
+M6Q+(UV2OW3G<:O"7P0MI=BGUEJQ#UVL?+A995B40&\&@$M&#I:C&EH`\]^!S
+M8,,5$QEJ?/8NL<0K]&F&;BSOK1.X]L_HOOUE)8;YF+\S'Q5S`U2DEM%B[A5]
+MT*`UM3&Q[BV77-G;(8KL^<3:0\$!`B@@2S%RH>QY:"L@$HN8;\):5)UN6*SJ
+M4G1AOW9J++H*\.;=PM)^E'%VAA;PX$G'_#5O4^T#BHY&\AK+_92,K777?5!8
+MR&YA<51GK$?5I<]H;30:ZPPL+%PKO7ODJ4NYZQKSK%@[&,J=(OS.=NKG%<8F
+M7U^NFS]-&;2+S^R@=DQ&,-='/FH^4R[JXD.52=G*4X'"/^O^\_@'Z?[#$^4_
+M*:2GZEA\J*J"2%$MH,(?F2?^J*463X2'FH&F\OT(A\J6/@3M/E>?91+.U>UY
+M':#DQ]1O^?//&`6!F<`/#M&2X#MI9<4G:9)1R'.,9EU.,WG:_?,WJZH-K%=H
+MNUL]B1!8ST=)^)J:N9N=^JJ.U.IW<ERV6$^+,X.S(C$M2G[:MVT05(=QDNO[
+MO\*^V]Y4K&UF!@JT$JV186MF95+6TPPX2-"Y7)(G4_O^WT;\\%U:X>-2U/(R
+MWEA5-[O-YQ`\BDI=4)3VRASN)S_;M@;9A3;7<?H9KX3:N,4Z<O;]B>=UT]NG
+M+Z<Y-NQFQ5JQTFH:&3+^HP/3]N\IQ?ME&2SS+F[+O$EMU2JHFY2CV<<X!@_S
+M>[I4\NG40>U>!4_+;-$;9]^4I]?J1W*)7HWJ]X431VG$X'>T\.]Z%'73#F'=
+M\+IW)V:S-N-MI:`K)]=A;K@;D#N)0K-RH5Z,\0N+,1YL.'&=5Z=QKF!>G7MN
+MP_CJH79C-W_7>1JF>`6J>XPY<V`(:^&8H&@WR5P8;9XHL%Q&I3.`V[O_BC"9
+M15G:B?T-ZV-5+D40H7BOT^BM4)KAW9\CLMSOBDPRF?0Y&/;+3+%0(H'68H,6
+M391IWH'(#A>"ZAB8\"J>/2>B'HR>B",/D(3X1]TDUFR(18!]L`OVC2,8B0]J
+MQ?1%$\"CW#)MOQL`,[H]YZ/5\9.58>E`/=0W&PLL[:D]/&NCG*/$9WEB.63#
+MG4,ZXCF2EYQEE=1P[9J+D!24HTMQ5?P3J1`&;-R;YZDZ:;XSNB,Z_AE'5\=M
+MO_?)W9V+YIZ=LD'S#5TE_`QX,[2.C2)7I)V"9F6674*J89HTKQF7:%1J`&=R
+M=0E):BI7,U^#R&M02/K5]QE;?)\\/S<[?N+,R]Z9UV]BW")?Z5W_U2WEMRY3
+MY)3Z>H5`V7\5E):H#U[Z17"1ZW[@38>KC\RV75A(A21Q!TVQ4N[G(YU$H)./
+MG*:"=GUPVKV5+1+V??9_"17,E9L<D*#2>>^S.GD1*;&$:'A<@Y)+(654C@ZR
+M_U"SG(2TF9^;EA2P#.V-_ZJC$V5PE/M-EIY_6I4V&$N8/([%`C.&W[BJ\[4[
+M=_;<WT-U//#ST_,J3P113RJJ0Y:'GR!@D,1^X./&,`@,"(C`AF[0#5RYXL0T
+M!A'8(P3QL*#NZGI98I7"Y^%/ARI[L+YO@S-66K[#R0.<X"]^+[92Q[?J/&U^
+M/M842QYZ8NLW:5H5.+Q\$-JF,+ZV<2%U).O7/$G-9\@0_=A%_!Z"P+7I(8;\
+M9O69W+WUIB?+G&K##.NW[E]@H)BG$+ZE7M-1:C%8G]H7'I#VW=F5BA'3`-,/
+MN4=,VKP$SUXOQ^YLRZ"3^O,JRP*J2132C>>H;I\_R4O^)`N-$L'WXRK)K84<
+M&/WZ$ON<:V&ZDJ7B]D[2?[0ZJWB12F"=#'/#/%H!7-42(#,'E=8'R"+>VT\*
+M11-):53)F$*Q4)454&*EJ'ER#G!4C.VS,/5NQY.L$I0$D99I3C7+4Y4T.*VC
+MFKFF,_&S0CA<`7!CQP%0+<Q&!*0/>(*J&_/=V58(![P01B23`3Y[`XA^ZH4"
+M$\!.F!'@'(R\5?FAFHZUKS"",#APY>A&^M\T;\Q)U^\71U1^\U!J8NHD?YE=
+M6:=%?L2P/%9U_\>'1&0?JNM+D+[0_8$P.;GEFDEYO)9?E<YZOC["A75W^@UK
+M6@'[Z+BK']SYSR:'>1QIS?([>FCD(>U7DO*-5?3(_]?\^C$`OQ"4SWG7/^)3
+MJ,2\KBKG>H@#B_Y$9R>49,K^1_A/7B1"MTW&!BH6N5_RG$M8@6PK7*B)JU6$
+MD1.SSE\\&P")E#IAR59+U.;ZX3K[,Q]+29>45>#`E$Q<4O>N>=X-0_-4B%*<
+MG9\PW@0YAV[%,M2Y]>I40C!EVJ;H8&OKZ\43D#YHVO.,15X,8Q@5>_FH#QWL
+MM%Q23`#!8P"GXE#W.*%]#&(3$^_5U'N@8@>%B?$>8&!'?70')C&1&'5[EF=;
+M"[@M3IU_K3F6Z-'_!2+SC0?L5K&.J?1C1T=,<K_US=35=G8XSW!/Q11^3+KK
+M#A:V+X:M(9S[I7[,OZ;X++#/&103I\\&1*S+:IS?)BOJ4>YD^&+&?%K4\W_:
+MV]+LM_T3'&@UX?,975H)WBA!&>-C)1*R\-N_$1OU!YZ;`<:*$9A23T/^DXMI
+MSHBHF.AXALIVVFQ$$39-S1Y5B19.KZ&6"91#_^CYB&E;V5S4BNK#;E%<QDSQ
+M*R(@>M-GEWK)S.;)!QT9`6>V;59[F9I17'5]56"L/N?S_QNGZ6_&E1`U3XS1
+M$?C6L5!0AB82X&LC4DF((*DGS__?V*?32_$?8^F/JWZ3ZA_2?&^^=I_H8)T-
+M;)X;/R6:%FFF-UE?HY,.\K7^B'L-Q\YI.JL]>OP!?HL2U7))C-\XDE#^8R.L
+M`3!O/`;5JPR?N):V_[&BH3AZ&GCDY[;#I\\U?5N?*#.1]@B=-NI+&#3MBLG;
+M2-=DA72[K4NO<MP5.S/W>!O^RL.L8_Q+EP8*$4S&V*[^W9,W?R<G;^^GV1N,
+MN[_%KE#^[/\<P1(41[ZQ9:EC`J26MRVMD&[6FC5(QGDU+EB-2Y8Q41U(5)2`
+M`^D^#25A/7Y?HL*J`?%`5&'VMA/LJ?1I&1!G"9/LI!B2%C#_EQ/&/+GBTAY?
+MEG]?Z=?D_"Z/F_&/U?-=BH<)*NM<%3GF`R/C1E/]%=T;I:A[+?.MDF5(@\4D
+MZ(YM@0Y_IL[;D=Z\O.DYU7U^__F]<3W:_XU):;6-='_&<]@P>F.R.<[O[>%T
+MMTNP3*[&EWEE1HK],U,8>WBVU*?RIY<XLKNSI3^+:Y[^Q1S]2UNZ`^)T;5MG
+MV_Q\&YM:.3@O5[&']'<WF<V9X&S[''RNVLKQO'[/==[E[/9HXB,[/BP50]@#
+M%9["QJ`((HQX*2"3J:(+(?%BPJ!]F^*>_^*=E^Q1J![C6L.KR3<:RCUIR,P&
+M*./;G"OU6+H4"'9^MU9T+$0"'O#1T250J*7,Y>XM=H%,V=ZM+DP<+2+MQUD=
+M+Z[(.8F7?ZD_U?:M(_QZ#&@V#FUN27XM:J[0S$M(3X3KI^!S5^)8BIR>SRO5
+M03_W/V=I;_!7EL>L\O4X].]R:VK]>.3Y71'E`'G]$#6Z*E#'7Q>QC!B?+I\0
+M]8%#X@5GQ`8,A[)%5!1@'Q(.+*_$M)*(Q9/\#)[7XV'M,GS8L]_@^74..E)8
+MC%+!&(.NPI3G`VH#-A4U`$4QQODU]-]=_%]]]I)=65.1W[#)Q:%$E4/_?+W1
+MJ/2(591#`U1B6PS2<KGEV(.ULVLW;"L\FW,R&R_&R:37@]!\8Y7QO:N3ZYQL
+MG'K3=7?J<C5BT11Y#4Z2MT+NI6_D\FEK9;.9SO5(14^[Z%#"\F'G"MA5>WZ\
+M3KQBC`Z\3KLIB@E,A'_ZUX+0E51&!$<H,`#&-L3%)04E\#$<#2<G)[@U]M=N
+M)<['QLS1=H\-1K^V,O1RM;&\B37:236/;0O7E=\T_Q5^=.Q2Z<4.9G3PQJY8
+MM,%U4#3$>KUO??&70LJZM*#WG%AB"PJ;%DA^/B^AK5WJ9<D!V"NI;IQ33V`M
+MK.4<#[PL*34M-+@K)Y;@"8>G>/>Y92TS@^_\+P.Q.W4H#K]=@J=<!9#K@==A
+M0J%C8A20E$7KM'>M!8PBC`>/[OKZ7@PU.=@6G9P#9A@H?N=R'4;OUI]*--R$
+M^QCC0K]".78^3M:(>I]K(ZF<F[:R?O9=_+^],Q$GGLP_3^&[38+,JV)?43,[
+MYSGD9WY/8;G0)S/RY17T.-)6#/P#PP?O5ZW=+.;\5;M_?QOK6L!5=HAV2J^?
+M55;^?D=%[]4PR[G$+>G8D<1!LK>NMR7Y<HOZ5=FH./7FU"S(H-Y?7.?Z^[RF
+MD_3@\#E\W249.L?7GSQYYU_,'?',[WOD!((AT53O24(*':^Y2G;M$4DP?<*K
+MAJUE"&"*@@$\#&,#`F+BF$Z4^6YH!H3&)%0G&.0/>A#Q1>'YC4B>$,*DV[&F
+M3="[\K=SM.Z=-:26I@ME67XJ@IU<^E/T[W578(WS\KL-[G1=MU%3D5`0JV_K
+MJW?)ECVU'P5W?:<?Y.8SW_]MKV.O[N^V;=CVM:Y%<AXDHR]#-@Y-9]O0=I\6
+MK8K_)@]=Y:,YH]+/X7P\'N_D-I\+X4QEZ[(;VIB^O)?7*"'KQ8(HA"P!C(=^
+M11JCOV#WP<\7I'?>^>QR>9\/^]WL?'YOL8C>HYSWR)-76D\?U]ZR+VV51NW5
+M2W3?A(\VM^OR'D_?6SZZ>V:\K*R^D5TYMEHZ'$O>:"/;O7O"-!3X5\75%\3;
+M\R^55##>!1!JW@PL*"\JHHD.7(V5(<PYC1LI0L`L7=9S";=;0M,(UD!W#<Q,
+M'6=E2`KL]%U6/JI2DZX6ZDM]2-!M1>3!9*6EB?AR%`YB%3DX:I[KJ\3V7%F9
+M[4R'2_.XU#Z6<:$(<G.>J#NQY[J]7D4ME0K>!->H;NN+QET"'-CT,>41/*%M
+M\EJP/1A@LL8HPA0\M*=M)/*HL8R%%\L4/'N'Y_W?Q?DX^M^@\?V/^>S]2M/^
+M5('7UH43YAK'&C\IK_5,GY9ZL*7\Z\ZA34=NO3JLS*B8F)B6IID1U%)(9U%1
+M,V&5X_J%2;LD^['7T<)P@=84LWJ["X%58BFQ@#X&"%0H.`K*2?+ZH5'4V0]*
+M+'595;2J"D@4K2J*B<"$_G,*(H<U)30<'-E-!S>:G,/;#XO.5CQY_"7R\J!$
+M#!UAE@0?>SV8KTH]NKB/'#JP0GK\_^VF$TCF+QT;%><8EWI=+8ATM/0_ZT)U
+MKXH[:AMN3]/;]7-FY_'H:.C-H;)7!@3/;)2\0+J!+H'HTL)Y8#/*T60/F`8P
+M#M34'C\IY4\MFK4&]644U:'0FFM=:89IE#4-P':R4OE_)767%M#W?^2;TE[G
+MK$Y?=NG]Z6;.)_X9SIX2?DJDYW1:XDV<]HZ&A/GT&O9^\XU-[<#T[K]?QQU^
+MNCOE1*IP_0X=D@GKC:4/3/`13TP5%MD/3#T[8B*0*1&&,"$"#$8B?P($B@!`
+M92`%?.>U]//U#\&CJ5M;\1W_9BP1^9M%W.(OBCW+!722E4!#8G:E%9)2;4*B
+MFHI2F=4E9%4*C4YXE1-JYQ7554]B$2F^Y0S*0H9B9H^,\9XIXY'QM)12*2>-
+M%C)/'(L$45(&S!LJF!RE#Q?S]^6;^^=GLO9GG6><\H\?@\X]?\OZW_O@MN7R
+M^R;_/`C7LCDC_<,/-.5DQR5(K)TZ*8Q^4K^SF6EH@6M,)AW7'>7,4M+O)@\I
+MY3R]VWRH."(J>BA&"(^6R1D&*G+9!D5FPTL)RYO"[X;^_X1RPY1O?M#P/F?G
+M>_[S_3[>B=?H_3C#]G.[ZUVE^[S'S/*-;5T2HK+"!26$B965UA6D5@UTZ.-.
+MX'W(`YR;P7?.P[*8MD:RUHJPG?`4BD#O@,$-Y@";SQX\#$1X$&\2`_XP<*AQ
+M'A9'0:T.-[R^ZE4?RW9PULTP3\I0>_IUAT:=DF6U=5W2PL!7D5@R.BD5135U
+M9RBUR>U*TN1;J8&=',\8YU=01XF,Y$Y"G(!$G(%7!5$G()QV4"(@'((B(SD,
+M`10Y%%:4"SD,ZJ<DKDGD>1UO<]]7XE<OR?F^V^^NU'(X-U/I;W[=S0H<SD/1
+M],D0)DH5$:5*J)$@2K'ZH]+@&%_1MC@X"B,>)Q05/`'S/@[!.Q(7P'9BP,0$
+MB*C`-01B/F/'@<8$`XD#YYP.(.).`!.)$'%0Y=>2DOWN?5R=GL=?X/P^;?[&
+M?Z%@J*R1CV@TIEI*IIT"1(B3)FX-Q7T>*2/<HV-)T<S@Z'!;,<9T`=#=W2;L
+MB,$$@<8#=0III;*ID"R#!)-U@DXX&[55#=#<W3CUWQ[\W\/(-WYOMOXO[/XO
+M<_"P>W\W[Q]QK>3N\?DKE9?_6:<[C=MG<7.\FV]O7,_5ZU"74`U)%E%=E<<>
+MNP%*Z,`8:D.R`B(R3L`8*(L)V1[]I;";SS@0/GS`CX?KGZSJX3CF&V<X]CP9
+M5M9#1VI^YN_-6F%J8=TJ5210(2(4GS7M_FOT!U][H^;Z>C$'IZ<=-$W)#ID'
+M%*,DP$1('3`0W65(%*S+I@GO:AA]/JGSQ?4GF4[V]K;#@TZ.2E09\O+A2UZ%
+M2:$62Q=N''J0GSZFJ)7I41(TY]\?"2`,X,SDT,Z='-99@55@=$!0#4`Q(I)T
+M0$42((2D8@4*D"".,$I&LT7Q'>'5'+'L?.NY#X7SO-6A_KZ'Q<V:L>5Q?A\8
+MYEWNNZX.Z'CBE(HDIJHDTS5D$[18&9D@`21'2$ZGMZBA.N3J=6*BI)VB#&2=
+M8J6AVE"3`:P44SS%-7XS,'Q/35_O][^OW9FYOF9F5-9W/F=B3Z81B$/I3B5"
+M!JF<6]IE!+R")8R3,$1BA+R*<:RP+%*9`SR*9V0<[%0YA6@T<#P56NZQU-?[
+M.GL?(7V$S[S/RO:Y?TPRYO[?I)NL-<PZ\3PB2(E8B1$$)2!&+"Q*'`PEDGJD
+MI$&0*D1@9S,E)5[,]X/!VVPO![Y\:WD_&NCOQ_L)O1^S'WPR^\YM+QO"UURC
+MUJ=3$MTD4ZHDY.#J.HF\ZH*0ZA2=%JBQ2!U`JR(DAU$>IHB8LL@8D5[5`8;S
+MJ/$?(_^_@OM'X1_I^S[J9_B)GP9ARB+WN.+T#%])3%/H11$$8!1>5]'G7P%0
+M$@/R,$PPB2,04`\R?Y63Q8I#FYJ%)0)A!!3%$!C)&QL$;(Q[7K?6_%_J4?*]
+M\&?!THIK2S,UP-W)KH9%TV`F;;0V$&,`I%-*4`I%#X?^RF$`VQ19#:&&YVB(
+MR;1=GN'':NUV:;2,?T'-BXKZ?^>0;0K[,S*YN[[`3=T6>_S1W-+>-.,4XU@(
+M2DA+"!8PI"6`,5D-$-#0D*DSZ*JEA?H4T'@?'ZY[3D\?]*SXA6'$G,-WV/?7
+M)R26Y*+C((8(H&2,23.`L,TE$%@%D.]I@PQD"BDHA<"E7`C@.JZCJCE[!'3N
+M7!<'3V;U304:PX6'/'UWNMVW.+HZ?,H;CP[N@=U.W=R*FY0Z";MV,&+8&)'=
+MC`%(@Q0#S)#@Q0FZ&Z=&X$W;J4W8W,8(QW,(-/#'2C'F7_F?OG^;Z,F239\K
+M+JVI))!4J@T@0#5J`K#J#!TITI2=4!0PRKAG:=6H@(`BLD-X;XHL-_>.KK\/
+MU)^-]3B]CZ#RXO)C7R)EQY''DJ8'&6&*<>5!RM[=I#``P1BH$U23)"JR%F+3
+M)`3C9K<KA\+2T9X/+X#T_3^R]/]W_6\NO?EEG/_R];N_)-?7U]K/WCH-"3/+
+M$70:%41`S@:!",!BJ,DT!H84H(%`L!T%,1`(0*"`(=P0[FSM#;IL#,/*^&'A
+MP..%&[#EAMTL(#N()-EMFFR;"U)9##5ARV$V0AA"N+*`;"88%%22B&SM8)38
+M;*/@Q*>$P?`?>?YS_PK'O?52^U"JSGRZ4L4`?AAA8(5?"@0A49"D!$!!0YI,
+M/M\6`8`YJ59#5`2TAB#4LAS<T*DD.0I*(2JI+%1UXQS*5+F4[P%C]OX&T?CJ
+M>/T=4+4JBI3B0Z3=TR].!%%#I)4.C$LW$:ZL0#I`6*2:4@@PFL/#)6?0QT9]
+M[6=WZW('^3W^3FV]+I<R[)=D.3'+GA"@9VDI!56!G"*L4)F$S0*5LDIFU8R%
+MGGMQC`SS],9'GFR.RIWOO_ZZ\O3R[O)TIY$H7-Y"N9R9V9TQ8F<BYH#((JL)
+MG""*\K`2"Q9,R+#(%;0-JJL;J,<8XV#3MZQ%NWB%W\?D^Y8FT9AM00UHG&WH
+M$*/@U=V-L[1W61@=U*))9/<)!I0PA,2=V[1,0A01,*3NAU[.[?0V?:?D]9UG
+M<WKP3W'<J%@H=P*RB0[D#N,*BR%D8Q2'<BJ3N=RT+YTW]P[F[[-PCZ7\7S]O
+M@.$TXYQ::RDU@JS7!UM"4AK8`PULEB2636D&H:WCUJ037#M&@!0HIU!)M$?B
+M?3^D7>DCC(51!5@?@-6`0`0/92I?>)2I*A%(8`%`8J!F(7H5-)HA8"F:J-*B
+M@,&"^7R^\O+\RGXI;SN=YG&Y^J8C%BLX\!KJ:[18%`8Q83B(1=:2H2@+B2HL
+M0"HI#$8@Q&$TN)O'=_=\;V78/B<KYO^W9Q^K\G7ZNGHHFPMNS8"[`V9T)9!V
+M*T8P"R11C`MD414@:D4#2=0*U-C5Z/+1<W1?B_`^Z?T_:^>\.FF?H["OHMNW
+M;MMJS8;`V$B1)-A(QMI)L@B(,)LE2&@LV"S9-'9,>34)7>-S-V=I_:[S?M>C
+M\OM?%P]C#4X5MX=E=8U:H*&J"13!.L:JH*H=0JR=00WR`Q"=4#:J&,4628)U
+M")TQ(S?U8O4>HUITG3N[/G.#LX.$0M)PCPV,X8*3AD'SF@<)$49#A(JPX8<"
+M`]NV</#7LXDXKV%?*=[KUWR'W3X?,=WULLYF7-,PS,P6&:@HG+0F<$56,12%
+MA&,Y4K(463DSMY<<AZ&7OOG>]U<7#P4Z9@N,8JG%Q);.'B3A:K#B)@(L!$(<
+M4`4!&!Q(09!96Q(<0<3*K`H-M8<)Q<TXX>YA#FQ\/1<04H"QG?D.N>'T^][W
+M^)V/,/E'$,/>;NQ3KHFN.LVFXW4-VXW&X,,^:W0E0W2+)4A@DPR&Z;DHDH"P
+MW!NYIR'SG>]#BX3SNY[@IYQYPG<PV3$6(SS@6*=QN+(8D/.0*"$.X0P@E"H5
+M``J#0`T!5&C4J".E2R>VN;G"*O@W-6U5'3#P>+HVXE"S;5:);2;`VPVMU6&"
+M0VR.VPVLL@L\MJ(3`;:63;W:S4=W4?,X*88SQHWV4%')[)PCA=73-HPHX=/"
+MZ?J,(!44DTY#U6G4+)@LLD&"L0-,FDP1TVI4X6F;6$1PF?1\'_]X?P>Y\?J=
+M/Q'=R[^^90R$RY4B9%,L+$#*112,3"$^;@*:`&@"Z`NAGIHII,>?NC\/C^#E
+MET''T=SBG&'$!QR+#4T8%@HLG&V#`*"@H&%JIAF'"JDTS"\+3>5IZQV*.EP>
+M4<<MQ\'./`8F9S3.VYM0N=:"9VJ%)'.AF0%)0!0$;4*`BH&FVPVPC+;;#<.]
+MJ.#(+XV+X\7NL%8-ZNIQMS?VA'/1?5Y>0MD%4)?(4P"AA+Y!S5"\:35LAJLP
+M!>WE&D7]HB9CH'-YN74W=BTR,@^)")UN@Z:*0TU9WK-F>S&#9#%LU0!$V#")
+M(B$-@9LLQ0-D48DV;'ME(Z"7`Z*LC^K`.7JPUN@L>W6Y8VXWX4$+KY?4OHPA
+M'D`*(&8A@0*6(+`,Q+&6)8D#,"Y@S/JKZL#X84?#I>#SSVN_:EF2BB*(-$4J
+M;;%4-D$$&&:9R@LSF;4K(R+(*C"9P-25@9)+DH5)35%(7)DEMK=;;R"V[9V\
+MV*RL<QX<?$37-:#(L%#7:0I`02$UD)K`K2N%@+AJ(XFI3FI<-)BKU6'+S.+7
+M?G&[S?R;MVZN?)L3G#130T#1D2:,D2!HRJR%@:)&%54RB6666(92RW*9^+::
+M#ON]W.A=S[;;39+;4JN3"<F+>2'(@R&1:0Y`#6E0EA%J`:IER8Q+@7HRZ.CQ
+M<OH\?'>`X#@AP+.`X`[A%(I#@(+.!A1"4.!(482G`R<%CLN,&-O5Q;S$&_;O
+MG,WN9;CXMYQC.)D<E(LR.2HF3(@(+(&<(H&;`&129LAG$90R:(9QBMEB*V2U
+M:)D:N17<5I?-VMWQ[$73NW1=,0$5^"$B%"0(9.9`8',T5D*063F85D*$J49,
+MX+`O(B%^"RI>9YMUN:FWY/OL.FF_APFSR!YJ.V6VQ86VU518I:$Q45`*`+:H
+M"H18@BD,9,:6RC;93C*;"ZG:W]OB[&R=YT?7[?V#SNQL9LQ>,OU:S5F#,&:J
+M*#5@9DF:2*!F@"A,TFJA%S4F;5U5.?O;18]'I]WN=W=B;;;=BZ7-Q=<"PN@"
+M(8$)=)%N0&`7(,I!;BZZ1@**C=E&W-MP8*[PK5N[K8._V7ZIBA;?@54@$*HJ
+M0@F$"@IG@+)>@(19*HI9#/(L!B`0H(%4E`H2$&%0215$1A+CNS4W\F+'P>]>
+MU'7W@\'L]FPQ2DP(FPBPV$FP`1)L:K(%(I%`U(*IJ:E4U-0U#*<7:-KF'P_`
+M\0Z1T.AO8]2LAW]FP[_F+ML=NQVM*K#;)L9J2;2&Q-KB(':A%6$1$M(8@I#:
+MJAVE)M=NW%QC3R.P[WI^+DY.3(UIDVH:SCXZ:\8M7C+27CQ36@DPUEA-:'"S
+MM)J%9-4%FM"MM(4(:33`Q&'$X>,.C?+76YG&/E_@>VXN7+K,R!DUDMRN5L0H
+M&AR,#1-22D%%"2(DF@02M(:@&,F8::6K*&?1H:7O!R^\3.^KN]\?!-_NGO\H
+MLPEK:VA:%J*`DM8%*(2C&DM5F(D"D,=JUPJ!0&TO(V5Y*[TB"<T`TT2*@IB_
+M5=KNWP[U>YZ`M"`/R/R60(!`820J/D)M>:<PUEAS,;9"DFI@448!8%29PSI@
+MLJ%A+\]1E4AJY[R\XE^;L:O?XL>.W%MW&V6%P7<*ZHEU2@*A%)<$BPN`6Y%`
+M$$$@H)JFB0TBI4!*417<;-2JQ7'7*CF*WM[7!+++@KX-_2/5Z3U^`WS=OF^%
+M`63>3I0F]PA+#>P4*)"R,2&H%WUM$-Z8E4W[YTG@ZK>;/S/Z6_=V#?Y60RW<
+M?4W>1<270B@72`H7$+A"((@U06F,PG%.KL^J['<]R:'U&@-!ZE70%06/J+*J
+MB0[D$8L1`P0AW"=Q(49"QY[`9P8L*//7@YN+G\FO[MX-#/3CXQ<M9KQKQ'6@
+MAK8R1M@:X*'&.LQ0#$DP,!F$XN-"<)Y5F$Y')_(^][OS;\XXS%B,.?$@F&8T
+MQDIK#1%@@88&0$6!E`615`R#B:RO,9$\0B$X`+[6SL;>UVX[E[I\_!<M7*ZP
+M0P0D0A\0@E(0!"$2D*5`SDF>JIA%("`LEZJ%^>+G=JL^7I9MKD^)ENZ&[LC=
+M26VX\0ACH$06&,BP%DR(&2*1DR061F6+*Q3&1@'7BTV2TV=FPV<EIDYW5YFI
+M7#+KL^GBH,=!C9$P45*!0&)#*$4@B+(<<4R8%$DLF345#0%!FF!/AH*;EAJ@
+M+V]TN^I\%.IL[Q9='!JXA!JPBN81"A"N>$SU1*2(`9X04AG$29C.7Y[ZV=KR
+M?"Z&IC,9O;[;CY2&W=<7+%VZ:$R")DF1$)DJDH!G:0I!3-4K"WEQ@S0',U>+
+M1\%U#J*Z*[^OE$*,@Z>'L?5[/7C'!>IZE010QTMDD,!(I*JBD-S64W+#HW8P
+M%DE0P!AFYA$)N8544H`UV"&LZ[14=PX865?P^9?SN#>Z8I;QK;MS)F<LU\N>
+M"N"F95+99,[9+(*3,DF<)4R64%0469%#(7!=MUN97*5@W#K=#+73U>KR_+_$
+M];S^?LZ-&?GV:VC6UBHZU)K2:R1@YZ*36`UF00%U(2C`H0Z$*DL1%)T3H;;$
+M7G._HUJ2M'!P>%YENT;NW5IERY,EQD,BY$%R3(B0,CD:P&`YV!,$6$L%,Q<Q
+M9G<\\^\.>?8[IM[7/]CO\GDFK?Q.A9FSCG0M3/FS1<T*S4R9F")YB%D%`J`V
+MPED.ZU)=F+1!%3NA\-APU3M.#%OC6W\#M:N6VG&VZSDH5T`NL*.D$('0!9":
+M2"A#818+#0%59ILNS?Z77WN[CN[9JOI@Z<M>'U?V_9Z7:^LZ'@9!6QI;K6Y:
+MLE0520)!()$D((`I$P];!0U,DH2'7"*2M9`[0**#U2=<[3U^EZ7D\G3O3YCR
+MY9>+(USAXSC*IQ/&%(LX(*063CA[9EM4EMD&0X[:K`2+%XV$#3G:-?2[@Z<H
+MX<=T8+U$WHKT;D;&$-EP*CB.$AQL@.(04%@%(+#1D62,%,V!H8<.&4Y#+K:F
+ML[]5R\V#-R/)\*_AY;5+3%AQ5*4HB"XJH+#6@HH#(:TK"4DK)QDUL&37CBH)
+MQP!@GZ<=*[RR-,=_VKG8WQ5;Q"HW9JU4)#P54>80\"#%-D%AM2,!=+8%(*;6
+MH4!$V@B<7535,SR6^KS8W=!7=^R\C#Q3C5=CT[2K32LJTM):T(=K)%EB"22T
+M!8"P+8*H6B*A;9;I60*QVS';Q>-TJW#P#Q/6<LUS6Q6F+&X[*E645,>&R4%!
+M2<<BR*!@#+*A2*B69,PA1C*Q%#AQM8ZX]O5KG:>QAY=<HQIG*SYV79!<EM5F
+MH9D6:I!5"+`S6'*C:C"4AR9T0*UE%.5,RUO+<ZAG,^]>KK]CT^;Z/W1[_X?)
+MHZ6Z.AG.72FD,$-"(PT0C"+-&+4EA&(&@+!3"32:(AI;=#0T>3E?==\ZGR[?
+MA<S)W>7?V3+J#$R:F295LHI"Z"@HC)E`4,TE8&@3#%K`J.FB)H<NFE7P3T_%
+MY[7='%Y.(X]V]-WBVW%%*7%R-T%+KJ)1%6%0B@7,DID"@"XIDN)=%+FZP;KN
+M.;KQ>]M]?W7V[H]69=/2<AD3(#)@)`-9`N5`8+DA"!.#%GDC8&@+-G37;'#V
+M_=^7W.T,$C5:6264WU>6!<I\E\HVR]D$S`%X"@7LA2`9I(6"%)*D%(9B7I>-
+M-5MTS;VW9LFT4NOHUXFT>5O]W?CN6W&;5MR71EJ5+B199!9+DIA*@+%+F`PB
+MA<%PXJ"KK<&.[:K(59RKNZ/$Y'(,G/XG%Z=KMJ,V&CH:&,8#!HS29H3225(#
+M,THU*P*`NCIC!3,\<V#EGN\6^\7O'7T=');EK.'+CR,JH)%-3,(618IDR("P
+MFN0R2#!$1F,68\.*G'93,^MBYIZWUU\OX^5<KEK*'+S:;-EFRIH3838R,4-C
+M$(+)L@+(I#4(B2:A-13*Y3*N6JSY;R_;Q=(XUO'NN+I=;<W511<%Q!8727,I
+ME)$!212%T`N0$"T@MTUT6XU\K=D-EYW,VSP>MKEVIJ%:F7+E<IHZ*4CH++;-
+M&"&C8YL,(I(R*2&D$9,$6+-#2M,T+HB9NK'15'8]H\\\_=G[_O'HZ._69.1D
+M+#69#%)D12*$,H"S6AD10%*("$X\H@LX@U]K=P]77O/N9[OT?#R9>$\.[J'J
+M-YH;-DTQ39IJ4V!*`[*3)DE"2M8%D-C(NR@,N>-A7>5VHGC\/N6[3U?A9[M'
+MT)X.0U\>NNO!R)<K"T8,,F+4L!$*A-8&NY8`P@(2N5UG#V)UG#\#WGK?:3?Z
+M?7]JZNK>9S2W3?GLFP-C$--$@;&1D58-L$"960U`E299J+%#B'$-O<Z7`^!=
+MWO'+N/D<4Q)K;"ZPX,<>*V'&G'KI@ACMXQ),$!9,3C<3`4!(LF*63%7%H.+:
+M<L3EW=7H]#7PZ'6PX\9CQY6G':&#)F&2DR9(,D51RIVT,)"@84UZZ9"8P@G$
+M)D^/P^.^9>0ZSAV<1OZN.KKJZS6S70X]=5)8:TK)0BG$U`FL#"5#6)#N!;22
+MNH;&\3QE$UFTR[J<_=X]-?M[9PG$\1Q3A9Q2SAXJ*1%DK(,A\Q98"PE`4.)#
+MB8,%.YCAQQ%'BEO:.'3R5O,>3C^0>5Y.^<O:Q&FXC%+$88J*"A!"&)A&3$@*
+M4DJ$Q(%,,1-/$F**LK%,5]Z8^(=US.]Y>\Z.A<V#BZO,Z&L-V*_%8UK(UM8&
+MTMH5F&LJJ*PK*5*$BL(P7K8'4D+`4ZT@I&06!A(LC!3O0>\43O-I8KJ3O3[.
+MG?'MX/>_#\X\T/-`\T?-IAPPP",\U&`I)YI'53V[A@%`$S@G&`SCG<C.55F*
+MHEU-0:Q)-<<,M?F\_8Q1Q[&O3I4@*4%Y?,V:I>`L*A?50HA"^!20+V\*9FO?
+M@??6-&`,AAUT(AWN=DYCCH=E>$K@!!)<#S%#H#H*&E:1`V6HA4(@(A)LA.5)
+M-@1U)BA0ZF4C@=!+0;<W=B5<@O]PX*#8:;%*FX''4=))*:;&:(&PBPV,0!8:
+M,U),)+`V,4B:ETV6U#IVY[/G,]GA[QK.77E>/)F3E%R.)R(B3)C".5@(19#4
+M0RAK:Y5JAE8:A4(50)P$$^"<34H[M/I=Y<W<F2O?P+%5?@A@8IA!(A4B%7F[
+M>"R<UL.9DQ)S((X&,(LA4C)S6@B!A(8)S7FQ!`P<T$0W]71T3H'Q>+I/6]YR
+M?-\4Z^2\.OCA;:3B8DX^*DL!2!\N"BDX`Z>4C)RD!A0%=*WIB8=,8A@O]OP&
+M.,SUU1#1BGK08)FGHKM"V"DM)C9*82T)%@=J1<"L@@E*`H@3Q"U0AA6$V,&K
+M2Q]O+8@3E0+)M8(XHLH2OF$B$1E)D*ASAS@*$YN>R,F.>P#4!4!0$.=B<]0\
+M'90IJQNQ3<[NSG?+NW>EIGU\NLKDG)D:U!89`:T)A)D3#!9(D4U6S#)E%->4
+MRM*9996]KC,CJZS+T#;Z'=RUNOAUZ^[52S*M!CKRP(2=LD,,(D63)BU@6"<%
+M`82*!H">9P>&D=FW);ZG5\;)S;//%VS=$`Y4,4-81"*(@1*1SU"JG.\Z!8%$
+M@L%(,#GPXP!4("B$@")2!#$"I`6M&D:U!%2@Y]*ET-W#>VZ5J%\/O^#;7:[3
+M:&U@R*38R(0VB#)4VS:@[5`4!5=5Y2'@+3MI2MK738AYF[=KMB=(1GT$GT"$
+MG@G#C$*0R<DPPP@D,,D0.W:I*+#(,4,:."RS'CQO:8N+L=V=]X?0UM&?"89A
+MCB0HB8JB2:X0UH"`<>*$ULF`J`I$FL>/A,)IJJ3Y\,!,*4*%&MJ;_=7(&[AN
+M2@2W'@^7PKKX)0H'B'X%(4R%`3-)#,&IJ$U"RM3-FU;"K.'@U.=T^\ZW1QF'
+M3PF$4TTPE1285=-L9"P`PC2!*`1TQBP8*+#2CIE"85KA5I\+6-WA<%>-XVT:
+MF'A8<,:#"89A2+!`PB19!A%@I,)#2*3@9R@,14G#3$Y70P2J1++;W[&*ICK4
+M6@:`*2**+0A:TRXL8PI+D4&%S(H#`+:J0N&DP,L9!)%DP%K:RZ68++"Q2[2T
+M2W15Q='4RMJKT.#HCMUX;>$85A$,0-R,"4B.E218J2$4@01&2`W*$4W)$G1N
+MH3%I!"88,4-U3=T(IK)<IUR&+3BAM7HMW#CCC$#SX#P=!+[X??`<?5@*CN@/
+M=HA.U;%JC(P%`-I)W;8J@*4!`>0J7P_,<=!KNUEKUQ`+NON6!8YO=]J$6=F[
+M=><>5XTIA=HP8&UBD$21@;4A&!M9*@*@<((NE2CR/@O91+ZZH>U0^[=L[[UY
+MJPTW8U[-<6'WMH(FT(;0-J0ML!(H;=MA8"BS;JHF4WS)EU*W^AUNIQ.O<8C"
+M;V+>JRK`V"L=6QP5@3`$Y&,!UF+@AR0-0@5)0,D.1(4B@HD,,E"B)&DUFV]9
+MDNL+@Q&H([I:#=%)[2-L50V6P!E0F=L4!0LF8RVDY&2@%%Y3EN9N!IQI%+E&
+MBG.UZ^OT.&H[P:NKRN4+0BE,,4:K"(B1$!$JDA9)SI&0YTA&$?<\^"525I:D
+MYL&+B)$]!++#6V;0CR/.--$4:%$UE::1HD(TQ0%"--*C"&%)I,)4(8$(R!<D
+M0N;F4,:V0R79*K)LVGLO+Q[UO/XE6Z%N+9<B7*%LPW6,EQ@HA4A<D!@"P+D(
+MDG:535088:J712Z-Q==VIX9R\WBTY_O/R>OO>CV>\.IZO)I-$'/2C8&C"I2&
+M@)HR4`MLBDJ10B0-#,-#/E'+R<E/>?2?1:^K7EEN-W3>DY,N2.+AR)#(AQY9
+M<FHD,$PPC(CJG)BX<3DN-W3J,W=TILV+Z/I^O]U\NF1KY1F09!R&0'(UO)2D
+MEA.1%@"!KM4"LC)04*2%`F%A2B)PGT#18%%"91MS)K!7&36V3VO2]+K]57O2
+M<WWGO?>^7WO3Z)X=Y;=YOW[T(].^H4FY@DG2[V`LC(;TA$F$I:"*;T97?.>#
+MTUZ-V[U+=&&JVXW;&!W4P/K,>#QUGV!0I?1]'T?(*%]'R"`'Q4B$T=HCMI*(
+M#(*3NF%D=4\,/=">3R9Z?;^SW>S/EUAQAPG`\4XJ)PZN+$L"H09)CZ2J&Q@"
+MD*)IL,,PH)IX>'P\8O#MUWQ^CWW%Q'$.0Y^@<SGZ#9I-DU64,W88=6)0U,&0
+MT8"D0,W2T(P%"+`H&C*S1P2F<[]9IC%[^??OK;/6^>^+MUAPG$<4XD0XI#B&
+M2,#B8%0BH!ID(`43301H-,%#.5=/2&CIQY:RSL->Q8M0B%(6J$M+;J*A<8L%
+MDL`7`W,9+FE0E0ERU4QL@6`=LG;(%!<H5>&1$,4R/;TW5?@V<'3M.?S]?=,=
+MMI5J+Q)IRU0N8EP%R10&`H%Q)C808%R%S"F)"XN$9=K&//F-7KXC@4X7@G<<
+M/`BIC@08IP`<`E9"R`=Q!)W!!)>"BP[EG`IP2[-W:O%W4TZOA^'U_5^B]3PO
+M6>'V=_H7];EZVML:VP*:]:VNA>)KDUXTT$UHA%!A->(%C"@FE-"1'2HUR]T&
+MN;LX=.SO.]X1N]CFY;CC&+);+;JA4N1EP&)4@R2YE,-)AA(DG*%L`*2L*P#E
+M(\M(RV\@<CDEA@)5<,^T%:DX.U6QC7#FNY4;6H\\KR*V'0X4="*"CB6$V#("
+M!@8H1`V"%9L9,2VZ,#$=9,4!4)=J4VQ3?#UZ#M;6H-*<13')G!2!.0"<1,)A
+M)@G&"1A-206"3C+9*R"'&TXQ1.$L\$'D[7A?/\.3IZUVMO"F:M1E4*145M''
+M)A80&%P$(+H(P-$&XTU!JEMJ%24)G]G;(+!D,V185)0TNPU=NFSM/H)U3KQZ
+MN##3UN_UF?:3H'AF8V/$W;[W4,NI55'*:EC)<ZB)&RA3`G+),Q`[6+(&"';&
+MLE2"$T8#HD311<ILFIM55%QDNR;4]AWL[X[\W[C)O\7)D07(4KD,YGRV89B!
+MFA62R`LU)(@"(9SD3-C<QBJM.G4"E6P6M>AQ,G1YHWN<VU/`GSE6>`&).GJ@
+M(2QBP!(I[9`C)-;$8+(,.);36@,GJJ,)#"1'2I-,!:HK1I4J0<WAP</,'/[6
+MK@M;]@&.**^<'&.-.2''K8-AV)3L*@D%V(BJ#";`,4KUI,$"C#"2LB`=;`9U
+MVU3K.M3?U])YG7S?#Y>^>MX/'Q9:S7KUUG&+-=:)#6C$@R>X8L4(A*R37`UH
+MZDUFOCFLXSPY%6VW9L#48><Z-[GWP(TO1AP.AUB.!2ZA+KJJ$4DAU0@YVL4&
+M$I&#`V,DT0*!L$@XN,&(IGR[+K\GH^5U]9U\)PCPW@O""X88&/"<'"`Q!"<`
+MP4C"<,0!D.%%,)*'"<%I()71B#`JL72$,`G;,!&[<U1+AK:MI=1C#2>IFF7H
+M(`I57A?FOIH63-$!(7LO8&9D+))8(H2,EZC(DS5I6&!#!8MYN!Q'<.6?8<%W
+M(WN-M:N4KQZTR3)$UZJ9281)DP*)*2(A-<F0Q81D-=LR$K)3(,NTG?N17)[U
+MZ_%[SP?`]=XWE>5Y?/Z''W-7<W)?MU>5GH&9PK/4$S@9XR,#.,!(<R*2LA83
+MF$1M+(SF]S9S8Q*<PJF_T>=N8K=JW$8C$XL6*;N.K,:%D,:U8-A0MD!RK1H"
+M0R6,D8&3"*1(9(I!@8V%)4QHP3'0.[L)L;`<38YG,Z7K-[>^S^IS?"OX7`>7
+ML\'N_2,%WZK9OW0WUWW>;]Y.G>"I;8;[90-[(,DWH=QA$@+(L*3>MHM#I:XJ
+M3`*B5`;MZE9JFH-_'(<F#)2BC???!+Q()1QYY4>`>*K$)M&*$0@:2;;8%DVS
+M:;5/+AAM#"-47;6NXWW^,\V_9U7WWA8%FQ8$2Q!D0B2)%B$02)2H*A8//8DG
+M/&%9*0.<1>=,)#!,+%DSH"YR^N7?L>'U>MCV/5N\W6W8[2ZQ+;"J,%B%I<)<
+ML;@+FJJQMLI8R%S$06"@,)B#*A9(ZZJ)1"ARL8=Y[]--.]WYXPET5[\N#G]G
+M:V(ADA@@2!'GH'P\Q]A1@1]'E141'R2@P(4`8$8@1D,S*J9E-3-6:HCSK]+9
+MV>#G=WN=+JV[=VW95MUPN,+;:*)*D+;92K","4#""%HD2*6I$TY;L[)A[O:P
+M]/OSUIAPCAT8G$8ISZ^U@Q,C5(9%M"9*PC(&0K("0F0!0*$%8F4!1,(:1HBC
+M"WNW.=_KW?A['AS,&&S#!L/P)`D#X#^I9?@)@D+T!9&0TE1$(P+QI%)4?(,!
+M"E++Y#[N)*NQBPX<*]K4:]2.QW_,]+UQ?&LB"'-,)`1WH&<#/,ZYZE0J(S.,
+M8"@L,\!<R29R%#%`$DO.5HH0WK$T&LZ.?R=[,?C_\WO-RS'BQFV6RVV8[8*"
+M`6BI!)+411`8&)M4LJ4D0M`P+BMI$QG4=RWGG@[?`?U#6Z_@'4ZO,*X-C@O;
+MPO+V^K[PO@+>K!@2]`L9*A+V(D4$)>BD&&2\-4=E*+[+S.5VD";F&41[TQ8^
+M?B'[PS*73W1PQZT<,$*&`/@/E($`5"JA!>BRRJ%`9"]$0@D+U$IL9"R-ZH^Z
+M00_OZ[YX>''C&+O?W+)/;M-!+#5E2'`X`X2CA!28FA,Y-$6`@#I94`I(9KHV
+M1=3J6()@L*H4,U+`+H:O:EF\Z[O^-S9_O!WG=6!V;(LQ\J&/BB-(S@J#'<'1
+MT$O17%J(0J=`D%((06($@0",A"$"F,1V2BZHIS!@8H8":AIXQ-CAQX+.KZ3I
+M]QU3.='1HOSN?D:,XYH7@S.R@#.P82]%`OLHI(%A`SK%C(1)+`O`SU11GSWG
+M(T&^+]NYN5>Q]&/[5.3JZL#T&3"Q^)3"(8AE$BT8U0QI&A)1G0`/0=%QA)$A
+M@8&I`H'0:K"PZ$*PO0C.@>@]R?\C+?EOGI^QRW,SY6YN>I,IE4RRJ51=83(8
+M*023*VLB@,#(XV@H0HBL51/!*3Y*%2D.EX>6.'@=HNKOBAL41'1I4G'`CB(X
+M$8:#!@9HB08&>E6$0*K`9&DH="E)WCO!YA!.]@N?(YP/J.D?!ZW&F9=:LXV'
+M&W$+B.%P#1@@*&B,#1(P-+;I0"DK`$FB$D.(V&P7)-B^+PW>5M2][XBU9'',
+MUM*(:((:#01JBH2B7,D9`L$1!06022T48"2Y@+0)%%#14M)N%NYMB87'=9ZN
+M_[?WPS^7Z?AO=/+NY=Y<."G4J4JEM3L\'4=3$'J+$G4C;0.HAU'N+)9`JC%D
+M6"0ZA!.IB'56JAU([ZG2=._6['W!^'[\;>CO%QO76RRKANA;<#:TA9=)@C`2
+M2X4&"!+A1D%D0ESC9*N1+`:IH"RI*M4;)U!U/3=2YX&[T=99_9F>&O/Q#E=G
+M%,]-L,S!?(UQKZ^OJ20WQ3U)M<4V0V4P5*-F!LJH39C(R!LCZ^@H"RJD9-D8
+M,=H-C:VJH\*<Q-GE\3B_7_6^6?J^7@P67>7.N?F>B%33,!RY9%$DY(R`R&0B
+MA$DM&4A"C&8S&KCG/.6/4]GD[O*?+^]Y9H\SW9@^KVGH].PXF'ZB_@_/UN"W
+M5R"13(E6XA-220)(B"1"$!*`$H"(=<0,(4`ZV(BP$A.N3K\5QVZ&(:A9)*TQ
+M;<IQY,FMY'3^@ZI_9^_'R!WG5C[.9B%+H8J=,4\J93C%*FH&)(D5#>B!O;2&
+M^,G&ED-Z()!(=+`0!4*E0:52H*@VAWFUL[:J-K9Z(R;>YW"R_BZGD>L\ZM\T
+MF:S^(?2;?>]EESR?J.QHYG4&)/$'AZUFV"+9-H@I:-FT&%"B*2"AA-U&)!0$
+MDW>.E$C`I%@,..[J0L8!9)U;(Q!,>/&RWT*P<_F')^>#/&V]OF%'"0YM.EUS
+M-=`61V5C:6)[=@@&R(HI-3(6`9B5(5`%#4&4A0:AJ`<\QMV3(7\'?]??W_?:
+M?'U+.MES%WQQ<76R9J1"+C"!Q%>#Q0@`NA7D"*'B%"(0!*(_9-#`,#(5),R.
+M:B5"D49F-LW)?8Q1!,@R:@QV`O*^B_]_G/?+TU+;=E'`XX'"`J@.%M"0@629
+MXM(@P!SJQ96`4GT[,W"30,&A<#2,NNDN!VP>$>*871ZFQ-FM^5HCE.I5>6\'
+MV&]`^CP!'=E3NL9#;W8V%1@%ML[I3`X=3"P-#E$$(^&/$/DADR8\+L!H^$R2
+MM=A'=I%O1_1?U^3[8*SS!,[:;FOU3<#-29H:I)F8D6$*3,J]HU`0F98R1D-$
+M8Q(NQD0[LV]V=V)2FW;W9>SQESJ+%9$74Y7ZI]13IJO=[WL?9YAS-KGU,7+Y
+MN.]>S*Z7M0D2"N2!6,H+V+(8[Z6"0[%U4A8!JB/<;(,#L)(F%$"H*Y))"$5Z
+MQ%>NQE<>TEEEDJYW_,Q?FL.9X(HT+:YTJ[DN2ZW(`JQDF12+&#"*9%5,B62C
+M(@9X9D@S.6T6?`G(^(/$X<L_%[[3\%FXC8!QYI])0[#U(SE-&@C-8:M2)<S5
+MU4N[MA!M;";0L-8)L,8S8&PC-ARLDZ455@DF_'4&&/AIVL0I)VA`&2!2!522
+MV;=L15CQ.F/+]Y\/UOKF297H>WC7,RIDS,S.5V?"J;8I;A$<<Y^?WI2SH.9G
+M0X&DPL`R8(\S`L@6(Q",CHH1B!H4OI-!-#G.N<XT5K<WG5SGNCF^T\WI?W]N
+M.^Y9F3.M5S,'A^!S57B)Q_(V:V<9,*2R5DK2L`$C)2#*P![[;(=^,ZT)8'?=
+M6,8%A$AJ&'^1E@K@H"*Q05PBI+L`BL:YYG/[MSR_4[CLST?0;T?I_Z,QW-S/
+M?S3-^#W&C1VYG]-+]6PSEE^<&,&!I(%-0#.+GJF&ME@'MTAJ^B:`)`YT$YSM
+MXISRMYP]ZO03/IU=Q6ULW21TGT*EHZ)H^?]/0.P'D4CC4B.'SW3Y*2?UC4PZ
+MPL:&%A!C""#"'>Z$.\%PPF\8+`0B\3)&!OB#.E!FIK,`UQSY&A\;CHS,.#>W
+M_#?;FR;>8>/T/L,I*2&C1(=R>OZ^0O&XZ/;FX-W>'I-HVDVMI-FD3:-IC`-H
+M8,8LB!':H7OL"R%&"3OVV=X.\>^;_;Q[#V>`>]X/7^H[Q^K_'>M]B=\50Q[<
+MY=#9_/\M2D<*:?$]/N--0`.L^[4!Q.A.)G%R/`XQB#B8@`Y2.$LAX4AJ"ZKX
+M7!"HP1@'A13PTJQ8,DE8PQ3[;[JS4P0E8LG`R6$]T&,408SFY&-0.CI31)C&
+MBG4'.@5;M/=?EU3>C2YU`;QW!IK^E)Z]2%50'T;'<_':SGA6[:67D5L8ED$L
+MH!E80)0@ST!!((0"4@@D9)J`BG[MA6\R3<L:$12#)N"J&X8T.&)R<H<UM?Q.
+M7FG+=6O`[_KW>(:7091!;_.B^16,K)$RDDC'1&G8A#Q(BA%5QC=ZFZ^O-K<W
+M$MFY`W"(,@[53;;&5)-M*P4I!A%+(;:(NW#93WVYUL'6=PXUGVIN]7!QSCKX
+MGV/N-C)*H.J/'*ZE4Q1REE"\G^=K**D>#QY`E2HD*1,C;F]O.3*]((<G`G`+
+MAB;SLC'LJ`IV5*R'8R*5@6`=B+V,E81(%42,.Q(E[`]A!FWZKPV?!G?[Q^<[
+M_Y?X\%FL=J[:7"WZ:SBH/U"0>9;Y9)R>\OX5`BJTE.2[A`H?=/3DHWX$I(E%
+MM53ID_`*X:9C,R?8T&GO*'/9XX@1_!SP>RC$4WP,%]+XY!*)?))`%])P*D&$
+MY?!5>SP6260F`58P0YLLLK@?=5Q^QZW0[Y>3V>?;GKHS?6PH@.72DER'WJ1%
+MGXH_C6;QJS,BKTA2UTT<67=3C;7<&*ONQ2FK)')M3>1HZ5W:$+S>?GOS1EU7
+M+_7P+'F8.O@&QID%X['6()V+&%$PL"RBE3G!.ZYJ0&#S6F1"%,1((84Q@'X/
+MQQ5ICP/&VC!.U,[!D8X5=6__5G*"&H8`T5G#4.HPLN.C8<.2KE:$VJ$1U\:S
+M*BD\[GXBYL-+QO?"<\7%^T0"4G/^M/)3_B^S]TA16EA&K4!H.L8[+BOP$SV#
+MN*AFM2X7JG;;W=<G<U,.=R[-6K!^[J<9QX:4LWIZ8D];["UY8R`=297+.Y^V
+M^3JR]F._W/LA2GG/LGLSV5GLA/97I0"LJ*@C('LL@PGVNM48'LI\>E<?SO:_
+MU_$]J>T^U[7M?*]KLX>W:;EJJ.;$=9QHIF[O<ZUVOL4U1)3S)J'BS_?I?C?F
+M#0JRS//R;B?NHJ"TDG5,XJ>+J?G+G\?X].@X_F5ZC?<5HI];CP";5'!!K0[O
+MIQZCQUQ[W&WMX&7<&X8=Q#U/-A!:DL1/?64(8<,^CLLFI)0CZ@'94P.*P,!"
+M@XGPQQQ0D(LLT\IZA2^^=CU+511^)T=?+Y4W+R51&&;XJWMCT:;9X[UG0D5-
+M@L_]$U-&P4M?^[&J\J$QG7NHM>_-3,@/M'XI,]8NH:UM77%E"Q++>SS\GEO2
+M)G1^$']+Q=^+[`8QZ5/=)OA<D:7AXCY\3@E/B8]1"@WL01/297UF^]N&8?M#
+M*0]\AVE_%-@P.VE2P/@IC59P!QXX1D6'0:JM1`TU&G;B/0U<=FU"@84<^:K5
+M*<K]V#5H$WEB*SPVTN%1P]"=$U#'+542H^]\54?9;$KH>D8GW[<^HJF*45!8
+M/XE5H$IWUK1(Y!=6!FE8CIJ=F><]ITN/OZK6?!%4I<;/H"'DT!QTW\>,;&(;
+MJ!TD(,1*(F\0C$023Q^K3#*J2,">8"B`L$DA#'&(X&!BA(0IU<A8.%?8.$*S
+M@\C6]1/8\%;4W)N^VQV%EW;)&?6/O7<BL>D7+RB]2KOLY/\L`MPF^%6\;P5+
+M!JLX$:-M6W;]U;,)XEE?FAZ5KZE6=TR]-N64R6$3#_#[G/\9KCNP1:(AU./9
+MBG\D2Z?(&]:?MV_%\7Q<D-K&/K:PJ(,1R(DAZ@C'J:1`5&**+!).HJ)_-KY*
+M2R!"&`,0BS&`BQ`@HH1476'&:=049#1OJ,S^+R'OPQX1#QNWP(7U2H=Z"*RC
+M%^0\D_$^N;3:.X4M!:JKDIPW<A@K_:GG#^=",_FE:90?92]"ZJ+!Y<.OB'[F
+M)\TDZ.?5DJM\;UVGQ=7D4)(H<R8*,M6MDR2X\>)I$W0J[K4P)O,*(46RDGJH
+MB*1@1]2GJHQ!2"2-OC:@C``XH009[LPL*1]BA-!!C=PK!TP>P.N;Z,O#\88J
+M&=[]?R47F.05_'3\*KZ6&S<90WQRFJ3\YP\2V0'85ONGK/6A.(I#$(DV-.=N
+M>8O@AAE/M02W+(>=JD@Q`%+D:/$H4.0+[E+HYVBNC]34KW)*&5=I5[=W4<NG
+MT]C)D&0"9D3&S&HL*J0/@BDA\%#X-*%24(4&'9:LC)/<XE!0A"BD`HF-!C,\
+M:0T=[[DWO%(<_D^37]P.Q\O?L_NTO0^<Y\*;X2'5'_^[%MFY6&1]B\@#ZCD,
+M-V2TE=\:C.+'[5EO+*VHN<B<EK[3!76C:1^#R\KYI+@_0A_"<J=SI:8]&6UY
+MKVAZ;5_!%/E_9?@6-7BW=J37J:>QG7P_6SI_LAZ?0`R[D/SOL>DA['KSV#RZ
+MF'L+IUV'L`"GF/KJ/KVR"`5FB44D7UXP9JU7']J_[/A':/4K\+ZO\K]J?P>#
+M'^GH_GGQX05G5H'G4\]L<W-\<.`*Z*"OQ)IHXF3\2D+[V33,J*GCEO*:W"!1
+M4(LPB%@I<A<_P.#]L=7_%AOQ'+8J29/TR71+7&7_,IFW7L5YB?>-"7^CZ?-2
+M1R]Q62]"--Q":-2O=;YU41UM?.$6AO-8!_!QK.BSXT"?H*JW>DWN?<;,NUAS
+MHFQ<V;EZLGG>]&YRSA\/U)_3\@\=>G,&,+.S7B'9;&@YW9/8V45`]@QBHD#Z
+M%B)'YBU!8PD^A7V2D*2?0C#W]D&5!C`XP,+V;$V@WQX#&0FD)T/8G1.Y-C-^
+M:>!T?MG!Z<5V(G7QF7XB90:MPP_`P[_IW9(#ZS[S$0>T([/X+JG1BX]^3>-:
+MX&;*'+*FO.[?SL9BS%G._KD6I^C5*._G&0P=>=3%96Y\L]+=P8/3YU$?!<E3
+M^($MN2F=C2SZLP.ZUWE-8&G-O;'+J:'4U[^\B"G:\&+_@>?X/*LX>VI;M0_*
+M[5RV#CX]G4Y'?[O"T/Z!<.^''WG.\;L@]D-P1AT/%G34#<3Q1Y]`4V0DKJTQ
+M1$121)/H$^+[6,!QI23S^U0M*OHM6LP.('P4S,'21\^`<5&?.AAZ#CIL!%-F
+M!LY.#@GL._:L)2/YG<Y]UUH@U4PTQP,R9!M5R:,-6V_-&6]*&ZC_WM!Q-Y?N
+MK3,LROD-@GMDMR)]OKZN8.YYZM%.F7]V9V(.?I>F8O&"UTM/LHR%<O;R*3H,
+M'$F34)W5WP_ER7?;,"QN^8Z;OF5FJ#AZU&HO(C##9?;IS76XSWR3*N$Z:F%Q
+MX9^$+J#[=J%?@+^/J4W^L[\[P[XB?MFEJHV&2S#T^2;P]<AI._O(CFG_&*8_
+M"7>*%=DGIT:#X?ZYYC%#RW"ZG<?F2*XOP4D;/_8OT[\'K":#R][(]7G@L&IX
+MH4LS,+J<NVXN<DL2U4KS]%OQ)P<Q,#NA0V`T\^+&U\W[W]3^+/QAJF[[WTSZ
+M7X\^J_$R'U<8W%Q""$)@5504@$%A!9`15!9&0B(1B0%D"+"08'TJ?5H_3-D9
+M)JP%!A[88`<8*A@#`P.,`<+LO2:](7::\O3P_1\OE[?7WQP#OZS>:-=PL`\H
+M#L"B93=3J+#1(REMQ5K=&"'RBHM1Y\$+<`SP0Z72HK[?X-@5Y5\OP4:Y\ANR
+MLV1@8<F.V?B%.IN\>O[RY[_ADI^"8,^.-56_^\JB^U$/ZN]N0C^H-!6%88H,
+M.)BZK/-)G>9-@R9_#NNML\IS5H^/-!RG&A44_;(/I].P';K[QYQW%Q&5V>?_
+M;F:\+MG7-->[9>MGI@,#;NTG74#&M]CS=K0MK,[O$`,\*WQPVGXGB\3:\5U:
+MH23QY)A>^O-45MF@\M;UIK6(4X"G<33\?>O]_9.A*+Q[K(S.5M;(MP7:GT.;
+M4'&D.@:S46EA'N+Q9NHPW(">J871RD_*T3O<.P>*K_HIC9GDG]9MK(/<#F%J
+M@9OL8M)F(A>JC\7I-)75DS9'/U\8.;T%[`9<H,Z!H*K-YJ8Y1\A<F`T(8LM7
+MGA)&,0$H1C&,$9@GURJ***$/KH4:^S92'XQ,"_2_P,!@!:(QC$*TP'T&![1Z
+M/1F-HC&*YDS#@-(O-&SQ%=]9Q_Y&<#7<#3'OWTXGZ=)[\1MZXNQS-]4<)-GV
+MQ3Q`V$3ES;;DE+>W<C/SM@X-VV]*74=Y+?4`7=Z-J@)\5S\)HE7VE/)A=U.[
+MN_SNN7Y-F\9K9;ZD5^9`:+KG<\9>#O1UE60@G-7S5RW1NTX;DA:]H+*WY<)(
+MQF-]<J]0&DD(GV2*@PQ'-MC9G:,03FT]%#LY5#[J+CFI,KYS]?W*1D\*CX>,
+M(FH2;><?OX.,FJ2?=?'6S6-`B&'?/:&!/"FII]AA802S5-J**G]W0$-0!2DF
+MKFSX/#`=QIH7,/\:I^XQ$)YCUCT(]ZL#[M346HJ,I2_LH&4@ZQ=7G&IGX)4E
+MJF0%B/A5,>HO:)NB1HJJBLK)I#Q%1=:82-D:.,ZRA(E27/EGPC?;%MS(7LZ4
+MZ;]<]6NDWG2M#"CSH*B-G,-(AJ$)'U(QQC-YX@V@B1&(P]!""JL//8!1"9D0
+M]"O@V4L(STR*LG\=F.W>VIAL_5_(IB'RXD?91A]4S^&?)^2?)[5+\A$#P3=O
+MYBZ0]KYKW"N-%K1B3#/ZTIR9K8Z8?2<-]RR"<W;^JI#W3Z=:J]96YM6L&F;J
+MPW>5YY0J`G1N?TPW/WAG2=ILJ#FIQ$!C)ZUK!$H"_Z%"?\VV6O_@/.IQAA`/
+M5V=Y?D21G+"JRD%'45&<US^Y\2ZEV9LI30T=NPFM)6QB'@*P6_E[NZN=O;T.
+M6T0QFG-97`NL%FH<^^A*7<\(G*&?A5PQ%1K4K">W\\&G)7V,GLBU1Z$QGR^U
+MNL9E&EN#\2B-A-WEF#15&?,+"#_+>S-O*P.7COG?7);1GP-0[1+G?MW_NA.0
+MPT3(-8GJ,R^R$)N[*=EA,VLS53L.<HC34CS[:%,*E9)@%&['M<0"-0,K:3,?
+M#40SS7!BVRTWSV$4K7CS.7P-E=1\[&A[NGFLPE9F<H1GCW'%$D\&O+.4%***
+MJG(][KWZ*^TT->X_;_<$^AX*['$WO?,][[H^/ZRR?%$9UZ_:DGQ8JF1D#ZT%
+M8#"'UJJOXNU7ZS_/<)'SE2'A9!"XQGS1#1))!!<(`#C$A`T0'4,+,&-A%PM(
+M'NWHN!HL?0&?I=<Z@]18<?PT"'\J[M0ZNN=5=%A\=K,;^`;:GS.^2XC)&0E$
+M]WT>,W7`S]M<ZKB1$H$-_DQNQQKAG'6-IF>/N9S6Z"-X!@Y3G@V?8VCW?K+8
+MUZABR2.V2LRL4=T!J4(]?)\B1CO=8*Q;\J[*\_#R@G4@5C,X["?OPP@S\BD>
+M^*86+UQ87_SS03E=_[\<6;_0?GE&^:[?EXMOC4T?[C.6,WA_7-^N+#"^X\W2
+M*N*Z(<6W5;#F5K#V+.)QY?-6-8"5OQ%Q?I1ZL:1]7ZJJPV*`''9"@4=E,#+L
+M8!I75BTTP:(_!OH_"5^)4C;1NY]"LJ),CEL9I\#@+OHK7`#PT47>Q6%7<<-=
+M8<A9RVO;Q4Q<VZV+GO3^$%V$);7,VB3B%\JU^UMA24L-X@=9!3/QE;53WS1M
+M0*;4,"R&F1FUG,/7=$&,[-,#WK]74=:V&-IKE8'R0%BYK[R6G>-!#!3*M)!B
+M2F1^/XQP56^Z9=#E(B_,PWN@.U7\"NO626++K%8769KM;`TFPQW0!=>H'(9,
+M#9@'CBU^<EGHIX^"&U3GVP\`,<&,`8Q$/RGV'XCS#4Q$`]LGR/=PU8"D)B/?
+M82D/-3ZY416?[Z"D/H_)A\FRC![K`6?@T?EW=$^:_2^5]]YU5@?+^.'Z:_'/
+M<YH-MU(T;K(VAVNYYJ];N>>@4*.C1X078$XT4N_@;)+S?2O;]V?>7OAOA2)8
+M>*.+JES6;(WV\_@+?UP@5G)E,!^@G*3":[L"T5RF,#@BIK'?CF#=IF+I(HUI
+MQ&'?:!B+>,$QGT!C!J?@CF`L+P_>*X"QC9@:58\1@.Q/O2VMR&2)M8_MMH.$
+M[&A8-&.[E5?"T4KG993<-<(RR-Z-!::Q@&L._;-9?`,#K[:+!P5)O,WN,^IO
+M3>24)IS]CB[LZ.;U=?#(2%BZ5X3L.MKVNTQF6UIH2KPAZXAL]`1_I>!$9#Q$
+M=-Y/-BX@NC+ODES$3']Z?6J8T+5BNMY.N?,?3G)#N^]2U>(SZETO>'SE7&E\
+MA$YMPSDP,,*U<<S#FF@G"A[3U-PG&-!_K50!W,L7@NA^C&/,>CQAZ-0_HA6C
+M1R)V!I-3^NTT5C;(<3@V@_H=Z;$*=10AFUU@I?M#^I<%O%IP,#++Q;[%?BAM
+M$R<4*?,[<V)F0.$1=A"9GA%Q;!BO:[&>D36.,,#G.,3PJ:9LW>IW>*C6`8:S
+M+["BV=P-9?/%HU3=4S`->/RGH*X,/D??G-AY_`L,?*RFI^79U&-B.1!6$(Z"
+MGVF"NM`75`?*3.9[$B=+E,L'DM!QK:>-K-P<I:;Y!1B4MHG67F0'3;G#&F<I
+M29P%%H`7]F?8?E/S],>Q]C?SGUC/(AVWV_Q_LI]D_+4GZ/45('SV)44'Z]*2
+M'[%"7]L%BS\"DLD%#ML/G62P#C!D,1'!,8B<]^-^:M:R4(4![.FM!Z#Y;^\,
+M[UXC^!3*OD/!(O;#1;K8=QH,#LISY!^"4><5/N&77I&:[I4'&\\"S-,QM'5;
+MLJSY/GA4'E[]YLLX@+]>D?NPF/02AS=\(P1>;D')55L&@UGD*\P!!,N6*F'9
+M-#GQ_!&I>)3IW#';>;WD'.1G;YY)'5#\U8]CRE;@6Y:2]Y>@LVS_9O<'M4N<
+M3P9FS)PKX6X9-.\*$(!Y,WW4>[1796#-IJ2?2"%Q/_C=O+55UI(X[ICO`XG+
+MQ8K*@=D@7)H?F.&+=^IV-D+E!M;5"V<6PU]%\=/Z&%#OMS]L`-88.C\7I[77
+MH:*0_9B7>V/;(8,*/^>1.ST]1&+QSSI#=D].F#U;>",^2(O>8#M-YI/2$Z&1
+M;R?K=.@,R7UP@8B;-#:]\QGB/XC)LHV8-$NR#G4RR.BP\?C[Y-](1,&_G'IP
+MG/`G./=A>:IAO#"9/7^%VT0_4QX$EH@<[]QCPH]);ST[7[5/J)]E<L-3C]6Y
+MO)O,O'T;8RW@],5IUV27:WWQQ`2*EOU1H:_(5HU',_7ZZ;R3W&%;"8,DO]3!
+MP1"].0AM[M4`%.YDE+R30B(>B_6\DC=&V3PZ@SC.81#:^D42JT/%;#U%3)\<
+M0"`OFE&A3H%<N[QO.;#,\O68.V6;`UB41##J,QQH#X37$A)DZ/C?%N]F-O\I
+MKZ:&%;L]R?`V]&=-I6@Z3:QP3YPD=$27*.P,#9EMG7Q`=;P&_!%=$Q@)2,?Q
+MPE$:/1JBF<$D'B-H)6"#]_#70:]>+9GV?@"`HZ17?R3U?#6C+H^@\<S115D8
+MR_)>)$:)<8]Q!&PXH&NYL;!;.DTI*7<Q:F9)4[(U9:=9\_$ON/K`@(:)[\;=
+M!INQ%+V&8`A7F9I3BIO4U$-4ZLJI<$.!$+^BE:>I\+Q:=;Y]O*2S*.594W8F
+M8B!%$9\RM>*:,':\!H$[#Q:TP&S(L(DXL>?C'$_F('U/:=4<+:%UKLP&>!L@
+MX"Z5E,\`_&,)\P!'EIVJL8(P)_<0GD,XKU+*1)]JE3]@Q83\WK4?XG^MCJ!Z
+M5#OJZEFE.W$[4'Z"?;6'XS/`\_T,!_50[F0YAD7#R9P`X6:L@V;9S-V<>9P:
+M->LR"$':8UMS6OTY9.M,%6:%%KX<J^29/V*`'V0+^[E/H-.]8$IJ0V,3Z:0R
+M=\MIHK\3AV,]!^`Q:"YK.[VA_/)D,X-AN6/CVHWK<S=V%$%,R\3.>75H+P(4
+MJ/E\WS?^<^)8[8+=IER"5WYCW?:BC?(50M_E1<MU0\(#KXE9&"YO%8/O:-67
+M(D"BDT&#<NE6+ZZ4'^[YN]MZ14N?X9]1\IZ#^07L7>CBD/=EZ/TD,D(/H6&*
+MD=>:\3G3<[T&K.EMG'FJ[-Y38'J/*OPHS9:K.MV.I^FI^,!!JKTM@B16#[A6
+M)Q!5UM[@M!I2S-I=X;R!>Z)._Q"H]J!`:+U'@8[;EZQVY3"C/7X14+[PP#I0
+M'R'L3IS_^["D$SQ5F-?=ICG`/S\-4;)KH66.#=9>T-OMWTE[=Q4.'@?+B3P>
+M8H51@E//_BC17&A;UX9]^-#_8PN]JW(Q8XYD,:"]7_07=\\DTYN(;K*HX+SZ
+MAHH..,&B5$VPMN8,"%HQ%ZXEMM[+O+,_QYLKQG+G3H.$-KIM4>,3:2IK!Q_.
+M8!5XB<Y!3L:S*5Q)X;5$X0')HQ:M<(;$?J'N(QLRTRIH9H"+,@1II"8:RRJ1
+MO+L(^Y?6G6%*[\S)'`SK4*^RX[9GE9I77F0/-&Q6YP.%%[_!J9@T7Q=^97G.
+M]UHMY[PBW@G34'$X^*&%YZ^6N7$UI#LU`CIR+`>*5C=KVS`G`*1DH6B&^>(F
+M4M#.L-Y*[FAC!'.5O5-0Y'5+L&.TC[0X<]7H-]&&A+]_5&FO[CR5C!HLA*!I
+M-N?KQB@_ES9Y78I8WGM-J-EU3N*3]LWHM][SAH<]F!9W8XQNX)^4AMN6K-%[
+M4ON#XJ!;-F8SD]-3D3BM*@A%F'1YW!*02JW+X'-N(M49N*+A&L:PM:X"IZ:X
+MX%<L)PDJER@:'8%K,K^$0SG.46FZG7<M,,_``0OT7_6L,C.`=94.46)?^-B`
+M4>]2V-`7'JCG&R+/=F>..D&:WZ89_M\'TTVFEU'-[3%E->6;XU-K,J!J!NS5
+ME!DX*%I1;WLOI3R*(LV_-\LB=C"`L#"`8K0NN>E)CGYASQNCXGW8@<\UM?BH
+MP1)<?KM!3'.T!!7VZ=Y,"5;(D@V"D!IF0LVX!PNJ6SK%\RH\:R?M*(PU*&@P
+MN[\81&T2[I"-U@%R0@#`)04H]!H`&_(_OA/(ZOX5DU0'[JOL?2T0_@H8$8JA
+M/8I/J6-"#/6H5W,5D]U$^CYE!=@E?0*/>^QL/<,Z7]'=^-G]N?Y[/I6*'+H;
+MMZ[X#U=X_=3"!O0ZQ7^3&[=&/I]5`!OIRP16/M1@.WYHES'A;!X:KIAW6PL+
+MW]SO..`<E_KZ&=(*7`QWP8S1:2RKHHG2Y-'C``YF#621A$*"P/@^8"#]]DU4
+M!S[.!L:#$,>/Y1AVBL389V6:]C0X1`:J%JWKEE&)CM:W=&P^7_'F[<05#O^S
+M?"[^DGR^(FB!35P"CWLAM_(OZLQ6TFDM&W6F9EAP`^5N&3%:7946I%#_`5PJ
+MY]\PP-VD6VSZAY'YD1+M<+_2^#$':4.F_/J!H?KML?!T#H8:`X$30]SDW@#!
+MA+>"*3H:+@FBN(\#:,30Y[I3NR67I->C!*J1K0U;EWUT0=*:_GQ_G@KA;ZK_
+ML,IM7E=E>]#K-_D-D+3#51HABC0+5:+M-FDNZ$6MC\K_-VBI_0-<=LS"TM18
+M?UNTT[]$K4]TGB&R%"X\TV(0Y&!GRR<\=]('37I$V%`3'U.X('US+_^C>;M*
+MNTC##KS-6,_SX0\3EA;V:E#B'!@^'N%OZP#\#UA5J5YDFX^+8&$K:A^4_U*M
+MR0/-Z<28[[754/#JC@V;KG5)PC.1*Z<X<?FO=`N4D26@^%966B`M;N?%^'<4
+M-.M&"/[W$,S%<^C@F$V3PO];J,[A31XAHN31R^5FY9#-B_[AKC_;7Z:X+D5-
+M^9\K[W$(QS@5B[,#L\8=[)TZ36&#2LE7X98T.6J5?V+I:;SZX(\ZZ;K8FP[>
+MP:@%I]/86BI*FA>+WJ`K6PG;'XZ[0_LD`=_#K?^"/WU0/H3O@'#-:,H*>@!^
+M[L#P"MAE:UF1N?)Q3B7IU;'5,JP/^CQ2EF<'H<\L7.B?=7D\0@?3OQPILT(E
+MJ%M46O3_[1"_9OAB:PFR=`T9VB]$1\F"J`AZD>0W=,)@M%:5$''FBN/')CXI
+M-3[_F@Y]=9Q`&R\^\-CG#]\@U,!19S0UCA:C`;S6LDKJC,LZ^.]D1#C`.SSE
+M4S(23!(R];LJ9)=+[O'3/=]Q5+[E3UQXG<_#U6MWAH5\N(&.+2U/FXP"F8N2
+MK>"I-YY@"WS)PP.:L_PS^C"@3AVU3>%^NS.T2[M158(_O/'8RI*%X)W(?O-%
+M311H2/&>0/!Y;UN.#RKN]=ZB0+"P%/1G-05OX=:;)NVE",$PY0PX)4D9R@'6
+M\XZ!05/A)9P/O%2XT*7>7JWVF:7`TCT!S3`\T=Y5N`+,Q_$T*,Z4[Z_2+72M
+M-@-?J[\M:QFH^^0\/M[VB`[>X-*X/L[^/-+.6H+H?#G&X)H;RHJ#>_SQ[XA^
+MK9(GBR+039BE)9<"V]0=+U\$E5M.B0.3M=Q;'[ORRDF\SI"+TDN>_;Z6!Y+-
+M/2F2,AM/SW'>+CK`B4^R:N6!.RCK8C2N1V3*D7>?CBX6(VG!.OXP'A,].!"\
+M*T[,VG*-W1W%N_VK,+'\3"7H-@:PZ`)K9&4\48PJXP+7KQODI]3["<$1J&\X
+M:K>TN#/K"W3J7BQ&K450P!+G>#0G+2>]%[0B#U)>WR$BE/:8"]"LJ6OX_.XJ
+M9#9X]O'%4@<U@H6U5&DDA?&(.\&XV7B[^NWQQ%`9Z66M(8$-WI=_+G"!"`M#
+M"`5;[0VUV:`H_1!FBXU``.9@Z^S(9!PK)\"QV6_[F@^M]SU"@]HA_:-)D/:,
+MGSQ4]NY;*^`U(0/H_,_1P2=M`%@())%_4(`$E18L^6:B,`%@(PD%115148Q%
+M51480`5!8@$4@,(;[V60,"@GZB?Y&QV/T*)_#P'<Q&*B"*L^`/;*I^1^3];Y
+M"`%BI2=T2,Q@8&,1M2<20QAY>]ICX+*/,6M_S'*2,GFTUG8\9(##ML9Q3L'^
+MOOZ`)`8O_>@X$^L-<:F^]HQ?S(-W=XT0N]MDQ)+<9@E77VB[ZNR"07W@X44D
+MI+P"8_)CPA$`EV"&R=]K/G`!%%:BBE^*N);6US>=77`<WWR&3,1J$AE3H/][
+MQ]<X!%Y9SA]`*CF6AL:+/&42),SI*XEE7<?#*Q(K/)QLZQAL-$&)T23.V_5]
+M/9<^&`/H+<7F^P_D0?_TEHO#FGE4,#@MZ^XTW;IMV"=>)/46)(*Y_'[A%[T$
+M223UUM4?$JX"^C0A_#T;U,@!:W11GF-MM76UAV!`L\RB(@];9_DTVACSQ%#9
+M>U;ZX9_<#^SP#^(B0A)S+,)%39;7SV6Z=V>";*47CN?AR?82O$-%9IV"J]A$
+MZK7ZZJ2')\.;J`?!,6*RQ316:^O[?H_1_K?W2D0A?5LL=P'B("*OI$H_7#EG
+M@]+_RR:%0_G?C:_4A(O!]C^[;3&EQFPOJAXENW)3PY45$,<2!\_/`&DT5\;*
+M5G]\KX49P-6[S8+;VM)K1E&AAW2-_/$!D5(?D<OP3G1=)_2EK$YP%%5:J)>:
+MW7'R*S1Y_D$-!;..@[3OW:KCMO$`M',%>X^O]1\OO^R7BRWTA^JB0_I"0YF&
+MS1HNFC.;F$_Z_4B*0Z6K\3CG1G/Q@^N?)0\03)L)Y]EI,^!\_;D1_7+;&R.N
+M,CN%F^-@L1HLY/Y;,W?X`&T272NQ9*^.J:3Z0G,/@K;B8.P&P_R[]1G6S]CX
+M2L/HC6Y/<0HP&P%;BWN""6_G7R_YZG#1@.!>O4<]YD3E&Q9S'3J_VSUYLMMJ
+M)#"BRIEWN&RV<[\74L9G:K.'`-*0.Q(]'\Y#VX'R39&@]8UFG%W,+Z:<"[C;
+M'5_6,8YLT!/;2$QE-F_N0AC2ARARL%S-E+:J'*MJ(@Z<'#A77>TPE)33FR=9
+M=^=C964X[T`Z_RD[!_1P/0AOD'21@/8W94&:.U4'=&3F:0J]*3I_SWX7)'[#
+MY!^J*V_J"_@\9H4;UU9PO99[92.#K[VF`YM8)XV%SY4V]:(73M)T@TES\PY'
+M\@K:T^"6FJ9NIP5M8X&@.?@=@P@#UL:!?3),=!RZ>]^AH24S8&P20?Z[6+^_
+M-%3_Y<UB>[FP4]^#F-*:D*O9N.\20490'$F29KM9G$D%\EWIOQ#.M;DN)5"C
+M^B`$#L\O.M"BI0.*^S9YC!:;4+SC;<:*/D(,Y'^3#.%/_FNWV@+T8V/*:9`0
+MJ?IXO>WQBX5/_`R"D367BP-&<&_I+9(,36'BG9H_?+"^^R@#"XZ[X.$(>`W&
+M0TP$IY:$V.UZ<^:'F+=\HU$Q>9F9+<S9T"AZ(XG1-<*6/E^>*YVQP.WEK_+]
+M"]:0J/F08O&5=^G0V4U=Q_O?30?Z`IJ^&_-@5:/S-6S539%E8O)AC=6&3.%-
+M_]3XWCYWT]-Q_!"`5O`6#N^@;`F^L^Z;4$,)TLV6Y.ET.]X@-1I&7\XN/YM&
+M@(/V$#;G<&R(<C.0)"-A8_WT.A/=DP!WYT5&IT`07_W\W]*R1X"B4YH#,)VS
+MVYPOED0&#W!N:ZW('@+9?@ZD1-!^SAPA@<7CUN7[8.4>TI3A-VKE`+<..U.X
+M)T:O(R.#*?@T7H3MCFR*&I,+1!DA*7R?/@^I&"Z;W;1+40NEBN/'MSRAIT%;
+M$4*`AQ_]VO!:#Q.&!W"GI'3^8^`_=W;;4A;:F&5#@#.^U)>I8-"PW4:!MYZ*
+M-@Y"@-V8K+2_O#Q<C)C/\I?7S@)Z_/S>*,;%@EEJW.@8[4@L&.JG)TXQXM;H
+M,>1>^8/I7<LX;#0$)NN&$Z[OJ'"[I(MGGJ6+.E&38Y[G)XKG2`XVUJ_*<(W0
+M\14*:,UWC+L_HZM(\\>(L0O%F;W7U)P2?"@048V.YLJU>ZA:6`I:-+XRJ?`W
+MJY9=,+.+A38T'W)/@2JH#Q4:[X#Q";_%(!2;6UAY`Z!,KG&`F97!7#CAV"&/
+MZF0VIS-N&GZ?S7=H:*8*[C36JHB%)WM!8#69@\4_W5&#@$K_`*;!S'4!;\1I
+M;X1>W+;":.%.S_7(O;M\3:JW2V!\JC@D7O^-W\$?!BCXV&G(LJQSWO.-O/`<
+ML*LZV?.B)$.TFFW#&9,&4ZW.J`)1\5=4<5-(/'7-OKE07O^UW6R9T;[C2(`8
+M_J$=P&V67*1``XZ>Y"MCS59"D#O9-)'JHB*TO<YBAKJ'CGR^E`0^RUV7<X/;
+M`JA%YF#R3NT6KH^6ZNIT`6<2E.M/-'B2W:5YP+<KDYSS@L*0H_9GC9)9_H%:
+M2UL;"\C@"`VREA;.,KCQ1RK>SZ,E<S2=G#>0!,C$1S$M6QXD_N@IG_H>A.)7
+M0QKP11RIQGGA9L\+_B^$%R\&ZW4/MTILWR$$?3.3(\8A&Y3B(D1TN+PN81*N
+M'&3[+BSQ#07,&X\T"&L-.;^($Y;Z,V-7^=X0S[;`476`$E08QU.%(<2!(6SD
+M:9(TOC4Z#/R<Z#P'JQD<1>/[1NB5`'/P^(V7ZM-!]."(B'-#O)N;`;ES.;8Y
+M"<,`;JW06_'T!ZI(O5#;%IHR[/ISOMJB&F=30HUG'H6T`-6XK(J"_H>&#"43
+MW18#G5=TJ"\[\3XAWUOF7)#[4,=%G^)GR+N=MD6M)I$-R0G,%LN;!`-=Z,<!
+MCL75K7(@$V]N?:7""/%]:4B>^U6=X$:'-?R*D<V4V"">80&O,`7])GB$#?8C
+M-,K4"<?!VXDY>5"Y\I@4@9,]JS8S]$"67+-,]%^M_1`2PR(S9O/._)_`I31J
+M[VN((A>8+I5TR"O@P`Q6&AAF,(!6`KMGU:*&07I90U!:[(AG:J3W9#@=;J'K
+MY?JO#%0!`5.ZOO)VO+T(Q$X$X=P63&=-Q<^0'S:F*?C_ZYT`7>ORN[/C65I$
+M^*\0;%_H(RA`#)7<!7:W?2%B6_XZ)&D^?N`3,^,T?.5^OE2+(W'M[LJ!*O'A
+M5:<9@N-C(_D`5>]X[\H0#%KDA*'7\X\)8_#(FAH5<I_Z8!+J,8W7=G8KF[R2
+MNI]HTN"0$ZR1K[I4'#I/T`KO"LTQ^]].P-<)@`"N3%W:/`/`B`(3-(<[&($!
+MF#$0(L$P(B(5O6L\16ZF8]*$B'D[*KO7=!N5_DR<CWL9&(`ZH6FNO1\;XT0"
+M09,6V_COGT9[VUB61#027*PUXA"T9H@69%&'&7<`_`(+M"`^+1P&.8PXA@1,
+M1FKRGB*_U?]GB(>\QB4M/YW7QH4,@:?S^EZ[_SI$#5A/,R?;_2]7I0#\9)#5
+M2/?45*?-[;XGCL@0`$-IUN+NXK_=,I$`$WJY!S"8^1;<P<%=7WNKCD06R!C&
+M,1C&%146'[)7XK\/\OXG2^[^/;9]-[8D]1M?)\GT+/3STXL7ZF'4&S#!^+ZR
+M-D4,=`'ZM30!@,O]C"7E#>/Y\@2<.WS>^,J[I1'UT1W8G];+J"`$'Y9>L/[3
+M"2?MF_[V-H8>`)4X%5OW2ET&[2>'^?=:.W)UC"VY-$1$C5M%R^!7X7D]5KZ;
+M7C/MK&<T`M93<-HS""(I*9>]]6I`@BMS")#GF_/UY#W+R1$"&U1_3LMQA:JN
+MVRLLTT3W'S-(0"GOFD[_48TU>OJ\86EGB!BXGM?;<22F`00=MWO.9Y8EPYS'
+MR6B4VU9RW2!1T=4!!GIOPD/*]MT[-=W,S'DX1$[32"TX+I):?''N/D`I/IM'
+M4OBO@J$>9X2@^`-HD<_V2GNMVOYN#7DD/$Y>ADA;'?[BO4P!W*N*CHVV>W+\
+M9Q84@"C5^1-0&SEE[#`97J331$WN<>*2Q/D!^#\+&.UU<<<`"6G]6]3'FJ^G
+M92&9E=;K50=H?!!.3=$G<R*N8SO^O?;^!6-"8]<T\0$/,Z'N;3@[B4.9IF,C
+M@AG[CGYG@_;F?"A.*K`?^,%T4LB"TA9^G0;C)I$M_:X%M;Y'K\I3`+?5$;U)
+MAV>6*J\]@X<7B*0!,-/C125LA;!O[9$%/<O7IZ6[C_!#\P`.>*D&T<MI\531
+MVHYVX:*RLYW=S-9Z&>>2@`1[?E_6BXQA<='_(;Y>7#JGTJ8`9(T["8PF>E%_
+ME6^"4.OQOY.HR!>=P@2W@[ZM7YA-QSAGQED0(+ZL*M=+4!*WPFN3_9<^"&IW
+M?VY3P6\H-XPM4FFU.1K5K<I`!=CQ/WKG-H36ENM5*?97/@AS[VR>[A[$IQ&?
+M4[C]X^*D/,671D`)/LW;,Z2(T[*F\1[NXN%0`$OW'2U?8`B&G&77Z>XBO(T;
+MIP3I$'-5B/L<XJ+27]:X=B^(A99>/=U#&XMBPY0SBDD`N=R[07^H+BZ-@=&C
+ME)`*>1:EL0:3C9@(Y,245D=UZC&WX,-)A`!OL<FQCZ5D''AK(9NWL`=(6/OG
+MU(@(KL-7T[N;T83@FC9SP6)7G+$&B(A5JL![/I'1V,5FQMU+@R=Y.H@"?<ED
+M<)AWXBH9LWF$D"2B4!$)+]_A^N0#W3,<&OM<PS?GP!:XKRN]P);.*WF>2NPA
+M=U9HR!)=)X<!=(5\!`K^1"?SN)'[M^D(#GUGD"IN<!@KDG+'P!K67UA"-QOI
+M^SNSP`8,9OB;&GA1^6@)A2PN]BD9`)=31QG`TG>ERANOX4R`;(G\IO,1$0;E
+M#I3)2^`/W+)&X;9'QLR(`!\SNI[]:!W:.O>N'$L:=K1DHR!62?0_FNE?;76W
+M5W:)AFO\4R+W5N7TV07)UA_`_"UL(-$`%WSVXC9^<<OQ<Z+_`$RM^<D%_DW,
+M1$V!%(;H:_:+'(<GQ2(/>ZD_O-)1$6O^4M.4Y"S'+V.I<;/6'P%.R\!3FZBN
+M'O,K*'CX(8R<P+2HT0+C#]]WG57#USZM4B(@W0O'&1L$V-H(?<:!$1?Y,P_A
+M"7E+^@[%^A(,/;LTN%FB#VP15SPJBZXRZI@!1GKHK;81\6"<.+*YS,;UQO$`
+M&)0_:-)9C4+UPF6:$!/KB($%U3]341<&!NP@05;^&Y./'ODA$%QWF[8L14;,
+MSKL4\A(EN6$%"]-^+96BC[,J@(>SB=6NNM^"TE9`-^`J\@);/\T1`:A\@DKJ
+MMX"5DZ5($U#F\/HH"*1EG6G)H8H=LF<V*M50$!6369`IX+JS)VB]7/C?6B`%
+M_%'-#YR[31AG'S[F)/C$JA(#Z>"_`ANFJWT]"339WT)`<7YR+V!A_O:7COO>
+MQ.ZO,>;EOJ2`73]8%-ON2*W]T!X",9R*)=+]=CWYU<8FOC;*PLJ9+(A0<`%C
+M';J6GLB=4,ZU]5$17%S@>SME_81ZY.3H(D^!.O<I_U00[I,-)06B0>`"]E]Q
+MS^<.YZB^7N5:`X7'?K3T1Y`7_S>W)P\A""&KN&H\-W-G``!B-W9LDY[',0*7
+MXWP\Y[ZP+;TZM$TWTPF86+2<Q(`)U&N;V].+Z7\SP:OT:0'P!*8>3"ROSX&<
+MQL'G[;HY7B2R$%/]T$P;O/PWCKZ3;/G7LZ[\K*41!O;VHKGDJ_$B-68=..Y\
+M`17>(35W$KZ)1OCY%#3X$91/KA1#'>IR-_)"0&+I'1=-/(2<]N6[29K#I4!$
+M_VQ%Z*C`Y]6:];]D,"O`I`!PW\%YOX$X]3Z3VW-XI@LTZ^<!)F`H<,=YV_H1
+M$`^^^'3_0`/OA2:6/'L>A/)C6B!-SR!?>IK$\GH`>!<SEW8(WZ.%NLE?+=_8
+MH0-/Z@6D0)X^*I.WI\LID2YUY"[+B,O-Z&&A(L]2_WO]T`-H;.]1<I;T6VE7
+MOU/Z0`&F8YA%."775'FN1X#L9W5@"O^Z)17T_[RXR8EE.CQ!Y=2@0Z5_T@3R
+MHH=14VF_C>YU:_G^[U^).")MO_$0;<7L+$\*:%.^U$1?<GB05+6>80>5H]SP
+MH30D,]RUB)?DL`#\=6D()@LHJY]S.P'P2Y<2P']T]3T4:/JGR"UU,@G@@\=+
+M0O`E)A?Z:TA&GC@@WBA6,&X/`KN^NV0@*599L!]YSO)<;@IC:<7,JE$!_,EJ
+M`C!0Z5OMOF,2ML&A@41$VZ>YK`,+,<6VF]4C/D2GS>Q)$$<7OVR\.B]F,]NP
+M0J1*+?#9LBR=1)QVL71]4"-)(IL`4+.=%A"OVM^CM2#:;;'A,J#;&F$1+V+O
+M`%BI;**:12N[VO%:Z5((@QQ$@25,M;D-_)GB&Y5/F14?\V7B_[;0:B@`?,Y2
+M$5_]MPU?N#$1UU3!$(C(M%U;DAB/Y5_YGL=LSH`7$L%?T`6NC0C[N'A?7*&0
+MD"_G6!?!\CY[,H]YQXK/<//00^"41!,_6RE@!ZKW/8&1;(.>2QD<]YT@`?2&
+MC%7R$)5.#(;#':[*O(O2S_6!YCFLGP/3X2`3+T9A9ZG6C,NUT"(A[D\^"QTO
+MZ^AL>DEZ=(EM/*+D<E$!D7Z,6\>L%1G9<1WF.D,"\<7KR-5-2XC5;PT!]JF"
+M#UF91M0-]]8`AN+`OF5IBLRVA<=>4]UTI%?=AGG""_<=#19D,)+/T0$!F'2S
+M(9J,WF.FD>=P6!4X*,B\^.TO@(<MZHK8Y2:#O40`R;].L24HMWLL+Y$1;'A,
+MY#^*$=H:A3/%$8'4?R*`ZHL*_*HGAVXB$@OFDDB_&M9=NWG2\WAM/4"1[16[
+M#.=RD8"8GF+/\!O9[>\YD#SD@`9_G@#ZJ/L6!B)[#D4CZJI"+>@!P<THA;2D
+MRJ7=<=V2`LFZ?R`?/@P*@[0Z;7<--UN'5*038$@*&_2]WH-X9/<"B2:L+UHD
+M@AM9N,(K,0-4F,K!LI9`!?NNMAL1=@AUZ#O_3!3+IJHT)1!%IU;NGQI\0Q,0
+MRV6T#VD`"E(E(9]:@?KWF*'R5(B!6%-!)<L"XV:VZFD*3O[D`)?\]#2`#,[B
+M,7;T=ZY$\SH05)%P^9]`'P\/T2!.XI<E$1?TTI]80AW1@>XK>5-1R%,%[J.C
+M(@DX%)%]!C?*VB4P+_;8&^(J;`8H,W"3CC-:(A%9"80+R@"OEA5",&HL?<DC
+M[[[D$`?T\U*1,7,I)*LL]@%J-IT<;]-@F:)+B_6T)`&HU%*1:GP=S=B(@:Z.
+M?$(%C.@EE`PR<$Z9)TT6\W-#XTD`J^%XA$.MHX2P]-_S'SYM_7E-37I0%(PU
+MX`\SRFY^[UZ(^!<8^,(4%QF-!&2([VXXV`B!3T?,%E\]!=A_&?/`92]CP021
+MQ/MKZ4;>,?7!KS01D4[<D5%:O*16_(\';U1A`?N8O?0V3;+B'BGC^RQ;U*!1
+M>R@KS)`#K*,/Q,M>"5DJ(9=$"VA`+75HX9);&Q/1!0?D9!DF=41,JW]1WJCH
+M,0/D/ART_6D,OO_'^^M!8[9(`*LBZ2![=N^?EQ3H"%A1,#\`557[T6^2=M,V
+M)FO6T8"9>)FM($_92'&Q@?#ZIGO+HFV5^207VA#'Q\K2(-UV\/7`"[U%.QGW
+MD1D^D@L5>`N?K\MJ3@M.?Z"9NE'GWXZ"B5D@57]J39)"JX;MHQ_2[FX&7:/(
+MZ,B<"''G)T`,5W7%G7=P23Y(LGU"'1U?2'!T,YD2;T`(37A9I'^IW5(AU]9J
+M[+2\#*=#Q(2%CE)@$/=R/Q!B5\"*50$HU7GE.^^D0F<CH&1IY!ZYE*[[00`8
+M.]3</DKDA/YUJ1$(."9?^A"`F*J[KHR@3(/48M.:UEN=TL@(>$(AL\6E:X0$
+MQ=_M83[A&7=\MMQB+(72,(T>YZQ\OB[\=M?P0]%UYUZ8Q.^/W:GO39"FEB)P
+M1\S0+W1K]!CT),'6UR20%#&CNO24EI3OCWFX1@KV*(A4V6EKEP920LI%,C`Y
+M'6@EEKY1$&#=;FO5;T;F-9HVY/)")6\DO3S0!?/RZO:IZKF=]PU4,C%++$!.
+M>!IA'K8\Q$C,0D6[\4H"&P<X',:743E+%5\/IT@!$V`A1>2,8?*DUH57*'54
+M8"Z9_2'37'/[0RX\3:`@XUW*?B!8_2I?VH8:HE76#3IY(%S.]($2P]=G^N_L
+MAFC,I$+C"A/>^0$XBEK^U\7Z$`Y<0\W--KIV;`!P%VI<BR^DMHUSR.?I419.
+M7_U/Y7)O!`5:A]E,I6QO-GMHX*5WMI'H.B>W5B#70XH!8O!:+=Q"BFS.;<*U
+M>N4T@E`%NJ_>2Q`FY+&EWE'G)%+=*9$!5.1`-3_<_7&C?QF1YT<DHP4G>X/9
+M(#+SV6'HZDHD+R`ONS@M/H/'-R$EESXY+HJ`F#.OBQ#Y2?#TE4R';(MEFOL6
+M6","$N<KV)W^$0N3^?BNZGME()\WZ/V700[#S4ZS2*'RDC>_U-%=$0_JTL+%
+MQ."K+3NKY7&"0%G?*G_EV?2`W4-\HDJEJQ$*D!3L1`+"U/8F%3/?81!@4:ST
+MVY$&&HLNFO)]AH]!91%J*A,`)>`,0)96L"M3OQR>L9:"'"=3I4P`N&0B!]4K
+MN!/0DP@R\,>4R&BLR!2'3W.X2LZ'CYCAOI$*R`/J=XO(9I1>T/L]O1:QJ6($
+M!3:!D\(M=7G&R/;)::;4P:-6Z8.B(DBT^K/S<CK3T`@(;*JT'Z?2(MVUZO:L
+M=&>DU[J:P`N503,`J5.4].I[Z(./"X?*S^K!%">>`:<D?<Y[N/FMVUG2S7H@
+M+OG\X[%+M(KCCGTL%'^ZHX!`K3TE_>5F[[4A>1%E]1X+D@+/^?,'_.8\2$.U
+MOE,%`(9D@!8S]XO7S"U.1IX=^+1CR->#];K^:A</`B6U"<UJJY]Q/.+.O-(@
+M-O2=2"\-_RCQ$%;30VN]B.\;>=IIF>.EDU7RT\/AHB`JWRHS6Q#^:243'3F_
+M(AG9*`W5/L$QXC'0;3BG2#>1)C(R/#9H4&10%C)/1D1;#<^N8-P5TIB80#S4
+MS3UB(O1%^-ZFK+/UVVW$L:!`.L5);#2]JH];,FP8E*XJ`18[2J?OU>9//>>A
+M49:?*\:BE\H")IH'SHQ50P#:QH4POC=G`+_KO018+U=]G@IMT8/S&I*8$AM6
+MGNWC.`34J\+R*F@,J-4>A&1B7.D@*]:(`0@B'!1HDS@'C2:WKJNC"EJP1:O>
+M]Q,V-OVT0S*NG(R$'2>?H]?]%L$!SV;C+ZJDRSY'_UFHUNAE0F9L,1$$/1@E
+M.`VORJ]R8,'C?VX,>-#"F`OEZ:.]TMVO*Z5]+>B-,=LX1,!!_8W=WQ^A_NW2
+MU$]I<80'?F$?$T:TQ<-`7?_J>Z[KURF99P`.KXYJ2I[?7'X+[_/R.WORQ$3(
+MEV;"IG=`U0"QHCJUEUHP3H2CI%@RFV5L]!.[""+>TSWP,+L<!0CU&2?4@G)A
+MC>5@5^0QHYKD@`);D%:,NF9"A%(V1LK_TIM+)7S",$083.2HU,IAAFT'XT4$
+M?KD3U7')$I1"I._]\#P!!78-ZZX%HIIC4@)GI=<NWCXMV3JA!!&7OI:7'M[@
+M>"3J]'-G"($!/F";"$X;)_"2&TDDA)\#BWJV=LP`]FAV799YS"0\=-?CU[U[
+M]/CISW_1L5^$A`#N#].H2;S%@=<XX$`KD0"_^U);UR/\X.XY_<\LFF!`?$QC
+M`Q&!C&+;&+J52OT95RT/FN/2B`(-]/ZZMY?<'.:U502J,`@I$17,Q7J:$Z(`
+MPB(($.:,][;^,VI$"&$8Q&,,0XX?X8\8CQXXZXA+&P/BT,!ND'T=Z":=UV/?
+M]&QC5.(SQJW5R;4)*J4Y25F#I6[3Y2K32/600*E!TEU]"V[(#S.UD8P(QB,8
+M&7#CC!L!@#CA$Y3P>VHZ<!>>RV_5"=L-6G!$*Q=R5^L65DQ&(P(P&2:S4C7`
+MI8:*T>=/$0=6%U>^QJ]19]OB[<$K&%()RS<P/K;@?``:M9+^B][_MG^XLV:>
+M2X_PW\A4?`_T,KO6V2"`&K3MT,)!CK(Q.$F)Q>PD._D?Y*B^4D*2DD`6%-<A
+MC[-C)2O;1^OAZJ&M7UOM0`-%LE'J9@3YG[T2SASES%]_WZ!OAX=XBE4@!KKG
+M^7/\-[L!P9G[*1H&X`*UFYQ1#XZRPZ.:;V#:H'3(XY$!P'-K5&X9TP?`.#6Q
+M*[[?#@(`17-?-[FZ;<".5;-5UPR.2-(@`7)YOQQBZJV%&H#KKMFR$0N.6)56
+MBLW"_8J;_EL&"_L'<D$I`#]M9#Y,P,YYTJRS-_@6'53(B_+R)7)6/4!RL5KA
+M.9.Z`"A>K8_P_JX2!'5M`WMGAS"KQWJHOF+*UVOQ:T[Y9-3P0*:WWIXLJ?C-
+MUZV=DJTK6B``2W7?Q^C,9G.S@>+J0P=!_WD]A`#3_>Y.<H(N>LY!9N]=.H@!
+M5<3DW_A4"<I[%O=O3B.+W5(P0$="5I4,G@H:)<GM3?Y09$7G5?=UW^*,3D=1
+M:($6S@>O%8FJ8(JMD+#XY#2LZ&2YJ4@!!8^J9Q;X_04\]2WO:]/KHT8(N#N?
+M.RP'[7_8W^LB&QHZJGJ<0EMX$D^/^9T'!QBWAHT1$+>ZL+"U4V0E\.+S$-7&
+M?.E_'!DT,GI3P(DFW0K0NYLF4^AB>9#5?NG)A+!%<LEY_B(3:L!;<S$HX*0?
+MD>U^U&1$P=C,+:I:Z<G3BT>(R=?"9MF:$RKNC2@@'_$<J;4V`FT5Y0T4'!_7
+M\JSC)"!=ZWM?XP^$.5M(X#\\W]=3.<>L?IRA.PM&PI@"V4DW;=.NQE$!G*O0
+M<2FBEN>ST^PK:4`G?N8HG(2#9=4[9NBPU,@75J,&4W(#B$5)7,">)F//)?JD
+M(AAW?&JOS\C;2`8+C-,ECG&;S4V'-F2`BPY76`6C*^TZ<3!ICXBW8Q+(R(IJ
+MPD=_V;-<]R\W$)-FF7_LY%TD10_/HQ$.J)0(EAUOI;$\Z-U/"3#'J)?$)`D@
+MT\)L()ABS_02AY,@?!#2]]K`&)V-5J5[<\[M]U\$4M_NV6/ZE)Y$6/%P&&)"
+M@##\T3#,]>TX^FMTL@4^0$9,B46EIO_7PTT?JDP$5D\SBBVD6P38:VFJ"(9>
+MFWL4HA?5`(4HB`C77YOO')]QKNZYYI^/"QJ>B(%>Q4-LY?.D'#;^-D.`AO\Z
+MRP:C/<+\M"$$70[\XF(*$95EYG<%2A1GP0B/7`R#]N4>DDNA506P\X(M\*3B
+MYPB@%N)A+!NKIQ7;$^,XIB`^[6,,>0'(WC733>(+6T3*<5RPD$`Q[ZGZQ%$R
+MK>_NCIQV9E4NK]JWP)0!6HSR:0_@Y;)SFUH?^7TF^51@A083IZWJJ'*;HWE[
+M!B3-9KT$IQ=$D`$VR-[!;XBS"*"^;+RLFF!H0@#Q6<6D..:(%V[6?%W$:[E:
+MW1;9L;^3PJK7<W)];O*!$+INW%9Z-%62]5-@O\KK6KCE;5U:H\;!&0'NM]3O
+M^:"Z#_DN4\?[0PD+[+3$I!$'L_S+K[3GHZQ$TIR=X0[L^9[;DK\ZJCTD$)/J
+M1(66Y)6=&CT)\@&FGG""]S^V,\T.!X$*%38_OH2`BO&A[BVMO"FAZTJK<(^.
+M%NX;D2=9N)N\CE(`@^X/^3EJ0V$3"S.]Y^R<OW@-@F`"(UA$LJC;55D%(-?$
+MS&&TN;1GF=W5B(O#_O'!-?N>V5/0H2U_DO1=@J$OY%>3:5662$!$.'F[;RI9
+M"GX^Q74GI[))>;981@$CSTG`D#;II8WJ2D_P9URN*!((B=OJ<[I%%/N23OH]
+M,.9U_'>;^(20![J&#(A5/G*P8MXF7!FZ+CJFH1P7?K$)I$*S-9JV#BFLC)JW
+M?,)92?8D\_[=:E``13__IP%L$]<T[+)<T*6Z4H?P[+_J3/JI`#EPK]?$5([&
+MY"U.2*M*M5G?W\*F(AZVKA$7`&>^JMVD*JLCH@_%VK58MEKU\E-(`:KZ10`?
+M%J[A`O<IFDN4U\K>Y&P2@0ZF.Z8`A5S7YA.I5[$)0]#8KPJ2`%&7(N_@<K<L
+M:5KZYX?*?C6*2"'Z]D&""9G4V$EMBG8YV=YE.#:YSU(M)H(5>Y[!`:/8C^SL
+M7UN+$XNDTE6R5"40'77+[7T9"S7[+0O]A0LS,XL28`%+NXOFS/%6`JZC?-]M
+MM.AUDM2>%,!;B?!+":PA6=>AIF!SS4LBL_CJT)$XYC7R'FL>]VVNNK_O[)I$
+M*F?/_ZR$!E\D.K!KH5LHV)LD:SUT]/4KLCG"(N7\G^9($?A?^_KWHR_G_Y\;
+M4[1.VL/[3@0U4S%LY$)Z,P`ZZG4U%#5?#"1D7S[WW[9%XNB_<=]O]3PNVG64
+MDGI((2KQ#XC[B71.G5+,;_A\3XW:(`#X)-!4:M>(N\XL;V]*4&H[/M9*)%92
+MM7FVB:``R3`!2HD$A^&FX*?Q3O$<61]KDD@BHU4!>R?]8Z^?][&\>5$"'8B-
+M-)D`Z2./Q[<L+&;CGWNHR86#CD0=$%O)O0F<;%R>,EG+YQE=6>W`'Y3P0P1C
+MP;\VHB%?D)<BD?=$"*8`$M+2F*QC!72UU$463X.[3?<JD!.LGS)0!Q'!0X+%
+M;O-[#IV;)LG#$F_LJAT6I9(`=/`("7XFK4.9U)/G-CKXYU((<6@(#U(XSU+=
+MY&4[[D[):?IE)]B61#^87Q<5Y*(N[D=%59;U1#&A.^/WVW'6U0@(2(YA"K_)
+MGA9F+P[J#[H_I(0'>99.NY(&`&/>9NBD%\4BHID!;K7NR"&3LY+AOU0_;[1J
+MVX;__9AP3@ABJ4B`$WG;6*"X79OW62Q*;A)B`P5+H31`?$7O5G7UG-#JS-=Y
+M]+3[M4(#SNW(GM*1"3'.T>SU\0C)U2E7AA_7T%Y(^M(!#@-W]D0I:`SS,V"W
+M=J<K&]GSZ'7GB&/]/'%<4`D[UWGAMK[G*/'+=:]<T\LW]V9YDYS%`$/$C?B#
+MK/I>02^2-RUZ-"1"N7[T`2O/2K%7?^0W]M,9!2Z^8]\FF`$R9ER4D/:(=^]8
+MN/4)\\G>JG9PC(!IK`_=?&[B:NG*;0$`P_CQ+$:0&42BW*HF4$JW-L+N)K6I
+M(*XFZOP@<O@IB+-15M,ML(B`'\6T:VB=44GT4!`O5P"`M-_G<_%>3@T]+<Y)
+M&"Z_KM8PBXB-CWJ![Y23ZZY<ND@`<B.J2!5=4-2\=_\*S&R]3O5NZX`:B@8?
+M0*?]OU12``GX($/`S?*J\6[IY5F3Y--2`&C!W`!+GVR22E99V76:YQ]RN]R7
+M2P634>P`-/@T&,KZK<Y$GO$9#V<PB\O:D9ZW[5J_[7-8`H%[^<9."%;ZO#T/
+MD(LOE:!+;<Y6I19G`*X@-]?OOE[,'SFGAOV\ASI#?Y6)>7``L\OLPB>Z0SFL
+M9T+85;%-("3U;S5$6WE_,-,FUW?8,V\)O-MTD`?09,@DP&)E(_HU9\"C=MKP
+MB(;[,X#:Y=-S"O=6'1:%I88?3!)I`>F@[)`<&6<W#>/G#O>:^>Y&0ZR30R!$
+M(/Z]I<X'G]-!Z6I471Y,Q$QB812C_["+RP_U4%NKS456M^/V20"L[,$.^M2]
+M3\[#F\CF=SZOCC5I0(3S:`4=*YQJV(AL*"Q^\;_KMN\Z*+JFD!M]$Z6I$/(,
+MQO5O2^)H5;J0XJ;^4D`;GJVA$UCJV">?I+A6C$(++YCND`G\G1-QW2Z3N>WP
+MDB!?R#!.&Y^9%VG.LA+W^89(0'[/I$4P\>F$D-S0^X0]OG]:.<MMS5:Q&56`
+M4,S]LBEF?2EJ$U-C*M;"W9+=1X#P!<5*.@B@N@MX=`XUNZB.B.CJMB>]2<"4
+MJP@)^C^ML,>]8_QX:PB+4;/9^0$&.$_#_Y_BT?7=+#+E<G=I0+&:=W^V8`$2
+MGVOJ3&R:QMRU)SNW)(*!$V"&6-*&-#C6<*#PXG%>?8.3AY]"FD`X8Z:(0F-E
+M$Z2S"6DZEPH2`#8@O(FHYW?+_X6UWA?QB)0!B(9C:$1Z\"I9RD'']_5,-=7#
+MG7T>ED0JZF;N_NUT><`%6I9Y^<6]`G]Z;T",`;JTL:4@/WRF7DC8\^)RW;DD
+M0'X3N>"&^?&5N&_2\\\]])<497ZK'=4B*][<)H;]8E;L;)9V,ZN[+?)8&]6:
+M,A%#:O^@VN#*.OB6Z%&1>AZ:@`)SVIC6F]QG=]FH#(]"SGZK=*.^3@3]KI/T
+MN<`1#G?\S=B^5J!^J8Y=1C8U$,1$E?#Y?N6]29WZ.C<QOUM]WS`^_U.(@VJM
+M:"KE?AH1RMP-='IT:B!"Y^<:\Y.F`?I[]:O=GJ_2Z2^L0C(#GQUS]?I'9U@(
+M"W46.OC'12_1M_O4RO+70I0:<@+7H@"S^%Q'+*SP%.M\>AD$I$V]T@*+N?]9
+MEBHVFE$`&YR1%RT&CE+E:VNC^2$BQZ\1#NOFKV4$_I?CY(Z.\%#FTR'ME4`)
+M*7*^8`-I.])!NZ*3'*3^!/J\%,0&E@"`NZE-9P.'=8?0J=ED:FQH)-Y64XB'
+M<]OV[G7_3R"*.0Q+=UZ=5XO#9.%RUBCLXGDP`P_0H`$8""BP8R\=N5BNYRD@
+MN[2I``[T``5GK,GSKOPI_Q<XNH4>C,>Y+(03KWXQK(#.B8\.&F0U.MIT]#XT
+M<2BB9=,!"+Y5!X&7;`%LCKDM>2'S6K<%WO(P1^<D98B)NN(;8\M!,F9I.<AI
+MX1.C.@.`F`A3+D,`/UHIK>2'FWM6N(0.1GY'^RI`>;"]N+7P4@9XL172P.,X
+M$0ZW98YYBB=#JM+/61X.>C[2<0%B`5(W5>C$!WT9CXW+1N=EWW163@O4WVH`
+M'<43H?//N?_:2-6`GKQ`[U2CDX%#V,URIF:(AYQ]]:T*W12,,;1HP.MJ7D@3
+M(E^;+3JHF[$.E<)?;N/TL^IPX/5^5:(%(,?BH0!P4=YH>OG-UU--,)9!G]*;
+M3P4(1!0QZ;)L^D'U$H*,DS'0&74[G>@%NH7&Y%.BV1QUVG&])T@Y*3Z/Q!"N
+MJ0>.N4BQ;VRE:),!6K6"%VOX1FZM/!?I2]UECP,^;SE`F$!.PVY\6.%!9@O'
+M_+1MC^UVF^89M1I"T:21":PN#=OKB"):Y&MX%9C2JBOQH7W;/J3NG`GR,V/P
+MVI$YAPU=4BICQY@X*61>SY\'@>P0F.[D!OKI9R_`?).)A([I"J^D@E`#7P-+
+ME^R`6`H:3/52A\GM1B950E$D"^CR(M+^*(,WP>X"-\:>N-"YJ&WI-3K6+Z@0
+M"]?`CKY+I\"][V(V!B$BFGBT:?L`*YUN_-9S=C(.26QFMTF`$M]_3K\&A(!C
+MOL/;57'DITTRZ+%NE!3';(%W&6]%JS<%N$-*P6C/?)-`DH3"X3-+$04V2-2]
+M'U)65H9MVF-9"X7\:%WSA%];_)ZG.!%0^F(G=]_L?9A9OXVH[B8AKVJRA/%&
+MD0[N*VO%8\!",[_*!^V&U!%O=-S!FDS^R;=BI;."=*/[S\;/*Q`4.Z<?Z\\Q
+MH2(#N2O?_I]#U?@T,ON$3^61+;%^DOL5P7QB*,`"1O/^<)#Q/JEQ6(LB\)_@
+MF$],(+3A1D0Y'OQ>+Z&9L.YMH]G1@6;#:D![U6Z%12]2=ZZHFI8%7!OM,0*<
+M?8B@G(1?7_ONDL+#1RR(4L\US7BY4`A>)%A1@7BIR3SR1"KM8&7\"JE;.&T5
+MI8Z-RW:616QKOR)`O-Z7N\^%'E\[ME+G<-98[\)8)D]$WKG,$3A/K]O\.'!M
+MLWH;[S04.I*6WK-8YU0PU($,?&T\20`PL]`"A?US"HN#EZ7?K6.O7:_1KJP"
+M'PZ,?N0`VBIL_0V*]/N]3(=Q(163.YN8!<1?@U8N_3^6^V'S0Z0@JNGKU^=`
+M'9]=^JJTSC.:?AHR$WG@!&VR\IJ;7B)3(I#"C(K!?``;);L>+F\24S9MAA6=
+MEWSLLM*81<N7Y9$6^D,.6=/4H*-EGUO)9VET3D/]F?1^O>^Q,1`6PH=Y#374
+M7*8-8-)8S8$82D//X?.A``.Y[QQ4VMJZ6R*^H%BD`HS')JX0$5!\7J)CLB9L
+MYJMJC(,GTJ?>I`B>)ZQ'G5Z;PZSB=*0SB03S=3A\B&UD&?Z5SVJY)*0DI?I^
+MD]](@@EU3+5\HZ$?6$6E!&(5%1S5K-SQ`FBL6!`IT$N4C/%_S/'26]=GV.5I
+M?A,,I`A@8BB?U?Z*/@3H*EI67A/PEV%H5+(*!$)/HY%=_VYZ5"1$<XV>Z,VI
+MQK-@JSV]&(N6ESF\3P`W^[?N'HL0`,C^T.RRWMM)Q$4)MXK-6I$).RX2.38H
+MW0,K#*TJ4A<_C6@BW&/%YBNQ-XT1[=J"8!I]UY8>W>8KVXUV[D"X'MC'B/H&
+MZL9+5C/27^@B\QIP<$8ORD/^A#P(DT@WLE]OZG#^G^F^R5U=4(:.W5VJZ(#H
+M4[G@)I4QM;2H@3KRJ+@,1``]=\YRA/UUMLI4J_-5DRC6;[$6F17!<^CKY\`6
+M(6XSTY5J00"K<X^G2$4,/34?C<9,$!SWZAHI2U\V8X3YF17]K.KJ6+GL9-YL
+M(!S`!.6RQF[B*'\O^=\$DY]HV@C^LJE9>07Y`N_R8GZ6CO_*WI%,3]Q>D"QE
+M[5N/32)')>7*1I2E`:E8D@`)!<V??4E%'0"R5F@],F,KYM4!2<0C(A]NNKY&
+M0A--HD0GH';9D?S@'W@@2^I;+D)LSTH-X88]FS[+.IR#I1R/AZ&_D-PI`%9M
+MLCP;3ASL??6,';,&P7TY1?2N_J7*G[E>8!`4_>I7FB[DFN=#7(IM;;?.J`8O
+MW_1DZAL!#&N4T1ZXYG:T0H9J(@GT$!FOT>#*%U/`\_3^%CA(UBF4Y#.[K;.\
+M-_/=\VU`)VV'2H&[\#FA>1%;Q_-V-L"(8N*I\G9K#EFV5"SO#Y=6"UFFI6+T
+M3G+?98@!?,N;SYNO-.T8M3+PL)2>9#)_:((%!7?$WL?Z+82G"_Z`=OG/?>X$
+M"&`^X.FC>[0?+XWG3LRP=J&B24*S8%_AM-Y>7>3POP4P"3^'QQ&\B%E96U-=
+M_\T+P!3FTZN)(:$?3(77,J!;MN[Q((..(R75&P._B_E)98!$.?H&V,<(NF#W
+MF7N*87EGT[@F`5/X:++MT"ZV@$,O+Q6/Q<!`KK(JEA&&H<WD=ITJD`(#*(Y"
+MLF&_<S+-.ZM8<$A2G`/IRP-/W_$]))$!B6;M.$@Q:U+5/T]*"+)+&[40F`\/
+M[D8+OS*]>I=\_Y(5TRD@`E6_MV&KS%1I_M<N1O)X)3`S0J'#-Z/<1+G.H2(F
+MB/?XCB'U0-84@>!!;Z,JUFJ07_E],9`K_8=._^^O$]@_T6;`9K+P7A[JFLEQ
+M(2)4E`Y;&DU,7U0]BB(@SF,#?$X"S:[ZWZ;?##S]/:.EM;R+\[!7)6`)*;Y)
+MO\9Q?9T)`@D,8&,8P,8))[<?/)JL`JR]5M$@RQ@1/.BAL7VWT+^WAAU?9.T%
+M">Y5(@3H#&,8P,PF(Z[H9MWSG1Z`MWE3#(#!(0Z[^<"%UJ_/$N7C^=F=5,B)
+9@#N8461T+A7W1J)TTW_Q=R13A0D`S39&D(#!
`
end
diff --git a/contrib/netbsd-tests/dev/cgd/t_cgd_3des.c b/contrib/netbsd-tests/dev/cgd/t_cgd_3des.c
new file mode 100644
index 0000000..91e81f4
--- /dev/null
+++ b/contrib/netbsd-tests/dev/cgd/t_cgd_3des.c
@@ -0,0 +1,913 @@
+/* $NetBSD: t_cgd_3des.c,v 1.1 2016/11/11 07:39:58 alnsn Exp $ */
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Alexander Nasonov.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/sysctl.h>
+
+#include <atf-c.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <util.h>
+
+#include <dev/cgdvar.h>
+
+#include <rump/rump.h>
+#include <rump/rump_syscalls.h>
+
+#include "../../h_macros.h"
+
+#define SECSIZE 512
+
+struct testvec {
+ unsigned int blkno;
+ const uint8_t *ptxt; /* PlainText */
+ const uint8_t *ctxt; /* CipherText */
+};
+
+/*
+ * 192 bits CBC key, NUL terminated.
+ */
+static const char c3des_cbc_192_key[25] = {
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* ABCDEFGH */
+ 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* IJKLMNOP */
+ 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* QRSTUVWX */
+ 0
+};
+
+static const uint8_t c3des_cbc_ptxt[SECSIZE] =
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop";
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t c3des_cbc_192_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x19, 0x92, 0xc8, 0xce, 0xdf, 0xa3, 0x14, 0xef,
+ 0xff, 0x88, 0x9f, 0x01, 0xfa, 0x6f, 0xfa, 0xa6,
+ 0xdd, 0x2b, 0x43, 0x67, 0xfa, 0xce, 0x37, 0x95,
+ 0x73, 0x4d, 0x18, 0x33, 0x0c, 0x29, 0xb6, 0xbb,
+ 0x37, 0x77, 0x31, 0x74, 0xf6, 0x62, 0x03, 0xd2,
+ 0x78, 0x13, 0x55, 0xf6, 0x58, 0x49, 0xaf, 0x2a,
+ 0x15, 0x4c, 0xc2, 0x4a, 0x55, 0x99, 0x82, 0xb9,
+ 0xfb, 0x8b, 0x4f, 0x92, 0xe3, 0xbc, 0x9b, 0x09,
+ 0x42, 0x7b, 0x5f, 0x54, 0xed, 0xf0, 0xcb, 0x5d,
+ 0x93, 0xba, 0x09, 0x4b, 0x20, 0xf3, 0xe6, 0x44,
+ 0x30, 0x5e, 0x9e, 0xfc, 0x7a, 0x3c, 0x7d, 0x11,
+ 0x63, 0xea, 0x40, 0x94, 0xaa, 0xd0, 0xa9, 0xf6,
+ 0xc7, 0x1e, 0x8f, 0xc8, 0xa6, 0x2c, 0xf7, 0xeb,
+ 0x51, 0x26, 0xdc, 0xf8, 0x73, 0xf9, 0xb4, 0xa8,
+ 0x80, 0x4a, 0xe5, 0x6f, 0xb6, 0x33, 0x13, 0x6b,
+ 0x1b, 0x7d, 0x00, 0xde, 0x44, 0x7e, 0x26, 0xa2,
+ 0x82, 0xa7, 0x80, 0x16, 0x34, 0xde, 0xb9, 0x82,
+ 0x4c, 0x42, 0x8e, 0x0d, 0x48, 0x7e, 0x38, 0xbd,
+ 0x1d, 0x7d, 0x98, 0xbb, 0x11, 0x8a, 0x72, 0x14,
+ 0x4e, 0xaa, 0xd0, 0xef, 0x4d, 0x7f, 0xa3, 0xa6,
+ 0xfc, 0x85, 0x9d, 0x74, 0x63, 0x9d, 0xe4, 0x5c,
+ 0xf7, 0xa8, 0xd0, 0xd7, 0x95, 0xb4, 0x28, 0x64,
+ 0x41, 0x2d, 0x5d, 0xd9, 0xba, 0x79, 0xa7, 0xb3,
+ 0x9c, 0x16, 0xfa, 0xb8, 0x10, 0x5d, 0x1d, 0xd4,
+ 0xce, 0xad, 0x67, 0x27, 0x91, 0x8a, 0xb3, 0xbc,
+ 0x37, 0x20, 0x95, 0xac, 0xf7, 0x0d, 0xe0, 0x1e,
+ 0x59, 0xa7, 0xe5, 0x81, 0x82, 0x6a, 0x71, 0x07,
+ 0x85, 0x43, 0x43, 0xdb, 0xbf, 0x56, 0xb0, 0x0a,
+ 0x4c, 0xf1, 0xcd, 0xcd, 0xa3, 0x9a, 0x10, 0x8e,
+ 0x0c, 0xe2, 0x6d, 0xf2, 0x16, 0xd0, 0x4c, 0xac,
+ 0xf9, 0xfc, 0xc9, 0x56, 0x1f, 0x31, 0x89, 0x1c,
+ 0xfa, 0xb7, 0x49, 0xea, 0x69, 0x91, 0xfe, 0x45,
+ 0x96, 0x5e, 0x45, 0xc3, 0x2c, 0xb1, 0x40, 0xd9,
+ 0x1f, 0x82, 0x3f, 0xc1, 0x45, 0x7c, 0x39, 0x72,
+ 0x6f, 0x52, 0xe4, 0xaf, 0x15, 0xa4, 0xe2, 0xd4,
+ 0xa1, 0xa4, 0xb2, 0xb5, 0x4a, 0x0b, 0xad, 0xe4,
+ 0x1e, 0x5c, 0x26, 0x62, 0x81, 0x78, 0x3e, 0xd3,
+ 0x6a, 0x98, 0x94, 0x2a, 0x00, 0xa7, 0xe4, 0x04,
+ 0x9d, 0x9a, 0xfc, 0xcf, 0xad, 0x2b, 0xba, 0x9b,
+ 0x40, 0x1e, 0x71, 0x3a, 0xb6, 0x92, 0xc4, 0xc5,
+ 0x56, 0x58, 0x92, 0x2a, 0x69, 0xbe, 0x0f, 0xb0,
+ 0x91, 0xae, 0xaa, 0x3f, 0x07, 0xe8, 0xf9, 0x71,
+ 0x20, 0x06, 0xed, 0xe0, 0x80, 0xec, 0xc9, 0xe7,
+ 0x54, 0xaa, 0xaa, 0xf4, 0x4c, 0xb2, 0x34, 0xf7,
+ 0x8a, 0x76, 0xc2, 0x4a, 0xae, 0x71, 0x7a, 0x07,
+ 0xd7, 0xec, 0x75, 0x2f, 0x8a, 0x99, 0x59, 0x13,
+ 0xd0, 0x8d, 0x18, 0x69, 0x0d, 0xd9, 0x39, 0x73,
+ 0x2b, 0xd0, 0xa3, 0xbc, 0x9e, 0x29, 0x4d, 0x88,
+ 0xff, 0x98, 0x02, 0xb4, 0xcf, 0xa1, 0xf9, 0x2a,
+ 0xa6, 0xef, 0x7c, 0x72, 0x26, 0x4e, 0xd7, 0xdf,
+ 0xec, 0x3a, 0xbc, 0x8e, 0xe6, 0xb3, 0x2b, 0x43,
+ 0xcd, 0x67, 0x8b, 0x72, 0x00, 0x6f, 0xe5, 0x85,
+ 0xe2, 0x2a, 0x4c, 0x8d, 0x02, 0x44, 0x6b, 0x7a,
+ 0x89, 0x7a, 0x18, 0x3b, 0xc8, 0x9c, 0x8d, 0x60,
+ 0xec, 0x79, 0x58, 0x15, 0x98, 0x71, 0x4b, 0x1a,
+ 0x34, 0x69, 0x96, 0xd0, 0x0f, 0x01, 0x27, 0x2e,
+ 0x19, 0x02, 0xf0, 0x17, 0x8c, 0x89, 0xbf, 0x05,
+ 0xf0, 0xfe, 0xc3, 0xe6, 0x90, 0x9d, 0xa2, 0xb1,
+ 0x40, 0x06, 0x7e, 0xcd, 0x20, 0x7e, 0x5f, 0x54,
+ 0x31, 0xfb, 0x79, 0x84, 0x47, 0x38, 0x71, 0x69,
+ 0xe1, 0xd5, 0x4e, 0x84, 0xa3, 0x2b, 0x4a, 0x86,
+ 0xc2, 0x21, 0x5b, 0x15, 0xc3, 0x63, 0xbb, 0xc5,
+ 0x5c, 0xc1, 0xfb, 0x31, 0x3a, 0x4d, 0xb1, 0x9e,
+ 0xe1, 0xd8, 0x67, 0x4b, 0x08, 0x42, 0xc4, 0xe8,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t c3des_cbc_192_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x1d, 0x65, 0xdf, 0x01, 0x9b, 0x24, 0xa5, 0x10,
+ 0x94, 0x9a, 0x5b, 0x81, 0x96, 0x4e, 0xa3, 0x42,
+ 0x42, 0xd5, 0x05, 0x52, 0xab, 0x3c, 0x67, 0x40,
+ 0x79, 0xf9, 0x4b, 0x58, 0x39, 0xf6, 0xd0, 0x97,
+ 0x48, 0xf4, 0x77, 0xb8, 0xac, 0xe2, 0x10, 0x66,
+ 0xa8, 0x04, 0x0a, 0x1e, 0xa6, 0xbb, 0x4c, 0xd9,
+ 0x5d, 0x0c, 0x11, 0xb5, 0xe0, 0x26, 0x84, 0x50,
+ 0x10, 0x80, 0xbf, 0xd6, 0xdc, 0x82, 0x53, 0x0a,
+ 0xcf, 0xf6, 0xd3, 0x07, 0x45, 0xb0, 0x8e, 0x36,
+ 0x2e, 0x60, 0x0f, 0xd0, 0xc1, 0xb9, 0xd8, 0x29,
+ 0x6e, 0x13, 0x8e, 0xc1, 0xa8, 0x63, 0x20, 0xe0,
+ 0x8d, 0x47, 0x8b, 0xf9, 0xa0, 0x60, 0x55, 0x53,
+ 0x1d, 0xaf, 0x43, 0x46, 0xe5, 0x10, 0xd5, 0xcd,
+ 0x91, 0x9e, 0x11, 0x4a, 0x6f, 0x6a, 0x13, 0xdf,
+ 0xee, 0x7a, 0x88, 0xbe, 0x59, 0x96, 0xdb, 0x65,
+ 0x25, 0x57, 0x9e, 0x82, 0xad, 0xc2, 0xd6, 0x28,
+ 0x96, 0xb3, 0x7f, 0x57, 0x5d, 0xb2, 0xfa, 0x60,
+ 0x43, 0x22, 0xa5, 0x33, 0x14, 0x99, 0x8f, 0x68,
+ 0x5a, 0x7f, 0xaf, 0x9e, 0xe9, 0x23, 0x57, 0x9b,
+ 0x52, 0xe9, 0x20, 0x59, 0x26, 0x89, 0x9b, 0x59,
+ 0xb0, 0xee, 0xe8, 0x6d, 0x06, 0x8c, 0x01, 0xc2,
+ 0xea, 0xbc, 0x7d, 0x93, 0x3f, 0x79, 0x7f, 0xeb,
+ 0x57, 0xc9, 0x0a, 0xca, 0x37, 0x81, 0xa7, 0x82,
+ 0xde, 0x37, 0x7d, 0x69, 0x01, 0xaa, 0x19, 0x98,
+ 0x26, 0xfe, 0x06, 0x83, 0xeb, 0x9d, 0x26, 0xdc,
+ 0x04, 0x5d, 0xc9, 0x05, 0xee, 0x1a, 0xd3, 0xeb,
+ 0x20, 0x8c, 0xb7, 0x99, 0x75, 0xe0, 0x19, 0x98,
+ 0xca, 0x83, 0xae, 0x94, 0x28, 0xbf, 0x47, 0x42,
+ 0x92, 0x05, 0x8c, 0xaa, 0xeb, 0x99, 0x0f, 0xcc,
+ 0x33, 0x79, 0x24, 0x62, 0xa0, 0x7a, 0x65, 0xcb,
+ 0x53, 0xb7, 0x86, 0x0d, 0xcb, 0x44, 0x2d, 0xbf,
+ 0xe8, 0x5d, 0x62, 0xeb, 0x21, 0x4d, 0x35, 0x86,
+ 0x56, 0x6c, 0x51, 0xff, 0xa3, 0x45, 0xcc, 0x88,
+ 0x09, 0x43, 0x08, 0x97, 0x13, 0x7d, 0x00, 0xd8,
+ 0x82, 0x2d, 0xbe, 0xbe, 0x44, 0x0c, 0x2c, 0xa4,
+ 0x4f, 0x84, 0x07, 0x20, 0x9c, 0x3f, 0xf6, 0x5b,
+ 0x9e, 0xe8, 0x68, 0x40, 0xd3, 0x64, 0x8f, 0xb4,
+ 0x9e, 0xac, 0xc6, 0x41, 0x11, 0xda, 0xf2, 0x60,
+ 0xfa, 0x29, 0x9d, 0x26, 0x68, 0x5b, 0x79, 0x3a,
+ 0xd1, 0x66, 0x78, 0xca, 0x80, 0x87, 0xae, 0xab,
+ 0x7b, 0x29, 0x3c, 0xb0, 0xe6, 0xa2, 0x6b, 0x24,
+ 0x81, 0xeb, 0x51, 0xf9, 0xcb, 0x4a, 0x08, 0x37,
+ 0x2a, 0x75, 0xb5, 0xd3, 0xb3, 0x8f, 0x3d, 0x13,
+ 0x11, 0x0c, 0xa9, 0xf7, 0xf6, 0x57, 0x7e, 0xb7,
+ 0xa6, 0x22, 0xe8, 0x13, 0xfd, 0xf1, 0x6a, 0xe9,
+ 0xc1, 0x94, 0xa6, 0xf5, 0xa5, 0xec, 0xfa, 0x31,
+ 0xd2, 0x66, 0x8f, 0xe3, 0x6e, 0x9a, 0xaa, 0xb0,
+ 0xe3, 0x04, 0x09, 0x00, 0x1e, 0x67, 0x3c, 0xbe,
+ 0x2a, 0x8c, 0xd5, 0x1f, 0x4f, 0x55, 0x2c, 0x1d,
+ 0x26, 0x7f, 0xc9, 0x27, 0x00, 0x88, 0x7d, 0x45,
+ 0x4e, 0xe1, 0x36, 0xf6, 0xf5, 0xa8, 0xd4, 0xef,
+ 0x8b, 0x26, 0x76, 0x41, 0x28, 0x87, 0xf4, 0x51,
+ 0x14, 0x36, 0xad, 0x60, 0x8d, 0xe9, 0xe2, 0x9d,
+ 0x3c, 0xea, 0x09, 0x51, 0x3c, 0x81, 0xdf, 0x1a,
+ 0xc2, 0xc2, 0xf6, 0x45, 0xe1, 0x73, 0xac, 0xae,
+ 0x85, 0x74, 0x83, 0x8f, 0x56, 0x3c, 0x36, 0x1c,
+ 0xe0, 0x07, 0xc6, 0x6a, 0x48, 0xe4, 0x34, 0xe9,
+ 0x81, 0x53, 0xb7, 0x53, 0x95, 0xa7, 0x94, 0x21,
+ 0x7e, 0x32, 0x53, 0xda, 0x83, 0xd8, 0x57, 0x92,
+ 0xd1, 0x15, 0x45, 0x86, 0x40, 0xac, 0xf1, 0x6f,
+ 0x3c, 0x29, 0xef, 0x8d, 0x12, 0xe1, 0x9d, 0x04,
+ 0x17, 0x3a, 0xcc, 0xa6, 0xc5, 0xe4, 0x27, 0x41,
+ 0xcb, 0xfb, 0x5e, 0x77, 0x73, 0x5a, 0x2c, 0x03,
+ 0xe9, 0x2b, 0x76, 0x4e, 0x69, 0xea, 0xcb, 0xb3,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t c3des_cbc_192_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x87, 0xb1, 0x3c, 0xd6, 0x60, 0xa0, 0x5a, 0x35,
+ 0xf7, 0xe1, 0x6b, 0x87, 0xa0, 0x90, 0x2f, 0xc7,
+ 0x8c, 0xed, 0x53, 0xda, 0x93, 0x32, 0x78, 0x5d,
+ 0x24, 0x23, 0x42, 0xdd, 0x93, 0x5b, 0x2e, 0x40,
+ 0xa1, 0xb1, 0x3b, 0xbb, 0xf0, 0x50, 0xb4, 0x61,
+ 0xea, 0x15, 0x37, 0xf3, 0x49, 0xe1, 0xa0, 0x32,
+ 0x88, 0x85, 0x81, 0xfd, 0xb7, 0x96, 0xd7, 0x9d,
+ 0xd7, 0x29, 0x4b, 0x14, 0xf9, 0x18, 0x6a, 0xf6,
+ 0x46, 0xae, 0x69, 0xdf, 0x63, 0x9a, 0xe0, 0x0b,
+ 0x2c, 0x53, 0xd7, 0x82, 0x6f, 0xe5, 0xa0, 0x95,
+ 0x2f, 0x61, 0x7f, 0x15, 0xff, 0xc7, 0xe8, 0x83,
+ 0xfc, 0xfc, 0x16, 0x1c, 0x37, 0x0f, 0x9b, 0xbb,
+ 0x14, 0xb2, 0xe2, 0xb7, 0x1f, 0x85, 0xb7, 0x07,
+ 0x8a, 0x18, 0xed, 0xf7, 0x5f, 0x27, 0xff, 0x2f,
+ 0x07, 0xf9, 0x9d, 0xe3, 0x79, 0x45, 0x1f, 0x51,
+ 0x08, 0x54, 0x0f, 0x56, 0x84, 0xee, 0x87, 0x9a,
+ 0xa9, 0x46, 0xb8, 0x77, 0x85, 0x40, 0x46, 0x50,
+ 0xc1, 0x58, 0x07, 0xfd, 0xfa, 0x2b, 0x20, 0xd6,
+ 0x4e, 0xba, 0x08, 0x02, 0x59, 0x3d, 0x23, 0x3b,
+ 0x5d, 0xf9, 0x5e, 0x2f, 0xac, 0x9e, 0xa0, 0xd7,
+ 0x3f, 0x9a, 0xdf, 0x50, 0x66, 0xcc, 0x28, 0xce,
+ 0x93, 0xc8, 0x11, 0x5c, 0x74, 0xe2, 0x4f, 0xfd,
+ 0xaf, 0x33, 0xbb, 0xce, 0x96, 0x1f, 0xb3, 0x46,
+ 0x6e, 0xcd, 0xe4, 0xef, 0xfa, 0x2f, 0x93, 0xb1,
+ 0xe5, 0x7c, 0x54, 0xbc, 0x17, 0x1f, 0xd5, 0x31,
+ 0x0e, 0x88, 0xe7, 0xcd, 0xb0, 0xb5, 0x2e, 0x1e,
+ 0x9e, 0x40, 0x36, 0xa5, 0xbb, 0xa7, 0x4e, 0xc8,
+ 0x11, 0x6c, 0xae, 0x1c, 0x2d, 0xdb, 0x55, 0xd8,
+ 0x14, 0x40, 0x02, 0xad, 0xaf, 0x19, 0x28, 0x59,
+ 0xd7, 0x4f, 0x81, 0xd0, 0xc1, 0x54, 0x63, 0x73,
+ 0x0e, 0xfb, 0x26, 0xf2, 0xa6, 0x80, 0xca, 0x2e,
+ 0xf3, 0xca, 0x1e, 0xa4, 0x62, 0x07, 0x22, 0x10,
+ 0x11, 0x6a, 0x57, 0x28, 0x45, 0x80, 0xdf, 0x34,
+ 0x88, 0xe5, 0xf1, 0x23, 0xe0, 0xb6, 0x44, 0x51,
+ 0x54, 0xd8, 0xb3, 0x66, 0xac, 0x46, 0x4d, 0xdf,
+ 0xa2, 0x8e, 0x72, 0x3a, 0x1c, 0x87, 0x2a, 0x43,
+ 0xfe, 0xdb, 0x00, 0xff, 0xb7, 0x1c, 0x13, 0xc3,
+ 0x18, 0xfc, 0x71, 0x13, 0xe3, 0xd1, 0x1f, 0xde,
+ 0x16, 0x63, 0x73, 0xf5, 0x0e, 0xf7, 0x18, 0xe5,
+ 0x48, 0x8d, 0x30, 0xd9, 0x26, 0x20, 0x6d, 0xa1,
+ 0xba, 0xde, 0xe8, 0x7d, 0x77, 0x02, 0x33, 0x0d,
+ 0x73, 0xb2, 0xab, 0x35, 0xfd, 0xa5, 0x6e, 0x4c,
+ 0x5c, 0x27, 0xc7, 0x7e, 0x4a, 0x28, 0xf8, 0xf5,
+ 0x00, 0xbe, 0x4c, 0xd7, 0x2c, 0x27, 0x83, 0x16,
+ 0x37, 0xda, 0x0c, 0xb1, 0xd7, 0x89, 0xd8, 0x8f,
+ 0x17, 0x69, 0x1b, 0x6b, 0x48, 0x2b, 0xce, 0x9c,
+ 0xbd, 0xf4, 0x0d, 0xb5, 0x4d, 0x12, 0x11, 0x36,
+ 0x49, 0xd3, 0x8b, 0x52, 0xce, 0x7e, 0x47, 0xb0,
+ 0xb5, 0x54, 0x77, 0xef, 0x90, 0xb8, 0x0e, 0xaf,
+ 0x6f, 0x97, 0x88, 0xde, 0x6b, 0x37, 0x24, 0xdd,
+ 0x91, 0x84, 0x00, 0x51, 0xab, 0x06, 0x96, 0x3c,
+ 0x82, 0x73, 0xcf, 0xae, 0x8d, 0x23, 0x86, 0x59,
+ 0x62, 0x5b, 0xeb, 0x2a, 0xaf, 0x40, 0x17, 0xed,
+ 0x2b, 0x60, 0x73, 0x7d, 0x99, 0x95, 0x3f, 0xd6,
+ 0x6c, 0xca, 0x1e, 0xf3, 0xb0, 0xcd, 0xd5, 0x1d,
+ 0x53, 0xe0, 0xd2, 0x8b, 0x57, 0x7b, 0xac, 0x67,
+ 0x5a, 0x5a, 0x0a, 0x64, 0x82, 0xab, 0x8f, 0x5a,
+ 0x36, 0xe2, 0x45, 0x50, 0xec, 0x3e, 0x14, 0x80,
+ 0x7c, 0xfd, 0x0c, 0xa9, 0x94, 0xfb, 0xfe, 0x72,
+ 0xec, 0x47, 0x71, 0x2e, 0x90, 0x97, 0xf6, 0x33,
+ 0xbd, 0x7d, 0x7e, 0x77, 0x8f, 0xad, 0xd4, 0x1d,
+ 0x1d, 0x53, 0x0f, 0x28, 0x39, 0x77, 0x06, 0x1a,
+ 0x75, 0xfc, 0x12, 0xe6, 0x45, 0xfc, 0x87, 0xe1,
+ 0x46, 0xac, 0xb0, 0x73, 0xca, 0x24, 0x7c, 0x71,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t c3des_cbc_192_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xb1, 0xef, 0x7c, 0xd0, 0xa0, 0x6b, 0xe4, 0x88,
+ 0x5c, 0xd7, 0xf1, 0xbf, 0x5f, 0xce, 0xda, 0x19,
+ 0x81, 0x32, 0xbb, 0x96, 0x7e, 0xb9, 0x6e, 0xa1,
+ 0x43, 0xde, 0x53, 0x66, 0x9c, 0x27, 0x94, 0x85,
+ 0xcb, 0x09, 0x4e, 0x16, 0xd8, 0x60, 0x7a, 0x38,
+ 0x27, 0x21, 0x4d, 0x08, 0xaa, 0xe2, 0x1e, 0x6e,
+ 0xa3, 0xcb, 0x9a, 0x7f, 0xd1, 0xbf, 0x18, 0x36,
+ 0x5a, 0x4d, 0x7a, 0x7f, 0xcf, 0x3f, 0xba, 0xa5,
+ 0x77, 0x5b, 0xb4, 0x79, 0xdc, 0xbf, 0x2a, 0x28,
+ 0x16, 0x27, 0x0f, 0x8b, 0xd7, 0x95, 0xc3, 0xcb,
+ 0xa1, 0x6a, 0x49, 0x53, 0xa8, 0x0c, 0x70, 0xde,
+ 0x90, 0x2e, 0x36, 0x74, 0x40, 0x5d, 0x81, 0x74,
+ 0x03, 0x11, 0xbd, 0xba, 0x40, 0x8d, 0x03, 0x86,
+ 0x2b, 0x17, 0x55, 0x20, 0xd8, 0x81, 0x30, 0xd2,
+ 0x2a, 0xbd, 0xea, 0xff, 0x5c, 0x69, 0x9b, 0xe6,
+ 0xe3, 0x21, 0x9a, 0x10, 0x3e, 0xb0, 0xf4, 0x7a,
+ 0xfc, 0x6e, 0x66, 0xec, 0x44, 0x0b, 0x95, 0x8d,
+ 0x13, 0xd4, 0xf6, 0x3e, 0xa1, 0xa1, 0xac, 0xb1,
+ 0xd8, 0x3d, 0x86, 0xaf, 0x5e, 0xef, 0x14, 0x6a,
+ 0x32, 0xf3, 0x13, 0x75, 0x3b, 0x64, 0x9a, 0xf4,
+ 0xd0, 0xf5, 0x00, 0x36, 0x9e, 0xdb, 0xfd, 0xcb,
+ 0xda, 0x1f, 0xed, 0x9d, 0x6d, 0x52, 0xd7, 0xb5,
+ 0x48, 0xce, 0x53, 0x5e, 0xdc, 0xc8, 0xe4, 0x96,
+ 0x04, 0x32, 0xa5, 0xcf, 0x0c, 0xba, 0xa0, 0xd0,
+ 0x44, 0xb3, 0xe8, 0x72, 0xc6, 0xff, 0x8f, 0xd4,
+ 0x4d, 0x0a, 0x22, 0x89, 0x74, 0x50, 0xaa, 0x65,
+ 0x15, 0xab, 0x99, 0xc8, 0xf9, 0xa4, 0x10, 0xe6,
+ 0xa6, 0x4b, 0x0c, 0xc8, 0xb9, 0xa7, 0x60, 0x41,
+ 0xe7, 0x57, 0x31, 0xfa, 0x86, 0x55, 0xdf, 0x29,
+ 0x49, 0xac, 0x55, 0x7b, 0x21, 0xf9, 0x3b, 0x1e,
+ 0x1f, 0xb4, 0x1c, 0x0b, 0x77, 0xcb, 0x88, 0xbf,
+ 0xa6, 0x79, 0xbf, 0x9a, 0x51, 0xc4, 0x8e, 0x59,
+ 0x9c, 0xb3, 0x9d, 0x9d, 0x6b, 0xb2, 0x15, 0x41,
+ 0x0d, 0x6c, 0xf7, 0x5e, 0xe2, 0xf9, 0xb3, 0x80,
+ 0x8f, 0x03, 0x67, 0x68, 0x6e, 0x4b, 0x4d, 0x52,
+ 0xbc, 0x9b, 0xa2, 0xd8, 0x29, 0x1e, 0x5c, 0xd7,
+ 0x59, 0x67, 0x94, 0x40, 0x9e, 0x08, 0x15, 0x0d,
+ 0x7e, 0xc9, 0x14, 0x53, 0xa8, 0x67, 0xb3, 0xb8,
+ 0xaa, 0x21, 0x0f, 0x79, 0x69, 0x48, 0x52, 0xea,
+ 0x56, 0x03, 0x7b, 0x55, 0xb7, 0xf3, 0xfe, 0xb1,
+ 0x8a, 0x22, 0x7d, 0x75, 0x55, 0x31, 0xad, 0x20,
+ 0x6a, 0xc2, 0xa4, 0xd1, 0x1e, 0xab, 0xdd, 0x29,
+ 0xb5, 0xf8, 0xdd, 0x9b, 0x1a, 0xb8, 0xe7, 0xde,
+ 0xae, 0xa1, 0xab, 0xbb, 0xf6, 0x00, 0x87, 0xc4,
+ 0x29, 0xee, 0x2b, 0xa1, 0xa9, 0x1a, 0x46, 0x05,
+ 0x5a, 0x12, 0x3f, 0x32, 0x81, 0x25, 0x20, 0x71,
+ 0xb6, 0xfa, 0x1f, 0x27, 0x2a, 0x33, 0x49, 0xfc,
+ 0x95, 0x00, 0x72, 0x6b, 0x03, 0x53, 0x94, 0x57,
+ 0x2f, 0x47, 0x3d, 0x2d, 0x7c, 0xb4, 0xde, 0xa7,
+ 0x96, 0x81, 0x12, 0xff, 0x2c, 0xec, 0x5c, 0x03,
+ 0x2a, 0x8c, 0x76, 0xc4, 0xed, 0x09, 0xe6, 0x00,
+ 0x28, 0xdb, 0x9b, 0x44, 0xb0, 0xb4, 0x7b, 0x57,
+ 0x3b, 0xb6, 0x4f, 0x0b, 0xff, 0xf2, 0xf5, 0x02,
+ 0x56, 0xcf, 0xd5, 0xbf, 0x71, 0xe6, 0x66, 0xf3,
+ 0x08, 0x8e, 0x8b, 0x15, 0x57, 0x07, 0x41, 0xa3,
+ 0x91, 0xc1, 0xe4, 0x64, 0x92, 0x89, 0xed, 0x22,
+ 0x88, 0x8f, 0x17, 0x91, 0xde, 0xea, 0x0c, 0xa6,
+ 0x86, 0x8e, 0x4c, 0xd9, 0x63, 0xc9, 0xe5, 0xdc,
+ 0xd6, 0xd3, 0x7b, 0x2b, 0x65, 0xfa, 0x36, 0x47,
+ 0x20, 0xa4, 0xe7, 0x0b, 0x52, 0xfa, 0xa6, 0xeb,
+ 0x1d, 0x20, 0xd0, 0x4b, 0xfd, 0x88, 0x8c, 0xbb,
+ 0x52, 0x9c, 0x2f, 0xb7, 0xba, 0x8b, 0xdd, 0x10,
+ 0x2d, 0x7d, 0x77, 0x79, 0x40, 0xa7, 0xed, 0xf9,
+ 0xbd, 0x2a, 0x55, 0x1f, 0x87, 0x1e, 0x3c, 0xfc,
+};
+
+const struct testvec c3des_cbc_192_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t c3des_cbc_192_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0x9e, 0x5d, 0x35, 0x56, 0xa7, 0xcc, 0xc0, 0x1c,
+ 0x60, 0x4c, 0x42, 0x90, 0x35, 0xf3, 0xc1, 0x20,
+ 0xf2, 0x07, 0x6f, 0xf8, 0x7c, 0x33, 0x6a, 0x74,
+ 0xdc, 0x85, 0xbc, 0x9c, 0xa2, 0x29, 0xc6, 0x69,
+ 0x0e, 0xef, 0x0f, 0xa9, 0x6e, 0xec, 0xf2, 0x23,
+ 0x2f, 0x9a, 0xbe, 0x1a, 0x89, 0x22, 0x00, 0xc4,
+ 0x5a, 0xaf, 0x4a, 0xa0, 0x4f, 0x30, 0x8f, 0x99,
+ 0xd2, 0x93, 0x6d, 0xfa, 0xcd, 0x2f, 0xad, 0x19,
+ 0x10, 0x14, 0x90, 0x3a, 0x4b, 0xab, 0x17, 0x2e,
+ 0x2c, 0xe1, 0x26, 0xe5, 0x76, 0xf1, 0xd1, 0x1d,
+ 0x4c, 0x77, 0x68, 0xfb, 0x45, 0x9a, 0x3e, 0x19,
+ 0xe0, 0xfb, 0xdc, 0xd4, 0x0e, 0x29, 0x7c, 0x06,
+ 0xd3, 0x45, 0xa8, 0xf7, 0x39, 0x91, 0xe6, 0x18,
+ 0x0f, 0x81, 0xe6, 0x7d, 0x6c, 0x65, 0x2e, 0x16,
+ 0x24, 0xa4, 0x16, 0x96, 0x0a, 0x7b, 0x5f, 0x3a,
+ 0x0c, 0xe9, 0x0e, 0x3f, 0x34, 0x38, 0xb0, 0xe1,
+ 0x39, 0x23, 0x5c, 0x3c, 0x00, 0xb4, 0xa0, 0xf7,
+ 0x42, 0x18, 0x70, 0x25, 0x82, 0x13, 0x24, 0x49,
+ 0xbb, 0x3f, 0xfb, 0xef, 0xb6, 0xc6, 0x7f, 0x3d,
+ 0x8c, 0x17, 0x62, 0x60, 0x6f, 0xd5, 0xda, 0x2c,
+ 0xf8, 0x85, 0xee, 0xa7, 0xc2, 0x76, 0x5d, 0x34,
+ 0x4c, 0xe1, 0x0d, 0x36, 0x6e, 0x02, 0xdd, 0x08,
+ 0x85, 0xe4, 0x90, 0xfe, 0x1f, 0x81, 0x4a, 0x06,
+ 0xa6, 0x72, 0x81, 0x79, 0x47, 0xd7, 0x6d, 0x92,
+ 0x8f, 0xb7, 0xb2, 0xfd, 0xd0, 0x60, 0x6c, 0x06,
+ 0x44, 0xcd, 0x20, 0x28, 0xef, 0x16, 0xc3, 0x01,
+ 0x19, 0x14, 0x34, 0x39, 0xad, 0x87, 0x9f, 0xde,
+ 0x76, 0xb9, 0xb9, 0x87, 0x1a, 0xbd, 0x8e, 0x2c,
+ 0xe6, 0xb3, 0xe7, 0xb6, 0x80, 0xf8, 0xc5, 0x22,
+ 0x5f, 0x53, 0xed, 0x03, 0xfe, 0x09, 0x2c, 0x9d,
+ 0xb6, 0x61, 0x4a, 0xbb, 0x07, 0x5d, 0xbd, 0x68,
+ 0x74, 0xab, 0x02, 0x81, 0x64, 0x7b, 0x97, 0xa3,
+ 0xad, 0x15, 0x99, 0x7a, 0x04, 0x33, 0xbd, 0x50,
+ 0x94, 0x11, 0xcc, 0xf7, 0x8b, 0x77, 0x88, 0x78,
+ 0x80, 0xfe, 0x5f, 0xa1, 0x63, 0xbc, 0xb0, 0x65,
+ 0xcb, 0x9d, 0x4c, 0xfe, 0x66, 0x4e, 0xff, 0xe3,
+ 0x43, 0x61, 0x99, 0x88, 0x88, 0x4c, 0xbc, 0x8a,
+ 0xf1, 0x69, 0x00, 0xc2, 0xe5, 0xb9, 0x65, 0x8b,
+ 0x10, 0xdf, 0x38, 0x3e, 0x9e, 0x9f, 0x87, 0xed,
+ 0x84, 0x71, 0xe7, 0xf2, 0xb5, 0xb6, 0x11, 0xed,
+ 0x1e, 0xd4, 0xc0, 0x6d, 0x77, 0x08, 0x4b, 0xfd,
+ 0x95, 0xd5, 0xc0, 0xbe, 0xa6, 0xcc, 0x3b, 0xea,
+ 0x11, 0x38, 0xa5, 0x59, 0x36, 0x2a, 0xf4, 0x98,
+ 0x52, 0x9d, 0x3b, 0x8c, 0x8a, 0x19, 0xbd, 0xfb,
+ 0x49, 0xcb, 0xb0, 0x57, 0x91, 0xc7, 0xf8, 0x2a,
+ 0x89, 0xa8, 0x85, 0x03, 0xdf, 0x6e, 0xad, 0xf4,
+ 0x8a, 0x88, 0x9a, 0x2b, 0x5d, 0xe8, 0xca, 0xa9,
+ 0x8f, 0x18, 0xa3, 0x6a, 0x37, 0x84, 0xa9, 0x24,
+ 0x5b, 0xce, 0xd6, 0xbe, 0x7e, 0x40, 0x86, 0x6a,
+ 0xc3, 0x47, 0x28, 0x66, 0xf0, 0x8c, 0x2d, 0x69,
+ 0x22, 0x64, 0x61, 0x36, 0x6a, 0x0c, 0xc4, 0x18,
+ 0x5f, 0xd7, 0xff, 0xbc, 0xf1, 0x94, 0x16, 0xfb,
+ 0x26, 0xa7, 0x80, 0xa4, 0x2d, 0x72, 0xc6, 0x9d,
+ 0xa7, 0xed, 0x04, 0x13, 0x0f, 0xe7, 0xf8, 0x93,
+ 0x57, 0x6b, 0xd5, 0xa4, 0xad, 0x9a, 0x97, 0xeb,
+ 0x97, 0xe7, 0x60, 0x01, 0x89, 0x3f, 0x88, 0xf2,
+ 0xee, 0xf3, 0x79, 0xd6, 0x5a, 0x03, 0x94, 0x07,
+ 0xd3, 0x33, 0xc8, 0xda, 0x15, 0x17, 0x0a, 0x8f,
+ 0xbd, 0x58, 0x1b, 0xfe, 0x3d, 0x77, 0x5d, 0x8f,
+ 0x4e, 0x0e, 0x98, 0x7d, 0x02, 0x63, 0x94, 0x73,
+ 0x4a, 0x58, 0x47, 0xed, 0x52, 0xfc, 0x85, 0x19,
+ 0x5d, 0x2f, 0xfa, 0x07, 0x44, 0xbd, 0x8e, 0xcb,
+ 0x20, 0x63, 0x9d, 0x2b, 0x61, 0x5c, 0x19, 0x71,
+ 0x80, 0xe5, 0x25, 0x5b, 0x2e, 0xc5, 0xfe, 0x1a,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t c3des_cbc_192_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0xf4, 0xb0, 0xb0, 0xcb, 0x79, 0xcc, 0x8c, 0x0a,
+ 0x3b, 0xc7, 0x43, 0x4e, 0x62, 0x9d, 0xde, 0xb4,
+ 0xab, 0xa5, 0x62, 0x63, 0x32, 0xa7, 0x18, 0x2b,
+ 0xe3, 0xee, 0x44, 0xc6, 0x6f, 0xb2, 0xdc, 0x21,
+ 0xc5, 0xc8, 0x9e, 0x32, 0x71, 0x4c, 0x7a, 0x82,
+ 0x8d, 0xe0, 0xad, 0x91, 0x88, 0x0c, 0x41, 0x83,
+ 0x28, 0x0d, 0xed, 0xa7, 0xeb, 0x48, 0xb1, 0x31,
+ 0xfa, 0x40, 0xd9, 0x44, 0x19, 0xee, 0x8d, 0x2c,
+ 0x7d, 0xe2, 0x39, 0xa0, 0x39, 0xaa, 0x86, 0xab,
+ 0xb5, 0x68, 0xe5, 0x83, 0x06, 0x61, 0xec, 0xe6,
+ 0xc2, 0x85, 0xb2, 0x46, 0xf4, 0x5b, 0x0e, 0x34,
+ 0x7e, 0x0c, 0xa0, 0xda, 0xef, 0x58, 0x9c, 0x39,
+ 0x95, 0xa2, 0xca, 0xd3, 0x3b, 0x4d, 0x76, 0xe3,
+ 0x34, 0x6d, 0x08, 0xa4, 0xba, 0x88, 0x58, 0x39,
+ 0xb4, 0xe4, 0x6b, 0xb6, 0x32, 0x50, 0x2c, 0xe2,
+ 0x0a, 0x37, 0xbc, 0x98, 0x38, 0x32, 0x17, 0x1b,
+ 0x12, 0xef, 0xdc, 0x9d, 0x91, 0x09, 0x8e, 0xd8,
+ 0xc3, 0xf8, 0x7b, 0x35, 0x41, 0x3b, 0xf8, 0xf5,
+ 0x37, 0x48, 0x04, 0xf7, 0x94, 0xbf, 0x54, 0x8d,
+ 0x79, 0x49, 0x8f, 0xf0, 0x3f, 0xb7, 0x90, 0x76,
+ 0x14, 0x09, 0xc6, 0x8c, 0xba, 0x1a, 0x30, 0x1b,
+ 0xbb, 0xd9, 0xe2, 0xb5, 0xe8, 0xd9, 0x9b, 0x68,
+ 0x60, 0x90, 0xd3, 0x4a, 0xe8, 0x65, 0x7b, 0xaa,
+ 0xb0, 0xda, 0x69, 0x1d, 0x45, 0x78, 0x2c, 0x3b,
+ 0x59, 0x29, 0x3c, 0x26, 0x9a, 0xd2, 0xa5, 0xfd,
+ 0xb7, 0x16, 0x59, 0x7c, 0x46, 0xea, 0x99, 0xd0,
+ 0x06, 0x01, 0x3f, 0xd2, 0x23, 0xcc, 0xde, 0xb8,
+ 0xaa, 0x88, 0x17, 0x03, 0xe1, 0x48, 0x2c, 0xdd,
+ 0xce, 0xd1, 0x2c, 0xce, 0x37, 0xee, 0xe6, 0xa6,
+ 0x47, 0x8c, 0x07, 0xe5, 0xfe, 0x01, 0xc6, 0x27,
+ 0xfe, 0x3f, 0x9d, 0x30, 0x18, 0x36, 0xe7, 0xa7,
+ 0x37, 0x1d, 0xcf, 0x6d, 0x4c, 0x82, 0xec, 0x58,
+ 0xa1, 0x6f, 0x56, 0xc6, 0x08, 0x25, 0x94, 0xda,
+ 0xae, 0x1a, 0x4f, 0xda, 0xb2, 0xf4, 0xbf, 0x94,
+ 0xff, 0x66, 0x6a, 0xb1, 0x1f, 0x42, 0xfe, 0x32,
+ 0xa4, 0x0e, 0x3d, 0x6a, 0x16, 0x44, 0xe0, 0xac,
+ 0xe8, 0xc1, 0xe2, 0xa8, 0x73, 0xab, 0xac, 0x58,
+ 0xb1, 0xbc, 0x94, 0xb2, 0x6a, 0xe4, 0x45, 0xf5,
+ 0x90, 0x6b, 0x82, 0xeb, 0x9e, 0x22, 0x9e, 0xb2,
+ 0x27, 0x3e, 0xc8, 0x55, 0xf4, 0x8f, 0xda, 0x04,
+ 0xa3, 0x9c, 0xa4, 0x79, 0xbd, 0x79, 0xd3, 0xbd,
+ 0xbe, 0x72, 0x7f, 0x90, 0xef, 0xc3, 0x34, 0x17,
+ 0x72, 0x6f, 0xb4, 0xfe, 0x62, 0x56, 0xc3, 0xd6,
+ 0x43, 0xc8, 0x4c, 0x76, 0x91, 0x04, 0x97, 0x4c,
+ 0x84, 0x98, 0x56, 0xb7, 0x7b, 0x4f, 0xd5, 0xcf,
+ 0x1b, 0x9c, 0x09, 0xe3, 0x1d, 0xdf, 0x0e, 0xfa,
+ 0x39, 0xc8, 0x48, 0x43, 0x84, 0xec, 0x79, 0xc8,
+ 0x7f, 0x4f, 0xa8, 0xc0, 0xb4, 0xde, 0x8b, 0x79,
+ 0xcb, 0x9c, 0x42, 0x81, 0x49, 0xdc, 0x39, 0xb5,
+ 0x31, 0xa6, 0x22, 0xba, 0x71, 0xb8, 0x2d, 0x1d,
+ 0xc8, 0x17, 0xd8, 0x9d, 0x26, 0x2b, 0xd5, 0xcf,
+ 0x57, 0x46, 0x0a, 0x61, 0x7e, 0xb7, 0xc3, 0x9c,
+ 0xa6, 0x44, 0x60, 0x2d, 0x30, 0xb8, 0x10, 0x47,
+ 0x7d, 0x7e, 0x87, 0x76, 0xc1, 0x4e, 0x85, 0x77,
+ 0xbc, 0x30, 0x32, 0x56, 0x0a, 0x5b, 0x1c, 0xd0,
+ 0xf6, 0x47, 0x48, 0x22, 0xf4, 0x6e, 0x38, 0xc5,
+ 0xab, 0xe2, 0xd0, 0x4d, 0x40, 0x27, 0xab, 0x8f,
+ 0x43, 0xb1, 0x60, 0x29, 0x07, 0xd0, 0xf5, 0x25,
+ 0xe5, 0xfa, 0xe7, 0x46, 0x32, 0x37, 0xb9, 0xae,
+ 0x2e, 0x02, 0x8c, 0x94, 0x15, 0x69, 0xd6, 0x74,
+ 0xb4, 0x36, 0xdd, 0x94, 0x70, 0xa7, 0x16, 0x7b,
+ 0x4c, 0xd3, 0x48, 0x83, 0xc5, 0xb2, 0xb0, 0x6a,
+ 0xfe, 0x7e, 0xd4, 0xe5, 0x6d, 0xa5, 0x96, 0x20,
+ 0x08, 0x59, 0xbd, 0x0c, 0x3d, 0x55, 0xa5, 0x03,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t c3des_cbc_192_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0xea, 0x7c, 0x8c, 0x8e, 0x3e, 0x61, 0x34, 0x3d,
+ 0xe0, 0x7f, 0xd3, 0xe1, 0x3a, 0xb9, 0xc8, 0xf2,
+ 0x98, 0xdc, 0x59, 0x26, 0xd2, 0xd8, 0xa7, 0x7f,
+ 0x41, 0x98, 0x24, 0xa8, 0x28, 0x0c, 0x88, 0x55,
+ 0x91, 0xdb, 0x29, 0x17, 0x70, 0xd7, 0x03, 0xff,
+ 0xbd, 0x0e, 0xbf, 0xf8, 0x73, 0x92, 0x19, 0xe9,
+ 0x92, 0x67, 0xdb, 0x08, 0x94, 0x77, 0x71, 0x2d,
+ 0x00, 0xad, 0x26, 0x42, 0x2d, 0xac, 0x8c, 0x67,
+ 0x6f, 0xb3, 0x8e, 0x36, 0x22, 0xeb, 0x1f, 0x8c,
+ 0xd4, 0x9b, 0x9f, 0xa6, 0xa9, 0xb1, 0x52, 0x65,
+ 0x9a, 0xfe, 0xcc, 0x92, 0x48, 0x75, 0xf6, 0xb8,
+ 0x59, 0xfe, 0x0e, 0x67, 0x93, 0xce, 0x3b, 0x7e,
+ 0x51, 0x74, 0xe5, 0x24, 0x35, 0x08, 0x68, 0x21,
+ 0x6a, 0x7f, 0xdd, 0x8c, 0xfd, 0xcd, 0x6d, 0x90,
+ 0xc5, 0x3b, 0x26, 0x9e, 0x00, 0xf4, 0x1e, 0x70,
+ 0xd3, 0xe7, 0xe8, 0x2f, 0x52, 0x87, 0x76, 0x84,
+ 0xbb, 0x5c, 0x76, 0x5a, 0xc8, 0xea, 0x74, 0xe2,
+ 0x9e, 0x85, 0xf6, 0x53, 0x85, 0x1a, 0x6e, 0x02,
+ 0x0d, 0x32, 0x11, 0xc4, 0xec, 0xee, 0x79, 0x27,
+ 0xda, 0xca, 0xc0, 0x0b, 0x8e, 0x2d, 0xb7, 0x7d,
+ 0x8c, 0x6e, 0xfb, 0xa3, 0xa8, 0x24, 0x24, 0x62,
+ 0xc8, 0xdd, 0xc7, 0x16, 0x09, 0x33, 0x0f, 0xe5,
+ 0xc8, 0x60, 0x3d, 0xb6, 0xbf, 0x6c, 0x28, 0xd2,
+ 0x0b, 0x9c, 0xd9, 0xcb, 0x64, 0x49, 0xe4, 0x80,
+ 0x72, 0x58, 0xaa, 0xaa, 0x7e, 0x1d, 0x9f, 0xd7,
+ 0x29, 0x15, 0x65, 0xfc, 0xfd, 0x3f, 0xe1, 0x82,
+ 0x25, 0x3c, 0xd4, 0xbe, 0x59, 0x79, 0x63, 0xd1,
+ 0xd6, 0x0e, 0xda, 0x00, 0xf3, 0xaa, 0x13, 0xd3,
+ 0xed, 0xef, 0xca, 0x8b, 0x97, 0x15, 0x2d, 0x10,
+ 0x6f, 0xcf, 0xee, 0xc7, 0x21, 0xad, 0xe3, 0xe4,
+ 0xd8, 0x95, 0x21, 0x1f, 0xc0, 0x06, 0x3a, 0xbc,
+ 0xbb, 0x2a, 0x92, 0x78, 0x76, 0x9d, 0x1e, 0x7b,
+ 0xb5, 0x29, 0xaf, 0x96, 0x75, 0x2b, 0x41, 0xbd,
+ 0xae, 0x79, 0x28, 0x72, 0xe7, 0x54, 0xc4, 0x08,
+ 0xd3, 0xd2, 0xac, 0x96, 0xd0, 0x0f, 0x9b, 0x68,
+ 0x7d, 0x3f, 0xc2, 0xdd, 0x3d, 0xfc, 0xca, 0xcd,
+ 0x11, 0x71, 0xd9, 0x48, 0x53, 0x9f, 0xd3, 0x79,
+ 0x7d, 0x47, 0x71, 0x2a, 0x6d, 0x9e, 0xa9, 0x47,
+ 0xa1, 0xf7, 0x97, 0x80, 0x83, 0x70, 0x6b, 0xfe,
+ 0x10, 0x11, 0x6a, 0x0e, 0xdd, 0xde, 0x22, 0x3c,
+ 0x19, 0x30, 0x73, 0x73, 0x2e, 0x4b, 0x54, 0x17,
+ 0xc3, 0x2e, 0xe9, 0xce, 0xe0, 0xe3, 0xa0, 0x1a,
+ 0x28, 0xd1, 0x50, 0xa8, 0xd2, 0x40, 0xe2, 0x1b,
+ 0xfa, 0x49, 0x06, 0x49, 0x8b, 0x4b, 0xd9, 0xd5,
+ 0xf5, 0x50, 0xae, 0x64, 0x19, 0xe1, 0xd9, 0x4e,
+ 0xbb, 0x29, 0x70, 0x66, 0x46, 0xa8, 0x7e, 0x5b,
+ 0xdc, 0xe2, 0xd5, 0x9d, 0x56, 0x6d, 0x4c, 0xe6,
+ 0x0e, 0x6b, 0x71, 0x40, 0x82, 0xf7, 0xb3, 0xad,
+ 0x23, 0x17, 0xe3, 0x1c, 0x61, 0x1d, 0x3b, 0x71,
+ 0xfc, 0x06, 0x17, 0xec, 0x6c, 0x77, 0x98, 0x27,
+ 0xc7, 0x4b, 0x65, 0x17, 0x81, 0xe7, 0xcb, 0xce,
+ 0x09, 0x76, 0x82, 0x82, 0x4a, 0x53, 0x67, 0xa0,
+ 0x05, 0x25, 0x4c, 0xc4, 0xa7, 0xad, 0xa7, 0xaf,
+ 0xa0, 0x11, 0xd7, 0x73, 0x3b, 0x30, 0xbf, 0x53,
+ 0x50, 0x9b, 0xd8, 0xf3, 0x32, 0x15, 0xdd, 0x36,
+ 0x88, 0xc2, 0x39, 0x51, 0xb6, 0xb8, 0x0d, 0x5c,
+ 0x20, 0x4e, 0x24, 0xee, 0x95, 0x32, 0x61, 0x25,
+ 0xda, 0x73, 0x0d, 0x8a, 0x58, 0xe6, 0xcc, 0xad,
+ 0x79, 0x3d, 0xef, 0x29, 0x0c, 0x9f, 0xe1, 0xa7,
+ 0x22, 0x1e, 0xea, 0x7a, 0x4f, 0xfb, 0xc1, 0x1f,
+ 0x17, 0xca, 0x69, 0xd6, 0xa4, 0xce, 0x6e, 0xc0,
+ 0x70, 0xa3, 0x08, 0x32, 0x87, 0xb4, 0x6b, 0x80,
+ 0x5c, 0x7f, 0x88, 0x5c, 0xbf, 0x07, 0xd8, 0xe9,
+ 0xdd, 0xd2, 0x76, 0xa9, 0xaa, 0xd9, 0x55, 0x48,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t c3des_cbc_192_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0xf3, 0x49, 0xda, 0x5c, 0xde, 0x9d, 0x3e, 0x9d,
+ 0xb9, 0xc2, 0x6e, 0x96, 0xa9, 0x93, 0x10, 0x73,
+ 0x0e, 0x26, 0x39, 0xd6, 0x9f, 0x04, 0x5f, 0x69,
+ 0x54, 0xa3, 0x7c, 0x46, 0x7b, 0x18, 0x93, 0xc0,
+ 0xbb, 0x0c, 0x96, 0x6f, 0xb0, 0xbf, 0xce, 0x67,
+ 0x33, 0x3e, 0x56, 0xe8, 0x6b, 0x4d, 0x3f, 0xc8,
+ 0x3c, 0xc6, 0x89, 0x2c, 0x0b, 0x95, 0x3a, 0xaf,
+ 0xc0, 0xf3, 0x1f, 0x0e, 0x07, 0x01, 0xa6, 0x35,
+ 0x19, 0x79, 0x91, 0x24, 0xaa, 0x0d, 0xf0, 0x53,
+ 0x27, 0x7d, 0xbb, 0xa6, 0xb6, 0x44, 0x31, 0x4b,
+ 0xd4, 0xcf, 0xf6, 0x6d, 0x18, 0xa2, 0x28, 0x8a,
+ 0xc1, 0x0a, 0xbe, 0x57, 0x0c, 0x61, 0x5f, 0xd9,
+ 0x12, 0x14, 0xfe, 0xe2, 0xc7, 0x10, 0x72, 0xee,
+ 0x19, 0xb8, 0x16, 0x0b, 0x88, 0x87, 0xce, 0xf3,
+ 0xfe, 0x57, 0x37, 0xd1, 0xa2, 0xf7, 0xd0, 0x5e,
+ 0x73, 0xde, 0x39, 0x35, 0xbc, 0xde, 0xed, 0x61,
+ 0x4b, 0x31, 0xdc, 0xfe, 0x3c, 0x4d, 0x98, 0xa9,
+ 0x36, 0xb0, 0x34, 0x5b, 0xb4, 0xb7, 0x79, 0x25,
+ 0x6e, 0x24, 0x7e, 0x10, 0xfe, 0x20, 0xd5, 0x16,
+ 0x86, 0xaf, 0xcd, 0x26, 0x34, 0xd3, 0x2e, 0xdc,
+ 0x7c, 0x69, 0xe3, 0xc5, 0x62, 0x0c, 0xba, 0x29,
+ 0x9c, 0x4b, 0x2f, 0x39, 0x45, 0xe1, 0xcf, 0xc5,
+ 0xfe, 0x35, 0xb6, 0x2f, 0xb1, 0x1a, 0x90, 0xe1,
+ 0xa7, 0x39, 0xe8, 0x1e, 0x5f, 0xac, 0xab, 0x1e,
+ 0x32, 0xba, 0xc5, 0x92, 0x39, 0x62, 0x37, 0x2c,
+ 0x49, 0xf1, 0x62, 0x90, 0xf7, 0x1e, 0x10, 0xce,
+ 0x8e, 0x95, 0xa3, 0xc6, 0xd8, 0xe5, 0xc8, 0xdf,
+ 0xcc, 0x94, 0x7d, 0x26, 0xab, 0x29, 0xbb, 0x9d,
+ 0xf3, 0x73, 0xce, 0xac, 0x76, 0xdf, 0x75, 0x2a,
+ 0x3e, 0x8f, 0x47, 0xff, 0x76, 0xfe, 0xea, 0xd4,
+ 0x4a, 0xa9, 0x36, 0x9d, 0x12, 0x45, 0xb7, 0x99,
+ 0x81, 0xb6, 0x77, 0x98, 0x13, 0xfb, 0x5a, 0xe5,
+ 0x40, 0x87, 0x61, 0x0d, 0x10, 0x76, 0xf6, 0x3e,
+ 0x48, 0xac, 0xc4, 0x27, 0x87, 0xcd, 0x07, 0xde,
+ 0x0b, 0x23, 0x97, 0x61, 0x3d, 0x18, 0x64, 0x7f,
+ 0xbf, 0xd6, 0x87, 0xc1, 0x11, 0xfb, 0xf9, 0xda,
+ 0x14, 0xa1, 0x01, 0xf8, 0x7e, 0xea, 0x5b, 0x5b,
+ 0xdd, 0x09, 0xf9, 0x31, 0x80, 0x3c, 0xee, 0x34,
+ 0x2d, 0xda, 0x71, 0xd9, 0x32, 0x7d, 0x45, 0xb2,
+ 0x53, 0xea, 0xd5, 0x7c, 0x85, 0x45, 0xce, 0x1d,
+ 0x2b, 0xe9, 0xd7, 0x95, 0xf8, 0x8c, 0x08, 0xe4,
+ 0xd0, 0x2f, 0x60, 0x75, 0x02, 0xf3, 0xde, 0xeb,
+ 0x46, 0x40, 0xa8, 0xd2, 0x37, 0xd6, 0xca, 0x5d,
+ 0xb9, 0xf4, 0x51, 0x31, 0x8a, 0x1a, 0x82, 0xbd,
+ 0x6f, 0x6d, 0x88, 0x2b, 0x63, 0x0f, 0xe1, 0xf0,
+ 0xcf, 0x13, 0x79, 0x1d, 0x78, 0x82, 0x66, 0xa1,
+ 0xef, 0xdb, 0x34, 0x50, 0xd2, 0x71, 0x47, 0x49,
+ 0x41, 0x74, 0xd9, 0x0b, 0x14, 0x38, 0x1f, 0xc3,
+ 0x09, 0x4d, 0xb3, 0xa6, 0x03, 0x3f, 0x56, 0x67,
+ 0xd7, 0x51, 0x4c, 0x8a, 0x1d, 0x37, 0x99, 0xfb,
+ 0xe1, 0x84, 0x57, 0x55, 0x9b, 0xf8, 0x73, 0x63,
+ 0x68, 0x73, 0x89, 0x52, 0x06, 0xe7, 0x34, 0xe7,
+ 0x1a, 0x15, 0x7e, 0xd9, 0x84, 0xa3, 0x0e, 0x68,
+ 0x14, 0x1c, 0xe8, 0x23, 0x9e, 0xe3, 0x8f, 0x71,
+ 0x02, 0x9b, 0x87, 0xd4, 0xd9, 0x1b, 0xd1, 0x9e,
+ 0x9e, 0xa0, 0x7e, 0x49, 0x8e, 0xaa, 0x89, 0xb5,
+ 0x16, 0x48, 0x07, 0xb3, 0x3d, 0x9e, 0x4c, 0x35,
+ 0x3e, 0x94, 0xa9, 0xf8, 0x82, 0x50, 0x6a, 0x41,
+ 0x28, 0x3e, 0x9f, 0x9a, 0x1a, 0x5d, 0x02, 0x7c,
+ 0xd0, 0x32, 0x52, 0xa5, 0xee, 0x09, 0x27, 0x2d,
+ 0x49, 0x17, 0xf7, 0x92, 0xa1, 0x63, 0x9d, 0x2a,
+ 0xfd, 0x53, 0x26, 0x14, 0x7c, 0x92, 0x72, 0xa6,
+ 0x38, 0x18, 0x8f, 0xb5, 0x54, 0xb3, 0x69, 0x63,
+ 0x6a, 0xdc, 0xb1, 0x5a, 0x12, 0x7a, 0x0b, 0xa3,
+};
+
+const struct testvec c3des_cbc_192_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = c3des_cbc_ptxt,
+ .ctxt = c3des_cbc_192_encblkno8_vec3_ctxt,
+ },
+};
+
+static int
+open_disk(const char *devpath, const char *imgpath, size_t size)
+{
+ int fd;
+
+ fd = open(imgpath, O_CREAT | O_RDWR | O_TRUNC, 0600);
+ if (fd < 0)
+ return -1;
+
+ if (ftruncate(fd, size) < 0)
+ goto fail;
+
+ if (rump_pub_etfs_register_withsize(devpath,
+ imgpath, RUMP_ETFS_BLK, 0, size) < 0) {
+ goto fail;
+ }
+
+ unlink(imgpath);
+ return fd;
+fail:
+ close(fd);
+ unlink(imgpath);
+ return -1;
+}
+
+static int
+open_cgd(int devno)
+{
+ char devpath[32];
+
+ sprintf(devpath, "/dev/rcgd%d%c", devno, getrawpartition() + 'a');
+
+ return rump_sys_open(devpath, O_RDWR, 0);
+}
+
+static int
+configure_cgd(int fd, const char *dkpath, const char *alg,
+ const char *ivmethod, const char *key, size_t keylen)
+{
+ struct cgd_ioctl ci;
+
+ memset(&ci, 0, sizeof(ci));
+ ci.ci_disk = dkpath;
+ ci.ci_alg = alg;
+ ci.ci_ivmethod = ivmethod;
+ ci.ci_keylen = 8 * keylen - 8; /* Exclude the NUL terminator. */
+ ci.ci_key = key;
+ ci.ci_blocksize = 64;
+
+ return rump_sys_ioctl(fd, CGDIOCSET, &ci);
+}
+
+static int
+unconfigure_cgd(int fd)
+{
+ struct cgd_ioctl ci;
+
+ return rump_sys_ioctl(fd, CGDIOCCLR, &ci);
+}
+
+static int
+write_testvec(int cgdfd, const struct testvec *tv)
+{
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ return -1;
+
+ if (rump_sys_write(cgdfd, tv->ptxt, SECSIZE) != SECSIZE)
+ return -1;
+
+ return 0;
+}
+
+static int
+read_testvec(int cgdfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (rump_sys_read(cgdfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ptxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+static int
+check_testvec(int dkfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (lseek(dkfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (read(dkfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ctxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+ATF_TC(cgd_3des_cbc_192_encblkno1);
+ATF_TC_HEAD(cgd_3des_cbc_192_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test 3des-cbc with 192 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_3des_cbc_192_encblkno1, tc)
+{
+ const char imgpath[] = "3des-cbc-192-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "3des-cbc", "encblkno1",
+ c3des_cbc_192_key, sizeof(c3des_cbc_192_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "3des-cbc", "encblkno1",
+ c3des_cbc_192_key, sizeof(c3des_cbc_192_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_3des_cbc_192_encblkno8);
+ATF_TC_HEAD(cgd_3des_cbc_192_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test 3des-cbc with 192 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_3des_cbc_192_encblkno8, tc)
+{
+ const char imgpath[] = "3des-cbc-192-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "3des-cbc", "encblkno8",
+ c3des_cbc_192_key, sizeof(c3des_cbc_192_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &c3des_cbc_192_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "3des-cbc", "encblkno8",
+ c3des_cbc_192_key, sizeof(c3des_cbc_192_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &c3des_cbc_192_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &c3des_cbc_192_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, cgd_3des_cbc_192_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_3des_cbc_192_encblkno8);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/dev/cgd/t_cgd_aes.c b/contrib/netbsd-tests/dev/cgd/t_cgd_aes.c
new file mode 100644
index 0000000..9416333
--- /dev/null
+++ b/contrib/netbsd-tests/dev/cgd/t_cgd_aes.c
@@ -0,0 +1,3606 @@
+/* $NetBSD: t_cgd_aes.c,v 1.5 2016/12/11 00:23:44 alnsn Exp $ */
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * Copyright (c) 2007 The Institute of Electrical and Electronics Engineers, Inc
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Alexander Nasonov.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/sysctl.h>
+
+#include <atf-c.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <util.h>
+
+#include <dev/cgdvar.h>
+
+#include <rump/rump.h>
+#include <rump/rump_syscalls.h>
+
+#include "../../h_macros.h"
+
+#define SECSIZE 512
+
+struct testvec {
+ unsigned int blkno;
+ const uint8_t *ptxt; /* PlainText */
+ const uint8_t *ctxt; /* CipherText */
+};
+
+/*
+ * 128 bits CBC key, NUL terminated.
+ */
+static const char aes_cbc_128_key[17] = {
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
+ 0
+};
+
+/*
+ * 192 bits CBC key, NUL terminated.
+ */
+static const char aes_cbc_192_key[25] = {
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* ABCDEFGH */
+ 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* IJKLMNOP */
+ 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* QRSTUVWX */
+ 0
+};
+
+/*
+ * 256 bits CBC key, NUL terminated.
+ */
+static const char aes_cbc_256_key[33] = {
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, /* 89abcdef */
+ 0
+};
+
+static const uint8_t aes_cbc_ptxt[SECSIZE] =
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop";
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t aes_cbc_128_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x1e, 0x95, 0x12, 0x15, 0xf6, 0xe0, 0xa7, 0x56,
+ 0x95, 0xa0, 0xa7, 0x35, 0x77, 0xf4, 0xdd, 0xdc,
+ 0x37, 0xc0, 0x28, 0x20, 0x00, 0x79, 0xa0, 0x35,
+ 0xe0, 0x83, 0x23, 0x95, 0x4e, 0xea, 0x8d, 0xa2,
+ 0x11, 0xbf, 0x9a, 0xd5, 0x21, 0x1e, 0x15, 0xb9,
+ 0xd1, 0x2e, 0xd2, 0xd9, 0xa5, 0xcc, 0x26, 0x75,
+ 0xba, 0x3e, 0x30, 0x11, 0xb2, 0x40, 0xdd, 0x1d,
+ 0x07, 0x3b, 0xe6, 0x00, 0xa7, 0x31, 0x9e, 0x58,
+ 0x41, 0xf3, 0x02, 0xf5, 0xad, 0x35, 0x79, 0x9a,
+ 0x9e, 0x03, 0xc8, 0x7a, 0x9d, 0x1d, 0x58, 0x9f,
+ 0x98, 0x67, 0xe2, 0x49, 0x81, 0x0c, 0x23, 0x90,
+ 0xd8, 0xc6, 0xf0, 0xc5, 0x73, 0x46, 0xd5, 0x14,
+ 0x1d, 0x78, 0x24, 0x7c, 0x9f, 0x5c, 0x8c, 0xe6,
+ 0x5d, 0x85, 0x7a, 0x5f, 0x76, 0xcc, 0xd8, 0xe9,
+ 0x03, 0xff, 0xfd, 0xd4, 0x12, 0x3f, 0xcb, 0xb0,
+ 0xfe, 0xfd, 0x86, 0x00, 0x0c, 0xe3, 0xdd, 0xa6,
+ 0x89, 0x92, 0xfe, 0xc8, 0x07, 0x5a, 0x94, 0x55,
+ 0x75, 0xae, 0x68, 0x47, 0xba, 0x84, 0x75, 0x58,
+ 0x33, 0x30, 0x2c, 0x16, 0x5b, 0xe9, 0x3f, 0x2a,
+ 0x09, 0xf9, 0x69, 0x23, 0x77, 0xd7, 0x2b, 0x95,
+ 0x4b, 0x78, 0x59, 0xcc, 0xfa, 0xf5, 0x79, 0xd2,
+ 0x05, 0x87, 0x66, 0x57, 0x93, 0xbf, 0x05, 0x90,
+ 0x4d, 0x6d, 0xd2, 0x72, 0x92, 0x24, 0xec, 0x14,
+ 0xe7, 0xbf, 0x82, 0x57, 0xbb, 0x14, 0x51, 0xe6,
+ 0xce, 0x3f, 0xa1, 0xfc, 0x63, 0x75, 0xee, 0xde,
+ 0xf9, 0x31, 0xd3, 0xa0, 0x07, 0xcd, 0x4d, 0x8f,
+ 0x83, 0x7d, 0x65, 0xe1, 0xc6, 0x60, 0x9e, 0x5c,
+ 0x51, 0x76, 0xfa, 0x64, 0xdf, 0xdc, 0xaf, 0x38,
+ 0xee, 0xe9, 0x8f, 0x4b, 0xa0, 0x3a, 0x21, 0xdf,
+ 0x58, 0x3b, 0x73, 0xf5, 0x30, 0xbb, 0x29, 0xe0,
+ 0xff, 0x60, 0xf0, 0x05, 0x5e, 0x37, 0xbc, 0x78,
+ 0x95, 0x3f, 0xa8, 0xd4, 0xb4, 0x82, 0x0d, 0xe1,
+ 0x10, 0xe3, 0xa7, 0x61, 0x37, 0x58, 0x28, 0x14,
+ 0x22, 0x57, 0x32, 0x28, 0x80, 0x98, 0x3e, 0x5f,
+ 0x71, 0xcf, 0x34, 0xb8, 0x6d, 0x6b, 0xc0, 0x23,
+ 0xc1, 0x9e, 0x58, 0x4f, 0xd5, 0xa4, 0x14, 0x03,
+ 0x2a, 0xed, 0xc4, 0xa7, 0x77, 0x7c, 0x4f, 0x94,
+ 0x91, 0x1d, 0x47, 0x34, 0x82, 0xe8, 0x9d, 0x32,
+ 0x5c, 0xc7, 0x38, 0xe9, 0x92, 0xcd, 0x35, 0xfd,
+ 0x1c, 0xcc, 0x3c, 0x28, 0x75, 0x6f, 0xff, 0xd5,
+ 0xe8, 0xbf, 0x90, 0x92, 0x34, 0x13, 0x11, 0x89,
+ 0xe0, 0xa2, 0x25, 0xeb, 0x82, 0x63, 0x31, 0x80,
+ 0x50, 0x6c, 0x99, 0xaa, 0x97, 0x0e, 0x59, 0x45,
+ 0x64, 0xb8, 0x77, 0x78, 0x6b, 0x24, 0xac, 0xc0,
+ 0xc9, 0xa9, 0xbc, 0x13, 0xd1, 0x5e, 0x50, 0x9a,
+ 0x91, 0x1a, 0x08, 0xf7, 0xc5, 0x18, 0x9f, 0x87,
+ 0x97, 0x9c, 0x0a, 0x27, 0xf1, 0x66, 0xf8, 0x09,
+ 0x52, 0x09, 0x41, 0x07, 0xc1, 0xa1, 0x91, 0xa4,
+ 0x59, 0x09, 0x75, 0x57, 0x5b, 0x53, 0x79, 0x58,
+ 0xa2, 0x9e, 0x49, 0xa2, 0x5e, 0xf7, 0x28, 0x1c,
+ 0x43, 0xa6, 0xcb, 0x88, 0x46, 0x84, 0xc9, 0x7f,
+ 0x84, 0xdb, 0x45, 0x0c, 0xb3, 0x7f, 0x01, 0x40,
+ 0x71, 0x3e, 0x48, 0x12, 0x1f, 0xbc, 0x1e, 0xdf,
+ 0x41, 0x50, 0xb2, 0x11, 0x67, 0x83, 0x19, 0x04,
+ 0x0e, 0x21, 0xd5, 0xf2, 0x54, 0x99, 0xfb, 0x47,
+ 0xf2, 0x5e, 0x02, 0x4b, 0x61, 0x6d, 0xef, 0x78,
+ 0x29, 0xe4, 0x3a, 0x56, 0x14, 0x20, 0x6f, 0x70,
+ 0x82, 0xea, 0x5d, 0xbc, 0x48, 0x89, 0x34, 0x69,
+ 0xdb, 0x4a, 0x06, 0xa7, 0xd6, 0xc7, 0xb7, 0x06,
+ 0x8e, 0x64, 0x21, 0x3e, 0xa6, 0x32, 0x61, 0x59,
+ 0x03, 0xea, 0xc3, 0x71, 0xf0, 0x26, 0x02, 0xe0,
+ 0x71, 0x95, 0x38, 0x11, 0x32, 0xe6, 0x3b, 0x25,
+ 0x53, 0x14, 0x24, 0x34, 0xe8, 0x8c, 0xa8, 0xef,
+ 0x52, 0xfe, 0x06, 0x2c, 0x20, 0x88, 0x4f, 0xa6,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t aes_cbc_128_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x2f, 0x69, 0x3e, 0x95, 0x87, 0x91, 0x99, 0xd4,
+ 0xd9, 0x5d, 0xf2, 0x52, 0x32, 0x54, 0x2a, 0x80,
+ 0xa0, 0x77, 0x6e, 0x73, 0x15, 0xb4, 0xc9, 0x13,
+ 0x85, 0xed, 0x79, 0x9b, 0x84, 0x0a, 0x7e, 0xdb,
+ 0xee, 0x09, 0x78, 0x11, 0x28, 0xd5, 0x26, 0xec,
+ 0x1d, 0x52, 0xba, 0x33, 0x26, 0xeb, 0x91, 0xc6,
+ 0x4b, 0xf0, 0x38, 0xdf, 0x9f, 0x9d, 0x6c, 0xd8,
+ 0x49, 0x83, 0x88, 0xbe, 0x62, 0x2d, 0x5e, 0x88,
+ 0xc0, 0x35, 0xe4, 0xc3, 0xc9, 0x9f, 0x62, 0x59,
+ 0x16, 0xa7, 0x2e, 0xc0, 0xda, 0x3c, 0x2e, 0x10,
+ 0x53, 0xf0, 0x84, 0x27, 0x38, 0xd0, 0xf4, 0xb5,
+ 0x7c, 0x4a, 0x63, 0x04, 0x51, 0x22, 0xae, 0xf3,
+ 0xe7, 0x97, 0x53, 0xee, 0xe6, 0xaf, 0xc3, 0x49,
+ 0x3a, 0x5a, 0x74, 0x83, 0x18, 0xa3, 0x6b, 0xf3,
+ 0x6a, 0x3b, 0xe2, 0x1b, 0xd4, 0x64, 0x41, 0xdf,
+ 0xd1, 0xd2, 0xdd, 0x22, 0xa8, 0x66, 0xbd, 0x8e,
+ 0xc4, 0x9a, 0x6d, 0x15, 0x38, 0x5b, 0x50, 0x9a,
+ 0x65, 0x48, 0x97, 0xf1, 0x04, 0x85, 0x8b, 0x5c,
+ 0x44, 0x32, 0x15, 0xea, 0x28, 0x5f, 0x98, 0x53,
+ 0xb4, 0x80, 0xd0, 0x2c, 0x59, 0x04, 0x08, 0xaf,
+ 0xa4, 0xb7, 0x49, 0xd1, 0x98, 0x87, 0xb9, 0xb6,
+ 0x3d, 0x89, 0xd1, 0xbe, 0xf4, 0x89, 0xec, 0xf9,
+ 0x2d, 0xc7, 0xc6, 0xe9, 0xe6, 0xfa, 0x1e, 0x67,
+ 0x68, 0xe7, 0xb7, 0x91, 0x55, 0x77, 0xf3, 0x27,
+ 0x38, 0x23, 0xcf, 0x2e, 0x3e, 0x8b, 0xfd, 0xb3,
+ 0x90, 0xd8, 0x6b, 0x1e, 0x93, 0x8f, 0xb6, 0xc1,
+ 0x27, 0xc2, 0xb7, 0x76, 0x10, 0x69, 0xe8, 0x7f,
+ 0xfc, 0x03, 0x59, 0xa4, 0xd3, 0x7f, 0x2f, 0x03,
+ 0x1c, 0x21, 0x6d, 0x2e, 0xae, 0xba, 0xa2, 0x04,
+ 0x67, 0xe9, 0x33, 0xc9, 0x3a, 0x96, 0xb6, 0x7c,
+ 0xf6, 0x21, 0x6b, 0x34, 0x9a, 0x5b, 0xa0, 0x8b,
+ 0x51, 0xf0, 0xd4, 0x3a, 0xa3, 0xcb, 0x22, 0xfb,
+ 0x8a, 0x56, 0xab, 0x9a, 0x15, 0x75, 0x07, 0x87,
+ 0x32, 0xa7, 0x15, 0xc7, 0xd9, 0x40, 0x95, 0xe5,
+ 0xfb, 0xb0, 0xc5, 0xb1, 0x60, 0xf8, 0xcc, 0x8b,
+ 0x30, 0x20, 0xd9, 0x84, 0x6f, 0xa2, 0xcb, 0x72,
+ 0xf5, 0xa5, 0x2c, 0xa3, 0xc6, 0x1c, 0xd2, 0x74,
+ 0x01, 0x74, 0xdd, 0xb4, 0x68, 0x3b, 0x3b, 0x3e,
+ 0x4f, 0xb5, 0x67, 0x9a, 0x9c, 0x37, 0x3d, 0xbf,
+ 0xd3, 0xab, 0xd7, 0x70, 0x03, 0x28, 0x5c, 0x3b,
+ 0xb7, 0x08, 0x38, 0x3d, 0x69, 0xa9, 0xcb, 0x63,
+ 0x04, 0x95, 0x8a, 0x16, 0x4c, 0xff, 0x9f, 0x0c,
+ 0xe2, 0x51, 0x95, 0x44, 0x52, 0x3b, 0x59, 0x9d,
+ 0x0b, 0x77, 0xa0, 0x39, 0x40, 0xea, 0x33, 0x25,
+ 0xc8, 0xc5, 0x90, 0x47, 0x23, 0xe3, 0x03, 0x8c,
+ 0x6a, 0xe0, 0x4f, 0x76, 0xe7, 0x72, 0x82, 0xcc,
+ 0xb2, 0xfd, 0xfb, 0x82, 0x1a, 0x28, 0x30, 0x89,
+ 0x0e, 0x25, 0xa7, 0x63, 0x85, 0x2e, 0x9b, 0xa6,
+ 0x0b, 0xa0, 0xb5, 0x34, 0xa2, 0x2e, 0x7f, 0xd4,
+ 0xe5, 0xd6, 0x95, 0xe8, 0x09, 0x3d, 0x4d, 0xdf,
+ 0xd9, 0xc0, 0x63, 0x17, 0xa5, 0x9c, 0xf6, 0xa3,
+ 0x59, 0x17, 0xc0, 0xf8, 0xa2, 0x11, 0x14, 0x88,
+ 0xf0, 0x1e, 0x4a, 0x4b, 0x13, 0xf6, 0xd6, 0x09,
+ 0xac, 0xf8, 0x39, 0x5d, 0x4c, 0x68, 0x69, 0x99,
+ 0x08, 0xd4, 0xf5, 0x39, 0x6d, 0x78, 0xde, 0xb5,
+ 0x6f, 0x34, 0xc4, 0x28, 0x73, 0x6c, 0x29, 0xa1,
+ 0xef, 0xfe, 0xed, 0x56, 0xb2, 0x70, 0x7b, 0xd5,
+ 0x5b, 0xd1, 0x09, 0x6a, 0x9a, 0x59, 0xe9, 0x79,
+ 0xe9, 0xee, 0xa4, 0x03, 0xc1, 0x67, 0xce, 0x62,
+ 0xf6, 0x4f, 0x04, 0xa5, 0x04, 0x71, 0x13, 0xeb,
+ 0x3d, 0x0a, 0x65, 0x2f, 0x57, 0xb0, 0xc0, 0xa4,
+ 0xf2, 0x8d, 0x78, 0x90, 0xeb, 0xc9, 0x5e, 0x8b,
+ 0xd8, 0xfb, 0xbc, 0x74, 0x1a, 0x70, 0x94, 0x2c,
+ 0xeb, 0xf2, 0x5e, 0x6d, 0xbb, 0x96, 0x7a, 0x2c,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t aes_cbc_128_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0xbc, 0x49, 0x35, 0x2c, 0xe3, 0x10, 0x12, 0x65,
+ 0x7a, 0xf4, 0xde, 0xd3, 0xf8, 0xe1, 0x49, 0x97,
+ 0x0a, 0x07, 0x93, 0x6c, 0xf8, 0x0e, 0xb7, 0xdf,
+ 0x53, 0xba, 0x1e, 0x8e, 0x14, 0xbd, 0xf6, 0x81,
+ 0xd6, 0xf6, 0x3d, 0xb2, 0xe7, 0x6a, 0x9d, 0x50,
+ 0x68, 0xc2, 0x75, 0x8e, 0xfb, 0x44, 0xfa, 0xc8,
+ 0x9f, 0x30, 0x15, 0xd5, 0xbe, 0xce, 0x04, 0xc1,
+ 0x99, 0xde, 0x3d, 0x2b, 0xc1, 0xc4, 0x8a, 0xb1,
+ 0xc5, 0x54, 0x47, 0x52, 0xf6, 0x38, 0x11, 0xcb,
+ 0x11, 0xf6, 0xb7, 0xbd, 0x4d, 0x24, 0xa1, 0xac,
+ 0x04, 0x17, 0x7e, 0x3c, 0xbc, 0x3b, 0xa0, 0x8d,
+ 0xfb, 0x22, 0x82, 0x56, 0xa2, 0xbe, 0xfe, 0xe7,
+ 0xde, 0xa4, 0xe9, 0xeb, 0xa0, 0x7a, 0x45, 0xc9,
+ 0x18, 0x0b, 0x14, 0xd5, 0xff, 0x4c, 0xe5, 0x86,
+ 0xac, 0xac, 0xaa, 0xb4, 0x70, 0x0c, 0x4a, 0x20,
+ 0xb6, 0xd8, 0x2d, 0xac, 0x09, 0xd8, 0xf6, 0x24,
+ 0xdf, 0xa5, 0x62, 0xef, 0x8c, 0x01, 0xa8, 0x1d,
+ 0x8f, 0x52, 0xee, 0xa6, 0x2f, 0x9b, 0x81, 0x18,
+ 0x0e, 0x6b, 0xa3, 0xe5, 0x67, 0xb3, 0xd5, 0x30,
+ 0xb1, 0x9f, 0x87, 0x05, 0xd0, 0x52, 0x62, 0x6f,
+ 0xb9, 0x3b, 0xbc, 0x0c, 0x0c, 0xcb, 0x73, 0x55,
+ 0x23, 0x83, 0x14, 0x78, 0x05, 0x5b, 0x05, 0xf5,
+ 0x3e, 0xa7, 0xf3, 0x4d, 0x0d, 0x34, 0x6f, 0xe0,
+ 0x58, 0x52, 0x0a, 0x82, 0xa7, 0x49, 0x8a, 0xd2,
+ 0x23, 0xb1, 0xc5, 0x0d, 0xa7, 0x0f, 0x56, 0xfc,
+ 0x7e, 0xf6, 0x19, 0x4b, 0xe7, 0x63, 0x72, 0x4c,
+ 0xb8, 0x5c, 0x80, 0x54, 0xf5, 0x1f, 0xb0, 0x29,
+ 0x40, 0x88, 0x75, 0x54, 0x42, 0xca, 0x2c, 0xc3,
+ 0xcf, 0xd7, 0xc1, 0xb2, 0xd6, 0x90, 0x70, 0x5e,
+ 0xf5, 0x58, 0x70, 0xe0, 0xff, 0x5a, 0xf5, 0xee,
+ 0x32, 0x4f, 0x61, 0x1c, 0xf6, 0xbf, 0xd5, 0x7c,
+ 0x73, 0xb9, 0x1d, 0x30, 0xc2, 0xfb, 0x2f, 0x9a,
+ 0xf7, 0x57, 0x2e, 0x87, 0x7d, 0xcb, 0xdd, 0x7e,
+ 0xda, 0xec, 0x47, 0x1a, 0x0e, 0x70, 0x2d, 0x6e,
+ 0x18, 0x2b, 0x89, 0xc1, 0x85, 0x58, 0x6d, 0x4b,
+ 0x45, 0x11, 0xcf, 0x82, 0x9f, 0x31, 0xd0, 0x42,
+ 0x11, 0xca, 0xa8, 0x52, 0x66, 0xf7, 0xf1, 0x1d,
+ 0x86, 0xe3, 0xb4, 0x41, 0xcb, 0x92, 0xb1, 0x9f,
+ 0x8d, 0x8e, 0x08, 0xe9, 0xc4, 0x66, 0xce, 0x9d,
+ 0xae, 0x91, 0xaf, 0xe6, 0xa6, 0x2e, 0x06, 0x3a,
+ 0xf5, 0x27, 0x48, 0xe4, 0x31, 0x0f, 0xc5, 0xdf,
+ 0x29, 0x56, 0xed, 0x62, 0xf3, 0xef, 0xca, 0xa6,
+ 0x58, 0xd1, 0x84, 0x99, 0xd3, 0x34, 0x67, 0x92,
+ 0x6a, 0xb2, 0xd1, 0xd1, 0x50, 0x1f, 0xe9, 0xd8,
+ 0x3c, 0xbe, 0x12, 0x97, 0x7c, 0x4f, 0xc0, 0xbe,
+ 0x91, 0x32, 0x15, 0xd5, 0xf2, 0x5e, 0xe6, 0x13,
+ 0x86, 0xfa, 0xc6, 0xde, 0xd8, 0xe1, 0x70, 0xb4,
+ 0xf7, 0x5b, 0x9f, 0x79, 0x55, 0x22, 0x7a, 0xe1,
+ 0x54, 0x40, 0x39, 0x11, 0xe1, 0x78, 0x01, 0x01,
+ 0xc0, 0x44, 0xeb, 0x92, 0xb9, 0x01, 0xdd, 0x56,
+ 0xb9, 0x7e, 0xa0, 0x50, 0x41, 0x58, 0xb2, 0x13,
+ 0x12, 0x44, 0xd2, 0x39, 0xf2, 0x76, 0x3c, 0x53,
+ 0x36, 0xfe, 0x17, 0x74, 0x91, 0x8d, 0xbe, 0xc5,
+ 0x40, 0xf7, 0xa2, 0xe9, 0x65, 0xd9, 0xdf, 0x80,
+ 0x7b, 0xd9, 0xc3, 0x1f, 0xb4, 0xfc, 0x9f, 0x8d,
+ 0x7a, 0x4e, 0x1e, 0x32, 0x6d, 0xb1, 0x82, 0x1e,
+ 0x0c, 0xb6, 0x0b, 0xe6, 0x15, 0x82, 0x5c, 0xcc,
+ 0xc8, 0x4a, 0x73, 0x56, 0x9d, 0x11, 0xfa, 0xcd,
+ 0x21, 0x95, 0x23, 0x71, 0xe8, 0xfe, 0x06, 0x43,
+ 0xf6, 0x17, 0x51, 0x28, 0x0d, 0xfb, 0x0a, 0x49,
+ 0x1b, 0x35, 0x1e, 0x4a, 0x38, 0x08, 0x6b, 0xcd,
+ 0x67, 0x21, 0x94, 0x09, 0x28, 0xca, 0x0a, 0x18,
+ 0xdf, 0x6c, 0x86, 0x47, 0x10, 0x29, 0x81, 0x9a,
+ 0x73, 0xba, 0x78, 0xbd, 0xc0, 0x61, 0xee, 0x23,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t aes_cbc_128_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0x29, 0x9f, 0xb1, 0x0f, 0x7d, 0xb4, 0xd9, 0xbb,
+ 0xf9, 0x06, 0x60, 0xdc, 0xb9, 0xeb, 0x73, 0x6e,
+ 0xfe, 0xdb, 0x99, 0x29, 0xe8, 0x42, 0x46, 0xe7,
+ 0x49, 0xcf, 0x90, 0x2d, 0x08, 0xd7, 0xd5, 0xbf,
+ 0x0f, 0x4f, 0x66, 0xce, 0xcd, 0xb1, 0x8a, 0xc7,
+ 0x47, 0xc9, 0x8e, 0xe3, 0x9f, 0x80, 0x79, 0xc6,
+ 0xa8, 0xe5, 0x20, 0x66, 0x58, 0xde, 0xab, 0x87,
+ 0x5e, 0x7e, 0xcd, 0x55, 0x81, 0x09, 0x40, 0xd9,
+ 0x8b, 0x7e, 0xd3, 0xf9, 0x16, 0x55, 0x72, 0x7d,
+ 0xe8, 0x36, 0x76, 0x06, 0x77, 0x47, 0xa5, 0xdc,
+ 0x80, 0x33, 0x7d, 0x88, 0x5f, 0x56, 0x48, 0x0f,
+ 0x66, 0xb5, 0x91, 0x9d, 0xf8, 0xdb, 0x83, 0x0d,
+ 0xd4, 0xc6, 0x13, 0xfc, 0xd4, 0xe5, 0x34, 0x81,
+ 0x70, 0x4d, 0x96, 0x82, 0x5d, 0xb2, 0x36, 0x37,
+ 0xdf, 0xd2, 0x5e, 0x31, 0xf0, 0x9d, 0x6d, 0xb7,
+ 0xf9, 0x2d, 0xcb, 0x77, 0xb8, 0x59, 0xa0, 0xbb,
+ 0x4f, 0x8d, 0xa0, 0xd1, 0x49, 0x17, 0x93, 0x3c,
+ 0xf0, 0x4e, 0x72, 0xdd, 0x99, 0x9a, 0x87, 0xf1,
+ 0x01, 0x89, 0xdf, 0xef, 0xed, 0x04, 0x86, 0x3d,
+ 0x9b, 0xab, 0x6c, 0xa7, 0xef, 0x1b, 0xbb, 0x24,
+ 0xbc, 0x65, 0x01, 0x06, 0x12, 0x3f, 0x7e, 0x9f,
+ 0x83, 0xf3, 0xd4, 0x43, 0x18, 0x03, 0xa3, 0x07,
+ 0xbc, 0x85, 0xe8, 0xdb, 0x6c, 0x8f, 0xaf, 0x70,
+ 0x71, 0x5d, 0xbc, 0x6d, 0x14, 0x05, 0xdf, 0xce,
+ 0x9f, 0xe2, 0xa3, 0x51, 0x66, 0x92, 0x52, 0x19,
+ 0x98, 0xbd, 0xb2, 0x68, 0x79, 0xf4, 0x5d, 0x71,
+ 0xcb, 0xa0, 0x1b, 0x77, 0x34, 0x46, 0x69, 0x3c,
+ 0xa4, 0x0f, 0x72, 0xf5, 0x73, 0xf6, 0xa0, 0xe9,
+ 0x72, 0xef, 0xa1, 0xcc, 0x43, 0xfc, 0xb7, 0xf3,
+ 0x59, 0xeb, 0x40, 0x61, 0x02, 0x26, 0x9b, 0x71,
+ 0x57, 0x17, 0x36, 0xac, 0xc8, 0xd5, 0x9d, 0xcb,
+ 0x4d, 0x4f, 0xf7, 0xc1, 0x58, 0xce, 0xbf, 0x73,
+ 0xe7, 0xd0, 0x58, 0x0d, 0x08, 0x01, 0x8f, 0x68,
+ 0x1b, 0x3f, 0x3a, 0x7b, 0xdb, 0x9e, 0xa7, 0x33,
+ 0x59, 0x91, 0xa8, 0xe3, 0x58, 0x22, 0x3f, 0x97,
+ 0xe1, 0xdb, 0xd6, 0x99, 0x0e, 0xdd, 0x76, 0xcd,
+ 0x4d, 0x02, 0x28, 0x43, 0x8a, 0xdd, 0x10, 0xad,
+ 0x55, 0xe0, 0x62, 0xf7, 0x44, 0xbc, 0x3f, 0x99,
+ 0x3c, 0x09, 0x25, 0xfb, 0xfd, 0x1e, 0x4c, 0x45,
+ 0x0e, 0x6e, 0x75, 0x15, 0x48, 0x19, 0x08, 0xc3,
+ 0x2b, 0x81, 0x60, 0x5f, 0x19, 0x09, 0x74, 0x0a,
+ 0xbd, 0x0d, 0x8d, 0x94, 0x55, 0x04, 0x2b, 0x8e,
+ 0x0d, 0x10, 0x60, 0x64, 0x0d, 0x7f, 0x63, 0x2e,
+ 0x89, 0x0b, 0xfc, 0x1c, 0xbc, 0xf3, 0x66, 0xc5,
+ 0x80, 0x93, 0x3a, 0x74, 0x15, 0x11, 0xd5, 0xba,
+ 0xbc, 0x06, 0x3f, 0x85, 0xcc, 0x6c, 0xd3, 0xf2,
+ 0x74, 0xc6, 0x10, 0x15, 0x0a, 0x02, 0x66, 0xa4,
+ 0xa8, 0x93, 0x0b, 0x5c, 0xe7, 0x13, 0x96, 0x90,
+ 0xdd, 0xe3, 0x25, 0x22, 0x46, 0x7b, 0x49, 0xde,
+ 0x72, 0x55, 0xf3, 0x30, 0x62, 0x5f, 0x7a, 0x2a,
+ 0x37, 0x88, 0xea, 0x57, 0x99, 0x64, 0x50, 0x2d,
+ 0xd3, 0x6a, 0x09, 0x4b, 0xd6, 0x61, 0xf2, 0x22,
+ 0x53, 0x36, 0xf7, 0x42, 0x21, 0xde, 0xda, 0xcb,
+ 0x8b, 0x6f, 0xf3, 0x4e, 0x2c, 0x16, 0xfb, 0xfc,
+ 0x13, 0xa7, 0xd1, 0xd8, 0xfd, 0x16, 0x39, 0x20,
+ 0xe0, 0xb2, 0xb4, 0xd5, 0x40, 0x93, 0x30, 0xf3,
+ 0xab, 0x88, 0xe3, 0xfb, 0xbe, 0xb8, 0x02, 0x3a,
+ 0x78, 0x2d, 0x56, 0x4b, 0x92, 0x5b, 0x0a, 0x8d,
+ 0x18, 0xa4, 0x5b, 0x11, 0x60, 0x0b, 0x45, 0xad,
+ 0x0b, 0x64, 0x96, 0x7d, 0x84, 0xf2, 0x20, 0xa8,
+ 0x95, 0x78, 0xb3, 0xb5, 0x98, 0x1f, 0xa7, 0x3e,
+ 0x30, 0x77, 0x43, 0xd2, 0x8c, 0x20, 0xc5, 0x5e,
+ 0x76, 0xcd, 0x2c, 0x7c, 0xfa, 0x34, 0x36, 0xda,
+ 0x39, 0x00, 0x2e, 0x69, 0x4a, 0xb3, 0x0f, 0x6f,
+};
+
+const struct testvec aes_cbc_128_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t aes_cbc_128_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0xa6, 0x64, 0xef, 0x0f, 0xc4, 0x45, 0xcc, 0x5e,
+ 0xf8, 0x27, 0x42, 0x5e, 0xbd, 0x93, 0x99, 0xcd,
+ 0x79, 0xa8, 0x7d, 0x72, 0xc4, 0x02, 0x99, 0xa6,
+ 0xe4, 0x69, 0x57, 0x82, 0xdf, 0x32, 0x4e, 0x67,
+ 0x2a, 0xd9, 0x58, 0x8c, 0x9f, 0xfc, 0x4d, 0xcf,
+ 0x7b, 0xa4, 0xa1, 0xfa, 0xd9, 0x4d, 0xb5, 0x67,
+ 0x06, 0x4a, 0x9e, 0x6d, 0xe8, 0xaa, 0xdd, 0xae,
+ 0x8c, 0xda, 0xcf, 0x26, 0xd5, 0x94, 0x8d, 0x12,
+ 0xf8, 0xdd, 0x21, 0x4c, 0xcb, 0xc8, 0x5d, 0xd1,
+ 0x6a, 0x89, 0x37, 0xd0, 0x32, 0xe4, 0x87, 0xbc,
+ 0x5d, 0xef, 0xca, 0x38, 0xd5, 0x08, 0xfb, 0xcf,
+ 0xb7, 0x8d, 0x65, 0x52, 0x13, 0xea, 0x2d, 0x30,
+ 0xd3, 0x9a, 0xe8, 0x9c, 0x76, 0x25, 0x44, 0x2a,
+ 0xf1, 0xe1, 0xbb, 0xcd, 0xbc, 0x9c, 0xf5, 0xa3,
+ 0xfb, 0x23, 0x53, 0x95, 0x61, 0xea, 0x46, 0x97,
+ 0xf6, 0xbf, 0xdf, 0xf9, 0xb7, 0x94, 0x73, 0xa8,
+ 0xc1, 0xaa, 0x64, 0xfb, 0x66, 0x26, 0x0f, 0x4c,
+ 0xee, 0x3c, 0xb6, 0x3f, 0x13, 0x88, 0xaa, 0x7d,
+ 0x91, 0x01, 0x1a, 0x95, 0x3b, 0xb5, 0x7e, 0x1f,
+ 0xc1, 0x84, 0xa6, 0x83, 0x99, 0xe6, 0xaf, 0x21,
+ 0x33, 0xff, 0x2e, 0xc9, 0xfe, 0xf2, 0xa1, 0x37,
+ 0xed, 0x91, 0x73, 0x70, 0x4f, 0xb4, 0x69, 0x69,
+ 0x98, 0x1d, 0x6d, 0xd4, 0xa4, 0xac, 0x73, 0x61,
+ 0x04, 0xf5, 0x13, 0x50, 0x2a, 0xa9, 0xf7, 0x61,
+ 0x78, 0xf5, 0x87, 0x26, 0xc5, 0x4a, 0x30, 0xbb,
+ 0x94, 0x55, 0x51, 0xb4, 0xa0, 0x83, 0x30, 0xe6,
+ 0xf7, 0xc7, 0x89, 0x61, 0x73, 0xd9, 0xbd, 0xe1,
+ 0x4e, 0x14, 0x8a, 0x02, 0x3d, 0x7a, 0x58, 0x92,
+ 0x41, 0xe7, 0x90, 0x8d, 0xd7, 0x67, 0x62, 0xf8,
+ 0x99, 0xa7, 0x9d, 0x55, 0xec, 0x18, 0x6b, 0x42,
+ 0xaf, 0x27, 0x97, 0xe5, 0x51, 0xa9, 0x10, 0x27,
+ 0x5e, 0x3f, 0xac, 0xda, 0xd3, 0xb5, 0x2b, 0x43,
+ 0x2e, 0x10, 0xdc, 0xd9, 0xe2, 0x2f, 0x4f, 0xfe,
+ 0xf3, 0x0d, 0x06, 0x76, 0xf9, 0x25, 0xcd, 0x26,
+ 0xef, 0x8e, 0x9b, 0xc2, 0xb3, 0x20, 0x2b, 0x00,
+ 0xb6, 0xe6, 0x2e, 0xf7, 0x17, 0xc7, 0xa8, 0x3c,
+ 0x00, 0xfc, 0x78, 0x8d, 0x10, 0x38, 0xd1, 0x11,
+ 0x94, 0xed, 0xb4, 0x22, 0x13, 0xcb, 0x52, 0x0f,
+ 0x0f, 0xd7, 0x33, 0x3b, 0xbd, 0x01, 0x04, 0x56,
+ 0xfa, 0x2c, 0xaa, 0xaf, 0x2b, 0x93, 0xde, 0xf4,
+ 0x31, 0x36, 0x13, 0x71, 0xef, 0x7a, 0xf0, 0xae,
+ 0xbd, 0xa7, 0x4a, 0x57, 0xa5, 0xc5, 0xf3, 0x5c,
+ 0x08, 0x2b, 0xe7, 0x12, 0x42, 0x4b, 0x4b, 0x12,
+ 0x49, 0x3a, 0x2e, 0x26, 0x67, 0x67, 0xa1, 0xd5,
+ 0x59, 0xa6, 0x18, 0x96, 0x22, 0x2b, 0xeb, 0x56,
+ 0x1e, 0x0a, 0x08, 0x75, 0xb4, 0x2b, 0x5c, 0x0a,
+ 0x4e, 0x9d, 0x17, 0xd4, 0x0c, 0xfe, 0x46, 0x60,
+ 0x6d, 0xfa, 0xc0, 0xb9, 0x5e, 0x1f, 0x88, 0x0e,
+ 0x08, 0x2c, 0xf3, 0xb4, 0x3a, 0x15, 0xc5, 0xf9,
+ 0x5b, 0x85, 0x92, 0x94, 0xa8, 0x8f, 0x2c, 0x3a,
+ 0x7e, 0x22, 0x86, 0x88, 0x51, 0x03, 0xee, 0xf9,
+ 0x2e, 0x83, 0xce, 0x39, 0x0c, 0x76, 0x64, 0xe5,
+ 0x5a, 0x88, 0xef, 0xc5, 0x06, 0xb2, 0xe4, 0x13,
+ 0x82, 0xc9, 0xee, 0xba, 0x6d, 0x56, 0xa8, 0x87,
+ 0x51, 0x69, 0x3b, 0x86, 0x29, 0x8e, 0xe8, 0xb4,
+ 0x44, 0x42, 0x07, 0x5b, 0xff, 0x0e, 0x1e, 0x9f,
+ 0x42, 0xb1, 0xc8, 0x5f, 0xab, 0x3b, 0xc7, 0xba,
+ 0x75, 0x20, 0xe6, 0x9f, 0x93, 0xb5, 0xcf, 0x8f,
+ 0x7c, 0x1c, 0xf3, 0xdb, 0x6a, 0xf4, 0xde, 0x00,
+ 0xe9, 0xaf, 0xd5, 0xf4, 0x36, 0x98, 0x14, 0x2d,
+ 0x53, 0x20, 0x74, 0xab, 0x0c, 0xf6, 0xcd, 0x15,
+ 0x32, 0xa6, 0x01, 0x8d, 0x24, 0x1b, 0x4b, 0x1f,
+ 0xa3, 0xfc, 0x38, 0x82, 0x3a, 0xa1, 0xb5, 0x52,
+ 0x53, 0xc7, 0x2b, 0x30, 0x7c, 0x65, 0xb9, 0x7d,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t aes_cbc_128_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x63, 0x45, 0x16, 0x0c, 0xe4, 0x4f, 0x51, 0xde,
+ 0x74, 0xf8, 0x7b, 0xf5, 0x05, 0x17, 0x13, 0x1e,
+ 0xa5, 0x3d, 0x84, 0xfa, 0x35, 0x5a, 0x2d, 0x3c,
+ 0xb7, 0x61, 0x68, 0xff, 0xcd, 0x33, 0x1f, 0x0b,
+ 0x53, 0x79, 0xf2, 0x2f, 0xbc, 0x8d, 0xac, 0xb9,
+ 0xf9, 0xb7, 0x9c, 0x0a, 0x9d, 0xa1, 0x4d, 0x78,
+ 0x9e, 0x4e, 0xfa, 0xe8, 0xc8, 0x46, 0x4b, 0x99,
+ 0x91, 0x7e, 0x33, 0x6e, 0x18, 0x24, 0x01, 0xc3,
+ 0x9f, 0x8c, 0x43, 0xb5, 0x15, 0x7e, 0xdd, 0xf9,
+ 0x1b, 0xb0, 0xf2, 0xc3, 0x97, 0x1f, 0x7c, 0x3f,
+ 0x43, 0x4c, 0x9f, 0x93, 0x29, 0x83, 0x8f, 0xad,
+ 0xd1, 0x5e, 0x92, 0x1a, 0x17, 0xd1, 0xa0, 0x05,
+ 0x6e, 0x62, 0x59, 0x80, 0x50, 0x6d, 0xe3, 0x28,
+ 0x9a, 0x43, 0xdc, 0x81, 0x4f, 0x49, 0xc4, 0x98,
+ 0xcd, 0x6d, 0x28, 0xb4, 0x86, 0xe4, 0x83, 0x45,
+ 0xd4, 0x43, 0x52, 0x8a, 0xd6, 0xc8, 0x1c, 0x90,
+ 0xeb, 0xf0, 0xe7, 0x76, 0xb4, 0x43, 0x9b, 0x56,
+ 0x48, 0x73, 0xdd, 0x01, 0x50, 0x1c, 0x61, 0xfc,
+ 0x22, 0xac, 0xf4, 0x27, 0x94, 0x02, 0x54, 0xd3,
+ 0x7d, 0x25, 0xf6, 0x14, 0x29, 0xbb, 0x2b, 0x22,
+ 0xc8, 0xe8, 0x7f, 0xa1, 0xfe, 0x19, 0x79, 0x97,
+ 0xb6, 0xa6, 0xba, 0x5b, 0x89, 0xdf, 0x73, 0x6d,
+ 0x79, 0x38, 0x5b, 0xf8, 0x89, 0xa2, 0x95, 0x1d,
+ 0xda, 0x38, 0x17, 0x4b, 0x01, 0xf1, 0x7d, 0x0a,
+ 0xa2, 0x8f, 0x5a, 0x02, 0x51, 0xb0, 0x88, 0x10,
+ 0x16, 0xc8, 0x82, 0xb9, 0x06, 0x9f, 0x01, 0x94,
+ 0xf9, 0xe0, 0x2e, 0x86, 0x8a, 0xb1, 0x7f, 0x74,
+ 0x22, 0xce, 0xee, 0xa6, 0x66, 0xee, 0xe2, 0x1d,
+ 0x98, 0x1b, 0x46, 0x22, 0x7e, 0x89, 0x0c, 0xc4,
+ 0x91, 0xfb, 0xe4, 0xd7, 0x36, 0x2a, 0xa9, 0x53,
+ 0xe9, 0xaf, 0x6c, 0xc1, 0xdd, 0x69, 0x4f, 0xde,
+ 0xd8, 0xd0, 0x7f, 0xc9, 0xf4, 0x8f, 0x84, 0xfe,
+ 0x0f, 0x16, 0x36, 0x90, 0x09, 0xd6, 0x0f, 0xbc,
+ 0x85, 0xad, 0xe9, 0xc3, 0xa1, 0x8d, 0x14, 0x5c,
+ 0x40, 0x7d, 0x0f, 0x22, 0xfe, 0x5e, 0xaf, 0xd9,
+ 0x0f, 0xe5, 0x2e, 0xa6, 0x04, 0xda, 0x35, 0x90,
+ 0x7f, 0x9a, 0x1f, 0xb8, 0x34, 0x1c, 0xd0, 0xf5,
+ 0x5c, 0x29, 0xce, 0xbe, 0x57, 0xd8, 0x55, 0x15,
+ 0x2d, 0x4c, 0x3c, 0x16, 0x93, 0x96, 0x3c, 0xf3,
+ 0xa8, 0x2f, 0x09, 0xb3, 0x8b, 0xe3, 0xce, 0xf7,
+ 0x3e, 0x8e, 0xcf, 0x47, 0xe2, 0xf2, 0xad, 0x06,
+ 0x00, 0x9a, 0x3a, 0x55, 0xf5, 0x9e, 0xbf, 0x5a,
+ 0x2e, 0x5a, 0x6c, 0x2b, 0x8f, 0x33, 0x71, 0x2c,
+ 0x56, 0x43, 0xd1, 0x8b, 0xd2, 0x98, 0x14, 0xb7,
+ 0x5a, 0xdc, 0x8b, 0xbc, 0xfe, 0x50, 0x99, 0x84,
+ 0x48, 0x5f, 0xcd, 0xed, 0xce, 0x61, 0x6f, 0xa6,
+ 0x83, 0xa3, 0x34, 0xbe, 0xf2, 0x66, 0xf3, 0x09,
+ 0xf3, 0xd3, 0x97, 0xd4, 0xee, 0x66, 0x9a, 0x81,
+ 0x62, 0x84, 0x85, 0x7f, 0x79, 0x18, 0xd2, 0x82,
+ 0xd6, 0x96, 0x09, 0x61, 0x1e, 0x53, 0x97, 0x80,
+ 0x0a, 0x81, 0x4b, 0x93, 0xf0, 0x03, 0x65, 0x18,
+ 0x93, 0x5b, 0x60, 0x2f, 0xb5, 0xfe, 0x82, 0xaf,
+ 0x85, 0xb7, 0x79, 0x7c, 0xee, 0xad, 0xea, 0xfa,
+ 0x9b, 0xad, 0xca, 0x38, 0x21, 0x3d, 0x46, 0x8a,
+ 0x5b, 0xa7, 0x55, 0x3d, 0x88, 0x4a, 0x52, 0xdb,
+ 0xf2, 0x07, 0xed, 0xd6, 0x3c, 0x9f, 0x1b, 0x42,
+ 0xb4, 0x14, 0x12, 0xb7, 0x00, 0xfc, 0x6a, 0x79,
+ 0x61, 0x0b, 0x43, 0xaa, 0x44, 0x48, 0x30, 0x15,
+ 0x48, 0x76, 0x27, 0x32, 0x7a, 0x2e, 0x25, 0x6a,
+ 0x8c, 0x8c, 0x64, 0x67, 0x86, 0x54, 0x4a, 0x93,
+ 0x14, 0xfe, 0x81, 0xf5, 0xcf, 0x98, 0x92, 0xd3,
+ 0x92, 0xf5, 0x6a, 0x74, 0x28, 0x10, 0x6b, 0xd4,
+ 0x1d, 0x64, 0x7e, 0x05, 0x32, 0xba, 0xf7, 0x4c,
+ 0xe9, 0xa8, 0xa9, 0xc5, 0x35, 0x34, 0x26, 0x41,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t aes_cbc_128_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x64, 0x7b, 0x62, 0x7a, 0xa6, 0xa9, 0xb3, 0x47,
+ 0xbc, 0x03, 0x14, 0x3d, 0x9b, 0x56, 0xfc, 0x13,
+ 0x08, 0x32, 0x81, 0xe3, 0x57, 0x3c, 0x0d, 0xbb,
+ 0x85, 0x44, 0x47, 0x12, 0xc4, 0x80, 0x35, 0x37,
+ 0xe1, 0xb4, 0x3f, 0x35, 0x98, 0x7c, 0xb0, 0x3b,
+ 0x85, 0xab, 0x3d, 0x0b, 0xd3, 0x6f, 0xf9, 0x92,
+ 0x00, 0x6b, 0x18, 0xe7, 0x31, 0x8b, 0x77, 0x4c,
+ 0xd0, 0x7b, 0x1d, 0xfc, 0x95, 0xe6, 0x02, 0x01,
+ 0x9c, 0x17, 0x4d, 0x9b, 0x3a, 0x1d, 0x12, 0x23,
+ 0xd4, 0x24, 0xf8, 0x47, 0x5e, 0x2d, 0xfd, 0xc8,
+ 0x74, 0x28, 0xb4, 0x3a, 0x99, 0x6b, 0xcc, 0xba,
+ 0xe5, 0x51, 0x0b, 0xab, 0x4d, 0x63, 0xfc, 0x6d,
+ 0x2d, 0xd9, 0x2b, 0x4f, 0xa4, 0x26, 0xc7, 0x8d,
+ 0x9d, 0x12, 0x7f, 0xc7, 0x6b, 0x15, 0x8b, 0x4a,
+ 0x41, 0xf8, 0x50, 0x32, 0x76, 0x10, 0xca, 0x8e,
+ 0xfe, 0x08, 0x7d, 0x9a, 0xb5, 0x1a, 0xdb, 0x10,
+ 0xb3, 0x6a, 0x5f, 0xd9, 0x0a, 0x5f, 0x31, 0x19,
+ 0x3e, 0xa9, 0xa1, 0x72, 0x1f, 0x6c, 0x97, 0x20,
+ 0xd4, 0xab, 0xb8, 0xad, 0xf7, 0x70, 0x12, 0xd0,
+ 0x8f, 0x70, 0x24, 0x58, 0x2e, 0x99, 0xcd, 0xd4,
+ 0xf4, 0xcd, 0xef, 0x93, 0xfb, 0x4f, 0x9a, 0x40,
+ 0x46, 0x92, 0x6b, 0xd0, 0x25, 0x24, 0xec, 0x4d,
+ 0x4c, 0x42, 0x50, 0x61, 0xb6, 0x21, 0xa6, 0x2e,
+ 0xc1, 0x42, 0x9e, 0x86, 0x9f, 0x57, 0x2a, 0x2c,
+ 0x82, 0xbd, 0xc2, 0x25, 0xb6, 0x9f, 0x2d, 0x9f,
+ 0xba, 0xe0, 0xa6, 0x06, 0x04, 0x08, 0xc5, 0x1d,
+ 0x8c, 0x0f, 0xbf, 0x21, 0x85, 0x6d, 0x61, 0x4d,
+ 0x93, 0xc0, 0xa2, 0x8b, 0xca, 0x07, 0xd0, 0x88,
+ 0x74, 0xf9, 0x42, 0x92, 0xd5, 0x0d, 0x0c, 0x34,
+ 0xa6, 0xa5, 0x86, 0x51, 0xcf, 0x40, 0x36, 0x66,
+ 0x35, 0x9f, 0xa8, 0x95, 0x0b, 0xfb, 0x0c, 0xe8,
+ 0xdc, 0x12, 0x78, 0x4c, 0x52, 0xf4, 0xfc, 0x4a,
+ 0x77, 0xdd, 0x77, 0x34, 0xf7, 0x35, 0x94, 0x7a,
+ 0x31, 0x16, 0x86, 0x44, 0x50, 0x30, 0x1c, 0x6d,
+ 0x9f, 0x66, 0x49, 0xb5, 0xe6, 0x71, 0x00, 0x83,
+ 0xd1, 0xa0, 0x01, 0xff, 0xc3, 0x27, 0xaa, 0x9a,
+ 0xdb, 0xad, 0x24, 0xdb, 0xbd, 0xde, 0xfd, 0xa6,
+ 0xaa, 0x87, 0x98, 0x98, 0xde, 0x90, 0xd5, 0x40,
+ 0x20, 0x8f, 0xe9, 0xdd, 0xa8, 0xec, 0xd3, 0x18,
+ 0x20, 0x85, 0x5e, 0xd5, 0xe7, 0x50, 0x58, 0x15,
+ 0x69, 0x03, 0xa5, 0xe8, 0xa9, 0x7a, 0x0f, 0xd1,
+ 0x7d, 0x22, 0x8a, 0xe0, 0xc6, 0x17, 0x33, 0x00,
+ 0x57, 0xcb, 0xf6, 0x8d, 0xf0, 0xc1, 0x7b, 0xb5,
+ 0x96, 0x0f, 0x08, 0x84, 0x5b, 0x7e, 0xa6, 0x1e,
+ 0xd8, 0x5e, 0x0c, 0xca, 0x30, 0x4b, 0xe0, 0x87,
+ 0x2f, 0xbc, 0x07, 0x83, 0x35, 0x76, 0x36, 0x17,
+ 0xcf, 0xdb, 0x27, 0x53, 0x43, 0xf5, 0x07, 0xd0,
+ 0x91, 0x83, 0xa1, 0xaa, 0x8d, 0xdb, 0x00, 0x2b,
+ 0xd1, 0x88, 0xe5, 0x59, 0x47, 0x17, 0xf0, 0xe8,
+ 0xce, 0x3b, 0xa0, 0x73, 0x1f, 0x22, 0x9b, 0x1b,
+ 0x59, 0x02, 0xe6, 0xaf, 0x3f, 0xdd, 0xfe, 0xba,
+ 0xc3, 0x6b, 0xe5, 0x82, 0x02, 0x92, 0x0c, 0x5e,
+ 0x5a, 0x87, 0x88, 0x91, 0x00, 0xb5, 0x30, 0x37,
+ 0xf5, 0xc6, 0xdf, 0x0a, 0x7f, 0x03, 0x1c, 0x1f,
+ 0x20, 0xf1, 0xd4, 0x5f, 0x94, 0xc3, 0x6f, 0x21,
+ 0x5e, 0xf2, 0x77, 0x5a, 0x42, 0xfd, 0xd3, 0xc4,
+ 0x31, 0xaf, 0xd6, 0x6c, 0x6c, 0xde, 0x8c, 0x50,
+ 0x01, 0x8f, 0x57, 0x90, 0x88, 0x43, 0xf9, 0x44,
+ 0x09, 0x4d, 0x27, 0x58, 0x9f, 0xae, 0x50, 0x28,
+ 0x12, 0x47, 0x20, 0x79, 0x2b, 0xe4, 0x02, 0x97,
+ 0xcd, 0xab, 0x53, 0x28, 0x8f, 0x8f, 0xe3, 0x3b,
+ 0xd6, 0xc9, 0xc8, 0xff, 0xbf, 0x18, 0x3b, 0x75,
+ 0xdb, 0xcf, 0x07, 0x8c, 0xfe, 0x58, 0xee, 0x75,
+ 0x01, 0x98, 0x98, 0xe4, 0x60, 0xfe, 0xe6, 0x7f,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t aes_cbc_128_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0x98, 0xae, 0x82, 0x1d, 0x76, 0x3a, 0xfe, 0x80,
+ 0x04, 0xa3, 0x43, 0xf0, 0x06, 0x45, 0x83, 0xb7,
+ 0xe2, 0xb5, 0x73, 0x46, 0x78, 0x01, 0x2f, 0xd6,
+ 0x0d, 0x49, 0x64, 0x4c, 0xeb, 0x8d, 0xdc, 0xa9,
+ 0xdc, 0xea, 0x22, 0x25, 0xd4, 0x8f, 0xba, 0x9f,
+ 0xd4, 0x7a, 0x3c, 0x9e, 0xd0, 0xd9, 0xcd, 0xa4,
+ 0x12, 0xdf, 0x8f, 0x50, 0x24, 0x18, 0xa2, 0x0b,
+ 0xd9, 0x7f, 0xda, 0x78, 0xd6, 0x11, 0xf3, 0x99,
+ 0xc4, 0xec, 0x95, 0xe2, 0x85, 0xe1, 0xa0, 0x0d,
+ 0x07, 0x22, 0x56, 0xaf, 0x2f, 0xf5, 0x7d, 0x63,
+ 0xf2, 0x90, 0x6c, 0x26, 0x4f, 0xa5, 0x47, 0xcd,
+ 0x66, 0x2d, 0x4c, 0x4d, 0x94, 0x6a, 0x3c, 0x98,
+ 0xe4, 0x5e, 0x3b, 0x42, 0x3a, 0x93, 0x02, 0xd0,
+ 0x90, 0xc7, 0xcd, 0x87, 0x0e, 0x84, 0x82, 0xf5,
+ 0x77, 0x7b, 0x29, 0xe4, 0xea, 0x5b, 0x60, 0x50,
+ 0xf7, 0x60, 0x8d, 0xf7, 0xd8, 0xd7, 0x7d, 0x99,
+ 0x8a, 0xdc, 0xe2, 0xb9, 0x40, 0xac, 0x4b, 0x9f,
+ 0x55, 0x30, 0xcb, 0x5a, 0x73, 0x64, 0xf2, 0xca,
+ 0x76, 0x88, 0xf7, 0x55, 0xb5, 0x33, 0xc0, 0x44,
+ 0xdf, 0x42, 0xee, 0xc9, 0xc5, 0x2a, 0x47, 0x18,
+ 0x8b, 0x74, 0xb9, 0x4f, 0x2c, 0xd8, 0x7a, 0xd1,
+ 0x12, 0x19, 0xf9, 0x21, 0x8d, 0x21, 0x7e, 0x2a,
+ 0xcf, 0xd5, 0xbb, 0x69, 0xaa, 0x20, 0x25, 0xe0,
+ 0xf5, 0x3b, 0x33, 0x77, 0x63, 0xb2, 0x05, 0x5c,
+ 0x10, 0x9c, 0x61, 0x48, 0xf5, 0xe6, 0x04, 0xd3,
+ 0xc8, 0xb4, 0xf6, 0xcf, 0x22, 0x1c, 0xf6, 0xbb,
+ 0x4b, 0xd7, 0x5d, 0x23, 0xfa, 0x0e, 0xc0, 0xac,
+ 0x27, 0x38, 0x95, 0xd0, 0xdd, 0x83, 0xad, 0x9e,
+ 0xcf, 0xde, 0x99, 0xe7, 0x04, 0xb7, 0x23, 0x9f,
+ 0x46, 0x91, 0xb8, 0xcb, 0x18, 0xd0, 0xc5, 0xf8,
+ 0xec, 0xfc, 0x33, 0xb7, 0xbe, 0x2d, 0xe9, 0x3a,
+ 0x7f, 0x83, 0x5e, 0x44, 0x0f, 0x12, 0x6d, 0x05,
+ 0xaa, 0xfb, 0x80, 0x7a, 0xf6, 0xdb, 0x25, 0xc6,
+ 0x51, 0xf3, 0x5d, 0xf3, 0xa9, 0xb8, 0x34, 0x88,
+ 0x88, 0x25, 0xd5, 0xa3, 0xe5, 0x8e, 0xb2, 0xc7,
+ 0xdc, 0xd5, 0x2e, 0x99, 0xb9, 0xc5, 0x1d, 0x91,
+ 0x49, 0x7b, 0xa3, 0x5e, 0x4b, 0xaf, 0x29, 0x7b,
+ 0x37, 0xb5, 0x39, 0x2c, 0xdf, 0x3b, 0xb1, 0xd8,
+ 0xba, 0x14, 0xc9, 0xd3, 0x6d, 0x67, 0x6a, 0x80,
+ 0x89, 0x6f, 0x11, 0xc8, 0xbc, 0xd6, 0xc7, 0xab,
+ 0x42, 0x1f, 0xf4, 0xa2, 0xc0, 0x9c, 0x2d, 0xca,
+ 0x5f, 0xe6, 0x65, 0xfa, 0x28, 0x49, 0x99, 0xa3,
+ 0x0b, 0x7b, 0x7d, 0x39, 0xaa, 0xa6, 0xd8, 0x0a,
+ 0xfd, 0xde, 0x31, 0x86, 0x15, 0x95, 0x1e, 0x5c,
+ 0x05, 0x4e, 0x3c, 0x18, 0xee, 0xa9, 0x56, 0x9c,
+ 0x3c, 0xc3, 0x67, 0x84, 0x57, 0x77, 0x8d, 0xff,
+ 0xea, 0x34, 0x3c, 0xf9, 0x58, 0xb8, 0xdc, 0x4e,
+ 0xa1, 0x92, 0x2d, 0x9a, 0x91, 0x61, 0x23, 0x6a,
+ 0xd9, 0xb7, 0x41, 0xc5, 0x0d, 0xb6, 0x57, 0x58,
+ 0x42, 0x39, 0x4a, 0x86, 0x7e, 0x9d, 0xeb, 0x7d,
+ 0xa8, 0x14, 0x1a, 0x5c, 0xa1, 0x54, 0x34, 0xb6,
+ 0xb6, 0xbc, 0x1f, 0xf5, 0xe2, 0xb5, 0xe4, 0xa8,
+ 0x42, 0xe3, 0x3d, 0x06, 0x6b, 0x50, 0xbb, 0xa1,
+ 0x6b, 0x63, 0xe5, 0x60, 0x28, 0x07, 0x49, 0x06,
+ 0x61, 0x0e, 0xa3, 0x6c, 0xc3, 0xc8, 0x3e, 0x5a,
+ 0x9c, 0xa5, 0xb3, 0x9b, 0x8d, 0x46, 0xb9, 0xf5,
+ 0x4a, 0x4d, 0xbe, 0xc0, 0xc1, 0x24, 0x92, 0x09,
+ 0x7c, 0x9a, 0x21, 0x2c, 0x08, 0x8a, 0x0d, 0xfc,
+ 0xff, 0xda, 0xdc, 0xf1, 0x45, 0x66, 0xf9, 0xcd,
+ 0x64, 0x7c, 0x2f, 0x0e, 0x95, 0x5e, 0xec, 0x92,
+ 0xd1, 0x03, 0x03, 0xa0, 0xcc, 0x73, 0x92, 0x15,
+ 0x74, 0x42, 0x54, 0x48, 0x77, 0xbe, 0x96, 0xfb,
+ 0x1f, 0x0c, 0x7a, 0x25, 0x67, 0x6b, 0x85, 0x71,
+ 0x06, 0x15, 0xd3, 0x11, 0xfe, 0xf7, 0xa9, 0xb1,
+};
+
+const struct testvec aes_cbc_128_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_128_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t aes_cbc_192_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x7c, 0xc4, 0xec, 0x89, 0x7c, 0x13, 0xac, 0x99,
+ 0x49, 0xa9, 0x96, 0xe7, 0xb1, 0x1a, 0xd6, 0xb0,
+ 0xeb, 0x89, 0x27, 0x0f, 0x8b, 0x1b, 0xab, 0x8e,
+ 0x2c, 0xd4, 0x00, 0x66, 0x12, 0x3a, 0x9a, 0x03,
+ 0xc4, 0x49, 0xa4, 0xf0, 0xc1, 0x90, 0xf9, 0x38,
+ 0xb2, 0x5c, 0xa5, 0x0d, 0x1b, 0x60, 0x94, 0xf6,
+ 0x31, 0x4a, 0x72, 0xdb, 0xfc, 0xe1, 0x3c, 0xd6,
+ 0x9d, 0x03, 0x07, 0x45, 0xdb, 0xad, 0xdb, 0xb3,
+ 0x86, 0xfa, 0xce, 0x2c, 0xeb, 0xa2, 0xac, 0x05,
+ 0xd9, 0x52, 0xb8, 0xae, 0xa9, 0x91, 0x86, 0x4b,
+ 0xbb, 0xf8, 0x03, 0xb0, 0x6c, 0x40, 0xcc, 0xbf,
+ 0xa3, 0x76, 0x60, 0xf7, 0x29, 0x03, 0xe6, 0x44,
+ 0xcc, 0x2a, 0xe7, 0x74, 0x8e, 0x62, 0xfe, 0x99,
+ 0x6a, 0x6d, 0x04, 0x1b, 0xe7, 0xf7, 0x9f, 0x13,
+ 0xa7, 0x1d, 0x93, 0x0e, 0x8f, 0xe0, 0x77, 0x9b,
+ 0xe3, 0x91, 0x67, 0x12, 0x33, 0x12, 0x42, 0x55,
+ 0x28, 0x04, 0x2d, 0x01, 0x2b, 0xd2, 0xda, 0xbe,
+ 0x7c, 0x83, 0xf2, 0x87, 0x71, 0x67, 0xaf, 0x6b,
+ 0x50, 0x6c, 0x8c, 0x9f, 0x48, 0xee, 0x90, 0x0c,
+ 0x9a, 0x9e, 0x40, 0xa8, 0x13, 0x2f, 0x58, 0xfb,
+ 0xdc, 0xb1, 0xda, 0xff, 0x06, 0x9c, 0xeb, 0x5e,
+ 0x0f, 0xaf, 0xc0, 0x9a, 0x47, 0x88, 0x25, 0xfd,
+ 0x19, 0x5e, 0xd4, 0xe0, 0x7f, 0xe0, 0x71, 0x7a,
+ 0x60, 0x54, 0xe7, 0x0d, 0xfe, 0x11, 0x9d, 0x77,
+ 0xbd, 0x9b, 0xd0, 0xf8, 0x77, 0xe4, 0x5b, 0x88,
+ 0x90, 0x12, 0x29, 0x88, 0xb6, 0xd9, 0x1e, 0x6c,
+ 0xbf, 0xa4, 0x18, 0xe1, 0xe0, 0x5e, 0xed, 0x48,
+ 0x9b, 0x05, 0x13, 0x37, 0x0f, 0x41, 0x54, 0xc8,
+ 0xe4, 0x25, 0x0e, 0x82, 0x5f, 0x81, 0xba, 0x5d,
+ 0x79, 0x8f, 0x9c, 0x17, 0x4b, 0x59, 0xf4, 0x5d,
+ 0xd6, 0x83, 0xfd, 0x44, 0xd0, 0xe1, 0x89, 0x09,
+ 0xf9, 0xe2, 0xb6, 0x9c, 0x1c, 0xbd, 0x13, 0xaa,
+ 0xa0, 0x43, 0xaa, 0xaf, 0x6d, 0x65, 0x73, 0xba,
+ 0x3a, 0x55, 0x69, 0x51, 0xb9, 0x52, 0x09, 0xaa,
+ 0x9f, 0x91, 0x3c, 0x65, 0xe2, 0x81, 0xdb, 0xe8,
+ 0x5a, 0xe3, 0x74, 0x11, 0x7b, 0xec, 0x2f, 0x18,
+ 0x8d, 0x4c, 0x8f, 0xf2, 0x06, 0x3d, 0x22, 0xc6,
+ 0x43, 0xef, 0x42, 0x7d, 0xe1, 0xe7, 0xde, 0x4c,
+ 0x58, 0xad, 0x40, 0xbb, 0x8b, 0xce, 0x1f, 0x57,
+ 0x8e, 0x6a, 0x27, 0x43, 0x46, 0x7f, 0x94, 0xe5,
+ 0x45, 0x67, 0x12, 0xc8, 0x99, 0x85, 0x08, 0x2a,
+ 0x37, 0x40, 0x0b, 0xb5, 0xd9, 0xa3, 0xf7, 0xc8,
+ 0x87, 0xb1, 0xe6, 0x87, 0x2f, 0x86, 0xd8, 0x9c,
+ 0x7b, 0xec, 0xcf, 0xa4, 0xe5, 0xd5, 0x50, 0x3f,
+ 0xdf, 0xc9, 0xb7, 0x29, 0x97, 0xd6, 0x33, 0xba,
+ 0xf0, 0x72, 0xf0, 0x76, 0x12, 0xd3, 0x99, 0x4f,
+ 0x1b, 0x36, 0xda, 0xa1, 0x83, 0xfe, 0xf5, 0x94,
+ 0x9e, 0x61, 0x82, 0x62, 0xe0, 0x08, 0x3a, 0xbd,
+ 0xba, 0x8b, 0x3d, 0xd6, 0xbd, 0x16, 0x5f, 0xd7,
+ 0x1d, 0x6c, 0x0e, 0x92, 0x89, 0x8c, 0x38, 0x62,
+ 0x80, 0xee, 0x7e, 0x63, 0x82, 0x88, 0x0b, 0xbf,
+ 0xdd, 0x9f, 0xbc, 0xba, 0xa7, 0x5a, 0xc6, 0x0d,
+ 0x87, 0x59, 0xbf, 0x0a, 0x85, 0x06, 0xa3, 0xb4,
+ 0x66, 0x63, 0xda, 0x12, 0x29, 0x5f, 0x2e, 0x4d,
+ 0x60, 0xfd, 0x85, 0x76, 0xaf, 0xf7, 0x87, 0xed,
+ 0x1f, 0x46, 0xc2, 0xd6, 0x6c, 0x98, 0x6b, 0x4b,
+ 0x60, 0x04, 0xed, 0x89, 0x3b, 0x85, 0x6c, 0xe9,
+ 0x46, 0xd9, 0xfa, 0x35, 0x61, 0xe8, 0x0c, 0x84,
+ 0x1b, 0x93, 0xc0, 0xfe, 0x5d, 0x29, 0x14, 0xe1,
+ 0x1c, 0x66, 0x73, 0xc8, 0x0b, 0x98, 0xff, 0x1a,
+ 0x78, 0x2b, 0x6a, 0x93, 0x7a, 0x29, 0xd8, 0x7b,
+ 0xb1, 0x39, 0xf0, 0xad, 0x93, 0x4d, 0x2d, 0xab,
+ 0x67, 0x3c, 0xa4, 0xa1, 0x08, 0x36, 0x0b, 0xe9,
+ 0x77, 0xd0, 0xe3, 0x45, 0x7d, 0x99, 0x75, 0xc3,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t aes_cbc_192_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0xe6, 0x41, 0x75, 0xd6, 0x80, 0xdf, 0x44, 0x37,
+ 0xa7, 0xa2, 0xb2, 0x29, 0x0d, 0xf0, 0x02, 0x78,
+ 0x92, 0xb2, 0x06, 0x5f, 0x86, 0xd3, 0x9c, 0xa3,
+ 0xd0, 0xc5, 0x08, 0x03, 0x6d, 0x41, 0x9d, 0x61,
+ 0xb4, 0xb9, 0xa1, 0x69, 0x6e, 0x3a, 0x78, 0xd7,
+ 0x04, 0x94, 0xf2, 0x53, 0xed, 0xd1, 0xf6, 0xd8,
+ 0x98, 0xe2, 0x49, 0x75, 0x15, 0x85, 0xe0, 0x78,
+ 0x5b, 0x28, 0x5e, 0xe6, 0xfa, 0x60, 0x3d, 0x4b,
+ 0x8c, 0xf1, 0x1a, 0xfd, 0x1f, 0xe8, 0xad, 0xb4,
+ 0xa1, 0xe7, 0xd3, 0x71, 0x16, 0xdf, 0xc6, 0x95,
+ 0xd4, 0x43, 0xaf, 0x92, 0xab, 0x74, 0x0f, 0x77,
+ 0x75, 0x4d, 0xd7, 0x13, 0x97, 0x18, 0xea, 0x43,
+ 0x92, 0x0d, 0x88, 0xc8, 0x41, 0xf7, 0x15, 0x34,
+ 0x0f, 0x63, 0xbf, 0x50, 0x18, 0xbe, 0x9d, 0x3b,
+ 0xfc, 0x17, 0x7d, 0x03, 0x39, 0xc2, 0x39, 0x28,
+ 0xb2, 0x23, 0x1c, 0x7f, 0x3f, 0x19, 0x6c, 0x2f,
+ 0x64, 0xbd, 0xc9, 0x7d, 0xbe, 0x98, 0xe0, 0x83,
+ 0xa4, 0x48, 0xfc, 0x89, 0xe7, 0xe0, 0x93, 0x93,
+ 0x7b, 0x15, 0x35, 0xaf, 0xf8, 0x00, 0x81, 0xcc,
+ 0x04, 0x80, 0x8b, 0x20, 0xc8, 0x6a, 0xb7, 0x5e,
+ 0x95, 0xce, 0x69, 0x50, 0x39, 0x88, 0x90, 0x41,
+ 0x3f, 0xa8, 0x62, 0x42, 0xf1, 0xa9, 0x56, 0xce,
+ 0x25, 0x53, 0x1d, 0x97, 0x5d, 0x3a, 0x4e, 0x6b,
+ 0x1f, 0xd6, 0xea, 0x20, 0x81, 0x6c, 0xe5, 0xa1,
+ 0x0d, 0x9a, 0xd9, 0x3c, 0xbb, 0xbc, 0xc1, 0x77,
+ 0xe2, 0xf4, 0x9c, 0x11, 0x3a, 0x2f, 0xd0, 0x77,
+ 0x10, 0xa6, 0x36, 0xd1, 0xbf, 0x3b, 0x50, 0x39,
+ 0x4b, 0x2c, 0x62, 0x06, 0x1a, 0xe4, 0x18, 0xc0,
+ 0x35, 0x7c, 0xc3, 0xd0, 0x22, 0xf8, 0xee, 0x19,
+ 0xa5, 0x3d, 0x69, 0xa9, 0x34, 0xe6, 0x29, 0xf9,
+ 0xf1, 0xff, 0x26, 0x7a, 0x66, 0x13, 0x1a, 0xa2,
+ 0xc6, 0xac, 0x84, 0xf6, 0x6b, 0x09, 0xbd, 0x32,
+ 0x6f, 0x26, 0x37, 0x7c, 0x7d, 0x74, 0xe4, 0xa0,
+ 0xeb, 0x85, 0x7a, 0xa1, 0x92, 0x19, 0x2e, 0x64,
+ 0x82, 0x7c, 0x89, 0x1b, 0x14, 0x92, 0xd1, 0xf4,
+ 0x1f, 0x29, 0x84, 0x04, 0x70, 0x09, 0x13, 0x4c,
+ 0x62, 0x9a, 0xb4, 0xf7, 0xc1, 0x7b, 0x83, 0xd1,
+ 0x2d, 0x1a, 0xbe, 0x83, 0x9b, 0x73, 0xba, 0x8d,
+ 0xbb, 0xb0, 0xf2, 0x5c, 0x72, 0x75, 0x01, 0x0b,
+ 0xa6, 0x43, 0x6b, 0x76, 0x56, 0x4e, 0x71, 0x1b,
+ 0xb2, 0x34, 0x1f, 0x70, 0x44, 0xe6, 0xfb, 0x67,
+ 0xd1, 0x4d, 0x63, 0xce, 0x17, 0x46, 0x9b, 0x11,
+ 0xda, 0x93, 0xf8, 0x03, 0x11, 0x8f, 0x90, 0xff,
+ 0x80, 0x85, 0x02, 0x1f, 0xb6, 0x6a, 0x28, 0x3f,
+ 0x01, 0xa8, 0x36, 0x2e, 0xc7, 0x42, 0xd4, 0x02,
+ 0x26, 0xea, 0xb5, 0x84, 0x6c, 0x9f, 0xa0, 0x4a,
+ 0x73, 0x49, 0xea, 0x91, 0x4d, 0x62, 0xf8, 0x23,
+ 0xe4, 0x3d, 0x91, 0xfb, 0x53, 0x2c, 0x8c, 0xa4,
+ 0xfe, 0x81, 0x05, 0x5d, 0x4b, 0x9a, 0x75, 0x29,
+ 0xf8, 0xbe, 0x3f, 0x05, 0xb4, 0x8f, 0xdc, 0xcc,
+ 0xfa, 0xcc, 0xd7, 0xb2, 0x06, 0x03, 0xd4, 0xf3,
+ 0x8e, 0x09, 0x09, 0x80, 0xf8, 0xc3, 0x3b, 0x66,
+ 0xe9, 0x9c, 0x5b, 0x16, 0xed, 0x2d, 0x35, 0x1c,
+ 0x99, 0x3b, 0x1f, 0x0e, 0x04, 0x30, 0x23, 0x3a,
+ 0x83, 0x0c, 0xec, 0x76, 0xf2, 0x5d, 0x13, 0x54,
+ 0x15, 0x62, 0x36, 0x26, 0x6b, 0x21, 0x62, 0xdd,
+ 0xb4, 0x1a, 0x57, 0x16, 0xfd, 0xa0, 0x9c, 0xfa,
+ 0x37, 0xb3, 0xda, 0xe0, 0x46, 0x91, 0xb3, 0x20,
+ 0xe7, 0xe2, 0xf3, 0x0e, 0x20, 0x3c, 0x98, 0x1b,
+ 0xe4, 0xc2, 0xd3, 0xa9, 0x97, 0xaf, 0x12, 0x69,
+ 0x23, 0x97, 0x62, 0x6e, 0xae, 0x54, 0x9c, 0x82,
+ 0x92, 0x50, 0x74, 0x07, 0x4a, 0xb1, 0xdc, 0xcf,
+ 0x53, 0x1d, 0xc8, 0x29, 0x1f, 0x6e, 0xf1, 0x13,
+ 0xec, 0xb6, 0x60, 0xb1, 0x4c, 0x9d, 0xd7, 0x77,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t aes_cbc_192_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x33, 0xfd, 0xfa, 0x44, 0x64, 0x75, 0x22, 0x7e,
+ 0xe3, 0xb3, 0xa0, 0x75, 0x99, 0x96, 0xc0, 0xec,
+ 0x56, 0x06, 0x7d, 0x19, 0x0b, 0x66, 0x89, 0xe0,
+ 0x69, 0x1d, 0x93, 0x91, 0xd7, 0x0f, 0xf8, 0xf5,
+ 0x5a, 0x39, 0x30, 0xad, 0x64, 0x42, 0x06, 0xa3,
+ 0xce, 0x3f, 0x67, 0xd6, 0x6e, 0xcd, 0x3b, 0xf5,
+ 0x03, 0x2b, 0x07, 0x83, 0x18, 0x1a, 0x4f, 0x4c,
+ 0xe7, 0x6b, 0xe8, 0xf9, 0x19, 0xa5, 0x23, 0x8f,
+ 0x46, 0x35, 0x13, 0x7b, 0x61, 0x05, 0xfc, 0x7d,
+ 0x17, 0x39, 0x03, 0xa8, 0xec, 0x7a, 0xd2, 0x5f,
+ 0x91, 0xa7, 0x26, 0x07, 0x9d, 0xd7, 0x0c, 0xd7,
+ 0xd4, 0x8e, 0x37, 0xf3, 0x1a, 0x3c, 0x04, 0x83,
+ 0x04, 0x71, 0x06, 0xa6, 0x5f, 0x82, 0xe0, 0x6d,
+ 0x87, 0x5c, 0x7c, 0x03, 0x25, 0x03, 0x4b, 0x24,
+ 0x07, 0x40, 0xad, 0xe4, 0x1d, 0x1d, 0xcb, 0x34,
+ 0xc2, 0x53, 0x1d, 0x13, 0xc5, 0x87, 0xab, 0xa7,
+ 0x95, 0x11, 0x8b, 0xbb, 0xf0, 0xc3, 0x00, 0xeb,
+ 0xe5, 0xb0, 0x9e, 0x88, 0x8b, 0xad, 0xca, 0xcb,
+ 0x17, 0xf8, 0x92, 0x4d, 0x00, 0xb0, 0x08, 0x74,
+ 0x08, 0xb9, 0x8b, 0x95, 0x96, 0xd9, 0x36, 0x35,
+ 0x31, 0x92, 0x89, 0xf6, 0x35, 0x33, 0xfb, 0x18,
+ 0x5b, 0x84, 0xa1, 0xfe, 0xe1, 0x62, 0x04, 0x6f,
+ 0x3c, 0xc1, 0xd2, 0xc2, 0x10, 0xd7, 0x97, 0xba,
+ 0x29, 0x7c, 0xe3, 0x85, 0xee, 0x59, 0x90, 0xaf,
+ 0x7f, 0x6f, 0x97, 0x97, 0xa2, 0x41, 0x18, 0x7f,
+ 0x2f, 0x06, 0x15, 0xb2, 0x46, 0x82, 0x49, 0x39,
+ 0xd0, 0xfb, 0xa8, 0x48, 0x44, 0x28, 0x58, 0xff,
+ 0xd8, 0xf2, 0x65, 0xf9, 0x4f, 0x2c, 0xbe, 0xec,
+ 0xb6, 0xdf, 0x27, 0x1a, 0xf2, 0x05, 0x15, 0x5e,
+ 0xe3, 0x2a, 0x98, 0x29, 0x92, 0x4a, 0x1b, 0x5d,
+ 0x5c, 0x2c, 0x70, 0xf6, 0x41, 0xd4, 0xbe, 0x64,
+ 0xa1, 0xd9, 0x79, 0xf1, 0x11, 0x16, 0xda, 0xa2,
+ 0xaf, 0xdd, 0x4d, 0xa8, 0xed, 0xec, 0xbe, 0x7d,
+ 0x49, 0x6c, 0x30, 0xf2, 0xf5, 0x36, 0x3c, 0xae,
+ 0x4b, 0xa7, 0x77, 0xa3, 0xca, 0x22, 0xa5, 0xe2,
+ 0x4d, 0x44, 0xcb, 0x36, 0xd5, 0x3f, 0x20, 0x13,
+ 0xb6, 0xfb, 0xcd, 0x79, 0xd7, 0x42, 0xf9, 0x75,
+ 0x09, 0x45, 0x28, 0x9e, 0xf2, 0xbd, 0x15, 0x57,
+ 0xf8, 0x4b, 0xc0, 0xd3, 0xb3, 0xb8, 0xde, 0x55,
+ 0x9e, 0x11, 0x67, 0xab, 0xc5, 0x5d, 0x58, 0xdb,
+ 0x4d, 0x20, 0x34, 0x77, 0x33, 0x9c, 0x46, 0x76,
+ 0x9b, 0x1e, 0x0e, 0x6b, 0x4e, 0xd9, 0x63, 0x68,
+ 0x78, 0x5e, 0x7c, 0x52, 0xa2, 0x64, 0xa9, 0xfc,
+ 0x21, 0x35, 0x17, 0x93, 0x18, 0x9e, 0x10, 0xcf,
+ 0x95, 0x6b, 0xf0, 0x55, 0x46, 0xc3, 0x4b, 0xfc,
+ 0x86, 0x8b, 0x0d, 0x3b, 0x5c, 0x30, 0xcc, 0xf1,
+ 0x4c, 0x43, 0xf0, 0xd6, 0xf6, 0x3b, 0x0b, 0x68,
+ 0x6f, 0x21, 0xd1, 0x61, 0xda, 0x35, 0x92, 0x94,
+ 0xa5, 0x5d, 0x47, 0x39, 0x96, 0x50, 0x5f, 0xbd,
+ 0x57, 0x22, 0xd2, 0x65, 0x73, 0x05, 0x8f, 0x2b,
+ 0xf2, 0x96, 0x53, 0x6b, 0x8e, 0xd3, 0x1e, 0xe7,
+ 0x92, 0xd4, 0xea, 0x41, 0xee, 0x92, 0x4d, 0x10,
+ 0x9f, 0x68, 0xd8, 0xe9, 0xac, 0x1f, 0x38, 0x0b,
+ 0x12, 0xa4, 0x1c, 0xb2, 0x63, 0x2b, 0x87, 0x07,
+ 0xb8, 0x1e, 0x02, 0x2b, 0x4d, 0xad, 0x99, 0xdf,
+ 0xe3, 0x98, 0x69, 0x29, 0x11, 0xe3, 0x77, 0x45,
+ 0x9a, 0xe9, 0x6c, 0x47, 0x4e, 0xc0, 0x85, 0x15,
+ 0x68, 0x58, 0x41, 0x37, 0xab, 0x96, 0x11, 0x94,
+ 0x9e, 0xbb, 0xa8, 0x5d, 0x51, 0x05, 0x93, 0xdd,
+ 0x2e, 0xb8, 0xdf, 0xcf, 0x83, 0xbc, 0xf6, 0x53,
+ 0x95, 0x93, 0x27, 0xda, 0xa5, 0x20, 0x1b, 0x7d,
+ 0x1d, 0xd9, 0x0c, 0xde, 0xe5, 0x3f, 0xc8, 0x60,
+ 0x16, 0x32, 0x95, 0x24, 0xa7, 0x2b, 0x74, 0xf1,
+ 0x67, 0xf9, 0xf2, 0x49, 0xda, 0x12, 0x97, 0xdd,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t aes_cbc_192_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xa5, 0x81, 0x86, 0x78, 0x4a, 0xd7, 0x5b, 0x83,
+ 0xcf, 0xbf, 0x7e, 0x3c, 0xd7, 0xcd, 0xaf, 0xfa,
+ 0x82, 0x18, 0xce, 0xbd, 0x8b, 0xe6, 0xd9, 0x39,
+ 0x22, 0x2d, 0x1e, 0x75, 0x65, 0xee, 0x61, 0xf2,
+ 0xc3, 0x8b, 0xf4, 0x40, 0x03, 0x73, 0x8a, 0x21,
+ 0x9f, 0xf3, 0xcc, 0x93, 0x08, 0x3d, 0xff, 0x8a,
+ 0xbc, 0x0f, 0x19, 0xa1, 0x9f, 0xc8, 0x73, 0xe8,
+ 0xa6, 0x14, 0x2e, 0x43, 0x19, 0x79, 0x61, 0x35,
+ 0x8d, 0x55, 0x06, 0xeb, 0x96, 0xe7, 0xf5, 0x4b,
+ 0x95, 0x5f, 0x9b, 0xb2, 0x18, 0x0d, 0x13, 0xc2,
+ 0x96, 0x79, 0x50, 0x78, 0x98, 0x50, 0x88, 0x2b,
+ 0xab, 0x05, 0x66, 0xa1, 0x3a, 0x25, 0x85, 0xe2,
+ 0xd0, 0xe2, 0xac, 0xb5, 0x26, 0xde, 0x95, 0x04,
+ 0x45, 0xe7, 0x22, 0x71, 0x02, 0xb3, 0x84, 0x4c,
+ 0xb5, 0xad, 0x64, 0x5c, 0x27, 0x5c, 0x71, 0xcd,
+ 0x0b, 0x62, 0x91, 0xd6, 0x84, 0x00, 0x62, 0x52,
+ 0x54, 0xbd, 0x22, 0xc8, 0x57, 0xa7, 0x41, 0xac,
+ 0xc7, 0xa8, 0x56, 0x6f, 0x1b, 0x7e, 0xce, 0x02,
+ 0x29, 0x3b, 0xc0, 0x5d, 0x8e, 0x11, 0xa9, 0x54,
+ 0xc2, 0xf2, 0xf0, 0x81, 0x6c, 0x9a, 0x24, 0x5b,
+ 0x81, 0x7d, 0xf3, 0x84, 0x93, 0xc6, 0x2a, 0xd4,
+ 0xd3, 0x1a, 0x2f, 0x97, 0x2e, 0x31, 0x8a, 0x62,
+ 0x43, 0xcb, 0xc7, 0x3d, 0x73, 0x8e, 0xd6, 0x86,
+ 0x17, 0x8f, 0x63, 0xd4, 0xb1, 0x50, 0x92, 0xce,
+ 0x90, 0x37, 0x91, 0xce, 0x37, 0x13, 0x8e, 0x61,
+ 0x21, 0xd8, 0x1a, 0xbf, 0x42, 0x65, 0x1d, 0x86,
+ 0x07, 0x04, 0x9b, 0xd1, 0xd3, 0x26, 0x6b, 0x7c,
+ 0xa1, 0x77, 0x54, 0x5b, 0x9f, 0x95, 0x62, 0x43,
+ 0xb3, 0x71, 0x1e, 0x4c, 0x32, 0xd1, 0x3e, 0xe8,
+ 0x60, 0x9c, 0x0c, 0x15, 0x55, 0xf0, 0x38, 0xb7,
+ 0x1e, 0x40, 0xe5, 0x26, 0x4e, 0x46, 0x49, 0x47,
+ 0x59, 0x3d, 0x49, 0x76, 0x28, 0xd3, 0xed, 0x03,
+ 0xdd, 0xf8, 0x1a, 0xf4, 0x1a, 0xfe, 0xe4, 0x03,
+ 0xb9, 0xa5, 0x8e, 0x7c, 0x91, 0x7a, 0xb2, 0x17,
+ 0x84, 0x97, 0x3f, 0x12, 0x68, 0xaa, 0xf5, 0x73,
+ 0xbc, 0x84, 0xdd, 0x03, 0x4a, 0xc4, 0xcd, 0xdb,
+ 0xb0, 0x8a, 0x3b, 0xac, 0xf1, 0xdd, 0x10, 0x20,
+ 0x69, 0xee, 0x94, 0xcd, 0x60, 0x3f, 0x01, 0xcf,
+ 0xf4, 0xff, 0xdb, 0x91, 0x8a, 0xf3, 0xb8, 0x44,
+ 0x62, 0xdc, 0xdc, 0xc8, 0x2b, 0xaf, 0x0d, 0x5e,
+ 0x1b, 0x58, 0x7f, 0x6b, 0x0d, 0xc4, 0xd4, 0x1c,
+ 0x89, 0x29, 0x60, 0x5d, 0xe9, 0x59, 0xbb, 0x19,
+ 0x03, 0x7c, 0x25, 0x63, 0xc6, 0x89, 0x6f, 0xe6,
+ 0xbe, 0xcd, 0xaa, 0xf2, 0xbf, 0x16, 0xcb, 0x47,
+ 0xc6, 0x74, 0xdd, 0x90, 0x41, 0x75, 0x7f, 0x26,
+ 0x7b, 0x5a, 0xb9, 0x11, 0xa0, 0xc7, 0x75, 0x60,
+ 0xc5, 0x54, 0x7d, 0xb0, 0xb4, 0xd0, 0x95, 0x01,
+ 0xff, 0x07, 0x49, 0x56, 0xfb, 0xec, 0xa9, 0x4c,
+ 0x68, 0x28, 0x41, 0x81, 0x80, 0x05, 0x88, 0x58,
+ 0xf5, 0xdc, 0x42, 0x99, 0xd8, 0xb7, 0x47, 0xd9,
+ 0xf7, 0x0e, 0x2c, 0x0f, 0x95, 0x04, 0xb3, 0xc8,
+ 0x8a, 0xe2, 0x21, 0x57, 0x8d, 0x64, 0x54, 0x40,
+ 0xf6, 0xd0, 0x3c, 0x97, 0xcf, 0x22, 0xce, 0xcd,
+ 0xbf, 0x05, 0x15, 0xaa, 0x89, 0xd9, 0x2b, 0x48,
+ 0xaf, 0x34, 0xe0, 0xf5, 0xe3, 0x58, 0x06, 0xd7,
+ 0x49, 0x00, 0x95, 0x3a, 0xb3, 0xc8, 0xcd, 0x2b,
+ 0x3e, 0xe8, 0x1b, 0x60, 0xe8, 0xea, 0xaf, 0x09,
+ 0xbb, 0xee, 0xce, 0xbc, 0xa0, 0x9b, 0x17, 0x90,
+ 0x42, 0x40, 0x18, 0x35, 0x2e, 0x17, 0xa0, 0x6e,
+ 0x43, 0xe7, 0xac, 0x89, 0x96, 0x3c, 0x16, 0xe0,
+ 0xdb, 0x09, 0x51, 0x4a, 0x45, 0x33, 0x63, 0xe9,
+ 0x4e, 0x3f, 0x32, 0x34, 0x36, 0x43, 0xd5, 0x0c,
+ 0x5a, 0x2e, 0x0e, 0x8b, 0x80, 0xb7, 0xf4, 0xe4,
+ 0x99, 0x9b, 0x05, 0xf5, 0xb2, 0xe4, 0x03, 0xe4,
+};
+
+const struct testvec aes_cbc_192_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t aes_cbc_192_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0x87, 0x9c, 0x05, 0xd6, 0x25, 0xb9, 0xe0, 0xbe,
+ 0x78, 0x21, 0x85, 0x81, 0x8e, 0x2f, 0x13, 0x5e,
+ 0xf2, 0x73, 0x11, 0xfa, 0x73, 0x77, 0x93, 0x5e,
+ 0x71, 0x16, 0x98, 0x68, 0x6f, 0xe8, 0x22, 0x34,
+ 0xf5, 0x11, 0xfa, 0x61, 0xe6, 0x1a, 0xfb, 0x42,
+ 0xa7, 0xa3, 0x2e, 0x0d, 0xc1, 0x9d, 0x7d, 0xd9,
+ 0xfb, 0xbb, 0xc5, 0x08, 0x9d, 0xc2, 0xab, 0x5c,
+ 0xdf, 0x9b, 0x3c, 0x1a, 0xbd, 0x66, 0x5a, 0x91,
+ 0x1c, 0x00, 0x59, 0x2e, 0x92, 0xe9, 0x23, 0xf6,
+ 0x90, 0x3d, 0x5b, 0x72, 0x76, 0x78, 0xd9, 0xa2,
+ 0x48, 0x33, 0x29, 0xe2, 0xfd, 0x77, 0x14, 0xda,
+ 0x01, 0x92, 0x63, 0xdd, 0x8c, 0x1c, 0x2e, 0xf7,
+ 0x61, 0xfb, 0xc5, 0x76, 0xec, 0x7f, 0xef, 0xdc,
+ 0xbe, 0x2d, 0x3b, 0x69, 0x30, 0xb9, 0x08, 0x00,
+ 0xe8, 0x37, 0x09, 0xaa, 0x2a, 0x02, 0x80, 0x11,
+ 0x91, 0x16, 0x94, 0x7d, 0xb5, 0xdc, 0x9f, 0xb3,
+ 0xb0, 0x26, 0x72, 0x85, 0x93, 0x85, 0x19, 0x08,
+ 0x97, 0xef, 0x97, 0x57, 0xa8, 0x76, 0x0e, 0x85,
+ 0xb1, 0x1d, 0x79, 0xe3, 0x7a, 0xe8, 0x06, 0x3b,
+ 0xc4, 0x00, 0xbd, 0xaa, 0xd9, 0x17, 0x81, 0x37,
+ 0x12, 0x86, 0x52, 0xea, 0x04, 0xb2, 0x11, 0x0f,
+ 0x5a, 0x08, 0x68, 0xcb, 0x48, 0xca, 0x2f, 0xda,
+ 0xa3, 0x0a, 0x60, 0x57, 0xc7, 0x80, 0x36, 0x60,
+ 0x05, 0xce, 0xd5, 0x43, 0xc9, 0xbc, 0x6c, 0xe6,
+ 0x63, 0x38, 0x2e, 0x81, 0x90, 0x34, 0x11, 0x2c,
+ 0x84, 0x0c, 0x62, 0x68, 0xde, 0x17, 0x57, 0x43,
+ 0x19, 0xa5, 0x92, 0x9d, 0x91, 0x2b, 0xa2, 0x95,
+ 0x7c, 0x20, 0x72, 0xaa, 0x83, 0x24, 0x54, 0x94,
+ 0x10, 0x80, 0xd4, 0x3f, 0x58, 0xb9, 0x7b, 0x74,
+ 0x68, 0xd5, 0xfb, 0x3e, 0xdd, 0xb4, 0xdf, 0x65,
+ 0x72, 0x88, 0x45, 0x8a, 0xd0, 0x93, 0x6e, 0x99,
+ 0x84, 0xad, 0x39, 0x73, 0x16, 0x88, 0xdc, 0x89,
+ 0x33, 0x34, 0xd7, 0xd8, 0x97, 0xfb, 0x90, 0xd2,
+ 0xc5, 0x8e, 0x94, 0xc4, 0xf1, 0xfe, 0xbe, 0x23,
+ 0xf1, 0x3a, 0x10, 0x1c, 0x42, 0x6b, 0xf5, 0xee,
+ 0xe4, 0x78, 0x8a, 0x7e, 0x13, 0x02, 0x25, 0xcb,
+ 0xd1, 0x61, 0x1f, 0xab, 0x45, 0x1f, 0x90, 0x88,
+ 0x0f, 0x6b, 0xff, 0x61, 0xba, 0xf3, 0xac, 0x8e,
+ 0x13, 0xc2, 0xfb, 0xca, 0x41, 0xed, 0xfe, 0x6c,
+ 0xcb, 0xdf, 0x97, 0x60, 0x29, 0x8a, 0x72, 0x8d,
+ 0x7d, 0xad, 0x6e, 0xe9, 0x7b, 0xc4, 0x92, 0x14,
+ 0x5e, 0x33, 0x27, 0xe2, 0xda, 0x2f, 0x95, 0x5f,
+ 0x40, 0x27, 0xeb, 0xdb, 0x0d, 0x1e, 0xc5, 0xd4,
+ 0x43, 0x50, 0x1a, 0x62, 0x82, 0xbe, 0x24, 0x7f,
+ 0xb7, 0x46, 0xa8, 0x70, 0x10, 0x33, 0xb6, 0x3f,
+ 0xbf, 0xa8, 0xa8, 0x85, 0xab, 0x1d, 0xb4, 0x3f,
+ 0x84, 0x06, 0x91, 0xd6, 0x18, 0x3d, 0xeb, 0x8b,
+ 0x3f, 0x9b, 0x37, 0x9e, 0x2e, 0xd2, 0xec, 0xe5,
+ 0x2d, 0xf0, 0x3f, 0x45, 0xd5, 0x9d, 0xb9, 0x28,
+ 0x89, 0xe4, 0x0c, 0xa9, 0x38, 0xca, 0x22, 0x56,
+ 0x53, 0xdf, 0x49, 0xba, 0x5d, 0x99, 0xd6, 0x4b,
+ 0x1d, 0x0d, 0x6d, 0xee, 0x7c, 0xf2, 0x6f, 0x50,
+ 0x04, 0xf1, 0xf8, 0x49, 0xd1, 0x2f, 0x50, 0x3e,
+ 0xf1, 0x08, 0x49, 0x17, 0x08, 0xd2, 0xac, 0x5d,
+ 0x58, 0xe7, 0x27, 0xe6, 0x59, 0x02, 0x9f, 0x1c,
+ 0x40, 0xff, 0x6c, 0x67, 0xae, 0x49, 0x1a, 0x2a,
+ 0xab, 0xd9, 0x63, 0x25, 0x2d, 0x9b, 0xd8, 0x1a,
+ 0x41, 0xa6, 0xea, 0x72, 0xfd, 0x56, 0xa1, 0x57,
+ 0x59, 0xdd, 0xf5, 0xa3, 0xb2, 0x2f, 0x64, 0xb1,
+ 0xc5, 0xfe, 0x8d, 0x9b, 0x93, 0xd1, 0x51, 0x77,
+ 0x13, 0x50, 0x74, 0x30, 0x28, 0xe4, 0x7a, 0x06,
+ 0x69, 0xd4, 0xa8, 0x0a, 0xae, 0x02, 0x4a, 0x61,
+ 0x24, 0xc2, 0xcd, 0xc8, 0xd3, 0x12, 0x2e, 0xac,
+ 0x9a, 0x0c, 0x24, 0x06, 0xb8, 0x1e, 0x3d, 0x29,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t aes_cbc_192_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x1e, 0x3b, 0x66, 0x76, 0xd9, 0x9e, 0xf7, 0x82,
+ 0x17, 0x76, 0x69, 0x4d, 0x64, 0x63, 0xf1, 0x01,
+ 0x81, 0x8a, 0xa4, 0x97, 0x05, 0x42, 0xdb, 0x8c,
+ 0x27, 0xc8, 0xfd, 0x08, 0x21, 0x17, 0x87, 0xa9,
+ 0x0c, 0x86, 0x2d, 0xda, 0x17, 0xd5, 0x5d, 0x67,
+ 0x12, 0x93, 0x8d, 0x34, 0x5a, 0xfc, 0x2a, 0x49,
+ 0x1a, 0x1a, 0x77, 0x20, 0xfb, 0x1d, 0x5d, 0xd8,
+ 0x99, 0xb0, 0x8f, 0x1c, 0x13, 0x4d, 0x28, 0x6d,
+ 0x2d, 0x79, 0xa9, 0x8e, 0x04, 0x0c, 0x5a, 0xd5,
+ 0x52, 0x09, 0x15, 0x4a, 0xfb, 0x7a, 0xf8, 0xdc,
+ 0x3b, 0x77, 0xaf, 0xe0, 0x80, 0x6b, 0xac, 0x5f,
+ 0xc0, 0x0f, 0x0f, 0x29, 0xf5, 0xcc, 0xbc, 0x85,
+ 0x77, 0xe7, 0x9f, 0x59, 0x23, 0x83, 0x67, 0x74,
+ 0x3b, 0x1c, 0x0f, 0x75, 0xd8, 0x58, 0xa2, 0xce,
+ 0x8c, 0x3a, 0x80, 0xd7, 0xff, 0xa1, 0x83, 0xa3,
+ 0xe0, 0xad, 0x18, 0x7a, 0xc5, 0x28, 0x28, 0x71,
+ 0x46, 0xb5, 0x13, 0x76, 0x4d, 0x67, 0x37, 0x38,
+ 0x3f, 0x9e, 0xa6, 0x8b, 0xc2, 0xaf, 0x83, 0x7d,
+ 0x8b, 0x82, 0xd0, 0xe2, 0xec, 0x13, 0xce, 0x2b,
+ 0x1e, 0x13, 0xe7, 0xb6, 0xfa, 0x9e, 0xa2, 0x32,
+ 0xb7, 0xdc, 0xe5, 0xb5, 0x35, 0xa3, 0xb4, 0x84,
+ 0x57, 0x05, 0x2d, 0x3e, 0xb0, 0x0a, 0x52, 0x61,
+ 0x00, 0xe4, 0x84, 0xab, 0xf4, 0x98, 0xe4, 0xe6,
+ 0xcd, 0xb1, 0xd4, 0x40, 0x31, 0x5f, 0x8f, 0x73,
+ 0x16, 0x6e, 0xc0, 0x3d, 0x07, 0x5d, 0x6b, 0x91,
+ 0x70, 0x71, 0x8a, 0x4b, 0xfe, 0xeb, 0xbe, 0x04,
+ 0x5d, 0x75, 0x0a, 0x74, 0x52, 0x1e, 0xd3, 0x94,
+ 0xc5, 0xcd, 0xc1, 0xd6, 0x12, 0x6a, 0x58, 0x52,
+ 0x6e, 0x45, 0x1f, 0x49, 0x09, 0x4c, 0x32, 0xf3,
+ 0x3d, 0x3d, 0x73, 0x15, 0xa3, 0xa5, 0x2f, 0xf2,
+ 0x02, 0x10, 0x1e, 0xaf, 0xf5, 0xb4, 0x78, 0x48,
+ 0x8a, 0x6c, 0x58, 0x71, 0x77, 0x91, 0x95, 0x57,
+ 0x79, 0xbf, 0x1f, 0x3e, 0xb3, 0xf8, 0xc4, 0x33,
+ 0x07, 0x5d, 0x96, 0x41, 0x76, 0xb1, 0xe1, 0xe0,
+ 0xa9, 0x97, 0x14, 0x99, 0x1d, 0xaa, 0x91, 0xbb,
+ 0xdf, 0x89, 0xf1, 0x0d, 0xd0, 0x52, 0xf9, 0xa7,
+ 0x4c, 0x82, 0xc0, 0xeb, 0xb7, 0xaf, 0x7b, 0x4b,
+ 0x5a, 0x2a, 0x7a, 0x4e, 0xb2, 0x69, 0x87, 0x28,
+ 0x84, 0xf7, 0x76, 0x56, 0xee, 0xf8, 0x37, 0x35,
+ 0xc9, 0xbc, 0x08, 0x8b, 0xfe, 0x1e, 0x54, 0xb3,
+ 0x01, 0xa7, 0x0f, 0x20, 0x70, 0xac, 0xa6, 0x6b,
+ 0x9f, 0x98, 0xfe, 0xdb, 0x3e, 0x4f, 0x9f, 0xfc,
+ 0x95, 0x37, 0xf4, 0x90, 0x61, 0x62, 0x60, 0xeb,
+ 0x7a, 0x4a, 0x56, 0xae, 0x49, 0xcc, 0x92, 0xff,
+ 0xd3, 0x06, 0xc6, 0x62, 0x4c, 0x05, 0x28, 0xa7,
+ 0x3f, 0xe9, 0xee, 0x70, 0x6f, 0xd2, 0x80, 0x41,
+ 0x4d, 0xa0, 0xbc, 0x00, 0xaf, 0x30, 0xe4, 0x34,
+ 0x61, 0xda, 0xb4, 0xff, 0x2a, 0x85, 0x8b, 0x1a,
+ 0xbf, 0xb5, 0xe4, 0x7f, 0x27, 0xee, 0xf3, 0x25,
+ 0xe6, 0x52, 0x2a, 0x83, 0xbe, 0xe4, 0x64, 0xc3,
+ 0x67, 0x0c, 0x9e, 0x0f, 0xba, 0xb4, 0x67, 0xd1,
+ 0x1b, 0x4a, 0xb0, 0xb2, 0xb4, 0xf2, 0x8a, 0x1b,
+ 0x21, 0x34, 0x3c, 0x97, 0x5a, 0xdb, 0x92, 0x8b,
+ 0x2d, 0xe9, 0x94, 0x4e, 0x11, 0xfb, 0xd4, 0x2e,
+ 0xc2, 0xed, 0xf9, 0x75, 0xfd, 0x1a, 0xef, 0x3b,
+ 0x98, 0x5d, 0xa9, 0x75, 0xd5, 0x14, 0x0a, 0xe3,
+ 0xda, 0x07, 0xa6, 0x20, 0x7b, 0x49, 0x47, 0x87,
+ 0xff, 0xf0, 0xe8, 0x7e, 0xcf, 0xc4, 0x2c, 0x02,
+ 0xdd, 0x53, 0xe9, 0x79, 0xc7, 0x6d, 0x16, 0x9f,
+ 0x2b, 0xd7, 0x1a, 0x36, 0x25, 0x5c, 0xba, 0x5c,
+ 0xdb, 0x44, 0x88, 0x99, 0x32, 0x2e, 0xb6, 0x3f,
+ 0xb4, 0xdd, 0x15, 0xeb, 0xec, 0x2a, 0x9e, 0xc5,
+ 0x37, 0x30, 0x2a, 0xd5, 0xc4, 0x2a, 0x9b, 0x40,
+ 0x97, 0x83, 0x94, 0xe7, 0x79, 0x79, 0x63, 0x4b,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t aes_cbc_192_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x34, 0x07, 0x20, 0x14, 0x64, 0x0b, 0xa2, 0x2c,
+ 0xed, 0xba, 0x46, 0x24, 0xa0, 0xe6, 0x99, 0x8a,
+ 0x20, 0x75, 0x5f, 0x9f, 0x2a, 0x10, 0xa6, 0x1c,
+ 0x52, 0x60, 0x18, 0x67, 0xd6, 0x0d, 0x90, 0x4e,
+ 0xbc, 0x25, 0x5f, 0x81, 0xb4, 0x10, 0xdb, 0xd9,
+ 0xaf, 0x36, 0x84, 0x5c, 0x20, 0x25, 0x25, 0xbf,
+ 0x0d, 0xfa, 0xc5, 0x75, 0x2b, 0xec, 0xf2, 0xa6,
+ 0x69, 0x5c, 0xfe, 0xee, 0x21, 0xd8, 0x87, 0xdf,
+ 0xe3, 0x83, 0xeb, 0xb3, 0x3f, 0x5b, 0xda, 0x37,
+ 0x11, 0x05, 0xf7, 0xd8, 0xe0, 0x94, 0x08, 0x2b,
+ 0x75, 0x6b, 0xf3, 0x40, 0x53, 0x85, 0xde, 0x7a,
+ 0x64, 0xb1, 0x0e, 0x5f, 0x01, 0xb5, 0xfb, 0x74,
+ 0x48, 0x9a, 0xd4, 0x41, 0x33, 0x70, 0x9b, 0x08,
+ 0x7e, 0x34, 0x60, 0xfc, 0xfa, 0xe6, 0x2c, 0xec,
+ 0x0e, 0xb7, 0x1a, 0xf1, 0x49, 0x48, 0x0c, 0xd4,
+ 0xd7, 0xbc, 0x60, 0x28, 0xdb, 0x57, 0xa4, 0x29,
+ 0x55, 0x2d, 0x92, 0xa6, 0xca, 0x9a, 0xaf, 0x4d,
+ 0x7f, 0xb8, 0x29, 0x9f, 0x50, 0x98, 0x21, 0x94,
+ 0x7a, 0x94, 0x44, 0x3d, 0xd1, 0xcf, 0xf4, 0x6f,
+ 0xad, 0xb4, 0x58, 0x66, 0x74, 0x01, 0x2c, 0x5b,
+ 0x8f, 0x1b, 0xa6, 0x09, 0xd0, 0x3f, 0x79, 0xc9,
+ 0x4f, 0x3b, 0x37, 0x0d, 0xb8, 0x07, 0xb0, 0x61,
+ 0xbc, 0x5a, 0x40, 0x3a, 0x10, 0x3c, 0x12, 0xe6,
+ 0x04, 0xc7, 0xd1, 0xe1, 0x18, 0x6f, 0xde, 0x72,
+ 0xf5, 0xcf, 0x24, 0x58, 0x76, 0xe1, 0xcd, 0x62,
+ 0x90, 0xc3, 0x16, 0xcc, 0x3f, 0xda, 0xd6, 0x6b,
+ 0x6a, 0xcc, 0x61, 0x76, 0xc1, 0xaf, 0xdc, 0x53,
+ 0xef, 0x06, 0x23, 0x22, 0x93, 0x11, 0x59, 0xf5,
+ 0x7f, 0x46, 0xac, 0xb8, 0x6c, 0x3b, 0x36, 0x69,
+ 0xc5, 0x14, 0x0a, 0x51, 0xa1, 0x5f, 0xb9, 0xc7,
+ 0x37, 0xe3, 0xd9, 0xaf, 0x8c, 0xe9, 0x49, 0xd4,
+ 0xf9, 0xf9, 0x5e, 0x1f, 0x5f, 0x7c, 0x07, 0xb5,
+ 0x1c, 0x9e, 0xbd, 0x10, 0x75, 0xc3, 0x93, 0x48,
+ 0xdc, 0x32, 0xe7, 0x55, 0x90, 0x48, 0x42, 0xc0,
+ 0x73, 0x20, 0x40, 0x17, 0xbb, 0x71, 0x30, 0xfe,
+ 0xd1, 0x84, 0xe9, 0x7d, 0x92, 0xd4, 0xff, 0xbe,
+ 0x3e, 0xd9, 0x41, 0xfb, 0x41, 0x43, 0x2b, 0x9f,
+ 0x04, 0x7b, 0xe7, 0x81, 0xbb, 0x2a, 0xd6, 0x7b,
+ 0x96, 0x72, 0x29, 0x30, 0x52, 0x5c, 0xea, 0xcc,
+ 0x4c, 0x77, 0xed, 0x5a, 0xd9, 0xab, 0x51, 0x90,
+ 0x21, 0x3b, 0x5b, 0x26, 0xeb, 0x14, 0xd5, 0xea,
+ 0x01, 0xb0, 0x7c, 0xbd, 0xa6, 0x3d, 0x7f, 0x42,
+ 0xd7, 0x7e, 0xf1, 0x6c, 0x71, 0x7d, 0xc0, 0x25,
+ 0x61, 0xe9, 0x66, 0xe1, 0xf2, 0x67, 0x99, 0xa1,
+ 0xe7, 0x3a, 0x6f, 0x88, 0x1e, 0x8b, 0x76, 0xed,
+ 0x50, 0x2c, 0x4e, 0xac, 0x73, 0xd7, 0xf2, 0x85,
+ 0x8f, 0xcc, 0xb1, 0x4f, 0x6c, 0x9a, 0xf7, 0x45,
+ 0x28, 0x4f, 0xfc, 0x3f, 0xf1, 0x80, 0xc3, 0xf3,
+ 0xce, 0x5e, 0xfc, 0x56, 0xd9, 0x45, 0xdd, 0x81,
+ 0xe3, 0x48, 0x22, 0xc9, 0xb8, 0x13, 0xc1, 0x48,
+ 0x6c, 0x95, 0x97, 0xc0, 0x91, 0x37, 0xf5, 0x8a,
+ 0x11, 0x3b, 0xab, 0xce, 0x7a, 0xb0, 0xb4, 0x4c,
+ 0xba, 0xc0, 0x91, 0x7f, 0x3c, 0x27, 0xe9, 0xc0,
+ 0x58, 0x92, 0x70, 0x67, 0xf4, 0x80, 0x40, 0x92,
+ 0x51, 0x80, 0x8e, 0x9d, 0x2d, 0x87, 0x89, 0x8e,
+ 0xe7, 0xd1, 0xb5, 0xc5, 0x4f, 0xd0, 0x86, 0x31,
+ 0x7f, 0x90, 0x77, 0x05, 0x35, 0xfe, 0xa7, 0xcb,
+ 0x9d, 0x94, 0xf3, 0xf8, 0xbb, 0x4f, 0xe1, 0xb3,
+ 0x48, 0x57, 0xbf, 0xd1, 0x77, 0xe8, 0x72, 0x31,
+ 0x4d, 0x2f, 0xe8, 0xa0, 0xf4, 0x7c, 0x25, 0x9c,
+ 0xcd, 0xa5, 0x7e, 0xd3, 0x30, 0xda, 0x46, 0xf5,
+ 0x48, 0x9e, 0x39, 0x34, 0x94, 0xd6, 0x24, 0x10,
+ 0xfc, 0x74, 0x2b, 0x6d, 0xcc, 0x00, 0x76, 0x3e,
+ 0x3b, 0x85, 0xfa, 0xef, 0x87, 0x70, 0x53, 0x4e,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t aes_cbc_192_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0xfe, 0xad, 0xf3, 0x4a, 0x9d, 0x64, 0x4e, 0x5d,
+ 0xaf, 0xa8, 0x44, 0x7e, 0xc9, 0x75, 0xe8, 0xd0,
+ 0x87, 0x73, 0x66, 0x4c, 0x77, 0x00, 0xfb, 0x7b,
+ 0x04, 0xe7, 0xd8, 0x82, 0x75, 0xe3, 0xa5, 0xbc,
+ 0xf3, 0x80, 0xae, 0x7c, 0xc9, 0x75, 0x9a, 0xc1,
+ 0x73, 0x49, 0x69, 0xf6, 0xa0, 0x49, 0x6e, 0x77,
+ 0x5f, 0x9b, 0x95, 0x9b, 0x9f, 0x41, 0x54, 0x57,
+ 0x0e, 0x3c, 0xe5, 0x2c, 0xbb, 0xbf, 0xd5, 0x76,
+ 0xf6, 0xb6, 0x05, 0xaa, 0x20, 0x5b, 0xdb, 0xcb,
+ 0x81, 0xad, 0x0c, 0x8a, 0x68, 0x94, 0x7d, 0x88,
+ 0xdc, 0x15, 0x6c, 0x89, 0x97, 0x53, 0x30, 0x96,
+ 0x4a, 0x54, 0xf9, 0x88, 0x00, 0xf7, 0x3b, 0x99,
+ 0xfc, 0x82, 0xe3, 0x48, 0xd2, 0x16, 0x2b, 0xba,
+ 0xd4, 0xba, 0x24, 0xd0, 0xd1, 0xb0, 0x8e, 0xcd,
+ 0x77, 0xdc, 0x01, 0xdf, 0xb2, 0x20, 0xc5, 0xa7,
+ 0x48, 0x2a, 0xcf, 0x56, 0xc8, 0x63, 0x6e, 0xc9,
+ 0xa8, 0xa4, 0xc2, 0x9c, 0x66, 0x25, 0x50, 0x77,
+ 0x08, 0x51, 0x92, 0xce, 0x3c, 0xaf, 0xff, 0xee,
+ 0x3e, 0x6d, 0x61, 0x37, 0xcd, 0x85, 0x67, 0x9c,
+ 0xe0, 0x7e, 0xa6, 0x17, 0x7b, 0x5f, 0x6a, 0xe2,
+ 0x4e, 0x76, 0xca, 0x95, 0x88, 0xdf, 0xad, 0x78,
+ 0x91, 0xfa, 0x9e, 0x71, 0x3e, 0xfd, 0x10, 0x78,
+ 0x32, 0x2b, 0x75, 0xbc, 0x3a, 0x06, 0x55, 0x8b,
+ 0x9b, 0xfb, 0x9c, 0x4b, 0xa1, 0x7d, 0x35, 0x3d,
+ 0x63, 0x80, 0x30, 0x61, 0xe0, 0x2d, 0x8a, 0x28,
+ 0xb4, 0x2d, 0x48, 0x9d, 0x27, 0x1a, 0x28, 0x86,
+ 0xfc, 0xfa, 0x93, 0xcf, 0x3e, 0x9c, 0x41, 0xc8,
+ 0xc5, 0x5e, 0x88, 0x22, 0xb8, 0xaf, 0x1d, 0x92,
+ 0xc5, 0x91, 0x1b, 0x1e, 0x95, 0x62, 0xbb, 0x80,
+ 0x0c, 0xae, 0x2a, 0xb3, 0x55, 0x77, 0x86, 0x39,
+ 0xa6, 0xed, 0xc1, 0xd2, 0xc4, 0x95, 0x7e, 0xd4,
+ 0xbe, 0xf3, 0x1b, 0xbc, 0x5e, 0x92, 0x0d, 0x9c,
+ 0x38, 0xb1, 0xb9, 0xd3, 0xf6, 0x3f, 0x97, 0xf9,
+ 0x48, 0x08, 0x2b, 0xa6, 0x98, 0x50, 0xc9, 0x84,
+ 0xec, 0x54, 0xe0, 0x1a, 0x65, 0x76, 0xf2, 0xbe,
+ 0x62, 0xb9, 0x40, 0x3a, 0xb1, 0xef, 0xa0, 0x51,
+ 0xab, 0x3a, 0xfa, 0xaf, 0x33, 0x32, 0xa5, 0x0c,
+ 0xc7, 0x9a, 0x9c, 0x5c, 0xa7, 0x8e, 0xc6, 0x4e,
+ 0x61, 0xe3, 0x83, 0xa1, 0xd4, 0x2c, 0xb2, 0x2c,
+ 0x46, 0x5a, 0xbf, 0x96, 0xeb, 0xda, 0x45, 0x2d,
+ 0x25, 0x37, 0x69, 0x1a, 0x6b, 0xd6, 0xbc, 0xe1,
+ 0x28, 0x65, 0xf9, 0xfc, 0xa7, 0xda, 0xf8, 0x79,
+ 0x87, 0x18, 0x99, 0x01, 0x74, 0x5a, 0x42, 0x79,
+ 0x8e, 0xe4, 0x23, 0x1a, 0x6c, 0xda, 0x93, 0x0f,
+ 0x19, 0xf0, 0xff, 0x0e, 0x25, 0x45, 0x1e, 0xbb,
+ 0x17, 0xca, 0x87, 0x6a, 0x9e, 0xd0, 0xd3, 0xd5,
+ 0x22, 0x5f, 0xce, 0x92, 0xeb, 0x82, 0x8e, 0x3e,
+ 0x4e, 0x99, 0x44, 0xa2, 0x9e, 0x78, 0x53, 0x89,
+ 0x4e, 0x45, 0x51, 0x41, 0x28, 0x91, 0xdb, 0x7e,
+ 0x8f, 0xac, 0xc2, 0xee, 0x09, 0xcb, 0xed, 0x04,
+ 0x7b, 0x37, 0xa1, 0x1d, 0x9c, 0x90, 0x19, 0xb1,
+ 0xdd, 0xc3, 0x22, 0xc8, 0x70, 0x07, 0x26, 0xce,
+ 0x4a, 0xc4, 0xde, 0xee, 0x87, 0xf3, 0x62, 0x69,
+ 0xed, 0xb2, 0x2d, 0x10, 0xc4, 0xfa, 0x86, 0x2e,
+ 0xd1, 0xb8, 0x58, 0xa3, 0xa4, 0x0b, 0x30, 0x87,
+ 0x23, 0x62, 0xed, 0xf3, 0x7b, 0x80, 0x7e, 0x4f,
+ 0xc2, 0xb3, 0xe8, 0xba, 0x25, 0x3e, 0xd3, 0x12,
+ 0x7e, 0x27, 0xd5, 0x72, 0x3b, 0x02, 0xf4, 0xfd,
+ 0x2f, 0x8b, 0xc2, 0x5f, 0x44, 0x40, 0x31, 0x88,
+ 0x73, 0x81, 0xa3, 0xcc, 0xc4, 0x78, 0x2b, 0xfc,
+ 0x41, 0x2e, 0xb2, 0xd0, 0xb4, 0x00, 0x29, 0xc1,
+ 0x46, 0xdf, 0xc1, 0xbd, 0x15, 0x59, 0xa3, 0x6a,
+ 0xc8, 0x2f, 0x29, 0x28, 0x12, 0x9b, 0x1e, 0xea,
+ 0x4e, 0xa9, 0x80, 0xa1, 0xb8, 0x89, 0x21, 0x3b,
+};
+
+const struct testvec aes_cbc_192_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_192_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t aes_cbc_256_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x1a, 0xa4, 0xe3, 0x09, 0x23, 0x2e, 0x91, 0x1b,
+ 0xa8, 0x3e, 0xda, 0x92, 0xb3, 0x22, 0xd2, 0xe8,
+ 0x8b, 0xed, 0x6c, 0xa7, 0x78, 0xe6, 0x32, 0x25,
+ 0xc4, 0x88, 0xd5, 0xb7, 0x6e, 0xef, 0xbf, 0x37,
+ 0x00, 0xd9, 0xb2, 0x55, 0x10, 0x4f, 0x7d, 0x84,
+ 0x3a, 0xae, 0xd2, 0xc6, 0x48, 0xdd, 0x3c, 0xd5,
+ 0x9b, 0xa7, 0xf8, 0xc2, 0xda, 0x6d, 0x14, 0xa2,
+ 0xdc, 0x54, 0x12, 0x8f, 0x1c, 0x22, 0x98, 0x6a,
+ 0xc0, 0x5f, 0x47, 0xa7, 0x78, 0xec, 0x79, 0x5d,
+ 0x04, 0xed, 0x5e, 0x20, 0x33, 0x53, 0x66, 0x40,
+ 0x83, 0x94, 0x5b, 0x34, 0x05, 0x25, 0x2e, 0x17,
+ 0xba, 0x23, 0x60, 0xb1, 0xd0, 0x27, 0xf0, 0x24,
+ 0xd2, 0x0b, 0xd3, 0xea, 0xa7, 0x13, 0x1e, 0xf9,
+ 0x56, 0xe1, 0xd4, 0xa2, 0x89, 0x5a, 0xaa, 0x42,
+ 0xa9, 0xd7, 0x85, 0x64, 0x9e, 0x44, 0x71, 0xa2,
+ 0xf9, 0xc3, 0xf4, 0x81, 0xbd, 0xa0, 0x40, 0xed,
+ 0x33, 0xeb, 0x09, 0x0f, 0x7f, 0x78, 0xe4, 0xd5,
+ 0x7b, 0x61, 0x42, 0xee, 0x65, 0x25, 0xcc, 0xba,
+ 0xc6, 0x99, 0x29, 0x25, 0x71, 0x9a, 0xf0, 0x0e,
+ 0x98, 0x3f, 0x12, 0xf2, 0xf9, 0x4d, 0x00, 0x3c,
+ 0xbe, 0x9f, 0x2b, 0x83, 0x1e, 0x5b, 0xab, 0x80,
+ 0x4c, 0x81, 0x82, 0x29, 0xbb, 0xeb, 0xc0, 0x89,
+ 0x07, 0x43, 0xdd, 0x69, 0xd3, 0x02, 0x6c, 0x1c,
+ 0x4b, 0xab, 0x44, 0x42, 0x6c, 0x25, 0xfc, 0xf5,
+ 0x73, 0xaa, 0x60, 0x48, 0xbc, 0xd2, 0x1c, 0x77,
+ 0x8b, 0x64, 0x3e, 0x5f, 0x24, 0xae, 0x14, 0x65,
+ 0xea, 0x18, 0xb1, 0xab, 0xbc, 0x3d, 0xa3, 0xb9,
+ 0xfc, 0xcc, 0x0f, 0x8d, 0x8e, 0x13, 0x0f, 0x4d,
+ 0x4e, 0xeb, 0x90, 0x9b, 0x1e, 0xbf, 0x2a, 0xc7,
+ 0xac, 0x5b, 0x11, 0xeb, 0x67, 0xf2, 0x9d, 0xef,
+ 0xf3, 0x66, 0x9e, 0x81, 0x9f, 0x24, 0x4d, 0xcd,
+ 0x4f, 0x31, 0xce, 0xc9, 0xa4, 0x2c, 0xd7, 0x58,
+ 0x7c, 0x2e, 0x88, 0xa2, 0xec, 0x4c, 0x02, 0x29,
+ 0x00, 0xbd, 0x14, 0x0f, 0xaa, 0xd8, 0xc3, 0x02,
+ 0x64, 0xdc, 0xa0, 0x15, 0xc8, 0xf6, 0x17, 0x8b,
+ 0x9c, 0xb3, 0xf2, 0x27, 0xc1, 0x3f, 0x60, 0x94,
+ 0x33, 0x10, 0x89, 0x49, 0x5f, 0xd2, 0x0e, 0xfe,
+ 0x9e, 0x99, 0x68, 0x95, 0xe4, 0x12, 0xfc, 0xe3,
+ 0x7f, 0xc4, 0xb1, 0x88, 0x4f, 0x66, 0xcd, 0x24,
+ 0x89, 0x09, 0xbb, 0x01, 0xf6, 0x9a, 0xe4, 0x41,
+ 0xee, 0x83, 0xd2, 0x28, 0xf5, 0x28, 0x49, 0x13,
+ 0x78, 0xfb, 0xb2, 0x0d, 0x5c, 0x97, 0xf4, 0x9c,
+ 0xe0, 0xdf, 0xef, 0x84, 0x36, 0x7d, 0xe5, 0x45,
+ 0xe0, 0xf8, 0xce, 0x82, 0x39, 0xc4, 0x54, 0x69,
+ 0xf1, 0x62, 0x7d, 0x1a, 0xf6, 0x6c, 0x20, 0x86,
+ 0x72, 0x4b, 0xf9, 0x3d, 0x87, 0x68, 0xec, 0x74,
+ 0x67, 0xee, 0xbd, 0xb8, 0xc6, 0x12, 0x91, 0x0f,
+ 0xf6, 0xd9, 0x4f, 0x34, 0x96, 0xa9, 0xe7, 0x52,
+ 0x7b, 0xe0, 0x08, 0x57, 0x0a, 0x8b, 0x09, 0xcb,
+ 0xd3, 0x3e, 0x4e, 0x64, 0xca, 0x38, 0x50, 0x07,
+ 0x0e, 0x7b, 0x95, 0x69, 0x1b, 0x82, 0xba, 0x50,
+ 0x93, 0x4f, 0x9a, 0x8e, 0x11, 0x9b, 0x64, 0xf5,
+ 0x6a, 0xd4, 0x81, 0xf0, 0x1f, 0xb8, 0x85, 0x90,
+ 0x9c, 0x79, 0xde, 0xcb, 0x50, 0xba, 0xa9, 0x56,
+ 0x66, 0xd1, 0x1e, 0x78, 0xa8, 0x6a, 0xd5, 0xa5,
+ 0x83, 0x73, 0xe2, 0x88, 0xf2, 0x04, 0x33, 0x61,
+ 0xdf, 0x89, 0xd5, 0x3d, 0x03, 0x4e, 0x94, 0xb0,
+ 0x0f, 0x8d, 0x4d, 0xb4, 0x09, 0xb2, 0xf1, 0xb0,
+ 0xe7, 0xfe, 0xb0, 0x18, 0xe2, 0xfc, 0x92, 0xeb,
+ 0x2d, 0x7d, 0x56, 0x29, 0xbd, 0x34, 0x20, 0x7c,
+ 0xb6, 0xe7, 0x7b, 0xd7, 0x95, 0xa5, 0x0d, 0x10,
+ 0xbc, 0x7d, 0x9d, 0xd9, 0xbe, 0xc7, 0x23, 0x44,
+ 0x37, 0xb3, 0x98, 0x36, 0x33, 0x1a, 0x11, 0xfe,
+ 0x41, 0xea, 0x59, 0x48, 0x75, 0x34, 0xf6, 0xc4,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t aes_cbc_256_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x58, 0xfc, 0x1e, 0x48, 0x66, 0x7d, 0x91, 0xc7,
+ 0x56, 0xa3, 0x41, 0x89, 0xe8, 0x1e, 0x02, 0x77,
+ 0x93, 0x38, 0x12, 0x99, 0x06, 0x0d, 0xf3, 0x6d,
+ 0x2a, 0x5d, 0x3d, 0x7b, 0x4e, 0x05, 0x4f, 0x8f,
+ 0xe3, 0x86, 0x76, 0xfe, 0x11, 0x9d, 0xde, 0xd4,
+ 0x83, 0xd9, 0x47, 0x8d, 0x51, 0xdf, 0x4a, 0x24,
+ 0x2d, 0x11, 0xf0, 0xbd, 0xde, 0x17, 0x7e, 0x52,
+ 0x20, 0xc7, 0x17, 0x88, 0x2e, 0xa4, 0xd5, 0xa0,
+ 0x1e, 0xbc, 0x61, 0x15, 0x1e, 0x52, 0xa1, 0x8b,
+ 0xe9, 0xe4, 0x1f, 0x81, 0x49, 0x64, 0x17, 0xd4,
+ 0xef, 0xb6, 0x40, 0x05, 0x2f, 0x36, 0xf7, 0x39,
+ 0x03, 0x05, 0x80, 0xff, 0xf2, 0x1a, 0x15, 0xf1,
+ 0xfc, 0xaf, 0x71, 0x51, 0x73, 0xc5, 0x9e, 0x2f,
+ 0xd1, 0x7a, 0x2d, 0xd7, 0xed, 0x90, 0x11, 0xd2,
+ 0x80, 0x49, 0x46, 0x9f, 0x13, 0xa7, 0x32, 0x33,
+ 0x24, 0x39, 0x59, 0xf1, 0xed, 0x64, 0x75, 0x61,
+ 0xc3, 0x14, 0x68, 0x48, 0xf7, 0xc7, 0xbd, 0xe0,
+ 0x21, 0x59, 0x91, 0x07, 0x70, 0x83, 0x8f, 0xfc,
+ 0x59, 0x72, 0xca, 0xdd, 0x60, 0xa0, 0xbb, 0xb1,
+ 0x2f, 0xb8, 0x98, 0x8d, 0xf2, 0x4d, 0x3a, 0x19,
+ 0xbc, 0x6b, 0x37, 0xad, 0xd2, 0xb5, 0x7d, 0x1c,
+ 0x4a, 0x7b, 0x58, 0x76, 0x2e, 0xf5, 0x6b, 0xaf,
+ 0x4c, 0x92, 0x00, 0x8a, 0xb4, 0xa3, 0x86, 0x66,
+ 0x07, 0xc7, 0xfc, 0x57, 0x3c, 0x73, 0xf4, 0x8b,
+ 0xef, 0xb6, 0xae, 0x01, 0xfb, 0x88, 0x13, 0x04,
+ 0xa8, 0xc7, 0xec, 0xc4, 0xe0, 0x67, 0x3a, 0xfb,
+ 0x67, 0xce, 0x83, 0x9b, 0x8e, 0x66, 0xff, 0xa6,
+ 0x17, 0x1b, 0x66, 0x27, 0xdf, 0x2a, 0xfe, 0xf3,
+ 0x9a, 0xba, 0x59, 0xce, 0x28, 0xd4, 0xd2, 0x40,
+ 0x78, 0xb6, 0xe9, 0x7d, 0x8b, 0xcc, 0x47, 0x5c,
+ 0xf6, 0x5d, 0xc2, 0x5d, 0xe0, 0xa7, 0x61, 0x8b,
+ 0xe6, 0x7d, 0x38, 0xb6, 0xea, 0xfb, 0x13, 0x31,
+ 0x33, 0x2a, 0xb5, 0x45, 0x7b, 0xf6, 0x9f, 0x29,
+ 0x06, 0x2d, 0xd8, 0xab, 0x36, 0x27, 0xe4, 0x6c,
+ 0xf1, 0xab, 0xcd, 0xb9, 0x08, 0x0f, 0x4b, 0x8f,
+ 0x22, 0xea, 0xe4, 0x5d, 0x22, 0x05, 0x2e, 0xd4,
+ 0xd7, 0xff, 0x58, 0x50, 0x38, 0x17, 0x6f, 0x80,
+ 0x61, 0x98, 0xdc, 0xd4, 0x9f, 0x8f, 0xeb, 0x13,
+ 0xd3, 0x86, 0xe9, 0xa9, 0xe7, 0x07, 0x6f, 0x4f,
+ 0x54, 0x9e, 0x37, 0x3d, 0xbc, 0x82, 0x5f, 0x4f,
+ 0xd5, 0x0c, 0x21, 0xaa, 0x91, 0xcb, 0x06, 0x9a,
+ 0xaf, 0x57, 0x14, 0xfb, 0x57, 0xd8, 0x63, 0x58,
+ 0x0a, 0x03, 0x12, 0x0e, 0xd3, 0x37, 0x0b, 0xbf,
+ 0x67, 0xb7, 0x9d, 0xb7, 0x6b, 0x38, 0xeb, 0x17,
+ 0xd8, 0xb9, 0x5a, 0x37, 0x9f, 0x98, 0xa6, 0xca,
+ 0x7e, 0x95, 0xa7, 0x27, 0xc4, 0xd3, 0x15, 0x00,
+ 0x7b, 0x5e, 0x05, 0xc0, 0xc1, 0xb0, 0xe0, 0x13,
+ 0x7d, 0x91, 0xed, 0x2b, 0x99, 0x74, 0x1c, 0x16,
+ 0x45, 0x55, 0x21, 0xbc, 0x7c, 0x52, 0x87, 0x0f,
+ 0xb9, 0xbf, 0x71, 0x7c, 0x3a, 0x81, 0x72, 0x97,
+ 0xf8, 0x86, 0x61, 0x20, 0x17, 0xd8, 0xc8, 0xe0,
+ 0xfc, 0x42, 0x0f, 0x5b, 0xd6, 0x7e, 0x99, 0x81,
+ 0x5c, 0x2e, 0x2e, 0x3e, 0xe8, 0xce, 0x12, 0xcf,
+ 0x2c, 0xe6, 0x7a, 0x00, 0x5d, 0x36, 0x00, 0x92,
+ 0x60, 0xc5, 0xc0, 0xfd, 0xe0, 0xa3, 0xb9, 0x3e,
+ 0x92, 0xf8, 0x8f, 0xe2, 0x0f, 0xe5, 0xb4, 0x6a,
+ 0xd6, 0x5b, 0xa4, 0x5d, 0xf9, 0xef, 0x7e, 0xae,
+ 0xdd, 0xd0, 0x5d, 0x40, 0xfe, 0xa7, 0xed, 0xda,
+ 0xa9, 0x48, 0x1d, 0x6f, 0xc2, 0xd3, 0x35, 0x65,
+ 0xd8, 0x67, 0xc2, 0x9d, 0xed, 0xf7, 0x9f, 0x7b,
+ 0x7c, 0xd4, 0x03, 0xe0, 0xa6, 0xf9, 0x3c, 0xd0,
+ 0x21, 0x98, 0x60, 0xa6, 0x59, 0x86, 0xbd, 0x40,
+ 0x17, 0x47, 0x82, 0xb9, 0xe1, 0x11, 0x8d, 0x4b,
+ 0xcd, 0x1f, 0x54, 0x96, 0x17, 0x42, 0x22, 0x44,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t aes_cbc_256_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x1d, 0x65, 0xb2, 0x4e, 0xfa, 0x3f, 0xdb, 0xab,
+ 0x34, 0x9d, 0x37, 0x03, 0x17, 0x44, 0xed, 0x5b,
+ 0xf7, 0x1b, 0x6b, 0xc0, 0x5c, 0xfe, 0x5b, 0xcd,
+ 0xf0, 0xaf, 0x26, 0x82, 0x97, 0x12, 0xb8, 0x4f,
+ 0x76, 0x3d, 0x07, 0xd8, 0x29, 0x56, 0x3c, 0xbd,
+ 0x0e, 0xac, 0xd1, 0x8f, 0x53, 0x1a, 0x8f, 0xcd,
+ 0x04, 0x5b, 0x49, 0xe0, 0xf0, 0xea, 0xc9, 0x8a,
+ 0x08, 0x3d, 0x1f, 0x2d, 0x8c, 0xec, 0xb8, 0xea,
+ 0xe9, 0x24, 0xd1, 0x93, 0xd7, 0x9a, 0x0f, 0xd7,
+ 0x0f, 0x6b, 0xa0, 0x08, 0x58, 0x81, 0x68, 0x2f,
+ 0xde, 0x36, 0xb5, 0x87, 0xd9, 0xcd, 0x82, 0x13,
+ 0x36, 0x16, 0x6a, 0x9a, 0x02, 0xca, 0xda, 0x6f,
+ 0x51, 0x87, 0x75, 0x47, 0x89, 0xa4, 0x10, 0x60,
+ 0xfb, 0x1a, 0x74, 0x55, 0x6d, 0x18, 0x8d, 0x42,
+ 0x74, 0x2d, 0x12, 0x56, 0xc0, 0xcd, 0xa2, 0x57,
+ 0x53, 0x31, 0x8c, 0x7a, 0x8b, 0xa8, 0x6d, 0x89,
+ 0x81, 0xaf, 0x9c, 0xd9, 0x56, 0xe6, 0xdc, 0xe7,
+ 0x84, 0x0f, 0x81, 0x56, 0x1a, 0xc8, 0x5d, 0xa3,
+ 0xe0, 0x93, 0xea, 0x62, 0x7d, 0xa4, 0x5a, 0x58,
+ 0x8f, 0x05, 0x85, 0x34, 0x0c, 0x74, 0x8e, 0xe7,
+ 0xb4, 0x47, 0x93, 0x61, 0xbf, 0x61, 0x0a, 0xa2,
+ 0x37, 0xcd, 0x82, 0x9d, 0x55, 0x9e, 0x32, 0x9e,
+ 0x30, 0xce, 0x61, 0x89, 0xed, 0x25, 0x9e, 0x7c,
+ 0x2a, 0xcd, 0x39, 0x45, 0x56, 0xbb, 0x1a, 0xe8,
+ 0xb0, 0x75, 0x8f, 0xa1, 0x59, 0x09, 0xf8, 0x7a,
+ 0xbd, 0x4f, 0x69, 0x8b, 0xe2, 0xf3, 0xbe, 0x9b,
+ 0xea, 0x5f, 0x2c, 0x1e, 0x84, 0x69, 0xb2, 0xfa,
+ 0xaf, 0x1d, 0xc8, 0xcf, 0x76, 0x91, 0xd0, 0x7a,
+ 0xc9, 0xd1, 0x3d, 0xa5, 0xae, 0xae, 0xd7, 0x23,
+ 0xbb, 0xb3, 0x5e, 0x8a, 0x10, 0xc6, 0xbe, 0xa6,
+ 0x79, 0x69, 0x40, 0x83, 0x81, 0xe6, 0xb1, 0xa3,
+ 0x7e, 0x57, 0x44, 0x66, 0xc9, 0x2e, 0x84, 0xdd,
+ 0x00, 0xb4, 0x93, 0xae, 0x8f, 0x23, 0x12, 0xd6,
+ 0x54, 0x56, 0xc3, 0x51, 0xe5, 0xf7, 0x69, 0x47,
+ 0x00, 0x97, 0x71, 0x29, 0xcb, 0xcf, 0xeb, 0xd9,
+ 0xaf, 0xc0, 0x2f, 0x5c, 0xd7, 0x3e, 0xe4, 0x07,
+ 0xc9, 0x65, 0x2e, 0x8c, 0xf4, 0x54, 0xce, 0x8b,
+ 0xc7, 0x0c, 0xb4, 0x74, 0x56, 0x79, 0xa6, 0x40,
+ 0x4a, 0x58, 0xfd, 0x3f, 0x7b, 0x4c, 0xe9, 0xdb,
+ 0x33, 0x85, 0x6f, 0xf7, 0x5a, 0x9f, 0x6f, 0xc4,
+ 0x60, 0xad, 0x1b, 0xe2, 0xf5, 0xeb, 0x42, 0x7d,
+ 0xa4, 0x43, 0x8d, 0x40, 0xfa, 0x53, 0xcc, 0xf0,
+ 0x5f, 0x90, 0x0d, 0x04, 0x51, 0xb1, 0x48, 0xc7,
+ 0x90, 0x65, 0xb2, 0xef, 0xca, 0xc5, 0x9a, 0xec,
+ 0xde, 0x84, 0x21, 0x22, 0xeb, 0x97, 0xdd, 0xa2,
+ 0x9d, 0x71, 0xb1, 0xe0, 0x86, 0x58, 0xc3, 0x57,
+ 0xd5, 0x5a, 0x6f, 0xdc, 0xe5, 0xcc, 0x64, 0xc7,
+ 0x80, 0x2a, 0xef, 0x90, 0x91, 0x96, 0xb4, 0xeb,
+ 0xda, 0x3b, 0x7b, 0xbc, 0x14, 0x60, 0x52, 0xe5,
+ 0xe5, 0xc8, 0x6a, 0x99, 0x46, 0x9d, 0x00, 0x77,
+ 0x3b, 0x60, 0x75, 0x04, 0x06, 0x4a, 0x5a, 0x64,
+ 0x6f, 0x2f, 0x58, 0x77, 0x27, 0x9a, 0xc5, 0x90,
+ 0x37, 0xa7, 0xf3, 0x89, 0x72, 0x47, 0x4e, 0x08,
+ 0xa5, 0x79, 0x11, 0x2f, 0x22, 0x5a, 0xbb, 0xcf,
+ 0x76, 0xb9, 0x28, 0xc8, 0xc4, 0x5a, 0xe5, 0x90,
+ 0xf7, 0x02, 0xe4, 0xf9, 0x0c, 0x4c, 0x9a, 0xb1,
+ 0xa7, 0x99, 0x34, 0xd4, 0x77, 0x66, 0xff, 0x3c,
+ 0x50, 0x9a, 0xff, 0x13, 0x49, 0xd6, 0x5a, 0xf6,
+ 0x17, 0x6f, 0xca, 0x1a, 0xef, 0x0a, 0x2d, 0xf1,
+ 0xdf, 0xd0, 0xa5, 0x6f, 0xa6, 0x22, 0x3c, 0x1f,
+ 0xcf, 0xe7, 0xec, 0x23, 0x39, 0x6e, 0xc0, 0x37,
+ 0x31, 0x84, 0xff, 0xe2, 0x5a, 0xd6, 0x88, 0x74,
+ 0x15, 0x15, 0x46, 0x21, 0x00, 0xe4, 0x13, 0x9a,
+ 0xfa, 0xb2, 0x49, 0x7e, 0x79, 0xfb, 0x8a, 0x2a,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t aes_cbc_256_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xc1, 0x4a, 0x3c, 0x90, 0xba, 0xd4, 0x9c, 0xe7,
+ 0xf2, 0x5b, 0x3a, 0xc4, 0xce, 0x4a, 0x26, 0x4a,
+ 0x9c, 0x3f, 0xe5, 0x7a, 0x15, 0xbb, 0xbd, 0x3e,
+ 0xc6, 0x49, 0x47, 0x04, 0x4e, 0x8b, 0x73, 0xa6,
+ 0x02, 0x3a, 0xc1, 0xa3, 0xfa, 0x1a, 0xd0, 0x03,
+ 0xf7, 0x26, 0x9f, 0xad, 0x06, 0x8f, 0x86, 0xdc,
+ 0xb8, 0x73, 0x87, 0xa2, 0x82, 0xc6, 0x80, 0xe1,
+ 0xac, 0x3d, 0x16, 0x4c, 0xc3, 0x7c, 0x86, 0x01,
+ 0xa5, 0x7a, 0x1c, 0x4b, 0x56, 0x68, 0xf6, 0x06,
+ 0x99, 0x32, 0x42, 0x40, 0xf1, 0xb7, 0x44, 0x4b,
+ 0xd1, 0xdb, 0xad, 0x4e, 0xa6, 0xc2, 0x5f, 0xee,
+ 0x21, 0x1d, 0x58, 0xc6, 0xd5, 0x02, 0xef, 0xb2,
+ 0x38, 0xef, 0x29, 0x25, 0xfd, 0x28, 0x8a, 0x5b,
+ 0x8b, 0x36, 0x1a, 0xd6, 0x68, 0xf8, 0x77, 0xed,
+ 0xba, 0xb3, 0xa5, 0x6f, 0x76, 0x5e, 0xb5, 0xd4,
+ 0xc3, 0xb8, 0xf9, 0x67, 0x7a, 0x18, 0x43, 0xb6,
+ 0x65, 0x07, 0x48, 0x1d, 0x56, 0x20, 0x11, 0xe1,
+ 0x62, 0x6b, 0x70, 0xc9, 0x18, 0xa9, 0xa7, 0x36,
+ 0xbf, 0x31, 0x74, 0xe3, 0x33, 0x02, 0x96, 0x7a,
+ 0xf5, 0xd9, 0x8d, 0x05, 0x2b, 0xfd, 0x85, 0x4f,
+ 0x03, 0x0f, 0xe1, 0xfb, 0x1a, 0x57, 0xaf, 0xdc,
+ 0xff, 0xff, 0x5a, 0x96, 0x27, 0xca, 0xf3, 0x0c,
+ 0xd8, 0x39, 0x3e, 0xbe, 0x41, 0x5a, 0x21, 0x95,
+ 0x66, 0xe0, 0x69, 0x14, 0x2b, 0x18, 0xf2, 0x9b,
+ 0xf4, 0x22, 0xdf, 0xa9, 0xe4, 0x7d, 0x32, 0x5d,
+ 0x98, 0xa0, 0xe0, 0xe1, 0xe1, 0xbe, 0xae, 0x58,
+ 0x63, 0xbe, 0x4b, 0x97, 0x83, 0xaa, 0x67, 0xd3,
+ 0x1a, 0x70, 0xca, 0x82, 0x98, 0x77, 0x74, 0x1a,
+ 0xf2, 0x3d, 0x6a, 0x7b, 0x8e, 0xc8, 0xca, 0x34,
+ 0x44, 0xb8, 0xc0, 0xd0, 0x77, 0x8c, 0x4a, 0x5c,
+ 0xae, 0xd3, 0x17, 0x7c, 0x12, 0x47, 0x3e, 0xe2,
+ 0x2e, 0x51, 0xe0, 0x52, 0x88, 0x8e, 0xe9, 0x68,
+ 0xb6, 0x13, 0xf8, 0x69, 0xc9, 0x4b, 0xdd, 0x91,
+ 0x27, 0xb0, 0x22, 0x0c, 0x7d, 0xad, 0xb0, 0x75,
+ 0xe8, 0x76, 0x34, 0xc2, 0xd9, 0xf3, 0x20, 0xf7,
+ 0x1d, 0x0f, 0x07, 0x61, 0xc2, 0xb8, 0x7d, 0x00,
+ 0xa6, 0x68, 0xad, 0xd4, 0x0b, 0xa4, 0xa0, 0x32,
+ 0x6d, 0xa5, 0xc0, 0x07, 0x65, 0xae, 0xda, 0x2e,
+ 0xd6, 0xb7, 0xd3, 0x99, 0x8b, 0x37, 0x08, 0x13,
+ 0x6a, 0x94, 0xe9, 0xe4, 0xea, 0x34, 0xee, 0x07,
+ 0xee, 0x77, 0xb1, 0x3f, 0x54, 0x05, 0xbe, 0x66,
+ 0x7f, 0xf2, 0x70, 0x34, 0x45, 0xa7, 0x4b, 0x27,
+ 0xef, 0xe6, 0x39, 0x2e, 0x13, 0x41, 0xdb, 0x2d,
+ 0x1f, 0x76, 0x11, 0x76, 0x33, 0xf3, 0x92, 0x33,
+ 0x69, 0x16, 0x34, 0x86, 0x23, 0xc5, 0xfa, 0xaf,
+ 0xff, 0xbf, 0xee, 0x84, 0x56, 0xf6, 0x1e, 0x54,
+ 0x37, 0x32, 0x79, 0x83, 0x45, 0x04, 0x6f, 0x0e,
+ 0x75, 0x75, 0xd9, 0xd6, 0x4a, 0x87, 0xfb, 0x3c,
+ 0xb1, 0xcf, 0x66, 0xab, 0xa4, 0xaa, 0xf6, 0x96,
+ 0xb0, 0xcd, 0xaf, 0xac, 0x2c, 0x6d, 0x72, 0xca,
+ 0x43, 0xef, 0xb7, 0xa0, 0x4c, 0x62, 0xba, 0x7e,
+ 0x59, 0x0b, 0xff, 0x90, 0x49, 0x63, 0xf6, 0x31,
+ 0x8b, 0x50, 0x20, 0x82, 0x7d, 0xf0, 0x2d, 0xe4,
+ 0x5b, 0xda, 0xdf, 0xb0, 0xfb, 0x07, 0x7b, 0xe3,
+ 0x5f, 0xac, 0xd8, 0xe5, 0xa0, 0x3e, 0xc5, 0x60,
+ 0x94, 0xbc, 0xf7, 0x7e, 0xdc, 0x18, 0x27, 0x20,
+ 0xb1, 0xdd, 0x51, 0x4a, 0xb2, 0xe0, 0xc0, 0xe7,
+ 0x5d, 0x0f, 0x88, 0xb2, 0xa0, 0x42, 0x73, 0xfb,
+ 0xc4, 0x24, 0xa7, 0x17, 0x8a, 0xc9, 0x6d, 0x34,
+ 0xe8, 0x7b, 0x51, 0x37, 0x32, 0x3f, 0xf8, 0x7e,
+ 0x92, 0xe4, 0x87, 0xd2, 0x89, 0x66, 0xb0, 0xf6,
+ 0xc2, 0xba, 0x2f, 0x42, 0x8f, 0x1d, 0x5d, 0x81,
+ 0xad, 0xfd, 0x00, 0xbc, 0xa9, 0x11, 0x96, 0xae,
+ 0x80, 0xf1, 0x27, 0xe0, 0xeb, 0x5b, 0x60, 0x39,
+};
+
+const struct testvec aes_cbc_256_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t aes_cbc_256_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0xe5, 0x55, 0xd9, 0xae, 0xc0, 0x66, 0x2d, 0x2f,
+ 0x11, 0xb1, 0x27, 0xd2, 0xb2, 0x73, 0xe4, 0x0a,
+ 0x85, 0xb5, 0x3c, 0x79, 0x78, 0xd6, 0x35, 0x3d,
+ 0x46, 0xac, 0xa3, 0x81, 0x55, 0x76, 0x86, 0xfc,
+ 0x37, 0xa0, 0x95, 0xc2, 0x30, 0xc9, 0x19, 0xc2,
+ 0x5f, 0xb0, 0x13, 0xa2, 0xa8, 0xe1, 0xc7, 0xb7,
+ 0x61, 0x54, 0xd8, 0xe6, 0xca, 0x94, 0x6f, 0x47,
+ 0x87, 0x33, 0x58, 0xd9, 0xd5, 0xd2, 0x95, 0x73,
+ 0x87, 0x9a, 0x31, 0xe5, 0x2e, 0x95, 0x83, 0x7d,
+ 0xdc, 0x0f, 0xc5, 0x2f, 0x14, 0xbc, 0x80, 0xac,
+ 0x47, 0xd6, 0xd8, 0x17, 0x9e, 0xf7, 0xff, 0x5b,
+ 0x85, 0x05, 0x91, 0xe0, 0x73, 0xd2, 0x5c, 0xa7,
+ 0x41, 0xf8, 0xcb, 0x3d, 0x38, 0x14, 0x28, 0x3e,
+ 0x89, 0x6f, 0xd4, 0xac, 0xb6, 0x11, 0x35, 0x67,
+ 0x7b, 0xef, 0x0d, 0xd8, 0x4d, 0xdd, 0x7e, 0x73,
+ 0xcd, 0x58, 0x0f, 0x5a, 0xcf, 0x42, 0xc5, 0x2f,
+ 0x61, 0x62, 0x13, 0xde, 0xcd, 0x2e, 0x22, 0xab,
+ 0xb0, 0x47, 0x5c, 0x1e, 0x5c, 0xc5, 0x49, 0xc6,
+ 0x3b, 0x0c, 0xe3, 0xb3, 0x59, 0xbf, 0xbf, 0x85,
+ 0xf6, 0x0a, 0x3d, 0x14, 0x74, 0x2a, 0xcd, 0xea,
+ 0x67, 0xd6, 0x80, 0x42, 0x3c, 0x6a, 0x92, 0x50,
+ 0x95, 0x73, 0xb5, 0x7a, 0xb2, 0xbc, 0x76, 0xe5,
+ 0x8f, 0xf3, 0x85, 0x5e, 0xcd, 0xf9, 0xb4, 0x9d,
+ 0xa8, 0x0a, 0xda, 0x95, 0x11, 0x2e, 0x22, 0x0c,
+ 0x2f, 0xb0, 0xbf, 0x92, 0x6b, 0x45, 0xec, 0x20,
+ 0xd2, 0x2b, 0x98, 0x3f, 0x4f, 0x97, 0xf2, 0xed,
+ 0xf7, 0x9b, 0x89, 0x4e, 0xd6, 0x59, 0xbb, 0x24,
+ 0x22, 0x44, 0x9f, 0x03, 0xb5, 0x42, 0xc8, 0x97,
+ 0xc7, 0xdb, 0x21, 0xfc, 0xcf, 0x33, 0xa1, 0xf1,
+ 0xc0, 0x1f, 0x28, 0x77, 0xee, 0xa5, 0x6a, 0x12,
+ 0xef, 0x8b, 0x48, 0xd1, 0xb3, 0xac, 0x65, 0x69,
+ 0x46, 0x04, 0x39, 0xb1, 0x9e, 0xfa, 0xab, 0x21,
+ 0x51, 0xa4, 0x33, 0xe9, 0x58, 0x5d, 0xf1, 0xc6,
+ 0x69, 0x44, 0x8c, 0x17, 0xf9, 0xaa, 0x96, 0xcb,
+ 0x40, 0xb4, 0x5c, 0x83, 0x76, 0x1e, 0x8a, 0x2b,
+ 0x5f, 0x6b, 0xc1, 0x73, 0xd4, 0x5f, 0x48, 0xa3,
+ 0x0e, 0x07, 0x69, 0x12, 0xc1, 0xbd, 0x13, 0xad,
+ 0xe2, 0xcf, 0x3d, 0x96, 0xd8, 0xaf, 0xed, 0xdc,
+ 0x4c, 0x72, 0xf6, 0xce, 0x15, 0x86, 0x88, 0x8c,
+ 0xbb, 0x60, 0xb3, 0xb9, 0xde, 0x42, 0x58, 0x6e,
+ 0xc4, 0x58, 0xac, 0x77, 0x8d, 0x35, 0x23, 0x5f,
+ 0xc3, 0xf9, 0x33, 0x46, 0x17, 0x80, 0x31, 0xfd,
+ 0xcd, 0x0a, 0x1e, 0x9b, 0xac, 0x42, 0xda, 0x70,
+ 0x54, 0x9a, 0xeb, 0x22, 0x27, 0x09, 0x0c, 0x6c,
+ 0x18, 0x1d, 0x1a, 0x5b, 0x86, 0x4d, 0x80, 0xca,
+ 0x4d, 0xda, 0x0e, 0x9a, 0x8e, 0x61, 0x04, 0x68,
+ 0x29, 0x08, 0x3b, 0xae, 0x14, 0x7d, 0x8e, 0x43,
+ 0x7a, 0xa7, 0x83, 0xcf, 0xb3, 0x95, 0xd3, 0x42,
+ 0x2d, 0x6b, 0xd8, 0x5c, 0x43, 0x31, 0x5b, 0x9c,
+ 0x18, 0x30, 0x0d, 0x61, 0x9c, 0xab, 0x29, 0x55,
+ 0xdd, 0x84, 0x24, 0x21, 0xec, 0x44, 0xad, 0xf3,
+ 0xb3, 0x70, 0x77, 0x2b, 0xfc, 0x3f, 0x99, 0xb8,
+ 0x50, 0x26, 0x8d, 0x96, 0xa2, 0x22, 0x99, 0x33,
+ 0x53, 0xa8, 0x5d, 0x84, 0x9b, 0x76, 0x26, 0x6e,
+ 0x75, 0x14, 0x7e, 0x63, 0xc6, 0x7a, 0x4f, 0x5c,
+ 0xfe, 0x4b, 0x80, 0xee, 0xb3, 0x32, 0x8d, 0x25,
+ 0x1c, 0x80, 0x7b, 0x3d, 0xd3, 0x84, 0x01, 0x1e,
+ 0x16, 0xa4, 0xca, 0x0d, 0x38, 0x40, 0x03, 0x6f,
+ 0x81, 0x8b, 0x5c, 0xad, 0x22, 0xfa, 0x6f, 0xeb,
+ 0x60, 0xa1, 0xcb, 0x2d, 0x97, 0xf8, 0xa6, 0x5e,
+ 0xbe, 0x93, 0xb7, 0xe6, 0x66, 0xbf, 0x9b, 0xd2,
+ 0x5c, 0x31, 0xcc, 0x70, 0x0c, 0xf1, 0xfb, 0x9f,
+ 0x09, 0x1b, 0xc2, 0x85, 0x2f, 0x22, 0x7c, 0x95,
+ 0x58, 0x09, 0xce, 0x9c, 0x7c, 0x50, 0xca, 0x89,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t aes_cbc_256_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x37, 0x4d, 0x25, 0xdb, 0x35, 0xe0, 0x8b, 0x82,
+ 0x5f, 0x77, 0xd2, 0x53, 0xd1, 0x1f, 0xf0, 0x91,
+ 0x5b, 0xd8, 0x93, 0x2f, 0xb2, 0x81, 0xbd, 0x75,
+ 0xf0, 0xd8, 0xff, 0x46, 0x8c, 0x9d, 0xf6, 0xe2,
+ 0x99, 0x1e, 0x76, 0x9d, 0x00, 0x3a, 0xe3, 0xcf,
+ 0x6d, 0x24, 0xa8, 0xe8, 0xb4, 0xa7, 0xa0, 0x87,
+ 0xa8, 0x43, 0x01, 0x21, 0x29, 0x70, 0x39, 0x2d,
+ 0x0b, 0x2a, 0xe9, 0x11, 0x57, 0x86, 0x13, 0xd4,
+ 0x1c, 0x1b, 0x59, 0x19, 0xc4, 0x7d, 0x2c, 0x94,
+ 0xc7, 0x01, 0xb8, 0x96, 0x01, 0xd2, 0x01, 0x17,
+ 0x97, 0x41, 0x68, 0xab, 0xba, 0x9c, 0xc8, 0xad,
+ 0x4e, 0xd7, 0xa8, 0x4c, 0x96, 0x3f, 0xf9, 0xfc,
+ 0x7e, 0xd7, 0x59, 0xe8, 0x25, 0x51, 0x4d, 0x1d,
+ 0x99, 0xfd, 0x0b, 0xe9, 0x88, 0x23, 0xd1, 0x4b,
+ 0x30, 0x6e, 0x18, 0x7c, 0xe3, 0x7a, 0x54, 0x2a,
+ 0x4f, 0x2a, 0x99, 0x8f, 0xaf, 0xd7, 0x5e, 0x25,
+ 0xfe, 0x9c, 0x47, 0x09, 0x63, 0x38, 0x0d, 0x5f,
+ 0xb3, 0x43, 0xa6, 0x66, 0x9b, 0xc5, 0x3d, 0x88,
+ 0x5e, 0xc7, 0x60, 0x99, 0x8e, 0xcb, 0x6a, 0x65,
+ 0x60, 0x92, 0x88, 0xe1, 0x2b, 0xfe, 0x83, 0x34,
+ 0x92, 0xa6, 0x6c, 0x22, 0x56, 0x5b, 0x75, 0x8a,
+ 0x93, 0xc3, 0x72, 0xca, 0xff, 0x59, 0x3b, 0xd8,
+ 0xa0, 0x80, 0x56, 0x98, 0x62, 0x8a, 0x70, 0xf2,
+ 0x5d, 0xd9, 0x40, 0x6b, 0xbf, 0x9f, 0x71, 0x8d,
+ 0x2e, 0x38, 0xe8, 0x06, 0x42, 0xa9, 0x95, 0x70,
+ 0x31, 0xd1, 0xe9, 0x6c, 0xab, 0xbb, 0xed, 0x25,
+ 0xe8, 0xca, 0xe8, 0xa4, 0x98, 0x82, 0xf5, 0xe3,
+ 0x11, 0x3c, 0xc4, 0xea, 0xea, 0x88, 0x56, 0x91,
+ 0xd6, 0x5d, 0xaa, 0xf7, 0xe9, 0x49, 0x2f, 0x42,
+ 0x5b, 0x76, 0xef, 0xed, 0x03, 0x9e, 0x5f, 0x4d,
+ 0x65, 0x25, 0xa5, 0xe8, 0x26, 0xba, 0x03, 0x4f,
+ 0x0e, 0x39, 0xd2, 0x53, 0x62, 0x98, 0x81, 0x9d,
+ 0x8e, 0xad, 0x50, 0x17, 0x9f, 0xcc, 0x34, 0x45,
+ 0x19, 0x5c, 0x1c, 0xd1, 0xbc, 0x71, 0x89, 0xaa,
+ 0x9a, 0x65, 0x55, 0x6f, 0x78, 0xd4, 0xd3, 0x5b,
+ 0x27, 0x8d, 0x94, 0x46, 0xd9, 0x95, 0xb3, 0x5f,
+ 0xc4, 0x35, 0x8d, 0xba, 0x1c, 0x40, 0x52, 0xd1,
+ 0x99, 0x27, 0x5d, 0x42, 0x28, 0xef, 0xcb, 0x9b,
+ 0x10, 0x7a, 0x19, 0xbf, 0x72, 0xa3, 0x4a, 0xb9,
+ 0x56, 0x83, 0x39, 0xa6, 0xb2, 0xcd, 0x48, 0x85,
+ 0xf9, 0xcc, 0x72, 0x88, 0xb3, 0x5a, 0x9b, 0x45,
+ 0xb2, 0xd3, 0x66, 0x2d, 0x24, 0x51, 0x68, 0x91,
+ 0x9d, 0x47, 0x6a, 0xb3, 0x9a, 0x60, 0xb3, 0xcd,
+ 0x6b, 0x43, 0x96, 0x21, 0xa0, 0x65, 0x43, 0xde,
+ 0x4f, 0x6e, 0xb5, 0x81, 0x50, 0x7e, 0xca, 0x4b,
+ 0xdb, 0x30, 0xf2, 0xcb, 0x28, 0x3b, 0x19, 0x6a,
+ 0x0a, 0xfa, 0x05, 0x5e, 0x61, 0xde, 0x76, 0x7e,
+ 0xdf, 0xd9, 0xa9, 0x1b, 0xd0, 0x8a, 0xb5, 0x04,
+ 0x51, 0xf5, 0x66, 0xa2, 0x32, 0x21, 0xb2, 0xa9,
+ 0x40, 0x78, 0x60, 0x9d, 0xdc, 0x45, 0xbe, 0xb4,
+ 0x3a, 0xba, 0xd1, 0xec, 0x31, 0x53, 0x24, 0x22,
+ 0x70, 0x99, 0xda, 0xc8, 0x17, 0x04, 0x87, 0x2c,
+ 0x89, 0x86, 0x24, 0xec, 0x52, 0x12, 0x6a, 0x51,
+ 0x1e, 0x2a, 0x5e, 0x96, 0xfb, 0xac, 0x95, 0x4a,
+ 0x1a, 0x06, 0x8f, 0xdf, 0xa7, 0x26, 0xeb, 0x6c,
+ 0x79, 0x4a, 0x77, 0xea, 0xb3, 0xb1, 0x3a, 0x19,
+ 0xe6, 0x5e, 0xe2, 0x26, 0x1b, 0x85, 0x3c, 0x9b,
+ 0x1d, 0x05, 0x1d, 0xbe, 0x5c, 0x25, 0x7f, 0x45,
+ 0x4c, 0x09, 0x4c, 0xc1, 0x47, 0xa5, 0x44, 0xfc,
+ 0x04, 0x2b, 0xad, 0x53, 0xac, 0x57, 0x22, 0x54,
+ 0x13, 0x7c, 0xc9, 0x96, 0x44, 0xda, 0x74, 0x95,
+ 0x6e, 0x8c, 0xe6, 0x6a, 0x05, 0x05, 0xf3, 0x8c,
+ 0x81, 0xaf, 0xbc, 0xb1, 0x91, 0xe7, 0xfd, 0x81,
+ 0x3f, 0x47, 0xc2, 0x6f, 0x0d, 0x62, 0xf6, 0x6e,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t aes_cbc_256_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x5a, 0x24, 0xfd, 0xee, 0x9a, 0x44, 0xfb, 0xac,
+ 0x3e, 0x46, 0x53, 0x95, 0x9e, 0xeb, 0x1f, 0xd9,
+ 0xfd, 0xc6, 0x4f, 0xae, 0x0b, 0xc8, 0xf2, 0xbd,
+ 0x77, 0x16, 0x7a, 0x2e, 0x8e, 0xec, 0x7a, 0x53,
+ 0xf4, 0xe0, 0x34, 0xba, 0x6e, 0xfa, 0xc4, 0x69,
+ 0xd7, 0x50, 0x13, 0x03, 0xfb, 0xb9, 0x66, 0x96,
+ 0xd4, 0x21, 0x67, 0xcc, 0x4c, 0x4d, 0x10, 0x2f,
+ 0x17, 0xeb, 0x41, 0xf4, 0x65, 0x80, 0x0b, 0x57,
+ 0x2d, 0xdf, 0xcf, 0x9f, 0xb9, 0xd8, 0x53, 0x36,
+ 0xbc, 0x1d, 0x9a, 0xe3, 0x17, 0xe7, 0x08, 0x23,
+ 0xb3, 0x60, 0xfe, 0xdf, 0x24, 0x06, 0xc5, 0x86,
+ 0x74, 0x89, 0xa3, 0xb2, 0xfc, 0x4a, 0x57, 0xf5,
+ 0xa6, 0x96, 0xfb, 0x56, 0xf0, 0xf4, 0xdc, 0xdc,
+ 0xb8, 0x53, 0x5f, 0xb2, 0xb0, 0x8d, 0x2d, 0x90,
+ 0x3d, 0x78, 0x4d, 0x42, 0x3a, 0x74, 0xa4, 0x8e,
+ 0x41, 0x7c, 0x2a, 0xff, 0xe4, 0x57, 0x1c, 0x9d,
+ 0x94, 0xc5, 0x5d, 0xd8, 0x8b, 0x88, 0x48, 0x15,
+ 0x16, 0x8a, 0xf3, 0x07, 0x3a, 0xee, 0x65, 0x24,
+ 0xbc, 0x7f, 0x58, 0xad, 0xed, 0xf2, 0xbd, 0x18,
+ 0x88, 0x1a, 0x80, 0x6e, 0xb7, 0x93, 0xe0, 0x45,
+ 0x04, 0xb0, 0xfc, 0xf9, 0x48, 0x76, 0xaf, 0xec,
+ 0x08, 0xca, 0x99, 0x64, 0x85, 0x98, 0x2c, 0xd8,
+ 0x85, 0x72, 0x32, 0xbe, 0x92, 0x18, 0xdd, 0xab,
+ 0x20, 0x8f, 0x8e, 0x11, 0xc6, 0x08, 0xf9, 0x8b,
+ 0xaf, 0x5f, 0xa9, 0xe5, 0x11, 0xc7, 0x45, 0x91,
+ 0x6e, 0x47, 0xaa, 0x0f, 0x4c, 0xf4, 0xc1, 0xb0,
+ 0x75, 0x4c, 0xba, 0x1d, 0xb3, 0x33, 0xf7, 0x47,
+ 0xbe, 0x94, 0x0b, 0x2e, 0xfa, 0x38, 0x5e, 0x5f,
+ 0x0a, 0xc2, 0x0c, 0x4e, 0x72, 0x29, 0x16, 0xc1,
+ 0x82, 0x70, 0xd4, 0xd3, 0x1b, 0x25, 0xbe, 0x0d,
+ 0x6b, 0x0a, 0x13, 0x9f, 0x4d, 0x3d, 0x7b, 0x10,
+ 0x9f, 0x93, 0x43, 0x50, 0xd1, 0x17, 0x08, 0x77,
+ 0x23, 0x58, 0x35, 0x41, 0x23, 0xf6, 0x9c, 0x6f,
+ 0x2e, 0x81, 0x6e, 0x75, 0x9b, 0x9f, 0x37, 0x4f,
+ 0xb7, 0xa1, 0xce, 0xde, 0x0c, 0x74, 0x99, 0x31,
+ 0x0e, 0x27, 0x42, 0x99, 0xdd, 0x93, 0x03, 0x6b,
+ 0x44, 0x22, 0xd4, 0xc8, 0x67, 0xb5, 0xb2, 0x4d,
+ 0x11, 0x2e, 0x80, 0x09, 0xa2, 0x5b, 0xcf, 0x0c,
+ 0xff, 0xfa, 0x51, 0xe5, 0x9b, 0xdd, 0x11, 0xa1,
+ 0x17, 0x04, 0x9e, 0xc8, 0xd8, 0x1d, 0xc1, 0x5c,
+ 0xc3, 0xde, 0x83, 0x77, 0xa3, 0xec, 0x59, 0x7e,
+ 0xfb, 0xe8, 0x45, 0xff, 0xc3, 0xb3, 0xd3, 0x9e,
+ 0x3e, 0xc4, 0x75, 0xca, 0xc1, 0x77, 0xee, 0x1a,
+ 0xdc, 0x58, 0xab, 0x27, 0xc1, 0xfe, 0x21, 0x26,
+ 0x9a, 0xe0, 0x15, 0xab, 0x35, 0x8d, 0xbc, 0x22,
+ 0x37, 0xbb, 0x4e, 0xab, 0x9d, 0xa2, 0xaf, 0xf9,
+ 0x45, 0x17, 0xb1, 0xb8, 0xd4, 0x52, 0x1e, 0x67,
+ 0xeb, 0xac, 0xe0, 0x87, 0x6c, 0xe4, 0x7a, 0x03,
+ 0x73, 0xe4, 0x43, 0xeb, 0x3b, 0x57, 0x3f, 0x56,
+ 0x4b, 0x6c, 0x26, 0x81, 0x27, 0xbf, 0x7e, 0x59,
+ 0xcd, 0xab, 0x67, 0x8c, 0x4b, 0x6f, 0xa5, 0x47,
+ 0x2c, 0x45, 0x28, 0x5a, 0x3d, 0x88, 0x53, 0xf9,
+ 0x25, 0xdf, 0x5d, 0xba, 0xf7, 0x18, 0xa7, 0x3d,
+ 0x79, 0xb4, 0x43, 0x59, 0x77, 0xf9, 0xd5, 0x5d,
+ 0x4f, 0x31, 0x56, 0x8c, 0x21, 0xb5, 0xc0, 0xa2,
+ 0xca, 0x04, 0x62, 0x2c, 0xc8, 0xa8, 0x11, 0x82,
+ 0x1b, 0xde, 0xad, 0x20, 0x5b, 0xd2, 0x63, 0xfb,
+ 0x6d, 0xba, 0xd4, 0xcc, 0xb4, 0x9d, 0xe8, 0xa8,
+ 0xd1, 0x06, 0x81, 0xf0, 0xb9, 0xd4, 0x90, 0x30,
+ 0xcd, 0x0a, 0xe8, 0xd2, 0x8c, 0x7a, 0xbf, 0xf6,
+ 0x0d, 0xa0, 0xae, 0x1b, 0x21, 0x18, 0x93, 0x18,
+ 0x71, 0xe1, 0xa0, 0x63, 0x5a, 0x9d, 0x4e, 0x6a,
+ 0x52, 0x90, 0xaf, 0xdb, 0x26, 0x1e, 0xa9, 0xa1,
+ 0xc7, 0xf9, 0xf8, 0xa7, 0x3f, 0x85, 0xa1, 0xa4,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t aes_cbc_256_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0x83, 0x77, 0xd8, 0xa8, 0x6a, 0x36, 0x41, 0x72,
+ 0xb6, 0x03, 0x4e, 0x5e, 0x39, 0x36, 0xe3, 0xf5,
+ 0xd0, 0x1b, 0x0d, 0x97, 0x78, 0x46, 0xee, 0xfd,
+ 0x34, 0x34, 0x16, 0xa0, 0x44, 0xcf, 0x0b, 0xdc,
+ 0xfb, 0x82, 0x98, 0xa2, 0x79, 0xc2, 0xe7, 0x1c,
+ 0x43, 0x43, 0x4c, 0x7f, 0xe7, 0xa6, 0xe6, 0x10,
+ 0x9e, 0x65, 0xb2, 0x09, 0xc7, 0x5f, 0xaa, 0xb7,
+ 0xb8, 0xad, 0x83, 0xd5, 0x9e, 0xd1, 0xb2, 0xce,
+ 0x4b, 0xa4, 0x5d, 0xbc, 0xd6, 0xf6, 0x0a, 0xe7,
+ 0x1b, 0xe9, 0x86, 0xbc, 0x72, 0xcc, 0x6f, 0xcc,
+ 0xf2, 0xde, 0x08, 0x48, 0xa2, 0x20, 0x31, 0x6a,
+ 0xdd, 0xbe, 0xc5, 0x36, 0x55, 0xff, 0xce, 0xfa,
+ 0xdf, 0x60, 0x26, 0x77, 0x7f, 0xd0, 0xfa, 0xd7,
+ 0x76, 0x70, 0x14, 0x11, 0xbf, 0x57, 0xc2, 0xdd,
+ 0x5f, 0xd3, 0x50, 0x49, 0xf8, 0xd1, 0xa7, 0xe2,
+ 0x8b, 0x89, 0xa0, 0xbc, 0x44, 0x42, 0x45, 0x10,
+ 0xfe, 0x66, 0x3d, 0x56, 0x09, 0x21, 0x7c, 0x49,
+ 0x30, 0xde, 0xe2, 0x4b, 0x26, 0x65, 0x8a, 0xe4,
+ 0x79, 0x08, 0x3a, 0xca, 0x36, 0x4f, 0x97, 0x3c,
+ 0xe4, 0x6a, 0xc3, 0xdb, 0xce, 0xac, 0x78, 0x76,
+ 0x25, 0x81, 0x7a, 0x01, 0x7b, 0xd8, 0xf1, 0x00,
+ 0x8d, 0x2e, 0xb7, 0x98, 0x3c, 0x86, 0x20, 0xa3,
+ 0x4c, 0x24, 0x2a, 0x78, 0x3a, 0x8d, 0xeb, 0xcd,
+ 0xae, 0xe1, 0x32, 0xf8, 0x21, 0x37, 0x30, 0x27,
+ 0xe1, 0xf3, 0x14, 0x60, 0x96, 0x77, 0x37, 0x50,
+ 0xa2, 0x92, 0xae, 0xe5, 0xd8, 0xea, 0x1a, 0x7e,
+ 0xa3, 0xd1, 0x04, 0x17, 0x03, 0x51, 0x2f, 0x21,
+ 0xa7, 0x00, 0x23, 0xb3, 0x24, 0xd8, 0x7d, 0xb7,
+ 0x4c, 0x51, 0xb1, 0xaf, 0xb0, 0x64, 0xe4, 0x62,
+ 0x91, 0x4c, 0xd5, 0x4b, 0xe8, 0xfb, 0x95, 0x61,
+ 0xa4, 0x6f, 0xf8, 0xb8, 0xea, 0xa9, 0xb2, 0x10,
+ 0xd3, 0x96, 0xcb, 0x1c, 0xdc, 0x86, 0x43, 0x26,
+ 0x2d, 0x39, 0xc2, 0xa7, 0x69, 0xfa, 0x8f, 0x3a,
+ 0xe7, 0xe0, 0x27, 0xbe, 0xc2, 0xe8, 0xd5, 0x05,
+ 0xbe, 0x5a, 0x96, 0xdc, 0x86, 0xcd, 0x93, 0x75,
+ 0x1b, 0x61, 0x40, 0x8c, 0x60, 0x64, 0x79, 0x85,
+ 0x6c, 0xed, 0x39, 0x72, 0x26, 0x69, 0xba, 0xb2,
+ 0xff, 0xa8, 0x68, 0x29, 0x03, 0xf7, 0x26, 0xe7,
+ 0x0f, 0x53, 0x1b, 0x5b, 0x37, 0x21, 0x68, 0x70,
+ 0x1c, 0x39, 0x7f, 0x5b, 0x31, 0xca, 0xde, 0xed,
+ 0x33, 0x8d, 0xaf, 0xe6, 0x01, 0xd5, 0x72, 0x5f,
+ 0x46, 0x44, 0x34, 0x1b, 0x4c, 0xd7, 0x75, 0xf0,
+ 0x47, 0x16, 0x6c, 0xd6, 0x65, 0x3c, 0xd3, 0xc2,
+ 0xb1, 0x46, 0x7d, 0xd5, 0x5c, 0x48, 0x5b, 0x61,
+ 0x3e, 0x88, 0xff, 0x24, 0x5c, 0x7b, 0xf7, 0xa9,
+ 0x44, 0xcb, 0x3b, 0x3e, 0x3b, 0x93, 0x24, 0x46,
+ 0x7e, 0x34, 0x8d, 0xc4, 0x2b, 0xb7, 0x8e, 0x22,
+ 0x9e, 0x87, 0x62, 0xca, 0xbc, 0x10, 0x09, 0x4a,
+ 0x4b, 0x0b, 0xdb, 0x57, 0x9b, 0xa9, 0x3e, 0xa8,
+ 0x99, 0x59, 0xa0, 0x12, 0xf3, 0xa5, 0xe4, 0x91,
+ 0xbb, 0xb9, 0x05, 0x8d, 0xcf, 0xb9, 0xcb, 0x36,
+ 0x97, 0xb2, 0x6a, 0x31, 0x8f, 0xcb, 0xf8, 0x5a,
+ 0x2f, 0x9e, 0xa1, 0xf9, 0x7a, 0xf4, 0x10, 0x0e,
+ 0xe7, 0x7f, 0x4c, 0xcb, 0xe3, 0x83, 0x17, 0x39,
+ 0x34, 0xef, 0x49, 0x35, 0x68, 0x50, 0x80, 0xf9,
+ 0xcd, 0x3a, 0x10, 0xf6, 0x71, 0x1a, 0x94, 0xc3,
+ 0xec, 0xb9, 0x36, 0x84, 0x36, 0xe7, 0x3f, 0x6f,
+ 0x9b, 0xa9, 0x2b, 0x5c, 0x96, 0x49, 0x26, 0xda,
+ 0xb3, 0x08, 0x3d, 0x5e, 0x9e, 0x59, 0xdf, 0x0f,
+ 0xfc, 0xbe, 0xa8, 0x0b, 0xbc, 0xaa, 0x32, 0xf0,
+ 0xa5, 0x21, 0x50, 0x15, 0x7e, 0x46, 0xb9, 0x76,
+ 0x09, 0x4e, 0x4b, 0x6f, 0x9f, 0xc7, 0x8c, 0x6d,
+ 0x80, 0x37, 0xf9, 0xaa, 0xd1, 0x5f, 0x12, 0xb9,
+ 0xb3, 0x15, 0xe4, 0x96, 0xa1, 0x01, 0xd5, 0xa0,
+};
+
+const struct testvec aes_cbc_256_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = aes_cbc_ptxt,
+ .ctxt = aes_cbc_256_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * 256 bits key from IEEE 1619/D16, NUL terminated.
+ */
+static const char aes_xts_256_key[33] = {
+ 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45,
+ 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26,
+ 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93,
+ 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95,
+ 0
+};
+
+/*
+ * 512 bits key from IEEE 1619/D16, NUL terminated.
+ */
+static const char aes_xts_512_key[65] = {
+ 0x27, 0x18, 0x28, 0x18, 0x28, 0x45, 0x90, 0x45,
+ 0x23, 0x53, 0x60, 0x28, 0x74, 0x71, 0x35, 0x26,
+ 0x62, 0x49, 0x77, 0x57, 0x24, 0x70, 0x93, 0x69,
+ 0x99, 0x59, 0x57, 0x49, 0x66, 0x96, 0x76, 0x27,
+ 0x31, 0x41, 0x59, 0x26, 0x53, 0x58, 0x97, 0x93,
+ 0x23, 0x84, 0x62, 0x64, 0x33, 0x83, 0x27, 0x95,
+ 0x02, 0x88, 0x41, 0x97, 0x16, 0x93, 0x99, 0x37,
+ 0x51, 0x05, 0x82, 0x09, 0x74, 0x94, 0x45, 0x92,
+ 0
+};
+
+/*
+ * Vector 4 from IEEE 1619/D16, blkno 0.
+ */
+static const uint8_t aes_xts_256_vec4_ptxt[SECSIZE] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+};
+
+static const uint8_t aes_xts_256_vec4_ctxt[SECSIZE] = {
+ 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76,
+ 0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2,
+ 0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25,
+ 0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c,
+ 0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f,
+ 0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00,
+ 0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad,
+ 0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12,
+ 0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5,
+ 0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5,
+ 0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc,
+ 0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce,
+ 0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4,
+ 0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84,
+ 0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a,
+ 0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65,
+ 0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89,
+ 0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51,
+ 0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15,
+ 0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8,
+ 0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed,
+ 0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91,
+ 0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e,
+ 0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34,
+ 0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b,
+ 0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5,
+ 0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4,
+ 0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c,
+ 0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd,
+ 0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3,
+ 0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f,
+ 0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e,
+ 0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91,
+ 0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19,
+ 0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1,
+ 0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc,
+ 0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed,
+ 0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde,
+ 0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98,
+ 0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3,
+ 0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca,
+ 0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6,
+ 0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc,
+ 0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44,
+ 0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0,
+ 0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95,
+ 0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4,
+ 0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd,
+ 0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13,
+ 0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7,
+ 0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a,
+ 0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52,
+ 0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a,
+ 0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38,
+ 0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e,
+ 0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e,
+ 0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad,
+ 0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8,
+ 0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c,
+ 0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d,
+ 0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f,
+ 0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2,
+ 0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea,
+ 0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68,
+};
+
+/*
+ * Vector 5 from IEEE 1619/D16, blkno 1.
+ */
+static const uint8_t aes_xts_256_vec5_ptxt[SECSIZE] = {
+ 0x27, 0xa7, 0x47, 0x9b, 0xef, 0xa1, 0xd4, 0x76,
+ 0x48, 0x9f, 0x30, 0x8c, 0xd4, 0xcf, 0xa6, 0xe2,
+ 0xa9, 0x6e, 0x4b, 0xbe, 0x32, 0x08, 0xff, 0x25,
+ 0x28, 0x7d, 0xd3, 0x81, 0x96, 0x16, 0xe8, 0x9c,
+ 0xc7, 0x8c, 0xf7, 0xf5, 0xe5, 0x43, 0x44, 0x5f,
+ 0x83, 0x33, 0xd8, 0xfa, 0x7f, 0x56, 0x00, 0x00,
+ 0x05, 0x27, 0x9f, 0xa5, 0xd8, 0xb5, 0xe4, 0xad,
+ 0x40, 0xe7, 0x36, 0xdd, 0xb4, 0xd3, 0x54, 0x12,
+ 0x32, 0x80, 0x63, 0xfd, 0x2a, 0xab, 0x53, 0xe5,
+ 0xea, 0x1e, 0x0a, 0x9f, 0x33, 0x25, 0x00, 0xa5,
+ 0xdf, 0x94, 0x87, 0xd0, 0x7a, 0x5c, 0x92, 0xcc,
+ 0x51, 0x2c, 0x88, 0x66, 0xc7, 0xe8, 0x60, 0xce,
+ 0x93, 0xfd, 0xf1, 0x66, 0xa2, 0x49, 0x12, 0xb4,
+ 0x22, 0x97, 0x61, 0x46, 0xae, 0x20, 0xce, 0x84,
+ 0x6b, 0xb7, 0xdc, 0x9b, 0xa9, 0x4a, 0x76, 0x7a,
+ 0xae, 0xf2, 0x0c, 0x0d, 0x61, 0xad, 0x02, 0x65,
+ 0x5e, 0xa9, 0x2d, 0xc4, 0xc4, 0xe4, 0x1a, 0x89,
+ 0x52, 0xc6, 0x51, 0xd3, 0x31, 0x74, 0xbe, 0x51,
+ 0xa1, 0x0c, 0x42, 0x11, 0x10, 0xe6, 0xd8, 0x15,
+ 0x88, 0xed, 0xe8, 0x21, 0x03, 0xa2, 0x52, 0xd8,
+ 0xa7, 0x50, 0xe8, 0x76, 0x8d, 0xef, 0xff, 0xed,
+ 0x91, 0x22, 0x81, 0x0a, 0xae, 0xb9, 0x9f, 0x91,
+ 0x72, 0xaf, 0x82, 0xb6, 0x04, 0xdc, 0x4b, 0x8e,
+ 0x51, 0xbc, 0xb0, 0x82, 0x35, 0xa6, 0xf4, 0x34,
+ 0x13, 0x32, 0xe4, 0xca, 0x60, 0x48, 0x2a, 0x4b,
+ 0xa1, 0xa0, 0x3b, 0x3e, 0x65, 0x00, 0x8f, 0xc5,
+ 0xda, 0x76, 0xb7, 0x0b, 0xf1, 0x69, 0x0d, 0xb4,
+ 0xea, 0xe2, 0x9c, 0x5f, 0x1b, 0xad, 0xd0, 0x3c,
+ 0x5c, 0xcf, 0x2a, 0x55, 0xd7, 0x05, 0xdd, 0xcd,
+ 0x86, 0xd4, 0x49, 0x51, 0x1c, 0xeb, 0x7e, 0xc3,
+ 0x0b, 0xf1, 0x2b, 0x1f, 0xa3, 0x5b, 0x91, 0x3f,
+ 0x9f, 0x74, 0x7a, 0x8a, 0xfd, 0x1b, 0x13, 0x0e,
+ 0x94, 0xbf, 0xf9, 0x4e, 0xff, 0xd0, 0x1a, 0x91,
+ 0x73, 0x5c, 0xa1, 0x72, 0x6a, 0xcd, 0x0b, 0x19,
+ 0x7c, 0x4e, 0x5b, 0x03, 0x39, 0x36, 0x97, 0xe1,
+ 0x26, 0x82, 0x6f, 0xb6, 0xbb, 0xde, 0x8e, 0xcc,
+ 0x1e, 0x08, 0x29, 0x85, 0x16, 0xe2, 0xc9, 0xed,
+ 0x03, 0xff, 0x3c, 0x1b, 0x78, 0x60, 0xf6, 0xde,
+ 0x76, 0xd4, 0xce, 0xcd, 0x94, 0xc8, 0x11, 0x98,
+ 0x55, 0xef, 0x52, 0x97, 0xca, 0x67, 0xe9, 0xf3,
+ 0xe7, 0xff, 0x72, 0xb1, 0xe9, 0x97, 0x85, 0xca,
+ 0x0a, 0x7e, 0x77, 0x20, 0xc5, 0xb3, 0x6d, 0xc6,
+ 0xd7, 0x2c, 0xac, 0x95, 0x74, 0xc8, 0xcb, 0xbc,
+ 0x2f, 0x80, 0x1e, 0x23, 0xe5, 0x6f, 0xd3, 0x44,
+ 0xb0, 0x7f, 0x22, 0x15, 0x4b, 0xeb, 0xa0, 0xf0,
+ 0x8c, 0xe8, 0x89, 0x1e, 0x64, 0x3e, 0xd9, 0x95,
+ 0xc9, 0x4d, 0x9a, 0x69, 0xc9, 0xf1, 0xb5, 0xf4,
+ 0x99, 0x02, 0x7a, 0x78, 0x57, 0x2a, 0xee, 0xbd,
+ 0x74, 0xd2, 0x0c, 0xc3, 0x98, 0x81, 0xc2, 0x13,
+ 0xee, 0x77, 0x0b, 0x10, 0x10, 0xe4, 0xbe, 0xa7,
+ 0x18, 0x84, 0x69, 0x77, 0xae, 0x11, 0x9f, 0x7a,
+ 0x02, 0x3a, 0xb5, 0x8c, 0xca, 0x0a, 0xd7, 0x52,
+ 0xaf, 0xe6, 0x56, 0xbb, 0x3c, 0x17, 0x25, 0x6a,
+ 0x9f, 0x6e, 0x9b, 0xf1, 0x9f, 0xdd, 0x5a, 0x38,
+ 0xfc, 0x82, 0xbb, 0xe8, 0x72, 0xc5, 0x53, 0x9e,
+ 0xdb, 0x60, 0x9e, 0xf4, 0xf7, 0x9c, 0x20, 0x3e,
+ 0xbb, 0x14, 0x0f, 0x2e, 0x58, 0x3c, 0xb2, 0xad,
+ 0x15, 0xb4, 0xaa, 0x5b, 0x65, 0x50, 0x16, 0xa8,
+ 0x44, 0x92, 0x77, 0xdb, 0xd4, 0x77, 0xef, 0x2c,
+ 0x8d, 0x6c, 0x01, 0x7d, 0xb7, 0x38, 0xb1, 0x8d,
+ 0xeb, 0x4a, 0x42, 0x7d, 0x19, 0x23, 0xce, 0x3f,
+ 0xf2, 0x62, 0x73, 0x57, 0x79, 0xa4, 0x18, 0xf2,
+ 0x0a, 0x28, 0x2d, 0xf9, 0x20, 0x14, 0x7b, 0xea,
+ 0xbe, 0x42, 0x1e, 0xe5, 0x31, 0x9d, 0x05, 0x68,
+};
+
+static const uint8_t aes_xts_256_vec5_ctxt[SECSIZE] = {
+ 0x26, 0x4d, 0x3c, 0xa8, 0x51, 0x21, 0x94, 0xfe,
+ 0xc3, 0x12, 0xc8, 0xc9, 0x89, 0x1f, 0x27, 0x9f,
+ 0xef, 0xdd, 0x60, 0x8d, 0x0c, 0x02, 0x7b, 0x60,
+ 0x48, 0x3a, 0x3f, 0xa8, 0x11, 0xd6, 0x5e, 0xe5,
+ 0x9d, 0x52, 0xd9, 0xe4, 0x0e, 0xc5, 0x67, 0x2d,
+ 0x81, 0x53, 0x2b, 0x38, 0xb6, 0xb0, 0x89, 0xce,
+ 0x95, 0x1f, 0x0f, 0x9c, 0x35, 0x59, 0x0b, 0x8b,
+ 0x97, 0x8d, 0x17, 0x52, 0x13, 0xf3, 0x29, 0xbb,
+ 0x1c, 0x2f, 0xd3, 0x0f, 0x2f, 0x7f, 0x30, 0x49,
+ 0x2a, 0x61, 0xa5, 0x32, 0xa7, 0x9f, 0x51, 0xd3,
+ 0x6f, 0x5e, 0x31, 0xa7, 0xc9, 0xa1, 0x2c, 0x28,
+ 0x60, 0x82, 0xff, 0x7d, 0x23, 0x94, 0xd1, 0x8f,
+ 0x78, 0x3e, 0x1a, 0x8e, 0x72, 0xc7, 0x22, 0xca,
+ 0xaa, 0xa5, 0x2d, 0x8f, 0x06, 0x56, 0x57, 0xd2,
+ 0x63, 0x1f, 0xd2, 0x5b, 0xfd, 0x8e, 0x5b, 0xaa,
+ 0xd6, 0xe5, 0x27, 0xd7, 0x63, 0x51, 0x75, 0x01,
+ 0xc6, 0x8c, 0x5e, 0xdc, 0x3c, 0xdd, 0x55, 0x43,
+ 0x5c, 0x53, 0x2d, 0x71, 0x25, 0xc8, 0x61, 0x4d,
+ 0xee, 0xd9, 0xad, 0xaa, 0x3a, 0xca, 0xde, 0x58,
+ 0x88, 0xb8, 0x7b, 0xef, 0x64, 0x1c, 0x4c, 0x99,
+ 0x4c, 0x80, 0x91, 0xb5, 0xbc, 0xd3, 0x87, 0xf3,
+ 0x96, 0x3f, 0xb5, 0xbc, 0x37, 0xaa, 0x92, 0x2f,
+ 0xbf, 0xe3, 0xdf, 0x4e, 0x5b, 0x91, 0x5e, 0x6e,
+ 0xb5, 0x14, 0x71, 0x7b, 0xdd, 0x2a, 0x74, 0x07,
+ 0x9a, 0x50, 0x73, 0xf5, 0xc4, 0xbf, 0xd4, 0x6a,
+ 0xdf, 0x7d, 0x28, 0x2e, 0x7a, 0x39, 0x3a, 0x52,
+ 0x57, 0x9d, 0x11, 0xa0, 0x28, 0xda, 0x4d, 0x9c,
+ 0xd9, 0xc7, 0x71, 0x24, 0xf9, 0x64, 0x8e, 0xe3,
+ 0x83, 0xb1, 0xac, 0x76, 0x39, 0x30, 0xe7, 0x16,
+ 0x2a, 0x8d, 0x37, 0xf3, 0x50, 0xb2, 0xf7, 0x4b,
+ 0x84, 0x72, 0xcf, 0x09, 0x90, 0x20, 0x63, 0xc6,
+ 0xb3, 0x2e, 0x8c, 0x2d, 0x92, 0x90, 0xce, 0xfb,
+ 0xd7, 0x34, 0x6d, 0x1c, 0x77, 0x9a, 0x0d, 0xf5,
+ 0x0e, 0xdc, 0xde, 0x45, 0x31, 0xda, 0x07, 0xb0,
+ 0x99, 0xc6, 0x38, 0xe8, 0x3a, 0x75, 0x59, 0x44,
+ 0xdf, 0x2a, 0xef, 0x1a, 0xa3, 0x17, 0x52, 0xfd,
+ 0x32, 0x3d, 0xcb, 0x71, 0x0f, 0xb4, 0xbf, 0xbb,
+ 0x9d, 0x22, 0xb9, 0x25, 0xbc, 0x35, 0x77, 0xe1,
+ 0xb8, 0x94, 0x9e, 0x72, 0x9a, 0x90, 0xbb, 0xaf,
+ 0xea, 0xcf, 0x7f, 0x78, 0x79, 0xe7, 0xb1, 0x14,
+ 0x7e, 0x28, 0xba, 0x0b, 0xae, 0x94, 0x0d, 0xb7,
+ 0x95, 0xa6, 0x1b, 0x15, 0xec, 0xf4, 0xdf, 0x8d,
+ 0xb0, 0x7b, 0x82, 0x4b, 0xb0, 0x62, 0x80, 0x2c,
+ 0xc9, 0x8a, 0x95, 0x45, 0xbb, 0x2a, 0xae, 0xed,
+ 0x77, 0xcb, 0x3f, 0xc6, 0xdb, 0x15, 0xdc, 0xd7,
+ 0xd8, 0x0d, 0x7d, 0x5b, 0xc4, 0x06, 0xc4, 0x97,
+ 0x0a, 0x34, 0x78, 0xad, 0xa8, 0x89, 0x9b, 0x32,
+ 0x91, 0x98, 0xeb, 0x61, 0xc1, 0x93, 0xfb, 0x62,
+ 0x75, 0xaa, 0x8c, 0xa3, 0x40, 0x34, 0x4a, 0x75,
+ 0xa8, 0x62, 0xae, 0xbe, 0x92, 0xee, 0xe1, 0xce,
+ 0x03, 0x2f, 0xd9, 0x50, 0xb4, 0x7d, 0x77, 0x04,
+ 0xa3, 0x87, 0x69, 0x23, 0xb4, 0xad, 0x62, 0x84,
+ 0x4b, 0xf4, 0xa0, 0x9c, 0x4d, 0xbe, 0x8b, 0x43,
+ 0x97, 0x18, 0x4b, 0x74, 0x71, 0x36, 0x0c, 0x95,
+ 0x64, 0x88, 0x0a, 0xed, 0xdd, 0xb9, 0xba, 0xa4,
+ 0xaf, 0x2e, 0x75, 0x39, 0x4b, 0x08, 0xcd, 0x32,
+ 0xff, 0x47, 0x9c, 0x57, 0xa0, 0x7d, 0x3e, 0xab,
+ 0x5d, 0x54, 0xde, 0x5f, 0x97, 0x38, 0xb8, 0xd2,
+ 0x7f, 0x27, 0xa9, 0xf0, 0xab, 0x11, 0x79, 0x9d,
+ 0x7b, 0x7f, 0xfe, 0xfb, 0x27, 0x04, 0xc9, 0x5c,
+ 0x6a, 0xd1, 0x2c, 0x39, 0xf1, 0xe8, 0x67, 0xa4,
+ 0xb7, 0xb1, 0xd7, 0x81, 0x8a, 0x4b, 0x75, 0x3d,
+ 0xfd, 0x2a, 0x89, 0xcc, 0xb4, 0x5e, 0x00, 0x1a,
+ 0x03, 0xa8, 0x67, 0xb1, 0x87, 0xf2, 0x25, 0xdd,
+};
+
+/*
+ * Vector 6 from IEEE 1619/D16, blkno 2.
+ */
+static const uint8_t aes_xts_256_vec6_ptxt[SECSIZE] = {
+ 0x26, 0x4d, 0x3c, 0xa8, 0x51, 0x21, 0x94, 0xfe,
+ 0xc3, 0x12, 0xc8, 0xc9, 0x89, 0x1f, 0x27, 0x9f,
+ 0xef, 0xdd, 0x60, 0x8d, 0x0c, 0x02, 0x7b, 0x60,
+ 0x48, 0x3a, 0x3f, 0xa8, 0x11, 0xd6, 0x5e, 0xe5,
+ 0x9d, 0x52, 0xd9, 0xe4, 0x0e, 0xc5, 0x67, 0x2d,
+ 0x81, 0x53, 0x2b, 0x38, 0xb6, 0xb0, 0x89, 0xce,
+ 0x95, 0x1f, 0x0f, 0x9c, 0x35, 0x59, 0x0b, 0x8b,
+ 0x97, 0x8d, 0x17, 0x52, 0x13, 0xf3, 0x29, 0xbb,
+ 0x1c, 0x2f, 0xd3, 0x0f, 0x2f, 0x7f, 0x30, 0x49,
+ 0x2a, 0x61, 0xa5, 0x32, 0xa7, 0x9f, 0x51, 0xd3,
+ 0x6f, 0x5e, 0x31, 0xa7, 0xc9, 0xa1, 0x2c, 0x28,
+ 0x60, 0x82, 0xff, 0x7d, 0x23, 0x94, 0xd1, 0x8f,
+ 0x78, 0x3e, 0x1a, 0x8e, 0x72, 0xc7, 0x22, 0xca,
+ 0xaa, 0xa5, 0x2d, 0x8f, 0x06, 0x56, 0x57, 0xd2,
+ 0x63, 0x1f, 0xd2, 0x5b, 0xfd, 0x8e, 0x5b, 0xaa,
+ 0xd6, 0xe5, 0x27, 0xd7, 0x63, 0x51, 0x75, 0x01,
+ 0xc6, 0x8c, 0x5e, 0xdc, 0x3c, 0xdd, 0x55, 0x43,
+ 0x5c, 0x53, 0x2d, 0x71, 0x25, 0xc8, 0x61, 0x4d,
+ 0xee, 0xd9, 0xad, 0xaa, 0x3a, 0xca, 0xde, 0x58,
+ 0x88, 0xb8, 0x7b, 0xef, 0x64, 0x1c, 0x4c, 0x99,
+ 0x4c, 0x80, 0x91, 0xb5, 0xbc, 0xd3, 0x87, 0xf3,
+ 0x96, 0x3f, 0xb5, 0xbc, 0x37, 0xaa, 0x92, 0x2f,
+ 0xbf, 0xe3, 0xdf, 0x4e, 0x5b, 0x91, 0x5e, 0x6e,
+ 0xb5, 0x14, 0x71, 0x7b, 0xdd, 0x2a, 0x74, 0x07,
+ 0x9a, 0x50, 0x73, 0xf5, 0xc4, 0xbf, 0xd4, 0x6a,
+ 0xdf, 0x7d, 0x28, 0x2e, 0x7a, 0x39, 0x3a, 0x52,
+ 0x57, 0x9d, 0x11, 0xa0, 0x28, 0xda, 0x4d, 0x9c,
+ 0xd9, 0xc7, 0x71, 0x24, 0xf9, 0x64, 0x8e, 0xe3,
+ 0x83, 0xb1, 0xac, 0x76, 0x39, 0x30, 0xe7, 0x16,
+ 0x2a, 0x8d, 0x37, 0xf3, 0x50, 0xb2, 0xf7, 0x4b,
+ 0x84, 0x72, 0xcf, 0x09, 0x90, 0x20, 0x63, 0xc6,
+ 0xb3, 0x2e, 0x8c, 0x2d, 0x92, 0x90, 0xce, 0xfb,
+ 0xd7, 0x34, 0x6d, 0x1c, 0x77, 0x9a, 0x0d, 0xf5,
+ 0x0e, 0xdc, 0xde, 0x45, 0x31, 0xda, 0x07, 0xb0,
+ 0x99, 0xc6, 0x38, 0xe8, 0x3a, 0x75, 0x59, 0x44,
+ 0xdf, 0x2a, 0xef, 0x1a, 0xa3, 0x17, 0x52, 0xfd,
+ 0x32, 0x3d, 0xcb, 0x71, 0x0f, 0xb4, 0xbf, 0xbb,
+ 0x9d, 0x22, 0xb9, 0x25, 0xbc, 0x35, 0x77, 0xe1,
+ 0xb8, 0x94, 0x9e, 0x72, 0x9a, 0x90, 0xbb, 0xaf,
+ 0xea, 0xcf, 0x7f, 0x78, 0x79, 0xe7, 0xb1, 0x14,
+ 0x7e, 0x28, 0xba, 0x0b, 0xae, 0x94, 0x0d, 0xb7,
+ 0x95, 0xa6, 0x1b, 0x15, 0xec, 0xf4, 0xdf, 0x8d,
+ 0xb0, 0x7b, 0x82, 0x4b, 0xb0, 0x62, 0x80, 0x2c,
+ 0xc9, 0x8a, 0x95, 0x45, 0xbb, 0x2a, 0xae, 0xed,
+ 0x77, 0xcb, 0x3f, 0xc6, 0xdb, 0x15, 0xdc, 0xd7,
+ 0xd8, 0x0d, 0x7d, 0x5b, 0xc4, 0x06, 0xc4, 0x97,
+ 0x0a, 0x34, 0x78, 0xad, 0xa8, 0x89, 0x9b, 0x32,
+ 0x91, 0x98, 0xeb, 0x61, 0xc1, 0x93, 0xfb, 0x62,
+ 0x75, 0xaa, 0x8c, 0xa3, 0x40, 0x34, 0x4a, 0x75,
+ 0xa8, 0x62, 0xae, 0xbe, 0x92, 0xee, 0xe1, 0xce,
+ 0x03, 0x2f, 0xd9, 0x50, 0xb4, 0x7d, 0x77, 0x04,
+ 0xa3, 0x87, 0x69, 0x23, 0xb4, 0xad, 0x62, 0x84,
+ 0x4b, 0xf4, 0xa0, 0x9c, 0x4d, 0xbe, 0x8b, 0x43,
+ 0x97, 0x18, 0x4b, 0x74, 0x71, 0x36, 0x0c, 0x95,
+ 0x64, 0x88, 0x0a, 0xed, 0xdd, 0xb9, 0xba, 0xa4,
+ 0xaf, 0x2e, 0x75, 0x39, 0x4b, 0x08, 0xcd, 0x32,
+ 0xff, 0x47, 0x9c, 0x57, 0xa0, 0x7d, 0x3e, 0xab,
+ 0x5d, 0x54, 0xde, 0x5f, 0x97, 0x38, 0xb8, 0xd2,
+ 0x7f, 0x27, 0xa9, 0xf0, 0xab, 0x11, 0x79, 0x9d,
+ 0x7b, 0x7f, 0xfe, 0xfb, 0x27, 0x04, 0xc9, 0x5c,
+ 0x6a, 0xd1, 0x2c, 0x39, 0xf1, 0xe8, 0x67, 0xa4,
+ 0xb7, 0xb1, 0xd7, 0x81, 0x8a, 0x4b, 0x75, 0x3d,
+ 0xfd, 0x2a, 0x89, 0xcc, 0xb4, 0x5e, 0x00, 0x1a,
+ 0x03, 0xa8, 0x67, 0xb1, 0x87, 0xf2, 0x25, 0xdd,
+};
+
+static const uint8_t aes_xts_256_vec6_ctxt[SECSIZE] = {
+ 0xfa, 0x76, 0x2a, 0x36, 0x80, 0xb7, 0x60, 0x07,
+ 0x92, 0x8e, 0xd4, 0xa4, 0xf4, 0x9a, 0x94, 0x56,
+ 0x03, 0x1b, 0x70, 0x47, 0x82, 0xe6, 0x5e, 0x16,
+ 0xce, 0xcb, 0x54, 0xed, 0x7d, 0x01, 0x7b, 0x5e,
+ 0x18, 0xab, 0xd6, 0x7b, 0x33, 0x8e, 0x81, 0x07,
+ 0x8f, 0x21, 0xed, 0xb7, 0x86, 0x8d, 0x90, 0x1e,
+ 0xbe, 0x9c, 0x73, 0x1a, 0x7c, 0x18, 0xb5, 0xe6,
+ 0xde, 0xc1, 0xd6, 0xa7, 0x2e, 0x07, 0x8a, 0xc9,
+ 0xa4, 0x26, 0x2f, 0x86, 0x0b, 0xee, 0xfa, 0x14,
+ 0xf4, 0xe8, 0x21, 0x01, 0x82, 0x72, 0xe4, 0x11,
+ 0xa9, 0x51, 0x50, 0x2b, 0x6e, 0x79, 0x06, 0x6e,
+ 0x84, 0x25, 0x2c, 0x33, 0x46, 0xf3, 0xaa, 0x62,
+ 0x34, 0x43, 0x51, 0xa2, 0x91, 0xd4, 0xbe, 0xdc,
+ 0x7a, 0x07, 0x61, 0x8b, 0xde, 0xa2, 0xaf, 0x63,
+ 0x14, 0x5c, 0xc7, 0xa4, 0xb8, 0xd4, 0x07, 0x06,
+ 0x91, 0xae, 0x89, 0x0c, 0xd6, 0x57, 0x33, 0xe7,
+ 0x94, 0x6e, 0x90, 0x21, 0xa1, 0xdf, 0xfc, 0x4c,
+ 0x59, 0xf1, 0x59, 0x42, 0x5e, 0xe6, 0xd5, 0x0c,
+ 0xa9, 0xb1, 0x35, 0xfa, 0x61, 0x62, 0xce, 0xa1,
+ 0x8a, 0x93, 0x98, 0x38, 0xdc, 0x00, 0x0f, 0xb3,
+ 0x86, 0xfa, 0xd0, 0x86, 0xac, 0xce, 0x5a, 0xc0,
+ 0x7c, 0xb2, 0xec, 0xe7, 0xfd, 0x58, 0x0b, 0x00,
+ 0xcf, 0xa5, 0xe9, 0x85, 0x89, 0x63, 0x1d, 0xc2,
+ 0x5e, 0x8e, 0x2a, 0x3d, 0xaf, 0x2f, 0xfd, 0xec,
+ 0x26, 0x53, 0x16, 0x59, 0x91, 0x2c, 0x9d, 0x8f,
+ 0x7a, 0x15, 0xe5, 0x86, 0x5e, 0xa8, 0xfb, 0x58,
+ 0x16, 0xd6, 0x20, 0x70, 0x52, 0xbd, 0x71, 0x28,
+ 0xcd, 0x74, 0x3c, 0x12, 0xc8, 0x11, 0x87, 0x91,
+ 0xa4, 0x73, 0x68, 0x11, 0x93, 0x5e, 0xb9, 0x82,
+ 0xa5, 0x32, 0x34, 0x9e, 0x31, 0xdd, 0x40, 0x1e,
+ 0x0b, 0x66, 0x0a, 0x56, 0x8c, 0xb1, 0xa4, 0x71,
+ 0x1f, 0x55, 0x2f, 0x55, 0xde, 0xd5, 0x9f, 0x1f,
+ 0x15, 0xbf, 0x71, 0x96, 0xb3, 0xca, 0x12, 0xa9,
+ 0x1e, 0x48, 0x8e, 0xf5, 0x9d, 0x64, 0xf3, 0xa0,
+ 0x2b, 0xf4, 0x52, 0x39, 0x49, 0x9a, 0xc6, 0x17,
+ 0x6a, 0xe3, 0x21, 0xc4, 0xa2, 0x11, 0xec, 0x54,
+ 0x53, 0x65, 0x97, 0x1c, 0x5d, 0x3f, 0x4f, 0x09,
+ 0xd4, 0xeb, 0x13, 0x9b, 0xfd, 0xf2, 0x07, 0x3d,
+ 0x33, 0x18, 0x0b, 0x21, 0x00, 0x2b, 0x65, 0xcc,
+ 0x98, 0x65, 0xe7, 0x6c, 0xb2, 0x4c, 0xd9, 0x2c,
+ 0x87, 0x4c, 0x24, 0xc1, 0x83, 0x50, 0x39, 0x9a,
+ 0x93, 0x6a, 0xb3, 0x63, 0x70, 0x79, 0x29, 0x5d,
+ 0x76, 0xc4, 0x17, 0x77, 0x6b, 0x94, 0xef, 0xce,
+ 0x3a, 0x0e, 0xf7, 0x20, 0x6b, 0x15, 0x11, 0x05,
+ 0x19, 0x65, 0x5c, 0x95, 0x6c, 0xbd, 0x8b, 0x24,
+ 0x89, 0x40, 0x5e, 0xe2, 0xb0, 0x9a, 0x6b, 0x6e,
+ 0xeb, 0xe0, 0xc5, 0x37, 0x90, 0xa1, 0x2a, 0x89,
+ 0x98, 0x37, 0x8b, 0x33, 0xa5, 0xb7, 0x11, 0x59,
+ 0x62, 0x5f, 0x4b, 0xa4, 0x9d, 0x2a, 0x2f, 0xdb,
+ 0xa5, 0x9f, 0xbf, 0x08, 0x97, 0xbc, 0x7a, 0xab,
+ 0xd8, 0xd7, 0x07, 0xdc, 0x14, 0x0a, 0x80, 0xf0,
+ 0xf3, 0x09, 0xf8, 0x35, 0xd3, 0xda, 0x54, 0xab,
+ 0x58, 0x4e, 0x50, 0x1d, 0xfa, 0x0e, 0xe9, 0x77,
+ 0xfe, 0xc5, 0x43, 0xf7, 0x41, 0x86, 0xa8, 0x02,
+ 0xb9, 0xa3, 0x7a, 0xdb, 0x3e, 0x82, 0x91, 0xec,
+ 0xa0, 0x4d, 0x66, 0x52, 0x0d, 0x22, 0x9e, 0x60,
+ 0x40, 0x1e, 0x72, 0x82, 0xbe, 0xf4, 0x86, 0xae,
+ 0x05, 0x9a, 0xa7, 0x06, 0x96, 0xe0, 0xe3, 0x05,
+ 0xd7, 0x77, 0x14, 0x0a, 0x7a, 0x88, 0x3e, 0xcd,
+ 0xcb, 0x69, 0xb9, 0xff, 0x93, 0x8e, 0x8a, 0x42,
+ 0x31, 0x86, 0x4c, 0x69, 0xca, 0x2c, 0x20, 0x43,
+ 0xbe, 0xd0, 0x07, 0xff, 0x3e, 0x60, 0x5e, 0x01,
+ 0x4b, 0xcf, 0x51, 0x81, 0x38, 0xdc, 0x3a, 0x25,
+ 0xc5, 0xe2, 0x36, 0x17, 0x1a, 0x2d, 0x01, 0xd6,
+};
+
+/*
+ * Vector 7 from IEEE 1619/D16, blkno 0xfd.
+ */
+static const uint8_t aes_xts_256_vec7_ptxt[SECSIZE] = {
+ 0x8e, 0x41, 0xb7, 0x8c, 0x39, 0x0b, 0x5a, 0xf9,
+ 0xd7, 0x58, 0xbb, 0x21, 0x4a, 0x67, 0xe9, 0xf6,
+ 0xbf, 0x77, 0x27, 0xb0, 0x9a, 0xc6, 0x12, 0x40,
+ 0x84, 0xc3, 0x76, 0x11, 0x39, 0x8f, 0xa4, 0x5d,
+ 0xaa, 0xd9, 0x48, 0x68, 0x60, 0x0e, 0xd3, 0x91,
+ 0xfb, 0x1a, 0xcd, 0x48, 0x57, 0xa9, 0x5b, 0x46,
+ 0x6e, 0x62, 0xef, 0x9f, 0x4b, 0x37, 0x72, 0x44,
+ 0xd1, 0xc1, 0x52, 0xe7, 0xb3, 0x0d, 0x73, 0x1a,
+ 0xad, 0x30, 0xc7, 0x16, 0xd2, 0x14, 0xb7, 0x07,
+ 0xae, 0xd9, 0x9e, 0xb5, 0xb5, 0xe5, 0x80, 0xb3,
+ 0xe8, 0x87, 0xcf, 0x74, 0x97, 0x46, 0x56, 0x51,
+ 0xd4, 0xb6, 0x0e, 0x60, 0x42, 0x05, 0x1d, 0xa3,
+ 0x69, 0x3c, 0x3b, 0x78, 0xc1, 0x44, 0x89, 0x54,
+ 0x3b, 0xe8, 0xb6, 0xad, 0x0b, 0xa6, 0x29, 0x56,
+ 0x5b, 0xba, 0x20, 0x23, 0x13, 0xba, 0x7b, 0x0d,
+ 0x0c, 0x94, 0xa3, 0x25, 0x2b, 0x67, 0x6f, 0x46,
+ 0xcc, 0x02, 0xce, 0x0f, 0x8a, 0x7d, 0x34, 0xc0,
+ 0xed, 0x22, 0x91, 0x29, 0x67, 0x3c, 0x1f, 0x61,
+ 0xae, 0xd5, 0x79, 0xd0, 0x8a, 0x92, 0x03, 0xa2,
+ 0x5a, 0xac, 0x3a, 0x77, 0xe9, 0xdb, 0x60, 0x26,
+ 0x79, 0x96, 0xdb, 0x38, 0xdf, 0x63, 0x73, 0x56,
+ 0xd9, 0xdc, 0xd1, 0x63, 0x2e, 0x36, 0x99, 0x39,
+ 0xf2, 0xa2, 0x9d, 0x89, 0x34, 0x5c, 0x66, 0xe0,
+ 0x50, 0x66, 0xf1, 0xa3, 0x67, 0x7a, 0xef, 0x18,
+ 0xde, 0xa4, 0x11, 0x3f, 0xae, 0xb6, 0x29, 0xe4,
+ 0x67, 0x21, 0xa6, 0x6d, 0x0a, 0x7e, 0x78, 0x5d,
+ 0x3e, 0x29, 0xaf, 0x25, 0x94, 0xeb, 0x67, 0xdf,
+ 0xa9, 0x82, 0xaf, 0xfe, 0x0a, 0xac, 0x05, 0x8f,
+ 0x6e, 0x15, 0x86, 0x42, 0x69, 0xb1, 0x35, 0x41,
+ 0x82, 0x61, 0xfc, 0x3a, 0xfb, 0x08, 0x94, 0x72,
+ 0xcf, 0x68, 0xc4, 0x5d, 0xd7, 0xf2, 0x31, 0xc6,
+ 0x24, 0x9b, 0xa0, 0x25, 0x5e, 0x1e, 0x03, 0x38,
+ 0x33, 0xfc, 0x4d, 0x00, 0xa3, 0xfe, 0x02, 0x13,
+ 0x2d, 0x7b, 0xc3, 0x87, 0x36, 0x14, 0xb8, 0xae,
+ 0xe3, 0x42, 0x73, 0x58, 0x1e, 0xa0, 0x32, 0x5c,
+ 0x81, 0xf0, 0x27, 0x0a, 0xff, 0xa1, 0x36, 0x41,
+ 0xd0, 0x52, 0xd3, 0x6f, 0x07, 0x57, 0xd4, 0x84,
+ 0x01, 0x43, 0x54, 0xd0, 0x2d, 0x68, 0x83, 0xca,
+ 0x15, 0xc2, 0x4d, 0x8c, 0x39, 0x56, 0xb1, 0xbd,
+ 0x02, 0x7b, 0xcf, 0x41, 0xf1, 0x51, 0xfd, 0x80,
+ 0x23, 0xc5, 0x34, 0x0e, 0x56, 0x06, 0xf3, 0x7e,
+ 0x90, 0xfd, 0xb8, 0x7c, 0x86, 0xfb, 0x4f, 0xa6,
+ 0x34, 0xb3, 0x71, 0x8a, 0x30, 0xba, 0xce, 0x06,
+ 0xa6, 0x6e, 0xaf, 0x8f, 0x63, 0xc4, 0xaa, 0x3b,
+ 0x63, 0x78, 0x26, 0xa8, 0x7f, 0xe8, 0xcf, 0xa4,
+ 0x42, 0x82, 0xe9, 0x2c, 0xb1, 0x61, 0x5a, 0xf3,
+ 0xa2, 0x8e, 0x53, 0xbc, 0x74, 0xc7, 0xcb, 0xa1,
+ 0xa0, 0x97, 0x7b, 0xe9, 0x06, 0x5d, 0x0c, 0x1a,
+ 0x5d, 0xec, 0x6c, 0x54, 0xae, 0x38, 0xd3, 0x7f,
+ 0x37, 0xaa, 0x35, 0x28, 0x3e, 0x04, 0x8e, 0x55,
+ 0x30, 0xa8, 0x5c, 0x4e, 0x7a, 0x29, 0xd7, 0xb9,
+ 0x2e, 0xc0, 0xc3, 0x16, 0x9c, 0xdf, 0x2a, 0x80,
+ 0x5c, 0x76, 0x04, 0xbc, 0xe6, 0x00, 0x49, 0xb9,
+ 0xfb, 0x7b, 0x8e, 0xaa, 0xc1, 0x0f, 0x51, 0xae,
+ 0x23, 0x79, 0x4c, 0xeb, 0xa6, 0x8b, 0xb5, 0x81,
+ 0x12, 0xe2, 0x93, 0xb9, 0xb6, 0x92, 0xca, 0x72,
+ 0x1b, 0x37, 0xc6, 0x62, 0xf8, 0x57, 0x4e, 0xd4,
+ 0xdb, 0xa6, 0xf8, 0x8e, 0x17, 0x08, 0x81, 0xc8,
+ 0x2c, 0xdd, 0xc1, 0x03, 0x4a, 0x0c, 0xa7, 0xe2,
+ 0x84, 0xbf, 0x09, 0x62, 0xb6, 0xb2, 0x62, 0x92,
+ 0xd8, 0x36, 0xfa, 0x9f, 0x73, 0xc1, 0xac, 0x77,
+ 0x0e, 0xef, 0x0f, 0x2d, 0x3a, 0x1e, 0xaf, 0x61,
+ 0xd3, 0xe0, 0x35, 0x55, 0xfd, 0x42, 0x4e, 0xed,
+ 0xd6, 0x7e, 0x18, 0xa1, 0x80, 0x94, 0xf8, 0x88,
+};
+
+static const uint8_t aes_xts_256_vec7_ctxt[SECSIZE] = {
+ 0xd5, 0x5f, 0x68, 0x4f, 0x81, 0xf4, 0x42, 0x6e,
+ 0x9f, 0xde, 0x92, 0xa5, 0xff, 0x02, 0xdf, 0x2a,
+ 0xc8, 0x96, 0xaf, 0x63, 0x96, 0x28, 0x88, 0xa9,
+ 0x79, 0x10, 0xc1, 0x37, 0x9e, 0x20, 0xb0, 0xa3,
+ 0xb1, 0xdb, 0x61, 0x3f, 0xb7, 0xfe, 0x2e, 0x07,
+ 0x00, 0x43, 0x29, 0xea, 0x5c, 0x22, 0xbf, 0xd3,
+ 0x3e, 0x3d, 0xbe, 0x4c, 0xf5, 0x8c, 0xc6, 0x08,
+ 0xc2, 0xc2, 0x6c, 0x19, 0xa2, 0xe2, 0xfe, 0x22,
+ 0xf9, 0x87, 0x32, 0xc2, 0xb5, 0xcb, 0x84, 0x4c,
+ 0xc6, 0xc0, 0x70, 0x2d, 0x91, 0xe1, 0xd5, 0x0f,
+ 0xc4, 0x38, 0x2a, 0x7e, 0xba, 0x56, 0x35, 0xcd,
+ 0x60, 0x24, 0x32, 0xa2, 0x30, 0x6a, 0xc4, 0xce,
+ 0x82, 0xf8, 0xd7, 0x0c, 0x8d, 0x9b, 0xc1, 0x5f,
+ 0x91, 0x8f, 0xe7, 0x1e, 0x74, 0xc6, 0x22, 0xd5,
+ 0xcf, 0x71, 0x17, 0x8b, 0xf6, 0xe0, 0xb9, 0xcc,
+ 0x9f, 0x2b, 0x41, 0xdd, 0x8d, 0xbe, 0x44, 0x1c,
+ 0x41, 0xcd, 0x0c, 0x73, 0xa6, 0xdc, 0x47, 0xa3,
+ 0x48, 0xf6, 0x70, 0x2f, 0x9d, 0x0e, 0x9b, 0x1b,
+ 0x14, 0x31, 0xe9, 0x48, 0xe2, 0x99, 0xb9, 0xec,
+ 0x22, 0x72, 0xab, 0x2c, 0x5f, 0x0c, 0x7b, 0xe8,
+ 0x6a, 0xff, 0xa5, 0xde, 0xc8, 0x7a, 0x0b, 0xee,
+ 0x81, 0xd3, 0xd5, 0x00, 0x07, 0xed, 0xaa, 0x2b,
+ 0xcf, 0xcc, 0xb3, 0x56, 0x05, 0x15, 0x5f, 0xf3,
+ 0x6e, 0xd8, 0xed, 0xd4, 0xa4, 0x0d, 0xcd, 0x4b,
+ 0x24, 0x3a, 0xcd, 0x11, 0xb2, 0xb9, 0x87, 0xbd,
+ 0xbf, 0xaf, 0x91, 0xa7, 0xca, 0xc2, 0x7e, 0x9c,
+ 0x5a, 0xea, 0x52, 0x5e, 0xe5, 0x3d, 0xe7, 0xb2,
+ 0xd3, 0x33, 0x2c, 0x86, 0x44, 0x40, 0x2b, 0x82,
+ 0x3e, 0x94, 0xa7, 0xdb, 0x26, 0x27, 0x6d, 0x2d,
+ 0x23, 0xaa, 0x07, 0x18, 0x0f, 0x76, 0xb4, 0xfd,
+ 0x29, 0xb9, 0xc0, 0x82, 0x30, 0x99, 0xc9, 0xd6,
+ 0x2c, 0x51, 0x98, 0x80, 0xae, 0xe7, 0xe9, 0x69,
+ 0x76, 0x17, 0xc1, 0x49, 0x7d, 0x47, 0xbf, 0x3e,
+ 0x57, 0x19, 0x50, 0x31, 0x14, 0x21, 0xb6, 0xb7,
+ 0x34, 0xd3, 0x8b, 0x0d, 0xb9, 0x1e, 0xb8, 0x53,
+ 0x31, 0xb9, 0x1e, 0xa9, 0xf6, 0x15, 0x30, 0xf5,
+ 0x45, 0x12, 0xa5, 0xa5, 0x2a, 0x4b, 0xad, 0x58,
+ 0x9e, 0xb6, 0x97, 0x81, 0xd5, 0x37, 0xf2, 0x32,
+ 0x97, 0xbb, 0x45, 0x9b, 0xda, 0xd2, 0x94, 0x8a,
+ 0x29, 0xe1, 0x55, 0x0b, 0xf4, 0x78, 0x7e, 0x0b,
+ 0xe9, 0x5b, 0xb1, 0x73, 0xcf, 0x5f, 0xab, 0x17,
+ 0xda, 0xb7, 0xa1, 0x3a, 0x05, 0x2a, 0x63, 0x45,
+ 0x3d, 0x97, 0xcc, 0xec, 0x1a, 0x32, 0x19, 0x54,
+ 0x88, 0x6b, 0x7a, 0x12, 0x99, 0xfa, 0xae, 0xec,
+ 0xae, 0x35, 0xc6, 0xea, 0xac, 0xa7, 0x53, 0xb0,
+ 0x41, 0xb5, 0xe5, 0xf0, 0x93, 0xbf, 0x83, 0x39,
+ 0x7f, 0xd2, 0x1d, 0xd6, 0xb3, 0x01, 0x20, 0x66,
+ 0xfc, 0xc0, 0x58, 0xcc, 0x32, 0xc3, 0xb0, 0x9d,
+ 0x75, 0x62, 0xde, 0xe2, 0x95, 0x09, 0xb5, 0x83,
+ 0x93, 0x92, 0xc9, 0xff, 0x05, 0xf5, 0x1f, 0x31,
+ 0x66, 0xaa, 0xac, 0x4a, 0xc5, 0xf2, 0x38, 0x03,
+ 0x8a, 0x30, 0x45, 0xe6, 0xf7, 0x2e, 0x48, 0xef,
+ 0x0f, 0xe8, 0xbc, 0x67, 0x5e, 0x82, 0xc3, 0x18,
+ 0xa2, 0x68, 0xe4, 0x39, 0x70, 0x27, 0x1b, 0xf1,
+ 0x19, 0xb8, 0x1b, 0xf6, 0xa9, 0x82, 0x74, 0x65,
+ 0x54, 0xf8, 0x4e, 0x72, 0xb9, 0xf0, 0x02, 0x80,
+ 0xa3, 0x20, 0xa0, 0x81, 0x42, 0x92, 0x3c, 0x23,
+ 0xc8, 0x83, 0x42, 0x3f, 0xf9, 0x49, 0x82, 0x7f,
+ 0x29, 0xbb, 0xac, 0xdc, 0x1c, 0xcd, 0xb0, 0x49,
+ 0x38, 0xce, 0x60, 0x98, 0xc9, 0x5b, 0xa6, 0xb3,
+ 0x25, 0x28, 0xf4, 0xef, 0x78, 0xee, 0xd7, 0x78,
+ 0xb2, 0xe1, 0x22, 0xdd, 0xfd, 0x1c, 0xbd, 0xd1,
+ 0x1d, 0x1c, 0x0a, 0x67, 0x83, 0xe0, 0x11, 0xfc,
+ 0x53, 0x6d, 0x63, 0xd0, 0x53, 0x26, 0x06, 0x37,
+};
+
+/*
+ * Vector 8 from IEEE 1619/D16, blkno 0xfe.
+ */
+static const uint8_t aes_xts_256_vec8_ptxt[SECSIZE] = {
+ 0xd5, 0x5f, 0x68, 0x4f, 0x81, 0xf4, 0x42, 0x6e,
+ 0x9f, 0xde, 0x92, 0xa5, 0xff, 0x02, 0xdf, 0x2a,
+ 0xc8, 0x96, 0xaf, 0x63, 0x96, 0x28, 0x88, 0xa9,
+ 0x79, 0x10, 0xc1, 0x37, 0x9e, 0x20, 0xb0, 0xa3,
+ 0xb1, 0xdb, 0x61, 0x3f, 0xb7, 0xfe, 0x2e, 0x07,
+ 0x00, 0x43, 0x29, 0xea, 0x5c, 0x22, 0xbf, 0xd3,
+ 0x3e, 0x3d, 0xbe, 0x4c, 0xf5, 0x8c, 0xc6, 0x08,
+ 0xc2, 0xc2, 0x6c, 0x19, 0xa2, 0xe2, 0xfe, 0x22,
+ 0xf9, 0x87, 0x32, 0xc2, 0xb5, 0xcb, 0x84, 0x4c,
+ 0xc6, 0xc0, 0x70, 0x2d, 0x91, 0xe1, 0xd5, 0x0f,
+ 0xc4, 0x38, 0x2a, 0x7e, 0xba, 0x56, 0x35, 0xcd,
+ 0x60, 0x24, 0x32, 0xa2, 0x30, 0x6a, 0xc4, 0xce,
+ 0x82, 0xf8, 0xd7, 0x0c, 0x8d, 0x9b, 0xc1, 0x5f,
+ 0x91, 0x8f, 0xe7, 0x1e, 0x74, 0xc6, 0x22, 0xd5,
+ 0xcf, 0x71, 0x17, 0x8b, 0xf6, 0xe0, 0xb9, 0xcc,
+ 0x9f, 0x2b, 0x41, 0xdd, 0x8d, 0xbe, 0x44, 0x1c,
+ 0x41, 0xcd, 0x0c, 0x73, 0xa6, 0xdc, 0x47, 0xa3,
+ 0x48, 0xf6, 0x70, 0x2f, 0x9d, 0x0e, 0x9b, 0x1b,
+ 0x14, 0x31, 0xe9, 0x48, 0xe2, 0x99, 0xb9, 0xec,
+ 0x22, 0x72, 0xab, 0x2c, 0x5f, 0x0c, 0x7b, 0xe8,
+ 0x6a, 0xff, 0xa5, 0xde, 0xc8, 0x7a, 0x0b, 0xee,
+ 0x81, 0xd3, 0xd5, 0x00, 0x07, 0xed, 0xaa, 0x2b,
+ 0xcf, 0xcc, 0xb3, 0x56, 0x05, 0x15, 0x5f, 0xf3,
+ 0x6e, 0xd8, 0xed, 0xd4, 0xa4, 0x0d, 0xcd, 0x4b,
+ 0x24, 0x3a, 0xcd, 0x11, 0xb2, 0xb9, 0x87, 0xbd,
+ 0xbf, 0xaf, 0x91, 0xa7, 0xca, 0xc2, 0x7e, 0x9c,
+ 0x5a, 0xea, 0x52, 0x5e, 0xe5, 0x3d, 0xe7, 0xb2,
+ 0xd3, 0x33, 0x2c, 0x86, 0x44, 0x40, 0x2b, 0x82,
+ 0x3e, 0x94, 0xa7, 0xdb, 0x26, 0x27, 0x6d, 0x2d,
+ 0x23, 0xaa, 0x07, 0x18, 0x0f, 0x76, 0xb4, 0xfd,
+ 0x29, 0xb9, 0xc0, 0x82, 0x30, 0x99, 0xc9, 0xd6,
+ 0x2c, 0x51, 0x98, 0x80, 0xae, 0xe7, 0xe9, 0x69,
+ 0x76, 0x17, 0xc1, 0x49, 0x7d, 0x47, 0xbf, 0x3e,
+ 0x57, 0x19, 0x50, 0x31, 0x14, 0x21, 0xb6, 0xb7,
+ 0x34, 0xd3, 0x8b, 0x0d, 0xb9, 0x1e, 0xb8, 0x53,
+ 0x31, 0xb9, 0x1e, 0xa9, 0xf6, 0x15, 0x30, 0xf5,
+ 0x45, 0x12, 0xa5, 0xa5, 0x2a, 0x4b, 0xad, 0x58,
+ 0x9e, 0xb6, 0x97, 0x81, 0xd5, 0x37, 0xf2, 0x32,
+ 0x97, 0xbb, 0x45, 0x9b, 0xda, 0xd2, 0x94, 0x8a,
+ 0x29, 0xe1, 0x55, 0x0b, 0xf4, 0x78, 0x7e, 0x0b,
+ 0xe9, 0x5b, 0xb1, 0x73, 0xcf, 0x5f, 0xab, 0x17,
+ 0xda, 0xb7, 0xa1, 0x3a, 0x05, 0x2a, 0x63, 0x45,
+ 0x3d, 0x97, 0xcc, 0xec, 0x1a, 0x32, 0x19, 0x54,
+ 0x88, 0x6b, 0x7a, 0x12, 0x99, 0xfa, 0xae, 0xec,
+ 0xae, 0x35, 0xc6, 0xea, 0xac, 0xa7, 0x53, 0xb0,
+ 0x41, 0xb5, 0xe5, 0xf0, 0x93, 0xbf, 0x83, 0x39,
+ 0x7f, 0xd2, 0x1d, 0xd6, 0xb3, 0x01, 0x20, 0x66,
+ 0xfc, 0xc0, 0x58, 0xcc, 0x32, 0xc3, 0xb0, 0x9d,
+ 0x75, 0x62, 0xde, 0xe2, 0x95, 0x09, 0xb5, 0x83,
+ 0x93, 0x92, 0xc9, 0xff, 0x05, 0xf5, 0x1f, 0x31,
+ 0x66, 0xaa, 0xac, 0x4a, 0xc5, 0xf2, 0x38, 0x03,
+ 0x8a, 0x30, 0x45, 0xe6, 0xf7, 0x2e, 0x48, 0xef,
+ 0x0f, 0xe8, 0xbc, 0x67, 0x5e, 0x82, 0xc3, 0x18,
+ 0xa2, 0x68, 0xe4, 0x39, 0x70, 0x27, 0x1b, 0xf1,
+ 0x19, 0xb8, 0x1b, 0xf6, 0xa9, 0x82, 0x74, 0x65,
+ 0x54, 0xf8, 0x4e, 0x72, 0xb9, 0xf0, 0x02, 0x80,
+ 0xa3, 0x20, 0xa0, 0x81, 0x42, 0x92, 0x3c, 0x23,
+ 0xc8, 0x83, 0x42, 0x3f, 0xf9, 0x49, 0x82, 0x7f,
+ 0x29, 0xbb, 0xac, 0xdc, 0x1c, 0xcd, 0xb0, 0x49,
+ 0x38, 0xce, 0x60, 0x98, 0xc9, 0x5b, 0xa6, 0xb3,
+ 0x25, 0x28, 0xf4, 0xef, 0x78, 0xee, 0xd7, 0x78,
+ 0xb2, 0xe1, 0x22, 0xdd, 0xfd, 0x1c, 0xbd, 0xd1,
+ 0x1d, 0x1c, 0x0a, 0x67, 0x83, 0xe0, 0x11, 0xfc,
+ 0x53, 0x6d, 0x63, 0xd0, 0x53, 0x26, 0x06, 0x37,
+};
+
+static const uint8_t aes_xts_256_vec8_ctxt[SECSIZE] = {
+ 0x72, 0xef, 0xc1, 0xeb, 0xfe, 0x1e, 0xe2, 0x59,
+ 0x75, 0xa6, 0xeb, 0x3a, 0xa8, 0x58, 0x9d, 0xda,
+ 0x2b, 0x26, 0x1f, 0x1c, 0x85, 0xbd, 0xab, 0x44,
+ 0x2a, 0x9e, 0x5b, 0x2d, 0xd1, 0xd7, 0xc3, 0x95,
+ 0x7a, 0x16, 0xfc, 0x08, 0xe5, 0x26, 0xd4, 0xb1,
+ 0x22, 0x3f, 0x1b, 0x12, 0x32, 0xa1, 0x1a, 0xf2,
+ 0x74, 0xc3, 0xd7, 0x0d, 0xac, 0x57, 0xf8, 0x3e,
+ 0x09, 0x83, 0xc4, 0x98, 0xf1, 0xa6, 0xf1, 0xae,
+ 0xcb, 0x02, 0x1c, 0x3e, 0x70, 0x08, 0x5a, 0x1e,
+ 0x52, 0x7f, 0x1c, 0xe4, 0x1e, 0xe5, 0x91, 0x1a,
+ 0x82, 0x02, 0x01, 0x61, 0x52, 0x9c, 0xd8, 0x27,
+ 0x73, 0x76, 0x2d, 0xaf, 0x54, 0x59, 0xde, 0x94,
+ 0xa0, 0xa8, 0x2a, 0xda, 0xe7, 0xe1, 0x70, 0x3c,
+ 0x80, 0x85, 0x43, 0xc2, 0x9e, 0xd6, 0xfb, 0x32,
+ 0xd9, 0xe0, 0x04, 0x32, 0x7c, 0x13, 0x55, 0x18,
+ 0x0c, 0x99, 0x5a, 0x07, 0x74, 0x14, 0x93, 0xa0,
+ 0x9c, 0x21, 0xba, 0x01, 0xa3, 0x87, 0x88, 0x2d,
+ 0xa4, 0xf6, 0x25, 0x34, 0xb8, 0x7b, 0xb1, 0x5d,
+ 0x60, 0xd1, 0x97, 0x20, 0x1c, 0x0f, 0xd3, 0xbf,
+ 0x30, 0xc1, 0x50, 0x0a, 0x3e, 0xcf, 0xec, 0xdd,
+ 0x66, 0xd8, 0x72, 0x1f, 0x90, 0xbc, 0xc4, 0xc1,
+ 0x7e, 0xe9, 0x25, 0xc6, 0x1b, 0x0a, 0x03, 0x72,
+ 0x7a, 0x9c, 0x0d, 0x5f, 0x5c, 0xa4, 0x62, 0xfb,
+ 0xfa, 0x0a, 0xf1, 0xc2, 0x51, 0x3a, 0x9d, 0x9d,
+ 0x4b, 0x53, 0x45, 0xbd, 0x27, 0xa5, 0xf6, 0xe6,
+ 0x53, 0xf7, 0x51, 0x69, 0x3e, 0x6b, 0x6a, 0x2b,
+ 0x8e, 0xad, 0x57, 0xd5, 0x11, 0xe0, 0x0e, 0x58,
+ 0xc4, 0x5b, 0x7b, 0x8d, 0x00, 0x5a, 0xf7, 0x92,
+ 0x88, 0xf5, 0xc7, 0xc2, 0x2f, 0xd4, 0xf1, 0xbf,
+ 0x7a, 0x89, 0x8b, 0x03, 0xa5, 0x63, 0x4c, 0x6a,
+ 0x1a, 0xe3, 0xf9, 0xfa, 0xe5, 0xde, 0x4f, 0x29,
+ 0x6a, 0x28, 0x96, 0xb2, 0x3e, 0x7e, 0xd4, 0x3e,
+ 0xd1, 0x4f, 0xa5, 0xa2, 0x80, 0x3f, 0x4d, 0x28,
+ 0xf0, 0xd3, 0xff, 0xcf, 0x24, 0x75, 0x76, 0x77,
+ 0xae, 0xbd, 0xb4, 0x7b, 0xb3, 0x88, 0x37, 0x87,
+ 0x08, 0x94, 0x8a, 0x8d, 0x41, 0x26, 0xed, 0x18,
+ 0x39, 0xe0, 0xda, 0x29, 0xa5, 0x37, 0xa8, 0xc1,
+ 0x98, 0xb3, 0xc6, 0x6a, 0xb0, 0x07, 0x12, 0xdd,
+ 0x26, 0x16, 0x74, 0xbf, 0x45, 0xa7, 0x3d, 0x67,
+ 0xf7, 0x69, 0x14, 0xf8, 0x30, 0xca, 0x01, 0x4b,
+ 0x65, 0x59, 0x6f, 0x27, 0xe4, 0xcf, 0x62, 0xde,
+ 0x66, 0x12, 0x5a, 0x55, 0x66, 0xdf, 0x99, 0x75,
+ 0x15, 0x56, 0x28, 0xb4, 0x00, 0xfb, 0xfb, 0x3a,
+ 0x29, 0x04, 0x0e, 0xd5, 0x0f, 0xaf, 0xfd, 0xbb,
+ 0x18, 0xae, 0xce, 0x7c, 0x5c, 0x44, 0x69, 0x32,
+ 0x60, 0xaa, 0xb3, 0x86, 0xc0, 0xa3, 0x7b, 0x11,
+ 0xb1, 0x14, 0xf1, 0xc4, 0x15, 0xae, 0xbb, 0x65,
+ 0x3b, 0xe4, 0x68, 0x17, 0x94, 0x28, 0xd4, 0x3a,
+ 0x4d, 0x8b, 0xc3, 0xec, 0x38, 0x81, 0x3e, 0xca,
+ 0x30, 0xa1, 0x3c, 0xf1, 0xbb, 0x18, 0xd5, 0x24,
+ 0xf1, 0x99, 0x2d, 0x44, 0xd8, 0xb1, 0xa4, 0x2e,
+ 0xa3, 0x0b, 0x22, 0xe6, 0xc9, 0x5b, 0x19, 0x9d,
+ 0x8d, 0x18, 0x2f, 0x88, 0x40, 0xb0, 0x9d, 0x05,
+ 0x95, 0x85, 0xc3, 0x1a, 0xd6, 0x91, 0xfa, 0x06,
+ 0x19, 0xff, 0x03, 0x8a, 0xca, 0x2c, 0x39, 0xa9,
+ 0x43, 0x42, 0x11, 0x57, 0x36, 0x17, 0x17, 0xc4,
+ 0x9d, 0x32, 0x20, 0x28, 0xa7, 0x46, 0x48, 0x11,
+ 0x3b, 0xd8, 0xc9, 0xd7, 0xec, 0x77, 0xcf, 0x3c,
+ 0x89, 0xc1, 0xec, 0x87, 0x18, 0xce, 0xff, 0x85,
+ 0x16, 0xd9, 0x6b, 0x34, 0xc3, 0xc6, 0x14, 0xf1,
+ 0x06, 0x99, 0xc9, 0xab, 0xc4, 0xed, 0x04, 0x11,
+ 0x50, 0x62, 0x23, 0xbe, 0xa1, 0x6a, 0xf3, 0x5c,
+ 0x88, 0x3a, 0xcc, 0xdb, 0xe1, 0x10, 0x4e, 0xef,
+ 0x0c, 0xfd, 0xb5, 0x4e, 0x12, 0xfb, 0x23, 0x0a,
+};
+
+/*
+ * Vector 9 from IEEE 1619/D16, blkno 0xff.
+ */
+static const uint8_t aes_xts_256_vec9_ptxt[SECSIZE] = {
+ 0x72, 0xef, 0xc1, 0xeb, 0xfe, 0x1e, 0xe2, 0x59,
+ 0x75, 0xa6, 0xeb, 0x3a, 0xa8, 0x58, 0x9d, 0xda,
+ 0x2b, 0x26, 0x1f, 0x1c, 0x85, 0xbd, 0xab, 0x44,
+ 0x2a, 0x9e, 0x5b, 0x2d, 0xd1, 0xd7, 0xc3, 0x95,
+ 0x7a, 0x16, 0xfc, 0x08, 0xe5, 0x26, 0xd4, 0xb1,
+ 0x22, 0x3f, 0x1b, 0x12, 0x32, 0xa1, 0x1a, 0xf2,
+ 0x74, 0xc3, 0xd7, 0x0d, 0xac, 0x57, 0xf8, 0x3e,
+ 0x09, 0x83, 0xc4, 0x98, 0xf1, 0xa6, 0xf1, 0xae,
+ 0xcb, 0x02, 0x1c, 0x3e, 0x70, 0x08, 0x5a, 0x1e,
+ 0x52, 0x7f, 0x1c, 0xe4, 0x1e, 0xe5, 0x91, 0x1a,
+ 0x82, 0x02, 0x01, 0x61, 0x52, 0x9c, 0xd8, 0x27,
+ 0x73, 0x76, 0x2d, 0xaf, 0x54, 0x59, 0xde, 0x94,
+ 0xa0, 0xa8, 0x2a, 0xda, 0xe7, 0xe1, 0x70, 0x3c,
+ 0x80, 0x85, 0x43, 0xc2, 0x9e, 0xd6, 0xfb, 0x32,
+ 0xd9, 0xe0, 0x04, 0x32, 0x7c, 0x13, 0x55, 0x18,
+ 0x0c, 0x99, 0x5a, 0x07, 0x74, 0x14, 0x93, 0xa0,
+ 0x9c, 0x21, 0xba, 0x01, 0xa3, 0x87, 0x88, 0x2d,
+ 0xa4, 0xf6, 0x25, 0x34, 0xb8, 0x7b, 0xb1, 0x5d,
+ 0x60, 0xd1, 0x97, 0x20, 0x1c, 0x0f, 0xd3, 0xbf,
+ 0x30, 0xc1, 0x50, 0x0a, 0x3e, 0xcf, 0xec, 0xdd,
+ 0x66, 0xd8, 0x72, 0x1f, 0x90, 0xbc, 0xc4, 0xc1,
+ 0x7e, 0xe9, 0x25, 0xc6, 0x1b, 0x0a, 0x03, 0x72,
+ 0x7a, 0x9c, 0x0d, 0x5f, 0x5c, 0xa4, 0x62, 0xfb,
+ 0xfa, 0x0a, 0xf1, 0xc2, 0x51, 0x3a, 0x9d, 0x9d,
+ 0x4b, 0x53, 0x45, 0xbd, 0x27, 0xa5, 0xf6, 0xe6,
+ 0x53, 0xf7, 0x51, 0x69, 0x3e, 0x6b, 0x6a, 0x2b,
+ 0x8e, 0xad, 0x57, 0xd5, 0x11, 0xe0, 0x0e, 0x58,
+ 0xc4, 0x5b, 0x7b, 0x8d, 0x00, 0x5a, 0xf7, 0x92,
+ 0x88, 0xf5, 0xc7, 0xc2, 0x2f, 0xd4, 0xf1, 0xbf,
+ 0x7a, 0x89, 0x8b, 0x03, 0xa5, 0x63, 0x4c, 0x6a,
+ 0x1a, 0xe3, 0xf9, 0xfa, 0xe5, 0xde, 0x4f, 0x29,
+ 0x6a, 0x28, 0x96, 0xb2, 0x3e, 0x7e, 0xd4, 0x3e,
+ 0xd1, 0x4f, 0xa5, 0xa2, 0x80, 0x3f, 0x4d, 0x28,
+ 0xf0, 0xd3, 0xff, 0xcf, 0x24, 0x75, 0x76, 0x77,
+ 0xae, 0xbd, 0xb4, 0x7b, 0xb3, 0x88, 0x37, 0x87,
+ 0x08, 0x94, 0x8a, 0x8d, 0x41, 0x26, 0xed, 0x18,
+ 0x39, 0xe0, 0xda, 0x29, 0xa5, 0x37, 0xa8, 0xc1,
+ 0x98, 0xb3, 0xc6, 0x6a, 0xb0, 0x07, 0x12, 0xdd,
+ 0x26, 0x16, 0x74, 0xbf, 0x45, 0xa7, 0x3d, 0x67,
+ 0xf7, 0x69, 0x14, 0xf8, 0x30, 0xca, 0x01, 0x4b,
+ 0x65, 0x59, 0x6f, 0x27, 0xe4, 0xcf, 0x62, 0xde,
+ 0x66, 0x12, 0x5a, 0x55, 0x66, 0xdf, 0x99, 0x75,
+ 0x15, 0x56, 0x28, 0xb4, 0x00, 0xfb, 0xfb, 0x3a,
+ 0x29, 0x04, 0x0e, 0xd5, 0x0f, 0xaf, 0xfd, 0xbb,
+ 0x18, 0xae, 0xce, 0x7c, 0x5c, 0x44, 0x69, 0x32,
+ 0x60, 0xaa, 0xb3, 0x86, 0xc0, 0xa3, 0x7b, 0x11,
+ 0xb1, 0x14, 0xf1, 0xc4, 0x15, 0xae, 0xbb, 0x65,
+ 0x3b, 0xe4, 0x68, 0x17, 0x94, 0x28, 0xd4, 0x3a,
+ 0x4d, 0x8b, 0xc3, 0xec, 0x38, 0x81, 0x3e, 0xca,
+ 0x30, 0xa1, 0x3c, 0xf1, 0xbb, 0x18, 0xd5, 0x24,
+ 0xf1, 0x99, 0x2d, 0x44, 0xd8, 0xb1, 0xa4, 0x2e,
+ 0xa3, 0x0b, 0x22, 0xe6, 0xc9, 0x5b, 0x19, 0x9d,
+ 0x8d, 0x18, 0x2f, 0x88, 0x40, 0xb0, 0x9d, 0x05,
+ 0x95, 0x85, 0xc3, 0x1a, 0xd6, 0x91, 0xfa, 0x06,
+ 0x19, 0xff, 0x03, 0x8a, 0xca, 0x2c, 0x39, 0xa9,
+ 0x43, 0x42, 0x11, 0x57, 0x36, 0x17, 0x17, 0xc4,
+ 0x9d, 0x32, 0x20, 0x28, 0xa7, 0x46, 0x48, 0x11,
+ 0x3b, 0xd8, 0xc9, 0xd7, 0xec, 0x77, 0xcf, 0x3c,
+ 0x89, 0xc1, 0xec, 0x87, 0x18, 0xce, 0xff, 0x85,
+ 0x16, 0xd9, 0x6b, 0x34, 0xc3, 0xc6, 0x14, 0xf1,
+ 0x06, 0x99, 0xc9, 0xab, 0xc4, 0xed, 0x04, 0x11,
+ 0x50, 0x62, 0x23, 0xbe, 0xa1, 0x6a, 0xf3, 0x5c,
+ 0x88, 0x3a, 0xcc, 0xdb, 0xe1, 0x10, 0x4e, 0xef,
+ 0x0c, 0xfd, 0xb5, 0x4e, 0x12, 0xfb, 0x23, 0x0a,
+};
+
+static const uint8_t aes_xts_256_vec9_ctxt[SECSIZE] = {
+ 0x32, 0x60, 0xae, 0x8d, 0xad, 0x1f, 0x4a, 0x32,
+ 0xc5, 0xca, 0xfe, 0x3a, 0xb0, 0xeb, 0x95, 0x54,
+ 0x9d, 0x46, 0x1a, 0x67, 0xce, 0xb9, 0xe5, 0xaa,
+ 0x2d, 0x3a, 0xfb, 0x62, 0xde, 0xce, 0x05, 0x53,
+ 0x19, 0x3b, 0xa5, 0x0c, 0x75, 0xbe, 0x25, 0x1e,
+ 0x08, 0xd1, 0xd0, 0x8f, 0x10, 0x88, 0x57, 0x6c,
+ 0x7e, 0xfd, 0xfa, 0xaf, 0x3f, 0x45, 0x95, 0x59,
+ 0x57, 0x1e, 0x12, 0x51, 0x17, 0x53, 0xb0, 0x7a,
+ 0xf0, 0x73, 0xf3, 0x5d, 0xa0, 0x6a, 0xf0, 0xce,
+ 0x0b, 0xbf, 0x6b, 0x8f, 0x5c, 0xcc, 0x5c, 0xea,
+ 0x50, 0x0e, 0xc1, 0xb2, 0x11, 0xbd, 0x51, 0xf6,
+ 0x3b, 0x60, 0x6b, 0xf6, 0x52, 0x87, 0x96, 0xca,
+ 0x12, 0x17, 0x3b, 0xa3, 0x9b, 0x89, 0x35, 0xee,
+ 0x44, 0xcc, 0xce, 0x64, 0x6f, 0x90, 0xa4, 0x5b,
+ 0xf9, 0xcc, 0xc5, 0x67, 0xf0, 0xac, 0xe1, 0x3d,
+ 0xc2, 0xd5, 0x3e, 0xbe, 0xed, 0xc8, 0x1f, 0x58,
+ 0xb2, 0xe4, 0x11, 0x79, 0xdd, 0xdf, 0x0d, 0x5a,
+ 0x5c, 0x42, 0xf5, 0xd8, 0x50, 0x6c, 0x1a, 0x5d,
+ 0x2f, 0x8f, 0x59, 0xf3, 0xea, 0x87, 0x3c, 0xbc,
+ 0xd0, 0xee, 0xc1, 0x9a, 0xcb, 0xf3, 0x25, 0x42,
+ 0x3b, 0xd3, 0xdc, 0xb8, 0xc2, 0xb1, 0xbf, 0x1d,
+ 0x1e, 0xae, 0xd0, 0xeb, 0xa7, 0xf0, 0x69, 0x8e,
+ 0x43, 0x14, 0xfb, 0xeb, 0x2f, 0x15, 0x66, 0xd1,
+ 0xb9, 0x25, 0x30, 0x08, 0xcb, 0xcc, 0xf4, 0x5a,
+ 0x2b, 0x0d, 0x9c, 0x5c, 0x9c, 0x21, 0x47, 0x4f,
+ 0x40, 0x76, 0xe0, 0x2b, 0xe2, 0x60, 0x50, 0xb9,
+ 0x9d, 0xee, 0x4f, 0xd6, 0x8a, 0x4c, 0xf8, 0x90,
+ 0xe4, 0x96, 0xe4, 0xfc, 0xae, 0x7b, 0x70, 0xf9,
+ 0x4e, 0xa5, 0xa9, 0x06, 0x2d, 0xa0, 0xda, 0xeb,
+ 0xa1, 0x99, 0x3d, 0x2c, 0xcd, 0x1d, 0xd3, 0xc2,
+ 0x44, 0xb8, 0x42, 0x88, 0x01, 0x49, 0x5a, 0x58,
+ 0xb2, 0x16, 0x54, 0x7e, 0x7e, 0x84, 0x7c, 0x46,
+ 0xd1, 0xd7, 0x56, 0x37, 0x7b, 0x62, 0x42, 0xd2,
+ 0xe5, 0xfb, 0x83, 0xbf, 0x75, 0x2b, 0x54, 0xe0,
+ 0xdf, 0x71, 0xe8, 0x89, 0xf3, 0xa2, 0xbb, 0x0f,
+ 0x4c, 0x10, 0x80, 0x5b, 0xf3, 0xc5, 0x90, 0x37,
+ 0x6e, 0x3c, 0x24, 0xe2, 0x2f, 0xf5, 0x7f, 0x7f,
+ 0xa9, 0x65, 0x57, 0x73, 0x75, 0x32, 0x5c, 0xea,
+ 0x5d, 0x92, 0x0d, 0xb9, 0x4b, 0x9c, 0x33, 0x6b,
+ 0x45, 0x5f, 0x6e, 0x89, 0x4c, 0x01, 0x86, 0x6f,
+ 0xe9, 0xfb, 0xb8, 0xc8, 0xd3, 0xf7, 0x0a, 0x29,
+ 0x57, 0x28, 0x5f, 0x6d, 0xfb, 0x5d, 0xcd, 0x8c,
+ 0xbf, 0x54, 0x78, 0x2f, 0x8f, 0xe7, 0x76, 0x6d,
+ 0x47, 0x23, 0x81, 0x99, 0x13, 0xac, 0x77, 0x34,
+ 0x21, 0xe3, 0xa3, 0x10, 0x95, 0x86, 0x6b, 0xad,
+ 0x22, 0xc8, 0x6a, 0x60, 0x36, 0xb2, 0x51, 0x8b,
+ 0x20, 0x59, 0xb4, 0x22, 0x9d, 0x18, 0xc8, 0xc2,
+ 0xcc, 0xbd, 0xf9, 0x06, 0xc6, 0xcc, 0x6e, 0x82,
+ 0x46, 0x4e, 0xe5, 0x7b, 0xdd, 0xb0, 0xbe, 0xbc,
+ 0xb1, 0xdc, 0x64, 0x53, 0x25, 0xbf, 0xb3, 0xe6,
+ 0x65, 0xef, 0x72, 0x51, 0x08, 0x2c, 0x88, 0xeb,
+ 0xb1, 0xcf, 0x20, 0x3b, 0xd7, 0x79, 0xfd, 0xd3,
+ 0x86, 0x75, 0x71, 0x3c, 0x8d, 0xaa, 0xdd, 0x17,
+ 0xe1, 0xca, 0xbe, 0xe4, 0x32, 0xb0, 0x97, 0x87,
+ 0xb6, 0xdd, 0xf3, 0x30, 0x4e, 0x38, 0xb7, 0x31,
+ 0xb4, 0x5d, 0xf5, 0xdf, 0x51, 0xb7, 0x8f, 0xcf,
+ 0xb3, 0xd3, 0x24, 0x66, 0x02, 0x8d, 0x0b, 0xa3,
+ 0x65, 0x55, 0xe7, 0xe1, 0x1a, 0xb0, 0xee, 0x06,
+ 0x66, 0x06, 0x1d, 0x16, 0x45, 0xd9, 0x62, 0x44,
+ 0x4b, 0xc4, 0x7a, 0x38, 0x18, 0x89, 0x30, 0xa8,
+ 0x4b, 0x4d, 0x56, 0x13, 0x95, 0xc7, 0x3c, 0x08,
+ 0x70, 0x21, 0x92, 0x7c, 0xa6, 0x38, 0xb7, 0xaf,
+ 0xc8, 0xa8, 0x67, 0x9c, 0xcb, 0x84, 0xc2, 0x65,
+ 0x55, 0x44, 0x0e, 0xc7, 0xf1, 0x04, 0x45, 0xcd,
+};
+
+const struct testvec aes_xts_256_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = aes_xts_256_vec4_ptxt,
+ .ctxt = aes_xts_256_vec4_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = aes_xts_256_vec5_ptxt,
+ .ctxt = aes_xts_256_vec5_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = aes_xts_256_vec6_ptxt,
+ .ctxt = aes_xts_256_vec6_ctxt,
+ },
+ {
+ .blkno = 0xfd,
+ .ptxt = aes_xts_256_vec7_ptxt,
+ .ctxt = aes_xts_256_vec7_ctxt,
+ },
+ {
+ .blkno = 0xfe,
+ .ptxt = aes_xts_256_vec8_ptxt,
+ .ctxt = aes_xts_256_vec8_ctxt,
+ },
+ {
+ .blkno = 0xff,
+ .ptxt = aes_xts_256_vec9_ptxt,
+ .ctxt = aes_xts_256_vec9_ctxt,
+ },
+};
+
+/*
+ * Vector 10 from IEEE 1619/D16, blkno 0xff.
+ */
+static const uint8_t aes_xts_512_vec10_ptxt[SECSIZE] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+};
+
+static const uint8_t aes_xts_512_vec10_ctxt[SECSIZE] = {
+ 0x1c, 0x3b, 0x3a, 0x10, 0x2f, 0x77, 0x03, 0x86,
+ 0xe4, 0x83, 0x6c, 0x99, 0xe3, 0x70, 0xcf, 0x9b,
+ 0xea, 0x00, 0x80, 0x3f, 0x5e, 0x48, 0x23, 0x57,
+ 0xa4, 0xae, 0x12, 0xd4, 0x14, 0xa3, 0xe6, 0x3b,
+ 0x5d, 0x31, 0xe2, 0x76, 0xf8, 0xfe, 0x4a, 0x8d,
+ 0x66, 0xb3, 0x17, 0xf9, 0xac, 0x68, 0x3f, 0x44,
+ 0x68, 0x0a, 0x86, 0xac, 0x35, 0xad, 0xfc, 0x33,
+ 0x45, 0xbe, 0xfe, 0xcb, 0x4b, 0xb1, 0x88, 0xfd,
+ 0x57, 0x76, 0x92, 0x6c, 0x49, 0xa3, 0x09, 0x5e,
+ 0xb1, 0x08, 0xfd, 0x10, 0x98, 0xba, 0xec, 0x70,
+ 0xaa, 0xa6, 0x69, 0x99, 0xa7, 0x2a, 0x82, 0xf2,
+ 0x7d, 0x84, 0x8b, 0x21, 0xd4, 0xa7, 0x41, 0xb0,
+ 0xc5, 0xcd, 0x4d, 0x5f, 0xff, 0x9d, 0xac, 0x89,
+ 0xae, 0xba, 0x12, 0x29, 0x61, 0xd0, 0x3a, 0x75,
+ 0x71, 0x23, 0xe9, 0x87, 0x0f, 0x8a, 0xcf, 0x10,
+ 0x00, 0x02, 0x08, 0x87, 0x89, 0x14, 0x29, 0xca,
+ 0x2a, 0x3e, 0x7a, 0x7d, 0x7d, 0xf7, 0xb1, 0x03,
+ 0x55, 0x16, 0x5c, 0x8b, 0x9a, 0x6d, 0x0a, 0x7d,
+ 0xe8, 0xb0, 0x62, 0xc4, 0x50, 0x0d, 0xc4, 0xcd,
+ 0x12, 0x0c, 0x0f, 0x74, 0x18, 0xda, 0xe3, 0xd0,
+ 0xb5, 0x78, 0x1c, 0x34, 0x80, 0x3f, 0xa7, 0x54,
+ 0x21, 0xc7, 0x90, 0xdf, 0xe1, 0xde, 0x18, 0x34,
+ 0xf2, 0x80, 0xd7, 0x66, 0x7b, 0x32, 0x7f, 0x6c,
+ 0x8c, 0xd7, 0x55, 0x7e, 0x12, 0xac, 0x3a, 0x0f,
+ 0x93, 0xec, 0x05, 0xc5, 0x2e, 0x04, 0x93, 0xef,
+ 0x31, 0xa1, 0x2d, 0x3d, 0x92, 0x60, 0xf7, 0x9a,
+ 0x28, 0x9d, 0x6a, 0x37, 0x9b, 0xc7, 0x0c, 0x50,
+ 0x84, 0x14, 0x73, 0xd1, 0xa8, 0xcc, 0x81, 0xec,
+ 0x58, 0x3e, 0x96, 0x45, 0xe0, 0x7b, 0x8d, 0x96,
+ 0x70, 0x65, 0x5b, 0xa5, 0xbb, 0xcf, 0xec, 0xc6,
+ 0xdc, 0x39, 0x66, 0x38, 0x0a, 0xd8, 0xfe, 0xcb,
+ 0x17, 0xb6, 0xba, 0x02, 0x46, 0x9a, 0x02, 0x0a,
+ 0x84, 0xe1, 0x8e, 0x8f, 0x84, 0x25, 0x20, 0x70,
+ 0xc1, 0x3e, 0x9f, 0x1f, 0x28, 0x9b, 0xe5, 0x4f,
+ 0xbc, 0x48, 0x14, 0x57, 0x77, 0x8f, 0x61, 0x60,
+ 0x15, 0xe1, 0x32, 0x7a, 0x02, 0xb1, 0x40, 0xf1,
+ 0x50, 0x5e, 0xb3, 0x09, 0x32, 0x6d, 0x68, 0x37,
+ 0x8f, 0x83, 0x74, 0x59, 0x5c, 0x84, 0x9d, 0x84,
+ 0xf4, 0xc3, 0x33, 0xec, 0x44, 0x23, 0x88, 0x51,
+ 0x43, 0xcb, 0x47, 0xbd, 0x71, 0xc5, 0xed, 0xae,
+ 0x9b, 0xe6, 0x9a, 0x2f, 0xfe, 0xce, 0xb1, 0xbe,
+ 0xc9, 0xde, 0x24, 0x4f, 0xbe, 0x15, 0x99, 0x2b,
+ 0x11, 0xb7, 0x7c, 0x04, 0x0f, 0x12, 0xbd, 0x8f,
+ 0x6a, 0x97, 0x5a, 0x44, 0xa0, 0xf9, 0x0c, 0x29,
+ 0xa9, 0xab, 0xc3, 0xd4, 0xd8, 0x93, 0x92, 0x72,
+ 0x84, 0xc5, 0x87, 0x54, 0xcc, 0xe2, 0x94, 0x52,
+ 0x9f, 0x86, 0x14, 0xdc, 0xd2, 0xab, 0xa9, 0x91,
+ 0x92, 0x5f, 0xed, 0xc4, 0xae, 0x74, 0xff, 0xac,
+ 0x6e, 0x33, 0x3b, 0x93, 0xeb, 0x4a, 0xff, 0x04,
+ 0x79, 0xda, 0x9a, 0x41, 0x0e, 0x44, 0x50, 0xe0,
+ 0xdd, 0x7a, 0xe4, 0xc6, 0xe2, 0x91, 0x09, 0x00,
+ 0x57, 0x5d, 0xa4, 0x01, 0xfc, 0x07, 0x05, 0x9f,
+ 0x64, 0x5e, 0x8b, 0x7e, 0x9b, 0xfd, 0xef, 0x33,
+ 0x94, 0x30, 0x54, 0xff, 0x84, 0x01, 0x14, 0x93,
+ 0xc2, 0x7b, 0x34, 0x29, 0xea, 0xed, 0xb4, 0xed,
+ 0x53, 0x76, 0x44, 0x1a, 0x77, 0xed, 0x43, 0x85,
+ 0x1a, 0xd7, 0x7f, 0x16, 0xf5, 0x41, 0xdf, 0xd2,
+ 0x69, 0xd5, 0x0d, 0x6a, 0x5f, 0x14, 0xfb, 0x0a,
+ 0xab, 0x1c, 0xbb, 0x4c, 0x15, 0x50, 0xbe, 0x97,
+ 0xf7, 0xab, 0x40, 0x66, 0x19, 0x3c, 0x4c, 0xaa,
+ 0x77, 0x3d, 0xad, 0x38, 0x01, 0x4b, 0xd2, 0x09,
+ 0x2f, 0xa7, 0x55, 0xc8, 0x24, 0xbb, 0x5e, 0x54,
+ 0xc4, 0xf3, 0x6f, 0xfd, 0xa9, 0xfc, 0xea, 0x70,
+ 0xb9, 0xc6, 0xe6, 0x93, 0xe1, 0x48, 0xc1, 0x51,
+};
+
+/*
+ * Vector 11 from IEEE 1619/D16, blkno 0xffff.
+ */
+static const uint8_t aes_xts_512_vec11_ptxt[SECSIZE] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+};
+
+static const uint8_t aes_xts_512_vec11_ctxt[SECSIZE] = {
+ 0x77, 0xa3, 0x12, 0x51, 0x61, 0x8a, 0x15, 0xe6,
+ 0xb9, 0x2d, 0x1d, 0x66, 0xdf, 0xfe, 0x7b, 0x50,
+ 0xb5, 0x0b, 0xad, 0x55, 0x23, 0x05, 0xba, 0x02,
+ 0x17, 0xa6, 0x10, 0x68, 0x8e, 0xff, 0x7e, 0x11,
+ 0xe1, 0xd0, 0x22, 0x54, 0x38, 0xe0, 0x93, 0x24,
+ 0x2d, 0x6d, 0xb2, 0x74, 0xfd, 0xe8, 0x01, 0xd4,
+ 0xca, 0xe0, 0x6f, 0x20, 0x92, 0xc7, 0x28, 0xb2,
+ 0x47, 0x85, 0x59, 0xdf, 0x58, 0xe8, 0x37, 0xc2,
+ 0x46, 0x9e, 0xe4, 0xa4, 0xfa, 0x79, 0x4e, 0x4b,
+ 0xbc, 0x7f, 0x39, 0xbc, 0x02, 0x6e, 0x3c, 0xb7,
+ 0x2c, 0x33, 0xb0, 0x88, 0x8f, 0x25, 0xb4, 0xac,
+ 0xf5, 0x6a, 0x2a, 0x98, 0x04, 0xf1, 0xce, 0x6d,
+ 0x3d, 0x6e, 0x1d, 0xc6, 0xca, 0x18, 0x1d, 0x4b,
+ 0x54, 0x61, 0x79, 0xd5, 0x55, 0x44, 0xaa, 0x77,
+ 0x60, 0xc4, 0x0d, 0x06, 0x74, 0x15, 0x39, 0xc7,
+ 0xe3, 0xcd, 0x9d, 0x2f, 0x66, 0x50, 0xb2, 0x01,
+ 0x3f, 0xd0, 0xee, 0xb8, 0xc2, 0xb8, 0xe3, 0xd8,
+ 0xd2, 0x40, 0xcc, 0xae, 0x2d, 0x4c, 0x98, 0x32,
+ 0x0a, 0x74, 0x42, 0xe1, 0xc8, 0xd7, 0x5a, 0x42,
+ 0xd6, 0xe6, 0xcf, 0xa4, 0xc2, 0xec, 0xa1, 0x79,
+ 0x8d, 0x15, 0x8c, 0x7a, 0xec, 0xdf, 0x82, 0x49,
+ 0x0f, 0x24, 0xbb, 0x9b, 0x38, 0xe1, 0x08, 0xbc,
+ 0xda, 0x12, 0xc3, 0xfa, 0xf9, 0xa2, 0x11, 0x41,
+ 0xc3, 0x61, 0x3b, 0x58, 0x36, 0x7f, 0x92, 0x2a,
+ 0xaa, 0x26, 0xcd, 0x22, 0xf2, 0x3d, 0x70, 0x8d,
+ 0xae, 0x69, 0x9a, 0xd7, 0xcb, 0x40, 0xa8, 0xad,
+ 0x0b, 0x6e, 0x27, 0x84, 0x97, 0x3d, 0xcb, 0x60,
+ 0x56, 0x84, 0xc0, 0x8b, 0x8d, 0x69, 0x98, 0xc6,
+ 0x9a, 0xac, 0x04, 0x99, 0x21, 0x87, 0x1e, 0xbb,
+ 0x65, 0x30, 0x1a, 0x46, 0x19, 0xca, 0x80, 0xec,
+ 0xb4, 0x85, 0xa3, 0x1d, 0x74, 0x42, 0x23, 0xce,
+ 0x8d, 0xdc, 0x23, 0x94, 0x82, 0x8d, 0x6a, 0x80,
+ 0x47, 0x0c, 0x09, 0x2f, 0x5b, 0xa4, 0x13, 0xc3,
+ 0x37, 0x8f, 0xa6, 0x05, 0x42, 0x55, 0xc6, 0xf9,
+ 0xdf, 0x44, 0x95, 0x86, 0x2b, 0xbb, 0x32, 0x87,
+ 0x68, 0x1f, 0x93, 0x1b, 0x68, 0x7c, 0x88, 0x8a,
+ 0xbf, 0x84, 0x4d, 0xfc, 0x8f, 0xc2, 0x83, 0x31,
+ 0xe5, 0x79, 0x92, 0x8c, 0xd1, 0x2b, 0xd2, 0x39,
+ 0x0a, 0xe1, 0x23, 0xcf, 0x03, 0x81, 0x8d, 0x14,
+ 0xde, 0xdd, 0xe5, 0xc0, 0xc2, 0x4c, 0x8a, 0xb0,
+ 0x18, 0xbf, 0xca, 0x75, 0xca, 0x09, 0x6f, 0x2d,
+ 0x53, 0x1f, 0x3d, 0x16, 0x19, 0xe7, 0x85, 0xf1,
+ 0xad, 0xa4, 0x37, 0xca, 0xb9, 0x2e, 0x98, 0x05,
+ 0x58, 0xb3, 0xdc, 0xe1, 0x47, 0x4a, 0xfb, 0x75,
+ 0xbf, 0xed, 0xbf, 0x8f, 0xf5, 0x4c, 0xb2, 0x61,
+ 0x8e, 0x02, 0x44, 0xc9, 0xac, 0x0d, 0x3c, 0x66,
+ 0xfb, 0x51, 0x59, 0x8c, 0xd2, 0xdb, 0x11, 0xf9,
+ 0xbe, 0x39, 0x79, 0x1a, 0xbe, 0x44, 0x7c, 0x63,
+ 0x09, 0x4f, 0x7c, 0x45, 0x3b, 0x7f, 0xf8, 0x7c,
+ 0xb5, 0xbb, 0x36, 0xb7, 0xc7, 0x9e, 0xfb, 0x08,
+ 0x72, 0xd1, 0x70, 0x58, 0xb8, 0x3b, 0x15, 0xab,
+ 0x08, 0x66, 0xad, 0x8a, 0x58, 0x65, 0x6c, 0x5a,
+ 0x7e, 0x20, 0xdb, 0xdf, 0x30, 0x8b, 0x24, 0x61,
+ 0xd9, 0x7c, 0x0e, 0xc0, 0x02, 0x4a, 0x27, 0x15,
+ 0x05, 0x52, 0x49, 0xcf, 0x3b, 0x47, 0x8d, 0xdd,
+ 0x47, 0x40, 0xde, 0x65, 0x4f, 0x75, 0xca, 0x68,
+ 0x6e, 0x0d, 0x73, 0x45, 0xc6, 0x9e, 0xd5, 0x0c,
+ 0xdc, 0x2a, 0x8b, 0x33, 0x2b, 0x1f, 0x88, 0x24,
+ 0x10, 0x8a, 0xc9, 0x37, 0xeb, 0x05, 0x05, 0x85,
+ 0x60, 0x8e, 0xe7, 0x34, 0x09, 0x7f, 0xc0, 0x90,
+ 0x54, 0xfb, 0xff, 0x89, 0xee, 0xae, 0xea, 0x79,
+ 0x1f, 0x4a, 0x7a, 0xb1, 0xf9, 0x86, 0x82, 0x94,
+ 0xa4, 0xf9, 0xe2, 0x7b, 0x42, 0xaf, 0x81, 0x00,
+ 0xcb, 0x9d, 0x59, 0xce, 0xf9, 0x64, 0x58, 0x03,
+};
+
+const struct testvec aes_xts_512_vectors[] = {
+ {
+ .blkno = 0xff,
+ .ptxt = aes_xts_512_vec10_ptxt,
+ .ctxt = aes_xts_512_vec10_ctxt,
+ },
+ {
+ .blkno = 0xffff,
+ .ptxt = aes_xts_512_vec11_ptxt,
+ .ctxt = aes_xts_512_vec11_ctxt,
+ },
+};
+
+static int
+open_disk(const char *devpath, const char *imgpath, size_t size)
+{
+ int fd;
+
+ fd = open(imgpath, O_CREAT | O_RDWR | O_TRUNC, 0600);
+ if (fd < 0)
+ return -1;
+
+ if (ftruncate(fd, size) < 0)
+ goto fail;
+
+ if (rump_pub_etfs_register_withsize(devpath,
+ imgpath, RUMP_ETFS_BLK, 0, size) < 0) {
+ goto fail;
+ }
+
+ unlink(imgpath);
+ return fd;
+fail:
+ close(fd);
+ unlink(imgpath);
+ return -1;
+}
+
+static int
+open_cgd(int devno)
+{
+ char devpath[32];
+
+ sprintf(devpath, "/dev/rcgd%d%c", devno, getrawpartition() + 'a');
+
+ return rump_sys_open(devpath, O_RDWR, 0);
+}
+
+static int
+configure_cgd(int fd, const char *dkpath, const char *alg,
+ const char *ivmethod, const char *key, size_t keylen)
+{
+ struct cgd_ioctl ci;
+
+ memset(&ci, 0, sizeof(ci));
+ ci.ci_disk = dkpath;
+ ci.ci_alg = alg;
+ ci.ci_ivmethod = ivmethod;
+ ci.ci_keylen = 8 * keylen - 8; /* Exclude the NUL terminator. */
+ ci.ci_key = key;
+ ci.ci_blocksize = 128;
+
+ return rump_sys_ioctl(fd, CGDIOCSET, &ci);
+}
+
+static int
+unconfigure_cgd(int fd)
+{
+ struct cgd_ioctl ci;
+
+ return rump_sys_ioctl(fd, CGDIOCCLR, &ci);
+}
+
+static int
+write_testvec(int cgdfd, const struct testvec *tv)
+{
+ ssize_t written;
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ return -1;
+
+ written = rump_sys_write(cgdfd, tv->ptxt, SECSIZE);
+ if (written < 0)
+ return -1;
+ if (written != SECSIZE) {
+ errno = EDOM; /* Something distinct. */
+ return -1;
+ }
+
+ return 0;
+}
+
+static int
+read_testvec(int cgdfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (rump_sys_read(cgdfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ptxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+static int
+check_testvec(int dkfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (lseek(dkfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (read(dkfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ctxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+ATF_TC(cgd_aes_cbc_128_encblkno1);
+ATF_TC_HEAD(cgd_aes_cbc_128_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 128 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_128_encblkno1, tc)
+{
+ const char imgpath[] = "aes-cbc-128-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_128_key, sizeof(aes_cbc_128_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_1_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_1_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_1_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_1_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_128_key, sizeof(aes_cbc_128_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_128_encblkno8);
+ATF_TC_HEAD(cgd_aes_cbc_128_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 128 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_128_encblkno8, tc)
+{
+ const char imgpath[] = "aes-cbc-128-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_128_key, sizeof(aes_cbc_128_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_8_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_8_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_8_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_128_8_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_128_key, sizeof(aes_cbc_128_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_128_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_128_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_192_encblkno1);
+ATF_TC_HEAD(cgd_aes_cbc_192_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 192 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_192_encblkno1, tc)
+{
+ const char imgpath[] = "aes-cbc-192-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_192_key, sizeof(aes_cbc_192_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_1_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_1_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_1_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_1_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_192_key, sizeof(aes_cbc_192_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_192_encblkno8);
+ATF_TC_HEAD(cgd_aes_cbc_192_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 192 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_192_encblkno8, tc)
+{
+ const char imgpath[] = "aes-cbc-192-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_192_key, sizeof(aes_cbc_192_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_8_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_8_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_8_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_192_8_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_192_key, sizeof(aes_cbc_192_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_192_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_192_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_256_encblkno1);
+ATF_TC_HEAD(cgd_aes_cbc_256_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 256 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_256_encblkno1, tc)
+{
+ const char imgpath[] = "aes-cbc-256-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_256_key, sizeof(aes_cbc_256_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_1_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_1_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_1_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_1_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno1",
+ aes_cbc_256_key, sizeof(aes_cbc_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_cbc_256_encblkno8);
+ATF_TC_HEAD(cgd_aes_cbc_256_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test aes-cbc with 256 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_aes_cbc_256_encblkno8, tc)
+{
+ const char imgpath[] = "aes-cbc-256-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_256_key, sizeof(aes_cbc_256_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_8_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_8_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_8_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_cbc_256_8_vectors[3]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-cbc", "encblkno8",
+ aes_cbc_256_key, sizeof(aes_cbc_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_cbc_256_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_cbc_256_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_xts_256);
+ATF_TC_HEAD(cgd_aes_xts_256, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test aes-xts with 256 bits key");
+}
+
+ATF_TC_BODY(cgd_aes_xts_256, tc)
+{
+ const char imgpath[] = "aes-xts-256.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 256 * SECSIZE; /* Last blkno is 0xff. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-xts", "encblkno1",
+ aes_xts_256_key, sizeof(aes_xts_256_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[1]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[2]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[3]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[4]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_256_vectors[5]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-xts", "encblkno1",
+ aes_xts_256_key, sizeof(aes_xts_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[3]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[4]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_256_vectors[5]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[3]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[4]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_256_vectors[5]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_aes_xts_512);
+ATF_TC_HEAD(cgd_aes_xts_512, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test aes-xts with 512 bits key");
+}
+
+ATF_TC_BODY(cgd_aes_xts_512, tc)
+{
+ const char imgpath[] = "aes-xts-512.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 65536 * SECSIZE; /* Last blkno is 0xffff. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "aes-xts", "encblkno1",
+ aes_xts_512_key, sizeof(aes_xts_512_key)));
+
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_512_vectors[0]), -1);
+ CHECK_LIBC(write_testvec(cgdfd, &aes_xts_512_vectors[1]), -1);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "aes-xts", "encblkno1",
+ aes_xts_512_key, sizeof(aes_xts_512_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_512_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &aes_xts_512_vectors[1]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_512_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &aes_xts_512_vectors[1]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_128_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_128_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_192_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_192_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_256_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_aes_cbc_256_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_aes_xts_256);
+ ATF_TP_ADD_TC(tp, cgd_aes_xts_512);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/dev/cgd/t_cgd_blowfish.c b/contrib/netbsd-tests/dev/cgd/t_cgd_blowfish.c
new file mode 100644
index 0000000..958ebac
--- /dev/null
+++ b/contrib/netbsd-tests/dev/cgd/t_cgd_blowfish.c
@@ -0,0 +1,2341 @@
+/* $NetBSD: t_cgd_blowfish.c,v 1.1 2016/11/10 23:44:36 alnsn Exp $ */
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Alexander Nasonov.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/sysctl.h>
+
+#include <atf-c.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <util.h>
+
+#include <dev/cgdvar.h>
+
+#include <rump/rump.h>
+#include <rump/rump_syscalls.h>
+
+#include "../../h_macros.h"
+
+#define SECSIZE 512
+
+struct testvec {
+ unsigned int blkno;
+ const uint8_t *ptxt; /* PlainText */
+ const uint8_t *ctxt; /* CipherText */
+};
+
+/*
+ * 128 bits Blowfish key, NUL terminated.
+ */
+static const char bf_cbc_128_key[17] = {
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
+ 0
+};
+
+/*
+ * 256 bits Blowfish key, NUL terminated.
+ */
+static const char bf_cbc_256_key[33] = {
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, /* 89ABCDEF */
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 01234567 */
+ 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, /* 89abcdef */
+ 0
+};
+
+/*
+ * 448 bits Blowfish key, NUL terminated.
+ */
+static const char bf_cbc_448_key[57] = {
+ 0x3a, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* :ABCDEFG */
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* HIJKLMNO */
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* PQRSTUVW */
+ 0x58, 0x59, 0x5a, 0x7e, 0x3a, 0x61, 0x62, 0x63, /* XYZ~:abc */
+ 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, /* defghijk */
+ 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, /* lmnopqrs */
+ 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x23, /* tuvwxyz# */
+ 0
+};
+
+static const uint8_t bf_cbc_ptxt[SECSIZE] =
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop"
+ " abcdefghijklmnop";
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t bf_cbc_128_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x78, 0x53, 0x43, 0x2a, 0x08, 0xe7, 0x84, 0x3f,
+ 0xb7, 0x61, 0x9c, 0x17, 0x81, 0xbe, 0x38, 0xb9,
+ 0x65, 0x51, 0x68, 0xa2, 0x29, 0xd7, 0x45, 0xc9,
+ 0xee, 0x0e, 0x9d, 0xe1, 0x69, 0xc6, 0x81, 0x81,
+ 0xf3, 0x93, 0xa6, 0x62, 0xc9, 0x05, 0x2c, 0x1b,
+ 0x0e, 0x05, 0xca, 0xbe, 0x12, 0x25, 0x37, 0xd8,
+ 0x98, 0x66, 0xa2, 0xd3, 0xd0, 0x8a, 0x89, 0x57,
+ 0x44, 0x91, 0x1e, 0xe9, 0x07, 0x03, 0x5c, 0xa6,
+ 0xb8, 0x30, 0xf1, 0xc7, 0x8c, 0x66, 0x05, 0xb0,
+ 0x2d, 0xc3, 0xc3, 0xd7, 0x60, 0xef, 0x62, 0xd3,
+ 0x34, 0x9c, 0xa9, 0xd2, 0x0c, 0x1a, 0x9c, 0xfe,
+ 0x74, 0x92, 0xcb, 0x90, 0x80, 0xfa, 0x71, 0x5c,
+ 0xaa, 0x29, 0x39, 0xdd, 0x3b, 0x62, 0xa1, 0xfc,
+ 0xa5, 0x35, 0xcd, 0xa3, 0x29, 0x41, 0x1a, 0x03,
+ 0xf7, 0xe1, 0x36, 0xb2, 0xdc, 0x1a, 0xb3, 0x9f,
+ 0x46, 0xa3, 0xf7, 0xc3, 0xd1, 0x29, 0x83, 0xcf,
+ 0x0d, 0x88, 0x0b, 0xd1, 0xb7, 0xc7, 0x87, 0x21,
+ 0xb7, 0x1f, 0xe7, 0xa2, 0x8e, 0x5f, 0xac, 0x6b,
+ 0x49, 0x9c, 0x93, 0x6b, 0x6b, 0x05, 0x8e, 0x4c,
+ 0xbd, 0x31, 0x13, 0x5f, 0x4a, 0xd0, 0x35, 0x0c,
+ 0x67, 0x8f, 0xd0, 0x7a, 0xc9, 0xe3, 0x52, 0x50,
+ 0x4f, 0x85, 0x09, 0xf1, 0x27, 0xb9, 0xb1, 0x1e,
+ 0xe4, 0x6a, 0x40, 0xf6, 0x5a, 0x4f, 0x5f, 0xbe,
+ 0xab, 0xe8, 0xb9, 0xfe, 0xc7, 0x59, 0x6b, 0x0c,
+ 0xcd, 0x46, 0x4e, 0x90, 0x99, 0xde, 0xf7, 0x43,
+ 0xee, 0x6e, 0xb6, 0xae, 0xc2, 0x5e, 0x08, 0xbb,
+ 0xe9, 0x30, 0x2d, 0xb2, 0x91, 0xcc, 0xb9, 0xc7,
+ 0x58, 0xea, 0x35, 0xae, 0xa2, 0xd8, 0x00, 0xf7,
+ 0xc0, 0x01, 0xc4, 0x34, 0x2b, 0x34, 0x43, 0xae,
+ 0xeb, 0x27, 0xbc, 0x5c, 0x91, 0x5f, 0x5f, 0xc1,
+ 0x61, 0x42, 0x45, 0x68, 0x31, 0xbc, 0xce, 0xb4,
+ 0x5c, 0xd3, 0x07, 0xdf, 0x4e, 0x65, 0x65, 0x9d,
+ 0x2e, 0x26, 0x28, 0xfa, 0xcd, 0x53, 0x77, 0x6a,
+ 0x77, 0xad, 0x96, 0x0b, 0x1f, 0xea, 0x03, 0xc1,
+ 0xdd, 0xca, 0xe8, 0xfe, 0xe8, 0x36, 0x01, 0x61,
+ 0x72, 0xbb, 0xed, 0xfd, 0x8d, 0xa3, 0xc2, 0x15,
+ 0x25, 0x4f, 0xa6, 0x1a, 0x73, 0xbd, 0xcd, 0x45,
+ 0xdb, 0x08, 0x74, 0x7b, 0xa8, 0x23, 0xf5, 0x74,
+ 0x3a, 0x18, 0x6d, 0x90, 0xe0, 0xee, 0xae, 0xfe,
+ 0xc8, 0xac, 0x00, 0x57, 0xa0, 0xe1, 0xfe, 0x10,
+ 0xd4, 0xf3, 0xa8, 0x00, 0x21, 0x3e, 0x2d, 0xf9,
+ 0x63, 0xb8, 0xe9, 0xa4, 0x2e, 0xf4, 0x6b, 0xd7,
+ 0x5c, 0xfd, 0x32, 0x6c, 0x98, 0x05, 0x38, 0x0d,
+ 0x29, 0xb5, 0x5a, 0x5b, 0xbb, 0xad, 0xfd, 0x46,
+ 0x9b, 0x6a, 0x97, 0x4c, 0x24, 0xcc, 0x7d, 0x13,
+ 0x25, 0xe8, 0x2c, 0xb9, 0x13, 0x54, 0xb2, 0x8a,
+ 0x28, 0xa0, 0x8a, 0x3a, 0x4d, 0x7e, 0xf4, 0x29,
+ 0xff, 0xfb, 0x4f, 0xd6, 0x3d, 0xf7, 0xca, 0x89,
+ 0x2a, 0x58, 0x9e, 0x42, 0x00, 0x84, 0x61, 0x58,
+ 0x7c, 0x94, 0xf6, 0x50, 0x48, 0x2f, 0x34, 0x88,
+ 0xec, 0x97, 0xef, 0x8b, 0x2f, 0x84, 0xca, 0x23,
+ 0xe1, 0xb7, 0x63, 0x99, 0xdd, 0x4a, 0x76, 0xdd,
+ 0x20, 0xc1, 0xc2, 0x56, 0x45, 0xbe, 0x75, 0x9a,
+ 0x40, 0x72, 0xc8, 0xfb, 0x7e, 0x40, 0x6f, 0x38,
+ 0xfd, 0x76, 0xa4, 0x78, 0xf5, 0xde, 0x5f, 0xb7,
+ 0x4a, 0xa9, 0xaf, 0xad, 0xa1, 0x8b, 0x25, 0x8f,
+ 0xea, 0xb3, 0xeb, 0x54, 0x39, 0x5a, 0x91, 0xfe,
+ 0x86, 0x18, 0xea, 0x8c, 0xd6, 0x66, 0xd5, 0x85,
+ 0x02, 0x2b, 0x00, 0x5d, 0x7e, 0x13, 0xa0, 0x1f,
+ 0x73, 0x46, 0x6d, 0x5e, 0xcd, 0xe0, 0x82, 0x02,
+ 0x28, 0x88, 0xbf, 0x17, 0xfd, 0x9b, 0x83, 0x2c,
+ 0xa2, 0xf7, 0xde, 0x51, 0x98, 0x3f, 0xe2, 0x80,
+ 0x66, 0x14, 0x17, 0xce, 0x8e, 0x30, 0x2d, 0xe2,
+ 0x24, 0x68, 0x4b, 0xe5, 0xd1, 0x09, 0xfb, 0x6e,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t bf_cbc_128_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x87, 0xae, 0x01, 0x52, 0xe8, 0xe9, 0xd9, 0xba,
+ 0xa9, 0x18, 0x31, 0x2c, 0x1b, 0xab, 0x57, 0xad,
+ 0x45, 0x0e, 0x25, 0x5e, 0x0e, 0x04, 0xfa, 0xdd,
+ 0xf1, 0x59, 0xe6, 0xea, 0x78, 0x4b, 0x83, 0x07,
+ 0x8b, 0x46, 0x91, 0x09, 0x58, 0x5a, 0x11, 0x2e,
+ 0x54, 0x43, 0xa4, 0xc1, 0x04, 0x35, 0xd3, 0x3e,
+ 0xc9, 0xc8, 0xf5, 0xff, 0x69, 0x1e, 0x57, 0x85,
+ 0x6d, 0x91, 0x03, 0xeb, 0x8c, 0xa7, 0xe8, 0xcc,
+ 0x3f, 0xac, 0xf9, 0x14, 0x1e, 0x88, 0x50, 0xa5,
+ 0x38, 0x66, 0xa9, 0xf4, 0xf5, 0xc6, 0x30, 0x95,
+ 0xd6, 0x84, 0x0b, 0x81, 0xf9, 0x51, 0x05, 0x80,
+ 0x9a, 0x89, 0xbf, 0xd4, 0x7d, 0x6a, 0x26, 0x59,
+ 0x29, 0x44, 0xe7, 0x1d, 0x0e, 0xad, 0x8c, 0xa0,
+ 0x93, 0xe9, 0x4b, 0x4b, 0x51, 0x46, 0xa5, 0x07,
+ 0xe8, 0xcb, 0x59, 0xf4, 0x63, 0xb5, 0x36, 0xdb,
+ 0xbc, 0x54, 0x2d, 0xec, 0xf0, 0x90, 0x3a, 0xa5,
+ 0xed, 0xc8, 0x28, 0x0e, 0xd3, 0x79, 0xb8, 0x57,
+ 0xc6, 0x7f, 0x02, 0x22, 0x5e, 0x80, 0xe8, 0x7f,
+ 0xdf, 0xa0, 0x0f, 0xbc, 0x98, 0x79, 0x6f, 0xd2,
+ 0xb0, 0xb2, 0x4f, 0x9b, 0x1a, 0x21, 0x8f, 0x63,
+ 0xce, 0x54, 0x41, 0x64, 0xbf, 0xb9, 0xa7, 0x93,
+ 0xd6, 0x5b, 0x89, 0x86, 0xda, 0x90, 0x23, 0x2e,
+ 0x25, 0x35, 0x1a, 0x9a, 0xf5, 0x1e, 0x8f, 0xb4,
+ 0xe6, 0x66, 0x8e, 0x0e, 0x2d, 0x91, 0x06, 0x4b,
+ 0x3d, 0x4a, 0x97, 0xab, 0x9b, 0x92, 0x09, 0xaa,
+ 0x07, 0xbf, 0xc1, 0x7d, 0xe2, 0xbc, 0xd2, 0xf1,
+ 0x38, 0x8d, 0x02, 0x45, 0xc8, 0x13, 0x12, 0xda,
+ 0xaa, 0x53, 0xa2, 0x2c, 0x96, 0x69, 0x64, 0xce,
+ 0x86, 0xe4, 0x84, 0x56, 0xd0, 0xe5, 0x81, 0x99,
+ 0x27, 0xad, 0x86, 0x47, 0x5f, 0xaf, 0xa2, 0xa2,
+ 0x90, 0x7f, 0xe7, 0x86, 0xec, 0x7f, 0xf4, 0xa3,
+ 0xcd, 0x4f, 0x60, 0xcc, 0x1e, 0x35, 0x44, 0xe8,
+ 0xe9, 0x06, 0xaf, 0x5e, 0x53, 0x3d, 0x30, 0x91,
+ 0xfe, 0x44, 0x59, 0x66, 0x82, 0xc2, 0xea, 0x9f,
+ 0xc8, 0x3b, 0xe2, 0xe5, 0x58, 0xf7, 0x34, 0xd5,
+ 0x9e, 0xfc, 0x20, 0x84, 0x34, 0xaa, 0x4f, 0xe1,
+ 0xd4, 0x95, 0x76, 0x11, 0x59, 0x90, 0x90, 0xfd,
+ 0x4d, 0xf9, 0xb8, 0x41, 0xe1, 0xdb, 0x36, 0x05,
+ 0xe3, 0x0f, 0xa4, 0x4f, 0x0c, 0x61, 0x70, 0xa5,
+ 0x1b, 0xbf, 0xab, 0x65, 0x67, 0x75, 0x5c, 0x7d,
+ 0x46, 0x3b, 0x29, 0xd0, 0x3d, 0x06, 0x40, 0x25,
+ 0x47, 0x3e, 0x8d, 0x62, 0xf8, 0xd8, 0x08, 0xc1,
+ 0x03, 0x04, 0x4b, 0x5a, 0x40, 0x65, 0x84, 0x52,
+ 0x34, 0xa2, 0x4a, 0xcc, 0x3a, 0x9c, 0x1e, 0xbf,
+ 0x2d, 0xed, 0x08, 0x8b, 0xc3, 0x8f, 0x48, 0xba,
+ 0x06, 0x03, 0xea, 0x5b, 0xba, 0x6a, 0xac, 0x23,
+ 0x5a, 0x5e, 0x31, 0x08, 0x29, 0x69, 0x64, 0x44,
+ 0x1c, 0x31, 0xae, 0xb1, 0x86, 0x7b, 0x26, 0x89,
+ 0xa6, 0xbe, 0xef, 0x69, 0x81, 0xf7, 0x77, 0xd5,
+ 0x8e, 0x78, 0xa5, 0x11, 0x51, 0xca, 0xec, 0xd0,
+ 0x86, 0xa5, 0x33, 0xf3, 0x65, 0x5d, 0x04, 0xc5,
+ 0xd2, 0x17, 0x2a, 0xfe, 0x4a, 0x58, 0x0f, 0x98,
+ 0x61, 0xad, 0xc3, 0xb8, 0x5b, 0x45, 0xcc, 0x28,
+ 0x3d, 0x4d, 0x00, 0xf5, 0x4a, 0xe2, 0xbc, 0x6c,
+ 0x1b, 0x80, 0x7a, 0x2b, 0x40, 0xb8, 0x34, 0x0e,
+ 0x44, 0x53, 0x16, 0xda, 0x7c, 0x46, 0x8b, 0x42,
+ 0x5e, 0xa8, 0xe1, 0xb8, 0xf8, 0xcf, 0xff, 0x48,
+ 0xcf, 0x2c, 0x4c, 0x98, 0xdb, 0xe5, 0x55, 0xfe,
+ 0x45, 0xfa, 0xf8, 0xde, 0x72, 0xf9, 0x84, 0x3c,
+ 0xc0, 0x0c, 0x1f, 0x86, 0x97, 0x86, 0xb8, 0xfe,
+ 0x7d, 0xff, 0xa3, 0xaf, 0x68, 0x00, 0x66, 0x90,
+ 0xac, 0xb5, 0xd8, 0xde, 0x35, 0x01, 0xf7, 0xab,
+ 0xab, 0xe3, 0xe9, 0x85, 0x4c, 0x6f, 0xe6, 0xbc,
+ 0xce, 0x67, 0x4a, 0xbd, 0xad, 0x7b, 0xec, 0xa1,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t bf_cbc_128_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x17, 0xdd, 0x0f, 0x4b, 0x28, 0x33, 0x03, 0x89,
+ 0x21, 0x7b, 0x67, 0x15, 0x15, 0x65, 0x08, 0x4f,
+ 0x65, 0x18, 0xa6, 0x4b, 0x62, 0xdb, 0x1e, 0xc2,
+ 0xaa, 0x82, 0xb6, 0x1d, 0xf7, 0x12, 0x9e, 0x73,
+ 0xfe, 0xac, 0x2f, 0x1e, 0x2b, 0xea, 0x3a, 0x4f,
+ 0xc3, 0x0a, 0x59, 0x80, 0x0d, 0x3d, 0xbc, 0x62,
+ 0x8d, 0x70, 0xef, 0x1b, 0xfb, 0xdc, 0x4e, 0xc4,
+ 0x97, 0xf4, 0x77, 0xb7, 0x25, 0x94, 0x13, 0x48,
+ 0xf2, 0x3d, 0x4c, 0xa7, 0xb8, 0x8c, 0xf5, 0x26,
+ 0xa4, 0x35, 0xeb, 0xa0, 0xe7, 0x68, 0xb0, 0x69,
+ 0xf4, 0xf6, 0x13, 0x3a, 0x57, 0xa3, 0xd2, 0x26,
+ 0xe6, 0x70, 0xd8, 0xd4, 0x05, 0xb5, 0x01, 0xda,
+ 0xc7, 0x4a, 0x79, 0x1a, 0x6d, 0xb6, 0xf6, 0xb5,
+ 0x7d, 0x9a, 0x5c, 0xf1, 0x6a, 0xf8, 0xd1, 0x0a,
+ 0xbc, 0xe7, 0xea, 0xb4, 0x99, 0x72, 0x19, 0x97,
+ 0x41, 0x4f, 0x14, 0x5f, 0xa3, 0xb3, 0x9b, 0x36,
+ 0x00, 0x08, 0x88, 0x8c, 0xce, 0x7f, 0x3a, 0x9b,
+ 0xb0, 0x24, 0x17, 0x95, 0xc4, 0x59, 0x30, 0x5d,
+ 0xc6, 0x92, 0x19, 0x12, 0x99, 0xb0, 0x08, 0xa6,
+ 0x04, 0xdb, 0xc6, 0xd5, 0x61, 0xe4, 0xe1, 0x68,
+ 0xa8, 0xd7, 0x07, 0xfe, 0x2f, 0x47, 0xea, 0x14,
+ 0xe5, 0xf7, 0x61, 0x9b, 0xbb, 0x98, 0xcb, 0x3b,
+ 0x8c, 0x41, 0xd1, 0x55, 0x59, 0xb2, 0x41, 0x61,
+ 0x8e, 0x60, 0x17, 0xcd, 0xe8, 0xf7, 0x1d, 0xbd,
+ 0x28, 0x5d, 0x1e, 0x15, 0x28, 0x80, 0x8c, 0x29,
+ 0x34, 0x96, 0x31, 0xda, 0xe1, 0x19, 0x88, 0xd5,
+ 0xe0, 0xc8, 0xb4, 0xaa, 0x04, 0x21, 0xf5, 0xef,
+ 0xfa, 0x0e, 0xc9, 0xa5, 0x88, 0x77, 0x49, 0xf4,
+ 0x02, 0x22, 0x0b, 0x8b, 0x5e, 0xe1, 0xab, 0xd4,
+ 0xb1, 0xb6, 0x48, 0x54, 0x96, 0x08, 0xaf, 0xa1,
+ 0x0b, 0xc0, 0xfe, 0x2a, 0x12, 0x36, 0x56, 0x85,
+ 0x6a, 0xf7, 0x3d, 0x82, 0xe6, 0xda, 0x5d, 0xfe,
+ 0x4f, 0x4f, 0xc9, 0x43, 0xdc, 0x0f, 0x53, 0x05,
+ 0x09, 0xd4, 0x9c, 0x2e, 0x6e, 0xf3, 0x52, 0x6a,
+ 0x10, 0xc6, 0x48, 0xb1, 0x54, 0x70, 0xab, 0x7c,
+ 0x31, 0xf6, 0x47, 0xef, 0x64, 0x5f, 0xff, 0x45,
+ 0x8c, 0x3f, 0x87, 0x3a, 0x2d, 0xa6, 0xaf, 0xb2,
+ 0x44, 0xdf, 0x80, 0x2e, 0x89, 0x4c, 0x94, 0x67,
+ 0xfc, 0x20, 0x98, 0xb4, 0xcf, 0x58, 0x1e, 0x33,
+ 0x55, 0x6a, 0x7c, 0x67, 0x5c, 0x28, 0x2f, 0x19,
+ 0x02, 0x14, 0x06, 0x93, 0x8c, 0x84, 0xae, 0x62,
+ 0x14, 0xf9, 0x87, 0xae, 0x85, 0xa3, 0x60, 0x26,
+ 0xfc, 0x8d, 0x04, 0x92, 0x27, 0xfe, 0x35, 0x7b,
+ 0x45, 0x9d, 0x4a, 0x86, 0x75, 0xa6, 0xb3, 0xa1,
+ 0x59, 0xe4, 0x4b, 0x1c, 0xd2, 0x71, 0x36, 0xfe,
+ 0x73, 0xed, 0x54, 0x0d, 0x9d, 0xde, 0x63, 0xb2,
+ 0xc0, 0x7c, 0xf2, 0xb3, 0x36, 0x62, 0x06, 0x1f,
+ 0xcd, 0x41, 0x92, 0x73, 0xbc, 0x11, 0x68, 0xc9,
+ 0x69, 0x20, 0xf9, 0xbb, 0x9a, 0xe9, 0x6c, 0x05,
+ 0xcf, 0x01, 0x57, 0xc4, 0x1d, 0x95, 0x5e, 0xe3,
+ 0xb7, 0x15, 0xde, 0xa7, 0xb5, 0x1a, 0x4e, 0x78,
+ 0x44, 0x5b, 0x9a, 0xee, 0x29, 0xe2, 0x22, 0x8b,
+ 0xe9, 0xe3, 0xe6, 0x70, 0x3e, 0xcb, 0x9f, 0x7f,
+ 0xc3, 0xd0, 0x2c, 0xdc, 0x55, 0xb4, 0x0d, 0x67,
+ 0xf5, 0xd8, 0xff, 0xbb, 0xb1, 0x02, 0xbf, 0xf6,
+ 0x33, 0x4e, 0x7a, 0x3a, 0x50, 0xb1, 0x01, 0x77,
+ 0x51, 0xef, 0xb5, 0x75, 0xb3, 0x66, 0xe8, 0xe6,
+ 0xd6, 0x53, 0x7d, 0x33, 0x51, 0x62, 0x5d, 0xf2,
+ 0x77, 0x02, 0x34, 0x42, 0xda, 0xee, 0xd9, 0xee,
+ 0x0b, 0x4d, 0x71, 0x5c, 0xc0, 0xec, 0xdd, 0xc0,
+ 0x34, 0x6f, 0xf4, 0x65, 0x32, 0xde, 0xc5, 0xb2,
+ 0x97, 0x60, 0x89, 0x4e, 0x3b, 0x0c, 0xf2, 0xa7,
+ 0x74, 0x61, 0xd7, 0xe4, 0xa6, 0x80, 0x78, 0x76,
+ 0xe5, 0x7d, 0xab, 0x96, 0x04, 0x00, 0x76, 0x22,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t bf_cbc_128_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xdd, 0x8e, 0xce, 0x5b, 0xb8, 0x2a, 0xc8, 0x0e,
+ 0xd2, 0xbe, 0xcf, 0xa7, 0x2a, 0x5b, 0x0c, 0x1a,
+ 0xb2, 0x68, 0x5b, 0xe7, 0x53, 0xaf, 0xce, 0x56,
+ 0xfd, 0xbd, 0x73, 0x3c, 0x44, 0x02, 0x96, 0x57,
+ 0xaa, 0x47, 0x8d, 0xf1, 0x28, 0x59, 0xb6, 0xce,
+ 0xba, 0x1e, 0xc9, 0x78, 0x76, 0xdd, 0x43, 0x3a,
+ 0xbc, 0x43, 0x4c, 0x17, 0xd2, 0xba, 0xb1, 0xda,
+ 0xa8, 0xbf, 0x32, 0x25, 0xaa, 0xc0, 0xf7, 0xb6,
+ 0x72, 0x65, 0xe2, 0x67, 0xdb, 0xf0, 0xa8, 0x60,
+ 0xda, 0x9b, 0x70, 0xad, 0x8f, 0x1d, 0x34, 0x24,
+ 0x1a, 0xfd, 0x77, 0x2e, 0x1c, 0xb6, 0xc0, 0x6b,
+ 0xa0, 0x4b, 0x4a, 0xa0, 0xd5, 0x8b, 0xbb, 0xd4,
+ 0xcc, 0x7b, 0x4e, 0x4c, 0x71, 0x9a, 0x50, 0x12,
+ 0x36, 0xd4, 0xfd, 0x1f, 0xf1, 0xfc, 0x19, 0x31,
+ 0xec, 0x54, 0x24, 0xb4, 0x9f, 0xa9, 0xea, 0xd2,
+ 0x87, 0x11, 0x03, 0x29, 0xbb, 0x20, 0x20, 0x37,
+ 0xa0, 0xeb, 0x93, 0xa1, 0x60, 0x5f, 0x83, 0x9f,
+ 0x00, 0x09, 0xe4, 0x9c, 0x79, 0xcb, 0xfc, 0x4f,
+ 0x9e, 0xd2, 0x76, 0x9f, 0x56, 0x3b, 0x88, 0x1d,
+ 0x29, 0x8f, 0x36, 0x07, 0xf7, 0x7e, 0xf1, 0xa1,
+ 0xa4, 0x25, 0xfb, 0xa0, 0xbe, 0xc6, 0xa2, 0x76,
+ 0xd3, 0x59, 0x2a, 0x7f, 0xb7, 0x9b, 0xb8, 0x75,
+ 0xc7, 0xc1, 0xc0, 0xe9, 0x9b, 0x83, 0x16, 0x00,
+ 0xc8, 0x9c, 0x25, 0x2a, 0x8b, 0xd1, 0x8d, 0x16,
+ 0x9f, 0xd6, 0xd3, 0x03, 0x5b, 0xc7, 0x40, 0xac,
+ 0xb6, 0xf3, 0xbb, 0x22, 0xa3, 0x3e, 0x56, 0x55,
+ 0xdf, 0x06, 0x76, 0xe0, 0x7b, 0xd0, 0x52, 0x54,
+ 0x38, 0xb0, 0xaa, 0xab, 0x62, 0x31, 0xd1, 0x79,
+ 0x19, 0xec, 0x82, 0x36, 0x58, 0x31, 0xf9, 0x01,
+ 0xf9, 0x5e, 0xaf, 0x24, 0xb3, 0xc9, 0xb2, 0x30,
+ 0x3d, 0xbc, 0xf1, 0xbe, 0x17, 0xeb, 0xa0, 0x31,
+ 0x43, 0xed, 0xd7, 0x50, 0xcc, 0xc2, 0xe2, 0xaa,
+ 0x68, 0xc8, 0xf0, 0xd3, 0x89, 0xbd, 0xf5, 0x69,
+ 0x56, 0xe3, 0x88, 0x92, 0x32, 0x56, 0x85, 0x6f,
+ 0x25, 0x30, 0x28, 0x37, 0xd5, 0xe2, 0xa6, 0xf7,
+ 0x6e, 0xa9, 0x71, 0xda, 0x4a, 0x25, 0x94, 0x0b,
+ 0x84, 0x7f, 0x1f, 0x6b, 0x89, 0x2a, 0xf8, 0x30,
+ 0xcb, 0x60, 0x75, 0x21, 0xbd, 0xe2, 0x34, 0xf7,
+ 0x8f, 0x30, 0xd5, 0xd5, 0x1f, 0x17, 0x0d, 0x00,
+ 0x6c, 0x50, 0xde, 0x56, 0x15, 0x33, 0x1b, 0x83,
+ 0x68, 0x7b, 0x24, 0xe3, 0xa0, 0xda, 0xd5, 0x7a,
+ 0x3e, 0x93, 0x6d, 0xe0, 0x02, 0x79, 0x62, 0x5d,
+ 0x71, 0xe3, 0x7b, 0xa9, 0x0b, 0x7a, 0xcd, 0xb3,
+ 0xb2, 0x6f, 0x96, 0x19, 0x8f, 0xf8, 0x8b, 0x26,
+ 0x7a, 0x40, 0xc8, 0xae, 0xfe, 0x0d, 0x6f, 0x67,
+ 0xce, 0x5e, 0xa0, 0x04, 0x7e, 0x93, 0x1d, 0x17,
+ 0x1c, 0x32, 0x82, 0xf4, 0x54, 0xb9, 0x80, 0xdd,
+ 0x82, 0xae, 0xf5, 0xc5, 0x1e, 0x15, 0xab, 0xc2,
+ 0x5c, 0x60, 0xd2, 0x08, 0xc2, 0xa1, 0x1f, 0x89,
+ 0x0b, 0x59, 0x36, 0x07, 0xdc, 0x57, 0xd3, 0xa0,
+ 0x32, 0x42, 0xac, 0xa6, 0x90, 0x0b, 0xc0, 0xe4,
+ 0x91, 0x45, 0x85, 0x27, 0xb9, 0x48, 0x2a, 0x88,
+ 0x0a, 0xbf, 0xf6, 0x2d, 0xef, 0x4d, 0x1b, 0x64,
+ 0x49, 0x23, 0x47, 0x30, 0x29, 0x25, 0xb2, 0xc9,
+ 0xaf, 0xcd, 0xae, 0x56, 0x43, 0x28, 0xcf, 0x81,
+ 0x95, 0xa7, 0x3e, 0x51, 0x5b, 0x3b, 0xf7, 0x87,
+ 0x13, 0xc6, 0xee, 0x50, 0x2f, 0x78, 0xdd, 0xcf,
+ 0x63, 0xef, 0x15, 0xb9, 0x4f, 0x21, 0x27, 0x5e,
+ 0x94, 0x78, 0xad, 0xcd, 0x9b, 0x3d, 0xf2, 0xdb,
+ 0xed, 0xf2, 0xa2, 0x39, 0xca, 0xa3, 0xa8, 0x2e,
+ 0x68, 0xd5, 0xc3, 0xcf, 0x71, 0xec, 0x92, 0xdc,
+ 0xce, 0xe7, 0x7d, 0x2b, 0xf7, 0xbc, 0xe9, 0x2b,
+ 0x2e, 0xae, 0xaf, 0x0b, 0x92, 0x72, 0xac, 0x6e,
+ 0x49, 0xe1, 0xb3, 0x1f, 0xe5, 0x43, 0x2f, 0xa7,
+};
+
+const struct testvec bf_cbc_128_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t bf_cbc_128_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0xb8, 0x65, 0x67, 0x8e, 0xe4, 0xd8, 0xb4, 0x93,
+ 0xa5, 0xbb, 0x13, 0x92, 0x27, 0x4b, 0xdd, 0xeb,
+ 0x0d, 0xad, 0x80, 0x6a, 0x57, 0x37, 0xc0, 0x23,
+ 0x23, 0xbf, 0xed, 0x86, 0x0c, 0x18, 0x48, 0x19,
+ 0xcd, 0x84, 0x66, 0xa7, 0xd6, 0xa0, 0x44, 0xd3,
+ 0x05, 0x4e, 0xf4, 0xfe, 0x6a, 0x57, 0x69, 0x01,
+ 0xaa, 0x91, 0x9c, 0x6e, 0x4f, 0x79, 0xc9, 0x8f,
+ 0x4c, 0xdf, 0x5b, 0x9c, 0xc4, 0xf7, 0x63, 0x16,
+ 0x20, 0x09, 0x07, 0x3f, 0x5e, 0x31, 0xcc, 0x81,
+ 0x71, 0xe3, 0x7b, 0xb5, 0xea, 0x2c, 0xb5, 0x14,
+ 0x1e, 0xf9, 0x0d, 0xe0, 0x45, 0xbc, 0x9f, 0x92,
+ 0x6c, 0xc9, 0x0a, 0x85, 0x62, 0x42, 0xf1, 0x4b,
+ 0xac, 0xe2, 0xfa, 0xad, 0x97, 0x7a, 0x43, 0x3d,
+ 0xb6, 0x5f, 0xcb, 0xe7, 0x17, 0x23, 0x28, 0xde,
+ 0x4e, 0xf8, 0xa1, 0x3c, 0x22, 0x63, 0x49, 0x31,
+ 0xa7, 0xbe, 0xbf, 0xfe, 0xee, 0xd9, 0x1f, 0xa0,
+ 0x2a, 0x0e, 0xf2, 0x4f, 0x3e, 0xf8, 0xbb, 0xae,
+ 0x9e, 0x0d, 0x2c, 0xaa, 0x2a, 0x2c, 0xf0, 0x6c,
+ 0x37, 0x2a, 0x5d, 0x96, 0x70, 0x9c, 0x87, 0xcc,
+ 0x2b, 0xca, 0x95, 0x37, 0xf4, 0x4d, 0x78, 0xae,
+ 0x4f, 0xb5, 0xe6, 0xad, 0xb1, 0xc1, 0x31, 0xd3,
+ 0x2d, 0xa6, 0xaf, 0xc1, 0x8c, 0xe4, 0x72, 0x05,
+ 0xb0, 0xfc, 0xb0, 0xf7, 0xfe, 0xf9, 0x3e, 0xa3,
+ 0xb9, 0xea, 0xc8, 0x69, 0xe3, 0x4e, 0x6d, 0xd1,
+ 0x8b, 0x2b, 0xf9, 0x2f, 0xd9, 0x40, 0x69, 0xff,
+ 0x90, 0x98, 0x7a, 0x82, 0xe3, 0x0d, 0x4e, 0x19,
+ 0x2f, 0x77, 0xf9, 0xab, 0x36, 0xa9, 0x4e, 0xbc,
+ 0x25, 0x32, 0xbd, 0x44, 0xea, 0x5a, 0x18, 0x31,
+ 0x37, 0xcd, 0x6c, 0x98, 0xdd, 0x1d, 0xf9, 0xf7,
+ 0x8f, 0x0b, 0x79, 0xbc, 0xe6, 0xf5, 0xf1, 0xa3,
+ 0x13, 0xe9, 0x39, 0xaf, 0xa4, 0x8a, 0x74, 0xae,
+ 0x60, 0x30, 0x63, 0x6e, 0xee, 0x97, 0x83, 0xee,
+ 0xc0, 0xdd, 0xde, 0xad, 0x92, 0x83, 0xc9, 0x3c,
+ 0xd8, 0x58, 0x6c, 0xcb, 0xe4, 0x29, 0x04, 0x69,
+ 0x4f, 0x45, 0xc2, 0x59, 0x98, 0x20, 0x91, 0x6e,
+ 0x95, 0x82, 0xb3, 0x47, 0x2c, 0xef, 0xdb, 0x96,
+ 0x38, 0xba, 0x01, 0x89, 0x84, 0x96, 0x71, 0xf9,
+ 0x2b, 0x23, 0xe0, 0x89, 0xb8, 0xb9, 0x80, 0xbf,
+ 0x0c, 0xdc, 0xf0, 0x5c, 0xd6, 0x4f, 0x18, 0x19,
+ 0xfe, 0x23, 0x5a, 0x1e, 0x20, 0x9a, 0x05, 0xf2,
+ 0x62, 0xd4, 0x04, 0x92, 0x24, 0xfc, 0xc0, 0x48,
+ 0xf0, 0x00, 0xb4, 0xbe, 0x2e, 0xea, 0x25, 0x17,
+ 0x5d, 0xab, 0x73, 0x26, 0x79, 0x77, 0xc5, 0x96,
+ 0xd3, 0xbf, 0x38, 0xda, 0x0f, 0xe1, 0x26, 0x9a,
+ 0x38, 0xfc, 0x43, 0x82, 0xd1, 0x4d, 0xf2, 0xae,
+ 0x98, 0x1e, 0xb0, 0x0d, 0xec, 0x7b, 0x56, 0x66,
+ 0xcb, 0x30, 0x57, 0x4f, 0xe7, 0x03, 0xe3, 0xa6,
+ 0x4a, 0x4a, 0xf9, 0xa3, 0xbf, 0x44, 0xac, 0x1a,
+ 0xe7, 0x4b, 0xc1, 0x5b, 0x03, 0x25, 0x4e, 0xc6,
+ 0x1f, 0x96, 0x4d, 0xf7, 0xbe, 0xa7, 0x5d, 0x60,
+ 0x20, 0x62, 0x10, 0xd7, 0xab, 0x64, 0xce, 0x22,
+ 0x8b, 0x52, 0x76, 0xa1, 0xa1, 0x8b, 0x1e, 0xb2,
+ 0x18, 0x29, 0x8f, 0xc5, 0x24, 0x39, 0xd4, 0xf8,
+ 0x75, 0x1e, 0x30, 0x57, 0x12, 0x01, 0x04, 0x78,
+ 0x68, 0x97, 0xa8, 0x65, 0x8c, 0xac, 0xb4, 0x3b,
+ 0x37, 0x45, 0x41, 0xbc, 0x7d, 0x4b, 0x09, 0xd7,
+ 0x46, 0x40, 0x99, 0x59, 0xa1, 0xb5, 0x9e, 0x84,
+ 0x24, 0x6d, 0xfb, 0x74, 0x22, 0xac, 0x4e, 0x5f,
+ 0x11, 0xd3, 0xa7, 0x9f, 0xa5, 0xca, 0x38, 0x54,
+ 0xe2, 0x65, 0x52, 0x02, 0x69, 0xe9, 0xa8, 0xf1,
+ 0xd7, 0x9d, 0x9a, 0x17, 0x54, 0xa0, 0xda, 0xbb,
+ 0x37, 0xb4, 0x0c, 0xb6, 0x00, 0xad, 0x6f, 0x88,
+ 0x84, 0xa7, 0x69, 0xd7, 0x0b, 0xbe, 0xb4, 0xbe,
+ 0x96, 0xbc, 0xcd, 0x08, 0xf1, 0x28, 0xe0, 0x6f,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t bf_cbc_128_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x7d, 0x95, 0x5a, 0x66, 0x23, 0x98, 0xa8, 0xbe,
+ 0x53, 0x63, 0x0d, 0x46, 0x4e, 0x38, 0x1b, 0x1d,
+ 0x36, 0xdd, 0x2a, 0x57, 0x3c, 0x17, 0x01, 0xba,
+ 0x4e, 0xf8, 0xaa, 0x22, 0x74, 0x05, 0xa2, 0x40,
+ 0xd0, 0x30, 0x61, 0x6c, 0x65, 0x5e, 0xfb, 0x21,
+ 0x63, 0xef, 0x62, 0x01, 0x74, 0x15, 0xf6, 0x87,
+ 0x92, 0xc1, 0x4e, 0x46, 0xdd, 0x76, 0xdb, 0x8b,
+ 0x20, 0x44, 0xc4, 0xfa, 0x7c, 0xd2, 0x07, 0x32,
+ 0x11, 0xeb, 0x5b, 0x38, 0x44, 0x32, 0xa1, 0xe7,
+ 0xcb, 0xa6, 0x1a, 0x12, 0xb9, 0x53, 0x13, 0x6f,
+ 0xc2, 0x0e, 0x6a, 0x77, 0x8b, 0x96, 0x14, 0x0a,
+ 0x23, 0x48, 0x65, 0xa5, 0xcd, 0x39, 0x38, 0x03,
+ 0xc8, 0x3a, 0x98, 0x69, 0x3d, 0x14, 0xae, 0xad,
+ 0x54, 0x57, 0xf6, 0x5a, 0xdd, 0x46, 0x4c, 0x3a,
+ 0x68, 0xa8, 0xb7, 0x57, 0xdd, 0x1e, 0x66, 0x0e,
+ 0xc2, 0x4c, 0x17, 0xba, 0xa4, 0x7e, 0x83, 0x45,
+ 0xc6, 0xf2, 0x34, 0x3b, 0x4e, 0xab, 0x67, 0x0c,
+ 0x73, 0xbf, 0x87, 0x7e, 0x93, 0x2b, 0x14, 0x33,
+ 0xd6, 0x24, 0x8d, 0xc7, 0x90, 0x11, 0xd2, 0x38,
+ 0xe6, 0xe0, 0x39, 0x1f, 0x00, 0x74, 0x40, 0xab,
+ 0xdc, 0xdd, 0x46, 0xe8, 0x85, 0x14, 0xb1, 0x78,
+ 0x34, 0x24, 0x04, 0x97, 0xde, 0xf9, 0x04, 0x69,
+ 0x0b, 0x15, 0x72, 0x37, 0xf4, 0x0d, 0xf4, 0x76,
+ 0x6f, 0xd8, 0x05, 0x75, 0x8f, 0x7e, 0x6b, 0xca,
+ 0x55, 0x20, 0x4a, 0x29, 0x16, 0xc1, 0x6e, 0x91,
+ 0x22, 0x01, 0x0d, 0x39, 0x5d, 0xb9, 0x09, 0xa4,
+ 0xe8, 0xc7, 0xff, 0x60, 0x39, 0xc6, 0xe4, 0x2a,
+ 0x1c, 0xf2, 0x3c, 0xf7, 0xf9, 0xd7, 0xde, 0x0b,
+ 0x0e, 0x30, 0xf1, 0x20, 0x7c, 0x93, 0x2f, 0x74,
+ 0x72, 0x40, 0x47, 0x2d, 0xeb, 0x8a, 0x5f, 0x69,
+ 0x60, 0xdf, 0xe9, 0x4d, 0x06, 0x24, 0x9c, 0x79,
+ 0xe7, 0x61, 0xd3, 0xa7, 0x57, 0x44, 0x49, 0x97,
+ 0x3a, 0xa3, 0x11, 0xc4, 0x70, 0xf4, 0x3d, 0xb5,
+ 0x4b, 0xb7, 0xae, 0x77, 0x36, 0xcf, 0x65, 0x3e,
+ 0xb6, 0x51, 0x83, 0xcb, 0x43, 0x5f, 0xd0, 0xfb,
+ 0x69, 0xc4, 0x1b, 0x77, 0x71, 0xcc, 0x72, 0xf4,
+ 0x5f, 0xc2, 0xda, 0xea, 0xa4, 0x33, 0xec, 0x8e,
+ 0x92, 0x22, 0x6a, 0x55, 0x34, 0x6a, 0x10, 0xb8,
+ 0x62, 0x66, 0xc1, 0x6f, 0x65, 0xdd, 0x9a, 0x40,
+ 0xa0, 0xbf, 0x88, 0xbb, 0x79, 0x1c, 0xa4, 0xaa,
+ 0xdf, 0xe8, 0xe7, 0x40, 0x88, 0xc6, 0x0f, 0xa2,
+ 0x2c, 0xee, 0xe7, 0x41, 0x32, 0x46, 0xa2, 0x46,
+ 0x85, 0xbf, 0x4c, 0xca, 0x4d, 0xd3, 0x9b, 0x49,
+ 0x43, 0x98, 0xae, 0xfc, 0x93, 0xa7, 0x94, 0x98,
+ 0x86, 0xa1, 0x0a, 0x85, 0x77, 0x67, 0xa6, 0x16,
+ 0x94, 0x76, 0xe5, 0x2f, 0x88, 0x5f, 0x24, 0x16,
+ 0xe5, 0x84, 0x4c, 0xd2, 0x58, 0x59, 0x82, 0x59,
+ 0x2c, 0xe2, 0x8d, 0xba, 0x08, 0x01, 0x67, 0x1f,
+ 0x2a, 0x9e, 0x4d, 0x53, 0x57, 0x2d, 0x6e, 0x35,
+ 0x38, 0xd5, 0x50, 0xa7, 0x0c, 0xe6, 0x77, 0x71,
+ 0xbe, 0x45, 0x2e, 0xf4, 0x7a, 0x3a, 0x51, 0x03,
+ 0x04, 0x2b, 0xd7, 0x42, 0x6c, 0x5b, 0x82, 0xba,
+ 0xb4, 0x09, 0xee, 0x9d, 0xea, 0x8f, 0xf0, 0xb3,
+ 0xb2, 0x9d, 0x0e, 0x09, 0x72, 0x8c, 0xd9, 0x1e,
+ 0x6d, 0x78, 0x57, 0x10, 0x1f, 0xeb, 0x4e, 0x53,
+ 0x57, 0x65, 0xe5, 0x43, 0xe8, 0xb4, 0xb6, 0xb8,
+ 0x25, 0x8a, 0xe2, 0xb3, 0x99, 0x95, 0x2c, 0xd0,
+ 0xc7, 0x89, 0xad, 0xdb, 0x72, 0xf0, 0x83, 0xe3,
+ 0x2f, 0x30, 0x33, 0xf4, 0x03, 0x14, 0x86, 0xa0,
+ 0xe0, 0x57, 0x15, 0x53, 0x26, 0xd0, 0x6d, 0x12,
+ 0x51, 0x96, 0x9b, 0x00, 0x8e, 0x41, 0xea, 0x05,
+ 0x75, 0x5d, 0xb3, 0x8d, 0x44, 0x7f, 0x41, 0x7f,
+ 0xd1, 0xed, 0x7c, 0xf7, 0xac, 0x6b, 0x21, 0xc7,
+ 0x0c, 0x49, 0xa1, 0x2e, 0x57, 0xa1, 0x21, 0xe2,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t bf_cbc_128_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x28, 0x0c, 0x49, 0x08, 0x84, 0xcb, 0xba, 0x4a,
+ 0xa5, 0xb6, 0x12, 0x4c, 0x14, 0x11, 0x1f, 0x88,
+ 0x57, 0x78, 0x1e, 0x51, 0x7c, 0x9d, 0xba, 0x31,
+ 0x80, 0x14, 0xeb, 0x4a, 0x98, 0x8a, 0xb5, 0x4d,
+ 0xc5, 0xbd, 0xd2, 0x48, 0x1e, 0x19, 0x43, 0x54,
+ 0x48, 0x1d, 0x24, 0x76, 0x7d, 0xd8, 0xcc, 0xe9,
+ 0xd9, 0x7b, 0xa9, 0xdf, 0xe3, 0x65, 0x85, 0x10,
+ 0xb8, 0x11, 0xce, 0xa3, 0x07, 0x4d, 0x87, 0x3f,
+ 0x95, 0xfb, 0xa5, 0x06, 0xa4, 0x37, 0xb0, 0x89,
+ 0x03, 0xa9, 0xef, 0x62, 0x98, 0xd3, 0x85, 0xe8,
+ 0xb3, 0x21, 0xab, 0xe9, 0xdc, 0x03, 0x2a, 0x20,
+ 0xf7, 0xb1, 0xa4, 0x7a, 0xd5, 0xdc, 0x61, 0x2e,
+ 0x15, 0x81, 0x3e, 0xcf, 0x8d, 0x8d, 0x54, 0x19,
+ 0x70, 0xde, 0xa9, 0x57, 0x93, 0x87, 0xc7, 0x16,
+ 0x06, 0x25, 0xf3, 0x93, 0x8f, 0x73, 0x92, 0x29,
+ 0x1e, 0xcd, 0x5a, 0x9d, 0x8f, 0x8d, 0x44, 0x15,
+ 0x8d, 0x92, 0x44, 0x95, 0x7a, 0x5e, 0x1b, 0xfd,
+ 0x31, 0xa5, 0x8c, 0x22, 0x89, 0xbb, 0x91, 0x15,
+ 0xad, 0x0a, 0x73, 0x94, 0x65, 0xae, 0xca, 0xfc,
+ 0x7e, 0xae, 0x85, 0x45, 0xe7, 0xd7, 0x8f, 0x89,
+ 0x8e, 0x44, 0x62, 0x7a, 0xe0, 0xee, 0x78, 0xbd,
+ 0x88, 0x62, 0x8e, 0xb8, 0x35, 0x7a, 0xa9, 0x12,
+ 0x56, 0x2d, 0xe4, 0xbb, 0x2d, 0xc8, 0x98, 0x0e,
+ 0x35, 0x9e, 0xea, 0x14, 0x43, 0x80, 0xde, 0x9e,
+ 0x2e, 0xf8, 0xf9, 0xcd, 0x61, 0xa6, 0x22, 0xc8,
+ 0x77, 0xfc, 0x32, 0x71, 0x4b, 0xcb, 0x00, 0x9b,
+ 0x9f, 0x85, 0x02, 0x92, 0xfa, 0x84, 0xd8, 0xd8,
+ 0x09, 0xa4, 0x08, 0xc1, 0x96, 0xd3, 0x9a, 0x27,
+ 0xa3, 0x82, 0x05, 0xd0, 0x78, 0x18, 0x0a, 0x7d,
+ 0xb6, 0x95, 0xc0, 0x27, 0x3e, 0x76, 0x77, 0xf3,
+ 0xd9, 0x62, 0x8e, 0x77, 0xa0, 0x1f, 0x9e, 0x41,
+ 0xdb, 0x24, 0xaa, 0xdd, 0x8f, 0x94, 0x7b, 0x1f,
+ 0xff, 0xaa, 0xfd, 0xe2, 0x19, 0xc2, 0x71, 0x80,
+ 0x0a, 0xda, 0xc5, 0x98, 0x57, 0xde, 0x4e, 0xfb,
+ 0x38, 0xe6, 0x9b, 0xe5, 0xa6, 0x1f, 0x7d, 0x2c,
+ 0x41, 0x5f, 0x4d, 0x13, 0xb8, 0x0c, 0xac, 0x9a,
+ 0x7d, 0xc0, 0x7c, 0x44, 0x64, 0x1e, 0xbc, 0x7d,
+ 0x16, 0xaa, 0x45, 0xda, 0x62, 0x4e, 0x64, 0x69,
+ 0xd6, 0x71, 0xd9, 0x64, 0x2a, 0x5d, 0x20, 0x34,
+ 0xb0, 0xcb, 0x9d, 0xd3, 0x69, 0xd6, 0x60, 0xad,
+ 0x78, 0x72, 0xb8, 0x36, 0x17, 0xe7, 0xaf, 0x0a,
+ 0x11, 0x84, 0x43, 0x32, 0x38, 0x43, 0xe5, 0xc5,
+ 0x1b, 0xf4, 0x48, 0xb6, 0x0e, 0x72, 0x48, 0x2f,
+ 0x9b, 0xe3, 0xce, 0x27, 0xcd, 0x66, 0x28, 0x5c,
+ 0x2a, 0xd7, 0x28, 0x52, 0x6e, 0x86, 0x03, 0x60,
+ 0x7b, 0xbd, 0xbd, 0x53, 0xfb, 0x7d, 0xa1, 0xba,
+ 0x6a, 0x46, 0x0c, 0xf3, 0x1a, 0xbf, 0xa7, 0xa2,
+ 0x46, 0x87, 0x40, 0xaa, 0x7d, 0x76, 0x36, 0x85,
+ 0xa5, 0xbf, 0x0b, 0xd4, 0x56, 0x4c, 0x37, 0xe3,
+ 0x60, 0x93, 0xdc, 0x3b, 0xca, 0x34, 0x78, 0xcf,
+ 0xdb, 0x0c, 0x9d, 0x5c, 0x52, 0xb2, 0xd5, 0x7b,
+ 0xbb, 0x4e, 0xe1, 0xa9, 0x2a, 0xc6, 0x42, 0xf5,
+ 0x21, 0x9c, 0x15, 0xae, 0xb9, 0x08, 0x3a, 0xc4,
+ 0x50, 0x7e, 0x0e, 0xb6, 0xc3, 0xfe, 0xf4, 0xd9,
+ 0x1a, 0x97, 0x30, 0x9f, 0x51, 0x2c, 0xac, 0xd2,
+ 0x13, 0x93, 0x62, 0x56, 0xcb, 0x34, 0xf3, 0xca,
+ 0x26, 0xc6, 0x32, 0xbe, 0xf6, 0xd5, 0x1e, 0x5b,
+ 0x3a, 0x5c, 0x31, 0x08, 0xa1, 0x47, 0x6b, 0x75,
+ 0x95, 0x8e, 0x3d, 0xbf, 0x2e, 0x81, 0x02, 0x0d,
+ 0x17, 0x66, 0x6f, 0x04, 0xe0, 0x1e, 0x03, 0x27,
+ 0xd3, 0xcf, 0x45, 0xc6, 0x08, 0xdb, 0xdf, 0x83,
+ 0xd5, 0xc2, 0x7f, 0xe8, 0x5f, 0x4a, 0x36, 0x0a,
+ 0x6d, 0x3c, 0x91, 0x8e, 0x52, 0xf3, 0xdd, 0x62,
+ 0xff, 0x78, 0x87, 0xd9, 0x4c, 0xad, 0x5c, 0x9f,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t bf_cbc_128_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0xa3, 0x9a, 0x21, 0xbd, 0x1c, 0x97, 0x4f, 0xe2,
+ 0x7d, 0x63, 0xfe, 0x52, 0x07, 0xac, 0x81, 0x75,
+ 0x15, 0x04, 0x8c, 0xc7, 0x7c, 0x11, 0x8d, 0x53,
+ 0x17, 0x87, 0xe8, 0x5d, 0xb1, 0xe8, 0xcb, 0x43,
+ 0xe2, 0x4b, 0xce, 0x9b, 0xf7, 0x51, 0x0a, 0xee,
+ 0x0a, 0x49, 0xae, 0x9a, 0xbd, 0x33, 0x3f, 0x0b,
+ 0xd4, 0xe8, 0x57, 0x77, 0xb1, 0xe1, 0xa5, 0x22,
+ 0x83, 0xbf, 0x7c, 0x63, 0x6c, 0x3b, 0x25, 0xde,
+ 0x2c, 0x6a, 0x28, 0x66, 0x0e, 0xc4, 0x8d, 0x66,
+ 0x66, 0xb6, 0xc6, 0xb5, 0x38, 0x40, 0x84, 0x81,
+ 0xec, 0x03, 0xdb, 0xbf, 0xe1, 0x8f, 0xf4, 0xb3,
+ 0xc4, 0x50, 0x24, 0xa2, 0x48, 0x66, 0x73, 0xed,
+ 0x4b, 0x00, 0x12, 0xd5, 0x15, 0x5f, 0xfb, 0xd9,
+ 0x6c, 0x76, 0x3b, 0xa2, 0x68, 0x41, 0xc1, 0x96,
+ 0x50, 0xff, 0x8a, 0x83, 0xac, 0x02, 0x42, 0xcb,
+ 0xed, 0x93, 0xbf, 0xd9, 0x51, 0x46, 0x50, 0xd1,
+ 0xeb, 0x02, 0x61, 0x64, 0xa7, 0x0e, 0x95, 0xc2,
+ 0x95, 0x5a, 0x93, 0xd9, 0x77, 0x17, 0xa4, 0xc7,
+ 0x51, 0x42, 0xa3, 0xd4, 0x32, 0x4e, 0x4f, 0xe1,
+ 0xaa, 0x6d, 0xab, 0x08, 0xd9, 0xe9, 0xfe, 0x72,
+ 0xf3, 0x2c, 0xfb, 0x43, 0xdf, 0x88, 0x44, 0x94,
+ 0x0b, 0x5c, 0x85, 0x54, 0xe3, 0x13, 0xe2, 0x10,
+ 0x64, 0xa7, 0xcf, 0xe3, 0x2a, 0x3e, 0xfe, 0xd1,
+ 0x67, 0xcd, 0xd1, 0x66, 0x06, 0x26, 0x2f, 0x6f,
+ 0x6f, 0x44, 0xe7, 0xf4, 0xac, 0xe4, 0x58, 0x2f,
+ 0x61, 0xad, 0x64, 0xc6, 0x0c, 0xf0, 0x9a, 0x3b,
+ 0x85, 0x1f, 0x3c, 0xea, 0x8e, 0x84, 0xbb, 0x1a,
+ 0x51, 0x19, 0x3c, 0x6f, 0x5b, 0xf5, 0x6c, 0xb1,
+ 0x8c, 0x91, 0x25, 0x89, 0x3a, 0x45, 0xb5, 0x35,
+ 0x13, 0x74, 0xec, 0x68, 0x44, 0xb8, 0xfd, 0xd6,
+ 0x20, 0x78, 0x7b, 0xe3, 0xe0, 0x82, 0xb7, 0x4a,
+ 0x38, 0xb6, 0xe4, 0x1b, 0xbf, 0xd9, 0xd3, 0xe9,
+ 0xbf, 0xd7, 0xdc, 0x8e, 0x90, 0x7d, 0xcb, 0x39,
+ 0xc4, 0x6c, 0xa4, 0x70, 0x15, 0xf7, 0xa2, 0x16,
+ 0x04, 0x9b, 0xc0, 0x85, 0x04, 0x1e, 0x69, 0x73,
+ 0xf3, 0xbd, 0x64, 0x95, 0xfb, 0x21, 0xcb, 0xca,
+ 0x72, 0xd4, 0x33, 0xe5, 0x11, 0xc3, 0x46, 0xa6,
+ 0xd2, 0x4c, 0x8a, 0xbb, 0xba, 0x45, 0xcc, 0x45,
+ 0xdb, 0x8a, 0xec, 0xef, 0x8c, 0x04, 0xcc, 0xeb,
+ 0x42, 0xad, 0xc3, 0x87, 0xe2, 0x59, 0x3b, 0xed,
+ 0x2a, 0x11, 0x74, 0xc1, 0x28, 0x8a, 0xc2, 0x17,
+ 0xca, 0x5a, 0x88, 0xcc, 0x17, 0x2c, 0x03, 0xf6,
+ 0xcd, 0xd6, 0x92, 0xbd, 0x68, 0x26, 0x41, 0x40,
+ 0x15, 0x3e, 0x54, 0xf5, 0xb7, 0x4a, 0x82, 0x68,
+ 0xca, 0x27, 0xed, 0xed, 0x25, 0xd6, 0x0d, 0x0f,
+ 0x86, 0x62, 0xf0, 0x86, 0x5b, 0xed, 0x94, 0x0b,
+ 0xd0, 0xec, 0xc7, 0xfd, 0x9c, 0x8a, 0xdf, 0x4f,
+ 0x65, 0x7e, 0x63, 0x40, 0xeb, 0xe4, 0x79, 0xcb,
+ 0x67, 0xc6, 0x0e, 0x45, 0xf9, 0xb1, 0x48, 0x27,
+ 0x16, 0xfc, 0x99, 0x76, 0xac, 0xd0, 0xbc, 0xe6,
+ 0x9b, 0x29, 0x2d, 0xa5, 0x6c, 0x88, 0x45, 0x7a,
+ 0x01, 0xf3, 0xe3, 0x15, 0xfb, 0x29, 0xd4, 0x3b,
+ 0x9a, 0xa8, 0xc6, 0x98, 0x92, 0x19, 0x16, 0xba,
+ 0xdc, 0x41, 0x70, 0x40, 0x51, 0xfb, 0x7f, 0xb5,
+ 0xe4, 0x3f, 0x3f, 0x73, 0xb0, 0xb3, 0xd7, 0x6d,
+ 0x3e, 0x4d, 0x6b, 0x9e, 0x42, 0x8e, 0xbb, 0xd7,
+ 0xb5, 0x26, 0xa9, 0x19, 0xf5, 0x68, 0xf3, 0x8d,
+ 0x35, 0x91, 0x06, 0x48, 0xfa, 0x0e, 0x7d, 0xe2,
+ 0xd3, 0x71, 0x75, 0x44, 0xbd, 0xe6, 0xe6, 0xd6,
+ 0x36, 0x43, 0x64, 0x3a, 0xd5, 0x97, 0xfa, 0xc0,
+ 0x10, 0xf7, 0x6c, 0x26, 0xf1, 0xb4, 0xbc, 0xf5,
+ 0xf6, 0xa3, 0xec, 0x0a, 0xb5, 0x34, 0x55, 0x1a,
+ 0x67, 0xcb, 0xec, 0x2c, 0x2e, 0x2e, 0x74, 0xed,
+ 0xfc, 0x85, 0x53, 0x01, 0x87, 0xa7, 0xa0, 0x1f,
+};
+
+const struct testvec bf_cbc_128_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_128_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t bf_cbc_256_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0x14, 0xec, 0xa9, 0xa0, 0x51, 0x9f, 0x5e, 0xb5,
+ 0x81, 0x6f, 0xa2, 0xbf, 0x5e, 0xf7, 0x91, 0xad,
+ 0xc5, 0x1a, 0x7e, 0xe6, 0x7a, 0x82, 0x4a, 0xba,
+ 0x54, 0x60, 0xcb, 0xc3, 0x2f, 0x69, 0x5c, 0xd9,
+ 0x1e, 0x58, 0xa1, 0x88, 0xa1, 0xe5, 0xa8, 0x52,
+ 0xdf, 0xf3, 0x8d, 0x5e, 0x2f, 0x81, 0x54, 0xab,
+ 0x67, 0xb5, 0x05, 0x63, 0x20, 0x10, 0x98, 0xf5,
+ 0xa5, 0xc3, 0x9e, 0x6d, 0x80, 0x4d, 0xb6, 0x82,
+ 0x80, 0x5e, 0xb3, 0xc5, 0xd8, 0x77, 0x94, 0xa0,
+ 0xb8, 0x67, 0xb8, 0x2d, 0x9b, 0x11, 0x3c, 0x24,
+ 0xbd, 0xb7, 0x0b, 0x1d, 0xeb, 0x1d, 0x6c, 0xab,
+ 0x3f, 0x8c, 0x91, 0xa0, 0x3a, 0xa6, 0x0c, 0x5a,
+ 0x88, 0xa0, 0xb5, 0xea, 0x49, 0x58, 0xfb, 0x37,
+ 0x7c, 0x94, 0xc4, 0x22, 0x35, 0x84, 0xda, 0xd1,
+ 0x1b, 0x4a, 0x42, 0xa1, 0xd4, 0x90, 0xcd, 0xfb,
+ 0x77, 0x29, 0xd2, 0xe3, 0x89, 0xec, 0x9e, 0x6a,
+ 0x4b, 0xbc, 0xc0, 0xfa, 0xb8, 0xdd, 0x5c, 0x2b,
+ 0xc5, 0x49, 0xb1, 0x6d, 0x6f, 0x2c, 0xb5, 0x50,
+ 0xd1, 0xd4, 0x9b, 0x15, 0x1c, 0xd7, 0x44, 0xf3,
+ 0x2e, 0x1f, 0x46, 0xee, 0x38, 0x40, 0xaa, 0x73,
+ 0xca, 0xf2, 0xc3, 0x83, 0xe2, 0xff, 0xd6, 0xc7,
+ 0x20, 0xea, 0x70, 0x95, 0x48, 0x58, 0x29, 0x6e,
+ 0xac, 0x10, 0x75, 0x69, 0x1d, 0xb2, 0x08, 0x3e,
+ 0x68, 0x43, 0xff, 0x69, 0x1e, 0x88, 0x0a, 0x34,
+ 0x40, 0xae, 0xb9, 0xf4, 0xb9, 0x3f, 0xa5, 0xd2,
+ 0xfb, 0xa0, 0xfd, 0x10, 0xa5, 0xbb, 0xd7, 0x22,
+ 0x8c, 0xd1, 0xf5, 0xc4, 0x11, 0xc6, 0x1e, 0xb5,
+ 0xfc, 0x90, 0x84, 0xa2, 0x49, 0x38, 0x64, 0x92,
+ 0x6e, 0xf2, 0xaa, 0xed, 0xe8, 0x9d, 0xac, 0x86,
+ 0xb7, 0xb3, 0xd9, 0x98, 0x11, 0x8f, 0x51, 0x33,
+ 0x84, 0x06, 0x40, 0x26, 0x3f, 0xe1, 0xb3, 0x4a,
+ 0x76, 0x53, 0x68, 0x8b, 0xfe, 0x6f, 0xcd, 0x66,
+ 0x92, 0x24, 0x42, 0xf4, 0x11, 0x02, 0x01, 0x00,
+ 0xaa, 0x15, 0x35, 0x42, 0xab, 0x6f, 0x2b, 0x3b,
+ 0x9a, 0x23, 0x73, 0x18, 0xa8, 0x9b, 0x43, 0x4b,
+ 0xfb, 0xef, 0x07, 0x75, 0xd7, 0xd6, 0x08, 0x94,
+ 0xe3, 0x2d, 0xd9, 0xd4, 0x8e, 0x6b, 0x7c, 0xe0,
+ 0xae, 0xef, 0xcb, 0x5c, 0x46, 0x39, 0x64, 0x34,
+ 0x48, 0x77, 0x2c, 0x87, 0x68, 0x57, 0xef, 0xba,
+ 0xd3, 0x3b, 0xb8, 0x68, 0xc5, 0x65, 0x73, 0x44,
+ 0x0b, 0xef, 0xc7, 0x5e, 0xe6, 0xa2, 0xba, 0x24,
+ 0x8c, 0x67, 0xa0, 0xf4, 0xef, 0x18, 0x8c, 0x72,
+ 0x5b, 0x81, 0x8c, 0x81, 0x4f, 0x9a, 0xed, 0x46,
+ 0x5d, 0x05, 0x9a, 0xdc, 0x01, 0xbe, 0xe8, 0x3f,
+ 0xb7, 0x5c, 0x8b, 0x2f, 0x92, 0x2c, 0x93, 0x54,
+ 0x68, 0xfa, 0xd4, 0x27, 0x81, 0xab, 0xa9, 0xfd,
+ 0x20, 0x21, 0x1b, 0x3a, 0x6e, 0x6b, 0x02, 0x57,
+ 0x6e, 0xd6, 0x7b, 0x7e, 0x5d, 0x84, 0x47, 0x69,
+ 0x86, 0x7b, 0x8f, 0x8b, 0xff, 0xb5, 0xcd, 0xc1,
+ 0x03, 0x18, 0x23, 0x7f, 0x23, 0x2e, 0x3a, 0x48,
+ 0xe2, 0xf6, 0xb1, 0x78, 0x13, 0x81, 0xbb, 0x80,
+ 0x91, 0x89, 0x54, 0x7d, 0x1f, 0x1a, 0xd5, 0x35,
+ 0xad, 0x56, 0x6a, 0x0f, 0xeb, 0x4d, 0x00, 0xdf,
+ 0xe0, 0xf3, 0x7c, 0xd3, 0x2c, 0x5a, 0x48, 0x39,
+ 0xa1, 0xc1, 0xfa, 0x34, 0x5f, 0xf9, 0x0b, 0xcd,
+ 0x1f, 0x21, 0xc6, 0x46, 0xb3, 0xd8, 0x45, 0xc5,
+ 0x37, 0xf7, 0xd0, 0xda, 0x27, 0x0f, 0xec, 0xec,
+ 0x05, 0x81, 0x6f, 0x97, 0xca, 0x6d, 0xfa, 0x71,
+ 0xc9, 0x59, 0x84, 0xc3, 0x0d, 0x55, 0x12, 0xbf,
+ 0xe1, 0xd2, 0x7c, 0x51, 0x65, 0x8c, 0xc3, 0x8a,
+ 0x73, 0x2f, 0x1c, 0xd8, 0x13, 0x4a, 0xd1, 0x78,
+ 0xb2, 0xc8, 0x19, 0x09, 0xce, 0x7b, 0xb6, 0x77,
+ 0xcc, 0xc3, 0xe6, 0xee, 0x3a, 0x82, 0xf9, 0xc6,
+ 0x5a, 0x36, 0x46, 0xc0, 0x25, 0xee, 0xaf, 0x78,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t bf_cbc_256_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x0b, 0xb6, 0x26, 0x92, 0x1d, 0x74, 0xc2, 0x10,
+ 0xb5, 0x99, 0x5f, 0x62, 0x7f, 0x3b, 0x49, 0x10,
+ 0xc1, 0x20, 0x9f, 0x38, 0x25, 0x0f, 0x59, 0xde,
+ 0xe4, 0xc8, 0xb5, 0x27, 0xb1, 0xec, 0x96, 0x40,
+ 0xe8, 0x05, 0x15, 0x40, 0x96, 0xe0, 0xff, 0xaf,
+ 0x53, 0x73, 0xa1, 0xa6, 0x73, 0x03, 0xcf, 0x1f,
+ 0x87, 0x48, 0x7d, 0x81, 0x0e, 0x35, 0x23, 0x7b,
+ 0xde, 0x12, 0xd8, 0xcd, 0x0a, 0xcb, 0x03, 0xc5,
+ 0x07, 0xf7, 0x7a, 0x04, 0xf3, 0xda, 0x7d, 0x3b,
+ 0x73, 0xc6, 0x31, 0xbc, 0x24, 0xde, 0x23, 0x05,
+ 0x3a, 0xdc, 0xe2, 0x96, 0x85, 0x06, 0xeb, 0x89,
+ 0xb0, 0x49, 0x3c, 0x79, 0x8e, 0xcf, 0x49, 0x0e,
+ 0x34, 0x04, 0xa5, 0xcf, 0x45, 0x56, 0xb6, 0xc2,
+ 0xf1, 0xf1, 0xab, 0x7c, 0x8a, 0xfc, 0xeb, 0xa0,
+ 0x8a, 0xe6, 0x73, 0xb4, 0xc3, 0x0c, 0x03, 0x5f,
+ 0x03, 0x53, 0x6f, 0x69, 0xa2, 0xd0, 0xa7, 0x48,
+ 0xc4, 0x11, 0x88, 0x75, 0xe1, 0xf3, 0xd0, 0x72,
+ 0x98, 0x6f, 0x84, 0xa6, 0xa8, 0x35, 0xbb, 0xac,
+ 0x4d, 0xac, 0x55, 0x88, 0x85, 0x86, 0x5a, 0xd9,
+ 0xb6, 0x57, 0xf9, 0x40, 0xf6, 0x7f, 0x1b, 0x4e,
+ 0x87, 0xc0, 0x56, 0x8a, 0x2f, 0x3a, 0xe5, 0xa6,
+ 0x67, 0x68, 0x21, 0x2b, 0xea, 0xfa, 0xee, 0x47,
+ 0xa0, 0x34, 0x56, 0x7d, 0xa0, 0x3d, 0x58, 0xd7,
+ 0xff, 0xa2, 0xb6, 0x03, 0x52, 0x16, 0xa5, 0x15,
+ 0x65, 0xdb, 0xe1, 0x1b, 0xdf, 0x69, 0xb1, 0x48,
+ 0x6a, 0xdf, 0xc1, 0x00, 0x07, 0xdc, 0x46, 0x4b,
+ 0x59, 0xcf, 0x15, 0x6b, 0xee, 0x4f, 0x72, 0x77,
+ 0x6e, 0xbf, 0x47, 0x0e, 0x84, 0x0b, 0xb1, 0xac,
+ 0x85, 0xce, 0x2b, 0x47, 0x7a, 0xcc, 0x30, 0x0c,
+ 0x2f, 0x10, 0x27, 0xaa, 0x83, 0x3f, 0x17, 0x39,
+ 0x84, 0x45, 0x8c, 0xb7, 0x31, 0xb3, 0x7c, 0xcd,
+ 0xed, 0x86, 0x7d, 0xa9, 0x06, 0x25, 0x1f, 0xe3,
+ 0x9a, 0x9b, 0x92, 0xdd, 0x07, 0x63, 0x3b, 0x51,
+ 0x32, 0x2e, 0xae, 0xdf, 0xad, 0xd4, 0x54, 0x5d,
+ 0x71, 0x36, 0xe9, 0xda, 0x70, 0xe9, 0xec, 0x75,
+ 0x0b, 0xbb, 0xcc, 0x5d, 0xc5, 0x45, 0x8e, 0x56,
+ 0x12, 0x87, 0x95, 0x0f, 0x0f, 0x5b, 0x22, 0xc2,
+ 0xe9, 0x71, 0xf2, 0x7e, 0x7b, 0xc2, 0xce, 0x1f,
+ 0xb4, 0x43, 0xa5, 0xf1, 0x80, 0x03, 0xd9, 0x44,
+ 0x3e, 0x97, 0xd6, 0x32, 0x80, 0x99, 0x6b, 0x5b,
+ 0x25, 0x8b, 0x73, 0x0c, 0x21, 0xda, 0x87, 0x29,
+ 0x57, 0x1e, 0xa3, 0x1f, 0xc1, 0xb2, 0xd6, 0xa4,
+ 0x72, 0x64, 0x4a, 0x6b, 0x6f, 0x4d, 0xa8, 0x03,
+ 0x59, 0x6f, 0xce, 0x8a, 0xd6, 0x1c, 0x63, 0x30,
+ 0x60, 0xd1, 0x55, 0xc5, 0x44, 0x9a, 0xa8, 0x69,
+ 0x9f, 0xc7, 0xbe, 0xca, 0x92, 0x83, 0xe9, 0xea,
+ 0x51, 0x00, 0x5a, 0xdc, 0xbb, 0xbd, 0x5d, 0xf2,
+ 0x6d, 0x3c, 0x09, 0xde, 0x68, 0x33, 0x5f, 0x5c,
+ 0x80, 0x8e, 0x22, 0x93, 0x28, 0x5b, 0x77, 0xae,
+ 0xcd, 0x0d, 0x08, 0xab, 0x94, 0xd6, 0x12, 0x72,
+ 0x3f, 0xd2, 0xb3, 0xff, 0x87, 0x0a, 0x6f, 0x72,
+ 0xa7, 0xff, 0xc1, 0xdc, 0x8a, 0x64, 0xdf, 0xeb,
+ 0x0e, 0x63, 0x71, 0x42, 0x88, 0x2b, 0x13, 0x17,
+ 0xf2, 0x3b, 0xf9, 0xbb, 0xc9, 0xcc, 0x32, 0x1f,
+ 0x12, 0x7f, 0xa0, 0x8e, 0x77, 0x31, 0x42, 0x46,
+ 0x3d, 0xb6, 0xa9, 0x14, 0x6e, 0x02, 0x5a, 0x4f,
+ 0xf1, 0x5b, 0x91, 0x7e, 0x93, 0xea, 0x94, 0xf1,
+ 0xcf, 0x0e, 0x10, 0xf8, 0xc2, 0x55, 0x87, 0x68,
+ 0xf9, 0x49, 0xfa, 0xeb, 0x0f, 0x2c, 0xd7, 0xd8,
+ 0x26, 0x1a, 0x5b, 0x1a, 0x42, 0x06, 0xea, 0x8a,
+ 0xb6, 0xec, 0x6e, 0xb0, 0x00, 0xb9, 0x3b, 0x50,
+ 0xe8, 0x9e, 0xc2, 0x51, 0x4f, 0x03, 0xcd, 0x9f,
+ 0x36, 0x27, 0xca, 0xa2, 0x98, 0x87, 0x5a, 0xae,
+ 0xd8, 0x87, 0x76, 0xb6, 0xb6, 0x19, 0x7d, 0x75,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t bf_cbc_256_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x91, 0x45, 0x4e, 0xe8, 0xad, 0xe3, 0x95, 0x0f,
+ 0x40, 0x35, 0x21, 0x21, 0x77, 0x62, 0x1d, 0x65,
+ 0xe4, 0x93, 0x11, 0xd2, 0x20, 0xa4, 0xe4, 0x53,
+ 0x44, 0xff, 0x60, 0xe9, 0x34, 0xb2, 0x33, 0x87,
+ 0x3d, 0xb0, 0xd8, 0x37, 0x7e, 0x0e, 0x9a, 0x53,
+ 0x92, 0xeb, 0xee, 0x16, 0x41, 0x25, 0xe3, 0x80,
+ 0x0c, 0x53, 0xd8, 0x1f, 0xf0, 0x99, 0xcb, 0x31,
+ 0xd1, 0x00, 0x82, 0x03, 0xcc, 0xa9, 0x5c, 0x8d,
+ 0x1a, 0xbb, 0x03, 0x81, 0x80, 0x0d, 0x5d, 0x4a,
+ 0x96, 0x74, 0x79, 0xf4, 0xa7, 0x46, 0x97, 0x42,
+ 0x5e, 0xb6, 0x8d, 0xc1, 0x95, 0x1d, 0x98, 0x4d,
+ 0xe5, 0xe9, 0x70, 0x1a, 0x5a, 0xad, 0xf4, 0x3d,
+ 0xe1, 0xa7, 0x25, 0xc7, 0xfa, 0x0a, 0x75, 0x98,
+ 0x2f, 0xef, 0x16, 0x2e, 0xf2, 0x02, 0x8a, 0x4c,
+ 0x1f, 0x5a, 0xbb, 0x06, 0x1b, 0x4e, 0x50, 0xfb,
+ 0x03, 0xed, 0x2a, 0x53, 0xdc, 0x2a, 0x65, 0xad,
+ 0x57, 0x84, 0x48, 0xdb, 0xd2, 0x9b, 0xc0, 0x01,
+ 0x5f, 0x7d, 0x3e, 0x84, 0xe5, 0x15, 0x7d, 0xc5,
+ 0x60, 0x4b, 0x18, 0xa1, 0xf3, 0x00, 0x82, 0xd3,
+ 0x39, 0x2a, 0x1f, 0x8f, 0x6a, 0xb7, 0xeb, 0x76,
+ 0xfb, 0xf0, 0x5e, 0x66, 0xd8, 0xf1, 0x85, 0xa8,
+ 0x17, 0xdc, 0x6a, 0xee, 0x53, 0xd9, 0x72, 0x27,
+ 0xd1, 0x47, 0x73, 0x97, 0x2c, 0xd7, 0xd2, 0xb8,
+ 0xcd, 0xbe, 0x7b, 0xcc, 0xcc, 0x7d, 0x82, 0x10,
+ 0x05, 0x5d, 0xff, 0xb0, 0xe0, 0x3a, 0xda, 0x1b,
+ 0x39, 0x7b, 0x11, 0x30, 0x4f, 0xe7, 0xf9, 0xa6,
+ 0x43, 0x56, 0x01, 0xe4, 0xed, 0x1a, 0x22, 0x5b,
+ 0x53, 0x6b, 0x34, 0x58, 0x21, 0x3f, 0x0d, 0xca,
+ 0x95, 0x24, 0x9a, 0xb0, 0x03, 0xe3, 0x97, 0xf5,
+ 0x9b, 0xcb, 0x10, 0x6f, 0x1d, 0x8a, 0x8b, 0xaa,
+ 0x14, 0x0a, 0x89, 0x92, 0xa1, 0x07, 0xb1, 0x35,
+ 0x40, 0x7f, 0xb0, 0xc3, 0x9a, 0x2a, 0x1f, 0x94,
+ 0x6c, 0x8f, 0xd8, 0x40, 0x52, 0xec, 0x0e, 0xbf,
+ 0x91, 0x27, 0xbd, 0x65, 0x25, 0xf2, 0x36, 0xe8,
+ 0x8f, 0x49, 0x08, 0xa6, 0x8f, 0x82, 0xb3, 0x47,
+ 0xe9, 0xa4, 0xa6, 0x8e, 0xfb, 0x30, 0xb2, 0x4c,
+ 0xad, 0x76, 0x65, 0x25, 0xdb, 0x60, 0xa8, 0xeb,
+ 0xb9, 0xf9, 0x9a, 0x9c, 0x9c, 0x12, 0xab, 0xeb,
+ 0x4b, 0x96, 0xa5, 0xc3, 0x58, 0x9b, 0x68, 0x2c,
+ 0x41, 0xac, 0xe5, 0x03, 0xbc, 0xee, 0xb8, 0x05,
+ 0xf7, 0xe6, 0xb1, 0x07, 0xde, 0x46, 0x28, 0xc1,
+ 0x2c, 0x15, 0xa2, 0x34, 0xea, 0xe7, 0xc3, 0x36,
+ 0xe6, 0x18, 0x20, 0x4e, 0x20, 0x3f, 0x32, 0xa8,
+ 0x29, 0x05, 0xf6, 0xa5, 0xf2, 0xa3, 0xeb, 0x7a,
+ 0x25, 0x5e, 0x14, 0x1f, 0xd0, 0xe1, 0x8e, 0xfb,
+ 0x28, 0xc5, 0xa2, 0x42, 0xed, 0x4c, 0x12, 0x15,
+ 0x2a, 0x08, 0xfb, 0x0b, 0xfb, 0x94, 0x64, 0xc0,
+ 0x8b, 0xbb, 0xbb, 0x2c, 0xef, 0xab, 0x0b, 0x4c,
+ 0x27, 0x40, 0x94, 0x3e, 0x93, 0x77, 0x98, 0xcc,
+ 0x64, 0xe3, 0xba, 0x22, 0x95, 0xd7, 0xc1, 0xe3,
+ 0xa7, 0xcd, 0xf9, 0x25, 0xdc, 0xc4, 0xd2, 0xee,
+ 0x5b, 0x53, 0x72, 0x59, 0x8b, 0xea, 0xbf, 0xde,
+ 0x2b, 0x35, 0xd5, 0x27, 0x57, 0x2e, 0x13, 0xa7,
+ 0x50, 0x2d, 0xa5, 0xd5, 0x43, 0x0b, 0x49, 0x87,
+ 0xd0, 0xbd, 0xdd, 0xec, 0x4b, 0xd1, 0x8b, 0xf6,
+ 0xf6, 0xd0, 0x97, 0xcb, 0x8d, 0x58, 0x35, 0x27,
+ 0xa5, 0x7e, 0x4a, 0xda, 0x93, 0xa4, 0x1e, 0x39,
+ 0x53, 0x59, 0x87, 0xfe, 0x82, 0x09, 0xda, 0x03,
+ 0x33, 0xcf, 0x94, 0x60, 0xb1, 0x0c, 0xa1, 0x0e,
+ 0xd6, 0xaa, 0xb0, 0x09, 0x96, 0x8b, 0x72, 0x15,
+ 0xfb, 0xb0, 0x7d, 0x06, 0xf5, 0x2d, 0x64, 0xcd,
+ 0x03, 0xf0, 0xfa, 0xed, 0x6f, 0x43, 0xe3, 0xf3,
+ 0x33, 0xaf, 0x65, 0x82, 0x1d, 0xad, 0x03, 0x62,
+ 0xbe, 0x12, 0x14, 0x85, 0x66, 0x45, 0x03, 0x79,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t bf_cbc_256_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0x65, 0xbb, 0x30, 0x13, 0x9a, 0x26, 0xe9, 0x3d,
+ 0x54, 0x28, 0x77, 0xf1, 0x3f, 0x9b, 0xe1, 0x3e,
+ 0x70, 0x90, 0x6f, 0x16, 0xfc, 0x2f, 0x27, 0xb3,
+ 0xc6, 0x3c, 0x38, 0x31, 0x11, 0xe1, 0x3b, 0x72,
+ 0x22, 0x1c, 0x01, 0xc5, 0xa6, 0x70, 0x16, 0x4d,
+ 0xd2, 0xbd, 0xcb, 0x15, 0x00, 0x22, 0xab, 0x65,
+ 0x6a, 0x96, 0x5e, 0x45, 0x7f, 0xfd, 0x76, 0x18,
+ 0x43, 0x25, 0x75, 0x73, 0xa4, 0x24, 0xe4, 0x5b,
+ 0xca, 0xf7, 0x6f, 0xfe, 0xc6, 0x4c, 0x81, 0x77,
+ 0xe5, 0x1b, 0xb4, 0x7b, 0x64, 0xc2, 0x0d, 0x2b,
+ 0xa9, 0x76, 0xae, 0x5d, 0xab, 0x81, 0x77, 0xa6,
+ 0x48, 0xe9, 0x0c, 0x6d, 0x93, 0xbd, 0x7e, 0xdc,
+ 0x39, 0x89, 0x72, 0xd2, 0x07, 0x87, 0x44, 0xa6,
+ 0x7d, 0x08, 0x54, 0xc6, 0x90, 0x1d, 0xa2, 0xd7,
+ 0xfd, 0xd5, 0x59, 0x67, 0xd9, 0x5f, 0x5c, 0xbc,
+ 0x60, 0xc7, 0xf6, 0x98, 0xad, 0x21, 0xdf, 0xde,
+ 0x27, 0xca, 0x73, 0x2f, 0x56, 0xb7, 0xd7, 0x54,
+ 0x6e, 0xc3, 0x09, 0x6f, 0x1b, 0x82, 0x6f, 0xf8,
+ 0x1b, 0xb2, 0x54, 0x47, 0x54, 0x55, 0x67, 0x1c,
+ 0x4a, 0x10, 0x44, 0xb8, 0x8e, 0x85, 0x71, 0x70,
+ 0x02, 0x49, 0xdd, 0x4f, 0xd4, 0xd4, 0x8a, 0x60,
+ 0x04, 0x17, 0x84, 0xbf, 0xb4, 0x0a, 0x6f, 0xc1,
+ 0xec, 0x1f, 0x5d, 0x79, 0x59, 0x15, 0x7b, 0x87,
+ 0xa2, 0xfe, 0x81, 0xa1, 0x0b, 0x74, 0xfa, 0xef,
+ 0xce, 0x96, 0xec, 0x4b, 0xd8, 0x8e, 0xe9, 0xc2,
+ 0x6b, 0x15, 0xd9, 0xe4, 0x1d, 0x81, 0xb2, 0x12,
+ 0xb9, 0x8b, 0x64, 0x3d, 0xfa, 0xf6, 0x29, 0x25,
+ 0x88, 0x4f, 0xfa, 0x56, 0x34, 0x85, 0xa6, 0xbe,
+ 0xf7, 0x9f, 0x54, 0xc4, 0xb7, 0x17, 0xd5, 0x00,
+ 0x2d, 0x06, 0xca, 0xf0, 0xec, 0xf9, 0x52, 0x62,
+ 0x12, 0xef, 0xc0, 0x57, 0xd1, 0xf3, 0xf2, 0xb1,
+ 0x3d, 0xc5, 0x69, 0x04, 0x95, 0xaf, 0xc6, 0x54,
+ 0x18, 0x08, 0x2f, 0xe2, 0xc2, 0xdb, 0x28, 0x63,
+ 0x7c, 0xf5, 0xba, 0xa4, 0xdf, 0xbd, 0xdd, 0xac,
+ 0x98, 0xec, 0x9e, 0x07, 0x48, 0xee, 0xb9, 0x6f,
+ 0x40, 0xba, 0x08, 0xd5, 0x74, 0x97, 0x34, 0x98,
+ 0x7a, 0x80, 0xc5, 0x78, 0x69, 0x11, 0xd9, 0xcb,
+ 0x3b, 0x6f, 0xe7, 0xb7, 0x78, 0xb0, 0x5e, 0x02,
+ 0xaf, 0x6c, 0xef, 0x36, 0x00, 0xca, 0x97, 0x1a,
+ 0x01, 0x2e, 0xe8, 0xc0, 0x8b, 0xc6, 0x78, 0xf4,
+ 0x2d, 0x60, 0x2c, 0x04, 0x3f, 0x0b, 0xca, 0x7e,
+ 0xf1, 0x2e, 0x67, 0x8f, 0x9d, 0xa7, 0xaa, 0xab,
+ 0xcf, 0xb3, 0x84, 0x9e, 0x14, 0x35, 0x15, 0x3b,
+ 0x88, 0x9a, 0x33, 0x5d, 0x68, 0x82, 0x29, 0x53,
+ 0x94, 0x18, 0x0d, 0x14, 0x9e, 0x5f, 0xc1, 0x32,
+ 0x0a, 0x95, 0x6e, 0xa3, 0x82, 0x4b, 0x58, 0x0f,
+ 0x9c, 0xf0, 0x26, 0x4b, 0x2f, 0x02, 0x60, 0x85,
+ 0xdd, 0x2c, 0xb8, 0x87, 0x8b, 0x14, 0x9c, 0x54,
+ 0x0a, 0x5a, 0x02, 0xbe, 0xe2, 0x71, 0xcc, 0x07,
+ 0xae, 0x67, 0x00, 0xa8, 0xd4, 0x09, 0x7c, 0xee,
+ 0x0d, 0x29, 0x17, 0x67, 0x96, 0x68, 0x41, 0xfa,
+ 0x72, 0x29, 0x98, 0x2b, 0x23, 0xd1, 0xa9, 0x89,
+ 0x1c, 0xcc, 0xaf, 0x88, 0xdb, 0xb5, 0x1e, 0xb1,
+ 0xae, 0x17, 0x5f, 0x29, 0x8d, 0x1c, 0x0a, 0x5c,
+ 0xb9, 0xa7, 0x59, 0x8b, 0x91, 0x41, 0xee, 0x89,
+ 0xe1, 0x0e, 0x7e, 0x0a, 0xee, 0xbc, 0x35, 0xab,
+ 0xf1, 0x5a, 0x58, 0x03, 0xa2, 0xcf, 0x33, 0xa3,
+ 0x74, 0x82, 0xd3, 0xa0, 0x32, 0xfc, 0x3b, 0x9c,
+ 0xdf, 0xc0, 0x3a, 0x76, 0xe1, 0xea, 0xf0, 0x6d,
+ 0xc8, 0xe7, 0x97, 0xec, 0x03, 0xc1, 0x72, 0x94,
+ 0xe5, 0xc4, 0x04, 0x2a, 0x38, 0xb4, 0xef, 0x47,
+ 0x1d, 0xf9, 0xb8, 0x0a, 0xa9, 0x45, 0xc1, 0x63,
+ 0xf8, 0x32, 0xdb, 0x5d, 0xb1, 0xa2, 0x80, 0x8c,
+ 0x23, 0xd3, 0x60, 0xfb, 0xf8, 0x84, 0x57, 0x8b,
+};
+
+const struct testvec bf_cbc_256_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t bf_cbc_256_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0x90, 0x3d, 0xd2, 0xc0, 0xd3, 0x75, 0xe8, 0x04,
+ 0x34, 0x66, 0x76, 0x25, 0x70, 0xde, 0x41, 0xf1,
+ 0x35, 0x63, 0x5c, 0xac, 0x8f, 0x28, 0x17, 0xd3,
+ 0xae, 0x43, 0xfd, 0x8a, 0xb8, 0xc2, 0xd3, 0x88,
+ 0xef, 0xfa, 0x21, 0xeb, 0xb4, 0x33, 0x75, 0x69,
+ 0x7d, 0xe9, 0x27, 0x1c, 0x03, 0xcf, 0x90, 0xcf,
+ 0xf0, 0xaa, 0x3e, 0x01, 0x41, 0x24, 0xdc, 0x01,
+ 0x5a, 0xe8, 0x92, 0xea, 0xde, 0x87, 0xbf, 0x75,
+ 0xe4, 0x0b, 0xf7, 0xa3, 0x42, 0x27, 0xc4, 0xde,
+ 0x01, 0x6f, 0x5c, 0xec, 0x6d, 0x37, 0x38, 0xd7,
+ 0x4f, 0x85, 0xc0, 0xc2, 0x3a, 0xa7, 0x2d, 0x15,
+ 0xd5, 0x1c, 0xee, 0x15, 0x13, 0x7a, 0x4e, 0x33,
+ 0xc7, 0x59, 0x93, 0x73, 0xe9, 0xf5, 0x39, 0xb0,
+ 0xad, 0x8b, 0x61, 0xca, 0x4d, 0x31, 0xaa, 0x44,
+ 0xf6, 0x5c, 0xb7, 0x99, 0xe5, 0x92, 0x3d, 0x47,
+ 0x79, 0x9b, 0x29, 0x16, 0xe1, 0x2c, 0x30, 0x8b,
+ 0x1e, 0x17, 0xf0, 0x91, 0x59, 0x00, 0xab, 0x6d,
+ 0x4d, 0xa7, 0x4d, 0x96, 0xc3, 0xe4, 0x3d, 0x17,
+ 0x5c, 0x8e, 0xfc, 0x59, 0x48, 0xd4, 0xdd, 0xf4,
+ 0xea, 0x3a, 0x68, 0xc8, 0xb1, 0x74, 0x69, 0xcb,
+ 0x49, 0x1a, 0xec, 0x24, 0x4e, 0x7e, 0xe9, 0xba,
+ 0x75, 0xfb, 0x52, 0x85, 0x75, 0xe9, 0x41, 0x9a,
+ 0xc6, 0x40, 0x9c, 0x92, 0x3f, 0xe8, 0x99, 0x81,
+ 0x84, 0x14, 0x2b, 0x62, 0x94, 0xba, 0x56, 0x00,
+ 0xde, 0x88, 0xe1, 0x35, 0xea, 0x25, 0x88, 0xd1,
+ 0xce, 0xd4, 0xfc, 0xde, 0xee, 0x1a, 0xfd, 0xb1,
+ 0xa7, 0x46, 0x9d, 0x0c, 0x99, 0xa6, 0xab, 0x23,
+ 0x55, 0x2f, 0x46, 0xd7, 0xb3, 0xcd, 0x2c, 0xab,
+ 0x93, 0x3e, 0xdb, 0xe2, 0x34, 0x69, 0x1a, 0x56,
+ 0x21, 0x92, 0x56, 0xf4, 0x05, 0xe1, 0x24, 0xee,
+ 0x4d, 0x5e, 0x89, 0xeb, 0x23, 0x26, 0xdc, 0x14,
+ 0xde, 0x56, 0x3f, 0x0c, 0x15, 0x3e, 0x42, 0x71,
+ 0x9b, 0xe8, 0xc5, 0xfd, 0x5e, 0x4a, 0xb6, 0xd9,
+ 0xa0, 0x18, 0x5d, 0xbd, 0xef, 0x80, 0xb4, 0xf6,
+ 0x1e, 0x56, 0x2a, 0x57, 0x13, 0xba, 0x24, 0xa4,
+ 0x6f, 0x4c, 0xd4, 0xaa, 0x31, 0x5e, 0x69, 0x26,
+ 0xd2, 0xee, 0xef, 0x7f, 0x83, 0x9c, 0x8e, 0x6a,
+ 0x17, 0xe3, 0xda, 0xf4, 0x59, 0xad, 0x26, 0x83,
+ 0x53, 0x4c, 0x0d, 0x62, 0xe5, 0x9a, 0x30, 0xc5,
+ 0x0a, 0xa8, 0xb1, 0x3b, 0x1b, 0x41, 0x5c, 0x74,
+ 0x42, 0x7b, 0x0c, 0x9e, 0x3c, 0x12, 0x04, 0x46,
+ 0xc3, 0xc7, 0x10, 0xea, 0xf1, 0x3b, 0xb1, 0x01,
+ 0xfe, 0x1b, 0xe8, 0xf8, 0x42, 0xbc, 0xe9, 0x11,
+ 0x9b, 0x63, 0x29, 0x99, 0x18, 0x79, 0x9e, 0xd2,
+ 0xbf, 0x9d, 0x93, 0x4d, 0x16, 0x0f, 0x14, 0x41,
+ 0xb6, 0x0c, 0xa5, 0x07, 0x13, 0x29, 0x21, 0x0d,
+ 0x8f, 0xf9, 0x0a, 0x0a, 0x54, 0xaf, 0xa6, 0x22,
+ 0x25, 0x79, 0x07, 0xe5, 0x3e, 0x49, 0x6b, 0x12,
+ 0x9e, 0xfc, 0x91, 0xdb, 0xf3, 0x7c, 0xdf, 0x03,
+ 0x9c, 0x78, 0xa7, 0xc3, 0x5e, 0x14, 0xde, 0xb5,
+ 0x6a, 0x7b, 0x3b, 0xe3, 0x4f, 0x8a, 0x49, 0xce,
+ 0xc9, 0x14, 0x29, 0x96, 0x84, 0xca, 0xe1, 0x49,
+ 0x41, 0x73, 0xb3, 0x2a, 0xbe, 0x37, 0xb6, 0x2d,
+ 0xff, 0xf2, 0x8e, 0x3d, 0x02, 0xeb, 0xd4, 0xd3,
+ 0x15, 0x8f, 0xc0, 0x00, 0x91, 0xd5, 0xe7, 0x76,
+ 0xf5, 0x6e, 0x81, 0x38, 0x38, 0x07, 0xa6, 0xe8,
+ 0x72, 0x14, 0x3b, 0x36, 0xef, 0xbc, 0x5b, 0x26,
+ 0xb0, 0x60, 0x25, 0x49, 0x7e, 0xfc, 0xd8, 0x3b,
+ 0x63, 0xdc, 0x7f, 0x80, 0xd5, 0x43, 0x78, 0xbb,
+ 0xf1, 0xf9, 0x3e, 0x75, 0x1d, 0x58, 0xb2, 0xc7,
+ 0xb6, 0x52, 0xfb, 0xe7, 0x42, 0xef, 0x87, 0xfd,
+ 0x3a, 0x02, 0x7a, 0xf9, 0xbc, 0xa8, 0x2f, 0xd6,
+ 0xc1, 0x5f, 0xa4, 0x57, 0x62, 0x83, 0x82, 0x8e,
+ 0x1e, 0xbb, 0x85, 0xf7, 0x1b, 0x2e, 0xe2, 0xb0,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t bf_cbc_256_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x2b, 0xf6, 0xd4, 0x61, 0x3b, 0x1f, 0x5b, 0xe9,
+ 0x32, 0xab, 0x27, 0xa1, 0xaf, 0x5e, 0xf4, 0xa7,
+ 0xaa, 0xc5, 0x2a, 0x3c, 0x0d, 0x34, 0xd8, 0xb3,
+ 0xfd, 0xb2, 0xca, 0xfb, 0x3c, 0x38, 0x96, 0x71,
+ 0x47, 0xaa, 0xa7, 0x2f, 0x48, 0x2c, 0x39, 0x88,
+ 0x2d, 0xc6, 0xb1, 0xf7, 0xc7, 0x2d, 0xda, 0xe9,
+ 0xfb, 0x4f, 0x9b, 0x1f, 0xe1, 0x0c, 0x24, 0x89,
+ 0xfe, 0x70, 0xe0, 0xb2, 0x51, 0x89, 0x51, 0xa9,
+ 0xae, 0xd1, 0x92, 0x4f, 0x56, 0x5c, 0x2a, 0xf4,
+ 0xbc, 0x4e, 0x77, 0x4a, 0xb8, 0xab, 0x02, 0x76,
+ 0xef, 0x69, 0xfb, 0x5e, 0x06, 0xb5, 0xff, 0x31,
+ 0xce, 0x2b, 0xfc, 0x48, 0x4c, 0x82, 0xe9, 0x3c,
+ 0x61, 0x69, 0x68, 0x1d, 0xb1, 0xc6, 0x40, 0x10,
+ 0xd7, 0x0e, 0xd2, 0x26, 0x33, 0x5b, 0x0b, 0xe7,
+ 0xc2, 0xbe, 0xf4, 0x24, 0x1a, 0xa6, 0x70, 0x31,
+ 0xa7, 0x15, 0x76, 0xc7, 0x90, 0x8d, 0x60, 0xe0,
+ 0xee, 0x5b, 0x73, 0xa9, 0xe1, 0xe1, 0xaf, 0xf0,
+ 0x5e, 0x6f, 0x32, 0x98, 0x92, 0xbe, 0x24, 0x81,
+ 0x26, 0x9f, 0xb8, 0x67, 0xd0, 0xca, 0x9d, 0x8f,
+ 0x14, 0xc8, 0x81, 0x2e, 0x57, 0x1c, 0x3a, 0xe0,
+ 0xdb, 0x49, 0xad, 0x47, 0x51, 0x07, 0x7d, 0xec,
+ 0xbc, 0xa5, 0x8f, 0xdf, 0x84, 0xe4, 0xdf, 0x76,
+ 0x8f, 0x0b, 0xef, 0xc4, 0x41, 0xd5, 0x7c, 0xf5,
+ 0x3c, 0x21, 0x62, 0xc0, 0x1f, 0xbd, 0x39, 0xbe,
+ 0xe5, 0x75, 0x64, 0xcd, 0xa4, 0xa0, 0x03, 0xf4,
+ 0x8a, 0x16, 0x3e, 0xde, 0x79, 0x9a, 0x96, 0xff,
+ 0xf2, 0xbe, 0x88, 0xfd, 0xac, 0xc1, 0x9d, 0x5b,
+ 0xbf, 0x2f, 0xde, 0xf0, 0x26, 0x2f, 0xc9, 0x45,
+ 0xbd, 0x26, 0xa5, 0x2c, 0x3c, 0x12, 0x8b, 0xc0,
+ 0xc8, 0x7a, 0x71, 0xbb, 0xc3, 0xe9, 0xf6, 0x15,
+ 0x01, 0x6e, 0x94, 0x37, 0xbc, 0xc5, 0x9a, 0x93,
+ 0x6f, 0x9c, 0x04, 0x7e, 0xe9, 0xb2, 0xba, 0xe8,
+ 0x86, 0xa1, 0x9c, 0x1f, 0x4b, 0x77, 0x6f, 0x99,
+ 0x2d, 0x8f, 0x23, 0x34, 0x32, 0x1a, 0x82, 0x2d,
+ 0x32, 0x41, 0x3e, 0xb8, 0x6a, 0x67, 0xa9, 0x81,
+ 0xd5, 0x1b, 0x76, 0x9f, 0xd1, 0xb0, 0x06, 0xaf,
+ 0x10, 0x9e, 0x00, 0x2e, 0xb3, 0x80, 0xde, 0xae,
+ 0xf2, 0x96, 0x12, 0x5b, 0xe7, 0xc7, 0x25, 0xb7,
+ 0xd9, 0x1c, 0x04, 0xe5, 0x05, 0xaf, 0x77, 0xfa,
+ 0x6d, 0xa8, 0x04, 0x74, 0xf8, 0x9c, 0x09, 0xcf,
+ 0xe2, 0xc2, 0xd1, 0xb6, 0xac, 0xed, 0xb4, 0xbc,
+ 0x2e, 0xc2, 0xf6, 0x3c, 0xc4, 0x47, 0xc8, 0x81,
+ 0x3a, 0x50, 0x3c, 0x5c, 0x7c, 0x86, 0x17, 0x22,
+ 0xe7, 0xa3, 0xff, 0x73, 0x5e, 0x91, 0xbf, 0xb3,
+ 0x59, 0x07, 0xb7, 0xa4, 0xd5, 0x1b, 0x5c, 0xce,
+ 0x56, 0xde, 0x5f, 0xae, 0x89, 0xcb, 0x6a, 0xfe,
+ 0xaf, 0xe7, 0xd4, 0x34, 0x8d, 0x18, 0x22, 0x4d,
+ 0xd9, 0x91, 0xa6, 0xec, 0x97, 0x0e, 0x29, 0x4d,
+ 0xf6, 0xd8, 0xb3, 0x50, 0x1c, 0xc9, 0x66, 0x9d,
+ 0x2e, 0x5e, 0x27, 0xce, 0x36, 0xcb, 0x47, 0x35,
+ 0x41, 0x16, 0x0c, 0x4e, 0x73, 0x90, 0x52, 0xc5,
+ 0x65, 0xb8, 0x0c, 0xdc, 0x36, 0x8d, 0xdc, 0xca,
+ 0x97, 0x0b, 0xbc, 0xcb, 0x79, 0xc7, 0x4c, 0xd2,
+ 0x21, 0x5c, 0xbd, 0xeb, 0xea, 0xfb, 0x87, 0xe1,
+ 0xe0, 0x75, 0x39, 0xb9, 0x84, 0x1e, 0xa7, 0xfe,
+ 0x7d, 0x41, 0x75, 0x15, 0x88, 0x98, 0xd4, 0x80,
+ 0x42, 0x57, 0xb5, 0x65, 0xbf, 0xb8, 0xbd, 0x19,
+ 0x28, 0xd8, 0xa7, 0x6c, 0xe7, 0xc1, 0x00, 0xdc,
+ 0xde, 0xcb, 0x30, 0x3d, 0x29, 0x5e, 0xa6, 0x9c,
+ 0xbb, 0xb8, 0xec, 0x28, 0x23, 0x36, 0x23, 0x27,
+ 0xee, 0xdd, 0x24, 0x7d, 0x9a, 0xc9, 0xb5, 0x3c,
+ 0x7a, 0x3f, 0x1d, 0xd9, 0x32, 0x47, 0xc0, 0x4d,
+ 0x86, 0x9b, 0x2d, 0xa9, 0x5c, 0x93, 0x90, 0x51,
+ 0x70, 0xe6, 0x8f, 0x35, 0x96, 0xe0, 0x11, 0x00,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t bf_cbc_256_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0x28, 0x93, 0x0f, 0x23, 0xfb, 0xa4, 0x9e, 0xe5,
+ 0x11, 0x38, 0x2b, 0xbd, 0x8d, 0x2d, 0xdb, 0x11,
+ 0xfa, 0xac, 0x74, 0x28, 0x95, 0x29, 0xf2, 0x92,
+ 0x8d, 0x00, 0x8a, 0x8a, 0x04, 0x92, 0x92, 0x33,
+ 0x8c, 0x4b, 0x29, 0x8e, 0xde, 0x59, 0xf4, 0x72,
+ 0xae, 0x2f, 0xe4, 0xe9, 0xd4, 0xe4, 0xb6, 0x69,
+ 0xc5, 0x1b, 0xbe, 0x02, 0x85, 0x4b, 0x24, 0x1e,
+ 0x79, 0xb9, 0x22, 0x29, 0x4c, 0x60, 0x8c, 0xc5,
+ 0x03, 0x1d, 0x79, 0xfe, 0x3d, 0x9e, 0x47, 0xb6,
+ 0xf7, 0x17, 0x65, 0x24, 0x15, 0x5d, 0x75, 0x4d,
+ 0xdb, 0xbc, 0x68, 0x67, 0x3b, 0xc3, 0x5a, 0x7e,
+ 0x9d, 0x98, 0x67, 0xe4, 0x8f, 0x9a, 0xd1, 0x31,
+ 0xe0, 0x26, 0xa1, 0x68, 0xbe, 0x53, 0x73, 0x7c,
+ 0xfd, 0xce, 0x6c, 0xd6, 0x1f, 0x51, 0xe6, 0x84,
+ 0x54, 0x7a, 0xe3, 0x7f, 0x7c, 0x8f, 0x2f, 0x88,
+ 0x58, 0xfe, 0x5e, 0x82, 0x11, 0xc9, 0xa5, 0x89,
+ 0xa4, 0x49, 0x92, 0x21, 0x0f, 0x03, 0xdb, 0x16,
+ 0xc4, 0xc0, 0x80, 0xb7, 0x16, 0x4c, 0x29, 0xbe,
+ 0x18, 0xfa, 0x2d, 0xdf, 0x4a, 0x23, 0x34, 0x9a,
+ 0x27, 0xea, 0xed, 0x95, 0x25, 0x14, 0xa8, 0x2e,
+ 0x17, 0x59, 0x04, 0xb0, 0x5c, 0x6d, 0xc7, 0xeb,
+ 0xed, 0xf6, 0x73, 0xae, 0x18, 0x0e, 0x4b, 0xec,
+ 0xc6, 0xb7, 0x39, 0xe7, 0x62, 0xf0, 0x84, 0x30,
+ 0x10, 0xb6, 0xf3, 0x27, 0x6d, 0xfe, 0x32, 0xe7,
+ 0xfe, 0xff, 0x43, 0xba, 0x89, 0xfe, 0x24, 0xa8,
+ 0x0e, 0x7c, 0xf2, 0x23, 0x9d, 0x66, 0x6f, 0x9c,
+ 0xe6, 0x88, 0xbc, 0x3f, 0x44, 0x4c, 0x73, 0x13,
+ 0x77, 0x95, 0x6f, 0xcb, 0xc8, 0xa5, 0x7a, 0xa9,
+ 0xeb, 0xe1, 0x0f, 0x9e, 0x25, 0xbe, 0x99, 0x1a,
+ 0x99, 0x7f, 0xbb, 0xec, 0x89, 0x91, 0x3e, 0x52,
+ 0xb5, 0xac, 0xc9, 0xd3, 0xea, 0xb0, 0xf2, 0x0c,
+ 0xc8, 0x58, 0x4b, 0x93, 0xa3, 0x9f, 0xad, 0x5a,
+ 0x80, 0x4e, 0x02, 0x20, 0x9d, 0xac, 0x4b, 0xe0,
+ 0x59, 0x4d, 0xb5, 0x51, 0x07, 0xf5, 0xa6, 0xb3,
+ 0xc9, 0x20, 0x58, 0x7e, 0x45, 0xec, 0x58, 0xea,
+ 0x49, 0xbb, 0x03, 0xf5, 0x6c, 0xdd, 0xcc, 0xa3,
+ 0x13, 0x21, 0x79, 0xc9, 0xc2, 0x92, 0x60, 0xd5,
+ 0xb2, 0x3b, 0x74, 0xbc, 0x57, 0xa6, 0x70, 0x36,
+ 0x75, 0xf5, 0x01, 0xd1, 0xb2, 0xe9, 0xfd, 0xc5,
+ 0x93, 0x5e, 0x60, 0x6b, 0xfd, 0xd2, 0x56, 0xc0,
+ 0x1f, 0xe4, 0xcd, 0x4c, 0xfa, 0xc4, 0xd8, 0xc2,
+ 0x2d, 0xf9, 0x9f, 0x82, 0x0f, 0x40, 0x7b, 0xad,
+ 0x35, 0x63, 0x95, 0x7e, 0x49, 0x4a, 0xfe, 0x8f,
+ 0xaa, 0x57, 0x3a, 0x0c, 0x59, 0x69, 0xe7, 0xb8,
+ 0xfc, 0x71, 0x5c, 0x4f, 0x18, 0x12, 0xe5, 0xef,
+ 0xdb, 0x1f, 0x66, 0x9a, 0xe2, 0x1a, 0x92, 0x1f,
+ 0xfe, 0x20, 0x81, 0xe5, 0x83, 0x97, 0xfb, 0xaf,
+ 0xeb, 0x31, 0x6c, 0x81, 0xf2, 0x2f, 0xf4, 0x41,
+ 0xf1, 0xd9, 0x61, 0xfb, 0x36, 0x4e, 0xab, 0xc5,
+ 0x8b, 0x9c, 0x37, 0xea, 0x88, 0xeb, 0x1e, 0x4c,
+ 0x84, 0x1a, 0xac, 0x4c, 0x19, 0x39, 0x51, 0x53,
+ 0xe0, 0x50, 0xb0, 0xdf, 0xe6, 0xc5, 0xbb, 0x80,
+ 0x06, 0x30, 0x14, 0xf5, 0x0e, 0x73, 0xd2, 0xdb,
+ 0x19, 0x45, 0x30, 0xdc, 0xd0, 0x4d, 0xe6, 0xd6,
+ 0x0e, 0x2d, 0x77, 0xa3, 0xb3, 0x27, 0xda, 0x99,
+ 0x62, 0x88, 0x35, 0xba, 0x64, 0x15, 0xec, 0xaf,
+ 0x70, 0x97, 0x94, 0x81, 0x30, 0x6d, 0x63, 0x42,
+ 0x71, 0x3e, 0x06, 0xec, 0x50, 0x96, 0x87, 0x59,
+ 0xe7, 0x26, 0x9c, 0xcf, 0xc7, 0xe7, 0x62, 0x82,
+ 0x3b, 0xd7, 0xfe, 0xb4, 0x48, 0x45, 0x9d, 0x54,
+ 0x18, 0x15, 0x13, 0x74, 0x92, 0x6f, 0x43, 0xb3,
+ 0xa9, 0x82, 0xd4, 0xc2, 0xef, 0x61, 0x9d, 0x5e,
+ 0x1d, 0xc6, 0x80, 0xd3, 0xe9, 0xdd, 0x52, 0x9c,
+ 0x4d, 0x04, 0x05, 0xa0, 0x43, 0x36, 0xb6, 0x89,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t bf_cbc_256_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0x60, 0x91, 0x19, 0x89, 0xee, 0xac, 0x12, 0xe5,
+ 0x60, 0x6c, 0xfd, 0xf9, 0xe4, 0xc6, 0xc9, 0xbd,
+ 0x75, 0xe1, 0xa5, 0xe6, 0xf4, 0xed, 0x4b, 0xf4,
+ 0x16, 0xf4, 0x57, 0xa4, 0xe6, 0x60, 0x8e, 0x1b,
+ 0x97, 0x0e, 0xd5, 0x09, 0xa1, 0x3c, 0x6c, 0xe8,
+ 0x91, 0xaf, 0x19, 0x96, 0x2a, 0x7b, 0x77, 0x30,
+ 0xc7, 0x99, 0xe6, 0xaa, 0xb0, 0xe2, 0x29, 0x1c,
+ 0x39, 0x54, 0x1c, 0x0a, 0x4a, 0x51, 0xa2, 0xa2,
+ 0x22, 0x96, 0x05, 0x8b, 0x12, 0x80, 0x16, 0x28,
+ 0xdc, 0xfa, 0x22, 0x90, 0xa4, 0x33, 0xb1, 0x84,
+ 0x13, 0x52, 0x5d, 0xb5, 0xd4, 0xe8, 0x60, 0x18,
+ 0x6a, 0xb8, 0x1b, 0xdb, 0xb4, 0x69, 0xf6, 0x09,
+ 0x95, 0x71, 0xdd, 0x43, 0x21, 0xad, 0x7e, 0xf7,
+ 0x8e, 0x7a, 0x0d, 0xf0, 0x52, 0x54, 0xb8, 0xdc,
+ 0x7d, 0x72, 0x29, 0x97, 0x2b, 0x9c, 0x2c, 0xef,
+ 0xc3, 0x26, 0x68, 0x72, 0xae, 0x29, 0x0f, 0x67,
+ 0xbf, 0xea, 0x92, 0x27, 0xd1, 0xba, 0x8d, 0x32,
+ 0x8b, 0x26, 0x91, 0x30, 0x88, 0xcc, 0x47, 0xaf,
+ 0x54, 0x8c, 0x88, 0x88, 0x2f, 0x59, 0x76, 0x34,
+ 0x43, 0x35, 0x44, 0xc3, 0x16, 0x28, 0x62, 0x4b,
+ 0xbb, 0x47, 0x99, 0x7c, 0x26, 0x51, 0xe2, 0x7d,
+ 0xd8, 0x2c, 0x35, 0xf4, 0x24, 0xf1, 0x5b, 0x01,
+ 0xcc, 0x9a, 0x54, 0xd8, 0xc1, 0x73, 0x85, 0x83,
+ 0xdd, 0x0d, 0xd5, 0x75, 0xac, 0x67, 0x68, 0x59,
+ 0x3e, 0x6e, 0x9a, 0x4a, 0x7f, 0xbd, 0x85, 0xeb,
+ 0x36, 0x3e, 0xfd, 0x03, 0xfe, 0x2b, 0xe6, 0x97,
+ 0x16, 0x6b, 0xd0, 0x22, 0xb1, 0x00, 0xcc, 0x7c,
+ 0x03, 0xb1, 0x7c, 0x23, 0x7a, 0xca, 0x5e, 0x0b,
+ 0xba, 0x37, 0xa6, 0x08, 0x5b, 0xa6, 0x2b, 0x57,
+ 0x58, 0x0b, 0x5a, 0x58, 0x91, 0x3c, 0xf9, 0x46,
+ 0x05, 0x03, 0x0a, 0x9b, 0xca, 0x2d, 0x71, 0xe2,
+ 0xbb, 0x1e, 0xd3, 0xc5, 0xc2, 0xb4, 0xde, 0x7b,
+ 0xbb, 0x8b, 0x45, 0x39, 0xf5, 0x3d, 0xa2, 0xe5,
+ 0xb1, 0x40, 0x3b, 0x9e, 0x47, 0x93, 0xf9, 0x9c,
+ 0x50, 0x5c, 0x9b, 0x8d, 0x18, 0x47, 0xd3, 0xe8,
+ 0x61, 0xbc, 0x93, 0xdc, 0xf7, 0x20, 0x5a, 0x00,
+ 0x0e, 0xb8, 0xee, 0x5e, 0x83, 0x06, 0x48, 0x06,
+ 0x91, 0x08, 0x9e, 0x9c, 0x73, 0x6d, 0xb9, 0x31,
+ 0x62, 0xdc, 0x8a, 0x37, 0x17, 0x47, 0x2f, 0x0f,
+ 0xc0, 0x02, 0x02, 0xf3, 0x06, 0x26, 0x6c, 0x9d,
+ 0x96, 0x9f, 0xb0, 0xb3, 0x3b, 0x72, 0x18, 0x59,
+ 0xf4, 0xb7, 0x26, 0xcc, 0xa4, 0x46, 0xdb, 0x51,
+ 0xad, 0xed, 0xd8, 0x3a, 0xc4, 0x3a, 0x09, 0x30,
+ 0x72, 0xd9, 0x2c, 0xfe, 0x5f, 0xa8, 0x46, 0x75,
+ 0xf7, 0xba, 0x46, 0x1e, 0x7e, 0x4c, 0xd6, 0xdd,
+ 0x92, 0x2b, 0x23, 0xc6, 0x59, 0x19, 0xda, 0x9a,
+ 0x01, 0x9c, 0x5c, 0xc1, 0xaa, 0xcf, 0x6d, 0xd0,
+ 0xa5, 0x06, 0xc7, 0x5e, 0x6b, 0x60, 0x64, 0x9f,
+ 0xfe, 0xa8, 0x3f, 0x64, 0xa8, 0xed, 0xf8, 0x62,
+ 0xd7, 0x6d, 0x34, 0x41, 0x3e, 0x5e, 0x74, 0xc7,
+ 0xe6, 0x62, 0xb1, 0x5a, 0xec, 0x6a, 0xc1, 0x71,
+ 0x19, 0xf3, 0xf1, 0xe7, 0x46, 0x13, 0xd6, 0xb6,
+ 0x5a, 0xf4, 0xca, 0x3f, 0xe3, 0xa1, 0x1f, 0xe4,
+ 0xda, 0xd6, 0x0c, 0x62, 0x6a, 0x33, 0x42, 0x99,
+ 0x6f, 0x5d, 0x3a, 0xe0, 0xe7, 0xfa, 0x2d, 0x47,
+ 0x4a, 0xec, 0xaa, 0x71, 0xb5, 0xeb, 0x62, 0xb8,
+ 0x31, 0x34, 0x07, 0x44, 0xa2, 0x18, 0xec, 0x76,
+ 0xf7, 0x77, 0x56, 0x86, 0xc7, 0xe0, 0x1e, 0x8e,
+ 0xec, 0x16, 0x2b, 0xeb, 0xff, 0xaa, 0xba, 0x83,
+ 0x1f, 0xdc, 0x32, 0x23, 0x27, 0xea, 0xea, 0x0c,
+ 0x3a, 0x5f, 0x2b, 0xb4, 0xee, 0x0c, 0xf2, 0x73,
+ 0xbb, 0x59, 0x9b, 0x73, 0xf7, 0xfa, 0xe1, 0x1f,
+ 0x3b, 0xdb, 0x40, 0x29, 0xf0, 0x6c, 0xbe, 0x8f,
+ 0x2e, 0xd0, 0x83, 0xf7, 0xe8, 0x2a, 0x81, 0x82,
+};
+
+const struct testvec bf_cbc_256_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_256_encblkno8_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno1, blkno 0.
+ */
+static const uint8_t bf_cbc_448_encblkno1_vec0_ctxt[SECSIZE] = {
+ 0xb0, 0x1b, 0x43, 0xc9, 0x84, 0x53, 0x51, 0x72,
+ 0x1f, 0x93, 0x62, 0x94, 0x13, 0x1f, 0xe3, 0xc1,
+ 0x30, 0xee, 0xc4, 0x35, 0x98, 0xb8, 0x11, 0x9b,
+ 0xd1, 0x23, 0xfa, 0x2d, 0xc1, 0xe6, 0xf3, 0x8f,
+ 0x8b, 0x05, 0x8d, 0xc5, 0x1d, 0xc3, 0x29, 0x1a,
+ 0xff, 0x08, 0xb0, 0x97, 0x88, 0x50, 0x8f, 0x41,
+ 0x66, 0xc6, 0x70, 0x37, 0xca, 0xb2, 0xcd, 0x91,
+ 0x89, 0x41, 0x1b, 0x42, 0xce, 0x02, 0xec, 0xe8,
+ 0x9b, 0xf3, 0x50, 0x95, 0x5f, 0xba, 0xda, 0xd5,
+ 0x0c, 0x2f, 0x29, 0x2a, 0x14, 0x96, 0x4a, 0x60,
+ 0x04, 0x43, 0x62, 0x80, 0x89, 0xcf, 0xfd, 0xb6,
+ 0xc7, 0x2d, 0xb2, 0xac, 0xce, 0x51, 0xf5, 0xd1,
+ 0xcd, 0x41, 0x59, 0x8b, 0xf5, 0x02, 0x2d, 0xe8,
+ 0xc4, 0xee, 0xe9, 0x40, 0x6f, 0xcd, 0xbe, 0x3b,
+ 0xd0, 0x8d, 0x3e, 0x6c, 0x42, 0x2a, 0x17, 0xfd,
+ 0x78, 0xf6, 0xb2, 0xde, 0x69, 0x81, 0xbb, 0xae,
+ 0xd9, 0x1f, 0x49, 0xa6, 0x4c, 0x5a, 0xe9, 0x94,
+ 0x49, 0x9b, 0x7e, 0x32, 0x6d, 0x11, 0xea, 0x88,
+ 0xda, 0xf0, 0xc7, 0x8d, 0x07, 0x98, 0xab, 0xc7,
+ 0xf3, 0xcf, 0x2e, 0xda, 0x27, 0x44, 0x68, 0xc7,
+ 0xdc, 0xda, 0x00, 0xd0, 0x6d, 0x64, 0x5b, 0x39,
+ 0x46, 0x3d, 0x98, 0x24, 0xee, 0x3b, 0x36, 0x23,
+ 0x62, 0xf6, 0x8e, 0xb9, 0x8d, 0xc1, 0x9a, 0x7b,
+ 0xd7, 0x03, 0x6b, 0xb7, 0x81, 0x19, 0xec, 0x2f,
+ 0x0c, 0x0b, 0x32, 0x5a, 0xb3, 0x25, 0xf5, 0xcc,
+ 0xa3, 0x60, 0xe6, 0x4e, 0x03, 0xcd, 0xdc, 0x67,
+ 0xe5, 0x26, 0xda, 0xe0, 0x1f, 0x33, 0x99, 0xc3,
+ 0x43, 0x8c, 0x9c, 0x1a, 0x85, 0xb1, 0x15, 0x04,
+ 0xc1, 0x06, 0xd1, 0x2d, 0xc9, 0x67, 0x72, 0xe7,
+ 0xd6, 0x6d, 0x1f, 0x22, 0x56, 0x56, 0xfa, 0x8a,
+ 0xd7, 0x16, 0x37, 0x3f, 0x3e, 0x67, 0xa5, 0xb7,
+ 0xee, 0x3e, 0xd2, 0x38, 0xd5, 0xce, 0xa9, 0x62,
+ 0x82, 0x17, 0xae, 0xae, 0x62, 0xe6, 0xb7, 0xf2,
+ 0x73, 0xf1, 0xc1, 0xb7, 0xe9, 0x62, 0x79, 0x3b,
+ 0x3b, 0x3f, 0xaa, 0x0d, 0x42, 0x03, 0x35, 0x3f,
+ 0x5d, 0xa4, 0xba, 0x02, 0x23, 0x65, 0x40, 0x0e,
+ 0x61, 0x31, 0xc9, 0xd5, 0x79, 0x36, 0x76, 0x7c,
+ 0x21, 0x4a, 0x75, 0xb2, 0xa0, 0x2b, 0xc1, 0xb8,
+ 0xba, 0xf8, 0x10, 0x7a, 0x85, 0x32, 0x81, 0xbf,
+ 0x2d, 0x58, 0x3c, 0x22, 0x2f, 0x0b, 0xce, 0x03,
+ 0x12, 0xce, 0x13, 0xce, 0x4a, 0x81, 0x77, 0x1d,
+ 0x68, 0x99, 0xc0, 0x25, 0xeb, 0xd9, 0x80, 0x0d,
+ 0xe7, 0x17, 0xc8, 0x41, 0xbd, 0x4b, 0x9c, 0xdd,
+ 0x41, 0x74, 0x90, 0x2a, 0x65, 0x92, 0x05, 0xff,
+ 0x06, 0x24, 0xeb, 0x89, 0xd8, 0x41, 0xaa, 0x41,
+ 0xac, 0x8a, 0x31, 0xc6, 0x82, 0x44, 0x12, 0x5a,
+ 0xd9, 0x1c, 0xca, 0x76, 0x2b, 0x4e, 0xe8, 0x18,
+ 0x7e, 0x50, 0xf5, 0x8c, 0x7c, 0x11, 0xe7, 0x0e,
+ 0xfd, 0x08, 0x5e, 0x64, 0x8b, 0x5b, 0x9f, 0x94,
+ 0x8b, 0x0d, 0x83, 0x7e, 0xef, 0x89, 0x30, 0x4a,
+ 0x55, 0xce, 0x10, 0x5f, 0x15, 0xd2, 0xe7, 0x07,
+ 0x0c, 0x34, 0x92, 0xda, 0xae, 0x84, 0x26, 0x28,
+ 0x36, 0x1a, 0x96, 0xc6, 0xf1, 0x41, 0x2b, 0xb6,
+ 0x01, 0xfe, 0x20, 0x05, 0x43, 0x80, 0x45, 0xdf,
+ 0x5c, 0xc2, 0x96, 0xc8, 0x41, 0x68, 0x87, 0x78,
+ 0xbc, 0xf8, 0x34, 0xfb, 0x19, 0x61, 0xab, 0x7f,
+ 0x15, 0x56, 0x7f, 0x1a, 0xf5, 0x08, 0xf1, 0x1c,
+ 0x59, 0x70, 0x92, 0x3a, 0xda, 0x1a, 0xfd, 0xfc,
+ 0x4d, 0xe1, 0x12, 0x61, 0xc1, 0xd8, 0xdb, 0x63,
+ 0x6e, 0x6b, 0x19, 0x96, 0x68, 0x17, 0x9b, 0xf5,
+ 0xa9, 0x5d, 0x2c, 0xaf, 0xad, 0xc6, 0x26, 0x9e,
+ 0x09, 0xcb, 0x67, 0x4e, 0x50, 0x7d, 0x2f, 0xae,
+ 0x4e, 0x73, 0xd9, 0x5a, 0xaa, 0x5d, 0x54, 0x20,
+ 0x7b, 0x77, 0xcf, 0xf8, 0xad, 0x88, 0x6b, 0xc8,
+};
+
+/*
+ * IV method encblkno1, blkno 1.
+ */
+static const uint8_t bf_cbc_448_encblkno1_vec1_ctxt[SECSIZE] = {
+ 0x8b, 0x2a, 0xcf, 0x7d, 0x38, 0x1b, 0xaa, 0x33,
+ 0x1c, 0xe6, 0xa1, 0x37, 0x6e, 0x9e, 0xb3, 0x48,
+ 0x2a, 0xb8, 0x61, 0x11, 0x00, 0xe5, 0x48, 0xea,
+ 0xb5, 0x9f, 0x6c, 0xa4, 0xdf, 0x8d, 0x5a, 0xd8,
+ 0x03, 0x55, 0x4d, 0x07, 0x7d, 0x5f, 0x1b, 0x18,
+ 0xd1, 0x86, 0x52, 0xc1, 0x13, 0xda, 0x99, 0x23,
+ 0xeb, 0xab, 0xb2, 0x93, 0x40, 0x7c, 0x6a, 0x8a,
+ 0xaa, 0xf8, 0xf1, 0x66, 0xf1, 0x10, 0x1d, 0xcd,
+ 0x25, 0xc7, 0x84, 0x55, 0x02, 0x1d, 0xc0, 0x3c,
+ 0xba, 0xf4, 0xbf, 0xe2, 0xe4, 0xc3, 0x57, 0xdc,
+ 0x0d, 0xfd, 0xeb, 0xb3, 0x7d, 0x31, 0x82, 0x6b,
+ 0x5c, 0x0e, 0x92, 0xa5, 0x42, 0x8b, 0x7f, 0x36,
+ 0x74, 0x4d, 0xfd, 0x2f, 0xd7, 0x19, 0x0d, 0x23,
+ 0xa7, 0x36, 0xe8, 0xe4, 0xe5, 0xff, 0xc8, 0x0d,
+ 0xe1, 0x48, 0x25, 0x79, 0xa9, 0x22, 0xac, 0x72,
+ 0x86, 0x28, 0xcb, 0x63, 0xa6, 0xa0, 0x46, 0x08,
+ 0x53, 0xb8, 0x59, 0xab, 0x0f, 0x8f, 0xb1, 0x78,
+ 0xf8, 0x4e, 0x6d, 0x1a, 0xb5, 0xdd, 0x12, 0x02,
+ 0x57, 0x55, 0xf8, 0xab, 0x78, 0x7d, 0x75, 0x61,
+ 0x81, 0x20, 0xd6, 0x4b, 0x7d, 0x76, 0x05, 0xc9,
+ 0x56, 0xf2, 0xe9, 0x3f, 0xb6, 0xb5, 0x02, 0x2b,
+ 0x1c, 0x29, 0xbf, 0x07, 0xe9, 0x5f, 0x9b, 0x18,
+ 0x38, 0x26, 0xa0, 0x09, 0xde, 0x24, 0x5b, 0x37,
+ 0x72, 0x74, 0xf4, 0x9f, 0x86, 0x28, 0x89, 0xb6,
+ 0x0c, 0x95, 0x24, 0x2f, 0x88, 0x80, 0x6a, 0xc7,
+ 0x3a, 0xdc, 0x89, 0xb0, 0xa3, 0xfe, 0x6e, 0x38,
+ 0xec, 0x0b, 0x1d, 0xbc, 0xd5, 0x90, 0x48, 0xfb,
+ 0xb1, 0x54, 0xac, 0x6e, 0x35, 0xb0, 0x71, 0x9e,
+ 0x57, 0x07, 0x81, 0x90, 0xcb, 0x63, 0xb2, 0x7f,
+ 0x4c, 0x81, 0xe1, 0x58, 0xda, 0x27, 0xef, 0x77,
+ 0xe7, 0xde, 0x96, 0x83, 0x2a, 0xb1, 0x6b, 0x08,
+ 0x62, 0x89, 0xdc, 0x3a, 0x3f, 0x08, 0xff, 0xdc,
+ 0x50, 0x3e, 0xc1, 0xe4, 0x33, 0x8b, 0xad, 0x19,
+ 0x90, 0x0b, 0x8e, 0xc3, 0x55, 0x77, 0xf0, 0xc2,
+ 0x24, 0xf9, 0x0c, 0x99, 0x84, 0xb2, 0xcc, 0x23,
+ 0x8c, 0xab, 0x79, 0x0d, 0xff, 0x75, 0x3a, 0xe0,
+ 0xc9, 0xe8, 0x1e, 0x15, 0x02, 0xd5, 0x67, 0x8e,
+ 0x32, 0xe3, 0x1f, 0xda, 0xfb, 0x88, 0xeb, 0xa5,
+ 0x23, 0xea, 0x1d, 0xaa, 0xc3, 0x62, 0x7f, 0x27,
+ 0x38, 0x2a, 0xf6, 0xa2, 0x6a, 0x0e, 0x05, 0xff,
+ 0xe4, 0x63, 0x70, 0xec, 0xf8, 0x25, 0x96, 0x08,
+ 0xcb, 0x22, 0x2a, 0xaa, 0xbc, 0x45, 0x04, 0xb9,
+ 0xbc, 0x64, 0x07, 0x09, 0x31, 0xee, 0x5f, 0x9a,
+ 0xb1, 0x71, 0x85, 0x10, 0x60, 0xfb, 0x3c, 0x56,
+ 0xeb, 0xfe, 0x91, 0xab, 0x3f, 0x09, 0x76, 0xba,
+ 0x3c, 0xfc, 0xa6, 0x0d, 0xce, 0x9f, 0x59, 0xd4,
+ 0x83, 0x8d, 0x98, 0xf5, 0x0d, 0x60, 0x1f, 0xd1,
+ 0x10, 0x61, 0x77, 0x0d, 0xd1, 0xcd, 0xc2, 0xc2,
+ 0x2c, 0x7d, 0xf6, 0x15, 0x16, 0x90, 0xc9, 0xc5,
+ 0x1e, 0xe9, 0xf5, 0x7b, 0xb4, 0x49, 0x47, 0x91,
+ 0x6a, 0x94, 0x26, 0x94, 0xb3, 0xb5, 0xa7, 0x9e,
+ 0xcb, 0xb1, 0x9c, 0xb7, 0x5d, 0x25, 0x3c, 0x2d,
+ 0x8c, 0xa8, 0xa1, 0xb1, 0x79, 0x8e, 0x60, 0xa2,
+ 0x3e, 0x04, 0xfa, 0x3f, 0xb4, 0x43, 0xde, 0x0a,
+ 0xde, 0xf4, 0x58, 0xe7, 0xd1, 0x04, 0x1d, 0xb7,
+ 0x1d, 0xa6, 0xcb, 0x49, 0x41, 0x30, 0xb5, 0x41,
+ 0xb5, 0x14, 0x19, 0xe4, 0xeb, 0x2c, 0xe2, 0xf0,
+ 0x66, 0x59, 0xe3, 0xc6, 0xb0, 0xd0, 0x1e, 0xaa,
+ 0x9f, 0xa5, 0x0b, 0xb8, 0xfd, 0xae, 0x62, 0xcf,
+ 0x3e, 0xe2, 0xea, 0x79, 0xc5, 0x3e, 0xcf, 0xf0,
+ 0x40, 0x00, 0x8c, 0x81, 0x97, 0xed, 0xac, 0xf9,
+ 0x61, 0x75, 0x4e, 0xd7, 0xb7, 0xb2, 0x02, 0x14,
+ 0x04, 0xf6, 0xbf, 0x25, 0xbe, 0x78, 0x2a, 0xea,
+ 0xd2, 0x61, 0xf2, 0x7e, 0x45, 0x6b, 0x20, 0xca,
+};
+
+/*
+ * IV method encblkno1, blkno 2.
+ */
+static const uint8_t bf_cbc_448_encblkno1_vec2_ctxt[SECSIZE] = {
+ 0x35, 0x34, 0x49, 0x29, 0x12, 0x3f, 0xc6, 0x2f,
+ 0xc9, 0x3d, 0xc9, 0x54, 0x46, 0xf3, 0x26, 0xf9,
+ 0x5e, 0x45, 0xb4, 0xba, 0x6d, 0x0f, 0x98, 0x53,
+ 0x8b, 0x7a, 0x00, 0x47, 0xb6, 0xbd, 0x70, 0x89,
+ 0x60, 0x8e, 0x52, 0x0b, 0xe3, 0x0a, 0xd8, 0x0e,
+ 0x48, 0xf3, 0xcc, 0x66, 0x8d, 0x71, 0xaa, 0x0e,
+ 0xc2, 0x68, 0x03, 0x05, 0xf9, 0xef, 0x1d, 0x14,
+ 0x5a, 0x85, 0x88, 0x70, 0x77, 0xcf, 0xe3, 0xdf,
+ 0x18, 0xe5, 0xfb, 0xea, 0xe1, 0xe8, 0xe0, 0x25,
+ 0xb2, 0x14, 0x61, 0x5d, 0x2f, 0xce, 0x61, 0xec,
+ 0x68, 0xc8, 0x06, 0x60, 0x41, 0xc1, 0xe3, 0x0a,
+ 0x5e, 0x96, 0x15, 0x9b, 0x2c, 0x5b, 0xfd, 0xba,
+ 0x17, 0x2e, 0x50, 0xb6, 0x68, 0x39, 0x21, 0x56,
+ 0x31, 0x2e, 0xb5, 0x29, 0xff, 0x4a, 0x12, 0x34,
+ 0x02, 0x54, 0xb1, 0x7f, 0xd8, 0x35, 0xec, 0x79,
+ 0x9e, 0xef, 0x62, 0xf3, 0x4b, 0x58, 0x96, 0xf1,
+ 0x83, 0x26, 0x57, 0x3d, 0x55, 0xb9, 0xb0, 0xa7,
+ 0x48, 0x65, 0x06, 0xee, 0x14, 0x88, 0xb5, 0x58,
+ 0xc8, 0x4d, 0x6e, 0xd8, 0x44, 0x76, 0x21, 0x16,
+ 0xa4, 0xdf, 0x68, 0x4b, 0xff, 0x69, 0x23, 0x66,
+ 0x18, 0x75, 0xe6, 0x29, 0xea, 0x95, 0x87, 0x1c,
+ 0xed, 0x2d, 0xbd, 0xbf, 0x22, 0x56, 0x11, 0xd5,
+ 0x59, 0x90, 0x24, 0xd7, 0xae, 0xda, 0x99, 0x49,
+ 0xe3, 0x23, 0x03, 0x24, 0x3b, 0x02, 0x49, 0x1d,
+ 0xa5, 0x57, 0x2f, 0xea, 0xd1, 0x6a, 0x17, 0x53,
+ 0x0f, 0xb3, 0xa9, 0x64, 0x8a, 0xdb, 0x62, 0x17,
+ 0xad, 0x5c, 0x7d, 0x56, 0x14, 0x0f, 0xfb, 0x14,
+ 0xbe, 0x7e, 0xa1, 0xa8, 0x27, 0xf0, 0xf0, 0x3a,
+ 0xe7, 0xc5, 0x26, 0x98, 0x9d, 0x29, 0xf7, 0xfd,
+ 0x43, 0x13, 0x34, 0xe2, 0xb8, 0x0b, 0x14, 0xe9,
+ 0x79, 0x66, 0x7a, 0xf2, 0xed, 0x79, 0x37, 0x16,
+ 0x75, 0x2b, 0xf2, 0x99, 0xa1, 0xba, 0xf1, 0xc1,
+ 0x61, 0x8d, 0x78, 0x46, 0x3a, 0x67, 0x58, 0x6a,
+ 0x55, 0x0d, 0x2e, 0x08, 0x47, 0xfc, 0x94, 0x2f,
+ 0x65, 0xa1, 0x1a, 0xfe, 0x05, 0xfa, 0x41, 0x00,
+ 0x6c, 0x42, 0xbc, 0x65, 0x37, 0xd9, 0x25, 0x9c,
+ 0xf4, 0x83, 0x8a, 0xdb, 0x91, 0x96, 0xc5, 0xa9,
+ 0x02, 0x44, 0xbc, 0x9a, 0x26, 0x9c, 0xd1, 0xfa,
+ 0x06, 0x8b, 0xd6, 0x40, 0x8f, 0x0a, 0xd2, 0x5b,
+ 0xd8, 0x57, 0xd5, 0x61, 0x1b, 0x86, 0xa6, 0x49,
+ 0x15, 0xe4, 0x06, 0x6c, 0x48, 0x24, 0xb8, 0xe3,
+ 0x23, 0xed, 0xcf, 0x39, 0x44, 0x4d, 0xf0, 0x4e,
+ 0x89, 0x44, 0x0d, 0x3a, 0xe6, 0x1b, 0x7c, 0x39,
+ 0xfd, 0x79, 0x0e, 0x78, 0xc7, 0xf6, 0xa3, 0x91,
+ 0x18, 0x2a, 0xfb, 0x92, 0x48, 0xcc, 0x8b, 0xbb,
+ 0x33, 0x07, 0x42, 0xf5, 0xd0, 0x01, 0x8b, 0x12,
+ 0xd9, 0x5e, 0x9d, 0xe4, 0x13, 0x99, 0x11, 0x18,
+ 0x86, 0x8a, 0xb7, 0xa6, 0xe2, 0x38, 0x34, 0x12,
+ 0x67, 0xd6, 0x4b, 0xc0, 0x23, 0x56, 0xba, 0x53,
+ 0xbe, 0x20, 0xe5, 0xec, 0x16, 0xf9, 0x74, 0x92,
+ 0x62, 0xfc, 0xb9, 0xe8, 0xa3, 0xbf, 0x3b, 0x06,
+ 0x76, 0xa5, 0xf5, 0x56, 0x81, 0x72, 0x50, 0xc8,
+ 0x55, 0x80, 0x7d, 0xe1, 0x46, 0x92, 0xa1, 0xeb,
+ 0x41, 0xaf, 0xce, 0x52, 0xb1, 0xb3, 0x51, 0xf2,
+ 0xba, 0x03, 0xb4, 0xcb, 0x16, 0xd2, 0x92, 0x3d,
+ 0x0c, 0x9b, 0xe9, 0xd9, 0x5d, 0xcf, 0x79, 0x05,
+ 0xbd, 0xe0, 0x44, 0x39, 0xf0, 0x35, 0x2d, 0x7a,
+ 0x31, 0x3b, 0x24, 0xb3, 0xb4, 0xa5, 0x08, 0xf5,
+ 0xac, 0x51, 0xf1, 0x09, 0x52, 0x14, 0xc7, 0xb5,
+ 0xe0, 0x65, 0x47, 0x30, 0xdd, 0xa4, 0xfd, 0x71,
+ 0x68, 0xa5, 0x4b, 0x00, 0x72, 0xe2, 0xc4, 0xa9,
+ 0x5d, 0x21, 0x6d, 0x83, 0x4e, 0x88, 0xaa, 0x76,
+ 0x07, 0xf0, 0xf7, 0x36, 0xa2, 0x5e, 0xd5, 0x4c,
+ 0x7f, 0x9b, 0x74, 0x89, 0x0a, 0x18, 0xdc, 0x9a,
+};
+
+/*
+ * IV method encblkno1, blkno 3.
+ */
+static const uint8_t bf_cbc_448_encblkno1_vec3_ctxt[SECSIZE] = {
+ 0xc3, 0xd3, 0xae, 0x7e, 0x4f, 0xbe, 0x0d, 0x50,
+ 0xd6, 0x63, 0x2c, 0xa2, 0xfd, 0x07, 0xf1, 0x33,
+ 0x2a, 0x15, 0x8f, 0xd7, 0x63, 0xb6, 0x5f, 0x04,
+ 0x69, 0x90, 0xa3, 0x1a, 0xd3, 0xdd, 0xe0, 0x70,
+ 0xb1, 0xcd, 0xd5, 0xe0, 0x75, 0xd2, 0x31, 0x38,
+ 0xcc, 0x65, 0xbb, 0xc3, 0x3b, 0xc6, 0xc9, 0x33,
+ 0x43, 0x9c, 0x32, 0x69, 0x95, 0x10, 0x74, 0x36,
+ 0x3a, 0x05, 0x9c, 0x26, 0x2f, 0x80, 0x20, 0x92,
+ 0x74, 0x31, 0xc0, 0xf4, 0xb1, 0x42, 0x58, 0xc8,
+ 0x3e, 0xaa, 0xd4, 0xba, 0xba, 0x4b, 0x5f, 0x47,
+ 0x1a, 0x9e, 0x43, 0xaf, 0x25, 0x64, 0x0c, 0x2e,
+ 0xa3, 0xf5, 0xde, 0x6e, 0x28, 0x5e, 0xb9, 0x9e,
+ 0xc9, 0xdf, 0x85, 0xda, 0xc9, 0xa8, 0x30, 0xf9,
+ 0x44, 0x9b, 0x16, 0xcb, 0x4b, 0x47, 0x6f, 0x11,
+ 0x5c, 0xd7, 0xc9, 0xb7, 0x9c, 0x50, 0x04, 0x3b,
+ 0x2f, 0x13, 0xab, 0xb6, 0x72, 0xe7, 0x11, 0x29,
+ 0x35, 0xf3, 0xae, 0x5e, 0x2a, 0xa7, 0x1a, 0xac,
+ 0xb7, 0x4c, 0x7b, 0x69, 0x89, 0xfc, 0xff, 0x37,
+ 0x24, 0xf8, 0x65, 0xc0, 0x87, 0x89, 0x69, 0x1e,
+ 0xa6, 0x7e, 0xe7, 0xb3, 0xb7, 0xa8, 0x42, 0x73,
+ 0x83, 0xdb, 0x56, 0x4f, 0xce, 0xb9, 0x6e, 0x38,
+ 0x40, 0x24, 0xb8, 0xdd, 0xab, 0x25, 0x3b, 0xc6,
+ 0x58, 0xed, 0xc7, 0x2b, 0xe0, 0x11, 0x8b, 0x62,
+ 0xe8, 0x4f, 0xcf, 0xba, 0x2e, 0xd7, 0x6d, 0xf0,
+ 0x14, 0xa5, 0xee, 0x24, 0xd3, 0x3a, 0xb4, 0xf2,
+ 0xdc, 0x0d, 0x79, 0xc6, 0x14, 0x52, 0x14, 0x4b,
+ 0xd1, 0x8c, 0x18, 0xef, 0x1f, 0xd8, 0xe7, 0x60,
+ 0xf3, 0x28, 0xce, 0xf1, 0x59, 0xc8, 0x43, 0x02,
+ 0x0e, 0x08, 0x72, 0xe5, 0x7d, 0x5b, 0xc5, 0x80,
+ 0xfb, 0xca, 0x2a, 0x63, 0x8d, 0x3c, 0x54, 0x04,
+ 0x1e, 0xdf, 0x94, 0x53, 0xf8, 0x44, 0xe5, 0xc2,
+ 0x5c, 0x36, 0xc9, 0x75, 0x1c, 0xa2, 0x98, 0x3d,
+ 0xd6, 0xee, 0x38, 0xf9, 0xab, 0x2d, 0x1a, 0xdb,
+ 0x87, 0x2c, 0x86, 0xfd, 0xf9, 0xb2, 0x4d, 0x21,
+ 0xb7, 0xc0, 0x8f, 0x75, 0x21, 0x53, 0xc7, 0xd7,
+ 0x3e, 0xc6, 0x6c, 0x98, 0x2c, 0x6d, 0x44, 0x13,
+ 0x40, 0xea, 0xaa, 0x84, 0xd9, 0x47, 0xfd, 0x65,
+ 0x2c, 0x3d, 0xb0, 0x76, 0xe7, 0xdd, 0xd7, 0x06,
+ 0x8a, 0x79, 0xa7, 0x6c, 0x3a, 0x2d, 0x32, 0xf7,
+ 0xae, 0xe7, 0xd2, 0xb1, 0xf2, 0xe0, 0x3a, 0x10,
+ 0x19, 0xa1, 0x79, 0x7b, 0x76, 0x0b, 0xeb, 0xf3,
+ 0x01, 0x6e, 0x9f, 0xa1, 0x5d, 0x16, 0x09, 0xec,
+ 0x6b, 0x64, 0xe3, 0x96, 0xb8, 0x89, 0x99, 0x8c,
+ 0x77, 0xcf, 0x3f, 0x37, 0x42, 0x51, 0x82, 0x5a,
+ 0x63, 0x89, 0x12, 0x12, 0x59, 0x38, 0xe3, 0xcf,
+ 0xa0, 0xda, 0xbc, 0x69, 0x75, 0x48, 0x7c, 0x3e,
+ 0x56, 0x75, 0x12, 0x10, 0xc5, 0x96, 0x5b, 0x34,
+ 0x52, 0x2e, 0xce, 0xba, 0xd2, 0x7f, 0x8f, 0x1c,
+ 0xbd, 0x35, 0x3b, 0x74, 0x5b, 0x6c, 0xfe, 0xa7,
+ 0xf1, 0x4a, 0x07, 0x95, 0xff, 0xa8, 0xa0, 0x2a,
+ 0x85, 0xec, 0xd7, 0x56, 0x3b, 0x28, 0x2e, 0x09,
+ 0x50, 0x43, 0xbd, 0x49, 0x22, 0xdc, 0x78, 0x0e,
+ 0x7e, 0x68, 0x78, 0xd5, 0x57, 0xc2, 0xd6, 0x7c,
+ 0x2f, 0xd0, 0x4a, 0x62, 0x16, 0x38, 0x04, 0x23,
+ 0x43, 0x21, 0xaa, 0xe1, 0x96, 0x0e, 0xa9, 0x22,
+ 0xe7, 0x2c, 0xb8, 0x5e, 0x8f, 0xc6, 0x2d, 0xbd,
+ 0x99, 0x25, 0x33, 0xb8, 0x47, 0x99, 0x8d, 0xf5,
+ 0x22, 0x08, 0x9b, 0xd5, 0xad, 0x83, 0x67, 0xec,
+ 0x05, 0x89, 0xda, 0xd6, 0xe4, 0xe2, 0xd5, 0xef,
+ 0x7f, 0x61, 0x1e, 0x03, 0x81, 0x03, 0xb1, 0x98,
+ 0x5a, 0x29, 0x69, 0x13, 0xb2, 0xe6, 0xe1, 0x2c,
+ 0x66, 0x88, 0x39, 0x90, 0xf9, 0xae, 0x5d, 0x71,
+ 0xfe, 0x07, 0x30, 0x7d, 0xba, 0xa9, 0x37, 0xb5,
+ 0xff, 0x2c, 0xa9, 0xe6, 0x95, 0x48, 0xb2, 0xc8,
+};
+
+const struct testvec bf_cbc_448_1_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno1_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno1_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno1_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno1_vec3_ctxt,
+ },
+};
+
+/*
+ * IV method encblkno8, blkno 0.
+ */
+static const uint8_t bf_cbc_448_encblkno8_vec0_ctxt[SECSIZE] = {
+ 0x91, 0xb4, 0x8f, 0x78, 0x34, 0xbe, 0x03, 0xe9,
+ 0x4b, 0xca, 0xf4, 0xfa, 0x27, 0x99, 0xa0, 0xd0,
+ 0xa0, 0x85, 0xf9, 0xca, 0xcc, 0x2e, 0x0d, 0x41,
+ 0x91, 0xdb, 0xf9, 0x71, 0xcd, 0x49, 0xf7, 0x66,
+ 0x9b, 0x0c, 0x70, 0x49, 0x36, 0x72, 0xf4, 0xc0,
+ 0x17, 0xdd, 0xd8, 0x6a, 0xd2, 0x17, 0xfe, 0x50,
+ 0xa3, 0x2b, 0xa8, 0x7c, 0x9c, 0x12, 0x8c, 0x08,
+ 0x3d, 0xb5, 0x20, 0xc0, 0x83, 0xc1, 0xf5, 0x34,
+ 0x4b, 0xa5, 0xcc, 0x7c, 0xc6, 0x9f, 0x4b, 0x7f,
+ 0x09, 0x0c, 0x04, 0xe3, 0x02, 0xfe, 0xe2, 0x5a,
+ 0x45, 0xee, 0x4a, 0xcb, 0xc0, 0xe1, 0xf1, 0xae,
+ 0x1a, 0x22, 0x95, 0xb9, 0x30, 0xe8, 0x2d, 0x90,
+ 0xe5, 0x6a, 0x2f, 0x0a, 0x59, 0x15, 0xfc, 0x60,
+ 0xa5, 0x91, 0x95, 0x1a, 0xa2, 0xf5, 0x87, 0xa3,
+ 0x97, 0x45, 0x1b, 0xfb, 0x78, 0x62, 0x8b, 0xb6,
+ 0x86, 0xc6, 0x94, 0x9a, 0x9d, 0x09, 0x46, 0xc9,
+ 0x1f, 0x5f, 0x2e, 0x6c, 0xed, 0x5e, 0xe2, 0xab,
+ 0xca, 0x30, 0xdb, 0x13, 0x37, 0x8d, 0xb7, 0xc6,
+ 0xce, 0x74, 0xe3, 0xe2, 0x64, 0x7b, 0x74, 0x3e,
+ 0x9f, 0x18, 0x4e, 0xe2, 0x2b, 0x52, 0x08, 0x60,
+ 0x2b, 0x6d, 0x17, 0x1a, 0xff, 0xae, 0xfb, 0xea,
+ 0x59, 0x1d, 0x45, 0xe8, 0xf9, 0x0c, 0x56, 0xb8,
+ 0xb5, 0xc7, 0x8f, 0xa7, 0x9e, 0x67, 0x87, 0xbb,
+ 0xe2, 0x37, 0x56, 0x49, 0xed, 0x75, 0x27, 0x54,
+ 0xb5, 0x16, 0x34, 0xb6, 0xa6, 0xe0, 0x27, 0x48,
+ 0x91, 0xfb, 0x80, 0x4f, 0x5e, 0xef, 0x40, 0x6d,
+ 0x28, 0x8f, 0x2e, 0x56, 0xab, 0x6c, 0x7d, 0xde,
+ 0xbd, 0xa5, 0xa6, 0x47, 0xe2, 0xc9, 0xb0, 0xc5,
+ 0x69, 0x5d, 0x57, 0x18, 0x59, 0x08, 0x66, 0x1b,
+ 0xdc, 0x4f, 0xa4, 0xe2, 0xb5, 0xff, 0x72, 0x4d,
+ 0x25, 0x79, 0x38, 0x8f, 0xca, 0x23, 0x81, 0x31,
+ 0x1d, 0xeb, 0x7b, 0x7e, 0x04, 0xc3, 0xa6, 0xac,
+ 0x12, 0x92, 0x95, 0x44, 0x08, 0xae, 0x25, 0xb5,
+ 0xc2, 0x39, 0x88, 0x28, 0xc5, 0xc7, 0x3c, 0xfe,
+ 0x95, 0xe1, 0x1a, 0x27, 0xbe, 0xfd, 0x0a, 0xc7,
+ 0xd1, 0x02, 0x1a, 0xae, 0x03, 0xfb, 0xce, 0x79,
+ 0xe6, 0xea, 0x4a, 0xa1, 0x0e, 0x68, 0x61, 0x2f,
+ 0xfa, 0x7a, 0xb8, 0xda, 0xd1, 0x4a, 0xbe, 0x88,
+ 0xd2, 0xa0, 0x6b, 0x90, 0xc3, 0x37, 0x18, 0x77,
+ 0x2e, 0xc8, 0x44, 0x2e, 0x9d, 0xa2, 0x4a, 0xc7,
+ 0x54, 0xb2, 0x38, 0x9b, 0x60, 0x5e, 0x5b, 0xb0,
+ 0x31, 0x4c, 0x10, 0xf0, 0x1d, 0x8c, 0xab, 0x9b,
+ 0x25, 0x86, 0x05, 0xfc, 0xd9, 0x39, 0x11, 0x2b,
+ 0x7e, 0x07, 0xfd, 0x6b, 0xb3, 0x28, 0x57, 0x66,
+ 0x94, 0xc6, 0xfc, 0x48, 0x71, 0xeb, 0x7b, 0x9a,
+ 0x26, 0x8f, 0x9f, 0x97, 0xb6, 0x83, 0x9a, 0xdc,
+ 0x5d, 0x84, 0x96, 0x9d, 0xe3, 0xa5, 0x12, 0x97,
+ 0x8c, 0x87, 0xa6, 0x2a, 0xa8, 0x15, 0x9a, 0xb0,
+ 0x0e, 0x31, 0x55, 0xf7, 0x1b, 0x5c, 0x9c, 0xaf,
+ 0x13, 0x20, 0x13, 0x50, 0xaf, 0xc9, 0xf4, 0xd9,
+ 0x47, 0x16, 0xcc, 0x9d, 0xec, 0xa9, 0x2d, 0xfc,
+ 0x3d, 0x5d, 0x48, 0x89, 0x86, 0x91, 0x6f, 0x1a,
+ 0xa5, 0xf0, 0xb6, 0x9b, 0xa9, 0x08, 0xf2, 0x05,
+ 0xad, 0xe5, 0xe0, 0xd8, 0x2e, 0x09, 0xbe, 0x3a,
+ 0xf2, 0xdc, 0xeb, 0x14, 0xe6, 0x8c, 0x21, 0x20,
+ 0xbb, 0x42, 0x6a, 0xba, 0x55, 0x79, 0x54, 0x8b,
+ 0xa8, 0x43, 0x14, 0x28, 0x66, 0xd2, 0x44, 0x65,
+ 0x9c, 0xa9, 0xdc, 0x3b, 0x3f, 0xab, 0x36, 0xb4,
+ 0xbc, 0x9d, 0x22, 0x92, 0x24, 0xa8, 0x29, 0x18,
+ 0x98, 0x3a, 0xbe, 0xa1, 0xb4, 0xf8, 0x7f, 0xea,
+ 0x2f, 0x58, 0x69, 0xce, 0xee, 0x99, 0x76, 0x2c,
+ 0x53, 0x84, 0xf5, 0x9e, 0xa3, 0x98, 0xe6, 0x94,
+ 0x39, 0xfa, 0xfa, 0x6d, 0x66, 0xe2, 0x39, 0x2b,
+ 0x4b, 0x84, 0x14, 0x89, 0x18, 0xa2, 0x03, 0xdd,
+};
+
+/*
+ * IV method encblkno8, blkno 1.
+ */
+static const uint8_t bf_cbc_448_encblkno8_vec1_ctxt[SECSIZE] = {
+ 0x90, 0x3d, 0xee, 0x58, 0xf7, 0xe3, 0xc4, 0x18,
+ 0xaf, 0xfa, 0xaf, 0xed, 0x9a, 0x45, 0xe7, 0xa8,
+ 0xbe, 0xcd, 0x0f, 0xb9, 0x53, 0x18, 0xc6, 0x14,
+ 0xbe, 0xbb, 0x90, 0x1c, 0x5c, 0x60, 0x93, 0xcb,
+ 0x62, 0xb3, 0xdb, 0x31, 0x19, 0x39, 0xce, 0x3f,
+ 0xe4, 0x8f, 0x44, 0xc1, 0x10, 0x80, 0x05, 0x6b,
+ 0x77, 0xe3, 0xe1, 0xe5, 0xd2, 0x6d, 0x93, 0xf2,
+ 0xb3, 0x81, 0x03, 0xf8, 0xbc, 0x7b, 0x5a, 0x71,
+ 0x15, 0x16, 0x3a, 0x2f, 0x03, 0xbb, 0x67, 0x6a,
+ 0xd9, 0xf5, 0x63, 0x6f, 0x3d, 0x75, 0x1b, 0x0a,
+ 0x4b, 0x9d, 0x04, 0x11, 0x7e, 0xe8, 0x3e, 0x2d,
+ 0x04, 0x8f, 0xbf, 0x8a, 0xb2, 0x35, 0x76, 0xc5,
+ 0xcc, 0x6d, 0x9e, 0x99, 0x71, 0x13, 0xf6, 0x5e,
+ 0xeb, 0x74, 0x96, 0x8a, 0x29, 0x38, 0x0b, 0x25,
+ 0x4b, 0x89, 0xa9, 0x43, 0x3c, 0x2f, 0x03, 0x14,
+ 0x8d, 0x0f, 0xe3, 0xe7, 0x01, 0xd1, 0x2e, 0x14,
+ 0x08, 0x51, 0xba, 0x06, 0x39, 0x76, 0x35, 0xbc,
+ 0x14, 0xa6, 0x16, 0x36, 0x47, 0xcc, 0x48, 0xe0,
+ 0xd6, 0xd7, 0x07, 0xb0, 0xf0, 0x30, 0x6c, 0xf8,
+ 0x68, 0x9d, 0x6c, 0x4b, 0x69, 0x33, 0x78, 0x0e,
+ 0x4a, 0xfa, 0x97, 0xfb, 0x0c, 0x0d, 0x0a, 0xc3,
+ 0x4b, 0x7b, 0x77, 0x77, 0x18, 0x9a, 0x74, 0x85,
+ 0x2f, 0xae, 0xc7, 0x90, 0x45, 0x4b, 0xa2, 0x06,
+ 0x3e, 0xa2, 0x48, 0xe7, 0x6c, 0x86, 0x65, 0x78,
+ 0x97, 0x0b, 0x97, 0xc1, 0x70, 0x91, 0x12, 0x79,
+ 0xae, 0xf0, 0x2b, 0x44, 0xe9, 0x84, 0x8d, 0x78,
+ 0x53, 0xf8, 0x3a, 0xf5, 0x9f, 0x27, 0x3d, 0x49,
+ 0x69, 0xd1, 0x18, 0xa4, 0xb2, 0xd0, 0xbb, 0xf2,
+ 0x57, 0x76, 0xb7, 0x77, 0x16, 0x2f, 0xf8, 0x0c,
+ 0xa5, 0x86, 0x43, 0x0d, 0x2d, 0xfe, 0x84, 0xc6,
+ 0xbb, 0x58, 0x81, 0x47, 0x3d, 0xa3, 0x93, 0xb0,
+ 0x50, 0xfc, 0x25, 0xf7, 0xc5, 0x05, 0xe5, 0xf2,
+ 0xb3, 0x79, 0x12, 0xe4, 0x37, 0x71, 0x2d, 0xe8,
+ 0xa5, 0x0b, 0xce, 0x67, 0x51, 0x4f, 0xab, 0xc7,
+ 0x7b, 0x3b, 0xac, 0x78, 0x97, 0x82, 0x02, 0xf4,
+ 0x62, 0x20, 0x1b, 0x8b, 0xac, 0x07, 0x3b, 0xd7,
+ 0x0b, 0x99, 0x27, 0x85, 0x52, 0x7a, 0x79, 0x18,
+ 0xfb, 0x81, 0x3a, 0x05, 0x76, 0x6c, 0x3c, 0x6a,
+ 0x35, 0xe1, 0x2b, 0x03, 0x48, 0x70, 0x1a, 0xa8,
+ 0x30, 0x33, 0x61, 0xe2, 0xd8, 0x99, 0x86, 0x7f,
+ 0xfd, 0xe0, 0x4a, 0xe4, 0x62, 0xa1, 0xac, 0xcb,
+ 0xb8, 0x8a, 0xf3, 0xaa, 0xd6, 0x61, 0x9d, 0xc5,
+ 0xdb, 0xf5, 0x53, 0x39, 0x1d, 0xd7, 0xf8, 0x96,
+ 0xc6, 0x2b, 0xca, 0xbf, 0x83, 0x4e, 0x89, 0x63,
+ 0x53, 0x6f, 0x17, 0xaa, 0xf3, 0x61, 0x9b, 0x75,
+ 0x8c, 0x5a, 0xf8, 0x21, 0x84, 0x52, 0xb8, 0x76,
+ 0xbc, 0xf5, 0x9b, 0xd6, 0x98, 0x26, 0x58, 0xec,
+ 0xdd, 0xa8, 0xf1, 0xee, 0x9e, 0x14, 0x24, 0x94,
+ 0x7c, 0xb6, 0x45, 0x8b, 0xc7, 0x85, 0x50, 0x4e,
+ 0x30, 0xd7, 0x51, 0x8c, 0x33, 0xeb, 0xeb, 0x5d,
+ 0x52, 0x58, 0x43, 0xcb, 0x25, 0x4a, 0x77, 0x34,
+ 0xe6, 0x70, 0x5b, 0x6f, 0x8f, 0xe8, 0x07, 0xee,
+ 0x76, 0x4a, 0xad, 0xab, 0x11, 0x8a, 0x1b, 0x92,
+ 0x60, 0x79, 0xb8, 0xe0, 0x88, 0xa7, 0x3a, 0xe0,
+ 0x15, 0xf6, 0x57, 0xf0, 0xe8, 0x87, 0xda, 0xf8,
+ 0x90, 0x4e, 0xe7, 0xb3, 0xb4, 0xe7, 0x73, 0x5c,
+ 0xd3, 0x69, 0xfb, 0x23, 0x4f, 0x4f, 0xc8, 0xd2,
+ 0xfb, 0xf5, 0xf5, 0x76, 0x80, 0xb6, 0xb7, 0xe2,
+ 0xb7, 0x96, 0x1a, 0x97, 0x12, 0x40, 0x16, 0x86,
+ 0xd6, 0x66, 0xf5, 0x46, 0x9e, 0x04, 0x62, 0xaa,
+ 0x9c, 0xc9, 0x45, 0x39, 0x5c, 0xd3, 0x58, 0x40,
+ 0xb4, 0x32, 0xd8, 0x6c, 0x19, 0xfa, 0xa5, 0x5f,
+ 0x1e, 0x83, 0x5a, 0x32, 0x5e, 0x1d, 0xab, 0xa9,
+ 0x48, 0x1b, 0x1b, 0x37, 0x66, 0xf8, 0x67, 0xd7,
+};
+
+/*
+ * IV method encblkno8, blkno 2.
+ */
+static const uint8_t bf_cbc_448_encblkno8_vec2_ctxt[SECSIZE] = {
+ 0xb3, 0x2d, 0x0d, 0x90, 0x7a, 0x50, 0xb6, 0x29,
+ 0x9d, 0xd4, 0x12, 0x1a, 0xc9, 0x71, 0x56, 0xc4,
+ 0xce, 0x3d, 0x74, 0xf9, 0x91, 0xe4, 0x79, 0x8a,
+ 0x42, 0x34, 0x1a, 0xd4, 0x84, 0xaa, 0x01, 0x85,
+ 0x13, 0xe8, 0xab, 0xaa, 0xb6, 0x81, 0x82, 0xd6,
+ 0x32, 0xd6, 0x9f, 0x63, 0x69, 0x55, 0x10, 0x5f,
+ 0x2e, 0xb3, 0x51, 0x74, 0x80, 0x5c, 0xe9, 0x8d,
+ 0x27, 0xd8, 0x41, 0x2d, 0x27, 0x07, 0xb4, 0x13,
+ 0xcd, 0xc0, 0xb3, 0x96, 0xaa, 0x59, 0x9c, 0x3e,
+ 0x16, 0x9e, 0x18, 0xa5, 0x92, 0x52, 0x59, 0x19,
+ 0x19, 0x62, 0xeb, 0xd9, 0xdf, 0x9d, 0x10, 0x77,
+ 0xfb, 0x3c, 0xf1, 0xeb, 0x70, 0xf6, 0x6a, 0x9b,
+ 0xad, 0x99, 0x35, 0xd7, 0xf8, 0xde, 0x2b, 0x52,
+ 0x85, 0xdd, 0x36, 0x07, 0x3a, 0x88, 0xa6, 0xbb,
+ 0x98, 0x7a, 0xe3, 0xb0, 0xe6, 0xae, 0x33, 0x5d,
+ 0x47, 0x0c, 0x6c, 0xd4, 0x84, 0x33, 0x7e, 0xf4,
+ 0xea, 0xfd, 0xf1, 0x1c, 0xdb, 0x8b, 0xfe, 0x01,
+ 0x77, 0xa3, 0x07, 0x21, 0x09, 0xac, 0x0c, 0xe4,
+ 0x63, 0xaa, 0x3d, 0xb3, 0x05, 0xf8, 0x73, 0x03,
+ 0x69, 0x53, 0x2f, 0xd3, 0x53, 0x29, 0xf2, 0x02,
+ 0x60, 0x41, 0xed, 0xc7, 0xe9, 0x2e, 0xba, 0x54,
+ 0xa4, 0xfe, 0x26, 0xf0, 0xd9, 0x2c, 0x58, 0x2d,
+ 0x90, 0x94, 0x19, 0xf9, 0xe5, 0xaa, 0xe2, 0x13,
+ 0x9a, 0x67, 0x90, 0x44, 0x61, 0x36, 0xd0, 0x3f,
+ 0xe7, 0xe8, 0x7e, 0x47, 0x2b, 0x84, 0x97, 0xe2,
+ 0x0b, 0x8a, 0xfa, 0x2f, 0xbc, 0x1a, 0x70, 0xed,
+ 0xb2, 0x93, 0x36, 0x0e, 0xe6, 0xb1, 0xa2, 0x5a,
+ 0x04, 0x04, 0x8d, 0x2f, 0x82, 0xdb, 0x49, 0x5e,
+ 0x1b, 0x90, 0xc1, 0x27, 0x2a, 0x2f, 0x64, 0x5b,
+ 0xce, 0x35, 0x06, 0x0d, 0xb6, 0x05, 0x50, 0x5a,
+ 0x90, 0xc8, 0x21, 0xd0, 0xf0, 0xb9, 0xf3, 0x43,
+ 0x25, 0xd8, 0xb9, 0x86, 0xb7, 0xd0, 0x29, 0x75,
+ 0xdc, 0xf6, 0xf6, 0x14, 0x5e, 0x1f, 0xad, 0x54,
+ 0x28, 0x63, 0x92, 0xcd, 0xcd, 0x75, 0xb2, 0xe8,
+ 0xf3, 0x1f, 0xfd, 0x88, 0x72, 0x04, 0xab, 0xe2,
+ 0x77, 0x21, 0xc1, 0xb4, 0x87, 0xa7, 0x98, 0x86,
+ 0x2d, 0x7f, 0x01, 0x24, 0xed, 0x3a, 0x23, 0x83,
+ 0xb7, 0xa4, 0xb7, 0x08, 0x4e, 0xee, 0x10, 0x77,
+ 0x29, 0x22, 0xab, 0xea, 0x4a, 0x68, 0x1f, 0x7f,
+ 0xd6, 0xe6, 0x90, 0x11, 0xbc, 0x23, 0x2e, 0x47,
+ 0x78, 0xea, 0x1d, 0x33, 0x7c, 0x02, 0x09, 0x55,
+ 0x7a, 0xbc, 0xa7, 0x3d, 0x9a, 0xd0, 0x4d, 0x40,
+ 0x6c, 0xc2, 0x99, 0xc2, 0xe9, 0x0e, 0xcf, 0x06,
+ 0x82, 0x61, 0x5c, 0x76, 0xca, 0xef, 0x8f, 0xd3,
+ 0x78, 0x2a, 0xae, 0x39, 0x29, 0x4e, 0xc1, 0x2c,
+ 0xb1, 0xbc, 0xcd, 0x76, 0x4f, 0x25, 0xf0, 0x5b,
+ 0x78, 0x3a, 0xa4, 0x39, 0x52, 0x5a, 0xc7, 0xcf,
+ 0x17, 0x3d, 0xb0, 0x39, 0x63, 0xf9, 0xf9, 0xfb,
+ 0x6f, 0x35, 0xb7, 0xf1, 0x49, 0x10, 0xd8, 0x12,
+ 0x8d, 0xa2, 0xdf, 0xc5, 0x26, 0x37, 0xd1, 0xb8,
+ 0xef, 0xdc, 0x04, 0x1b, 0x0d, 0x60, 0xbf, 0xbc,
+ 0xc0, 0xff, 0x56, 0x8b, 0xd3, 0x6e, 0x71, 0xfc,
+ 0x87, 0x00, 0x86, 0x10, 0x78, 0x3b, 0xce, 0x8b,
+ 0xe8, 0x5f, 0x8c, 0xce, 0x03, 0xa2, 0x89, 0x8c,
+ 0x16, 0x00, 0x0e, 0xd8, 0x53, 0xaf, 0x7f, 0x77,
+ 0x78, 0x40, 0x5e, 0x5e, 0xd1, 0x7d, 0xf8, 0x41,
+ 0xa8, 0x1e, 0xa5, 0xe5, 0xe9, 0xd6, 0x17, 0x2c,
+ 0x2f, 0x1b, 0xff, 0xef, 0xf5, 0x53, 0x31, 0xf3,
+ 0x5b, 0xe4, 0x84, 0x7c, 0xe2, 0x45, 0x3c, 0x82,
+ 0x5b, 0xf6, 0x03, 0x35, 0xdd, 0x03, 0x22, 0xbe,
+ 0x77, 0x9c, 0x6a, 0x7d, 0xc8, 0x29, 0x41, 0x53,
+ 0xbb, 0xab, 0x6e, 0xa5, 0x00, 0xaf, 0x3b, 0x1d,
+ 0x76, 0x12, 0xac, 0x44, 0x5c, 0x7d, 0xd2, 0x3b,
+ 0x3a, 0x95, 0xb0, 0xa9, 0x4f, 0x27, 0x76, 0x17,
+};
+
+/*
+ * IV method encblkno8, blkno 3.
+ */
+static const uint8_t bf_cbc_448_encblkno8_vec3_ctxt[SECSIZE] = {
+ 0x8e, 0xc4, 0x56, 0x64, 0x1e, 0x2a, 0x0d, 0x60,
+ 0x54, 0x5c, 0xcd, 0xe0, 0x6d, 0xa7, 0x4c, 0x30,
+ 0x7e, 0x85, 0x21, 0xdf, 0xaa, 0xb2, 0x32, 0xde,
+ 0xc0, 0xc6, 0x56, 0xe0, 0x43, 0xc2, 0x3e, 0x6c,
+ 0x8c, 0x62, 0x35, 0xaa, 0xf9, 0xba, 0xc9, 0x52,
+ 0x38, 0x72, 0x06, 0xcc, 0x02, 0xa2, 0xb8, 0x85,
+ 0xf7, 0xcc, 0xe6, 0x8c, 0x86, 0x8f, 0x9c, 0xd6,
+ 0x1f, 0xf8, 0x24, 0x9d, 0xca, 0xe8, 0xed, 0x3c,
+ 0x80, 0x0b, 0xaf, 0x0c, 0x78, 0x4f, 0x5b, 0x2a,
+ 0x0f, 0xfe, 0xe5, 0xe6, 0x12, 0x8a, 0xff, 0xc7,
+ 0x6a, 0x97, 0xd9, 0xcb, 0xc8, 0x6a, 0x83, 0x12,
+ 0xa1, 0x12, 0x84, 0xc8, 0x72, 0x1c, 0xb7, 0x68,
+ 0x23, 0x24, 0xff, 0x5a, 0x78, 0x99, 0x9d, 0xb8,
+ 0x03, 0x70, 0x0a, 0x09, 0xa1, 0x3d, 0xfe, 0xe0,
+ 0xc5, 0x1b, 0xea, 0x58, 0xbc, 0x52, 0x70, 0xa2,
+ 0x4e, 0xcc, 0x43, 0xfb, 0xb7, 0xc4, 0xbd, 0xb6,
+ 0xa9, 0x1e, 0xff, 0xf6, 0x69, 0xaa, 0xab, 0xa4,
+ 0xd7, 0x07, 0x0d, 0xda, 0x41, 0x4b, 0xe3, 0xa5,
+ 0xef, 0x94, 0x9f, 0xb4, 0xd8, 0xd1, 0x41, 0xd0,
+ 0x9e, 0xa0, 0x0a, 0x70, 0xdb, 0xb8, 0x5e, 0x27,
+ 0xc6, 0x08, 0x38, 0x6a, 0x31, 0xe3, 0xa0, 0xd6,
+ 0x90, 0xad, 0x19, 0x0c, 0x7e, 0x1d, 0x21, 0xc8,
+ 0x66, 0x30, 0x73, 0x8e, 0x06, 0x97, 0xec, 0xc6,
+ 0xfe, 0x5c, 0xc6, 0xc0, 0xd1, 0x5c, 0x5f, 0xf8,
+ 0x01, 0xb3, 0xac, 0x18, 0x66, 0x1e, 0x04, 0xaf,
+ 0xa7, 0xd3, 0x6d, 0x10, 0x74, 0xa1, 0x9a, 0x36,
+ 0x10, 0xa0, 0xd6, 0x28, 0x61, 0x93, 0x98, 0x14,
+ 0x67, 0x6f, 0x7d, 0x52, 0x86, 0x48, 0x17, 0x99,
+ 0x53, 0xa3, 0xee, 0xe5, 0x93, 0xf6, 0x80, 0xe1,
+ 0x52, 0xf0, 0x39, 0x48, 0x5c, 0x20, 0x05, 0xd9,
+ 0xae, 0xa2, 0xe3, 0x25, 0x4e, 0x60, 0x84, 0xf8,
+ 0xad, 0xd6, 0xf6, 0x95, 0x8e, 0x95, 0xd0, 0x49,
+ 0x1c, 0x65, 0xd0, 0xc8, 0xa5, 0x26, 0xc0, 0xdf,
+ 0x32, 0xbe, 0xbc, 0xb7, 0x6d, 0xe5, 0x5e, 0x6d,
+ 0x38, 0x7d, 0x03, 0xd5, 0x94, 0x7a, 0x14, 0x2b,
+ 0x02, 0xe0, 0x09, 0x00, 0x50, 0xf1, 0x52, 0x69,
+ 0x06, 0x33, 0x4b, 0x5b, 0xa2, 0xbc, 0x2e, 0xa9,
+ 0x1a, 0xb7, 0xca, 0xa8, 0xb4, 0xa2, 0x5b, 0xcd,
+ 0x35, 0xe4, 0x03, 0xdd, 0x8f, 0x66, 0x3a, 0x34,
+ 0xc6, 0x2a, 0xd6, 0x90, 0xa2, 0xef, 0xe2, 0xfa,
+ 0x7c, 0xc1, 0x6c, 0x21, 0xd0, 0xfd, 0x96, 0x92,
+ 0xb5, 0x99, 0xe4, 0xb7, 0x66, 0xd4, 0xf2, 0x50,
+ 0x22, 0xef, 0x66, 0x1e, 0x5f, 0x62, 0xd1, 0x77,
+ 0x87, 0x52, 0xed, 0x40, 0x69, 0xfd, 0xab, 0x66,
+ 0xe4, 0x0e, 0x2b, 0xa8, 0x67, 0x4c, 0x6d, 0xce,
+ 0xb0, 0x61, 0x8e, 0x6c, 0xc5, 0x34, 0xab, 0x03,
+ 0x3e, 0x8a, 0xe5, 0x2b, 0xa2, 0xa4, 0x04, 0xa2,
+ 0x01, 0x81, 0x79, 0x72, 0xfc, 0x19, 0xbd, 0x38,
+ 0x39, 0xee, 0xb3, 0x95, 0xc5, 0x6f, 0xed, 0xaa,
+ 0x6e, 0xca, 0xeb, 0xc6, 0xaf, 0xeb, 0x76, 0xb4,
+ 0xd7, 0xc3, 0x1b, 0x65, 0x99, 0xc6, 0xa3, 0xe8,
+ 0x96, 0x5e, 0xc1, 0x0c, 0xd2, 0xf8, 0x65, 0xcf,
+ 0x42, 0xc5, 0x8f, 0x52, 0x5d, 0x90, 0x21, 0x55,
+ 0xec, 0x9d, 0x93, 0x81, 0xb7, 0x9a, 0xa4, 0x35,
+ 0xe7, 0xef, 0xef, 0x2d, 0x4c, 0x02, 0xf7, 0x2b,
+ 0x26, 0xe0, 0x9e, 0x3a, 0x31, 0xfd, 0x94, 0xb3,
+ 0xa7, 0x8a, 0x93, 0xf3, 0xe1, 0x77, 0x79, 0xdf,
+ 0xcf, 0x1f, 0x99, 0x55, 0x20, 0xc3, 0x7d, 0x8a,
+ 0xbc, 0xff, 0x63, 0x64, 0x87, 0xa9, 0x42, 0x63,
+ 0xc9, 0x67, 0x7e, 0x51, 0x99, 0x9c, 0xcb, 0x47,
+ 0xa9, 0xc8, 0x5e, 0x83, 0x87, 0x55, 0x7c, 0x45,
+ 0x3a, 0xb4, 0xfe, 0x97, 0x24, 0x17, 0x1d, 0x5e,
+ 0xdf, 0xe0, 0xe8, 0x17, 0xa6, 0x31, 0x99, 0xeb,
+ 0xb7, 0xb5, 0xd5, 0xd7, 0x7c, 0x2f, 0x22, 0x26,
+};
+
+const struct testvec bf_cbc_448_8_vectors[] = {
+ {
+ .blkno = 0,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno8_vec0_ctxt,
+ },
+ {
+ .blkno = 1,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno8_vec1_ctxt,
+ },
+ {
+ .blkno = 2,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno8_vec2_ctxt,
+ },
+ {
+ .blkno = 3,
+ .ptxt = bf_cbc_ptxt,
+ .ctxt = bf_cbc_448_encblkno8_vec3_ctxt,
+ },
+};
+
+static int
+open_disk(const char *devpath, const char *imgpath, size_t size)
+{
+ int fd;
+
+ fd = open(imgpath, O_CREAT | O_RDWR | O_TRUNC, 0600);
+ if (fd < 0)
+ return -1;
+
+ if (ftruncate(fd, size) < 0)
+ goto fail;
+
+ if (rump_pub_etfs_register_withsize(devpath,
+ imgpath, RUMP_ETFS_BLK, 0, size) < 0) {
+ goto fail;
+ }
+
+ unlink(imgpath);
+ return fd;
+fail:
+ close(fd);
+ unlink(imgpath);
+ return -1;
+}
+
+static int
+open_cgd(int devno)
+{
+ char devpath[32];
+
+ sprintf(devpath, "/dev/rcgd%d%c", devno, getrawpartition() + 'a');
+
+ return rump_sys_open(devpath, O_RDWR, 0);
+}
+
+static int
+configure_cgd(int fd, const char *dkpath, const char *alg,
+ const char *ivmethod, const char *key, size_t keylen)
+{
+ struct cgd_ioctl ci;
+
+ memset(&ci, 0, sizeof(ci));
+ ci.ci_disk = dkpath;
+ ci.ci_alg = alg;
+ ci.ci_ivmethod = ivmethod;
+ ci.ci_keylen = 8 * keylen - 8; /* Exclude the NUL terminator. */
+ ci.ci_key = key;
+ ci.ci_blocksize = 64;
+
+ return rump_sys_ioctl(fd, CGDIOCSET, &ci);
+}
+
+static int
+unconfigure_cgd(int fd)
+{
+ struct cgd_ioctl ci;
+
+ return rump_sys_ioctl(fd, CGDIOCCLR, &ci);
+}
+
+static int
+write_testvec(int cgdfd, const struct testvec *tv)
+{
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ return -1;
+
+ if (rump_sys_write(cgdfd, tv->ptxt, SECSIZE) != SECSIZE)
+ return -1;
+
+ return 0;
+}
+
+static int
+read_testvec(int cgdfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (rump_sys_lseek(cgdfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (rump_sys_read(cgdfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ptxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+static int
+check_testvec(int dkfd, const struct testvec *tv)
+{
+ char *buf;
+ int res = -1;
+
+ buf = malloc(SECSIZE);
+ if (buf == NULL)
+ return -1;
+
+ if (lseek(dkfd, tv->blkno * SECSIZE, SEEK_SET) < 0)
+ goto fail;
+
+ if (read(dkfd, buf, SECSIZE) != SECSIZE)
+ goto fail;
+
+ res = memcmp(buf, tv->ctxt, SECSIZE);
+fail:
+ free(buf);
+ return res;
+}
+
+ATF_TC(cgd_bf_cbc_128_encblkno1);
+ATF_TC_HEAD(cgd_bf_cbc_128_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 128 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_128_encblkno1, tc)
+{
+ const char imgpath[] = "blowfish-cbc-128-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_128_key, sizeof(bf_cbc_128_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_128_key, sizeof(bf_cbc_128_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_128_encblkno8);
+ATF_TC_HEAD(cgd_bf_cbc_128_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 128 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_128_encblkno8, tc)
+{
+ const char imgpath[] = "blowfish-cbc-128-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_128_key, sizeof(bf_cbc_128_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_128_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_128_key, sizeof(bf_cbc_128_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_128_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_128_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_256_encblkno1);
+ATF_TC_HEAD(cgd_bf_cbc_256_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 256 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_256_encblkno1, tc)
+{
+ const char imgpath[] = "blowfish-cbc-256-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_256_key, sizeof(bf_cbc_256_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_256_key, sizeof(bf_cbc_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_256_encblkno8);
+ATF_TC_HEAD(cgd_bf_cbc_256_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 256 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_256_encblkno8, tc)
+{
+ const char imgpath[] = "blowfish-cbc-256-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_256_key, sizeof(bf_cbc_256_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_256_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_256_key, sizeof(bf_cbc_256_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_256_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_256_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_448_encblkno1);
+ATF_TC_HEAD(cgd_bf_cbc_448_encblkno1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 448 bits key, ivmethod encblkno1");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_448_encblkno1, tc)
+{
+ const char imgpath[] = "blowfish-cbc-448-encblkno1.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_448_key, sizeof(bf_cbc_448_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_1_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_1_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_1_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno1",
+ bf_cbc_448_key, sizeof(bf_cbc_448_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_1_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_1_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_1_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_1_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_1_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_1_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_1_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_1_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TC(cgd_bf_cbc_448_encblkno8);
+ATF_TC_HEAD(cgd_bf_cbc_448_encblkno8, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test blowfish-cbc with 448 bits key, ivmethod encblkno8");
+}
+
+ATF_TC_BODY(cgd_bf_cbc_448_encblkno8, tc)
+{
+ const char imgpath[] = "blowfish-cbc-448-encblkno8.img";
+ const char *dkpath = "/dev/dk";
+ const size_t dksize = 4 * SECSIZE; /* Last blkno is 3. */
+ int dkfd, cgdfd;
+
+ rump_init();
+
+ RL(dkfd = open_disk(dkpath, imgpath, dksize));
+
+ RL(cgdfd = open_cgd(0));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_448_key, sizeof(bf_cbc_448_key)));
+
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_8_vectors[0]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_8_vectors[1]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_8_vectors[2]), 0);
+ ATF_CHECK_EQ(write_testvec(cgdfd, &bf_cbc_448_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(configure_cgd(cgdfd, dkpath, "blowfish-cbc", "encblkno8",
+ bf_cbc_448_key, sizeof(bf_cbc_448_key)));
+
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_8_vectors[0]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_8_vectors[1]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_8_vectors[2]), 0);
+ ATF_CHECK_EQ(read_testvec(cgdfd, &bf_cbc_448_8_vectors[3]), 0);
+
+ RL(unconfigure_cgd(cgdfd));
+ RL(rump_sys_close(cgdfd));
+
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_8_vectors[0]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_8_vectors[1]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_8_vectors[2]), 0);
+ ATF_CHECK_EQ(check_testvec(dkfd, &bf_cbc_448_8_vectors[3]), 0);
+
+ RL(close(dkfd));
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_128_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_128_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_256_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_256_encblkno8);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_448_encblkno1);
+ ATF_TP_ADD_TC(tp, cgd_bf_cbc_448_encblkno8);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/dev/dm/h_dm.c b/contrib/netbsd-tests/dev/dm/h_dm.c
index 3380ad3..d4ccb3a 100644
--- a/contrib/netbsd-tests/dev/dm/h_dm.c
+++ b/contrib/netbsd-tests/dev/dm/h_dm.c
@@ -1,4 +1,4 @@
-/* $NetBSD: h_dm.c,v 1.1 2010/10/06 11:24:55 haad Exp $ */
+/* $NetBSD: h_dm.c,v 1.2 2016/01/23 21:18:27 christos Exp $ */
/*
* Copyright (c) 2010 Antti Kantee. All Rights Reserved.
@@ -83,6 +83,7 @@ dm_test_versions(void) {
dict_out = prop_dictionary_internalize(prefp.pref_plist);
xml = prop_dictionary_externalize(dict_out);
+ __USE(xml);
rump_sys_close(fd);
@@ -122,6 +123,7 @@ dm_test_targets(void) {
dict_out = prop_dictionary_internalize(prefp.pref_plist);
xml = prop_dictionary_externalize(dict_out);
+ __USE(xml);
rump_sys_close(fd);
diff --git a/contrib/netbsd-tests/dev/fss/t_fss.sh b/contrib/netbsd-tests/dev/fss/t_fss.sh
new file mode 100755
index 0000000..cb3341f
--- /dev/null
+++ b/contrib/netbsd-tests/dev/fss/t_fss.sh
@@ -0,0 +1,84 @@
+# $NetBSD: t_fss.sh,v 1.2 2016/07/29 20:27:37 pgoyette Exp $
+#
+# Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+#
+# Verify basic operation of fss(4) file system snapshot device
+#
+
+orig_data="Original data"
+repl_data="Replacement data"
+
+atf_test_case basic cleanup
+basic_body() {
+
+# create of mount-points for the file system and snapshot
+
+ mkdir ./m1
+ mkdir ./m2
+
+# create a small 4MB file, treat it as a disk, init a file-system on it,
+# and mount it
+
+ dd if=/dev/zero of=./image bs=32k count=64
+ vndconfig -c vnd0 ./image
+ newfs /dev/vnd0a
+ mount /dev/vnd0a ./m1
+
+ echo "${orig_data}" > ./m1/text
+
+# configure and mount a snapshot of the file system
+
+ fssconfig -c fss0 ./m1 ./backup
+ mount -o rdonly /dev/fss0 ./m2
+
+# Modify the data on the underlying file system
+
+ echo "${repl_data}" > ./m1/text || abort
+
+# Verify that original data is still visible in the snapshot
+
+ read test_data < ./m2/text
+ atf_check_equal "${orig_data}" "${test_data}"
+
+# Unmount our temporary stuff
+
+ umount /dev/fss0 || true
+ fssconfig -u fss0 || true
+ umount /dev/vnd0a || true
+ vndconfig -u vnd0 || true
+}
+
+basic_cleanup() {
+ umount /dev/vnd0a || true
+ fssconfig -u fss0 || true
+ umount /dev/fss0 || true
+ vndconfig -u vnd0 || true
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case basic
+}
diff --git a/contrib/netbsd-tests/dev/sysmon/t_swsensor.sh b/contrib/netbsd-tests/dev/sysmon/t_swsensor.sh
index 5b54431..7f98c1a 100755
--- a/contrib/netbsd-tests/dev/sysmon/t_swsensor.sh
+++ b/contrib/netbsd-tests/dev/sysmon/t_swsensor.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_swsensor.sh,v 1.7 2013/04/14 16:07:46 martin Exp $
+# $NetBSD: t_swsensor.sh,v 1.9 2015/04/23 23:23:28 pgoyette Exp $
get_sensor_info() {
rump.envstat -x | \
@@ -6,7 +6,13 @@ get_sensor_info() {
}
get_sensor_key() {
- get_sensor_info | grep -A1 $1 | grep integer | sed -e 's;<[/a-z]*>;;g'
+ local v
+ v=$(get_sensor_info | grep -A1 $1 | grep integer | \
+ sed -e 's;<[/a-z]*>;;g')
+ if [ -z "$v" ] ; then
+ v="key_$1_not_found"
+ fi
+ echo $v
}
get_powerd_event_count() {
@@ -60,7 +66,7 @@ start_rump() {
common_head() {
atf_set descr "$1"
- atf_set timeout 60
+ atf_set timeout 120
atf_set require.progs rump.powerd rump.envstat rump.modload \
rump.halt rump.sysctl rump_server \
sed grep awk \
diff --git a/contrib/netbsd-tests/dev/sysmon/t_swwdog.c b/contrib/netbsd-tests/dev/sysmon/t_swwdog.c
index 19e3795..1635884 100644
--- a/contrib/netbsd-tests/dev/sysmon/t_swwdog.c
+++ b/contrib/netbsd-tests/dev/sysmon/t_swwdog.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_swwdog.c,v 1.5 2011/06/26 12:14:59 christos Exp $ */
+/* $NetBSD: t_swwdog.c,v 1.6 2015/04/23 04:49:37 pgoyette Exp $ */
/*
* Copyright (c) 2010 Antti Kantee. All Rights Reserved.
@@ -121,6 +121,7 @@ testbody(int max)
_exit(2);
}
/* fail */
+ printf("no watchdog registered!\n");
_exit(1);
}
diff --git a/contrib/netbsd-tests/dev/usb/t_hid.c b/contrib/netbsd-tests/dev/usb/t_hid.c
new file mode 100644
index 0000000..31c289b
--- /dev/null
+++ b/contrib/netbsd-tests/dev/usb/t_hid.c
@@ -0,0 +1,267 @@
+/* $NetBSD: t_hid.c,v 1.8 2016/05/05 17:40:26 jakllsch Exp $ */
+
+/*
+ * Copyright (c) 2016 Jonathan A. Kollasch
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_hid.c,v 1.8 2016/05/05 17:40:26 jakllsch Exp $");
+
+#include <machine/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <atf-c.h>
+
+#include <rump/rump.h>
+
+#define hid_start_parse rumpns_hid_start_parse
+#define hid_end_parse rumpns_hid_end_parse
+#define hid_get_item rumpns_hid_get_item
+#define hid_locate rumpns_hid_locate
+#define hid_report_size rumpns_hid_report_size
+#define hid_get_data rumpns_hid_get_data
+#define hid_get_udata rumpns_hid_get_udata
+#define uhidevdebug rumpns_uhidevdebug
+#include <usb.h>
+#include <usbhid.h>
+#include <hid.h>
+
+#include "../../lib/libusbhid/hid_test_data.c"
+
+#define MYd_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %d", (d))
+
+#define MYld_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %ld", (d))
+
+#define MYu_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %u", (d))
+
+#define MYlu_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %lu", (d))
+
+#define MYx_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== 0x%x", (d))
+
+#define MYlx_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== 0x%lx", (d))
+
+int uhidevdebug;
+
+ATF_TC(khid);
+
+ATF_TC_HEAD(khid, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "check kernel hid.c");
+}
+
+static int
+locate_item(const void *desc, int size, u_int32_t u, u_int8_t id,
+ enum hid_kind k, struct hid_item *hip)
+{
+ struct hid_data *d;
+ struct hid_item h;
+
+ h.report_ID = 0;
+ for (d = hid_start_parse(desc, size, k); hid_get_item(d, &h); ) {
+ if (h.kind == k && !(h.flags & HIO_CONST) &&
+ (/*XXX*/uint32_t)h.usage == u && h.report_ID == id) {
+ if (hip != NULL)
+ *hip = h;
+ hid_end_parse(d);
+ return (1);
+ }
+ }
+ hid_end_parse(d);
+ return (0);
+}
+
+ATF_TC_BODY(khid, tc)
+{
+ int ret;
+ struct hid_item hi;
+
+ uhidevdebug = 0;
+
+ rump_init();
+
+ rump_schedule();
+
+ ret = locate_item(range_test_report_descriptor,
+ sizeof(range_test_report_descriptor), 0xff000003, 0, hid_input,
+ &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 32);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 0);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -2147483648);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 2147483647);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -2147483648);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 2147483647);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_minimum_report,
+ &hi.loc), -2147483648);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_negative_one_report,
+ &hi.loc), -1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_positive_one_report,
+ &hi.loc), 1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report,
+ &hi.loc), 2147483647);
+
+ ret = locate_item(range_test_report_descriptor,
+ sizeof(range_test_report_descriptor), 0xff000002, 0, hid_input,
+ &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 16);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 32);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -32768);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 32767);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -32768);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 32767);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_minimum_report,
+ &hi.loc), -32768);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_negative_one_report,
+ &hi.loc), -1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_positive_one_report,
+ &hi.loc), 1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report,
+ &hi.loc), 32767);
+
+ ret = locate_item(range_test_report_descriptor,
+ sizeof(range_test_report_descriptor), 0xff000001, 0, hid_input,
+ &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 8);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 48);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -128);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 127);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -128);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 127);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_minimum_report,
+ &hi.loc), -128);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_negative_one_report,
+ &hi.loc), -1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_positive_one_report,
+ &hi.loc), 1);
+ MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report,
+ &hi.loc), 127);
+
+
+ ret = locate_item(unsigned_range_test_report_descriptor,
+ sizeof(unsigned_range_test_report_descriptor), 0xff000013, 0,
+ hid_input, &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 32);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 0);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_minimum_report,
+ &hi.loc), 0x0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_positive_one_report,
+ &hi.loc), 0x1);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_negative_one_report,
+ &hi.loc), 0xfffffffe);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report,
+ &hi.loc), 0xffffffff);
+
+ ret = locate_item(unsigned_range_test_report_descriptor,
+ sizeof(unsigned_range_test_report_descriptor), 0xff000012, 0,
+ hid_input, &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 16);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 32);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_minimum_report,
+ &hi.loc), 0x0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_positive_one_report,
+ &hi.loc), 0x1);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_negative_one_report,
+ &hi.loc), 0xfffe);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report,
+ &hi.loc), 0xffff);
+
+ ret = locate_item(unsigned_range_test_report_descriptor,
+ sizeof(unsigned_range_test_report_descriptor), 0xff000011, 0,
+ hid_input, &hi);
+ ATF_REQUIRE(ret > 0);
+ MYu_ATF_CHECK_EQ(hi.loc.size, 8);
+ MYu_ATF_CHECK_EQ(hi.loc.count, 1);
+ MYu_ATF_CHECK_EQ(hi.loc.pos, 48);
+ MYx_ATF_CHECK_EQ(hi.flags, 0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_minimum_report,
+ &hi.loc), 0x0);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_positive_one_report,
+ &hi.loc), 0x1);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_negative_one_report,
+ &hi.loc), 0xfe);
+ MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report,
+ &hi.loc), 0xff);
+
+ rump_unschedule();
+}
+
+ATF_TC(khid_parse_just_pop);
+
+ATF_TC_HEAD(khid_parse_just_pop, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "check kernel hid.c for "
+ "Pop on empty stack bug");
+}
+
+ATF_TC_BODY(khid_parse_just_pop, tc)
+{
+ struct hid_data *hdp;
+ struct hid_item hi;
+
+ rump_init();
+
+ rump_schedule();
+
+ hdp = hid_start_parse(just_pop_report_descriptor,
+ sizeof just_pop_report_descriptor, hid_none);
+ while (hid_get_item(hdp, &hi) > 0) {
+ }
+ hid_end_parse(hdp);
+
+ rump_unschedule();
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, khid);
+ ATF_TP_ADD_TC(tp, khid_parse_just_pop);
+
+ return atf_no_error();
+}
+
diff --git a/contrib/netbsd-tests/fs/common/fstest_lfs.c b/contrib/netbsd-tests/fs/common/fstest_lfs.c
index fd131cf..597ca23 100644
--- a/contrib/netbsd-tests/fs/common/fstest_lfs.c
+++ b/contrib/netbsd-tests/fs/common/fstest_lfs.c
@@ -1,4 +1,4 @@
-/* $NetBSD: fstest_lfs.c,v 1.4 2010/07/30 16:15:05 pooka Exp $ */
+/* $NetBSD: fstest_lfs.c,v 1.5 2015/08/30 18:27:26 dholland Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -48,8 +48,6 @@
#include "h_fsmacros.h"
#include "mount_lfs.h"
-sem_t lfs_clearnerloop;
-
struct lfstestargs {
struct ufs_args ta_uargs;
pthread_t ta_cleanerthread;
diff --git a/contrib/netbsd-tests/fs/common/h_fsmacros.h b/contrib/netbsd-tests/fs/common/h_fsmacros.h
index b47a708..b295cf2 100644
--- a/contrib/netbsd-tests/fs/common/h_fsmacros.h
+++ b/contrib/netbsd-tests/fs/common/h_fsmacros.h
@@ -1,4 +1,4 @@
-/* $NetBSD: h_fsmacros.h,v 1.38 2013/06/26 19:29:24 reinoud Exp $ */
+/* $NetBSD: h_fsmacros.h,v 1.40 2015/08/29 19:19:43 dholland Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -110,10 +110,6 @@ do { \
atf_tc_set_md_var(tc, "descr", type " test for " desc); \
atf_tc_set_md_var(tc, "X-fs.type", #fs); \
atf_tc_set_md_var(tc, "X-fs.mntname", type); \
- if (strcmp(#fs, "zfs") == 0) { \
- /* This should not be necessary. */ \
- atf_tc_set_md_var(tc, "require.user", "root"); \
- } \
} \
void *fs##func##tmp; \
\
@@ -136,10 +132,6 @@ do { \
atf_tc_set_md_var(tc, "descr",_type_" test for "_desc_);\
atf_tc_set_md_var(tc, "X-fs.type", #_fs_); \
atf_tc_set_md_var(tc, "X-fs.mntname", _type_); \
- if (strcmp(#_fs_, "zfs") == 0) { \
- /* This should not be necessary. */ \
- atf_tc_set_md_var(tc, "require.user", "root"); \
- } \
} \
void *_fs_##_func_##tmp; \
\
@@ -153,7 +145,7 @@ do { \
atf_tc_fail_errno("unmount r/w failed"); \
if (_fs_##_fstest_mount(tc, _fs_##_func_##tmp, \
FSTEST_MNTNAME, MNT_RDONLY) != 0) \
- atf_tc_fail_errno("mount ro failed"); \
+ atf_tc_fail_errno("mount ro failed"); \
_func_(tc,FSTEST_MNTNAME); \
if (_fs_##_fstest_unmount(tc, FSTEST_MNTNAME, 0) != 0) {\
rump_pub_vfs_mount_print(FSTEST_MNTNAME, 1); \
diff --git a/contrib/netbsd-tests/fs/ffs/ffs_common.sh b/contrib/netbsd-tests/fs/ffs/ffs_common.sh
index eaf7142..ee94a15 100755
--- a/contrib/netbsd-tests/fs/ffs/ffs_common.sh
+++ b/contrib/netbsd-tests/fs/ffs/ffs_common.sh
@@ -1,4 +1,4 @@
-# $NetBSD: ffs_common.sh,v 1.2 2013/07/29 13:15:24 skrll Exp $
+# $NetBSD: ffs_common.sh,v 1.3 2016/10/08 13:23:53 gson Exp $
create_ffs()
{
@@ -45,7 +45,7 @@ test_case()
eval "${name}_head() { \
atf_set "descr" "${descr}"
- atf_set "timeout" "60"
+ atf_set "timeout" "120"
}"
eval "${name}_body() { \
RUMP_SOCKETS_LIST=\${RUMP_SOCKET}; \
diff --git a/contrib/netbsd-tests/fs/fifofs/t_fifo.c b/contrib/netbsd-tests/fs/fifofs/t_fifo.c
index c4a2060..4b37bb8 100644
--- a/contrib/netbsd-tests/fs/fifofs/t_fifo.c
+++ b/contrib/netbsd-tests/fs/fifofs/t_fifo.c
@@ -1,9 +1,10 @@
/* Test case written by Bharat Joshi */
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fifo.c,v 1.1 2011/12/21 00:17:07 christos Exp $");
+__RCSID("$NetBSD: t_fifo.c,v 1.2 2017/01/10 22:36:29 christos Exp $");
#include <sys/types.h>
#include <sys/wait.h>
+#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/contrib/netbsd-tests/fs/h_funcs.subr b/contrib/netbsd-tests/fs/h_funcs.subr
index 1216aaf..21bdd97 100644
--- a/contrib/netbsd-tests/fs/h_funcs.subr
+++ b/contrib/netbsd-tests/fs/h_funcs.subr
@@ -45,6 +45,15 @@ require_fs() {
# if we have autoloadable modules, just assume the file system
atf_require_prog sysctl
+ # Begin FreeBSD
+ if true; then
+ if kldstat -m ${name}; then
+ found=yes
+ else
+ found=no
+ fi
+ else
+ # End FreeBSD
autoload=$(sysctl -n kern.module.autoload)
[ "${autoload}" = "1" ] && return 0
@@ -57,6 +66,9 @@ require_fs() {
fi
shift
done
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
[ ${found} = yes ] || \
atf_skip "The kernel does not include support the " \
"\`${name}' file system"
diff --git a/contrib/netbsd-tests/fs/nfs/nfsservice/mountd.c b/contrib/netbsd-tests/fs/nfs/nfsservice/mountd.c
deleted file mode 100644
index b3625f6..0000000
--- a/contrib/netbsd-tests/fs/nfs/nfsservice/mountd.c
+++ /dev/null
@@ -1,2575 +0,0 @@
-/* $NetBSD: mountd.c,v 1.8 2013/10/19 17:45:00 christos Exp $ */
-
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Herb Hasler and Rick Macklem at The University of Guelph.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1989, 1993\
- The Regents of the University of California. All rights reserved.");
-#endif /* not lint */
-
-#ifndef lint
-#if 0
-static char sccsid[] = "@(#)mountd.c 8.15 (Berkeley) 5/1/95";
-#else
-__RCSID("$NetBSD: mountd.c,v 1.8 2013/10/19 17:45:00 christos Exp $");
-#endif
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/file.h>
-#include <sys/ioctl.h>
-#include <sys/mount.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <syslog.h>
-#include <sys/ucred.h>
-
-#include <rpc/rpc.h>
-#include <rpc/pmap_clnt.h>
-#include <rpc/pmap_prot.h>
-#include <rpcsvc/mount.h>
-#include <nfs/rpcv2.h>
-#include <nfs/nfsproto.h>
-#include <nfs/nfs.h>
-#include <nfs/nfsmount.h>
-
-#include <arpa/inet.h>
-
-#include <rump/rump.h>
-#include <rump/rump_syscalls.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <grp.h>
-#include <netdb.h>
-#include <pwd.h>
-#include <netgroup.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <err.h>
-#include <util.h>
-#include "pathnames.h"
-
-#ifdef IPSEC
-#include <netinet6/ipsec.h>
-#ifndef IPSEC_POLICY_IPSEC /* no ipsec support on old ipsec */
-#undef IPSEC
-#endif
-#include "ipsec.h"
-#endif
-
-#include "svc_fdset.h"
-
-#include <stdarg.h>
-
-/*
- * Structures for keeping the mount list and export list
- */
-struct mountlist {
- struct mountlist *ml_next;
- char ml_host[RPCMNT_NAMELEN + 1];
- char ml_dirp[RPCMNT_PATHLEN + 1];
- int ml_flag;/* XXX more flags (same as dp_flag) */
-};
-
-struct dirlist {
- struct dirlist *dp_left;
- struct dirlist *dp_right;
- int dp_flag;
- struct hostlist *dp_hosts; /* List of hosts this dir exported to */
- char dp_dirp[1]; /* Actually malloc'd to size of dir */
-};
-/* dp_flag bits */
-#define DP_DEFSET 0x1
-#define DP_HOSTSET 0x2
-#define DP_KERB 0x4
-#define DP_NORESMNT 0x8
-
-struct exportlist {
- struct exportlist *ex_next;
- struct dirlist *ex_dirl;
- struct dirlist *ex_defdir;
- int ex_flag;
- fsid_t ex_fs;
- char *ex_fsdir;
- char *ex_indexfile;
-};
-/* ex_flag bits */
-#define EX_LINKED 0x1
-
-struct netmsk {
- struct sockaddr_storage nt_net;
- int nt_len;
- char *nt_name;
-};
-
-union grouptypes {
- struct addrinfo *gt_addrinfo;
- struct netmsk gt_net;
-};
-
-struct grouplist {
- int gr_type;
- union grouptypes gr_ptr;
- struct grouplist *gr_next;
-};
-/* Group types */
-#define GT_NULL 0x0
-#define GT_HOST 0x1
-#define GT_NET 0x2
-
-struct hostlist {
- int ht_flag;/* Uses DP_xx bits */
- struct grouplist *ht_grp;
- struct hostlist *ht_next;
-};
-
-struct fhreturn {
- int fhr_flag;
- int fhr_vers;
- size_t fhr_fhsize;
- union {
- uint8_t v2[NFSX_V2FH];
- uint8_t v3[NFSX_V3FHMAX];
- } fhr_fh;
-};
-
-/* Global defs */
-static char *add_expdir __P((struct dirlist **, char *, int));
-static void add_dlist __P((struct dirlist **, struct dirlist *,
- struct grouplist *, int));
-static void add_mlist __P((char *, char *, int));
-static int check_dirpath __P((const char *, size_t, char *));
-static int check_options __P((const char *, size_t, struct dirlist *));
-static int chk_host __P((struct dirlist *, struct sockaddr *, int *, int *));
-static int del_mlist __P((char *, char *, struct sockaddr *));
-static struct dirlist *dirp_search __P((struct dirlist *, char *));
-static int do_nfssvc __P((const char *, size_t, struct exportlist *,
- struct grouplist *, int, struct uucred *, char *, int, struct statvfs *));
-static int do_opt __P((const char *, size_t, char **, char **,
- struct exportlist *, struct grouplist *, int *, int *, struct uucred *));
-static struct exportlist *ex_search __P((fsid_t *));
-static int parse_directory __P((const char *, size_t, struct grouplist *,
- int, char *, struct exportlist **, struct statvfs *));
-static int parse_host_netgroup __P((const char *, size_t, struct exportlist *,
- struct grouplist *, char *, int *, struct grouplist **));
-static struct exportlist *get_exp __P((void));
-static void free_dir __P((struct dirlist *));
-static void free_exp __P((struct exportlist *));
-static void free_grp __P((struct grouplist *));
-static void free_host __P((struct hostlist *));
-void get_exportlist __P((int));
-static int get_host __P((const char *, size_t, const char *,
- struct grouplist *));
-static struct hostlist *get_ht __P((void));
-static void get_mountlist __P((void));
-static int get_net __P((char *, struct netmsk *, int));
-static void free_exp_grp __P((struct exportlist *, struct grouplist *));
-static struct grouplist *get_grp __P((void));
-static void hang_dirp __P((struct dirlist *, struct grouplist *,
- struct exportlist *, int));
-static void mntsrv __P((struct svc_req *, SVCXPRT *));
-static void nextfield __P((char **, char **));
-static void parsecred __P((char *, struct uucred *));
-static int put_exlist __P((struct dirlist *, XDR *, struct dirlist *, int *));
-static int scan_tree __P((struct dirlist *, struct sockaddr *));
-static void send_umntall __P((int));
-#if 0
-static int umntall_each __P((caddr_t, struct sockaddr_in *));
-#endif
-static int xdr_dir __P((XDR *, char *));
-static int xdr_explist __P((XDR *, caddr_t));
-static int xdr_fhs __P((XDR *, caddr_t));
-static int xdr_mlist __P((XDR *, caddr_t));
-static int bitcmp __P((void *, void *, int));
-static int netpartcmp __P((struct sockaddr *, struct sockaddr *, int));
-static int sacmp __P((struct sockaddr *, struct sockaddr *));
-static int allones __P((struct sockaddr_storage *, int));
-static int countones __P((struct sockaddr *));
-static void bind_resv_port __P((int, sa_family_t, in_port_t));
-static void no_nfs(int);
-static struct exportlist *exphead;
-static struct mountlist *mlhead;
-static struct grouplist *grphead;
-static char *exname;
-static struct uucred def_anon = {
- 1,
- (uid_t) -2,
- (gid_t) -2,
- 0,
- { 0 }
-};
-
-static int opt_flags;
-static int have_v6 = 1;
-static const int ninumeric = NI_NUMERICHOST;
-
-/* Bits for above */
-#define OP_MAPROOT 0x001
-#define OP_MAPALL 0x002
-#define OP_KERB 0x004
-#define OP_MASK 0x008
-#define OP_NET 0x010
-#define OP_ALLDIRS 0x040
-#define OP_NORESPORT 0x080
-#define OP_NORESMNT 0x100
-#define OP_MASKLEN 0x200
-
-static int debug = 1;
-#if 0
-static void SYSLOG __P((int, const char *,...));
-#endif
-int main __P((int, char *[]));
-
-/*
- * If this is non-zero, -noresvport and -noresvmnt are implied for
- * each export.
- */
-static int noprivports;
-
-#define C2FD(_c_) ((int)(uintptr_t)(_c_))
-static int
-rumpread(void *cookie, char *buf, int count)
-{
-
- return rump_sys_read(C2FD(cookie), buf, count);
-}
-
-static int
-rumpwrite(void *cookie, const char *buf, int count)
-{
-
- return rump_sys_write(C2FD(cookie), buf, count);
-}
-
-static off_t
-rumpseek(void *cookie, off_t off, int whence)
-{
-
- return rump_sys_lseek(C2FD(cookie), off, whence);
-}
-
-static int
-rumpclose(void *cookie)
-{
-
- return rump_sys_close(C2FD(cookie));
-}
-
-int __sflags(const char *, int *); /* XXX */
-static FILE *
-rumpfopen(const char *path, const char *opts)
-{
- int fd, oflags;
-
- __sflags(opts, &oflags);
- fd = rump_sys_open(path, oflags, 0777);
- if (fd == -1)
- return NULL;
-
- return funopen((void *)(uintptr_t)fd,
- rumpread, rumpwrite, rumpseek, rumpclose);
-}
-
-/*
- * Make sure mountd signal handler is executed from a thread context
- * instead of the signal handler. This avoids the signal handler
- * ruining our kernel context.
- */
-static sem_t exportsem;
-static void
-signal_get_exportlist(int sig)
-{
-
- sem_post(&exportsem);
-}
-
-static void *
-exportlist_thread(void *arg)
-{
-
- for (;;) {
- sem_wait(&exportsem);
- get_exportlist(0);
- }
-
- return NULL;
-}
-
-/*
- * Mountd server for NFS mount protocol as described in:
- * NFS: Network File System Protocol Specification, RFC1094, Appendix A
- * The optional arguments are the exports file name
- * default: _PATH_EXPORTS
- * "-d" to enable debugging
- * and "-n" to allow nonroot mount.
- */
-void *mountd_main(void *);
-void *
-mountd_main(void *arg)
-{
- SVCXPRT *udptransp, *tcptransp;
- struct netconfig *udpconf, *tcpconf;
- int udpsock, tcpsock;
- int xcreated = 0;
- int maxrec = RPC_MAXDATASIZE;
- in_port_t forcedport = 0;
- extern sem_t gensem;
- pthread_t ptdummy;
-
- alloc_fdset();
-
-#if 0
- while ((c = getopt(argc, argv, "dNnrp:" ADDOPTS)) != -1)
- switch (c) {
-#ifdef IPSEC
- case 'P':
- if (ipsecsetup_test(policy = optarg))
- errx(1, "Invalid ipsec policy `%s'", policy);
- break;
-#endif
- case 'p':
- /* A forced port "0" will dynamically allocate a port */
- forcedport = atoi(optarg);
- break;
- case 'd':
- debug = 1;
- break;
- case 'N':
- noprivports = 1;
- break;
- /* Compatibility */
- case 'n':
- case 'r':
- break;
- default:
- fprintf(stderr, "usage: %s [-dNn]"
-#ifdef IPSEC
- " [-P policy]"
-#endif
- " [-p port] [exportsfile]\n", getprogname());
- exit(1);
- };
- argc -= optind;
- argv += optind;
-#endif
-
- sem_init(&exportsem, 0, 0);
- pthread_create(&ptdummy, NULL, exportlist_thread, NULL);
-
- grphead = NULL;
- exphead = NULL;
- mlhead = NULL;
- exname = _PATH_EXPORTS;
- openlog("mountd", LOG_PID | (debug ? LOG_PERROR : 0), LOG_DAEMON);
- (void)signal(SIGSYS, no_nfs);
-
- if (debug)
- (void)fprintf(stderr, "Getting export list.\n");
- get_exportlist(0);
- if (debug)
- (void)fprintf(stderr, "Getting mount list.\n");
- get_mountlist();
- if (debug)
- (void)fprintf(stderr, "Here we go.\n");
- if (debug == 0) {
- daemon(0, 0);
- (void)signal(SIGINT, SIG_IGN);
- (void)signal(SIGQUIT, SIG_IGN);
- }
- (void)signal(SIGHUP, signal_get_exportlist);
- (void)signal(SIGTERM, send_umntall);
- pidfile(NULL);
-
- rpcb_unset(RPCPROG_MNT, RPCMNT_VER1, NULL);
- rpcb_unset(RPCPROG_MNT, RPCMNT_VER3, NULL);
-
- udpsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- tcpsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-
- udpconf = getnetconfigent("udp");
- tcpconf = getnetconfigent("tcp");
-
- rpc_control(RPC_SVC_CONNMAXREC_SET, &maxrec);
-
- if (udpsock != -1 && udpconf != NULL) {
- bind_resv_port(udpsock, AF_INET, forcedport);
-#ifdef IPSEC
- if (policy)
- ipsecsetup(AF_INET, udpsock, policy);
-#endif
- udptransp = svc_dg_create(udpsock, 0, 0);
- if (udptransp != NULL) {
- if (!svc_reg(udptransp, RPCPROG_MNT, RPCMNT_VER1,
- mntsrv, udpconf) ||
- !svc_reg(udptransp, RPCPROG_MNT, RPCMNT_VER3,
- mntsrv, udpconf)) {
- syslog(LOG_WARNING, "can't register UDP service");
- }
- else {
- xcreated++;
- }
- } else {
- syslog(LOG_WARNING, "can't create UDP service");
- }
-
- }
-
- if (tcpsock != -1 && tcpconf != NULL) {
- bind_resv_port(tcpsock, AF_INET, forcedport);
-#ifdef IPSEC
- if (policy)
- ipsecsetup(AF_INET, tcpsock, policy);
-#endif
- listen(tcpsock, SOMAXCONN);
- tcptransp = svc_vc_create(tcpsock, RPC_MAXDATASIZE,
- RPC_MAXDATASIZE);
- if (tcptransp != NULL) {
- if (!svc_reg(tcptransp, RPCPROG_MNT, RPCMNT_VER1,
- mntsrv, tcpconf) ||
- !svc_reg(tcptransp, RPCPROG_MNT, RPCMNT_VER3,
- mntsrv, tcpconf))
- syslog(LOG_WARNING, "can't register TCP service");
- else
- xcreated++;
- } else
- syslog(LOG_WARNING, "can't create TCP service");
-
- }
-
- if (xcreated == 0) {
- syslog(LOG_ERR, "could not create any services");
- exit(1);
- }
-
- sem_post(&gensem);
- svc_run();
- syslog(LOG_ERR, "Mountd died");
- exit(1);
-}
-
-/*
- * The mount rpc service
- */
-void
-mntsrv(rqstp, transp)
- struct svc_req *rqstp;
- SVCXPRT *transp;
-{
- struct exportlist *ep;
- struct dirlist *dp;
- struct fhreturn fhr;
- struct stat stb;
- struct statvfs fsb;
- char host[NI_MAXHOST], numerichost[NI_MAXHOST];
- int lookup_failed = 1;
- struct sockaddr *saddr;
- u_short sport;
- char rpcpath[RPCMNT_PATHLEN + 1], dpath[MAXPATHLEN];
- long bad = EACCES;
- int defset, hostset, ret;
- sigset_t sighup_mask;
- struct sockaddr_in6 *sin6;
- struct sockaddr_in *sin;
- size_t fh_size;
- int error = 0;
-
- (void)sigemptyset(&sighup_mask);
- (void)sigaddset(&sighup_mask, SIGHUP);
- saddr = svc_getrpccaller(transp)->buf;
- switch (saddr->sa_family) {
- case AF_INET6:
- sin6 = (struct sockaddr_in6 *)saddr;
- sport = ntohs(sin6->sin6_port);
- break;
- case AF_INET:
- sin = (struct sockaddr_in *)saddr;
- sport = ntohs(sin->sin_port);
- break;
- default:
- syslog(LOG_ERR, "request from unknown address family");
- return;
- }
- lookup_failed = getnameinfo(saddr, saddr->sa_len, host, sizeof host,
- NULL, 0, 0);
- if (getnameinfo(saddr, saddr->sa_len, numerichost,
- sizeof numerichost, NULL, 0, ninumeric) != 0)
- strlcpy(numerichost, "?", sizeof(numerichost));
- ret = 0;
- switch (rqstp->rq_proc) {
- case NULLPROC:
- if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
- case MOUNTPROC_MNT:
- if (debug)
- fprintf(stderr,
- "got mount request from %s\n", numerichost);
- if (!svc_getargs(transp, xdr_dir, rpcpath)) {
- if (debug)
- fprintf(stderr, "-> garbage args\n");
- svcerr_decode(transp);
- return;
- }
- if (debug)
- fprintf(stderr,
- "-> rpcpath: %s\n", rpcpath);
- /*
- * Get the real pathname and make sure it is a file or
- * directory that exists.
- */
-#if 0
- if (realpath(rpcpath, dpath) == 0 ||
-#endif
- strcpy(dpath, rpcpath);
- if (rump_sys_stat(dpath, &stb) < 0 ||
- (!S_ISDIR(stb.st_mode) && !S_ISREG(stb.st_mode)) ||
- rump_sys_statvfs1(dpath, &fsb, ST_WAIT) < 0) {
- (void)chdir("/"); /* Just in case realpath doesn't */
- if (debug)
- (void)fprintf(stderr, "-> stat failed on %s\n",
- dpath);
- if (!svc_sendreply(transp, (xdrproc_t)xdr_long, (caddr_t) &bad))
- syslog(LOG_ERR, "Can't send reply");
- return;
- }
- if (debug)
- fprintf(stderr,
- "-> dpath: %s\n", dpath);
- /* Check in the exports list */
- (void)sigprocmask(SIG_BLOCK, &sighup_mask, NULL);
- ep = ex_search(&fsb.f_fsidx);
- hostset = defset = 0;
- if (ep && (chk_host(ep->ex_defdir, saddr, &defset,
- &hostset) || ((dp = dirp_search(ep->ex_dirl, dpath)) &&
- chk_host(dp, saddr, &defset, &hostset)) ||
- (defset && scan_tree(ep->ex_defdir, saddr) == 0 &&
- scan_tree(ep->ex_dirl, saddr) == 0))) {
- if ((hostset & DP_HOSTSET) == 0) {
- hostset = defset;
- }
- if (sport >= IPPORT_RESERVED &&
- !(hostset & DP_NORESMNT)) {
- syslog(LOG_NOTICE,
- "Refused mount RPC from host %s port %d",
- numerichost, sport);
- svcerr_weakauth(transp);
- goto out;
- }
- fhr.fhr_flag = hostset;
- fhr.fhr_vers = rqstp->rq_vers;
- /* Get the file handle */
- memset(&fhr.fhr_fh, 0, sizeof(fhr.fhr_fh)); /* for v2 */
- fh_size = sizeof(fhr.fhr_fh);
- error = 0;
- if (rump_sys_getfh(dpath, &fhr.fhr_fh, &fh_size) < 0) {
- bad = error;
- //syslog(LOG_ERR, "Can't get fh for %s %d %d", dpath, error, fh_size);
- if (!svc_sendreply(transp, (xdrproc_t)xdr_long,
- (char *)&bad))
- syslog(LOG_ERR, "Can't send reply");
- goto out;
- }
- if ((fhr.fhr_vers == 1 && fh_size > NFSX_V2FH) ||
- fh_size > NFSX_V3FHMAX) {
- bad = EINVAL; /* XXX */
- if (!svc_sendreply(transp, (xdrproc_t)xdr_long,
- (char *)&bad))
- syslog(LOG_ERR, "Can't send reply");
- goto out;
- }
- fhr.fhr_fhsize = fh_size;
- if (!svc_sendreply(transp, (xdrproc_t)xdr_fhs, (char *) &fhr))
- syslog(LOG_ERR, "Can't send reply");
- if (!lookup_failed)
- add_mlist(host, dpath, hostset);
- else
- add_mlist(numerichost, dpath, hostset);
- if (debug)
- (void)fprintf(stderr, "Mount successful.\n");
- } else {
- if (!svc_sendreply(transp, (xdrproc_t)xdr_long, (caddr_t) &bad))
- syslog(LOG_ERR, "Can't send reply");
- }
-out:
- (void)sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
- return;
- case MOUNTPROC_DUMP:
- if (!svc_sendreply(transp, (xdrproc_t)xdr_mlist, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
- case MOUNTPROC_UMNT:
- if (!svc_getargs(transp, xdr_dir, dpath)) {
- svcerr_decode(transp);
- return;
- }
- if (!lookup_failed)
- ret = del_mlist(host, dpath, saddr);
- ret |= del_mlist(numerichost, dpath, saddr);
- if (ret) {
- svcerr_weakauth(transp);
- return;
- }
- if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
- case MOUNTPROC_UMNTALL:
- if (!lookup_failed)
- ret = del_mlist(host, NULL, saddr);
- ret |= del_mlist(numerichost, NULL, saddr);
- if (ret) {
- svcerr_weakauth(transp);
- return;
- }
- if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
- case MOUNTPROC_EXPORT:
- case MOUNTPROC_EXPORTALL:
- if (!svc_sendreply(transp, (xdrproc_t)xdr_explist, NULL))
- syslog(LOG_ERR, "Can't send reply");
- return;
-
-
- default:
- svcerr_noproc(transp);
- return;
- }
-}
-
-/*
- * Xdr conversion for a dpath string
- */
-static int
-xdr_dir(xdrsp, dirp)
- XDR *xdrsp;
- char *dirp;
-{
-
- return (xdr_string(xdrsp, &dirp, RPCMNT_PATHLEN));
-}
-
-/*
- * Xdr routine to generate file handle reply
- */
-static int
-xdr_fhs(xdrsp, cp)
- XDR *xdrsp;
- caddr_t cp;
-{
- struct fhreturn *fhrp = (struct fhreturn *) cp;
- long ok = 0, len, auth;
-
- if (!xdr_long(xdrsp, &ok))
- return (0);
- switch (fhrp->fhr_vers) {
- case 1:
- return (xdr_opaque(xdrsp, (caddr_t)&fhrp->fhr_fh, NFSX_V2FH));
- case 3:
- len = fhrp->fhr_fhsize;
- if (!xdr_long(xdrsp, &len))
- return (0);
- if (!xdr_opaque(xdrsp, (caddr_t)&fhrp->fhr_fh, len))
- return (0);
- if (fhrp->fhr_flag & DP_KERB)
- auth = RPCAUTH_KERB4;
- else
- auth = RPCAUTH_UNIX;
- len = 1;
- if (!xdr_long(xdrsp, &len))
- return (0);
- return (xdr_long(xdrsp, &auth));
- };
- return (0);
-}
-
-int
-xdr_mlist(xdrsp, cp)
- XDR *xdrsp;
- caddr_t cp;
-{
- struct mountlist *mlp;
- int trueval = 1;
- int falseval = 0;
- char *strp;
-
- mlp = mlhead;
- while (mlp) {
- if (!xdr_bool(xdrsp, &trueval))
- return (0);
- strp = &mlp->ml_host[0];
- if (!xdr_string(xdrsp, &strp, RPCMNT_NAMELEN))
- return (0);
- strp = &mlp->ml_dirp[0];
- if (!xdr_string(xdrsp, &strp, RPCMNT_PATHLEN))
- return (0);
- mlp = mlp->ml_next;
- }
- if (!xdr_bool(xdrsp, &falseval))
- return (0);
- return (1);
-}
-
-/*
- * Xdr conversion for export list
- */
-int
-xdr_explist(xdrsp, cp)
- XDR *xdrsp;
- caddr_t cp;
-{
- struct exportlist *ep;
- int falseval = 0;
- int putdef;
- sigset_t sighup_mask;
-
- (void)sigemptyset(&sighup_mask);
- (void)sigaddset(&sighup_mask, SIGHUP);
- (void)sigprocmask(SIG_BLOCK, &sighup_mask, NULL);
- ep = exphead;
- while (ep) {
- putdef = 0;
- if (put_exlist(ep->ex_dirl, xdrsp, ep->ex_defdir, &putdef))
- goto errout;
- if (ep->ex_defdir && putdef == 0 &&
- put_exlist(ep->ex_defdir, xdrsp, NULL, &putdef))
- goto errout;
- ep = ep->ex_next;
- }
- (void)sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
- if (!xdr_bool(xdrsp, &falseval))
- return (0);
- return (1);
-errout:
- (void)sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL);
- return (0);
-}
-
-/*
- * Called from xdr_explist() to traverse the tree and export the
- * directory paths. Assumes SIGHUP has already been masked.
- */
-int
-put_exlist(dp, xdrsp, adp, putdefp)
- struct dirlist *dp;
- XDR *xdrsp;
- struct dirlist *adp;
- int *putdefp;
-{
- struct grouplist *grp;
- struct hostlist *hp;
- int trueval = 1;
- int falseval = 0;
- int gotalldir = 0;
- char *strp;
-
- if (dp) {
- if (put_exlist(dp->dp_left, xdrsp, adp, putdefp))
- return (1);
- if (!xdr_bool(xdrsp, &trueval))
- return (1);
- strp = dp->dp_dirp;
- if (!xdr_string(xdrsp, &strp, RPCMNT_PATHLEN))
- return (1);
- if (adp && !strcmp(dp->dp_dirp, adp->dp_dirp)) {
- gotalldir = 1;
- *putdefp = 1;
- }
- if ((dp->dp_flag & DP_DEFSET) == 0 &&
- (gotalldir == 0 || (adp->dp_flag & DP_DEFSET) == 0)) {
- hp = dp->dp_hosts;
- while (hp) {
- grp = hp->ht_grp;
- if (grp->gr_type == GT_HOST) {
- if (!xdr_bool(xdrsp, &trueval))
- return (1);
- strp =
- grp->gr_ptr.gt_addrinfo->ai_canonname;
- if (!xdr_string(xdrsp, &strp,
- RPCMNT_NAMELEN))
- return (1);
- } else if (grp->gr_type == GT_NET) {
- if (!xdr_bool(xdrsp, &trueval))
- return (1);
- strp = grp->gr_ptr.gt_net.nt_name;
- if (!xdr_string(xdrsp, &strp,
- RPCMNT_NAMELEN))
- return (1);
- }
- hp = hp->ht_next;
- if (gotalldir && hp == NULL) {
- hp = adp->dp_hosts;
- gotalldir = 0;
- }
- }
- }
- if (!xdr_bool(xdrsp, &falseval))
- return (1);
- if (put_exlist(dp->dp_right, xdrsp, adp, putdefp))
- return (1);
- }
- return (0);
-}
-
-static int
-parse_host_netgroup(line, lineno, ep, tgrp, cp, has_host, grp)
- const char *line;
- size_t lineno;
- struct exportlist *ep;
- struct grouplist *tgrp;
- char *cp;
- int *has_host;
- struct grouplist **grp;
-{
- const char *hst, *usr, *dom;
- int netgrp;
-
- if (ep == NULL) {
- syslog(LOG_ERR, "\"%s\", line %ld: No current export",
- line, (unsigned long)lineno);
- return 0;
- }
- setnetgrent(cp);
- netgrp = getnetgrent(&hst, &usr, &dom);
- do {
- if (*has_host) {
- (*grp)->gr_next = get_grp();
- *grp = (*grp)->gr_next;
- }
- if (netgrp) {
- if (hst == NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: No host in netgroup %s",
- line, (unsigned long)lineno, cp);
- goto bad;
- }
- if (get_host(line, lineno, hst, *grp))
- goto bad;
- } else if (get_host(line, lineno, cp, *grp))
- goto bad;
- *has_host = TRUE;
- } while (netgrp && getnetgrent(&hst, &usr, &dom));
-
- endnetgrent();
- return 1;
-bad:
- endnetgrent();
- return 0;
-
-}
-
-static int
-parse_directory(line, lineno, tgrp, got_nondir, cp, ep, fsp)
- const char *line;
- size_t lineno;
- struct grouplist *tgrp;
- int got_nondir;
- char *cp;
- struct exportlist **ep;
- struct statvfs *fsp;
-{
- int error = 0;
-
- if (!check_dirpath(line, lineno, cp))
- return 0;
-
- if (rump_sys_statvfs1(cp, fsp, ST_WAIT) == -1) {
- syslog(LOG_ERR, "\"%s\", line %ld: statvfs for `%s' failed: %m %d",
- line, (unsigned long)lineno, cp, error);
- return 0;
- }
-
- if (got_nondir) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Directories must precede files",
- line, (unsigned long)lineno);
- return 0;
- }
- if (*ep) {
- if ((*ep)->ex_fs.__fsid_val[0] != fsp->f_fsidx.__fsid_val[0] ||
- (*ep)->ex_fs.__fsid_val[1] != fsp->f_fsidx.__fsid_val[1]) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: filesystem ids disagree",
- line, (unsigned long)lineno);
- return 0;
- }
- } else {
- /*
- * See if this directory is already
- * in the list.
- */
- *ep = ex_search(&fsp->f_fsidx);
- if (*ep == NULL) {
- *ep = get_exp();
- (*ep)->ex_fs = fsp->f_fsidx;
- (*ep)->ex_fsdir = estrdup(fsp->f_mntonname);
- if (debug)
- (void)fprintf(stderr,
- "Making new ep fs=0x%x,0x%x\n",
- fsp->f_fsidx.__fsid_val[0], fsp->f_fsidx.__fsid_val[1]);
- } else {
- if (debug)
- (void)fprintf(stderr,
- "Found ep fs=0x%x,0x%x\n",
- fsp->f_fsidx.__fsid_val[0], fsp->f_fsidx.__fsid_val[1]);
- }
- }
-
- return 1;
-}
-
-
-/*
- * Get the export list
- */
-/* ARGSUSED */
-void
-get_exportlist(n)
- int n;
-{
- struct exportlist *ep, *ep2;
- struct grouplist *grp, *tgrp;
- struct exportlist **epp;
- struct dirlist *dirhead;
- struct statvfs fsb, *fsp;
- struct addrinfo *ai;
- struct uucred anon;
- char *cp, *endcp, *dirp, savedc;
- int has_host, exflags, got_nondir, dirplen, num, i;
- FILE *exp_file;
- char *line;
- size_t lineno = 0, len;
-
-
- /*
- * First, get rid of the old list
- */
- ep = exphead;
- while (ep) {
- ep2 = ep;
- ep = ep->ex_next;
- free_exp(ep2);
- }
- exphead = NULL;
-
- dirp = NULL;
- dirplen = 0;
- grp = grphead;
- while (grp) {
- tgrp = grp;
- grp = grp->gr_next;
- free_grp(tgrp);
- }
- grphead = NULL;
-
- /*
- * And delete exports that are in the kernel for all local
- * file systems.
- */
- num = getmntinfo(&fsp, MNT_NOWAIT);
- for (i = 0; i < num; i++) {
- struct mountd_exports_list mel;
-
- /* Delete all entries from the export list. */
- mel.mel_path = fsp->f_mntonname;
- mel.mel_nexports = 0;
- if (rump_sys_nfssvc(NFSSVC_SETEXPORTSLIST, &mel) == -1 &&
- errno != EOPNOTSUPP)
- syslog(LOG_ERR, "Can't delete exports for %s (%m)",
- fsp->f_mntonname);
-
- fsp++;
- }
-
- /*
- * Read in the exports file and build the list, calling
- * mount() as we go along to push the export rules into the kernel.
- */
- exname = _PATH_EXPORTS;
- if ((exp_file = rumpfopen(exname, "r")) == NULL) {
- /*
- * Don't exit here; we can still reload the config
- * after a SIGHUP.
- */
- if (debug)
- (void)fprintf(stderr, "Can't open %s: %s\n", exname,
- strerror(errno));
- return;
- }
- dirhead = NULL;
- while ((line = fparseln(exp_file, &len, &lineno, NULL, 0)) != NULL) {
- if (debug)
- (void)fprintf(stderr, "Got line %s\n", line);
- cp = line;
- nextfield(&cp, &endcp);
- if (cp == endcp)
- goto nextline; /* skip empty line */
- /*
- * Set defaults.
- */
- has_host = FALSE;
- anon = def_anon;
- exflags = MNT_EXPORTED;
- got_nondir = 0;
- opt_flags = 0;
- ep = NULL;
-
- if (noprivports) {
- opt_flags |= OP_NORESMNT | OP_NORESPORT;
- exflags |= MNT_EXNORESPORT;
- }
-
- /*
- * Create new exports list entry
- */
- len = endcp - cp;
- tgrp = grp = get_grp();
- while (len > 0) {
- if (len > RPCMNT_NAMELEN) {
- *endcp = '\0';
- syslog(LOG_ERR,
- "\"%s\", line %ld: name `%s' is too long",
- line, (unsigned long)lineno, cp);
- goto badline;
- }
- switch (*cp) {
- case '-':
- /*
- * Option
- */
- if (ep == NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: No current export list",
- line, (unsigned long)lineno);
- goto badline;
- }
- if (debug)
- (void)fprintf(stderr, "doing opt %s\n",
- cp);
- got_nondir = 1;
- if (do_opt(line, lineno, &cp, &endcp, ep, grp,
- &has_host, &exflags, &anon))
- goto badline;
- break;
-
- case '/':
- /*
- * Directory
- */
- savedc = *endcp;
- *endcp = '\0';
-
- if (!parse_directory(line, lineno, tgrp,
- got_nondir, cp, &ep, &fsb))
- goto badline;
- /*
- * Add dirpath to export mount point.
- */
- dirp = add_expdir(&dirhead, cp, len);
- dirplen = len;
-
- *endcp = savedc;
- break;
-
- default:
- /*
- * Host or netgroup.
- */
- savedc = *endcp;
- *endcp = '\0';
-
- if (!parse_host_netgroup(line, lineno, ep,
- tgrp, cp, &has_host, &grp))
- goto badline;
-
- got_nondir = 1;
-
- *endcp = savedc;
- break;
- }
-
- cp = endcp;
- nextfield(&cp, &endcp);
- len = endcp - cp;
- }
- if (check_options(line, lineno, dirhead))
- goto badline;
-
- if (!has_host) {
- grp->gr_type = GT_HOST;
- if (debug)
- (void)fprintf(stderr,
- "Adding a default entry\n");
- /* add a default group and make the grp list NULL */
- ai = emalloc(sizeof(struct addrinfo));
- ai->ai_flags = 0;
- ai->ai_family = AF_INET; /* XXXX */
- ai->ai_socktype = SOCK_DGRAM;
- /* setting the length to 0 will match anything */
- ai->ai_addrlen = 0;
- ai->ai_flags = AI_CANONNAME;
- ai->ai_canonname = estrdup("Default");
- ai->ai_addr = NULL;
- ai->ai_next = NULL;
- grp->gr_ptr.gt_addrinfo = ai;
-
- } else if ((opt_flags & OP_NET) && tgrp->gr_next) {
- /*
- * Don't allow a network export coincide with a list of
- * host(s) on the same line.
- */
- syslog(LOG_ERR,
- "\"%s\", line %ld: Mixed exporting of networks and hosts is disallowed",
- line, (unsigned long)lineno);
- goto badline;
- }
- /*
- * Loop through hosts, pushing the exports into the kernel.
- * After loop, tgrp points to the start of the list and
- * grp points to the last entry in the list.
- */
- grp = tgrp;
- do {
- if (do_nfssvc(line, lineno, ep, grp, exflags, &anon,
- dirp, dirplen, &fsb))
- goto badline;
- } while (grp->gr_next && (grp = grp->gr_next));
-
- /*
- * Success. Update the data structures.
- */
- if (has_host) {
- hang_dirp(dirhead, tgrp, ep, opt_flags);
- grp->gr_next = grphead;
- grphead = tgrp;
- } else {
- hang_dirp(dirhead, NULL, ep, opt_flags);
- free_grp(tgrp);
- }
- tgrp = NULL;
- dirhead = NULL;
- if ((ep->ex_flag & EX_LINKED) == 0) {
- ep2 = exphead;
- epp = &exphead;
-
- /*
- * Insert in the list in alphabetical order.
- */
- while (ep2 && strcmp(ep2->ex_fsdir, ep->ex_fsdir) < 0) {
- epp = &ep2->ex_next;
- ep2 = ep2->ex_next;
- }
- if (ep2)
- ep->ex_next = ep2;
- *epp = ep;
- ep->ex_flag |= EX_LINKED;
- }
- goto nextline;
-badline:
- free_exp_grp(ep, grp);
-nextline:
- if (dirhead) {
- free_dir(dirhead);
- dirhead = NULL;
- }
- free(line);
- }
- (void)fclose(exp_file);
-}
-
-/*
- * Allocate an export list element
- */
-static struct exportlist *
-get_exp()
-{
- struct exportlist *ep;
-
- ep = emalloc(sizeof(struct exportlist));
- (void)memset(ep, 0, sizeof(struct exportlist));
- return (ep);
-}
-
-/*
- * Allocate a group list element
- */
-static struct grouplist *
-get_grp()
-{
- struct grouplist *gp;
-
- gp = emalloc(sizeof(struct grouplist));
- (void)memset(gp, 0, sizeof(struct grouplist));
- return (gp);
-}
-
-/*
- * Clean up upon an error in get_exportlist().
- */
-static void
-free_exp_grp(ep, grp)
- struct exportlist *ep;
- struct grouplist *grp;
-{
- struct grouplist *tgrp;
-
- if (ep && (ep->ex_flag & EX_LINKED) == 0)
- free_exp(ep);
- while (grp) {
- tgrp = grp;
- grp = grp->gr_next;
- free_grp(tgrp);
- }
-}
-
-/*
- * Search the export list for a matching fs.
- */
-static struct exportlist *
-ex_search(fsid)
- fsid_t *fsid;
-{
- struct exportlist *ep;
-
- ep = exphead;
- return ep;
- while (ep) {
- if (ep->ex_fs.__fsid_val[0] == fsid->__fsid_val[0] &&
- ep->ex_fs.__fsid_val[1] == fsid->__fsid_val[1])
- return (ep);
- ep = ep->ex_next;
- }
- return (ep);
-}
-
-/*
- * Add a directory path to the list.
- */
-static char *
-add_expdir(dpp, cp, len)
- struct dirlist **dpp;
- char *cp;
- int len;
-{
- struct dirlist *dp;
-
- dp = emalloc(sizeof(struct dirlist) + len);
- dp->dp_left = *dpp;
- dp->dp_right = NULL;
- dp->dp_flag = 0;
- dp->dp_hosts = NULL;
- (void)strcpy(dp->dp_dirp, cp);
- *dpp = dp;
- return (dp->dp_dirp);
-}
-
-/*
- * Hang the dir list element off the dirpath binary tree as required
- * and update the entry for host.
- */
-void
-hang_dirp(dp, grp, ep, flags)
- struct dirlist *dp;
- struct grouplist *grp;
- struct exportlist *ep;
- int flags;
-{
- struct hostlist *hp;
- struct dirlist *dp2;
-
- if (flags & OP_ALLDIRS) {
- if (ep->ex_defdir)
- free(dp);
- else
- ep->ex_defdir = dp;
- if (grp == NULL) {
- ep->ex_defdir->dp_flag |= DP_DEFSET;
- if (flags & OP_KERB)
- ep->ex_defdir->dp_flag |= DP_KERB;
- if (flags & OP_NORESMNT)
- ep->ex_defdir->dp_flag |= DP_NORESMNT;
- } else
- while (grp) {
- hp = get_ht();
- if (flags & OP_KERB)
- hp->ht_flag |= DP_KERB;
- if (flags & OP_NORESMNT)
- hp->ht_flag |= DP_NORESMNT;
- hp->ht_grp = grp;
- hp->ht_next = ep->ex_defdir->dp_hosts;
- ep->ex_defdir->dp_hosts = hp;
- grp = grp->gr_next;
- }
- } else {
-
- /*
- * Loop through the directories adding them to the tree.
- */
- while (dp) {
- dp2 = dp->dp_left;
- add_dlist(&ep->ex_dirl, dp, grp, flags);
- dp = dp2;
- }
- }
-}
-
-/*
- * Traverse the binary tree either updating a node that is already there
- * for the new directory or adding the new node.
- */
-static void
-add_dlist(dpp, newdp, grp, flags)
- struct dirlist **dpp;
- struct dirlist *newdp;
- struct grouplist *grp;
- int flags;
-{
- struct dirlist *dp;
- struct hostlist *hp;
- int cmp;
-
- dp = *dpp;
- if (dp) {
- cmp = strcmp(dp->dp_dirp, newdp->dp_dirp);
- if (cmp > 0) {
- add_dlist(&dp->dp_left, newdp, grp, flags);
- return;
- } else if (cmp < 0) {
- add_dlist(&dp->dp_right, newdp, grp, flags);
- return;
- } else
- free(newdp);
- } else {
- dp = newdp;
- dp->dp_left = NULL;
- *dpp = dp;
- }
- if (grp) {
-
- /*
- * Hang all of the host(s) off of the directory point.
- */
- do {
- hp = get_ht();
- if (flags & OP_KERB)
- hp->ht_flag |= DP_KERB;
- if (flags & OP_NORESMNT)
- hp->ht_flag |= DP_NORESMNT;
- hp->ht_grp = grp;
- hp->ht_next = dp->dp_hosts;
- dp->dp_hosts = hp;
- grp = grp->gr_next;
- } while (grp);
- } else {
- dp->dp_flag |= DP_DEFSET;
- if (flags & OP_KERB)
- dp->dp_flag |= DP_KERB;
- if (flags & OP_NORESMNT)
- dp->dp_flag |= DP_NORESMNT;
- }
-}
-
-/*
- * Search for a dirpath on the export point.
- */
-static struct dirlist *
-dirp_search(dp, dirp)
- struct dirlist *dp;
- char *dirp;
-{
- int cmp;
-
- if (dp) {
- cmp = strcmp(dp->dp_dirp, dirp);
- if (cmp > 0)
- return (dirp_search(dp->dp_left, dirp));
- else if (cmp < 0)
- return (dirp_search(dp->dp_right, dirp));
- else
- return (dp);
- }
- return (dp);
-}
-
-/*
- * Some helper functions for netmasks. They all assume masks in network
- * order (big endian).
- */
-static int
-bitcmp(void *dst, void *src, int bitlen)
-{
- int i;
- u_int8_t *p1 = dst, *p2 = src;
- u_int8_t bitmask;
- int bytelen, bitsleft;
-
- bytelen = bitlen / 8;
- bitsleft = bitlen % 8;
-
- if (debug) {
- printf("comparing:\n");
- for (i = 0; i < (bitsleft ? bytelen + 1 : bytelen); i++)
- printf("%02x", p1[i]);
- printf("\n");
- for (i = 0; i < (bitsleft ? bytelen + 1 : bytelen); i++)
- printf("%02x", p2[i]);
- printf("\n");
- }
-
- for (i = 0; i < bytelen; i++) {
- if (*p1 != *p2)
- return 1;
- p1++;
- p2++;
- }
-
- for (i = 0; i < bitsleft; i++) {
- bitmask = 1 << (7 - i);
- if ((*p1 & bitmask) != (*p2 & bitmask))
- return 1;
- }
-
- return 0;
-}
-
-static int
-netpartcmp(struct sockaddr *s1, struct sockaddr *s2, int bitlen)
-{
- void *src, *dst;
-
- if (s1->sa_family != s2->sa_family)
- return 1;
-
- switch (s1->sa_family) {
- case AF_INET:
- src = &((struct sockaddr_in *)s1)->sin_addr;
- dst = &((struct sockaddr_in *)s2)->sin_addr;
- if (bitlen > sizeof(((struct sockaddr_in *)s1)->sin_addr) * 8)
- return 1;
- break;
- case AF_INET6:
- src = &((struct sockaddr_in6 *)s1)->sin6_addr;
- dst = &((struct sockaddr_in6 *)s2)->sin6_addr;
- if (((struct sockaddr_in6 *)s1)->sin6_scope_id !=
- ((struct sockaddr_in6 *)s2)->sin6_scope_id)
- return 1;
- if (bitlen > sizeof(((struct sockaddr_in6 *)s1)->sin6_addr) * 8)
- return 1;
- break;
- default:
- return 1;
- }
-
- return bitcmp(src, dst, bitlen);
-}
-
-static int
-allones(struct sockaddr_storage *ssp, int bitlen)
-{
- u_int8_t *p;
- int bytelen, bitsleft, i;
- int zerolen;
-
- switch (ssp->ss_family) {
- case AF_INET:
- p = (u_int8_t *)&((struct sockaddr_in *)ssp)->sin_addr;
- zerolen = sizeof (((struct sockaddr_in *)ssp)->sin_addr);
- break;
- case AF_INET6:
- p = (u_int8_t *)&((struct sockaddr_in6 *)ssp)->sin6_addr;
- zerolen = sizeof (((struct sockaddr_in6 *)ssp)->sin6_addr);
- break;
- default:
- return -1;
- }
-
- memset(p, 0, zerolen);
-
- bytelen = bitlen / 8;
- bitsleft = bitlen % 8;
-
- if (bytelen > zerolen)
- return -1;
-
- for (i = 0; i < bytelen; i++)
- *p++ = 0xff;
-
- for (i = 0; i < bitsleft; i++)
- *p |= 1 << (7 - i);
-
- return 0;
-}
-
-static int
-countones(struct sockaddr *sa)
-{
- void *mask;
- int i, bits = 0, bytelen;
- u_int8_t *p;
-
- switch (sa->sa_family) {
- case AF_INET:
- mask = (u_int8_t *)&((struct sockaddr_in *)sa)->sin_addr;
- bytelen = 4;
- break;
- case AF_INET6:
- mask = (u_int8_t *)&((struct sockaddr_in6 *)sa)->sin6_addr;
- bytelen = 16;
- break;
- default:
- return 0;
- }
-
- p = mask;
-
- for (i = 0; i < bytelen; i++, p++) {
- if (*p != 0xff) {
- for (bits = 0; bits < 8; bits++) {
- if (!(*p & (1 << (7 - bits))))
- break;
- }
- break;
- }
- }
-
- return (i * 8 + bits);
-}
-
-static int
-sacmp(struct sockaddr *sa1, struct sockaddr *sa2)
-{
- void *p1, *p2;
- int len;
-
- if (sa1->sa_family != sa2->sa_family)
- return 1;
-
- switch (sa1->sa_family) {
- case AF_INET:
- p1 = &((struct sockaddr_in *)sa1)->sin_addr;
- p2 = &((struct sockaddr_in *)sa2)->sin_addr;
- len = 4;
- break;
- case AF_INET6:
- p1 = &((struct sockaddr_in6 *)sa1)->sin6_addr;
- p2 = &((struct sockaddr_in6 *)sa2)->sin6_addr;
- len = 16;
- if (((struct sockaddr_in6 *)sa1)->sin6_scope_id !=
- ((struct sockaddr_in6 *)sa2)->sin6_scope_id)
- return 1;
- break;
- default:
- return 1;
- }
-
- return memcmp(p1, p2, len);
-}
-
-/*
- * Scan for a host match in a directory tree.
- */
-static int
-chk_host(dp, saddr, defsetp, hostsetp)
- struct dirlist *dp;
- struct sockaddr *saddr;
- int *defsetp;
- int *hostsetp;
-{
- struct hostlist *hp;
- struct grouplist *grp;
- struct addrinfo *ai;
-
- if (dp) {
- if (dp->dp_flag & DP_DEFSET)
- *defsetp = dp->dp_flag;
- hp = dp->dp_hosts;
- while (hp) {
- grp = hp->ht_grp;
- switch (grp->gr_type) {
- case GT_HOST:
- ai = grp->gr_ptr.gt_addrinfo;
- for (; ai; ai = ai->ai_next) {
- if (!sacmp(ai->ai_addr, saddr)) {
- *hostsetp =
- (hp->ht_flag | DP_HOSTSET);
- return (1);
- }
- }
- break;
- case GT_NET:
- if (!netpartcmp(saddr,
- (struct sockaddr *)
- &grp->gr_ptr.gt_net.nt_net,
- grp->gr_ptr.gt_net.nt_len)) {
- *hostsetp = (hp->ht_flag | DP_HOSTSET);
- return (1);
- }
- break;
- };
- hp = hp->ht_next;
- }
- }
- return (0);
-}
-
-/*
- * Scan tree for a host that matches the address.
- */
-static int
-scan_tree(dp, saddr)
- struct dirlist *dp;
- struct sockaddr *saddr;
-{
- int defset, hostset;
-
- if (dp) {
- if (scan_tree(dp->dp_left, saddr))
- return (1);
- if (chk_host(dp, saddr, &defset, &hostset))
- return (1);
- if (scan_tree(dp->dp_right, saddr))
- return (1);
- }
- return (0);
-}
-
-/*
- * Traverse the dirlist tree and free it up.
- */
-static void
-free_dir(dp)
- struct dirlist *dp;
-{
-
- if (dp) {
- free_dir(dp->dp_left);
- free_dir(dp->dp_right);
- free_host(dp->dp_hosts);
- free(dp);
- }
-}
-
-/*
- * Parse the option string and update fields.
- * Option arguments may either be -<option>=<value> or
- * -<option> <value>
- */
-static int
-do_opt(line, lineno, cpp, endcpp, ep, grp, has_hostp, exflagsp, cr)
- const char *line;
- size_t lineno;
- char **cpp, **endcpp;
- struct exportlist *ep;
- struct grouplist *grp;
- int *has_hostp;
- int *exflagsp;
- struct uucred *cr;
-{
- char *cpoptarg, *cpoptend;
- char *cp, *cpopt, savedc, savedc2;
- char *endcp = NULL; /* XXX: GCC */
- int allflag, usedarg;
-
- cpopt = *cpp;
- cpopt++;
- cp = *endcpp;
- savedc = *cp;
- *cp = '\0';
- while (cpopt && *cpopt) {
- allflag = 1;
- usedarg = -2;
- savedc2 = '\0';
- if ((cpoptend = strchr(cpopt, ',')) != NULL) {
- *cpoptend++ = '\0';
- if ((cpoptarg = strchr(cpopt, '=')) != NULL)
- *cpoptarg++ = '\0';
- } else {
- if ((cpoptarg = strchr(cpopt, '=')) != NULL)
- *cpoptarg++ = '\0';
- else {
- *cp = savedc;
- nextfield(&cp, &endcp);
- **endcpp = '\0';
- if (endcp > cp && *cp != '-') {
- cpoptarg = cp;
- savedc2 = *endcp;
- *endcp = '\0';
- usedarg = 0;
- }
- }
- }
- if (!strcmp(cpopt, "ro") || !strcmp(cpopt, "o")) {
- *exflagsp |= MNT_EXRDONLY;
- } else if (cpoptarg && (!strcmp(cpopt, "maproot") ||
- !(allflag = strcmp(cpopt, "mapall")) ||
- !strcmp(cpopt, "root") || !strcmp(cpopt, "r"))) {
- usedarg++;
- parsecred(cpoptarg, cr);
- if (allflag == 0) {
- *exflagsp |= MNT_EXPORTANON;
- opt_flags |= OP_MAPALL;
- } else
- opt_flags |= OP_MAPROOT;
- } else if (!strcmp(cpopt, "kerb") || !strcmp(cpopt, "k")) {
- *exflagsp |= MNT_EXKERB;
- opt_flags |= OP_KERB;
- } else if (cpoptarg && (!strcmp(cpopt, "mask") ||
- !strcmp(cpopt, "m"))) {
- if (get_net(cpoptarg, &grp->gr_ptr.gt_net, 1)) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad mask: %s",
- line, (unsigned long)lineno, cpoptarg);
- return (1);
- }
- usedarg++;
- opt_flags |= OP_MASK;
- } else if (cpoptarg && (!strcmp(cpopt, "network") ||
- !strcmp(cpopt, "n"))) {
- if (strchr(cpoptarg, '/') != NULL) {
- if (debug)
- fprintf(stderr, "setting OP_MASKLEN\n");
- opt_flags |= OP_MASKLEN;
- }
- if (grp->gr_type != GT_NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Network/host conflict",
- line, (unsigned long)lineno);
- return (1);
- } else if (get_net(cpoptarg, &grp->gr_ptr.gt_net, 0)) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad net: %s",
- line, (unsigned long)lineno, cpoptarg);
- return (1);
- }
- grp->gr_type = GT_NET;
- *has_hostp = 1;
- usedarg++;
- opt_flags |= OP_NET;
- } else if (!strcmp(cpopt, "alldirs")) {
- opt_flags |= OP_ALLDIRS;
- } else if (!strcmp(cpopt, "noresvmnt")) {
- opt_flags |= OP_NORESMNT;
- } else if (!strcmp(cpopt, "noresvport")) {
- opt_flags |= OP_NORESPORT;
- *exflagsp |= MNT_EXNORESPORT;
- } else if (!strcmp(cpopt, "public")) {
- *exflagsp |= (MNT_EXNORESPORT | MNT_EXPUBLIC);
- opt_flags |= OP_NORESPORT;
- } else if (!strcmp(cpopt, "webnfs")) {
- *exflagsp |= (MNT_EXNORESPORT | MNT_EXPUBLIC |
- MNT_EXRDONLY | MNT_EXPORTANON);
- opt_flags |= (OP_MAPALL | OP_NORESPORT);
- } else if (cpoptarg && !strcmp(cpopt, "index")) {
- ep->ex_indexfile = strdup(cpoptarg);
- } else {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad opt %s",
- line, (unsigned long)lineno, cpopt);
- return (1);
- }
- if (usedarg >= 0) {
- *endcp = savedc2;
- **endcpp = savedc;
- if (usedarg > 0) {
- *cpp = cp;
- *endcpp = endcp;
- }
- return (0);
- }
- cpopt = cpoptend;
- }
- **endcpp = savedc;
- return (0);
-}
-
-/*
- * Translate a character string to the corresponding list of network
- * addresses for a hostname.
- */
-static int
-get_host(line, lineno, cp, grp)
- const char *line;
- size_t lineno;
- const char *cp;
- struct grouplist *grp;
-{
- struct addrinfo *ai, hints;
- int ecode;
- char host[NI_MAXHOST];
-
- if (grp->gr_type != GT_NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad netgroup type for ip host %s",
- line, (unsigned long)lineno, cp);
- return (1);
- }
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_CANONNAME;
- hints.ai_protocol = IPPROTO_UDP;
- ecode = getaddrinfo(cp, NULL, &hints, &ai);
- if (ecode != 0) {
- syslog(LOG_ERR, "\"%s\", line %ld: can't get address info for "
- "host %s",
- line, (long)lineno, cp);
- return 1;
- }
- grp->gr_type = GT_HOST;
- grp->gr_ptr.gt_addrinfo = ai;
- while (ai != NULL) {
- if (ai->ai_canonname == NULL) {
- if (getnameinfo(ai->ai_addr, ai->ai_addrlen, host,
- sizeof host, NULL, 0, ninumeric) != 0)
- strlcpy(host, "?", sizeof(host));
- ai->ai_canonname = estrdup(host);
- ai->ai_flags |= AI_CANONNAME;
- } else
- ai->ai_flags &= ~AI_CANONNAME;
- if (debug)
- (void)fprintf(stderr, "got host %s\n", ai->ai_canonname);
- ai = ai->ai_next;
- }
- return (0);
-}
-
-/*
- * Free up an exports list component
- */
-static void
-free_exp(ep)
- struct exportlist *ep;
-{
-
- if (ep->ex_defdir) {
- free_host(ep->ex_defdir->dp_hosts);
- free(ep->ex_defdir);
- }
- if (ep->ex_fsdir)
- free(ep->ex_fsdir);
- if (ep->ex_indexfile)
- free(ep->ex_indexfile);
- free_dir(ep->ex_dirl);
- free(ep);
-}
-
-/*
- * Free hosts.
- */
-static void
-free_host(hp)
- struct hostlist *hp;
-{
- struct hostlist *hp2;
-
- while (hp) {
- hp2 = hp;
- hp = hp->ht_next;
- free(hp2);
- }
-}
-
-static struct hostlist *
-get_ht()
-{
- struct hostlist *hp;
-
- hp = emalloc(sizeof(struct hostlist));
- hp->ht_next = NULL;
- hp->ht_flag = 0;
- return (hp);
-}
-
-/*
- * Do the nfssvc syscall to push the export info into the kernel.
- */
-static int
-do_nfssvc(line, lineno, ep, grp, exflags, anoncrp, dirp, dirplen, fsb)
- const char *line;
- size_t lineno;
- struct exportlist *ep;
- struct grouplist *grp;
- int exflags;
- struct uucred *anoncrp;
- char *dirp;
- int dirplen;
- struct statvfs *fsb;
-{
- struct sockaddr *addrp;
- struct sockaddr_storage ss;
- struct addrinfo *ai;
- int addrlen;
- int done;
- struct export_args export;
-
- export.ex_flags = exflags;
- export.ex_anon = *anoncrp;
- export.ex_indexfile = ep->ex_indexfile;
- if (grp->gr_type == GT_HOST) {
- ai = grp->gr_ptr.gt_addrinfo;
- addrp = ai->ai_addr;
- addrlen = ai->ai_addrlen;
- } else {
- addrp = NULL;
- ai = NULL; /* XXXGCC -Wuninitialized */
- addrlen = 0; /* XXXGCC -Wuninitialized */
- }
- done = FALSE;
- while (!done) {
- struct mountd_exports_list mel;
-
- switch (grp->gr_type) {
- case GT_HOST:
- if (addrp != NULL && addrp->sa_family == AF_INET6 &&
- have_v6 == 0)
- goto skip;
- export.ex_addr = addrp;
- export.ex_addrlen = addrlen;
- export.ex_masklen = 0;
- break;
- case GT_NET:
- export.ex_addr = (struct sockaddr *)
- &grp->gr_ptr.gt_net.nt_net;
- if (export.ex_addr->sa_family == AF_INET6 &&
- have_v6 == 0)
- goto skip;
- export.ex_addrlen = export.ex_addr->sa_len;
- memset(&ss, 0, sizeof ss);
- ss.ss_family = export.ex_addr->sa_family;
- ss.ss_len = export.ex_addr->sa_len;
- if (allones(&ss, grp->gr_ptr.gt_net.nt_len) != 0) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Bad network flag",
- line, (unsigned long)lineno);
- return (1);
- }
- export.ex_mask = (struct sockaddr *)&ss;
- export.ex_masklen = ss.ss_len;
- break;
- default:
- syslog(LOG_ERR, "\"%s\", line %ld: Bad netgroup type",
- line, (unsigned long)lineno);
- return (1);
- };
-
- /*
- * XXX:
- * Maybe I should just use the fsb->f_mntonname path?
- */
-
- mel.mel_path = dirp;
- mel.mel_nexports = 1;
- mel.mel_exports = &export;
-
- if (rump_sys_nfssvc(NFSSVC_SETEXPORTSLIST, &mel) != 0) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: Can't change attributes for %s to %s: %m %d",
- line, (unsigned long)lineno,
- dirp, (grp->gr_type == GT_HOST) ?
- grp->gr_ptr.gt_addrinfo->ai_canonname :
- (grp->gr_type == GT_NET) ?
- grp->gr_ptr.gt_net.nt_name :
- "Unknown", errno);
- return (1);
- }
-skip:
- if (addrp) {
- ai = ai->ai_next;
- if (ai == NULL)
- done = TRUE;
- else {
- addrp = ai->ai_addr;
- addrlen = ai->ai_addrlen;
- }
- } else
- done = TRUE;
- }
- return (0);
-}
-
-/*
- * Translate a net address.
- */
-static int
-get_net(cp, net, maskflg)
- char *cp;
- struct netmsk *net;
- int maskflg;
-{
- struct netent *np;
- char *thename, *p, *prefp;
- struct sockaddr_in sin, *sinp;
- struct sockaddr *sa;
- struct addrinfo hints, *ai = NULL;
- char netname[NI_MAXHOST];
- long preflen;
- int ecode;
-
- (void)memset(&sin, 0, sizeof(sin));
- if ((opt_flags & OP_MASKLEN) && !maskflg) {
- p = strchr(cp, '/');
- *p = '\0';
- prefp = p + 1;
- } else {
- p = NULL; /* XXXGCC -Wuninitialized */
- prefp = NULL; /* XXXGCC -Wuninitialized */
- }
-
- if ((np = getnetbyname(cp)) != NULL) {
- sin.sin_family = AF_INET;
- sin.sin_len = sizeof sin;
- sin.sin_addr = inet_makeaddr(np->n_net, 0);
- sa = (struct sockaddr *)&sin;
- } else if (isdigit((unsigned char)*cp)) {
- memset(&hints, 0, sizeof hints);
- hints.ai_family = AF_UNSPEC;
- hints.ai_flags = AI_NUMERICHOST;
- if (getaddrinfo(cp, NULL, &hints, &ai) != 0) {
- /*
- * If getaddrinfo() failed, try the inet4 network
- * notation with less than 3 dots.
- */
- sin.sin_family = AF_INET;
- sin.sin_len = sizeof sin;
- sin.sin_addr = inet_makeaddr(inet_network(cp),0);
- if (debug)
- fprintf(stderr, "get_net: v4 addr %x\n",
- sin.sin_addr.s_addr);
- sa = (struct sockaddr *)&sin;
- } else
- sa = ai->ai_addr;
- } else if (isxdigit((unsigned char)*cp) || *cp == ':') {
- memset(&hints, 0, sizeof hints);
- hints.ai_family = AF_UNSPEC;
- hints.ai_flags = AI_NUMERICHOST;
- if (getaddrinfo(cp, NULL, &hints, &ai) == 0)
- sa = ai->ai_addr;
- else
- goto fail;
- } else
- goto fail;
-
- /*
- * Only allow /pref notation for v6 addresses.
- */
- if (sa->sa_family == AF_INET6 && (!(opt_flags & OP_MASKLEN) || maskflg))
- return 1;
-
- ecode = getnameinfo(sa, sa->sa_len, netname, sizeof netname,
- NULL, 0, ninumeric);
- if (ecode != 0)
- goto fail;
-
- if (maskflg)
- net->nt_len = countones(sa);
- else {
- if (opt_flags & OP_MASKLEN) {
- errno = 0;
- preflen = strtol(prefp, NULL, 10);
- if (preflen == LONG_MIN && errno == ERANGE)
- goto fail;
- net->nt_len = (int)preflen;
- *p = '/';
- }
-
- if (np)
- thename = np->n_name;
- else {
- if (getnameinfo(sa, sa->sa_len, netname, sizeof netname,
- NULL, 0, ninumeric) != 0)
- strlcpy(netname, "?", sizeof(netname));
- thename = netname;
- }
- net->nt_name = estrdup(thename);
- memcpy(&net->nt_net, sa, sa->sa_len);
- }
-
- if (!maskflg && sa->sa_family == AF_INET &&
- !(opt_flags & (OP_MASK|OP_MASKLEN))) {
- sinp = (struct sockaddr_in *)sa;
- if (IN_CLASSA(sinp->sin_addr.s_addr))
- net->nt_len = 8;
- else if (IN_CLASSB(sinp->sin_addr.s_addr))
- net->nt_len = 16;
- else if (IN_CLASSC(sinp->sin_addr.s_addr))
- net->nt_len = 24;
- else if (IN_CLASSD(sinp->sin_addr.s_addr))
- net->nt_len = 28;
- else
- net->nt_len = 32; /* XXX */
- }
-
- if (ai)
- freeaddrinfo(ai);
- return 0;
-
-fail:
- if (ai)
- freeaddrinfo(ai);
- return 1;
-}
-
-/*
- * Parse out the next white space separated field
- */
-static void
-nextfield(cp, endcp)
- char **cp;
- char **endcp;
-{
- char *p;
-
- p = *cp;
- while (*p == ' ' || *p == '\t')
- p++;
- if (*p == '\n' || *p == '\0')
- *cp = *endcp = p;
- else {
- *cp = p++;
- while (*p != ' ' && *p != '\t' && *p != '\n' && *p != '\0')
- p++;
- *endcp = p;
- }
-}
-
-/*
- * Parse a description of a credential.
- */
-static void
-parsecred(namelist, cr)
- char *namelist;
- struct uucred *cr;
-{
- char *thename;
- int cnt;
- char *names;
- struct passwd *pw;
- struct group *gr;
- int ngroups;
- gid_t grps[NGROUPS + 1];
-
- /*
- * Set up the unprivileged user.
- */
- *cr = def_anon;
- /*
- * Get the user's password table entry.
- */
- names = strsep(&namelist, " \t\n");
- thename = strsep(&names, ":");
- if (isdigit((unsigned char)*thename) || *thename == '-')
- pw = getpwuid(atoi(thename));
- else
- pw = getpwnam(thename);
- /*
- * Credentials specified as those of a user.
- */
- if (names == NULL) {
- if (pw == NULL) {
- syslog(LOG_ERR, "Unknown user: %s", thename);
- return;
- }
- cr->cr_uid = pw->pw_uid;
- ngroups = NGROUPS + 1;
- if (getgrouplist(pw->pw_name, pw->pw_gid, grps, &ngroups))
- syslog(LOG_ERR, "Too many groups for user %s", thename);
- /*
- * Convert from int's to gid_t's and compress out duplicate
- */
- cr->cr_ngroups = ngroups - 1;
- cr->cr_gid = grps[0];
- for (cnt = 1; cnt < ngroups; cnt++)
- cr->cr_groups[cnt - 1] = grps[cnt];
- return;
- }
- /*
- * Explicit credential specified as a colon separated list:
- * uid:gid:gid:...
- */
- if (pw != NULL)
- cr->cr_uid = pw->pw_uid;
- else if (isdigit((unsigned char)*thename) || *thename == '-')
- cr->cr_uid = atoi(thename);
- else {
- syslog(LOG_ERR, "Unknown user: %s", thename);
- return;
- }
- cr->cr_ngroups = 0;
- while (names != NULL && *names != '\0' && cr->cr_ngroups < NGROUPS) {
- thename = strsep(&names, ":");
- if (isdigit((unsigned char)*thename) || *thename == '-') {
- cr->cr_groups[cr->cr_ngroups++] = atoi(thename);
- } else {
- if ((gr = getgrnam(thename)) == NULL) {
- syslog(LOG_ERR, "Unknown group: %s", thename);
- continue;
- }
- cr->cr_groups[cr->cr_ngroups++] = gr->gr_gid;
- }
- }
- if (names != NULL && *names != '\0' && cr->cr_ngroups == NGROUPS)
- syslog(LOG_ERR, "Too many groups");
-}
-
-#define STRSIZ (RPCMNT_NAMELEN+RPCMNT_PATHLEN+50)
-/*
- * Routines that maintain the remote mounttab
- */
-static void
-get_mountlist()
-{
- struct mountlist *mlp, **mlpp;
- char *host, *dirp, *cp;
- char str[STRSIZ];
- FILE *mlfile;
-
- if ((mlfile = rumpfopen(_PATH_RMOUNTLIST, "r")) == NULL) {
- syslog(LOG_ERR, "Can't open %s: %m", _PATH_RMOUNTLIST);
- return;
- }
- mlpp = &mlhead;
- while (fgets(str, STRSIZ, mlfile) != NULL) {
- cp = str;
- host = strsep(&cp, " \t\n");
- dirp = strsep(&cp, " \t\n");
- if (host == NULL || dirp == NULL)
- continue;
- mlp = emalloc(sizeof(*mlp));
- (void)strncpy(mlp->ml_host, host, RPCMNT_NAMELEN);
- mlp->ml_host[RPCMNT_NAMELEN] = '\0';
- (void)strncpy(mlp->ml_dirp, dirp, RPCMNT_PATHLEN);
- mlp->ml_dirp[RPCMNT_PATHLEN] = '\0';
- mlp->ml_next = NULL;
- *mlpp = mlp;
- mlpp = &mlp->ml_next;
- }
- (void)fclose(mlfile);
-}
-
-static int
-del_mlist(hostp, dirp, saddr)
- char *hostp, *dirp;
- struct sockaddr *saddr;
-{
- struct mountlist *mlp, **mlpp;
- struct mountlist *mlp2;
- u_short sport;
- FILE *mlfile;
- int fnd = 0, ret = 0;
- char host[NI_MAXHOST];
-
- switch (saddr->sa_family) {
- case AF_INET6:
- sport = ntohs(((struct sockaddr_in6 *)saddr)->sin6_port);
- break;
- case AF_INET:
- sport = ntohs(((struct sockaddr_in *)saddr)->sin_port);
- break;
- default:
- return -1;
- }
- mlpp = &mlhead;
- mlp = mlhead;
- while (mlp) {
- if (!strcmp(mlp->ml_host, hostp) &&
- (!dirp || !strcmp(mlp->ml_dirp, dirp))) {
- if (!(mlp->ml_flag & DP_NORESMNT) &&
- sport >= IPPORT_RESERVED) {
- if (getnameinfo(saddr, saddr->sa_len, host,
- sizeof host, NULL, 0, ninumeric) != 0)
- strlcpy(host, "?", sizeof(host));
- syslog(LOG_NOTICE,
- "Umount request for %s:%s from %s refused\n",
- mlp->ml_host, mlp->ml_dirp, host);
- ret = -1;
- goto cont;
- }
- fnd = 1;
- mlp2 = mlp;
- *mlpp = mlp = mlp->ml_next;
- free(mlp2);
- } else {
-cont:
- mlpp = &mlp->ml_next;
- mlp = mlp->ml_next;
- }
- }
- if (fnd) {
- if ((mlfile = rumpfopen(_PATH_RMOUNTLIST, "w")) == NULL) {
- syslog(LOG_ERR, "Can't update %s: %m",
- _PATH_RMOUNTLIST);
- return ret;
- }
- mlp = mlhead;
- while (mlp) {
- (void)fprintf(mlfile, "%s %s\n", mlp->ml_host,
- mlp->ml_dirp);
- mlp = mlp->ml_next;
- }
- (void)fclose(mlfile);
- }
- return ret;
-}
-
-static void
-add_mlist(hostp, dirp, flags)
- char *hostp, *dirp;
- int flags;
-{
- struct mountlist *mlp, **mlpp;
- FILE *mlfile;
-
- mlpp = &mlhead;
- mlp = mlhead;
- while (mlp) {
- if (!strcmp(mlp->ml_host, hostp) && !strcmp(mlp->ml_dirp, dirp))
- return;
- mlpp = &mlp->ml_next;
- mlp = mlp->ml_next;
- }
- mlp = emalloc(sizeof(*mlp));
- strncpy(mlp->ml_host, hostp, RPCMNT_NAMELEN);
- mlp->ml_host[RPCMNT_NAMELEN] = '\0';
- strncpy(mlp->ml_dirp, dirp, RPCMNT_PATHLEN);
- mlp->ml_dirp[RPCMNT_PATHLEN] = '\0';
- mlp->ml_flag = flags;
- mlp->ml_next = NULL;
- *mlpp = mlp;
- if ((mlfile = rumpfopen(_PATH_RMOUNTLIST, "a")) == NULL) {
- syslog(LOG_ERR, "Can't update %s: %m", _PATH_RMOUNTLIST);
- return;
- }
- (void)fprintf(mlfile, "%s %s\n", mlp->ml_host, mlp->ml_dirp);
- (void)fclose(mlfile);
-}
-
-/*
- * This function is called via. SIGTERM when the system is going down.
- * It sends a broadcast RPCMNT_UMNTALL.
- */
-/* ARGSUSED */
-static void
-send_umntall(n)
- int n;
-{
-#if 0
- (void)clnt_broadcast(RPCPROG_MNT, RPCMNT_VER1, RPCMNT_UMNTALL,
- xdr_void, NULL, xdr_void, NULL, (resultproc_t)umntall_each);
-#endif
- exit(0);
-}
-
-#if 0
-static int
-umntall_each(resultsp, raddr)
- caddr_t resultsp;
- struct sockaddr_in *raddr;
-{
- return (1);
-}
-#endif
-
-/*
- * Free up a group list.
- */
-static void
-free_grp(grp)
- struct grouplist *grp;
-{
-
- if (grp->gr_type == GT_HOST) {
- if (grp->gr_ptr.gt_addrinfo != NULL)
- freeaddrinfo(grp->gr_ptr.gt_addrinfo);
- } else if (grp->gr_type == GT_NET) {
- if (grp->gr_ptr.gt_net.nt_name)
- free(grp->gr_ptr.gt_net.nt_name);
- }
- free(grp);
-}
-
-#if 0
-static void
-SYSLOG(int pri, const char *fmt,...)
-{
- va_list ap;
-
- va_start(ap, fmt);
-
- if (debug)
- vfprintf(stderr, fmt, ap);
- else
- vsyslog(pri, fmt, ap);
-
- va_end(ap);
-}
-#endif
-
-/*
- * Check options for consistency.
- */
-static int
-check_options(line, lineno, dp)
- const char *line;
- size_t lineno;
- struct dirlist *dp;
-{
-
- if (dp == NULL) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: missing directory list",
- line, (unsigned long)lineno);
- return (1);
- }
- if ((opt_flags & (OP_MAPROOT|OP_MAPALL)) == (OP_MAPROOT|OP_MAPALL) ||
- (opt_flags & (OP_MAPROOT|OP_KERB)) == (OP_MAPROOT|OP_KERB) ||
- (opt_flags & (OP_MAPALL|OP_KERB)) == (OP_MAPALL|OP_KERB)) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: -mapall, -maproot and -kerb mutually exclusive",
- line, (unsigned long)lineno);
- return (1);
- }
- if ((opt_flags & OP_MASK) && (opt_flags & OP_NET) == 0) {
- syslog(LOG_ERR, "\"%s\", line %ld: -mask requires -net",
- line, (unsigned long)lineno);
- return (1);
- }
- if ((opt_flags & OP_MASK) && (opt_flags & OP_MASKLEN) != 0) {
- syslog(LOG_ERR, "\"%s\", line %ld: /pref and -mask mutually"
- " exclusive",
- line, (unsigned long)lineno);
- return (1);
- }
- if ((opt_flags & OP_ALLDIRS) && dp->dp_left) {
- syslog(LOG_ERR,
- "\"%s\", line %ld: -alldirs has multiple directories",
- line, (unsigned long)lineno);
- return (1);
- }
- return (0);
-}
-
-/*
- * Check an absolute directory path for any symbolic links. Return true
- * if no symbolic links are found.
- */
-static int
-check_dirpath(line, lineno, dirp)
- const char *line;
- size_t lineno;
- char *dirp;
-{
- char *cp;
- struct stat sb;
- char *file = "";
-
- for (cp = dirp + 1; *cp; cp++) {
- if (*cp == '/') {
- *cp = '\0';
- if (rump_sys_lstat(dirp, &sb) == -1)
- goto bad;
- if (!S_ISDIR(sb.st_mode))
- goto bad1;
- *cp = '/';
- }
- }
-
- cp = NULL;
- if (rump_sys_lstat(dirp, &sb) == -1)
- goto bad;
-
- if (!S_ISDIR(sb.st_mode) && !S_ISREG(sb.st_mode)) {
- file = " file or a";
- goto bad1;
- }
-
- return 1;
-
-bad:
- syslog(LOG_ERR,
- "\"%s\", line %ld: lstat for `%s' failed: %m",
- line, (unsigned long)lineno, dirp);
- if (cp)
- *cp = '/';
- return 0;
-
-bad1:
- syslog(LOG_ERR,
- "\"%s\", line %ld: `%s' is not a%s directory",
- line, (unsigned long)lineno, dirp, file);
- abort();
- if (cp)
- *cp = '/';
- return 0;
-}
-
-static void
-bind_resv_port(int sock, sa_family_t family, in_port_t port)
-{
- struct sockaddr *sa;
- struct sockaddr_in sasin;
- struct sockaddr_in6 sasin6;
-
- switch (family) {
- case AF_INET:
- (void)memset(&sasin, 0, sizeof(sasin));
- sasin.sin_len = sizeof(sasin);
- sasin.sin_family = family;
- sasin.sin_port = htons(port);
- sa = (struct sockaddr *)(void *)&sasin;
- break;
- case AF_INET6:
- (void)memset(&sasin6, 0, sizeof(sasin6));
- sasin6.sin6_len = sizeof(sasin6);
- sasin6.sin6_family = family;
- sasin6.sin6_port = htons(port);
- sa = (struct sockaddr *)(void *)&sasin6;
- break;
- default:
- syslog(LOG_ERR, "Unsupported address family %d", family);
- return;
- }
- if (bindresvport_sa(sock, sa) == -1)
- syslog(LOG_ERR, "Cannot bind to reserved port %d (%m)", port);
-}
-
-/* ARGSUSED */
-static void
-no_nfs(int sig)
-{
- syslog(LOG_ERR, "kernel NFS support not present; exiting");
- exit(1);
-}
diff --git a/contrib/netbsd-tests/fs/nfs/nfsservice/nfsd.c b/contrib/netbsd-tests/fs/nfs/nfsservice/nfsd.c
deleted file mode 100644
index b062501..0000000
--- a/contrib/netbsd-tests/fs/nfs/nfsservice/nfsd.c
+++ /dev/null
@@ -1,571 +0,0 @@
-/* $NetBSD: nfsd.c,v 1.4 2013/10/19 17:45:00 christos Exp $ */
-
-/*
- * Copyright (c) 1989, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Rick Macklem at The University of Guelph.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-#ifndef lint
-__COPYRIGHT("@(#) Copyright (c) 1989, 1993, 1994\
- The Regents of the University of California. All rights reserved.");
-#endif /* not lint */
-
-#ifndef lint
-#if 0
-static char sccsid[] = "@(#)nfsd.c 8.9 (Berkeley) 3/29/95";
-#else
-__RCSID("$NetBSD: nfsd.c,v 1.4 2013/10/19 17:45:00 christos Exp $");
-#endif
-#endif /* not lint */
-
-#include <sys/param.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <sys/uio.h>
-#include <sys/ucred.h>
-#include <sys/mount.h>
-#include <sys/socket.h>
-#include <sys/socketvar.h>
-#include <poll.h>
-
-#include <rpc/rpc.h>
-#include <rpc/pmap_clnt.h>
-#include <rpc/pmap_prot.h>
-
-#include <nfs/rpcv2.h>
-#include <nfs/nfsproto.h>
-#include <nfs/nfs.h>
-
-#include <err.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-#include <netdb.h>
-
-#include <rump/rump.h>
-#include <rump/rump_syscalls.h>
-
-/* Global defs */
-#ifdef DEBUG
-#define syslog(e, s, args...) \
-do { \
- fprintf(stderr,(s), ## args); \
- fprintf(stderr, "\n"); \
-} while (/*CONSTCOND*/0)
-int debug = 1;
-#else
-int debug = 0;
-#endif
-
-int main __P((int, char **));
-void nonfs __P((int));
-void usage __P((void));
-
-static void *
-child(void *arg)
-{
- struct nfsd_srvargs nsd;
- int nfssvc_flag;
-
- nfssvc_flag = NFSSVC_NFSD;
- memset(&nsd, 0, sizeof(nsd));
- while (rump_sys_nfssvc(nfssvc_flag, &nsd) < 0) {
- if (errno != ENEEDAUTH) {
- syslog(LOG_ERR, "nfssvc: %m %d", errno);
- exit(1);
- }
- nfssvc_flag = NFSSVC_NFSD | NFSSVC_AUTHINFAIL;
- }
-
- return NULL;
-}
-
-/*
- * Nfs server daemon mostly just a user context for nfssvc()
- *
- * 1 - do file descriptor and signal cleanup
- * 2 - create the nfsd thread(s)
- * 3 - create server socket(s)
- * 4 - register socket with portmap
- *
- * For connectionless protocols, just pass the socket into the kernel via
- * nfssvc().
- * For connection based sockets, loop doing accepts. When you get a new
- * socket from accept, pass the msgsock into the kernel via nfssvc().
- * The arguments are:
- * -c - support iso cltp clients
- * -r - reregister with portmapper
- * -t - support tcp nfs clients
- * -u - support udp nfs clients
- * followed by "n" which is the number of nfsd threads to create
- */
-int nfsd_main(int, char**);
-int
-nfsd_main(argc, argv)
- int argc;
- char *argv[];
-{
- struct nfsd_args nfsdargs;
- struct addrinfo *ai_udp, *ai_tcp, *ai_udp6, *ai_tcp6, hints;
- struct netconfig *nconf_udp, *nconf_tcp, *nconf_udp6, *nconf_tcp6;
- struct netbuf nb_udp, nb_tcp, nb_udp6, nb_tcp6;
- struct sockaddr_in inetpeer;
- struct pollfd set[4];
- socklen_t len;
- int ch, connect_type_cnt, i, msgsock;
- int nfsdcnt, on = 1, reregister, sock, tcpflag, tcpsock;
- int tcp6sock, ip6flag;
- int tp4cnt, tp4flag, tpipcnt, udpflag, ecode, s;
- int error = 0;
-
-#define DEFNFSDCNT 4
- nfsdcnt = DEFNFSDCNT;
- reregister = tcpflag = tp4cnt = tp4flag = tpipcnt = 0;
- udpflag = ip6flag = 0;
- nconf_udp = nconf_tcp = nconf_udp6 = nconf_tcp6 = NULL;
- tcpsock = tcp6sock = -1;
-#define GETOPT "6n:rtu"
-#define USAGE "[-rtu] [-n num_servers]"
- while ((ch = getopt(argc, argv, GETOPT)) != -1) {
- switch (ch) {
- case '6':
- ip6flag = 1;
- s = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);
- if (s < 0 && (errno == EPROTONOSUPPORT ||
- errno == EPFNOSUPPORT || errno == EAFNOSUPPORT))
- ip6flag = 0;
- else
- close(s);
- break;
- case 'n':
- nfsdcnt = atoi(optarg);
- if (nfsdcnt < 1) {
- warnx("nfsd count %d; reset to %d", nfsdcnt, DEFNFSDCNT);
- nfsdcnt = DEFNFSDCNT;
- }
- break;
- case 'r':
- reregister = 1;
- break;
- case 't':
- tcpflag = 1;
- break;
- case 'u':
- udpflag = 1;
- break;
- default:
- case '?':
- usage();
- };
- }
- argv += optind;
- argc -= optind;
-
- /*
- * XXX
- * Backward compatibility, trailing number is the count of daemons.
- */
- if (argc > 1)
- usage();
- if (argc == 1) {
- nfsdcnt = atoi(argv[0]);
- if (nfsdcnt < 1) {
- warnx("nfsd count %d; reset to %d", nfsdcnt, DEFNFSDCNT);
- nfsdcnt = DEFNFSDCNT;
- }
- }
-
- /*
- * If none of TCP or UDP are specified, default to UDP only.
- */
- if (tcpflag == 0 && udpflag == 0)
- udpflag = 1;
-
- if (debug == 0) {
- fprintf(stderr, "non-debug not supported here\n");
- exit(1);
-
-#ifdef not_the_debug_man
- daemon(0, 0);
- (void)signal(SIGHUP, SIG_IGN);
- (void)signal(SIGINT, SIG_IGN);
- (void)signal(SIGQUIT, SIG_IGN);
- (void)signal(SIGSYS, nonfs);
-#endif
- }
-
- if (udpflag) {
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_PASSIVE;
- hints.ai_family = PF_INET;
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_protocol = IPPROTO_UDP;
-
- ecode = getaddrinfo(NULL, "nfs", &hints, &ai_udp);
- if (ecode != 0) {
- syslog(LOG_ERR, "getaddrinfo udp: %s",
- gai_strerror(ecode));
- exit(1);
- }
-
- nconf_udp = getnetconfigent("udp");
-
- if (nconf_udp == NULL)
- err(1, "getnetconfigent udp failed");
-
- nb_udp.buf = ai_udp->ai_addr;
- nb_udp.len = nb_udp.maxlen = ai_udp->ai_addrlen;
- if (reregister)
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_udp, &nb_udp))
- err(1, "rpcb_set udp failed");
- }
-
- if (tcpflag) {
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_PASSIVE;
- hints.ai_family = PF_INET;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_protocol = IPPROTO_TCP;
-
- ecode = getaddrinfo(NULL, "nfs", &hints, &ai_tcp);
- if (ecode != 0) {
- syslog(LOG_ERR, "getaddrinfo tcp: %s",
- gai_strerror(ecode));
- exit(1);
- }
-
- nconf_tcp = getnetconfigent("tcp");
-
- if (nconf_tcp == NULL)
- err(1, "getnetconfigent tcp failed");
-
- nb_tcp.buf = ai_tcp->ai_addr;
- nb_tcp.len = nb_tcp.maxlen = ai_tcp->ai_addrlen;
- if (reregister)
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_tcp, &nb_tcp))
- err(1, "rpcb_set tcp failed");
- }
-
- if (udpflag && ip6flag) {
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_PASSIVE;
- hints.ai_family = PF_INET6;
- hints.ai_socktype = SOCK_DGRAM;
- hints.ai_protocol = IPPROTO_UDP;
-
- ecode = getaddrinfo(NULL, "nfs", &hints, &ai_udp6);
- if (ecode != 0) {
- syslog(LOG_ERR, "getaddrinfo udp: %s",
- gai_strerror(ecode));
- exit(1);
- }
-
- nconf_udp6 = getnetconfigent("udp6");
-
- if (nconf_udp6 == NULL)
- err(1, "getnetconfigent udp6 failed");
-
- nb_udp6.buf = ai_udp6->ai_addr;
- nb_udp6.len = nb_udp6.maxlen = ai_udp6->ai_addrlen;
- if (reregister)
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_udp6, &nb_udp6))
- err(1, "rpcb_set udp6 failed");
- }
-
- if (tcpflag && ip6flag) {
- memset(&hints, 0, sizeof hints);
- hints.ai_flags = AI_PASSIVE;
- hints.ai_family = PF_INET6;
- hints.ai_socktype = SOCK_STREAM;
- hints.ai_protocol = IPPROTO_TCP;
-
- ecode = getaddrinfo(NULL, "nfs", &hints, &ai_tcp6);
- if (ecode != 0) {
- syslog(LOG_ERR, "getaddrinfo tcp: %s",
- gai_strerror(ecode));
- exit(1);
- }
-
- nconf_tcp6 = getnetconfigent("tcp6");
-
- if (nconf_tcp6 == NULL)
- err(1, "getnetconfigent tcp6 failed");
-
- nb_tcp6.buf = ai_tcp6->ai_addr;
- nb_tcp6.len = nb_tcp6.maxlen = ai_tcp6->ai_addrlen;
- if (reregister)
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_tcp6, &nb_tcp6))
- err(1, "rpcb_set tcp6 failed");
- }
-
- openlog("nfsd", LOG_PID, LOG_DAEMON);
-
- for (i = 0; i < nfsdcnt; i++) {
- pthread_t t;
- pthread_create(&t, NULL, child, NULL);
- }
-
- /* If we are serving udp, set up the socket. */
- if (udpflag) {
- if ((sock = rump_sys_socket(ai_udp->ai_family, ai_udp->ai_socktype,
- ai_udp->ai_protocol)) < 0) {
- syslog(LOG_ERR, "can't create udp socket");
- exit(1);
- }
- if (bind(sock, ai_udp->ai_addr, ai_udp->ai_addrlen) < 0) {
- syslog(LOG_ERR, "can't bind udp addr");
- exit(1);
- }
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_udp, &nb_udp) ||
- !rpcb_set(RPCPROG_NFS, 3, nconf_udp, &nb_udp)) {
- syslog(LOG_ERR, "can't register with udp portmap");
- exit(1);
- }
- nfsdargs.sock = sock;
- nfsdargs.name = NULL;
- nfsdargs.namelen = 0;
- if (rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs) < 0) {
- syslog(LOG_ERR, "can't add UDP socket");
- exit(1);
- }
- (void)rump_sys_close(sock);
- }
-
- if (udpflag &&ip6flag) {
- if ((sock = rump_sys_socket(ai_udp6->ai_family, ai_udp6->ai_socktype,
- ai_udp6->ai_protocol)) < 0) {
- syslog(LOG_ERR, "can't create udp socket");
- exit(1);
- }
- if (rump_sys_setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
- &on, sizeof on) < 0) {
- syslog(LOG_ERR, "can't set v6-only binding for udp6 "
- "socket: %m");
- exit(1);
- }
- if (rump_sys_bind(sock, ai_udp6->ai_addr, ai_udp6->ai_addrlen) < 0) {
- syslog(LOG_ERR, "can't bind udp addr");
- exit(1);
- }
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_udp6, &nb_udp6) ||
- !rpcb_set(RPCPROG_NFS, 3, nconf_udp6, &nb_udp6)) {
- syslog(LOG_ERR, "can't register with udp portmap");
- exit(1);
- }
- nfsdargs.sock = sock;
- nfsdargs.name = NULL;
- nfsdargs.namelen = 0;
- if (rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs) < 0) {
- syslog(LOG_ERR, "can't add UDP6 socket");
- exit(1);
- }
- (void)rump_sys_close(sock);
- }
-
- /* Now set up the master server socket waiting for tcp connections. */
- on = 1;
- connect_type_cnt = 0;
- if (tcpflag) {
- if ((tcpsock = rump_sys_socket(ai_tcp->ai_family, ai_tcp->ai_socktype,
- ai_tcp->ai_protocol)) < 0) {
- syslog(LOG_ERR, "can't create tcp socket");
- exit(1);
- }
- if (setsockopt(tcpsock,
- SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
- syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
- if (bind(tcpsock, ai_tcp->ai_addr, ai_tcp->ai_addrlen) < 0) {
- syslog(LOG_ERR, "can't bind tcp addr");
- exit(1);
- }
- if (rump_sys_listen(tcpsock, 5) < 0) {
- syslog(LOG_ERR, "listen failed");
- exit(1);
- }
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_tcp, &nb_tcp) ||
- !rpcb_set(RPCPROG_NFS, 3, nconf_tcp, &nb_tcp)) {
- syslog(LOG_ERR, "can't register tcp with rpcbind");
- exit(1);
- }
- set[0].fd = tcpsock;
- set[0].events = POLLIN;
- connect_type_cnt++;
- } else
- set[0].fd = -1;
-
- if (tcpflag && ip6flag) {
- if ((tcp6sock = socket(ai_tcp6->ai_family, ai_tcp6->ai_socktype,
- ai_tcp6->ai_protocol)) < 0) {
- syslog(LOG_ERR, "can't create tcp socket");
- exit(1);
- }
- if (setsockopt(tcp6sock,
- SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
- syslog(LOG_ERR, "setsockopt SO_REUSEADDR: %m");
- if (setsockopt(tcp6sock, IPPROTO_IPV6, IPV6_V6ONLY,
- &on, sizeof on) < 0) {
- syslog(LOG_ERR, "can't set v6-only binding for tcp6 "
- "socket: %m");
- exit(1);
- }
- if (bind(tcp6sock, ai_tcp6->ai_addr, ai_tcp6->ai_addrlen) < 0) {
- syslog(LOG_ERR, "can't bind tcp6 addr");
- exit(1);
- }
- if (listen(tcp6sock, 5) < 0) {
- syslog(LOG_ERR, "listen failed");
- exit(1);
- }
- if (!rpcb_set(RPCPROG_NFS, 2, nconf_tcp6, &nb_tcp6) ||
- !rpcb_set(RPCPROG_NFS, 3, nconf_tcp6, &nb_tcp6)) {
- syslog(LOG_ERR, "can't register tcp6 with rpcbind");
- exit(1);
- }
- set[1].fd = tcp6sock;
- set[1].events = POLLIN;
- connect_type_cnt++;
- } else
- set[1].fd = -1;
-
- set[2].fd = -1;
- set[3].fd = -1;
-
- if (connect_type_cnt == 0) {
- pause();
- exit(0);
- }
-
- /*
- * Loop forever accepting connections and passing the sockets
- * into the kernel for the mounts.
- */
- for (;;) {
- if (rump_sys_poll(set, 4, INFTIM) < 1) {
- syslog(LOG_ERR, "poll failed: %m");
- exit(1);
- }
-
- len = sizeof(inetpeer);
- if ((msgsock = accept(tcpsock,
- (struct sockaddr *)&inetpeer, &len)) < 0) {
- syslog(LOG_ERR, "accept failed: %d", error);
- exit(1);
- }
- memset(inetpeer.sin_zero, 0, sizeof(inetpeer.sin_zero));
- if (setsockopt(msgsock, SOL_SOCKET,
- SO_KEEPALIVE, (char *)&on, sizeof(on)) < 0)
- syslog(LOG_ERR,
- "setsockopt SO_KEEPALIVE: %m");
- nfsdargs.sock = msgsock;
- nfsdargs.name = (caddr_t)&inetpeer;
- nfsdargs.namelen = sizeof(inetpeer);
- rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs);
- (void)rump_sys_close(msgsock);
-
-#ifdef notyet
- if (set[1].revents & POLLIN) {
- len = sizeof(inet6peer);
- if ((msgsock = rump_sys_accept(tcp6sock,
- (struct sockaddr *)&inet6peer, &len, &error)) < 0) {
- syslog(LOG_ERR, "accept failed: %m");
- exit(1);
- }
- if (rump_sys_setsockopt(msgsock, SOL_SOCKET,
- SO_KEEPALIVE, (char *)&on, sizeof(on), &error) < 0)
- syslog(LOG_ERR,
- "setsockopt SO_KEEPALIVE: %m");
- nfsdargs.sock = msgsock;
- nfsdargs.name = (caddr_t)&inet6peer;
- nfsdargs.namelen = sizeof(inet6peer);
- rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs, &error);
- (void)rump_sys_close(msgsock, &error);
- }
-
- if (set[2].revents & POLLIN) {
- len = sizeof(isopeer);
- if ((msgsock = rump_sys_accept(tp4sock,
- (struct sockaddr *)&isopeer, &len, &error)) < 0) {
- syslog(LOG_ERR, "accept failed: %m");
- exit(1);
- }
- if (rump_sys_setsockopt(msgsock, SOL_SOCKET,
- SO_KEEPALIVE, (char *)&on, sizeof(on), &error) < 0)
- syslog(LOG_ERR,
- "setsockopt SO_KEEPALIVE: %m");
- nfsdargs.sock = msgsock;
- nfsdargs.name = (caddr_t)&isopeer;
- nfsdargs.namelen = len;
- rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs, &error);
- (void)rump_sys_close(msgsock, &error);
- }
-
- if (set[3].revents & POLLIN) {
- len = sizeof(inetpeer);
- if ((msgsock = rump_sys_accept(tpipsock,
- (struct sockaddr *)&inetpeer, &len)) < 0) {
- syslog(LOG_ERR, "accept failed: %m");
- exit(1);
- }
- if (setsockopt(msgsock, SOL_SOCKET,
- SO_KEEPALIVE, (char *)&on, sizeof(on)) < 0)
- syslog(LOG_ERR, "setsockopt SO_KEEPALIVE: %m");
- nfsdargs.sock = msgsock;
- nfsdargs.name = (caddr_t)&inetpeer;
- nfsdargs.namelen = len;
- rump_sys_nfssvc(NFSSVC_ADDSOCK, &nfsdargs);
- (void)rump_sys_close(msgsock);
- }
-#endif /* notyet */
- }
-}
-
-void
-usage()
-{
- (void)fprintf(stderr, "usage: nfsd %s\n", USAGE);
- exit(1);
-}
-
-void
-nonfs(signo)
- int signo;
-{
- syslog(LOG_ERR, "missing system call: NFS not available.");
-}
diff --git a/contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c b/contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c
index 337a06e..5f8e152 100644
--- a/contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c
+++ b/contrib/netbsd-tests/fs/nfs/nfsservice/rumpnfsd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpnfsd.c,v 1.8 2014/05/12 15:31:07 christos Exp $ */
+/* $NetBSD: rumpnfsd.c,v 1.9 2015/11/08 02:45:16 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -37,6 +37,7 @@
#include <string.h>
#include <syslog.h>
#include <unistd.h>
+#include <rpc/rpc.h>
void *mountd_main(void *);
void *rpcbind_main(void *);
@@ -87,7 +88,7 @@ main(int argc, char *argv[])
}
rump_init();
- init_fdsets();
+ svc_fdset_init(SVC_FDSET_MT);
rv = rump_pub_etfs_register("/etc/exports", "./exports", RUMP_ETFS_REG);
if (rv) {
diff --git a/contrib/netbsd-tests/fs/nfs/t_rquotad.sh b/contrib/netbsd-tests/fs/nfs/t_rquotad.sh
index 05d34fb..dc9226c 100755
--- a/contrib/netbsd-tests/fs/nfs/t_rquotad.sh
+++ b/contrib/netbsd-tests/fs/nfs/t_rquotad.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_rquotad.sh,v 1.4 2014/03/13 12:45:14 gson Exp $
+# $NetBSD: t_rquotad.sh,v 1.5 2016/08/10 23:25:39 kre Exp $
#
# Copyright (c) 2011 Manuel Bouyer
# All rights reserved.
@@ -114,7 +114,7 @@ get_nfs_quota()
unset RUMPHIJACK
unset LD_PRELOAD
- atf_check -s exit:0 rump_server -lrumpvfs -lrumpnet \
+ atf_check -s exit:0 rump_server -lrumpvfs -lrumpnet -lrumpdev \
-lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpfs_nfs\
${RUMP_SERVER}
diff --git a/contrib/netbsd-tests/fs/psshfs/t_psshfs.sh b/contrib/netbsd-tests/fs/psshfs/t_psshfs.sh
index 241d46d..4d8fede 100755
--- a/contrib/netbsd-tests/fs/psshfs/t_psshfs.sh
+++ b/contrib/netbsd-tests/fs/psshfs/t_psshfs.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_psshfs.sh,v 1.7 2013/03/16 07:54:04 jmmv Exp $
+# $NetBSD: t_psshfs.sh,v 1.8 2016/09/05 08:53:57 christos Exp $
#
# Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -262,6 +262,26 @@ setattr_cache_cleanup() {
stop_ssh
}
+atf_test_case read_empty_file cleanup
+read_empty_file_head() {
+ atf_set "descr" "Checks whether an empty file can be read"
+ # This test is supposed to make sure psshfs does not hang
+ # when reading from an empty file, hence the timeout.
+ atf_set "timeout" 8
+}
+read_empty_file_body() {
+ require_puffs
+ start_ssh
+ atf_check mkdir root mnt
+ atf_check -x ': > root/empty'
+ mount_psshfs root mnt
+ atf_check cat mnt/empty
+}
+read_empty_file_cleanup() {
+ umount mnt
+ stop_ssh
+}
+
# -------------------------------------------------------------------------
# Initialization.
# -------------------------------------------------------------------------
@@ -271,4 +291,5 @@ atf_init_test_cases() {
atf_add_test_case pwd
atf_add_test_case ls
#atf_add_test_case setattr_cache
+ atf_add_test_case read_empty_file
}
diff --git a/contrib/netbsd-tests/fs/puffs/t_basic.c b/contrib/netbsd-tests/fs/puffs/t_basic.c
index ce5e4ea..735108d 100644
--- a/contrib/netbsd-tests/fs/puffs/t_basic.c
+++ b/contrib/netbsd-tests/fs/puffs/t_basic.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_basic.c,v 1.12 2013/10/19 17:45:00 christos Exp $ */
+/* $NetBSD: t_basic.c,v 1.13 2016/12/01 14:49:04 hannken Exp $ */
#include <sys/types.h>
#include <sys/mount.h>
@@ -286,7 +286,7 @@ ATF_TC_BODY(inactive_reclaim, tc)
rump_sys_close(fd);
syncbar(FSTEST_MNTNAME);
- ATF_REQUIRE_EQ(pargs->pta_vn_toserv_ops[PUFFS_VN_INACTIVE], 1);
+ ATF_REQUIRE(pargs->pta_vn_toserv_ops[PUFFS_VN_INACTIVE] > 0);
ATF_REQUIRE_EQ(pargs->pta_vn_toserv_ops[PUFFS_VN_RECLAIM], 1);
FSTEST_EXIT();
@@ -383,7 +383,7 @@ ATF_TC_BODY(unlink_accessible, tc)
syncbar(FSTEST_MNTNAME);
ATF_REQUIRE_EQ(pargs->pta_vn_toserv_ops[PUFFS_VN_RECLAIM], 1);
- ATF_REQUIRE_EQ(pargs->pta_vn_toserv_ops[PUFFS_VN_INACTIVE], ianow+1);
+ ATF_REQUIRE(pargs->pta_vn_toserv_ops[PUFFS_VN_INACTIVE] > ianow);
ATF_REQUIRE_STREQ(buf, MAGICSTR);
diff --git a/contrib/netbsd-tests/fs/tmpfs/h_funcs.subr b/contrib/netbsd-tests/fs/tmpfs/h_funcs.subr
index 07c1644..edab789 100644
--- a/contrib/netbsd-tests/fs/tmpfs/h_funcs.subr
+++ b/contrib/netbsd-tests/fs/tmpfs/h_funcs.subr
@@ -59,12 +59,31 @@ test_mount() {
# Unmounts the file system mounted by test_mount.
#
test_unmount() {
+ # Begin FreeBSD
+ _test_unmount
+ exit_code=$?
+ atf_check_equal "$exit_code" "0"
+ return $exit_code
+ # End FreeBSD
cd - >/dev/null
atf_check -s eq:0 -o empty -e empty umount ${Mount_Point}
atf_check -s eq:0 -o empty -e empty rmdir ${Mount_Point}
Mount_Point=
}
+# Begin FreeBSD
+_test_unmount() {
+ if [ -z "${Mount_Point}" -o ! -d "${Mount_Point}" ]; then
+ return 0
+ fi
+
+ cd - >/dev/null
+ umount ${Mount_Point}
+ rmdir ${Mount_Point}
+ Mount_Point=
+}
+# End FreeBSD
+
#
# kqueue_monitor expected_nevents file1 [.. fileN]
#
diff --git a/contrib/netbsd-tests/fs/tmpfs/h_tools.c b/contrib/netbsd-tests/fs/tmpfs/h_tools.c
index 6a7b8fd..492e084 100644
--- a/contrib/netbsd-tests/fs/tmpfs/h_tools.c
+++ b/contrib/netbsd-tests/fs/tmpfs/h_tools.c
@@ -50,6 +50,10 @@
#include <string.h>
#include <unistd.h>
+#ifdef __FreeBSD__
+#include <inttypes.h>
+#endif
+
/* --------------------------------------------------------------------- */
static int getfh_main(int, char **);
@@ -70,7 +74,12 @@ getfh_main(int argc, char **argv)
if (argc < 2)
return EXIT_FAILURE;
+#ifdef __FreeBSD__
+ fh_size = sizeof(fhandle_t);
+#else
fh_size = 0;
+#endif
+
fh = NULL;
for (;;) {
if (fh_size) {
@@ -85,7 +94,11 @@ getfh_main(int argc, char **argv)
* but it may change if someone moves things around,
* so retry untill we have enough memory.
*/
+#ifdef __FreeBSD__
+ error = getfh(argv[1], fh);
+#else
error = getfh(argv[1], fh, &fh_size);
+#endif
if (error == 0) {
break;
} else {
@@ -230,12 +243,21 @@ sockets_main(int argc, char **argv)
return EXIT_FAILURE;
}
+#ifdef __FreeBSD__
+ memset(&addr, 0, sizeof(addr));
+#endif
(void)strlcpy(addr.sun_path, argv[1], sizeof(addr.sun_path));
addr.sun_family = PF_UNIX;
-
+#ifdef __FreeBSD__
+ error = bind(fd, (struct sockaddr *)&addr, SUN_LEN(&addr));
+#else
error = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
+#endif
if (error == -1) {
warn("connect");
+#ifdef __FreeBSD__
+ (void)close(fd);
+#endif
return EXIT_FAILURE;
}
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_link.sh b/contrib/netbsd-tests/fs/tmpfs/t_link.sh
index 660f3f2..612c1e2 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_link.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_link.sh
@@ -93,7 +93,18 @@ subdirs_body() {
test_unmount
}
+# Begin FreeBSD
+if true; then
+atf_test_case kqueue cleanup
+kqueue_cleanup() {
+ Mount_Point=$(pwd)/mntpt _test_unmount || :
+}
+else
+# End FreeBSD
atf_test_case kqueue
+# Begin FreeBSD
+fi
+# End FreeBSD
kqueue_head() {
atf_set "descr" "Verifies that creating a link raises the correct" \
"kqueue events"
@@ -102,6 +113,10 @@ kqueue_head() {
kqueue_body() {
test_mount
+ # Begin FreeBSD
+ atf_expect_fail "fails with: dir/b did not receive NOTE_LINK - bug 213662"
+ # End FreeBSD
+
atf_check -s eq:0 -o empty -e empty mkdir dir
atf_check -s eq:0 -o empty -e empty touch dir/a
echo 'ln dir/a dir/b' | kqueue_monitor 2 dir dir/a
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_mknod.sh b/contrib/netbsd-tests/fs/tmpfs/t_mknod.sh
index 62c7cce..037dc16 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_mknod.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_mknod.sh
@@ -106,7 +106,15 @@ pipe_body() {
test_mount
umask 022
+ # Begin FreeBSD
+ if true; then
+ atf_check -s eq:0 -o empty -e empty mkfifo pipe
+ else
+ # End FreeBSD
atf_check -s eq:0 -o empty -e empty mknod pipe p
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
eval $(stat -s pipe)
[ ${st_mode} = 010644 ] || atf_fail "Invalid mode"
@@ -124,7 +132,15 @@ pipe_kqueue_body() {
umask 022
atf_check -s eq:0 -o empty -e empty mkdir dir
+ # Begin FreeBSD
+ if true; then
+ echo 'mkfifo dir/pipe' | kqueue_monitor 1 dir
+ else
+ # End FreeBSD
echo 'mknod dir/pipe p' | kqueue_monitor 1 dir
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
kqueue_check dir NOTE_WRITE
test_unmount
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_mount.sh b/contrib/netbsd-tests/fs/tmpfs/t_mount.sh
index 11a77d4..9ec5e31 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_mount.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_mount.sh
@@ -93,7 +93,19 @@ negative_body() {
test_unmount
}
+# Begin FreeBSD
+if true; then
+atf_test_case large cleanup
+large_cleanup() {
+ umount -f tmp 2>/dev/null || :
+ Mount_Point=$(pwd)/mnt _test_unmount || :
+}
+else
+# End FreeBSD
atf_test_case large
+# Begin FreeBSD
+fi
+# End FreeBSD
large_head() {
atf_set "descr" "Tests that extremely long values passed to -s" \
"are handled correctly"
@@ -103,6 +115,10 @@ large_body() {
test_mount -o -s9223372036854775807
test_unmount
+ # Begin FreeBSD
+ atf_expect_fail "-o -s<large-size> succeeds unexpectedly on FreeBSD - bug 212862"
+ # End FreeBSD
+
mkdir tmp
atf_check -s eq:1 -o empty -e ignore \
mount -t tmpfs -o -s9223372036854775808 tmpfs tmp
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_readdir.sh b/contrib/netbsd-tests/fs/tmpfs/t_readdir.sh
index 6f5dc3e..272c749 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_readdir.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_readdir.sh
@@ -59,7 +59,15 @@ types_body() {
atf_check -s eq:0 -o empty -e empty ln -s reg lnk
atf_check -s eq:0 -o empty -e empty mknod blk b 0 0
atf_check -s eq:0 -o empty -e empty mknod chr c 0 0
+ # Begin FreeBSD
+ if true; then
+ atf_check -s eq:0 -o empty -e empty mkfifo fifo
+ else
+ # End FreeBSD
atf_check -s eq:0 -o empty -e empty mknod fifo p
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
atf_check -s eq:0 -o empty -e empty \
$(atf_get_srcdir)/h_tools sockets sock
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_remove.sh b/contrib/netbsd-tests/fs/tmpfs/t_remove.sh
index df868f9..f75032c 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_remove.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_remove.sh
@@ -46,13 +46,28 @@ single_body() {
test_unmount
}
+# Begin FreeBSD
+if true; then
+atf_test_case uchg cleanup
+uchg_cleanup() {
+ Mount_Point=$(pwd)/mntpt _test_unmount
+}
+else
+# End FreeBSD
atf_test_case uchg
+# Begin FreeBSD
+fi
+# End FreeBSD
uchg_head() {
atf_set "descr" "Checks that files with the uchg flag set cannot" \
"be removed"
atf_set "require.user" "root"
}
uchg_body() {
+ # Begin FreeBSD
+ atf_expect_fail "this fails on FreeBSD with root - bug 212861"
+ # End FreeBSD
+
test_mount
atf_check -s eq:0 -o empty -e empty touch a
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_sizes.sh b/contrib/netbsd-tests/fs/tmpfs/t_sizes.sh
index 9673b91..35abe8a 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_sizes.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_sizes.sh
@@ -54,7 +54,15 @@ big_head() {
big_body() {
test_mount -o -s10M
+ # Begin FreeBSD
+ if true; then
+ pagesize=$(sysctl -n hw.pagesize)
+ else
+ # End FreeBSD
pagesize=$(sysctl hw.pagesize | cut -d ' ' -f 3)
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
eval $($(atf_get_srcdir)/h_tools statvfs . | sed -e 's|^f_|cf_|')
cf_bused=$((${cf_blocks} - ${cf_bfree}))
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_statvfs.sh b/contrib/netbsd-tests/fs/tmpfs/t_statvfs.sh
index 21290b6..d0e7ac2 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_statvfs.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_statvfs.sh
@@ -38,7 +38,15 @@ values_head() {
values_body() {
test_mount -o -s10M
+ # Begin FreeBSD
+ if true; then
+ pagesize=$(sysctl -n hw.pagesize)
+ else
+ # End FreeBSD
pagesize=$(sysctl hw.pagesize | cut -d ' ' -f 3)
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
eval $($(atf_get_srcdir)/h_tools statvfs .)
[ ${pagesize} -eq ${f_bsize} ] || \
atf_fail "Invalid bsize"
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh b/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh
index 2c97fa9..1f42f62 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_vnd.sh,v 1.8 2011/04/21 22:26:46 haad Exp $
+# $NetBSD: t_vnd.sh,v 1.9 2016/07/29 05:23:24 pgoyette Exp $
#
# Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -38,12 +38,21 @@ basic_body() {
atf_check -s eq:0 -o ignore -e ignore \
dd if=/dev/zero of=disk.img bs=1m count=10
- atf_check -s eq:0 -o empty -e empty vnconfig /dev/vnd3 disk.img
+ # Begin FreeBSD
+ if true; then
+ atf_check -s eq:0 -o empty -e empty mkdir mnt
+ atf_check -s eq:0 -o empty -e empty mdmfs -F disk.img md3 mnt
+ else
+ # End FreeBSD
+ atf_check -s eq:0 -o empty -e empty vndconfig /dev/vnd3 disk.img
atf_check -s eq:0 -o ignore -e ignore newfs /dev/rvnd3a
atf_check -s eq:0 -o empty -e empty mkdir mnt
atf_check -s eq:0 -o empty -e empty mount /dev/vnd3a mnt
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
echo "Creating test files"
for f in $(jot -w %u 100 | uniq); do
@@ -58,7 +67,15 @@ basic_body() {
done
atf_check -s eq:0 -o empty -e empty umount mnt
- atf_check -s eq:0 -o empty -e empty vnconfig -u /dev/vnd3
+ # Begin FreeBSD
+ if true; then
+ atf_check -s eq:0 -o empty -e empty mdconfig -d -u 3
+ else
+ # End FreeBSD
+ atf_check -s eq:0 -o empty -e empty vndconfig -u /dev/vnd3
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
test_unmount
touch done
@@ -66,7 +83,15 @@ basic_body() {
basic_cleanup() {
if [ ! -f done ]; then
umount mnt 2>/dev/null 1>&2
- vnconfig -u /dev/vnd3 2>/dev/null 1>&2
+ # Begin FreeBSD
+ if true; then
+ [ ! -c /dev/md3 ] || mdconfig -d -u 3
+ else
+ # End FreeBSD
+ vndconfig -u /dev/vnd3 2>/dev/null 1>&2
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
fi
}
diff --git a/contrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh b/contrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh
index c505ffd..4630a7c 100755
--- a/contrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh
+++ b/contrib/netbsd-tests/fs/tmpfs/t_vnode_leak.sh
@@ -36,7 +36,15 @@ main_head() {
}
main_body() {
echo "Lowering kern.maxvnodes to 2000"
+ # Begin FreeBSD
+ if true; then
+ sysctl -n kern.maxvnodes > oldvnodes
+ else
+ # End FreeBSD
sysctl kern.maxvnodes | awk '{ print $3; }' >oldvnodes
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
atf_check -s eq:0 -o ignore -e empty sysctl -w kern.maxvnodes=2000
test_mount -o -s$(((4000 + 2) * 4096))
diff --git a/contrib/netbsd-tests/fs/vfs/t_io.c b/contrib/netbsd-tests/fs/vfs/t_io.c
index 67d8657..23c3a15 100644
--- a/contrib/netbsd-tests/fs/vfs/t_io.c
+++ b/contrib/netbsd-tests/fs/vfs/t_io.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_io.c,v 1.12 2013/08/04 11:02:02 pooka Exp $ */
+/* $NetBSD: t_io.c,v 1.16 2015/04/04 12:34:44 riastradh Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -222,6 +222,22 @@ wrrd_after_unlink(const atf_tc_t *tc, const char *mp)
FSTEST_EXIT();
}
+static void
+read_fault(const atf_tc_t *tc, const char *mp)
+{
+ char ch = 123;
+ int fd;
+
+ FSTEST_ENTER();
+ RL(fd = rump_sys_open("file", O_CREAT | O_RDWR, 0777));
+ ATF_REQUIRE_EQ(rump_sys_write(fd, &ch, 1), 1);
+ RL(rump_sys_close(fd));
+ RL(fd = rump_sys_open("file", O_RDONLY | O_SYNC | O_RSYNC));
+ ATF_REQUIRE_ERRNO(EFAULT, rump_sys_read(fd, NULL, 1) == -1);
+ RL(rump_sys_close(fd));
+ FSTEST_EXIT();
+}
+
ATF_TC_FSAPPLY(holywrite, "create a sparse file and fill hole");
ATF_TC_FSAPPLY(extendfile, "check that extending a file works");
ATF_TC_FSAPPLY(extendfile_append, "check that extending a file works "
@@ -232,6 +248,7 @@ ATF_TC_FSAPPLY(overwrite_trunc, "write 64k + truncate + rewrite");
ATF_TC_FSAPPLY(shrinkfile, "shrink file");
ATF_TC_FSAPPLY(read_after_unlink, "contents can be read off disk after unlink");
ATF_TC_FSAPPLY(wrrd_after_unlink, "file can be written and read after unlink");
+ATF_TC_FSAPPLY(read_fault, "read at bad address must return EFAULT");
ATF_TP_ADD_TCS(tp)
{
@@ -245,6 +262,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_FSAPPLY(shrinkfile);
ATF_TP_FSAPPLY(read_after_unlink);
ATF_TP_FSAPPLY(wrrd_after_unlink);
+ ATF_TP_FSAPPLY(read_fault);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/fs/vfs/t_renamerace.c b/contrib/netbsd-tests/fs/vfs/t_renamerace.c
index 70e02f3..809c380 100644
--- a/contrib/netbsd-tests/fs/vfs/t_renamerace.c
+++ b/contrib/netbsd-tests/fs/vfs/t_renamerace.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_renamerace.c,v 1.32 2014/07/29 09:15:48 gson Exp $ */
+/* $NetBSD: t_renamerace.c,v 1.33 2016/05/04 08:30:22 dholland Exp $ */
/*
* Modified for rump and atf from a program supplied
@@ -127,7 +127,7 @@ renamerace(const atf_tc_t *tc, const char *mp)
atf_tc_fail("race did not trigger this time");
if (FSTYPE_MSDOS(tc)) {
- atf_tc_expect_fail("PR kern/44661");
+ atf_tc_expect_fail("PR kern/43626");
/*
* XXX: race does not trigger every time at least
* on amd64/qemu.
diff --git a/contrib/netbsd-tests/fs/vfs/t_unpriv.c b/contrib/netbsd-tests/fs/vfs/t_unpriv.c
index fffffe4..6da771b4 100644
--- a/contrib/netbsd-tests/fs/vfs/t_unpriv.c
+++ b/contrib/netbsd-tests/fs/vfs/t_unpriv.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_unpriv.c,v 1.11 2014/08/29 17:39:18 gson Exp $ */
+/* $NetBSD: t_unpriv.c,v 1.12 2015/04/09 19:51:13 riastradh Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -55,8 +55,6 @@ owner(const atf_tc_t *tc, const char *mp)
rump_pub_lwproc_rfork(RUMP_RFCFDG);
if (rump_sys_setuid(1) == -1)
atf_tc_fail_errno("setuid");
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
if (rump_sys_chown(".", 1, -1) != -1 || errno != EPERM)
atf_tc_fail_errno("chown");
if (rump_sys_chmod(".", 0000) != -1 || errno != EPERM)
diff --git a/contrib/netbsd-tests/fs/vfs/t_vnops.c b/contrib/netbsd-tests/fs/vfs/t_vnops.c
index 66b5505..978fadb 100644
--- a/contrib/netbsd-tests/fs/vfs/t_vnops.c
+++ b/contrib/netbsd-tests/fs/vfs/t_vnops.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_vnops.c,v 1.43 2014/09/09 06:51:00 gson Exp $ */
+/* $NetBSD: t_vnops.c,v 1.58 2016/08/29 02:31:46 kre Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -28,9 +28,11 @@
#include <sys/stat.h>
#include <sys/statvfs.h>
+#include <sys/time.h>
#include <assert.h>
#include <atf-c.h>
+#include <ctype.h>
#include <fcntl.h>
#include <libgen.h>
#include <stdlib.h>
@@ -54,10 +56,10 @@
atf_tc_skip("symlinks not supported by file system")
static char *
-md(char *buf, const char *base, const char *tail)
+md(char *buf, size_t buflen, const char *base, const char *tail)
{
- sprintf(buf, "%s/%s", base, tail);
+ snprintf(buf, buflen, "%s/%s", base, tail);
return buf;
}
@@ -68,11 +70,11 @@ lookup_simple(const atf_tc_t *tc, const char *mountpath)
struct stat sb1, sb2;
strcpy(final, mountpath);
- sprintf(pb, "%s/../%s", mountpath, basename(final));
+ snprintf(pb, sizeof(pb), "%s/../%s", mountpath, basename(final));
if (rump_sys_stat(pb, &sb1) == -1)
atf_tc_fail_errno("stat 1");
- sprintf(pb, "%s/./../%s", mountpath, basename(final));
+ snprintf(pb, sizeof(pb), "%s/./../%s", mountpath, basename(final));
if (rump_sys_stat(pb, &sb2) == -1)
atf_tc_fail_errno("stat 2");
@@ -84,22 +86,38 @@ lookup_complex(const atf_tc_t *tc, const char *mountpath)
{
char pb[MAXPATHLEN];
struct stat sb1, sb2;
+ struct timespec atplus1, onesec;
USES_DIRS;
- if (FSTYPE_UDF(tc))
- atf_tc_expect_fail("PR kern/49033");
-
- sprintf(pb, "%s/dir", mountpath);
+ snprintf(pb, sizeof(pb), "%s/dir", mountpath);
if (rump_sys_mkdir(pb, 0777) == -1)
atf_tc_fail_errno("mkdir");
if (rump_sys_stat(pb, &sb1) == -1)
atf_tc_fail_errno("stat 1");
- sprintf(pb, "%s/./dir/../././dir/.", mountpath);
+ snprintf(pb, sizeof(pb), "%s/./dir/../././dir/.", mountpath);
if (rump_sys_stat(pb, &sb2) == -1)
atf_tc_fail_errno("stat 2");
+ /*
+ * The lookup is permitted to modify the access time of
+ * any directories searched - such a directory is the
+ * subject of this test. Any difference should cause
+ * the 2nd lookup atime tp be >= the first, if it is ==, all is
+ * OK (atime is not required to be modified by the search, or
+ * both references may happen within the came clock tick), if the
+ * 2nd lookup atime is > the first, but not "too much" greater,
+ * just set it back, so the memcmp just below succeeds
+ * (assuming all else is OK).
+ */
+ onesec.tv_sec = 1;
+ onesec.tv_nsec = 0;
+ timespecadd(&sb1.st_atimespec, &onesec, &atplus1);
+ if (timespeccmp(&sb2.st_atimespec, &sb1.st_atimespec, >) &&
+ timespeccmp(&sb2.st_atimespec, &atplus1, <))
+ sb2.st_atimespec = sb1.st_atimespec;
+
if (memcmp(&sb1, &sb2, sizeof(sb1)) != 0) {
printf("what\tsb1\t\tsb2\n");
@@ -118,10 +136,10 @@ lookup_complex(const atf_tc_t *tc, const char *mountpath)
FIELD(st_uid);
FIELD(st_gid);
FIELD(st_rdev);
- TIME(st_atim);
- TIME(st_mtim);
- TIME(st_ctim);
- TIME(st_birthtim);
+ TIME(st_atimespec);
+ TIME(st_mtimespec);
+ TIME(st_ctimespec);
+ TIME(st_birthtimespec);
FIELD(st_size);
FIELD(st_blocks);
FIELD(st_flags);
@@ -132,9 +150,6 @@ lookup_complex(const atf_tc_t *tc, const char *mountpath)
atf_tc_fail("stat results differ, see ouput for more details");
}
- if (FSTYPE_UDF(tc))
- atf_tc_fail("random failure of PR kern/49033 "
- "did not happen this time");
}
static void
@@ -146,7 +161,7 @@ dir_simple(const atf_tc_t *tc, const char *mountpath)
USES_DIRS;
/* check we can create directories */
- sprintf(pb, "%s/dir", mountpath);
+ snprintf(pb, sizeof(pb), "%s/dir", mountpath);
if (rump_sys_mkdir(pb, 0777) == -1)
atf_tc_fail_errno("mkdir");
if (rump_sys_stat(pb, &sb) == -1)
@@ -168,19 +183,17 @@ dir_notempty(const atf_tc_t *tc, const char *mountpath)
USES_DIRS;
/* check we can create directories */
- sprintf(pb, "%s/dir", mountpath);
+ snprintf(pb, sizeof(pb), "%s/dir", mountpath);
if (rump_sys_mkdir(pb, 0777) == -1)
atf_tc_fail_errno("mkdir");
- sprintf(pb2, "%s/dir/file", mountpath);
+ snprintf(pb2, sizeof(pb2), "%s/dir/file", mountpath);
fd = rump_sys_open(pb2, O_RDWR | O_CREAT, 0777);
if (fd == -1)
atf_tc_fail_errno("create file");
rump_sys_close(fd);
rv = rump_sys_rmdir(pb);
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
if (rv != -1 || errno != ENOTEMPTY)
atf_tc_fail("non-empty directory removed succesfully");
@@ -206,9 +219,9 @@ dir_rmdirdotdot(const atf_tc_t *tc, const char *mp)
RL(rump_sys_mkdir("subtest", 0777));
RL(rump_sys_chdir("subtest"));
- md(pb, mp, "test/subtest");
+ md(pb, sizeof(pb), mp, "test/subtest");
RL(rump_sys_rmdir(pb));
- md(pb, mp, "test");
+ md(pb, sizeof(pb), mp, "test");
RL(rump_sys_rmdir(pb));
if (FSTYPE_NFS(tc))
@@ -226,7 +239,7 @@ checkfile(const char *path, struct stat *refp)
struct stat sb;
static int n = 1;
- md(buf, path, "file");
+ md(buf, sizeof(buf), path, "file");
if (rump_sys_stat(buf, &sb) == -1)
atf_tc_fail_errno("cannot stat file %d (%s)", n, buf);
if (memcmp(&sb, refp, sizeof(sb)) != 0)
@@ -245,18 +258,18 @@ rename_dir(const atf_tc_t *tc, const char *mp)
USES_DIRS;
- md(pb1, mp, "dir1");
+ md(pb1, sizeof(pb1), mp, "dir1");
if (rump_sys_mkdir(pb1, 0777) == -1)
atf_tc_fail_errno("mkdir 1");
- md(pb2, mp, "dir2");
+ md(pb2, sizeof(pb2), mp, "dir2");
if (rump_sys_mkdir(pb2, 0777) == -1)
atf_tc_fail_errno("mkdir 2");
- md(pb2, mp, "dir2/subdir");
+ md(pb2, sizeof(pb2), mp, "dir2/subdir");
if (rump_sys_mkdir(pb2, 0777) == -1)
atf_tc_fail_errno("mkdir 3");
- md(pb3, mp, "dir1/file");
+ md(pb3, sizeof(pb3), mp, "dir1/file");
if (rump_sys_mknod(pb3, S_IFREG | 0777, -1) == -1)
atf_tc_fail_errno("create file");
if (rump_sys_stat(pb3, &ref) == -1)
@@ -267,30 +280,28 @@ rename_dir(const atf_tc_t *tc, const char *mp)
*/
/* rename within directory */
- md(pb3, mp, "dir3");
+ md(pb3, sizeof(pb3), mp, "dir3");
if (rump_sys_rename(pb1, pb3) == -1)
atf_tc_fail_errno("rename 1");
checkfile(pb3, &ref);
/* rename directory onto itself (two ways, should fail) */
- md(pb1, mp, "dir3/.");
+ md(pb1, sizeof(pb1), mp, "dir3/.");
if (rump_sys_rename(pb1, pb3) != -1 || errno != EINVAL)
atf_tc_fail_errno("rename 2");
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
if (rump_sys_rename(pb3, pb1) != -1 || errno != EISDIR)
atf_tc_fail_errno("rename 3");
checkfile(pb3, &ref);
/* rename father of directory into directory */
- md(pb1, mp, "dir2/dir");
- md(pb2, mp, "dir2");
+ md(pb1, sizeof(pb1), mp, "dir2/dir");
+ md(pb2, sizeof(pb2), mp, "dir2");
if (rump_sys_rename(pb2, pb1) != -1 || errno != EINVAL)
atf_tc_fail_errno("rename 4");
/* same for grandfather */
- md(pb1, mp, "dir2/subdir/dir2");
+ md(pb1, sizeof(pb1), mp, "dir2/subdir/dir2");
if (rump_sys_rename(pb2, pb1) != -1 || errno != EINVAL)
atf_tc_fail("rename 5");
@@ -301,29 +312,29 @@ rename_dir(const atf_tc_t *tc, const char *mp)
atf_tc_fail("rename 6");
/* cross-directory rename */
- md(pb1, mp, "dir3");
- md(pb2, mp, "dir2/somedir");
+ md(pb1, sizeof(pb1), mp, "dir3");
+ md(pb2, sizeof(pb2), mp, "dir2/somedir");
if (rump_sys_rename(pb1, pb2) == -1)
atf_tc_fail_errno("rename 7");
checkfile(pb2, &ref);
/* move to parent directory */
- md(pb1, mp, "dir2/somedir/../../dir3");
+ md(pb1, sizeof(pb1), mp, "dir2/somedir/../../dir3");
if (rump_sys_rename(pb2, pb1) == -1)
atf_tc_fail_errno("rename 8");
- md(pb1, mp, "dir2/../dir3");
+ md(pb1, sizeof(pb1), mp, "dir2/../dir3");
checkfile(pb1, &ref);
/* atomic cross-directory rename */
- md(pb3, mp, "dir2/subdir");
+ md(pb3, sizeof(pb3), mp, "dir2/subdir");
if (rump_sys_rename(pb1, pb3) == -1)
atf_tc_fail_errno("rename 9");
checkfile(pb3, &ref);
/* rename directory over an empty directory */
- md(pb1, mp, "parent");
- md(pb2, mp, "parent/dir1");
- md(pb3, mp, "parent/dir2");
+ md(pb1, sizeof(pb1), mp, "parent");
+ md(pb2, sizeof(pb2), mp, "parent/dir1");
+ md(pb3, sizeof(pb3), mp, "parent/dir2");
RL(rump_sys_mkdir(pb1, 0777));
RL(rump_sys_mkdir(pb2, 0777));
RL(rump_sys_mkdir(pb3, 0777));
@@ -442,6 +453,78 @@ rename_reg_nodir(const atf_tc_t *tc, const char *mp)
rump_sys_chdir("/");
}
+/* PR kern/50607 */
+static void
+create_many(const atf_tc_t *tc, const char *mp)
+{
+ char buf[64];
+ int nfiles = 2324; /* #Nancy */
+ int i;
+
+ /* takes forever with many files */
+ if (FSTYPE_MSDOS(tc))
+ nfiles /= 4;
+
+ RL(rump_sys_chdir(mp));
+
+ if (FSTYPE_SYSVBFS(tc)) {
+ /* fs doesn't support many files or subdirectories */
+ nfiles = 5;
+ } else {
+ /* msdosfs doesn't like many entries in the root directory */
+ RL(rump_sys_mkdir("subdir", 0777));
+ RL(rump_sys_chdir("subdir"));
+ }
+
+ /* create them */
+#define TESTFN "testfile"
+ for (i = 0; i < nfiles; i++) {
+ int fd;
+
+ snprintf(buf, sizeof(buf), TESTFN "%d", i);
+ RL(fd = rump_sys_open(buf, O_RDWR|O_CREAT|O_EXCL, 0666));
+ RL(rump_sys_close(fd));
+ }
+
+ /* wipe them out */
+ for (i = 0; i < nfiles; i++) {
+ snprintf(buf, sizeof(buf), TESTFN "%d", i);
+ RLF(rump_sys_unlink(buf), "%s", buf);
+ }
+#undef TESTFN
+
+ rump_sys_chdir("/");
+}
+
+/*
+ * Test creating files with one-character names using all possible
+ * character values. Failures to create the file are ignored as the
+ * characters allowed in file names vary by file system, but at least
+ * we can check that the fs does not crash, and if the file is
+ * successfully created, unlinking it should also succeed.
+ */
+static void
+create_nonalphanum(const atf_tc_t *tc, const char *mp)
+{
+ char buf[64];
+ int i;
+
+ RL(rump_sys_chdir(mp));
+
+ for (i = 0; i < 256; i++) {
+ int fd;
+ snprintf(buf, sizeof(buf), "%c", i);
+ fd = rump_sys_open(buf, O_RDWR|O_CREAT|O_EXCL, 0666);
+ if (fd == -1)
+ continue;
+ RLF(rump_sys_close(fd), "%d", fd);
+ RLF(rump_sys_unlink(buf), "%s", buf);
+ }
+ printf("\n");
+
+ rump_sys_chdir("/");
+}
+
static void
create_nametoolong(const atf_tc_t *tc, const char *mp)
{
@@ -563,7 +646,7 @@ symlink_len(const atf_tc_t *tc, const char *mp, size_t len)
USES_SYMLINKS;
- RL(rump_sys_chdir(mp));
+ RLF(rump_sys_chdir(mp), "%s", mp);
buf = malloc(len + 1);
ATF_REQUIRE(buf);
@@ -645,8 +728,6 @@ attrs(const atf_tc_t *tc, const char *mp)
RL(rump_sys_stat(TESTFILE, &sb2));
#define CHECK(a) ATF_REQUIRE_EQ(sb.a, sb2.a)
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
if (!(FSTYPE_MSDOS(tc) || FSTYPE_SYSVBFS(tc))) {
CHECK(st_uid);
CHECK(st_gid);
@@ -684,9 +765,6 @@ fcntl_lock(const atf_tc_t *tc, const char *mp)
RL(fd = rump_sys_open(TESTFILE, O_RDWR | O_CREAT, 0755));
RL(rump_sys_ftruncate(fd, 8192));
- /* PR kern/43321 */
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be broken");
RL(rump_sys_fcntl(fd, F_SETLK, &l));
/* Next, we fork and try to lock the same area */
@@ -820,9 +898,6 @@ fcntl_getlock_pids(const atf_tc_t *tc, const char *mp)
RL(rump_sys_ftruncate(fd[i], sz));
- if (FSTYPE_ZFS(tc))
- atf_tc_expect_fail("PR kern/47656: Test known to be "
- "broken");
if (i < __arraycount(lock)) {
RL(rump_sys_fcntl(fd[i], F_SETLK, &lock[i]));
expect[i].l_pid = pid[i];
@@ -932,9 +1007,6 @@ lstat_symlink(const atf_tc_t *tc, const char *mp)
USES_SYMLINKS;
- if (FSTYPE_V7FS(tc))
- atf_tc_expect_fail("PR kern/48864");
-
FSTEST_ENTER();
src = "source";
@@ -973,6 +1045,11 @@ ATF_TC_FSAPPLY(access_simple, "access(2)");
ATF_TC_FSAPPLY(read_directory, "read(2) on directories");
ATF_TC_FSAPPLY(lstat_symlink, "lstat(2) values for symbolic links");
+#undef FSTEST_IMGSIZE
+#define FSTEST_IMGSIZE (1024*1024*64)
+ATF_TC_FSAPPLY(create_many, "create many directory entries");
+ATF_TC_FSAPPLY(create_nonalphanum, "non-alphanumeric filenames");
+
ATF_TP_ADD_TCS(tp)
{
@@ -984,6 +1061,8 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_FSAPPLY(rename_dir);
ATF_TP_FSAPPLY(rename_dotdot);
ATF_TP_FSAPPLY(rename_reg_nodir);
+ ATF_TP_FSAPPLY(create_many);
+ ATF_TP_FSAPPLY(create_nonalphanum);
ATF_TP_FSAPPLY(create_nametoolong);
ATF_TP_FSAPPLY(create_exist);
ATF_TP_FSAPPLY(rename_nametoolong);
diff --git a/contrib/netbsd-tests/games/t_factor.sh b/contrib/netbsd-tests/games/t_factor.sh
index e2320a2..45a54bc 100755
--- a/contrib/netbsd-tests/games/t_factor.sh
+++ b/contrib/netbsd-tests/games/t_factor.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_factor.sh,v 1.7 2010/11/19 12:31:36 pgoyette Exp $
+# $NetBSD: t_factor.sh,v 1.9 2016/06/27 05:29:32 pgoyette Exp $
#
# Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -27,32 +27,55 @@
expect() {
echo "${2}" >expout
+ ncrypt=$( ldd /usr/games/factor | grep -c -- -lcrypt )
+ if [ "X$3" != "X" -a $ncrypt -eq 0 ] ; then
+ atf_skip "crypto needed for huge non-prime factors - PR bin/23663"
+ fi
atf_check -s eq:0 -o file:expout -e empty /usr/games/factor ${1}
}
-atf_test_case overflow
-overflow_head() {
+atf_test_case overflow1
+overflow1_head() {
atf_set "descr" "Tests for overflow conditions"
atf_set "require.progs" "/usr/games/factor"
}
-overflow_body() {
+overflow1_body() {
expect '8675309' '8675309: 8675309'
+}
+
+atf_test_case overflow2
+overflow2_head() {
+ atf_set "descr" "Tests for overflow conditions"
+ atf_set "require.progs" "/usr/games/factor"
+}
+overflow2_body() {
expect '6172538568' '6172538568: 2 2 2 3 7 17 2161253'
}
-atf_test_case loop
-loop_head() {
+atf_test_case loop1
+loop1_head() {
atf_set "descr" "Tests some cases that once locked the program" \
"in an infinite loop"
atf_set "require.progs" "/usr/games/factor"
}
-loop_body() {
- expect '99999999999991' '99999999999991: 7 13 769231 1428571'
+loop1_body() {
expect '2147483647111311' '2147483647111311: 3 3 3 131 607148331103'
}
+atf_test_case loop2
+loop2_head() {
+ atf_set "descr" "Tests some cases that once locked the program" \
+ "in an infinite loop"
+ atf_set "require.progs" "/usr/games/factor"
+}
+loop2_body() {
+ expect '99999999999991' '99999999999991: 7 13 769231 1428571' Need_Crypto
+}
+
atf_init_test_cases()
{
- atf_add_test_case overflow
- atf_add_test_case loop
+ atf_add_test_case overflow1
+ atf_add_test_case overflow2
+ atf_add_test_case loop1
+ atf_add_test_case loop2
}
diff --git a/contrib/netbsd-tests/h_macros.h b/contrib/netbsd-tests/h_macros.h
index 5dd56de..dd730c9 100644
--- a/contrib/netbsd-tests/h_macros.h
+++ b/contrib/netbsd-tests/h_macros.h
@@ -1,4 +1,4 @@
-/* $NetBSD: h_macros.h,v 1.9 2013/05/17 15:42:09 christos Exp $ */
+/* $NetBSD: h_macros.h,v 1.13 2016/08/20 15:49:08 christos Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -45,13 +45,15 @@
ATF_CHECK_MSG((x) != (v), "%s: %s", #x, strerror(errno))
#define RL(x) REQUIRE_LIBC(x, -1)
+#define RLF(x, fmt, arg) \
+ ATF_CHECK_MSG((x) != -1, "%s [" fmt "]: %s", #x, arg, strerror(errno))
#define RZ(x) \
do { \
int RZ_rv = x; \
ATF_REQUIRE_MSG(RZ_rv == 0, "%s: %s", #x, strerror(RZ_rv)); \
} while (/*CONSTCOND*/0)
-static __inline __printflike(1, 2) void
+__dead static __inline __printflike(1, 2) void
atf_tc_fail_errno(const char *fmt, ...)
{
va_list ap;
@@ -75,7 +77,7 @@ tests_makegarbage(void *space, size_t len)
uint16_t randval;
while (len >= sizeof(randval)) {
- *sb++ = (random() & 0xffff);
+ *sb++ = (uint16_t)random();
len -= sizeof(*sb);
}
randval = (uint16_t)random();
diff --git a/contrib/netbsd-tests/include/sys/t_bitops.c b/contrib/netbsd-tests/include/sys/t_bitops.c
index 7c90da0..6bdeb2b 100644
--- a/contrib/netbsd-tests/include/sys/t_bitops.c
+++ b/contrib/netbsd-tests/include/sys/t_bitops.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_bitops.c,v 1.16 2012/12/07 02:28:19 christos Exp $ */
+/* $NetBSD: t_bitops.c,v 1.19 2015/03/21 05:50:19 isaki Exp $ */
/*-
* Copyright (c) 2011, 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_bitops.c,v 1.16 2012/12/07 02:28:19 christos Exp $");
+__RCSID("$NetBSD: t_bitops.c,v 1.19 2015/03/21 05:50:19 isaki Exp $");
#include <atf-c.h>
@@ -67,7 +67,7 @@ static const struct {
ATF_TC(bitmap_basic);
ATF_TC_HEAD(bitmap_basic, tc)
{
- atf_tc_set_md_var(tc, "descr", "A basic test of __BITMAP_*");
+ atf_tc_set_md_var(tc, "descr", "A basic test of __BITMAP_*");
}
ATF_TC_BODY(bitmap_basic, tc)
@@ -174,65 +174,191 @@ ATF_TC_BODY(ffsfls, tc)
}
}
-ATF_TC(ilog2_basic);
-ATF_TC_HEAD(ilog2_basic, tc)
+ATF_TC(ilog2_32bit);
+ATF_TC_HEAD(ilog2_32bit, tc)
{
- atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for correctness");
+ atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for 32bit variable");
}
-ATF_TC_BODY(ilog2_basic, tc)
+ATF_TC_BODY(ilog2_32bit, tc)
{
- uint64_t i, x;
+ int i;
+ uint32_t x;
- for (i = x = 0; i < 64; i++) {
+ for (i = 0; i < 32; i++) {
+ x = 1 << i;
+ ATF_REQUIRE(ilog2(x) == i);
+ }
+}
+
+ATF_TC(ilog2_64bit);
+ATF_TC_HEAD(ilog2_64bit, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for 64bit variable");
+}
- x = (uint64_t)1 << i;
+ATF_TC_BODY(ilog2_64bit, tc)
+{
+ int i;
+ uint64_t x;
- ATF_REQUIRE(i == (uint64_t)ilog2(x));
+ for (i = 0; i < 64; i++) {
+ x = ((uint64_t)1) << i;
+ ATF_REQUIRE(ilog2(x) == i);
}
}
-ATF_TC(ilog2_log2);
-ATF_TC_HEAD(ilog2_log2, tc)
+ATF_TC(ilog2_const);
+ATF_TC_HEAD(ilog2_const, tc)
{
- atf_tc_set_md_var(tc, "descr", "Test log2(3) vs. ilog2(3)");
+ atf_tc_set_md_var(tc, "descr", "Test ilog2(3) for constant");
}
-ATF_TC_BODY(ilog2_log2, tc)
+ATF_TC_BODY(ilog2_const, tc)
{
-#ifdef __vax__
- atf_tc_skip("Test is unavailable on vax because of lack of log2()");
-#else
- double x, y;
- uint64_t i;
-
/*
- * This may fail under QEMU; see PR misc/44767.
+ * These inlines test __builtin_constant_p() part of ilog2()
+ * at compile time, so don't change it to loop. PR lib/49745
*/
- for (i = 1; i < UINT32_MAX; i += UINT16_MAX) {
-
- x = log2(i);
- y = (double)(ilog2(i));
-
- ATF_REQUIRE(ceil(x) >= y);
-
- if (fabs(floor(x) - y) > 1.0e-40) {
- atf_tc_expect_fail("PR misc/44767");
- atf_tc_fail("log2(%"PRIu64") != "
- "ilog2(%"PRIu64")", i, i);
- }
- }
-#endif
+ ATF_REQUIRE(ilog2(0x0000000000000001ULL) == 0);
+ ATF_REQUIRE(ilog2(0x0000000000000002ULL) == 1);
+ ATF_REQUIRE(ilog2(0x0000000000000004ULL) == 2);
+ ATF_REQUIRE(ilog2(0x0000000000000008ULL) == 3);
+ ATF_REQUIRE(ilog2(0x0000000000000010ULL) == 4);
+ ATF_REQUIRE(ilog2(0x0000000000000020ULL) == 5);
+ ATF_REQUIRE(ilog2(0x0000000000000040ULL) == 6);
+ ATF_REQUIRE(ilog2(0x0000000000000080ULL) == 7);
+ ATF_REQUIRE(ilog2(0x0000000000000100ULL) == 8);
+ ATF_REQUIRE(ilog2(0x0000000000000200ULL) == 9);
+ ATF_REQUIRE(ilog2(0x0000000000000400ULL) == 10);
+ ATF_REQUIRE(ilog2(0x0000000000000800ULL) == 11);
+ ATF_REQUIRE(ilog2(0x0000000000001000ULL) == 12);
+ ATF_REQUIRE(ilog2(0x0000000000002000ULL) == 13);
+ ATF_REQUIRE(ilog2(0x0000000000004000ULL) == 14);
+ ATF_REQUIRE(ilog2(0x0000000000008000ULL) == 15);
+ ATF_REQUIRE(ilog2(0x0000000000010000ULL) == 16);
+ ATF_REQUIRE(ilog2(0x0000000000020000ULL) == 17);
+ ATF_REQUIRE(ilog2(0x0000000000040000ULL) == 18);
+ ATF_REQUIRE(ilog2(0x0000000000080000ULL) == 19);
+ ATF_REQUIRE(ilog2(0x0000000000100000ULL) == 20);
+ ATF_REQUIRE(ilog2(0x0000000000200000ULL) == 21);
+ ATF_REQUIRE(ilog2(0x0000000000400000ULL) == 22);
+ ATF_REQUIRE(ilog2(0x0000000000800000ULL) == 23);
+ ATF_REQUIRE(ilog2(0x0000000001000000ULL) == 24);
+ ATF_REQUIRE(ilog2(0x0000000002000000ULL) == 25);
+ ATF_REQUIRE(ilog2(0x0000000004000000ULL) == 26);
+ ATF_REQUIRE(ilog2(0x0000000008000000ULL) == 27);
+ ATF_REQUIRE(ilog2(0x0000000010000000ULL) == 28);
+ ATF_REQUIRE(ilog2(0x0000000020000000ULL) == 29);
+ ATF_REQUIRE(ilog2(0x0000000040000000ULL) == 30);
+ ATF_REQUIRE(ilog2(0x0000000080000000ULL) == 31);
+ ATF_REQUIRE(ilog2(0x0000000100000000ULL) == 32);
+ ATF_REQUIRE(ilog2(0x0000000200000000ULL) == 33);
+ ATF_REQUIRE(ilog2(0x0000000400000000ULL) == 34);
+ ATF_REQUIRE(ilog2(0x0000000800000000ULL) == 35);
+ ATF_REQUIRE(ilog2(0x0000001000000000ULL) == 36);
+ ATF_REQUIRE(ilog2(0x0000002000000000ULL) == 37);
+ ATF_REQUIRE(ilog2(0x0000004000000000ULL) == 38);
+ ATF_REQUIRE(ilog2(0x0000008000000000ULL) == 39);
+ ATF_REQUIRE(ilog2(0x0000010000000000ULL) == 40);
+ ATF_REQUIRE(ilog2(0x0000020000000000ULL) == 41);
+ ATF_REQUIRE(ilog2(0x0000040000000000ULL) == 42);
+ ATF_REQUIRE(ilog2(0x0000080000000000ULL) == 43);
+ ATF_REQUIRE(ilog2(0x0000100000000000ULL) == 44);
+ ATF_REQUIRE(ilog2(0x0000200000000000ULL) == 45);
+ ATF_REQUIRE(ilog2(0x0000400000000000ULL) == 46);
+ ATF_REQUIRE(ilog2(0x0000800000000000ULL) == 47);
+ ATF_REQUIRE(ilog2(0x0001000000000000ULL) == 48);
+ ATF_REQUIRE(ilog2(0x0002000000000000ULL) == 49);
+ ATF_REQUIRE(ilog2(0x0004000000000000ULL) == 50);
+ ATF_REQUIRE(ilog2(0x0008000000000000ULL) == 51);
+ ATF_REQUIRE(ilog2(0x0010000000000000ULL) == 52);
+ ATF_REQUIRE(ilog2(0x0020000000000000ULL) == 53);
+ ATF_REQUIRE(ilog2(0x0040000000000000ULL) == 54);
+ ATF_REQUIRE(ilog2(0x0080000000000000ULL) == 55);
+ ATF_REQUIRE(ilog2(0x0100000000000000ULL) == 56);
+ ATF_REQUIRE(ilog2(0x0200000000000000ULL) == 57);
+ ATF_REQUIRE(ilog2(0x0400000000000000ULL) == 58);
+ ATF_REQUIRE(ilog2(0x0800000000000000ULL) == 59);
+ ATF_REQUIRE(ilog2(0x1000000000000000ULL) == 60);
+ ATF_REQUIRE(ilog2(0x2000000000000000ULL) == 61);
+ ATF_REQUIRE(ilog2(0x4000000000000000ULL) == 62);
+ ATF_REQUIRE(ilog2(0x8000000000000000ULL) == 63);
+
+ ATF_REQUIRE(ilog2(0x0000000000000003ULL) == 1);
+ ATF_REQUIRE(ilog2(0x0000000000000007ULL) == 2);
+ ATF_REQUIRE(ilog2(0x000000000000000fULL) == 3);
+ ATF_REQUIRE(ilog2(0x000000000000001fULL) == 4);
+ ATF_REQUIRE(ilog2(0x000000000000003fULL) == 5);
+ ATF_REQUIRE(ilog2(0x000000000000007fULL) == 6);
+ ATF_REQUIRE(ilog2(0x00000000000000ffULL) == 7);
+ ATF_REQUIRE(ilog2(0x00000000000001ffULL) == 8);
+ ATF_REQUIRE(ilog2(0x00000000000003ffULL) == 9);
+ ATF_REQUIRE(ilog2(0x00000000000007ffULL) == 10);
+ ATF_REQUIRE(ilog2(0x0000000000000fffULL) == 11);
+ ATF_REQUIRE(ilog2(0x0000000000001fffULL) == 12);
+ ATF_REQUIRE(ilog2(0x0000000000003fffULL) == 13);
+ ATF_REQUIRE(ilog2(0x0000000000007fffULL) == 14);
+ ATF_REQUIRE(ilog2(0x000000000000ffffULL) == 15);
+ ATF_REQUIRE(ilog2(0x000000000001ffffULL) == 16);
+ ATF_REQUIRE(ilog2(0x000000000003ffffULL) == 17);
+ ATF_REQUIRE(ilog2(0x000000000007ffffULL) == 18);
+ ATF_REQUIRE(ilog2(0x00000000000fffffULL) == 19);
+ ATF_REQUIRE(ilog2(0x00000000001fffffULL) == 20);
+ ATF_REQUIRE(ilog2(0x00000000003fffffULL) == 21);
+ ATF_REQUIRE(ilog2(0x00000000007fffffULL) == 22);
+ ATF_REQUIRE(ilog2(0x0000000000ffffffULL) == 23);
+ ATF_REQUIRE(ilog2(0x0000000001ffffffULL) == 24);
+ ATF_REQUIRE(ilog2(0x0000000003ffffffULL) == 25);
+ ATF_REQUIRE(ilog2(0x0000000007ffffffULL) == 26);
+ ATF_REQUIRE(ilog2(0x000000000fffffffULL) == 27);
+ ATF_REQUIRE(ilog2(0x000000001fffffffULL) == 28);
+ ATF_REQUIRE(ilog2(0x000000003fffffffULL) == 29);
+ ATF_REQUIRE(ilog2(0x000000007fffffffULL) == 30);
+ ATF_REQUIRE(ilog2(0x00000000ffffffffULL) == 31);
+ ATF_REQUIRE(ilog2(0x00000001ffffffffULL) == 32);
+ ATF_REQUIRE(ilog2(0x00000003ffffffffULL) == 33);
+ ATF_REQUIRE(ilog2(0x00000007ffffffffULL) == 34);
+ ATF_REQUIRE(ilog2(0x0000000fffffffffULL) == 35);
+ ATF_REQUIRE(ilog2(0x0000001fffffffffULL) == 36);
+ ATF_REQUIRE(ilog2(0x0000003fffffffffULL) == 37);
+ ATF_REQUIRE(ilog2(0x0000007fffffffffULL) == 38);
+ ATF_REQUIRE(ilog2(0x000000ffffffffffULL) == 39);
+ ATF_REQUIRE(ilog2(0x000001ffffffffffULL) == 40);
+ ATF_REQUIRE(ilog2(0x000003ffffffffffULL) == 41);
+ ATF_REQUIRE(ilog2(0x000007ffffffffffULL) == 42);
+ ATF_REQUIRE(ilog2(0x00000fffffffffffULL) == 43);
+ ATF_REQUIRE(ilog2(0x00001fffffffffffULL) == 44);
+ ATF_REQUIRE(ilog2(0x00003fffffffffffULL) == 45);
+ ATF_REQUIRE(ilog2(0x00007fffffffffffULL) == 46);
+ ATF_REQUIRE(ilog2(0x0000ffffffffffffULL) == 47);
+ ATF_REQUIRE(ilog2(0x0001ffffffffffffULL) == 48);
+ ATF_REQUIRE(ilog2(0x0003ffffffffffffULL) == 49);
+ ATF_REQUIRE(ilog2(0x0007ffffffffffffULL) == 50);
+ ATF_REQUIRE(ilog2(0x000fffffffffffffULL) == 51);
+ ATF_REQUIRE(ilog2(0x001fffffffffffffULL) == 52);
+ ATF_REQUIRE(ilog2(0x003fffffffffffffULL) == 53);
+ ATF_REQUIRE(ilog2(0x007fffffffffffffULL) == 54);
+ ATF_REQUIRE(ilog2(0x00ffffffffffffffULL) == 55);
+ ATF_REQUIRE(ilog2(0x01ffffffffffffffULL) == 56);
+ ATF_REQUIRE(ilog2(0x03ffffffffffffffULL) == 57);
+ ATF_REQUIRE(ilog2(0x07ffffffffffffffULL) == 58);
+ ATF_REQUIRE(ilog2(0x0fffffffffffffffULL) == 59);
+ ATF_REQUIRE(ilog2(0x1fffffffffffffffULL) == 60);
+ ATF_REQUIRE(ilog2(0x3fffffffffffffffULL) == 61);
+ ATF_REQUIRE(ilog2(0x7fffffffffffffffULL) == 62);
+ ATF_REQUIRE(ilog2(0xffffffffffffffffULL) == 63);
}
ATF_TP_ADD_TCS(tp)
{
- ATF_TP_ADD_TC(tp, bitmap_basic);
+ ATF_TP_ADD_TC(tp, bitmap_basic);
ATF_TP_ADD_TC(tp, fast_divide32);
ATF_TP_ADD_TC(tp, ffsfls);
- ATF_TP_ADD_TC(tp, ilog2_basic);
- ATF_TP_ADD_TC(tp, ilog2_log2);
+ ATF_TP_ADD_TC(tp, ilog2_32bit);
+ ATF_TP_ADD_TC(tp, ilog2_64bit);
+ ATF_TP_ADD_TC(tp, ilog2_const);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/include/sys/t_cdefs.c b/contrib/netbsd-tests/include/sys/t_cdefs.c
index a473009..14f5cf2 100644
--- a/contrib/netbsd-tests/include/sys/t_cdefs.c
+++ b/contrib/netbsd-tests/include/sys/t_cdefs.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_cdefs.c,v 1.3 2013/09/05 09:01:27 gsutre Exp $ */
+/* $NetBSD: t_cdefs.c,v 1.4 2016/03/16 07:21:36 mrg Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_cdefs.c,v 1.3 2013/09/05 09:01:27 gsutre Exp $");
+__RCSID("$NetBSD: t_cdefs.c,v 1.4 2016/03/16 07:21:36 mrg Exp $");
#include <atf-c.h>
#include <sys/types.h>
@@ -180,34 +180,34 @@ ATF_TC_HEAD(stypefit, tc)
ATF_TC_BODY(stypefit, tc)
{
-#define CHECK(a, b, c) ATF_REQUIRE(!__type_fit(a, b) == c)
-
- CHECK(signed char, -1, 0);
- CHECK(signed char, 1, 0);
- CHECK(signed char, 0x7f, 0);
- CHECK(signed char, 0x80, 1);
- CHECK(signed char, 0xff, 1);
- CHECK(signed char, 0x1ff, 1);
-
- CHECK(signed short, -1, 0);
- CHECK(signed short, 1, 0);
- CHECK(signed short, 0x7fff, 0);
- CHECK(signed short, 0x8000, 1);
- CHECK(signed short, 0xffff, 1);
- CHECK(signed short, 0x1ffff, 1);
-
- CHECK(signed int, -1, 0);
- CHECK(signed int, 1, 0);
- CHECK(signed int, 0x7fffffff, 0);
- CHECK(signed int, 0x80000000, 1);
- CHECK(signed int, 0xffffffff, 1);
- CHECK(signed int, 0x1ffffffffLL, 1);
-
- CHECK(signed long long, -1, 0);
- CHECK(signed long long, 1, 0);
- CHECK(signed long long, 0x7fffffffffffffffLL, 0);
- CHECK(signed long long, 0x8000000000000000LL, 1);
- CHECK(signed long long, 0xffffffffffffffffLL, 1);
+#define CHECK(a, b, c) ATF_REQUIRE(__type_fit(a, b) == c)
+
+ CHECK(signed char, -1, 1);
+ CHECK(signed char, 1, 1);
+ CHECK(signed char, 0x7f, 1);
+ CHECK(signed char, 0x80, 0);
+ CHECK(signed char, 0xff, 0);
+ CHECK(signed char, 0x1ff, 0);
+
+ CHECK(signed short, -1, 1);
+ CHECK(signed short, 1, 1);
+ CHECK(signed short, 0x7fff, 1);
+ CHECK(signed short, 0x8000, 0);
+ CHECK(signed short, 0xffff, 0);
+ CHECK(signed short, 0x1ffff, 0);
+
+ CHECK(signed int, -1, 1);
+ CHECK(signed int, 1, 1);
+ CHECK(signed int, 0x7fffffff, 1);
+ CHECK(signed int, 0x80000000, 0);
+ CHECK(signed int, 0xffffffff, 0);
+ CHECK(signed int, 0x1ffffffffLL, 0);
+
+ CHECK(signed long long, -1, 1);
+ CHECK(signed long long, 1, 1);
+ CHECK(signed long long, 0x7fffffffffffffffLL, 1);
+ CHECK(signed long long, 0x8000000000000000LL, 0);
+ CHECK(signed long long, 0xffffffffffffffffLL, 0);
#undef CHECK
}
@@ -220,34 +220,34 @@ ATF_TC_HEAD(utypefit, tc)
ATF_TC_BODY(utypefit, tc)
{
-#define CHECK(a, b, c) ATF_REQUIRE(!__type_fit(a, b) == c)
-
- CHECK(unsigned char, -1, 1);
- CHECK(unsigned char, 1, 0);
- CHECK(unsigned char, 0x7f, 0);
- CHECK(unsigned char, 0x80, 0);
- CHECK(unsigned char, 0xff, 0);
- CHECK(unsigned char, 0x1ff, 1);
-
- CHECK(unsigned short, -1, 1);
- CHECK(unsigned short, 1, 0);
- CHECK(unsigned short, 0x7fff, 0);
- CHECK(unsigned short, 0x8000, 0);
- CHECK(unsigned short, 0xffff, 0);
- CHECK(unsigned short, 0x1ffff, 1);
-
- CHECK(unsigned int, -1, 1);
- CHECK(unsigned int, 1, 0);
- CHECK(unsigned int, 0x7fffffff, 0);
- CHECK(unsigned int, 0x80000000, 0);
- CHECK(unsigned int, 0xffffffff, 0);
- CHECK(unsigned int, 0x1ffffffffLL, 1);
-
- CHECK(unsigned long long, -1, 1);
- CHECK(unsigned long long, 1, 0);
- CHECK(unsigned long long, 0x7fffffffffffffffULL, 0);
- CHECK(unsigned long long, 0x8000000000000000ULL, 0);
- CHECK(unsigned long long, 0xffffffffffffffffULL, 0);
+#define CHECK(a, b, c) ATF_REQUIRE(__type_fit(a, b) == c)
+
+ CHECK(unsigned char, -1, 0);
+ CHECK(unsigned char, 1, 1);
+ CHECK(unsigned char, 0x7f, 1);
+ CHECK(unsigned char, 0x80, 1);
+ CHECK(unsigned char, 0xff, 1);
+ CHECK(unsigned char, 0x1ff, 0);
+
+ CHECK(unsigned short, -1, 0);
+ CHECK(unsigned short, 1, 1);
+ CHECK(unsigned short, 0x7fff, 1);
+ CHECK(unsigned short, 0x8000, 1);
+ CHECK(unsigned short, 0xffff, 1);
+ CHECK(unsigned short, 0x1ffff, 0);
+
+ CHECK(unsigned int, -1, 0);
+ CHECK(unsigned int, 1, 1);
+ CHECK(unsigned int, 0x7fffffff, 1);
+ CHECK(unsigned int, 0x80000000, 1);
+ CHECK(unsigned int, 0xffffffff, 1);
+ CHECK(unsigned int, 0x1ffffffffLL, 0);
+
+ CHECK(unsigned long long, -1, 0);
+ CHECK(unsigned long long, 1, 1);
+ CHECK(unsigned long long, 0x7fffffffffffffffULL, 1);
+ CHECK(unsigned long long, 0x8000000000000000ULL, 1);
+ CHECK(unsigned long long, 0xffffffffffffffffULL, 1);
#undef CHECK
}
diff --git a/contrib/netbsd-tests/include/sys/t_pslist.c b/contrib/netbsd-tests/include/sys/t_pslist.c
new file mode 100644
index 0000000..f46ed57
--- /dev/null
+++ b/contrib/netbsd-tests/include/sys/t_pslist.c
@@ -0,0 +1,125 @@
+/* $NetBSD: t_pslist.c,v 1.1 2016/04/09 04:39:47 riastradh Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/pslist.h>
+
+#include <atf-c.h>
+
+/*
+ * XXX This is a limited test to make sure the operations behave as
+ * described on a sequential machine. It does nothing to test the
+ * pserialize-safety of any operations.
+ */
+
+ATF_TC(misc);
+ATF_TC_HEAD(misc, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "pserialize-safe list tests");
+}
+ATF_TC_BODY(misc, tc)
+{
+ struct pslist_head h = PSLIST_INITIALIZER;
+ struct element {
+ unsigned i;
+ struct pslist_entry entry;
+ } elements[] = {
+ { .i = 0, .entry = PSLIST_ENTRY_INITIALIZER },
+ { .i = 1 },
+ { .i = 2 },
+ { .i = 3 },
+ { .i = 4 },
+ { .i = 5 },
+ { .i = 6 },
+ { .i = 7 },
+ };
+ struct element *element;
+ unsigned i;
+
+ /* Check PSLIST_INITIALIZER is destroyable. */
+ PSLIST_DESTROY(&h);
+ PSLIST_INIT(&h);
+
+ /* Check PSLIST_ENTRY_INITIALIZER is destroyable. */
+ PSLIST_ENTRY_DESTROY(&elements[0], entry);
+
+ for (i = 0; i < __arraycount(elements); i++)
+ PSLIST_ENTRY_INIT(&elements[i], entry);
+
+ PSLIST_WRITER_INSERT_HEAD(&h, &elements[4], entry);
+ PSLIST_WRITER_INSERT_BEFORE(&elements[4], &elements[2], entry);
+ PSLIST_WRITER_INSERT_BEFORE(&elements[4], &elements[3], entry);
+ PSLIST_WRITER_INSERT_BEFORE(&elements[2], &elements[1], entry);
+ PSLIST_WRITER_INSERT_HEAD(&h, &elements[0], entry);
+ PSLIST_WRITER_INSERT_AFTER(&elements[4], &elements[5], entry);
+ PSLIST_WRITER_INSERT_AFTER(&elements[5], &elements[7], entry);
+ PSLIST_WRITER_INSERT_AFTER(&elements[5], &elements[6], entry);
+
+ PSLIST_WRITER_REMOVE(&elements[0], entry);
+ ATF_CHECK(elements[0].entry.ple_next != NULL);
+ PSLIST_ENTRY_DESTROY(&elements[0], entry);
+
+ PSLIST_WRITER_REMOVE(&elements[4], entry);
+ ATF_CHECK(elements[4].entry.ple_next != NULL);
+ PSLIST_ENTRY_DESTROY(&elements[4], entry);
+
+ PSLIST_ENTRY_INIT(&elements[0], entry);
+ PSLIST_WRITER_INSERT_HEAD(&h, &elements[0], entry);
+
+ PSLIST_ENTRY_INIT(&elements[4], entry);
+ PSLIST_WRITER_INSERT_AFTER(&elements[3], &elements[4], entry);
+
+ i = 0;
+ PSLIST_WRITER_FOREACH(element, &h, struct element, entry) {
+ ATF_CHECK_EQ(i, element->i);
+ i++;
+ }
+ i = 0;
+ PSLIST_READER_FOREACH(element, &h, struct element, entry) {
+ ATF_CHECK_EQ(i, element->i);
+ i++;
+ }
+
+ while ((element = PSLIST_WRITER_FIRST(&h, struct element, entry))
+ != NULL) {
+ PSLIST_WRITER_REMOVE(element, entry);
+ PSLIST_ENTRY_DESTROY(element, entry);
+ }
+
+ PSLIST_DESTROY(&h);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, misc);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/include/sys/t_socket.c b/contrib/netbsd-tests/include/sys/t_socket.c
index ad4d2e6..f60941c 100644
--- a/contrib/netbsd-tests/include/sys/t_socket.c
+++ b/contrib/netbsd-tests/include/sys/t_socket.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_socket.c,v 1.3 2013/10/19 17:45:00 christos Exp $ */
+/* $NetBSD: t_socket.c,v 1.4 2015/02/27 08:30:30 martin Exp $ */
#include <sys/types.h>
#include <sys/mount.h>
@@ -74,7 +74,7 @@ ATF_TC(cmsg_sendfd);
ATF_TC_HEAD(cmsg_sendfd, tc)
{
atf_tc_set_md_var(tc, "descr", "Checks that fd passing works");
- atf_tc_set_md_var(tc, "timeout", "2");
+ atf_tc_set_md_var(tc, "timeout", "10");
}
ATF_TC_BODY(cmsg_sendfd, tc)
diff --git a/contrib/netbsd-tests/include/t_paths.c b/contrib/netbsd-tests/include/t_paths.c
index 653a70b..52a150e 100644
--- a/contrib/netbsd-tests/include/t_paths.c
+++ b/contrib/netbsd-tests/include/t_paths.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_paths.c,v 1.14 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_paths.c,v 1.16 2015/05/07 06:23:23 pgoyette Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_paths.c,v 1.14 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_paths.c,v 1.16 2015/05/07 06:23:23 pgoyette Exp $");
#include <sys/param.h>
#include <sys/stat.h>
@@ -47,6 +47,7 @@ __RCSID("$NetBSD: t_paths.c,v 1.14 2014/11/04 00:20:19 justin Exp $");
#define PATH_DIR __BIT(1) /* A directory */
#define PATH_FILE __BIT(2) /* A file */
#define PATH_ROOT __BIT(3) /* Access for root only */
+#define PATH_OPT __BIT(3) /* Optional, ENODEV if not supported */
static const struct {
const char *path;
@@ -82,7 +83,7 @@ static const struct {
{ _PATH_MIXER, PATH_DEV },
{ _PATH_MIXER0, PATH_DEV },
{ _PATH_NOLOGIN, PATH_FILE },
- { _PATH_POWER, PATH_DEV | PATH_ROOT },
+ { _PATH_POWER, PATH_DEV | PATH_ROOT | PATH_OPT },
{ _PATH_PRINTCAP, PATH_FILE },
{ _PATH_PUD, PATH_DEV | PATH_ROOT },
{ _PATH_PUFFS, PATH_DEV | PATH_ROOT },
@@ -92,12 +93,13 @@ static const struct {
{ _PATH_SKEYKEYS, PATH_FILE | PATH_ROOT },
{ _PATH_SOUND, PATH_DEV },
{ _PATH_SOUND0, PATH_DEV },
- { _PATH_SYSMON, PATH_DEV },
+ { _PATH_SYSMON, PATH_DEV | PATH_OPT },
{ _PATH_TTY, PATH_DEV },
{ _PATH_UNIX, PATH_FILE | PATH_ROOT },
{ _PATH_URANDOM, PATH_DEV },
{ _PATH_VIDEO, PATH_DEV },
{ _PATH_VIDEO0, PATH_DEV },
+ { _PATH_WATCHDOG, PATH_DEV | PATH_OPT },
{ _PATH_DEV, PATH_DIR },
{ _PATH_DEV_PTS, PATH_DIR },
@@ -143,13 +145,22 @@ ATF_TC_BODY(paths, tc)
switch (errno) {
+ case ENODEV:
+ if ((paths[i].flags & PATH_OPT) == 0) {
+
+ atf_tc_fail("Required path %s does "
+ "not exist", paths[i].path);
+ }
+ break;
+
case EPERM: /* FALLTHROUGH */
case EACCES: /* FALLTHROUGH */
if ((paths[i].flags & PATH_ROOT) == 0) {
- atf_tc_fail("UID %u failed to open %s",
- (uint32_t)uid, paths[i].path);
+ atf_tc_fail("UID %u failed to open %s, "
+ "error %d", (uint32_t)uid,
+ paths[i].path, errno);
}
case EBUSY: /* FALLTHROUGH */
diff --git a/contrib/netbsd-tests/ipf/expected/n14 b/contrib/netbsd-tests/ipf/expected/n14
index 7b1a19e..14e1401 100644
--- a/contrib/netbsd-tests/ipf/expected/n14
+++ b/contrib/netbsd-tests/ipf/expected/n14
@@ -11,9 +11,9 @@ RDR 10.1.1.253 80 <- -> 203.1.1.1 80 [10.2.2.6 2000]
RDR 10.1.1.254 80 <- -> 203.1.1.1 80 [10.2.2.5 2000]
Hostmap table:
-10.2.2.7,203.1.1.1 -> 254.1.1.10,0.0.0.0 (use = 1)
-10.2.2.6,203.1.1.1 -> 253.1.1.10,0.0.0.0 (use = 1)
-10.2.2.5,203.1.1.1 -> 254.1.1.10,0.0.0.0 (use = 1)
+10.2.2.7,203.1.1.1 -> 10.1.1.254,0.0.0.0 (use = 1)
+10.2.2.6,203.1.1.1 -> 10.1.1.253,0.0.0.0 (use = 1)
+10.2.2.5,203.1.1.1 -> 10.1.1.254,0.0.0.0 (use = 1)
List of active state sessions:
List of configured pools
List of configured hash tables
diff --git a/contrib/netbsd-tests/ipf/expected/n14_6 b/contrib/netbsd-tests/ipf/expected/n14_6
index b999ee97..c177b62 100644
--- a/contrib/netbsd-tests/ipf/expected/n14_6
+++ b/contrib/netbsd-tests/ipf/expected/n14_6
@@ -11,9 +11,9 @@ RDR 10:1:1::253 80 <- -> 203:0:1::1:1 80 [10::2:2:6 2000]
RDR 10:1:1::254 80 <- -> 203:0:1::1:1 80 [10::2:2:5 2000]
Hostmap table:
-10::2:2:7,203:0:1:0:0:0:1:1 -> 254:1:1::10,any (use = 1)
-10::2:2:6,203:0:1:0:0:0:1:1 -> 253:0:1:0:0:0:1:10,any (use = 1)
-10::2:2:5,203:0:1:0:0:0:1:1 -> 254:1:1::10,any (use = 3)
+10::2:2:7,203:0:1:0:0:0:1:1 -> 10:1:1::254,any (use = 1)
+10::2:2:6,203:0:1:0:0:0:1:1 -> 10:0:1:0:0:0:1:253,any (use = 1)
+10::2:2:5,203:0:1:0:0:0:1:1 -> 10:1:1::254,any (use = 3)
List of active state sessions:
List of configured pools
List of configured hash tables
diff --git a/contrib/netbsd-tests/ipf/t_filter_parse.sh b/contrib/netbsd-tests/ipf/t_filter_parse.sh
index f44db7d..a253088 100755
--- a/contrib/netbsd-tests/ipf/t_filter_parse.sh
+++ b/contrib/netbsd-tests/ipf/t_filter_parse.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_filter_parse.sh,v 1.11 2014/06/29 09:27:58 darrenr Exp $
+# $NetBSD: t_filter_parse.sh,v 1.12 2014/12/06 19:31:25 dholland Exp $
#
# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -133,3 +133,4 @@ atf_init_test_cases()
atf_add_test_case i22
atf_add_test_case i23
}
+
diff --git a/contrib/netbsd-tests/ipf/t_nat_exec.sh b/contrib/netbsd-tests/ipf/t_nat_exec.sh
index 78110dc..ad99a84 100755
--- a/contrib/netbsd-tests/ipf/t_nat_exec.sh
+++ b/contrib/netbsd-tests/ipf/t_nat_exec.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_nat_exec.sh,v 1.20 2014/07/15 20:00:23 martin Exp $
+# $NetBSD: t_nat_exec.sh,v 1.22 2015/12/26 08:01:58 pgoyette Exp $
#
# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -71,9 +71,9 @@ test_case n8 nattest hex hex -T update_ipid=0
test_case n9 nattest hex hex -T update_ipid=0
test_case n10 nattest hex hex -T update_ipid=0
test_case n11 nattest text text
-failing_test_case n12 nattest "Known to be broken" hex hex -T update_ipid=0 -v
+test_case n12 nattest hex hex -T update_ipid=0
test_case n13 nattest text text
-failing_test_case_be n14 nattest "See PR kern/47665" text text
+test_case n14 nattest text text
test_case n15 nattest text text -T update_ipid=0
test_case n16 nattest hex hex -D
test_case n17 nattest hex hex -D
diff --git a/contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c b/contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c
index 5908547..19c7b02 100644
--- a/contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c
+++ b/contrib/netbsd-tests/kernel/kqueue/read/t_fifo.c
@@ -78,7 +78,11 @@ ATF_TC_BODY(fifo, tc)
RL(n = kevent(kq, NULL, 0, event, 1, NULL));
(void)printf("kevent num %d filt %d flags: %#x, fflags: %#x, "
+#ifdef __FreeBSD__
+ "data: %" PRIdPTR "\n", n, event[0].filter, event[0].flags,
+#else
"data: %" PRId64 "\n", n, event[0].filter, event[0].flags,
+#endif
event[0].fflags, event[0].data);
ATF_REQUIRE_EQ(event[0].filter, EVFILT_READ);
diff --git a/contrib/netbsd-tests/kernel/kqueue/read/t_file.c b/contrib/netbsd-tests/kernel/kqueue/read/t_file.c
index 2335172..80479af 100644
--- a/contrib/netbsd-tests/kernel/kqueue/read/t_file.c
+++ b/contrib/netbsd-tests/kernel/kqueue/read/t_file.c
@@ -111,7 +111,11 @@ ATF_TC_BODY(file, tc)
num += n;
(void)printf("kevent num %d flags: %#x, fflags: %#x, data: "
+#ifdef __FreeBSD__
+ "%" PRIdPTR "\n", n, event[0].flags, event[0].fflags,
+#else
"%" PRId64 "\n", n, event[0].flags, event[0].fflags,
+#endif
event[0].data);
if (event[0].data < 0)
diff --git a/contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c b/contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c
index d8e05f2..2cdd015 100644
--- a/contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c
+++ b/contrib/netbsd-tests/kernel/kqueue/read/t_pipe.c
@@ -67,7 +67,11 @@ ATF_TC_BODY(pipe, tc)
RL(n = kevent(kq, NULL, 0, event, 1, NULL));
(void)printf("kevent num %d flags: %#x, fflags: %#x, data: "
+#ifdef __FreeBSD__
+ "%" PRIdPTR "\n", n, event[0].flags, event[0].fflags, event[0].data);
+#else
"%" PRId64 "\n", n, event[0].flags, event[0].fflags, event[0].data);
+#endif
RL(n = read(fds[0], buffer, event[0].data));
buffer[n] = '\0';
diff --git a/contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c b/contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c
index 3a42fd3..57ccf92 100644
--- a/contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c
+++ b/contrib/netbsd-tests/kernel/kqueue/read/t_ttypty.c
@@ -103,7 +103,11 @@ h_check(bool check_master)
RL(n = kevent(kq, NULL, 0, event, 1, NULL));
(void)printf("kevent num %d filt %d flags: %#x, fflags: %#x, "
+#ifdef __FreeBSD__
+ "data: %" PRIdPTR "\n", n, event[0].filter, event[0].flags,
+#else
"data: %" PRId64 "\n", n, event[0].filter, event[0].flags,
+#endif
event[0].fflags, event[0].data);
ATF_REQUIRE_EQ(event[0].filter, EVFILT_READ);
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_ioctl.c b/contrib/netbsd-tests/kernel/kqueue/t_ioctl.c
index 8ed5a79..d996fdf 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_ioctl.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_ioctl.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ioctl.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $ */
+/* $NetBSD: t_ioctl.c,v 1.2 2015/01/14 22:22:32 christos Exp $ */
/*-
* Copyright (c) 2002, 2008 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_ioctl.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $");
+__RCSID("$NetBSD: t_ioctl.c,v 1.2 2015/01/14 22:22:32 christos Exp $");
#include <sys/event.h>
#include <sys/ioctl.h>
@@ -53,7 +53,8 @@ ATF_TC_BODY(kfilter_byfilter, tc)
{
char buf[32];
struct kfilter_mapping km;
- int i, kq;
+ int kq;
+ uint32_t i;
RL(kq = kqueue());
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_proc1.c b/contrib/netbsd-tests/kernel/kqueue/t_proc1.c
index e755309..aa806ba 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_proc1.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_proc1.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_proc1.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $ */
+/* $NetBSD: t_proc1.c,v 1.2 2015/01/14 22:22:32 christos Exp $ */
/*-
* Copyright (c) 2002, 2008 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_proc1.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $");
+__RCSID("$NetBSD: t_proc1.c,v 1.2 2015/01/14 22:22:32 christos Exp $");
/*
* this also used to trigger problem fixed in
@@ -99,7 +99,8 @@ ATF_TC_BODY(proc1, tc)
{
struct kevent event[1];
pid_t pid;
- int kq, want, status;
+ int kq, status;
+ u_int want;
RL(kq = kqueue());
@@ -112,7 +113,7 @@ ATF_TC_BODY(proc1, tc)
(void)sleep(1); /* give child some time to come up */
- event[0].ident = pid;
+ event[0].ident = (uintptr_t)pid;
event[0].filter = EVFILT_PROC;
event[0].flags = EV_ADD | EV_ENABLE;
event[0].fflags = NOTE_EXIT | NOTE_FORK | NOTE_EXEC; /* | NOTE_TRACK;*/
@@ -138,7 +139,11 @@ ATF_TC_BODY(proc1, tc)
printf(" NOTE_FORK");
}
if (event[0].fflags & NOTE_CHILD)
+#ifdef __FreeBSD__
+ printf(" NOTE_CHILD, parent = %" PRIdPTR, event[0].data);
+#else
printf(" NOTE_CHILD, parent = %" PRId64, event[0].data);
+#endif
printf("\n");
}
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_proc2.c b/contrib/netbsd-tests/kernel/kqueue/t_proc2.c
index 54769d6..2d8d7f7 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_proc2.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_proc2.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_proc2.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $ */
+/* $NetBSD: t_proc2.c,v 1.2 2015/01/14 22:22:32 christos Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -32,8 +32,11 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_proc2.c,v 1.1 2009/02/20 21:39:57 jmmv Exp $");
+__RCSID("$NetBSD: t_proc2.c,v 1.2 2015/01/14 22:22:32 christos Exp $");
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#endif
#include <sys/event.h>
#include <sys/time.h>
#include <sys/types.h>
@@ -106,7 +109,8 @@ ATF_TC_BODY(proc2, tc)
/* NOTREACHED */
}
- EV_SET(&ke, pid, EVFILT_PROC, EV_ADD, NOTE_FORK|NOTE_TRACK, 0, 0);
+ EV_SET(&ke, (uintptr_t)pid, EVFILT_PROC, EV_ADD, NOTE_FORK|NOTE_TRACK,
+ 0, 0);
RL(kevent(kq, &ke, 1, NULL, 0, &timeout));
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_proc3.c b/contrib/netbsd-tests/kernel/kqueue/t_proc3.c
index 3cb9ae5..eac2f9c 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_proc3.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_proc3.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_proc3.c,v 1.1 2012/11/17 21:55:24 joerg Exp $ */
+/* $NetBSD: t_proc3.c,v 1.2 2015/01/14 22:22:32 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,8 +30,11 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_proc3.c,v 1.1 2012/11/17 21:55:24 joerg Exp $");
+__RCSID("$NetBSD: t_proc3.c,v 1.2 2015/01/14 22:22:32 christos Exp $");
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#endif
#include <sys/event.h>
#include <sys/time.h>
#include <sys/types.h>
@@ -63,7 +66,7 @@ ATF_TC_BODY(proc3, tc)
RL(kq = kqueue());
- EV_SET(&ke, getpid(), EVFILT_PROC, EV_ADD, NOTE_TRACK, 0, 0);
+ EV_SET(&ke, (uintptr_t)getpid(), EVFILT_PROC, EV_ADD, NOTE_TRACK, 0, 0);
RL(kevent(kq, &ke, 1, NULL, 0, NULL));
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_sig.c b/contrib/netbsd-tests/kernel/kqueue/t_sig.c
index 4fc0758..ebbd76e 100644
--- a/contrib/netbsd-tests/kernel/kqueue/t_sig.c
+++ b/contrib/netbsd-tests/kernel/kqueue/t_sig.c
@@ -34,6 +34,9 @@ __COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
__RCSID("$NetBSD: t_sig.c,v 1.2 2010/11/03 16:10:20 christos Exp $");
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#endif
#include <sys/event.h>
#include <sys/ioctl.h>
#include <sys/param.h>
@@ -60,9 +63,13 @@ ATF_TC_HEAD(sig, tc)
ATF_TC_BODY(sig, tc)
{
struct timespec timeout;
+#ifdef __NetBSD__
struct kfilter_mapping km;
+#endif
struct kevent event[1];
+#ifdef __NetBSD__
char namebuf[32];
+#endif
pid_t pid, child;
int kq, n, num, status;
@@ -84,16 +91,22 @@ ATF_TC_BODY(sig, tc)
RL(kq = kqueue());
+#ifdef __NetBSD__
(void)strlcpy(namebuf, "EVFILT_SIGNAL", sizeof(namebuf));
km.name = namebuf;
RL(ioctl(kq, KFILTER_BYNAME, &km));
(void)printf("got %d as filter number for `%s'.\n", km.filter, km.name);
+#endif
/* ignore the signal to avoid taking it for real */
REQUIRE_LIBC(signal(SIGUSR1, SIG_IGN), SIG_ERR);
event[0].ident = SIGUSR1;
+#ifdef __NetBSD__
event[0].filter = km.filter;
+#else
+ event[0].filter = EVFILT_SIGNAL;
+#endif
event[0].flags = EV_ADD | EV_ENABLE;
RL(kevent(kq, event, 1, NULL, 0, NULL));
@@ -117,7 +130,11 @@ ATF_TC_BODY(sig, tc)
if (n == 0)
continue;
+#ifdef __FreeBSD__
+ (void)printf("sig: kevent flags: 0x%x, data: %" PRIdPTR " (# "
+#else
(void)printf("sig: kevent flags: 0x%x, data: %" PRId64 " (# "
+#endif
"times signal posted)\n", event[0].flags, event[0].data);
}
diff --git a/contrib/netbsd-tests/kernel/kqueue/t_vnode.c b/contrib/netbsd-tests/kernel/kqueue/t_vnode.c
new file mode 100644
index 0000000..06ef683
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/kqueue/t_vnode.c
@@ -0,0 +1,536 @@
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#endif
+#include <sys/event.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+/*
+ * Test cases for events triggered by manipulating a target directory
+ * content. Using EVFILT_VNODE filter on the target directory descriptor.
+ *
+ */
+
+static const char *dir_target = "foo";
+static const char *dir_inside1 = "foo/bar1";
+static const char *dir_inside2 = "foo/bar2";
+static const char *dir_outside = "bar";
+static const char *file_inside1 = "foo/baz1";
+static const char *file_inside2 = "foo/baz2";
+static const char *file_outside = "qux";
+static const struct timespec ts = {0, 0};
+static int kq = -1;
+static int target = -1;
+
+int init_target(void);
+int init_kqueue(void);
+int create_file(const char *);
+void cleanup(void);
+
+int
+init_target(void)
+{
+ if (mkdir(dir_target, S_IRWXU) < 0) {
+ return -1;
+ }
+ target = open(dir_target, O_RDONLY, 0);
+ return target;
+}
+
+int
+init_kqueue(void)
+{
+ struct kevent eventlist[1];
+
+ kq = kqueue();
+ if (kq < 0) {
+ return -1;
+ }
+ EV_SET(&eventlist[0], (uintptr_t)target, EVFILT_VNODE,
+ EV_ADD | EV_ONESHOT, NOTE_DELETE |
+ NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB |
+ NOTE_LINK | NOTE_RENAME | NOTE_REVOKE, 0, 0);
+ return kevent(kq, eventlist, 1, NULL, 0, NULL);
+}
+
+int
+create_file(const char *file)
+{
+ int fd;
+
+ fd = open(file, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
+ if (fd < 0) {
+ return -1;
+ }
+ return close(fd);
+}
+
+void
+cleanup(void)
+{
+ (void)unlink(file_inside1);
+ (void)unlink(file_inside2);
+ (void)unlink(file_outside);
+ (void)rmdir(dir_inside1);
+ (void)rmdir(dir_inside2);
+ (void)rmdir(dir_outside);
+ (void)rmdir(dir_target);
+ (void)close(kq);
+ (void)close(target);
+}
+
+ATF_TC_WITH_CLEANUP(dir_no_note_link_create_file_in);
+ATF_TC_HEAD(dir_no_note_link_create_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) does not return NOTE_LINK for the directory "
+ "'foo' if a file 'foo/baz' is created.");
+}
+ATF_TC_BODY(dir_no_note_link_create_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, 0);
+}
+ATF_TC_CLEANUP(dir_no_note_link_create_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_no_note_link_delete_file_in);
+ATF_TC_HEAD(dir_no_note_link_delete_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) does not return NOTE_LINK for the directory "
+ "'foo' if a file 'foo/baz' is deleted.");
+}
+ATF_TC_BODY(dir_no_note_link_delete_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(unlink(file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, 0);
+}
+ATF_TC_CLEANUP(dir_no_note_link_delete_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_no_note_link_mv_dir_within);
+ATF_TC_HEAD(dir_no_note_link_mv_dir_within, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) does not return NOTE_LINK for the directory "
+ "'foo' if a directory 'foo/bar' is renamed to 'foo/baz'.");
+}
+ATF_TC_BODY(dir_no_note_link_mv_dir_within, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_inside1, dir_inside2) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, 0);
+}
+ATF_TC_CLEANUP(dir_no_note_link_mv_dir_within, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_no_note_link_mv_file_within);
+ATF_TC_HEAD(dir_no_note_link_mv_file_within, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) does not return NOTE_LINK for the directory "
+ "'foo' if a file 'foo/baz' is renamed to 'foo/qux'.");
+}
+ATF_TC_BODY(dir_no_note_link_mv_file_within, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(file_inside1, file_inside2) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, 0);
+}
+ATF_TC_CLEANUP(dir_no_note_link_mv_file_within, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_link_create_dir_in);
+ATF_TC_HEAD(dir_note_link_create_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_LINK for the directory "
+ "'foo' if a directory 'foo/bar' is created.");
+}
+ATF_TC_BODY(dir_note_link_create_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, NOTE_LINK);
+}
+ATF_TC_CLEANUP(dir_note_link_create_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_link_delete_dir_in);
+ATF_TC_HEAD(dir_note_link_delete_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_LINK for the directory "
+ "'foo' if a directory 'foo/bar' is deleted.");
+}
+ATF_TC_BODY(dir_note_link_delete_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rmdir(dir_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, NOTE_LINK);
+}
+ATF_TC_CLEANUP(dir_note_link_delete_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_link_mv_dir_in);
+ATF_TC_HEAD(dir_note_link_mv_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_LINK for the directory "
+ "'foo' if a directory 'bar' is renamed to 'foo/bar'.");
+}
+ATF_TC_BODY(dir_note_link_mv_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_outside, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_outside, dir_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, NOTE_LINK);
+}
+ATF_TC_CLEANUP(dir_note_link_mv_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_link_mv_dir_out);
+ATF_TC_HEAD(dir_note_link_mv_dir_out, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_LINK for the directory "
+ "'foo' if a directory 'foo/bar' is renamed to 'bar'.");
+}
+ATF_TC_BODY(dir_note_link_mv_dir_out, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_inside1, dir_outside) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_LINK, NOTE_LINK);
+}
+ATF_TC_CLEANUP(dir_note_link_mv_dir_out, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_create_dir_in);
+ATF_TC_HEAD(dir_note_write_create_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'foo/bar' is created.");
+}
+ATF_TC_BODY(dir_note_write_create_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_create_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_create_file_in);
+ATF_TC_HEAD(dir_note_write_create_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'foo/baz' is created.");
+}
+ATF_TC_BODY(dir_note_write_create_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_create_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_delete_dir_in);
+ATF_TC_HEAD(dir_note_write_delete_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'foo/bar' is deleted.");
+}
+ATF_TC_BODY(dir_note_write_delete_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rmdir(dir_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_delete_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_delete_file_in);
+ATF_TC_HEAD(dir_note_write_delete_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'foo/baz' is deleted.");
+}
+ATF_TC_BODY(dir_note_write_delete_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(unlink(file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_delete_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_dir_in);
+ATF_TC_HEAD(dir_note_write_mv_dir_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'bar' is renamed to 'foo/bar'.");
+}
+ATF_TC_BODY(dir_note_write_mv_dir_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_outside, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_outside, dir_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_dir_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_dir_out);
+ATF_TC_HEAD(dir_note_write_mv_dir_out, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'foo/bar' is renamed to 'bar'.");
+}
+ATF_TC_BODY(dir_note_write_mv_dir_out, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_inside1, dir_outside) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_dir_out, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_dir_within);
+ATF_TC_HEAD(dir_note_write_mv_dir_within, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a directory 'foo/bar' is renamed to 'foo/baz'.");
+}
+ATF_TC_BODY(dir_note_write_mv_dir_within, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(mkdir(dir_inside1, S_IRWXU) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(dir_inside1, dir_inside2) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_dir_within, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_file_in);
+ATF_TC_HEAD(dir_note_write_mv_file_in, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'qux' is renamed to 'foo/baz'.");
+}
+ATF_TC_BODY(dir_note_write_mv_file_in, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_outside) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(file_outside, file_inside1) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_file_in, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_file_out);
+ATF_TC_HEAD(dir_note_write_mv_file_out, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'foo/baz' is renamed to 'qux'.");
+}
+ATF_TC_BODY(dir_note_write_mv_file_out, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(file_inside1, file_outside) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_file_out, tc)
+{
+ cleanup();
+}
+
+ATF_TC_WITH_CLEANUP(dir_note_write_mv_file_within);
+ATF_TC_HEAD(dir_note_write_mv_file_within, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "This test case ensures "
+ "that kevent(2) returns NOTE_WRITE for the directory "
+ "'foo' if a file 'foo/baz' is renamed to 'foo/qux'.");
+}
+ATF_TC_BODY(dir_note_write_mv_file_within, tc)
+{
+ struct kevent changelist[1];
+
+ ATF_REQUIRE(init_target() != -1);
+ ATF_REQUIRE(create_file(file_inside1) != -1);
+ ATF_REQUIRE(init_kqueue() != -1);
+
+ ATF_REQUIRE(rename(file_inside1, file_inside2) != -1);
+ ATF_REQUIRE(kevent(kq, NULL, 0, changelist, 1, &ts) != -1);
+ ATF_CHECK_EQ(changelist[0].fflags & NOTE_WRITE, NOTE_WRITE);
+}
+ATF_TC_CLEANUP(dir_note_write_mv_file_within, tc)
+{
+ cleanup();
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, dir_no_note_link_create_file_in);
+ ATF_TP_ADD_TC(tp, dir_no_note_link_delete_file_in);
+ ATF_TP_ADD_TC(tp, dir_no_note_link_mv_dir_within);
+ ATF_TP_ADD_TC(tp, dir_no_note_link_mv_file_within);
+ ATF_TP_ADD_TC(tp, dir_note_link_create_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_link_delete_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_link_mv_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_link_mv_dir_out);
+ ATF_TP_ADD_TC(tp, dir_note_write_create_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_create_file_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_delete_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_delete_file_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_dir_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_dir_out);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_dir_within);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_file_in);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_file_out);
+ ATF_TP_ADD_TC(tp, dir_note_write_mv_file_within);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/kernel/msg.h b/contrib/netbsd-tests/kernel/msg.h
new file mode 100644
index 0000000..547400e
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/msg.h
@@ -0,0 +1,136 @@
+/* $NetBSD: msg.h,v 1.1 2016/12/05 20:10:10 christos Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+struct msg_fds {
+ int pfd[2];
+ int cfd[2];
+};
+
+#define CLOSEFD(fd) do { \
+ if (fd != -1) { \
+ close(fd); \
+ fd = -1; \
+ } \
+} while (/*CONSTCOND*/ 0)
+
+static int
+msg_open(struct msg_fds *fds)
+{
+ if (pipe(fds->pfd) == -1)
+ return -1;
+ if (pipe(fds->cfd) == -1) {
+ close(fds->pfd[0]);
+ close(fds->pfd[1]);
+ return -1;
+ }
+ return 0;
+}
+
+static void
+msg_close(struct msg_fds *fds)
+{
+ CLOSEFD(fds->pfd[0]);
+ CLOSEFD(fds->pfd[1]);
+ CLOSEFD(fds->cfd[0]);
+ CLOSEFD(fds->cfd[1]);
+}
+
+static int
+msg_write_child(const char *info, struct msg_fds *fds, void *msg, size_t len)
+{
+ ssize_t rv;
+ CLOSEFD(fds->cfd[1]);
+ CLOSEFD(fds->pfd[0]);
+
+ printf("Send %s\n", info);
+ rv = write(fds->pfd[1], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+// printf("Wait %s\n", info);
+ rv = read(fds->cfd[0], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+ return 0;
+}
+
+static int
+msg_write_parent(const char *info, struct msg_fds *fds, void *msg, size_t len)
+{
+ ssize_t rv;
+ CLOSEFD(fds->pfd[1]);
+ CLOSEFD(fds->cfd[0]);
+
+ printf("Send %s\n", info);
+ rv = write(fds->cfd[1], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+// printf("Wait %s\n", info);
+ rv = read(fds->pfd[0], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+ return 0;
+}
+
+static int
+msg_read_parent(const char *info, struct msg_fds *fds, void *msg, size_t len)
+{
+ ssize_t rv;
+ CLOSEFD(fds->pfd[1]);
+ CLOSEFD(fds->cfd[0]);
+
+ printf("Wait %s\n", info);
+ rv = read(fds->pfd[0], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+// printf("Send %s\n", info);
+ rv = write(fds->cfd[1], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+ return 0;
+}
+
+static int
+msg_read_child(const char *info, struct msg_fds *fds, void *msg, size_t len)
+{
+ ssize_t rv;
+ CLOSEFD(fds->cfd[1]);
+ CLOSEFD(fds->pfd[0]);
+
+ printf("Wait %s\n", info);
+ rv = read(fds->cfd[0], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+// printf("Send %s\n", info);
+ rv = write(fds->pfd[1], msg, len);
+ if (rv != (ssize_t)len)
+ return 1;
+ return 0;
+}
diff --git a/contrib/netbsd-tests/kernel/t_mqueue.c b/contrib/netbsd-tests/kernel/t_mqueue.c
index aa98d91..485269f 100644
--- a/contrib/netbsd-tests/kernel/t_mqueue.c
+++ b/contrib/netbsd-tests/kernel/t_mqueue.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mqueue.c,v 1.4 2014/03/02 19:56:48 jmmv Exp $ */
+/* $NetBSD: t_mqueue.c,v 1.5 2017/01/10 22:10:22 christos Exp $ */
/*
* Test for POSIX message queue priority handling.
@@ -14,6 +14,7 @@
#endif
#include <atf-c.h>
+#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/contrib/netbsd-tests/kernel/t_ptrace.c b/contrib/netbsd-tests/kernel/t_ptrace.c
new file mode 100644
index 0000000..074a953
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace.c
@@ -0,0 +1,208 @@
+/* $NetBSD: t_ptrace.c,v 1.17 2016/11/13 22:59:31 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_ptrace.c,v 1.17 2016/11/13 22:59:31 kamil Exp $");
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <sys/stat.h>
+#include <sys/sysctl.h>
+#include <err.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+#include "../h_macros.h"
+
+/*
+ * A child process cannot call atf functions and expect them to magically
+ * work like in the parent.
+ * The printf(3) messaging from a child will not work out of the box as well
+ * without estabilishing a communication protocol with its parent. To not
+ * overcomplicate the tests - do not log from a child and use err(3)/errx(3)
+ * wrapped with FORKEE_ASSERT()/FORKEE_ASSERTX() as that is guaranteed to work.
+ */
+#define FORKEE_ASSERTX(x) \
+do { \
+ int ret = (x); \
+ if (!ret) \
+ errx(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s", \
+ __FILE__, __LINE__, __func__, #x); \
+} while (0)
+
+#define FORKEE_ASSERT(x) \
+do { \
+ int ret = (x); \
+ if (!ret) \
+ err(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s", \
+ __FILE__, __LINE__, __func__, #x); \
+} while (0)
+
+ATF_TC(attach_pid0);
+ATF_TC_HEAD(attach_pid0, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot attach to PID 0");
+}
+
+ATF_TC_BODY(attach_pid0, tc)
+{
+ errno = 0;
+ ATF_REQUIRE_ERRNO(EPERM, ptrace(PT_ATTACH, 0, NULL, 0) == -1);
+}
+
+ATF_TC(attach_pid1);
+ATF_TC_HEAD(attach_pid1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot attach to PID 1 (as non-root)");
+
+ atf_tc_set_md_var(tc, "require.user", "unprivileged");
+}
+
+ATF_TC_BODY(attach_pid1, tc)
+{
+ ATF_REQUIRE_ERRNO(EPERM, ptrace(PT_ATTACH, 1, NULL, 0) == -1);
+}
+
+ATF_TC(attach_pid1_securelevel);
+ATF_TC_HEAD(attach_pid1_securelevel, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot attach to PID 1 with "
+ "securelevel >= 1 (as root)");
+
+ atf_tc_set_md_var(tc, "require.user", "root");
+}
+
+ATF_TC_BODY(attach_pid1_securelevel, tc)
+{
+ int level;
+ size_t len = sizeof(level);
+
+ ATF_REQUIRE(sysctlbyname("kern.securelevel", &level, &len, NULL, 0)
+ != -1);
+
+ if (level < 1) {
+ atf_tc_skip("Test must be run with securelevel >= 1");
+ }
+
+ ATF_REQUIRE_ERRNO(EPERM, ptrace(PT_ATTACH, 1, NULL, 0) == -1);
+}
+
+ATF_TC(attach_self);
+ATF_TC_HEAD(attach_self, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot attach to self (as it's nonsense)");
+}
+
+ATF_TC_BODY(attach_self, tc)
+{
+ ATF_REQUIRE_ERRNO(EINVAL, ptrace(PT_ATTACH, getpid(), NULL, 0) == -1);
+}
+
+ATF_TC(attach_chroot);
+ATF_TC_HEAD(attach_chroot, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that a debugger cannot trace another process unless the "
+ "process's root directory is at or below the tracing process's "
+ "root");
+
+ atf_tc_set_md_var(tc, "require.user", "root");
+}
+
+ATF_TC_BODY(attach_chroot, tc)
+{
+ char buf[PATH_MAX];
+ pid_t child;
+ int fds_toparent[2], fds_fromparent[2];
+ int rv;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+
+ (void)memset(buf, '\0', sizeof(buf));
+ ATF_REQUIRE(getcwd(buf, sizeof(buf)) != NULL);
+ (void)strlcat(buf, "/dir", sizeof(buf));
+
+ ATF_REQUIRE(mkdir(buf, 0500) == 0);
+ ATF_REQUIRE(chdir(buf) == 0);
+
+ ATF_REQUIRE(pipe(fds_toparent) == 0);
+ ATF_REQUIRE(pipe(fds_fromparent) == 0);
+ child = atf_utils_fork();
+ if (child == 0) {
+ FORKEE_ASSERT(close(fds_toparent[0]) == 0);
+ FORKEE_ASSERT(close(fds_fromparent[1]) == 0);
+
+ FORKEE_ASSERT(chroot(buf) == 0);
+
+ rv = write(fds_toparent[1], &msg, sizeof(msg));
+ FORKEE_ASSERTX(rv == sizeof(msg));
+
+ ATF_REQUIRE_ERRNO(EPERM,
+ ptrace(PT_ATTACH, getppid(), NULL, 0) == -1);
+
+ rv = read(fds_fromparent[0], &msg, sizeof(msg));
+ FORKEE_ASSERTX(rv == sizeof(msg));
+
+ _exit(0);
+ }
+ ATF_REQUIRE(close(fds_toparent[1]) == 0);
+ ATF_REQUIRE(close(fds_fromparent[0]) == 0);
+
+ printf("Waiting for chrooting of the child PID %d", child);
+ rv = read(fds_toparent[0], &msg, sizeof(msg));
+ ATF_REQUIRE(rv == sizeof(msg));
+
+ printf("Child is ready, it will try to PT_ATTACH to parent\n");
+ rv = write(fds_fromparent[1], &msg, sizeof(msg));
+ ATF_REQUIRE(rv == sizeof(msg));
+
+ printf("fds_fromparent is no longer needed - close it\n");
+ ATF_REQUIRE(close(fds_fromparent[1]) == 0);
+
+ printf("fds_toparent is no longer needed - close it\n");
+ ATF_REQUIRE(close(fds_toparent[0]) == 0);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ setvbuf(stdout, NULL, _IONBF, 0);
+ setvbuf(stderr, NULL, _IONBF, 0);
+ ATF_TP_ADD_TC(tp, attach_pid0);
+ ATF_TP_ADD_TC(tp, attach_pid1);
+ ATF_TP_ADD_TC(tp, attach_pid1_securelevel);
+ ATF_TP_ADD_TC(tp, attach_self);
+ ATF_TP_ADD_TC(tp, attach_chroot);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait.c b/contrib/netbsd-tests/kernel/t_ptrace_wait.c
new file mode 100644
index 0000000..e502a03
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait.c
@@ -0,0 +1,5082 @@
+/* $NetBSD: t_ptrace_wait.c,v 1.53 2017/01/10 05:08:24 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_ptrace_wait.c,v 1.53 2017/01/10 05:08:24 kamil Exp $");
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/sysctl.h>
+#include <sys/wait.h>
+#include <machine/reg.h>
+#include <err.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+#include "../h_macros.h"
+
+#include "t_ptrace_wait.h"
+#include "msg.h"
+
+#define PARENT_TO_CHILD(info, fds, msg) \
+ ATF_REQUIRE(msg_write_child(info " to child " # fds, &fds, &msg, sizeof(msg)) == 0)
+
+#define CHILD_FROM_PARENT(info, fds, msg) \
+ FORKEE_ASSERT(msg_read_parent(info " from parent " # fds, &fds, &msg, sizeof(msg)) == 0)
+
+#define CHILD_TO_PARENT(info, fds, msg) \
+ FORKEE_ASSERT(msg_write_parent(info " to parent " # fds, &fds, &msg, sizeof(msg)) == 0)
+
+#define PARENT_FROM_CHILD(info, fds, msg) \
+ ATF_REQUIRE(msg_read_child(info " from parent " # fds, &fds, &msg, sizeof(msg)) == 0)
+
+ATF_TC(traceme1);
+ATF_TC_HEAD(traceme1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify SIGSTOP followed by _exit(2) in a child");
+}
+
+ATF_TC_BODY(traceme1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(traceme2);
+ATF_TC_HEAD(traceme2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify SIGSTOP followed by _exit(2) in a child");
+}
+
+static int traceme2_caught = 0;
+
+static void
+traceme2_sighandler(int sig)
+{
+ FORKEE_ASSERT_EQ(sig, SIGINT);
+
+ ++traceme2_caught;
+}
+
+ATF_TC_BODY(traceme2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP, sigsent = SIGINT;
+ pid_t child, wpid;
+ struct sigaction sa;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ sa.sa_handler = traceme2_sighandler;
+ sa.sa_flags = SA_SIGINFO;
+ sigemptyset(&sa.sa_mask);
+
+ FORKEE_ASSERT(sigaction(sigsent, &sa, NULL) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(traceme2_caught, 1);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and with "
+ "signal %s to be sent\n", strsignal(sigsent));
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigsent) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the exited child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(traceme3);
+ATF_TC_HEAD(traceme3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify SIGSTOP followed by termination by a signal in a child");
+}
+
+ATF_TC_BODY(traceme3, tc)
+{
+ const int sigval = SIGSTOP, sigsent = SIGINT /* Without core-dump */;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ /* NOTREACHED */
+ FORKEE_ASSERTX(0 &&
+ "Child should be terminated by a signal from its parent");
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and with "
+ "signal %s to be sent\n", strsignal(sigsent));
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigsent) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_signaled(status, sigsent, 0);
+
+ printf("Before calling %s() for the exited child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(traceme4);
+ATF_TC_HEAD(traceme4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify SIGSTOP followed by SIGCONT and _exit(2) in a child");
+}
+
+ATF_TC_BODY(traceme4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP, sigsent = SIGCONT;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before raising %s from child\n", strsignal(sigsent));
+ FORKEE_ASSERT(raise(sigsent) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(),child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigsent);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the exited child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach1);
+ATF_TC_HEAD(attach1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer sees process termination before the parent");
+}
+
+ATF_TC_BODY(attach1, tc)
+{
+ struct msg_fds parent_tracee, parent_tracer;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ // Wait for parent to let us exit
+ CHILD_FROM_PARENT("exit tracee", parent_tracee, msg);
+ _exit(exitval_tracee);
+ }
+
+ printf("Spawn debugger\n");
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("tracer ready", parent_tracer, msg);
+
+ /* Wait for parent to tell use that tracee should have exited */
+ CHILD_FROM_PARENT("wait for tracee exit", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+ printf("Tracee %d exited with %d\n", tracee, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("tracer ready", parent_tracer, msg);
+
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("exit tracee", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+
+ printf("Assert that there is no status about tracee %d - "
+ "Tracer must detect zombie first - calling %s()\n", tracee,
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Tell the tracer child should have exited\n");
+ PARENT_TO_CHILD("wait for tracee exit", parent_tracer, msg);
+ printf("Wait for tracer to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+
+ printf("Wait from tracer child to complete waiting for tracee\n");
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracer);
+ msg_close(&parent_tracee);
+}
+#endif
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach2);
+ATF_TC_HEAD(attach2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that any tracer sees process termination before its "
+ "parent");
+}
+
+ATF_TC_BODY(attach2, tc)
+{
+ struct msg_fds parent_tracer, parent_tracee;
+ const int exitval_tracee = 5;
+ const int exitval_tracer1 = 10, exitval_tracer2 = 20;
+ pid_t tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ /* Wait for message from the parent */
+ CHILD_FROM_PARENT("Message 1", parent_tracee, msg);
+ _exit(exitval_tracee);
+ }
+
+ printf("Spawn debugger\n");
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ /* Fork again and drop parent to reattach to PID 1 */
+ tracer = atf_utils_fork();
+ if (tracer != 0)
+ _exit(exitval_tracer1);
+
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("Message 1", parent_tracer, msg);
+ CHILD_FROM_PARENT("Message 2", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer2);
+ }
+ printf("Wait for the tracer process (direct child) to exit calling "
+ "%s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracer, &status, 0), tracer);
+
+ validate_status_exited(status, exitval_tracer1);
+
+ printf("Wait for the non-exited tracee process with %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, NULL, WNOHANG), 0);
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("Message 1", parent_tracer, msg);
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Resume the tracer and let it detect exited tracee\n");
+ PARENT_TO_CHILD("Message 2", parent_tracer, msg);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracer);
+ msg_close(&parent_tracee);
+
+}
+#endif
+
+ATF_TC(attach3);
+ATF_TC_HEAD(attach3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer parent can PT_ATTACH to its child");
+}
+
+ATF_TC_BODY(attach3, tc)
+{
+ struct msg_fds parent_tracee;
+ const int exitval_tracee = 5;
+ pid_t tracee, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ CHILD_FROM_PARENT("Message 1", parent_tracee, msg);
+ printf("Parent should now attach to tracee\n");
+
+ CHILD_FROM_PARENT("Message 2", parent_tracee, msg);
+ /* Wait for message from the parent */
+ _exit(exitval_tracee);
+ }
+ PARENT_TO_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Before calling PT_ATTACH for tracee %d\n", tracee);
+ ATF_REQUIRE(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ printf("Wait for the stopped tracee process with %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ validate_status_stopped(status, SIGSTOP);
+
+ printf("Resume tracee with PT_CONTINUE\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ printf("Let the tracee exit now\n");
+ PARENT_TO_CHILD("Message 2", parent_tracee, msg);
+
+ printf("Wait for tracee to exit with %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ printf("Before calling %s() for tracee\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(tracee, &status, 0));
+
+ msg_close(&parent_tracee);
+}
+
+ATF_TC(attach4);
+ATF_TC_HEAD(attach4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer child can PT_ATTACH to its parent");
+}
+
+ATF_TC_BODY(attach4, tc)
+{
+ struct msg_fds parent_tracee;
+ const int exitval_tracer = 5;
+ pid_t tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracer\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+
+ /* Wait for message from the parent */
+ CHILD_FROM_PARENT("Message 1", parent_tracee, msg);
+
+ printf("Attach to parent PID %d with PT_ATTACH from child\n",
+ getppid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, getppid(), NULL, 0) != -1);
+
+ printf("Wait for the stopped parent process with %s()\n",
+ TWAIT_FNAME);
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(getppid(), &status, 0), getppid());
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ printf("Resume parent with PT_DETACH\n");
+ FORKEE_ASSERT(ptrace(PT_DETACH, getppid(), (void *)1, 0)
+ != -1);
+
+ /* Tell parent we are ready */
+ CHILD_TO_PARENT("Message 1", parent_tracee, msg);
+
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to become ready\n");
+ PARENT_TO_CHILD("Message 1", parent_tracee, msg);
+ printf("Allow the tracer to exit now\n");
+ PARENT_FROM_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Wait for tracer to exit with %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracer, &status, 0), tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Before calling %s() for tracer\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(tracer, &status, 0));
+
+ msg_close(&parent_tracee);
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach5);
+ATF_TC_HEAD(attach5, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer sees its parent when attached to tracer "
+ "(check getppid(2))");
+}
+
+ATF_TC_BODY(attach5, tc)
+{
+ struct msg_fds parent_tracer, parent_tracee;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t parent, tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ parent = getppid();
+
+ /* Emit message to the parent */
+ CHILD_TO_PARENT("tracee ready", parent_tracee, msg);
+ CHILD_FROM_PARENT("exit tracee", parent_tracee, msg);
+
+ FORKEE_ASSERT_EQ(parent, getppid());
+
+ _exit(exitval_tracee);
+ }
+ printf("Wait for child to record its parent identifier (pid)\n");
+ PARENT_FROM_CHILD("tracee ready", parent_tracee, msg);
+
+ printf("Spawn debugger\n");
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ /* No IPC to communicate with the child */
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("tracer ready", parent_tracer, msg);
+
+ /* Wait for parent to tell use that tracee should have exited */
+ CHILD_FROM_PARENT("wait for tracee exit", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("tracer ready", parent_tracer, msg);
+
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("exit tracee", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Tell the tracer child should have exited\n");
+ PARENT_TO_CHILD("wait for tracee exit", parent_tracer, msg);
+
+ printf("Wait from tracer child to complete waiting for tracee\n");
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracer);
+ msg_close(&parent_tracee);
+}
+#endif
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach6);
+ATF_TC_HEAD(attach6, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer sees its parent when attached to tracer "
+ "(check sysctl(7) and struct kinfo_proc2)");
+}
+
+ATF_TC_BODY(attach6, tc)
+{
+ struct msg_fds parent_tracee, parent_tracer;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t parent, tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int name[CTL_MAXNAME];
+ struct kinfo_proc2 kp;
+ size_t len = sizeof(kp);
+ unsigned int namelen;
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ parent = getppid();
+
+ /* Emit message to the parent */
+ CHILD_TO_PARENT("Message 1", parent_tracee, msg);
+ CHILD_FROM_PARENT("Message 2", parent_tracee, msg);
+
+ namelen = 0;
+ name[namelen++] = CTL_KERN;
+ name[namelen++] = KERN_PROC2;
+ name[namelen++] = KERN_PROC_PID;
+ name[namelen++] = getpid();
+ name[namelen++] = len;
+ name[namelen++] = 1;
+
+ FORKEE_ASSERT(sysctl(name, namelen, &kp, &len, NULL, 0) == 0);
+ FORKEE_ASSERT_EQ(parent, kp.p_ppid);
+
+ _exit(exitval_tracee);
+ }
+
+ printf("Wait for child to record its parent identifier (pid)\n");
+ PARENT_FROM_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Spawn debugger\n");
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ /* No IPC to communicate with the child */
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("Message 1", parent_tracer, msg);
+
+ CHILD_FROM_PARENT("Message 2", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("Message 1", parent_tracer, msg);
+
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("Message 1", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Resume the tracer and let it detect exited tracee\n");
+ PARENT_TO_CHILD("Message 2", parent_tracer, msg);
+
+ printf("Wait for tracer to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracee);
+ msg_close(&parent_tracer);
+}
+#endif
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(attach7);
+ATF_TC_HEAD(attach7, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Assert that tracer sees its parent when attached to tracer "
+ "(check /proc/curproc/status 3rd column)");
+}
+
+ATF_TC_BODY(attach7, tc)
+{
+ struct msg_fds parent_tracee, parent_tracer;
+ int rv;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t parent, tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ FILE *fp;
+ struct stat st;
+ const char *fname = "/proc/curproc/status";
+ char s_executable[MAXPATHLEN];
+ int s_pid, s_ppid;
+ /*
+ * Format:
+ * EXECUTABLE PID PPID ...
+ */
+
+ ATF_REQUIRE((rv = stat(fname, &st)) == 0 || (errno == ENOENT));
+ if (rv != 0) {
+ atf_tc_skip("/proc/curproc/status not found");
+ }
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+ parent = getppid();
+
+ // Wait for parent to let us exit
+ CHILD_TO_PARENT("tracee ready", parent_tracee, msg);
+ CHILD_FROM_PARENT("tracee exit", parent_tracee, msg);
+
+ FORKEE_ASSERT((fp = fopen(fname, "r")) != NULL);
+ fscanf(fp, "%s %d %d", s_executable, &s_pid, &s_ppid);
+ FORKEE_ASSERT(fclose(fp) == 0);
+ FORKEE_ASSERT_EQ(parent, s_ppid);
+
+ _exit(exitval_tracee);
+ }
+
+ printf("Wait for child to record its parent identifier (pid)\n");
+ PARENT_FROM_CHILD("tracee ready", parent_tracee, msg);
+
+ printf("Spawn debugger\n");
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("tracer ready", parent_tracer, msg);
+
+ /* Wait for parent to tell use that tracee should have exited */
+ CHILD_FROM_PARENT("wait for tracee exit", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("tracer ready", parent_tracer, msg);
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("tracee exit", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Resume the tracer and let it detect exited tracee\n");
+ PARENT_TO_CHILD("Message 2", parent_tracer, msg);
+
+ printf("Wait for tracer to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracee);
+ msg_close(&parent_tracer);
+}
+#endif
+
+ATF_TC(eventmask1);
+ATF_TC_HEAD(eventmask1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that empty EVENT_MASK is preserved");
+}
+
+ATF_TC_BODY(eventmask1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_event_t set_event, get_event;
+ const int len = sizeof(ptrace_event_t);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ set_event.pe_set_event = 0;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &set_event, len) != -1);
+ ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, child, &get_event, len) != -1);
+ ATF_REQUIRE(memcmp(&set_event, &get_event, len) == 0);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(eventmask2);
+ATF_TC_HEAD(eventmask2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that PTRACE_FORK in EVENT_MASK is preserved");
+}
+
+ATF_TC_BODY(eventmask2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_event_t set_event, get_event;
+ const int len = sizeof(ptrace_event_t);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ set_event.pe_set_event = PTRACE_FORK;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &set_event, len) != -1);
+ ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, child, &get_event, len) != -1);
+ ATF_REQUIRE(memcmp(&set_event, &get_event, len) == 0);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(fork1);
+ATF_TC_HEAD(fork1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that fork(2) is intercepted by ptrace(2) with EVENT_MASK "
+ "set to PTRACE_FORK");
+}
+
+ATF_TC_BODY(fork1, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_state_t state;
+ const int slen = sizeof(state);
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = fork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Enable PTRACE_FORK in EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = PTRACE_FORK;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child %d\n", TWAIT_FNAME, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_FORK);
+
+ child2 = state.pe_other_pid;
+ printf("Reported PTRACE_FORK event with forkee %d\n", child2);
+
+ printf("Before calling %s() for the forkee %d of the child %d\n",
+ TWAIT_FNAME, child2, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child2, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_FORK);
+ ATF_REQUIRE_EQ(state.pe_other_pid, child);
+
+ printf("Before resuming the forkee process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child2, (void *)1, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the forkee - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_exited(status, exitval2);
+
+ printf("Before calling %s() for the forkee - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(child2, &status, 0));
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+ATF_TC(fork2);
+ATF_TC_HEAD(fork2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that fork(2) is not intercepted by ptrace(2) with empty "
+ "EVENT_MASK");
+}
+
+ATF_TC_BODY(fork2, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = fork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Set empty EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = 0;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(vfork1);
+ATF_TC_HEAD(vfork1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that vfork(2) is intercepted by ptrace(2) with EVENT_MASK "
+ "set to PTRACE_VFORK");
+}
+
+ATF_TC_BODY(vfork1, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_state_t state;
+ const int slen = sizeof(state);
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+
+ /*
+ * ptrace(2) command PT_SET_EVENT_MASK: option PTRACE_VFORK unsupported
+ */
+#ifndef PTRACE_VFORK
+#define PTRACE_VFORK 0
+#endif
+ atf_tc_expect_fail("PR kern/51630");
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = vfork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Enable PTRACE_VFORK in EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = PTRACE_VFORK;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child %d\n", TWAIT_FNAME, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_VFORK);
+
+ child2 = state.pe_other_pid;
+ printf("Reported PTRACE_VFORK event with forkee %d\n", child2);
+
+ printf("Before calling %s() for the forkee %d of the child %d\n",
+ TWAIT_FNAME, child2, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child2, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_VFORK);
+ ATF_REQUIRE_EQ(state.pe_other_pid, child);
+
+ printf("Before resuming the forkee process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child2, (void *)1, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the forkee - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_exited(status, exitval2);
+
+ printf("Before calling %s() for the forkee - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(child2, &status, 0));
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+ATF_TC(vfork2);
+ATF_TC_HEAD(vfork2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that vfork(2) is not intercepted by ptrace(2) with empty "
+ "EVENT_MASK");
+}
+
+ATF_TC_BODY(vfork2, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = vfork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Set empty EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = 0;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d1);
+ATF_TC_HEAD(io_read_d1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and len = sizeof(uint8_t)");
+}
+
+ATF_TC_BODY(io_read_d1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me = 0;
+ const uint8_t magic = 0xab;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d2);
+ATF_TC_HEAD(io_read_d2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and len = sizeof(uint16_t)");
+}
+
+ATF_TC_BODY(io_read_d2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint16_t lookup_me = 0;
+ const uint16_t magic = 0x1234;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx16 " != expected %" PRIx16, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d3);
+ATF_TC_HEAD(io_read_d3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and len = sizeof(uint32_t)");
+}
+
+ATF_TC_BODY(io_read_d3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint32_t lookup_me = 0;
+ const uint32_t magic = 0x1234abcd;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx32 " != expected %" PRIx32, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d4);
+ATF_TC_HEAD(io_read_d4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and len = sizeof(uint64_t)");
+}
+
+ATF_TC_BODY(io_read_d4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint64_t lookup_me = 0;
+ const uint64_t magic = 0x1234abcd9876dcfa;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx64 " != expected %" PRIx64, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_write_d1);
+ATF_TC_HEAD(io_write_d1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and len = sizeof(uint8_t)");
+}
+
+ATF_TC_BODY(io_write_d1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me = 0;
+ const uint8_t magic = 0xab;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me = magic;
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_write_d2);
+ATF_TC_HEAD(io_write_d2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and len = sizeof(uint16_t)");
+}
+
+ATF_TC_BODY(io_write_d2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint16_t lookup_me = 0;
+ const uint16_t magic = 0xab12;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me = magic;
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_write_d3);
+ATF_TC_HEAD(io_write_d3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and len = sizeof(uint32_t)");
+}
+
+ATF_TC_BODY(io_write_d3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint32_t lookup_me = 0;
+ const uint32_t magic = 0xab127643;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me = magic;
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_write_d4);
+ATF_TC_HEAD(io_write_d4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and len = sizeof(uint64_t)");
+}
+
+ATF_TC_BODY(io_write_d4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint64_t lookup_me = 0;
+ const uint64_t magic = 0xab12764376490123;
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me = magic;
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d1);
+ATF_TC_HEAD(read_d1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D called once");
+}
+
+ATF_TC_BODY(read_d1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me = 0;
+ const int magic = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me = magic;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me = ptrace(PT_READ_D, child, &lookup_me, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %#x != expected %#x", lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d2);
+ATF_TC_HEAD(read_d2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D called twice");
+}
+
+ATF_TC_BODY(read_d2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me1 = magic1;
+ lookup_me2 = magic2;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_D, child, &lookup_me1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_D, child, &lookup_me2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d3);
+ATF_TC_HEAD(read_d3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D called three times");
+}
+
+ATF_TC_BODY(read_d3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+ const int magic3 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me1 = magic1;
+ lookup_me2 = magic2;
+ lookup_me3 = magic3;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_D, child, &lookup_me1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_D, child, &lookup_me2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Read new lookup_me3 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me3 = ptrace(PT_READ_D, child, &lookup_me3, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me3, magic3,
+ "got value %#x != expected %#x", lookup_me3, magic3);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d4);
+ATF_TC_HEAD(read_d4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D called four times");
+}
+
+ATF_TC_BODY(read_d4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ int lookup_me4 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+ const int magic3 = (int)random();
+ const int magic4 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me1 = magic1;
+ lookup_me2 = magic2;
+ lookup_me3 = magic3;
+ lookup_me4 = magic4;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_D, child, &lookup_me1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_D, child, &lookup_me2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Read new lookup_me3 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me3 = ptrace(PT_READ_D, child, &lookup_me3, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me3, magic3,
+ "got value %#x != expected %#x", lookup_me3, magic3);
+
+ printf("Read new lookup_me4 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me4 = ptrace(PT_READ_D, child, &lookup_me4, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me4, magic4,
+ "got value %#x != expected %#x", lookup_me4, magic4);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(write_d1);
+ATF_TC_HEAD(write_d1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D called once");
+}
+
+ATF_TC_BODY(write_d1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me = 0;
+ const int magic = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me, magic);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me, magic) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(write_d2);
+ATF_TC_HEAD(write_d2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D called twice");
+}
+
+ATF_TC_BODY(write_d2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me1, magic1);
+ FORKEE_ASSERT_EQ(lookup_me2, magic2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me1 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me1, magic1) != -1);
+
+ printf("Write new lookup_me2 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me2, magic2) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(write_d3);
+ATF_TC_HEAD(write_d3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D called three times");
+}
+
+ATF_TC_BODY(write_d3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+ const int magic3 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me1, magic1);
+ FORKEE_ASSERT_EQ(lookup_me2, magic2);
+ FORKEE_ASSERT_EQ(lookup_me3, magic3);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me1 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me1, magic1) != -1);
+
+ printf("Write new lookup_me2 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me2, magic2) != -1);
+
+ printf("Write new lookup_me3 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me3, magic3) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(write_d4);
+ATF_TC_HEAD(write_d4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D called four times");
+}
+
+ATF_TC_BODY(write_d4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ int lookup_me4 = 0;
+ const int magic1 = (int)random();
+ const int magic2 = (int)random();
+ const int magic3 = (int)random();
+ const int magic4 = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me1, magic1);
+ FORKEE_ASSERT_EQ(lookup_me2, magic2);
+ FORKEE_ASSERT_EQ(lookup_me3, magic3);
+ FORKEE_ASSERT_EQ(lookup_me4, magic4);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me1 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me1, magic1) != -1);
+
+ printf("Write new lookup_me2 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me2, magic2) != -1);
+
+ printf("Write new lookup_me3 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me3, magic3) != -1);
+
+ printf("Write new lookup_me4 to tracee (PID=%d) from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_WRITE_D, child, &lookup_me4, magic4) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d_write_d_handshake1);
+ATF_TC_HEAD(io_read_d_write_d_handshake1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_D and PIOD_WRITE_D handshake");
+}
+
+ATF_TC_BODY(io_read_d_write_d_handshake1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me_fromtracee = 0;
+ const uint8_t magic_fromtracee = (uint8_t)random();
+ uint8_t lookup_me_totracee = 0;
+ const uint8_t magic_totracee = (uint8_t)random();
+ struct ptrace_io_desc io_fromtracee = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me_fromtracee,
+ .piod_addr = &lookup_me_fromtracee,
+ .piod_len = sizeof(lookup_me_fromtracee)
+ };
+ struct ptrace_io_desc io_totracee = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me_totracee,
+ .piod_addr = &lookup_me_totracee,
+ .piod_len = sizeof(lookup_me_totracee)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me_fromtracee = magic_fromtracee;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me_totracee, magic_totracee);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me_fromtracee PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io_fromtracee, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_fromtracee, magic_fromtracee,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me_fromtracee,
+ magic_fromtracee);
+
+ lookup_me_totracee = magic_totracee;
+
+ printf("Write lookup_me_totracee to PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io_totracee, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_totracee, magic_totracee,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me_totracee,
+ magic_totracee);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_d_write_d_handshake2);
+ATF_TC_HEAD(io_read_d_write_d_handshake2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_WRITE_D and PIOD_READ_D handshake");
+}
+
+ATF_TC_BODY(io_read_d_write_d_handshake2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me_fromtracee = 0;
+ const uint8_t magic_fromtracee = (uint8_t)random();
+ uint8_t lookup_me_totracee = 0;
+ const uint8_t magic_totracee = (uint8_t)random();
+ struct ptrace_io_desc io_fromtracee = {
+ .piod_op = PIOD_READ_D,
+ .piod_offs = &lookup_me_fromtracee,
+ .piod_addr = &lookup_me_fromtracee,
+ .piod_len = sizeof(lookup_me_fromtracee)
+ };
+ struct ptrace_io_desc io_totracee = {
+ .piod_op = PIOD_WRITE_D,
+ .piod_offs = &lookup_me_totracee,
+ .piod_addr = &lookup_me_totracee,
+ .piod_len = sizeof(lookup_me_totracee)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me_fromtracee = magic_fromtracee;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me_totracee, magic_totracee);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ lookup_me_totracee = magic_totracee;
+
+ printf("Write lookup_me_totracee to PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io_totracee, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_totracee, magic_totracee,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me_totracee,
+ magic_totracee);
+
+ printf("Read lookup_me_fromtracee PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io_fromtracee, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_fromtracee, magic_fromtracee,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me_fromtracee,
+ magic_fromtracee);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d_write_d_handshake1);
+ATF_TC_HEAD(read_d_write_d_handshake1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_D with PT_WRITE_D handshake");
+}
+
+ATF_TC_BODY(read_d_write_d_handshake1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me_fromtracee = 0;
+ const int magic_fromtracee = (int)random();
+ int lookup_me_totracee = 0;
+ const int magic_totracee = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me_fromtracee = magic_fromtracee;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me_totracee, magic_totracee);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me_fromtracee PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me_fromtracee =
+ ptrace(PT_READ_D, child, &lookup_me_fromtracee, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_fromtracee, magic_fromtracee,
+ "got value %#x != expected %#x", lookup_me_fromtracee,
+ magic_fromtracee);
+
+ printf("Write new lookup_me_totracee to PID=%d from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE
+ (ptrace(PT_WRITE_D, child, &lookup_me_totracee, magic_totracee)
+ != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_d_write_d_handshake2);
+ATF_TC_HEAD(read_d_write_d_handshake2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_WRITE_D with PT_READ_D handshake");
+}
+
+ATF_TC_BODY(read_d_write_d_handshake2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me_fromtracee = 0;
+ const int magic_fromtracee = (int)random();
+ int lookup_me_totracee = 0;
+ const int magic_totracee = (int)random();
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ lookup_me_fromtracee = magic_fromtracee;
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(lookup_me_totracee, magic_totracee);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Write new lookup_me_totracee to PID=%d from tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE
+ (ptrace(PT_WRITE_D, child, &lookup_me_totracee, magic_totracee)
+ != -1);
+
+ printf("Read new lookup_me_fromtracee PID=%d by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me_fromtracee =
+ ptrace(PT_READ_D, child, &lookup_me_fromtracee, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me_fromtracee, magic_fromtracee,
+ "got value %#x != expected %#x", lookup_me_fromtracee,
+ magic_fromtracee);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+/* These dummy functions are used to be copied with ptrace(2) calls */
+static int __used
+dummy_fn1(int a, int b, int c, int d)
+{
+
+ a *= 1;
+ b += 2;
+ c -= 3;
+ d /= 4;
+
+ return a + b * c - d;
+}
+
+static int __used
+dummy_fn2(int a, int b, int c, int d)
+{
+
+ a *= 4;
+ b += 3;
+ c -= 2;
+ d /= 1;
+
+ return a + b * c - d;
+}
+
+static int __used
+dummy_fn3(int a, int b, int c, int d)
+{
+
+ a *= 10;
+ b += 20;
+ c -= 30;
+ d /= 40;
+
+ return a + b * c - d;
+}
+
+static int __used
+dummy_fn4(int a, int b, int c, int d)
+{
+
+ a *= 40;
+ b += 30;
+ c -= 20;
+ d /= 10;
+
+ return a + b * c - d;
+}
+
+ATF_TC(io_read_i1);
+ATF_TC_HEAD(io_read_i1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_I and len = sizeof(uint8_t)");
+}
+
+ATF_TC_BODY(io_read_i1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint8_t lookup_me = 0;
+ uint8_t magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_I,
+ .piod_offs = dummy_fn1,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx8 " != expected %" PRIx8, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_i2);
+ATF_TC_HEAD(io_read_i2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_I and len = sizeof(uint16_t)");
+}
+
+ATF_TC_BODY(io_read_i2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint16_t lookup_me = 0;
+ uint16_t magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_I,
+ .piod_offs = dummy_fn1,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx16 " != expected %" PRIx16, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_i3);
+ATF_TC_HEAD(io_read_i3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_I and len = sizeof(uint32_t)");
+}
+
+ATF_TC_BODY(io_read_i3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint32_t lookup_me = 0;
+ uint32_t magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_I,
+ .piod_offs = dummy_fn1,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx32 " != expected %" PRIx32, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(io_read_i4);
+ATF_TC_HEAD(io_read_i4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_IO with PIOD_READ_I and len = sizeof(uint64_t)");
+}
+
+ATF_TC_BODY(io_read_i4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ uint64_t lookup_me = 0;
+ uint64_t magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+ struct ptrace_io_desc io = {
+ .piod_op = PIOD_READ_I,
+ .piod_offs = dummy_fn1,
+ .piod_addr = &lookup_me,
+ .piod_len = sizeof(lookup_me)
+ };
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ ATF_REQUIRE(ptrace(PT_IO, child, &io, 0) != -1);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %" PRIx64 " != expected %" PRIx64, lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_i1);
+ATF_TC_HEAD(read_i1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_I called once");
+}
+
+ATF_TC_BODY(read_i1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me = 0;
+ int magic;
+ memcpy(&magic, dummy_fn1, sizeof(magic));
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me = ptrace(PT_READ_I, child, dummy_fn1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me, magic,
+ "got value %#x != expected %#x", lookup_me, magic);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_i2);
+ATF_TC_HEAD(read_i2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_I called twice");
+}
+
+ATF_TC_BODY(read_i2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int magic1;
+ int magic2;
+ memcpy(&magic1, dummy_fn1, sizeof(magic1));
+ memcpy(&magic2, dummy_fn2, sizeof(magic2));
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_I, child, dummy_fn1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_I, child, dummy_fn2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_i3);
+ATF_TC_HEAD(read_i3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_I called three times");
+}
+
+ATF_TC_BODY(read_i3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ int magic1;
+ int magic2;
+ int magic3;
+ memcpy(&magic1, dummy_fn1, sizeof(magic1));
+ memcpy(&magic2, dummy_fn2, sizeof(magic2));
+ memcpy(&magic3, dummy_fn3, sizeof(magic3));
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_I, child, dummy_fn1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_I, child, dummy_fn2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Read new lookup_me3 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me3 = ptrace(PT_READ_I, child, dummy_fn3, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me3, magic3,
+ "got value %#x != expected %#x", lookup_me3, magic3);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(read_i4);
+ATF_TC_HEAD(read_i4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_READ_I called four times");
+}
+
+ATF_TC_BODY(read_i4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+ int lookup_me1 = 0;
+ int lookup_me2 = 0;
+ int lookup_me3 = 0;
+ int lookup_me4 = 0;
+ int magic1;
+ int magic2;
+ int magic3;
+ int magic4;
+ memcpy(&magic1, dummy_fn1, sizeof(magic1));
+ memcpy(&magic2, dummy_fn2, sizeof(magic2));
+ memcpy(&magic3, dummy_fn3, sizeof(magic3));
+ memcpy(&magic4, dummy_fn4, sizeof(magic4));
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Read new lookup_me1 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me1 = ptrace(PT_READ_I, child, dummy_fn1, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me1, magic1,
+ "got value %#x != expected %#x", lookup_me1, magic1);
+
+ printf("Read new lookup_me2 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me2 = ptrace(PT_READ_I, child, dummy_fn2, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me2, magic2,
+ "got value %#x != expected %#x", lookup_me2, magic2);
+
+ printf("Read new lookup_me3 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me3 = ptrace(PT_READ_I, child, dummy_fn3, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me3, magic3,
+ "got value %#x != expected %#x", lookup_me3, magic3);
+
+ printf("Read new lookup_me4 from tracee (PID=%d) by tracer (PID=%d)\n",
+ child, getpid());
+ errno = 0;
+ lookup_me4 = ptrace(PT_READ_I, child, dummy_fn4, 0);
+ ATF_REQUIRE_EQ(errno, 0);
+
+ ATF_REQUIRE_EQ_MSG(lookup_me4, magic4,
+ "got value %#x != expected %#x", lookup_me4, magic4);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs1);
+ATF_TC_HEAD(regs1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETREGS call without further steps");
+}
+
+ATF_TC_BODY(regs1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs2);
+ATF_TC_HEAD(regs2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETREGS call and retrieve PC");
+}
+
+ATF_TC_BODY(regs2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Retrieved PC=%" PRIxREGISTER "\n", PTRACE_REG_PC(&r));
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs3);
+ATF_TC_HEAD(regs3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETREGS call and retrieve SP");
+}
+
+ATF_TC_BODY(regs3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Retrieved SP=%" PRIxREGISTER "\n", PTRACE_REG_SP(&r));
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs4);
+ATF_TC_HEAD(regs4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETREGS call and retrieve INTRV");
+}
+
+ATF_TC_BODY(regs4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Retrieved INTRV=%" PRIxREGISTER "\n", PTRACE_REG_INTRV(&r));
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_GPREGS)
+ATF_TC(regs5);
+ATF_TC_HEAD(regs5, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_GETREGS and PT_SETREGS calls without changing regs");
+}
+
+ATF_TC_BODY(regs5, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct reg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Call SETREGS for the child process (without changed regs)\n");
+ ATF_REQUIRE(ptrace(PT_GETREGS, child, &r, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_FPREGS)
+ATF_TC(fpregs1);
+ATF_TC_HEAD(fpregs1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify plain PT_GETFPREGS call without further steps");
+}
+
+ATF_TC_BODY(fpregs1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct fpreg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETFPREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETFPREGS, child, &r, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(HAVE_FPREGS)
+ATF_TC(fpregs2);
+ATF_TC_HEAD(fpregs2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_GETFPREGS and PT_SETFPREGS calls without changing "
+ "regs");
+}
+
+ATF_TC_BODY(fpregs2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct fpreg r;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Call GETFPREGS for the child process\n");
+ ATF_REQUIRE(ptrace(PT_GETFPREGS, child, &r, 0) != -1);
+
+ printf("Call SETFPREGS for the child (without changed regs)\n");
+ ATF_REQUIRE(ptrace(PT_SETFPREGS, child, &r, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(step1);
+ATF_TC_HEAD(step1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify single PT_STEP call");
+}
+
+ATF_TC_BODY(step1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(100);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(100));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(step2);
+ATF_TC_HEAD(step2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_STEP called twice");
+}
+
+ATF_TC_BODY(step2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+ int N = 2;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(999);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(999));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ while (N --> 0) {
+ printf("Before resuming the child process where it left off "
+ "and without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0),
+ child);
+
+ validate_status_stopped(status, SIGTRAP);
+ }
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(step3);
+ATF_TC_HEAD(step3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_STEP called three times");
+}
+
+ATF_TC_BODY(step3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+ int N = 3;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(999);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(999));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ while (N --> 0) {
+ printf("Before resuming the child process where it left off "
+ "and without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0),
+ child);
+
+ validate_status_stopped(status, SIGTRAP);
+ }
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(step4);
+ATF_TC_HEAD(step4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify PT_STEP called four times");
+}
+
+ATF_TC_BODY(step4, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+ int N = 4;
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(999);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(999));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ while (N --> 0) {
+ printf("Before resuming the child process where it left off "
+ "and without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0),
+ child);
+
+ validate_status_stopped(status, SIGTRAP);
+ }
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+ATF_TC(kill1);
+ATF_TC_HEAD(kill1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that PT_CONTINUE with SIGKILL terminates child");
+}
+
+ATF_TC_BODY(kill1, tc)
+{
+ const int sigval = SIGSTOP, sigsent = SIGKILL;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ /* NOTREACHED */
+ FORKEE_ASSERTX(0 &&
+ "Child should be terminated by a signal from its parent");
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigsent) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_signaled(status, sigsent, 0);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(kill2);
+ATF_TC_HEAD(kill2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that PT_KILL terminates child");
+}
+
+ATF_TC_BODY(kill2, tc)
+{
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ /* NOTREACHED */
+ FORKEE_ASSERTX(0 &&
+ "Child should be terminated by a signal from its parent");
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_KILL, child, (void*)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_signaled(status, SIGKILL, 0);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(lwpinfo1);
+ATF_TC_HEAD(lwpinfo1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic LWPINFO call for single thread (PT_TRACE_ME)");
+}
+
+ATF_TC_BODY(lwpinfo1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_lwpinfo info = {0, 0};
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_LWPINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_LWPINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Assert that there exists a thread\n");
+ ATF_REQUIRE(info.pl_lwpid > 0);
+
+ printf("Assert that lwp thread %d received event PL_EVENT_SIGNAL\n",
+ info.pl_lwpid);
+ ATF_REQUIRE_EQ_MSG(info.pl_event, PL_EVENT_SIGNAL,
+ "Received event %d != expected event %d",
+ info.pl_event, PL_EVENT_SIGNAL);
+
+ printf("Before calling ptrace(2) with PT_LWPINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_LWPINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Assert that there are no more lwp threads in child\n");
+ ATF_REQUIRE_EQ(info.pl_lwpid, 0);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(lwpinfo2);
+ATF_TC_HEAD(lwpinfo2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic LWPINFO call for single thread (PT_ATTACH from "
+ "tracer)");
+}
+
+ATF_TC_BODY(lwpinfo2, tc)
+{
+ struct msg_fds parent_tracee, parent_tracer;
+ const int exitval_tracee = 5;
+ const int exitval_tracer = 10;
+ pid_t tracee, tracer, wpid;
+ uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_lwpinfo info = {0, 0};
+
+ printf("Spawn tracee\n");
+ ATF_REQUIRE(msg_open(&parent_tracee) == 0);
+ ATF_REQUIRE(msg_open(&parent_tracer) == 0);
+ tracee = atf_utils_fork();
+ if (tracee == 0) {
+
+ /* Wait for message from the parent */
+ CHILD_TO_PARENT("tracee ready", parent_tracee, msg);
+ CHILD_FROM_PARENT("tracee exit", parent_tracee, msg);
+
+ _exit(exitval_tracee);
+ }
+ PARENT_FROM_CHILD("tracee ready", parent_tracee, msg);
+
+ printf("Spawn debugger\n");
+ tracer = atf_utils_fork();
+ if (tracer == 0) {
+ /* No IPC to communicate with the child */
+ printf("Before calling PT_ATTACH from tracee %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_ATTACH, tracee, NULL, 0) != -1);
+
+ /* Wait for tracee and assert that it was stopped w/ SIGSTOP */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_stopped(status, SIGSTOP);
+
+ printf("Before calling ptrace(2) with PT_LWPINFO for child\n");
+ FORKEE_ASSERT(ptrace(PT_LWPINFO, tracee, &info, sizeof(info))
+ != -1);
+
+ printf("Assert that there exists a thread\n");
+ FORKEE_ASSERTX(info.pl_lwpid > 0);
+
+ printf("Assert that lwp thread %d received event "
+ "PL_EVENT_SIGNAL\n", info.pl_lwpid);
+ FORKEE_ASSERT_EQ(info.pl_event, PL_EVENT_SIGNAL);
+
+ printf("Before calling ptrace(2) with PT_LWPINFO for child\n");
+ FORKEE_ASSERT(ptrace(PT_LWPINFO, tracee, &info, sizeof(info))
+ != -1);
+
+ printf("Assert that there are no more lwp threads in child\n");
+ FORKEE_ASSERTX(info.pl_lwpid == 0);
+
+ /* Resume tracee with PT_CONTINUE */
+ FORKEE_ASSERT(ptrace(PT_CONTINUE, tracee, (void *)1, 0) != -1);
+
+ /* Inform parent that tracer has attached to tracee */
+ CHILD_TO_PARENT("tracer ready", parent_tracer, msg);
+ /* Wait for parent */
+ CHILD_FROM_PARENT("tracer wait", parent_tracer, msg);
+
+ /* Wait for tracee and assert that it exited */
+ FORKEE_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, 0), tracee);
+
+ forkee_status_exited(status, exitval_tracee);
+
+ printf("Before exiting of the tracer process\n");
+ _exit(exitval_tracer);
+ }
+
+ printf("Wait for the tracer to attach to the tracee\n");
+ PARENT_FROM_CHILD("tracer ready", parent_tracer, msg);
+
+ printf("Resume the tracee and let it exit\n");
+ PARENT_TO_CHILD("tracee exit", parent_tracee, msg);
+
+ printf("Detect that tracee is zombie\n");
+ await_zombie(tracee);
+
+ printf("Assert that there is no status about tracee - "
+ "Tracer must detect zombie first - calling %s()\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(
+ wpid = TWAIT_GENERIC(tracee, &status, WNOHANG), 0);
+
+ printf("Resume the tracer and let it detect exited tracee\n");
+ PARENT_TO_CHILD("tracer wait", parent_tracer, msg);
+
+ printf("Wait for tracer to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracer, &status, 0),
+ tracer);
+
+ validate_status_exited(status, exitval_tracer);
+
+ printf("Wait for tracee to finish its job and exit - calling %s()\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, WNOHANG),
+ tracee);
+
+ validate_status_exited(status, exitval_tracee);
+
+ msg_close(&parent_tracer);
+ msg_close(&parent_tracee);
+}
+#endif
+
+ATF_TC(siginfo1);
+ATF_TC_HEAD(siginfo1, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic PT_GET_SIGINFO call for SIGTRAP from tracee");
+}
+
+ATF_TC_BODY(siginfo1, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGTRAP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_siginfo info;
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+ printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+ info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+ info.psi_siginfo.si_errno);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(siginfo2);
+ATF_TC_HEAD(siginfo2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic PT_GET_SIGINFO and PT_SET_SIGINFO calls without "
+ "modification of SIGINT from tracee");
+}
+
+static int siginfo2_caught = 0;
+
+static void
+siginfo2_sighandler(int sig)
+{
+ FORKEE_ASSERT_EQ(sig, SIGINT);
+
+ ++siginfo2_caught;
+}
+
+ATF_TC_BODY(siginfo2, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGINT;
+ pid_t child, wpid;
+ struct sigaction sa;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_siginfo info;
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ sa.sa_handler = siginfo2_sighandler;
+ sa.sa_flags = SA_SIGINFO;
+ sigemptyset(&sa.sa_mask);
+
+ FORKEE_ASSERT(sigaction(sigval, &sa, NULL) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(siginfo2_caught, 1);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+ printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+ info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+ info.psi_siginfo.si_errno);
+
+ printf("Before calling ptrace(2) with PT_SET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_SET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigval) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(siginfo3);
+ATF_TC_HEAD(siginfo3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify basic PT_GET_SIGINFO and PT_SET_SIGINFO calls with "
+ "setting signal to new value");
+}
+
+static int siginfo3_caught = 0;
+
+static void
+siginfo3_sigaction(int sig, siginfo_t *info, void *ctx)
+{
+ FORKEE_ASSERT_EQ(sig, SIGTRAP);
+
+ FORKEE_ASSERT_EQ(info->si_signo, SIGTRAP);
+ FORKEE_ASSERT_EQ(info->si_code, TRAP_BRKPT);
+
+ ++siginfo3_caught;
+}
+
+ATF_TC_BODY(siginfo3, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGINT;
+ const int sigfaked = SIGTRAP;
+ const int sicodefaked = TRAP_BRKPT;
+ pid_t child, wpid;
+ struct sigaction sa;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ struct ptrace_siginfo info;
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ sa.sa_sigaction = siginfo3_sigaction;
+ sa.sa_flags = SA_SIGINFO;
+ sigemptyset(&sa.sa_mask);
+
+ FORKEE_ASSERT(sigaction(sigfaked, &sa, NULL) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(siginfo3_caught, 1);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+ printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+ info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+ info.psi_siginfo.si_errno);
+
+ printf("Before setting new faked signal to signo=%d si_code=%d\n",
+ sigfaked, sicodefaked);
+ info.psi_siginfo.si_signo = sigfaked;
+ info.psi_siginfo.si_code = sicodefaked;
+
+ printf("Before calling ptrace(2) with PT_SET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_SET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, sigfaked);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, sicodefaked);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, sigfaked) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+ATF_TC(siginfo4);
+ATF_TC_HEAD(siginfo4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Detect SIGTRAP TRAP_EXEC from tracee");
+}
+
+ATF_TC_BODY(siginfo4, tc)
+{
+ const int sigval = SIGTRAP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+
+ struct ptrace_siginfo info;
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before calling execve(2) from child\n");
+ execlp("/bin/echo", "/bin/echo", NULL);
+
+ FORKEE_ASSERT(0 && "Not reached");
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Signal traced to lwpid=%d\n", info.psi_lwpid);
+ printf("Signal properties: si_signo=%#x si_code=%#x si_errno=%#x\n",
+ info.psi_siginfo.si_signo, info.psi_siginfo.si_code,
+ info.psi_siginfo.si_errno);
+
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, sigval);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_EXEC);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+
+#if defined(TWAIT_HAVE_PID)
+ATF_TC(siginfo5);
+ATF_TC_HEAD(siginfo5, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify that fork(2) is intercepted by ptrace(2) with EVENT_MASK "
+ "set to PTRACE_FORK and reports correct signal information");
+}
+
+ATF_TC_BODY(siginfo5, tc)
+{
+ const int exitval = 5;
+ const int exitval2 = 15;
+ const int sigval = SIGSTOP;
+ pid_t child, child2, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ ptrace_state_t state;
+ const int slen = sizeof(state);
+ ptrace_event_t event;
+ const int elen = sizeof(event);
+ struct ptrace_siginfo info;
+
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT((child2 = fork()) != 1);
+
+ if (child2 == 0)
+ _exit(exitval2);
+
+ FORKEE_REQUIRE_SUCCESS
+ (wpid = TWAIT_GENERIC(child2, &status, 0), child2);
+
+ forkee_status_exited(status, exitval2);
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, sigval);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, SI_LWP);
+
+ printf("Enable PTRACE_FORK in EVENT_MASK for the child %d\n", child);
+ event.pe_set_event = PTRACE_FORK;
+ ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, child, &event, elen) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child %d\n", TWAIT_FNAME, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_CHLD);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_FORK);
+
+ child2 = state.pe_other_pid;
+ printf("Reported PTRACE_FORK event with forkee %d\n", child2);
+
+ printf("Before calling %s() for the forkee %d of the child %d\n",
+ TWAIT_FNAME, child2, child);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_CHLD);
+
+ ATF_REQUIRE(ptrace(PT_GET_PROCESS_STATE, child2, &state, slen) != -1);
+ ATF_REQUIRE_EQ(state.pe_report_event, PTRACE_FORK);
+ ATF_REQUIRE_EQ(state.pe_other_pid, child);
+
+ printf("Before resuming the forkee process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child2, (void *)1, 0) != -1);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the forkee - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child2, &status, 0),
+ child2);
+
+ validate_status_exited(status, exitval2);
+
+ printf("Before calling %s() for the forkee - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD,
+ wpid = TWAIT_GENERIC(child2, &status, 0));
+
+ printf("Before calling %s() for the child - expected stopped "
+ "SIGCHLD\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGCHLD);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGCHLD);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, CLD_EXITED);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child - expected exited\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child - expected no process\n",
+ TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+#if defined(PT_STEP)
+ATF_TC(siginfo6);
+ATF_TC_HEAD(siginfo6, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Verify single PT_STEP call with signal information check");
+}
+
+ATF_TC_BODY(siginfo6, tc)
+{
+ const int exitval = 5;
+ const int sigval = SIGSTOP;
+ pid_t child, wpid;
+#if defined(TWAIT_HAVE_STATUS)
+ int status;
+#endif
+ int happy;
+ struct ptrace_siginfo info;
+
+ memset(&info, 0, sizeof(info));
+
+ printf("Before forking process PID=%d\n", getpid());
+ ATF_REQUIRE((child = fork()) != -1);
+ if (child == 0) {
+ printf("Before calling PT_TRACE_ME from child %d\n", getpid());
+ FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
+
+ happy = check_happy(100);
+
+ printf("Before raising %s from child\n", strsignal(sigval));
+ FORKEE_ASSERT(raise(sigval) == 0);
+
+ FORKEE_ASSERT_EQ(happy, check_happy(100));
+
+ printf("Before exiting of the child process\n");
+ _exit(exitval);
+ }
+ printf("Parent process PID=%d, child's PID=%d\n", getpid(), child);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, sigval);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, sigval);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, SI_LWP);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent (use PT_STEP)\n");
+ ATF_REQUIRE(ptrace(PT_STEP, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_stopped(status, SIGTRAP);
+
+ printf("Before calling ptrace(2) with PT_GET_SIGINFO for child\n");
+ ATF_REQUIRE(ptrace(PT_GET_SIGINFO, child, &info, sizeof(info)) != -1);
+
+ printf("Before checking siginfo_t\n");
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_signo, SIGTRAP);
+ ATF_REQUIRE_EQ(info.psi_siginfo.si_code, TRAP_TRACE);
+
+ printf("Before resuming the child process where it left off and "
+ "without signal to be sent\n");
+ ATF_REQUIRE(ptrace(PT_CONTINUE, child, (void *)1, 0) != -1);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child);
+
+ validate_status_exited(status, exitval);
+
+ printf("Before calling %s() for the child\n", TWAIT_FNAME);
+ TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0));
+}
+#endif
+
+ATF_TP_ADD_TCS(tp)
+{
+ setvbuf(stdout, NULL, _IONBF, 0);
+ setvbuf(stderr, NULL, _IONBF, 0);
+ ATF_TP_ADD_TC(tp, traceme1);
+ ATF_TP_ADD_TC(tp, traceme2);
+ ATF_TP_ADD_TC(tp, traceme3);
+ ATF_TP_ADD_TC(tp, traceme4);
+
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach1);
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach2);
+ ATF_TP_ADD_TC(tp, attach3);
+ ATF_TP_ADD_TC(tp, attach4);
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach5);
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach6);
+ ATF_TP_ADD_TC_HAVE_PID(tp, attach7);
+
+ ATF_TP_ADD_TC(tp, eventmask1);
+ ATF_TP_ADD_TC(tp, eventmask2);
+
+ ATF_TP_ADD_TC_HAVE_PID(tp, fork1);
+ ATF_TP_ADD_TC(tp, fork2);
+
+ ATF_TP_ADD_TC_HAVE_PID(tp, vfork1);
+ ATF_TP_ADD_TC(tp, vfork2);
+
+ ATF_TP_ADD_TC(tp, io_read_d1);
+ ATF_TP_ADD_TC(tp, io_read_d2);
+ ATF_TP_ADD_TC(tp, io_read_d3);
+ ATF_TP_ADD_TC(tp, io_read_d4);
+
+ ATF_TP_ADD_TC(tp, io_write_d1);
+ ATF_TP_ADD_TC(tp, io_write_d2);
+ ATF_TP_ADD_TC(tp, io_write_d3);
+ ATF_TP_ADD_TC(tp, io_write_d4);
+
+ ATF_TP_ADD_TC(tp, read_d1);
+ ATF_TP_ADD_TC(tp, read_d2);
+ ATF_TP_ADD_TC(tp, read_d3);
+ ATF_TP_ADD_TC(tp, read_d4);
+
+ ATF_TP_ADD_TC(tp, write_d1);
+ ATF_TP_ADD_TC(tp, write_d2);
+ ATF_TP_ADD_TC(tp, write_d3);
+ ATF_TP_ADD_TC(tp, write_d4);
+
+ ATF_TP_ADD_TC(tp, io_read_d_write_d_handshake1);
+ ATF_TP_ADD_TC(tp, io_read_d_write_d_handshake2);
+
+ ATF_TP_ADD_TC(tp, read_d_write_d_handshake1);
+ ATF_TP_ADD_TC(tp, read_d_write_d_handshake2);
+
+ ATF_TP_ADD_TC(tp, io_read_i1);
+ ATF_TP_ADD_TC(tp, io_read_i2);
+ ATF_TP_ADD_TC(tp, io_read_i3);
+ ATF_TP_ADD_TC(tp, io_read_i4);
+
+ ATF_TP_ADD_TC(tp, read_i1);
+ ATF_TP_ADD_TC(tp, read_i2);
+ ATF_TP_ADD_TC(tp, read_i3);
+ ATF_TP_ADD_TC(tp, read_i4);
+
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs1);
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs2);
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs3);
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs4);
+ ATF_TP_ADD_TC_HAVE_GPREGS(tp, regs5);
+
+ ATF_TP_ADD_TC_HAVE_FPREGS(tp, fpregs1);
+ ATF_TP_ADD_TC_HAVE_FPREGS(tp, fpregs2);
+
+ ATF_TP_ADD_TC_PT_STEP(tp, step1);
+ ATF_TP_ADD_TC_PT_STEP(tp, step2);
+ ATF_TP_ADD_TC_PT_STEP(tp, step3);
+ ATF_TP_ADD_TC_PT_STEP(tp, step4);
+
+ ATF_TP_ADD_TC(tp, kill1);
+ ATF_TP_ADD_TC(tp, kill2);
+
+ ATF_TP_ADD_TC(tp, lwpinfo1);
+ ATF_TP_ADD_TC_HAVE_PID(tp, lwpinfo2);
+
+ ATF_TP_ADD_TC(tp, siginfo1);
+ ATF_TP_ADD_TC(tp, siginfo2);
+ ATF_TP_ADD_TC(tp, siginfo3);
+ ATF_TP_ADD_TC(tp, siginfo4);
+ ATF_TP_ADD_TC_HAVE_PID(tp, siginfo5);
+ ATF_TP_ADD_TC_PT_STEP(tp, siginfo6);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait.h b/contrib/netbsd-tests/kernel/t_ptrace_wait.h
new file mode 100644
index 0000000..9c6921c
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait.h
@@ -0,0 +1,431 @@
+/* $NetBSD: t_ptrace_wait.h,v 1.7 2017/01/09 22:09:20 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Detect plain wait(2) use-case */
+#if !defined(TWAIT_WAITPID) && \
+ !defined(TWAIT_WAITID) && \
+ !defined(TWAIT_WAIT3) && \
+ !defined(TWAIT_WAIT4) && \
+ !defined(TWAIT_WAIT6)
+#define TWAIT_WAIT
+#endif
+
+/*
+ * There are two classes of wait(2)-like functions:
+ * - wait4(2)-like accepting pid_t, optional options parameter, struct rusage*
+ * - wait6(2)-like accepting idtype_t, id_t, struct wrusage, mandatory options
+ *
+ * The TWAIT_FNAME value is to be used for convenience in debug messages.
+ *
+ * The TWAIT_GENERIC() macro is designed to reuse the same unmodified
+ * code with as many wait(2)-like functions as possible.
+ *
+ * In a common use-case wait4(2) and wait6(2)-like function can work the almost
+ * the same way, however there are few important differences:
+ * wait6(2) must specify P_PID for idtype to match wpid from wait4(2).
+ * To behave like wait4(2), wait6(2) the 'options' to wait must include
+ * WEXITED|WTRUNCATED.
+ *
+ * There are two helper macros (they purpose it to mach more than one
+ * wait(2)-like function):
+ * The TWAIT_HAVE_STATUS - specifies whether a function can retrieve
+ * status (as integer value).
+ * The TWAIT_HAVE_PID - specifies whether a function can request
+ * exact process identifier
+ * The TWAIT_HAVE_RUSAGE - specifies whether a function can request
+ * the struct rusage value
+ *
+ */
+
+#if defined(TWAIT_WAIT)
+# define TWAIT_FNAME "wait"
+# define TWAIT_WAIT4TYPE(a,b,c,d) wait((b))
+# define TWAIT_GENERIC(a,b,c) wait((b))
+# define TWAIT_HAVE_STATUS 1
+#elif defined(TWAIT_WAITPID)
+# define TWAIT_FNAME "waitpid"
+# define TWAIT_WAIT4TYPE(a,b,c,d) waitpid((a),(b),(c))
+# define TWAIT_GENERIC(a,b,c) waitpid((a),(b),(c))
+# define TWAIT_HAVE_PID 1
+# define TWAIT_HAVE_STATUS 1
+#elif defined(TWAIT_WAITID)
+# define TWAIT_FNAME "waitid"
+# define TWAIT_GENERIC(a,b,c) \
+ waitid(P_PID,(a),NULL,(c)|WEXITED|WTRAPPED)
+# define TWAIT_WAIT6TYPE(a,b,c,d,e,f) waitid((a),(b),(f),(d))
+# define TWAIT_HAVE_PID 1
+#elif defined(TWAIT_WAIT3)
+# define TWAIT_FNAME "wait3"
+# define TWAIT_WAIT4TYPE(a,b,c,d) wait3((b),(c),(d))
+# define TWAIT_GENERIC(a,b,c) wait3((b),(c),NULL)
+# define TWAIT_HAVE_STATUS 1
+# define TWAIT_HAVE_RUSAGE 1
+#elif defined(TWAIT_WAIT4)
+# define TWAIT_FNAME "wait4"
+# define TWAIT_WAIT4TYPE(a,b,c,d) wait4((a),(b),(c),(d))
+# define TWAIT_GENERIC(a,b,c) wait4((a),(b),(c),NULL)
+# define TWAIT_HAVE_PID 1
+# define TWAIT_HAVE_STATUS 1
+# define TWAIT_HAVE_RUSAGE 1
+#elif defined(TWAIT_WAIT6)
+# define TWAIT_FNAME "wait6"
+# define TWAIT_WAIT6TYPE(a,b,c,d,e,f) wait6((a),(b),(c),(d),(e),(f))
+# define TWAIT_GENERIC(a,b,c) \
+ wait6(P_PID,(a),(b),(c)|WEXITED|WTRAPPED,NULL,NULL)
+# define TWAIT_HAVE_PID 1
+# define TWAIT_HAVE_STATUS 1
+#endif
+
+/*
+ * There are 3 groups of tests:
+ * - TWAIT_GENERIC() (wait, wait2, waitpid, wait3, wait4, wait6)
+ * - TWAIT_WAIT4TYPE() (wait2, waitpid, wait3, wait4)
+ * - TWAIT_WAIT6TYPE() (waitid, wait6)
+ *
+ * Tests only in the above categories are allowed. However some tests are not
+ * possible in the context requested functionality to be verified, therefore
+ * there are helper macros:
+ * - TWAIT_HAVE_PID (wait2, waitpid, waitid, wait4, wait6)
+ * - TWAIT_HAVE_STATUS (wait, wait2, waitpid, wait3, wait4, wait6)
+ * - TWAIT_HAVE_RUSAGE (wait3, wait4)
+ * - TWAIT_HAVE_RETPID (wait, wait2, waitpid, wait3, wait4, wait6)
+ *
+ * If there is an intention to test e.g. wait6(2) specific features in the
+ * ptrace(2) context, find the most matching group and with #ifdefs reduce
+ * functionality of less featured than wait6(2) interface (TWAIT_WAIT6TYPE).
+ *
+ * For clarity never use negative preprocessor checks, like:
+ * #if !defined(TWAIT_WAIT4)
+ * always refer to checks for positive values.
+ */
+
+#define TEST_REQUIRE_EQ(x, y) \
+do { \
+ uintmax_t vx = (x); \
+ uintmax_t vy = (y); \
+ int ret = vx == vy; \
+ if (!ret) \
+ ATF_REQUIRE_EQ_MSG(vx, vy, "%s(%ju) == %s(%ju)", \
+ #x, vx, #y, vy); \
+} while (/*CONSTCOND*/0)
+
+/*
+ * A child process cannot call atf functions and expect them to magically
+ * work like in the parent.
+ * The printf(3) messaging from a child will not work out of the box as well
+ * without estabilishing a communication protocol with its parent. To not
+ * overcomplicate the tests - do not log from a child and use err(3)/errx(3)
+ * wrapped with FORKEE_ASSERT()/FORKEE_ASSERTX() as that is guaranteed to work.
+ */
+#define FORKEE_ASSERT_EQ(x, y) \
+do { \
+ uintmax_t vx = (x); \
+ uintmax_t vy = (y); \
+ int ret = vx == vy; \
+ if (!ret) \
+ errx(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: " \
+ "%s(%ju) == %s(%ju)", __FILE__, __LINE__, __func__, \
+ #x, vx, #y, vy); \
+} while (/*CONSTCOND*/0)
+
+#define FORKEE_ASSERTX(x) \
+do { \
+ int ret = (x); \
+ if (!ret) \
+ errx(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s",\
+ __FILE__, __LINE__, __func__, #x); \
+} while (/*CONSTCOND*/0)
+
+#define FORKEE_ASSERT(x) \
+do { \
+ int ret = (x); \
+ if (!ret) \
+ err(EXIT_FAILURE, "%s:%d %s(): Assertion failed for: %s",\
+ __FILE__, __LINE__, __func__, #x); \
+} while (/*CONSTCOND*/0)
+
+/*
+ * Simplify logic for functions using general purpose registers add HAVE_GPREGS
+ *
+ * For platforms that do not implement all needed calls for simplicity assume
+ * that they are unsupported at all.
+ */
+#if defined(PT_GETREGS) \
+ && defined(PT_SETREGS) \
+ && defined(PTRACE_REG_PC) \
+ && defined(PTRACE_REG_SET_PC) \
+ && defined(PTRACE_REG_SP) \
+ && defined(PTRACE_REG_INTRV)
+#define HAVE_GPREGS
+#endif
+
+/* Add guards for floating point registers */
+#if defined(PT_GETFPREGS) \
+ && defined(PT_SETFPREGS)
+#define HAVE_FPREGS
+#endif
+
+/* Add guards for cpu debug registers */
+#if defined(PT_GETDBREGS) \
+ && defined(PT_SETDBREGS)
+#define HAVE_DBREGS
+#endif
+
+/*
+ * If waitid(2) returns because one or more processes have a state change to
+ * report, 0 is returned. If an error is detected, a value of -1 is returned
+ * and errno is set to indicate the error. If WNOHANG is specified and there
+ * are no stopped, continued or exited children, 0 is returned.
+ */
+#if defined(TWAIT_WAITID)
+#define TWAIT_REQUIRE_SUCCESS(a,b) TEST_REQUIRE_EQ((a), 0)
+#define TWAIT_REQUIRE_FAILURE(a,b) ATF_REQUIRE_ERRNO((a),(b) == -1)
+#define FORKEE_REQUIRE_SUCCESS(a,b) FORKEE_ASSERT_EQ(a, 0)
+#define FORKEE_REQUIRE_FAILURE(a,b) \
+ FORKEE_ASSERTX(((a) == errno) && ((b) == -1))
+#else
+#define TWAIT_REQUIRE_SUCCESS(a,b) TEST_REQUIRE_EQ((a), (b))
+#define TWAIT_REQUIRE_FAILURE(a,b) ATF_REQUIRE_ERRNO((a),(b) == -1)
+#define FORKEE_REQUIRE_SUCCESS(a,b) FORKEE_ASSERT_EQ(a, b)
+#define FORKEE_REQUIRE_FAILURE(a,b) \
+ FORKEE_ASSERTX(((a) == errno) && ((b) == -1))
+#endif
+
+/*
+ * Helper tools to verify whether status reports exited value
+ */
+#if TWAIT_HAVE_STATUS
+static void __used
+validate_status_exited(int status, int expected)
+{
+ ATF_REQUIRE_MSG(WIFEXITED(status), "Reported !exited process");
+ ATF_REQUIRE_MSG(!WIFCONTINUED(status), "Reported continued process");
+ ATF_REQUIRE_MSG(!WIFSIGNALED(status), "Reported signaled process");
+ ATF_REQUIRE_MSG(!WIFSTOPPED(status), "Reported stopped process");
+
+ ATF_REQUIRE_EQ_MSG(WEXITSTATUS(status), expected,
+ "The process has exited with invalid value %d != %d",
+ WEXITSTATUS(status), expected);
+}
+
+static void __used
+forkee_status_exited(int status, int expected)
+{
+ FORKEE_ASSERTX(WIFEXITED(status));
+ FORKEE_ASSERTX(!WIFCONTINUED(status));
+ FORKEE_ASSERTX(!WIFSIGNALED(status));
+ FORKEE_ASSERTX(!WIFSTOPPED(status));
+
+ FORKEE_ASSERT_EQ(WEXITSTATUS(status), expected);
+}
+
+static void __used
+validate_status_continued(int status)
+{
+ ATF_REQUIRE_MSG(!WIFEXITED(status), "Reported exited process");
+ ATF_REQUIRE_MSG(WIFCONTINUED(status), "Reported !continued process");
+ ATF_REQUIRE_MSG(!WIFSIGNALED(status), "Reported signaled process");
+ ATF_REQUIRE_MSG(!WIFSTOPPED(status), "Reported stopped process");
+}
+
+static void __used
+forkee_status_continued(int status)
+{
+ FORKEE_ASSERTX(!WIFEXITED(status));
+ FORKEE_ASSERTX(WIFCONTINUED(status));
+ FORKEE_ASSERTX(!WIFSIGNALED(status));
+ FORKEE_ASSERTX(!WIFSTOPPED(status));
+}
+
+static void __used
+validate_status_signaled(int status, int expected_termsig, int expected_core)
+{
+ ATF_REQUIRE_MSG(!WIFEXITED(status), "Reported exited process");
+ ATF_REQUIRE_MSG(!WIFCONTINUED(status), "Reported continued process");
+ ATF_REQUIRE_MSG(WIFSIGNALED(status), "Reported !signaled process");
+ ATF_REQUIRE_MSG(!WIFSTOPPED(status), "Reported stopped process");
+
+ ATF_REQUIRE_EQ_MSG(WTERMSIG(status), expected_termsig,
+ "Unexpected signal received");
+
+ ATF_REQUIRE_EQ_MSG(WCOREDUMP(status), expected_core,
+ "Unexpectedly core file %s generated", expected_core ? "not" : "");
+}
+
+static void __used
+forkee_status_signaled(int status, int expected_termsig, int expected_core)
+{
+ FORKEE_ASSERTX(!WIFEXITED(status));
+ FORKEE_ASSERTX(!WIFCONTINUED(status));
+ FORKEE_ASSERTX(WIFSIGNALED(status));
+ FORKEE_ASSERTX(!WIFSTOPPED(status));
+
+ FORKEE_ASSERT_EQ(WTERMSIG(status), expected_termsig);
+ FORKEE_ASSERT_EQ(WCOREDUMP(status), expected_core);
+}
+
+static void __used
+validate_status_stopped(int status, int expected)
+{
+ ATF_REQUIRE_MSG(!WIFEXITED(status), "Reported exited process");
+ ATF_REQUIRE_MSG(!WIFCONTINUED(status), "Reported continued process");
+ ATF_REQUIRE_MSG(!WIFSIGNALED(status), "Reported signaled process");
+ ATF_REQUIRE_MSG(WIFSTOPPED(status), "Reported !stopped process");
+
+ char st[128], ex[128];
+ strlcpy(st, strsignal(WSTOPSIG(status)), sizeof(st));
+ strlcpy(ex, strsignal(expected), sizeof(ex));
+
+ ATF_REQUIRE_EQ_MSG(WSTOPSIG(status), expected,
+ "Unexpected stop signal received [%s] != [%s]", st, ex);
+}
+
+static void __used
+forkee_status_stopped(int status, int expected)
+{
+ FORKEE_ASSERTX(!WIFEXITED(status));
+ FORKEE_ASSERTX(!WIFCONTINUED(status));
+ FORKEE_ASSERTX(!WIFSIGNALED(status));
+ FORKEE_ASSERTX(WIFSTOPPED(status));
+
+ FORKEE_ASSERT_EQ(WSTOPSIG(status), expected);
+}
+#else
+#define validate_status_exited(a,b)
+#define forkee_status_exited(a,b)
+#define validate_status_continued(a,b)
+#define forkee_status_continued(a,b)
+#define validate_status_signaled(a,b,c)
+#define forkee_status_signaled(a,b,c)
+#define validate_status_stopped(a,b)
+#define forkee_status_stopped(a,b)
+#endif
+
+/* This function is currently designed to be run in the main/parent process */
+static void __used
+await_zombie(pid_t process)
+{
+ struct kinfo_proc2 p;
+ size_t len = sizeof(p);
+
+ const int name[] = {
+ [0] = CTL_KERN,
+ [1] = KERN_PROC2,
+ [2] = KERN_PROC_PID,
+ [3] = process,
+ [4] = sizeof(p),
+ [5] = 1
+ };
+
+ const size_t namelen = __arraycount(name);
+
+ /* Await the process becoming a zombie */
+ while(1) {
+ ATF_REQUIRE(sysctl(name, namelen, &p, &len, NULL, 0) == 0);
+
+ if (p.p_stat == LSZOMB)
+ break;
+
+ ATF_REQUIRE(usleep(1000) == 0);
+ }
+}
+
+/* Happy number sequence -- this function is used to just consume cpu cycles */
+#define HAPPY_NUMBER 1
+
+/* If n is not happy then its sequence ends in the cycle:
+ * 4, 16, 37, 58, 89, 145, 42, 20, 4, ... */
+#define SAD_NUMBER 4
+
+/* Calculate the sum of the squares of the digits of n */
+static unsigned __used
+dsum(unsigned n)
+{
+ unsigned sum, x;
+ for (sum = 0; n; n /= 10) {
+ x = n % 10;
+ sum += x * x;
+ }
+ return sum;
+}
+
+/*
+ * XXX: Disabled optimization is required to make tests for hardware assisted
+ * traps in .text functional
+ *
+ * Tested with GCC 5.4 on NetBSD 7.99.47 amd64
+ */
+static int __used
+#ifdef __clang__
+__attribute__((__optnone__))
+#else
+__attribute__((__optimize__("O0")))
+#endif
+check_happy(unsigned n)
+{
+ for (;;) {
+ unsigned total = dsum(n);
+
+ if (total == HAPPY_NUMBER)
+ return 1;
+ if (total == SAD_NUMBER)
+ return 0;
+
+ n = total;
+ }
+}
+
+#if defined(TWAIT_HAVE_PID)
+#define ATF_TP_ADD_TC_HAVE_PID(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_HAVE_PID(a,b)
+#endif
+
+#if defined(HAVE_GPREGS)
+#define ATF_TP_ADD_TC_HAVE_GPREGS(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_HAVE_GPREGS(a,b)
+#endif
+
+#if defined(HAVE_FPREGS)
+#define ATF_TP_ADD_TC_HAVE_FPREGS(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_HAVE_FPREGS(a,b)
+#endif
+
+#if defined(PT_STEP)
+#define ATF_TP_ADD_TC_PT_STEP(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_PT_STEP(a,b)
+#endif
+
+#if defined(__HAVE_PTRACE_WATCHPOINTS)
+#define ATF_TP_ADD_TC_HAVE_PTRACE_WATCHPOINTS(a,b) ATF_TP_ADD_TC(a,b)
+#else
+#define ATF_TP_ADD_TC_HAVE_PTRACE_WATCHPOINTS(a,b)
+#endif
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait3.c b/contrib/netbsd-tests/kernel/t_ptrace_wait3.c
new file mode 100644
index 0000000..c136431
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait3.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_wait3.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAIT3
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait4.c b/contrib/netbsd-tests/kernel/t_ptrace_wait4.c
new file mode 100644
index 0000000..7ae771b
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait4.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_wait4.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAIT4
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_wait6.c b/contrib/netbsd-tests/kernel/t_ptrace_wait6.c
new file mode 100644
index 0000000..122cb1d
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_wait6.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_wait6.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAIT6
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_waitid.c b/contrib/netbsd-tests/kernel/t_ptrace_waitid.c
new file mode 100644
index 0000000..1c09be7
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_waitid.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_waitid.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAITID
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_ptrace_waitpid.c b/contrib/netbsd-tests/kernel/t_ptrace_waitpid.c
new file mode 100644
index 0000000..c8f107d
--- /dev/null
+++ b/contrib/netbsd-tests/kernel/t_ptrace_waitpid.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_ptrace_waitpid.c,v 1.1 2016/11/07 21:09:03 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_WAITPID
+#include "t_ptrace_wait.c"
diff --git a/contrib/netbsd-tests/kernel/t_rnd.c b/contrib/netbsd-tests/kernel/t_rnd.c
index 7f1f288..8646130 100644
--- a/contrib/netbsd-tests/kernel/t_rnd.c
+++ b/contrib/netbsd-tests/kernel/t_rnd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_rnd.c,v 1.5 2012/03/18 09:46:50 jruoho Exp $ */
+/* $NetBSD: t_rnd.c,v 1.9 2016/05/22 04:34:44 riastradh Exp $ */
/*
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -27,12 +27,12 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_rnd.c,v 1.5 2012/03/18 09:46:50 jruoho Exp $");
+__RCSID("$NetBSD: t_rnd.c,v 1.9 2016/05/22 04:34:44 riastradh Exp $");
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
-#include <sys/rnd.h>
+#include <sys/rndio.h>
#include <atf-c.h>
@@ -86,10 +86,29 @@ ATF_TC_BODY(RNDADDDATA2, tc)
ATF_REQUIRE_ERRNO(EINVAL, rump_sys_ioctl(fd, RNDADDDATA, &rd) == -1);
}
+ATF_TC(read_random);
+ATF_TC_HEAD(read_random, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "does reading /dev/random return "
+ "within reasonable time");
+ atf_tc_set_md_var(tc, "timeout", "10");
+}
+
+ATF_TC_BODY(read_random, tc)
+{
+ char buf[128];
+ int fd;
+
+ rump_init();
+ RL(fd = rump_sys_open("/dev/random", O_RDONLY));
+ RL(rump_sys_read(fd, buf, sizeof(buf)));
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, RNDADDDATA);
ATF_TP_ADD_TC(tp, RNDADDDATA2);
+ ATF_TP_ADD_TC(tp, read_random);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c b/contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c
index da67c1b3..4d81dd6 100644
--- a/contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c
+++ b/contrib/netbsd-tests/lib/libbpfjit/t_bpfjit.c
@@ -1,7 +1,7 @@
-/* $NetBSD: t_bpfjit.c,v 1.6 2014/07/08 21:07:52 alnsn Exp $ */
+/* $NetBSD: t_bpfjit.c,v 1.14 2015/02/14 22:40:18 alnsn Exp $ */
/*-
- * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
+ * Copyright (c) 2011-2012, 2014-2015 Alexander Nasonov.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_bpfjit.c,v 1.6 2014/07/08 21:07:52 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.14 2015/02/14 22:40:18 alnsn Exp $");
#include <atf-c.h>
#include <stdint.h>
@@ -67,9 +67,75 @@ ATF_TC_BODY(libbpfjit_empty, tc)
{
struct bpf_insn dummy;
+ ATF_CHECK(!bpf_validate(&dummy, 0));
ATF_CHECK(bpfjit_generate_code(NULL, &dummy, 0) == NULL);
}
+ATF_TC(libbpfjit_ret_k);
+ATF_TC_HEAD(libbpfjit_ret_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of a trivial bpf program");
+}
+
+ATF_TC_BODY(libbpfjit_ret_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_RET+BPF_K, 17)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 17);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_bad_ret_k);
+ATF_TC_HEAD(libbpfjit_bad_ret_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that JIT compilation of a program with bad BPF_RET fails");
+}
+
+ATF_TC_BODY(libbpfjit_bad_ret_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_RET+BPF_K+0x8000, 13)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ /*
+ * The point of this test is checking a bad instruction of
+ * a valid class and with a valid BPF_RVAL data.
+ */
+ const uint16_t rcode = insns[0].code;
+ ATF_CHECK(BPF_CLASS(rcode) == BPF_RET &&
+ (BPF_RVAL(rcode) == BPF_K || BPF_RVAL(rcode) == BPF_A));
+
+ ATF_CHECK(!bpf_validate(insns, insn_count));
+
+ /* Current implementation generates code. */
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 13);
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_add_k);
ATF_TC_HEAD(libbpfjit_alu_add_k, tc)
{
@@ -399,6 +465,245 @@ ATF_TC_BODY(libbpfjit_alu_div80000000_k, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_alu_mod0_k);
+ATF_TC_HEAD(libbpfjit_alu_mod0_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod0_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ //ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod1_k);
+ATF_TC_HEAD(libbpfjit_alu_mod1_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=1");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod1_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 1),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod2_k);
+ATF_TC_HEAD(libbpfjit_alu_mod2_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=2");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod2_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 2),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod4_k);
+ATF_TC_HEAD(libbpfjit_alu_mod4_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=4");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod4_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 4),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 3);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod10_k);
+ATF_TC_HEAD(libbpfjit_alu_mod10_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod10_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 9);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod10000_k);
+ATF_TC_HEAD(libbpfjit_alu_mod10000_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10000");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod10000_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10000),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 3849);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod7609801_k);
+ATF_TC_HEAD(libbpfjit_alu_mod7609801_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_mod+BPF_K with k=7609801");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod7609801_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(7609801)),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(3039531));
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod80000000_k);
+ATF_TC_HEAD(libbpfjit_alu_mod80000000_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0x80000000");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod80000000_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(0x80000000)),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x7fffffde));
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_and_k);
ATF_TC_HEAD(libbpfjit_alu_and_k, tc)
{
@@ -459,6 +764,36 @@ ATF_TC_BODY(libbpfjit_alu_or_k, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_alu_xor_k);
+ATF_TC_HEAD(libbpfjit_alu_xor_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_K");
+}
+
+ATF_TC_BODY(libbpfjit_alu_xor_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+ BPF_STMT(BPF_ALU+BPF_XOR+BPF_K, 0x0000b1e0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_lsh_k);
ATF_TC_HEAD(libbpfjit_alu_lsh_k, tc)
{
@@ -962,7 +1297,7 @@ ATF_TC_HEAD(libbpfjit_alu_div80000000_x, tc)
ATF_TC_BODY(libbpfjit_alu_div80000000_x, tc)
{
static struct bpf_insn insns[] = {
- BPF_STMT(BPF_LD+BPF_IMM, UINT32_MAX - 33),
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
BPF_STMT(BPF_RET+BPF_A, 0)
@@ -983,6 +1318,253 @@ ATF_TC_BODY(libbpfjit_alu_div80000000_x, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_alu_mod0_x);
+ATF_TC_HEAD(libbpfjit_alu_mod0_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod0_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod1_x);
+ATF_TC_HEAD(libbpfjit_alu_mod1_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=1");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod1_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod2_x);
+ATF_TC_HEAD(libbpfjit_alu_mod2_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=2");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod2_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 1);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod4_x);
+ATF_TC_HEAD(libbpfjit_alu_mod4_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=4");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod4_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 3);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod10_x);
+ATF_TC_HEAD(libbpfjit_alu_mod10_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod10_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 9);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod10000_x);
+ATF_TC_HEAD(libbpfjit_alu_mod10000_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10000");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod10000_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10000),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 3849);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod7609801_x);
+ATF_TC_HEAD(libbpfjit_alu_mod7609801_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=7609801");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod7609801_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(7609801)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(3039531));
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_alu_mod80000000_x);
+ATF_TC_HEAD(libbpfjit_alu_mod80000000_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0x80000000");
+}
+
+ATF_TC_BODY(libbpfjit_alu_mod80000000_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == UINT32_C(0x7fffffde));
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_and_x);
ATF_TC_HEAD(libbpfjit_alu_and_x, tc)
{
@@ -1045,6 +1627,37 @@ ATF_TC_BODY(libbpfjit_alu_or_x, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_alu_xor_x);
+ATF_TC_HEAD(libbpfjit_alu_xor_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_X");
+}
+
+ATF_TC_BODY(libbpfjit_alu_xor_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0x0000b1e0),
+ BPF_STMT(BPF_ALU+BPF_XOR+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 0xdeadbeef);
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_alu_lsh_x);
ATF_TC_HEAD(libbpfjit_alu_lsh_x, tc)
{
@@ -1305,6 +1918,54 @@ ATF_TC_BODY(libbpfjit_jmp_ja, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_jmp_ja_invalid);
+ATF_TC_HEAD(libbpfjit_jmp_ja_invalid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test BPF_JMP+BPF_JA to invalid destination");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_ja_invalid, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 4),
+ BPF_STMT(BPF_RET+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_K, 1),
+ BPF_STMT(BPF_RET+BPF_K, 2),
+ BPF_STMT(BPF_RET+BPF_K, 3),
+ };
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(!bpf_validate(insns, insn_count));
+ ATF_CHECK(bpfjit_generate_code(NULL, insns, insn_count) == NULL);
+}
+
+ATF_TC(libbpfjit_jmp_ja_overflow);
+ATF_TC_HEAD(libbpfjit_jmp_ja_overflow, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test BPF_JMP+BPF_JA with negative offset");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_ja_overflow, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 1),
+ BPF_STMT(BPF_RET+BPF_K, 777),
+ BPF_STMT(BPF_JMP+BPF_JA, UINT32_MAX - 1), // -2
+ BPF_STMT(BPF_RET+BPF_K, 0)
+ };
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ /* Jumps with negative offsets work in userspace ... */
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ /* .. but not for bpfjit. */
+ ATF_CHECK(bpfjit_generate_code(NULL, insns, insn_count) == NULL);
+}
+
ATF_TC(libbpfjit_jmp_jgt_k);
ATF_TC_HEAD(libbpfjit_jmp_jgt_k, tc)
{
@@ -1693,26 +2354,26 @@ ATF_TC_BODY(libbpfjit_jmp_jeq_x, tc)
BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
- BPF_STMT(BPF_RET+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_K, 1),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 0),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
- BPF_STMT(BPF_RET+BPF_K, 1),
- BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
BPF_STMT(BPF_RET+BPF_K, 2),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 3),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 3),
- BPF_STMT(BPF_RET+BPF_K, 3),
BPF_STMT(BPF_RET+BPF_K, 4),
BPF_STMT(BPF_RET+BPF_K, 5),
+ BPF_STMT(BPF_RET+BPF_K, 6),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 3, 1),
- BPF_STMT(BPF_RET+BPF_K, 6),
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 0),
BPF_STMT(BPF_RET+BPF_K, 7),
- BPF_STMT(BPF_RET+BPF_K, 8)
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
+ BPF_STMT(BPF_RET+BPF_K, 8),
+ BPF_STMT(BPF_RET+BPF_K, 9)
};
bpfjit_func_t code;
@@ -1725,14 +2386,14 @@ ATF_TC_BODY(libbpfjit_jmp_jeq_x, tc)
code = bpfjit_generate_code(NULL, insns, insn_count);
ATF_REQUIRE(code != NULL);
- ATF_CHECK(jitcall(code, pkt, 1, 1) == 7);
- ATF_CHECK(jitcall(code, pkt, 2, 2) == 7);
- ATF_CHECK(jitcall(code, pkt, 3, 3) == 1);
- ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
- ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
- ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
- ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
- ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 8);
+ ATF_CHECK(jitcall(code, pkt, 2, 2) == 8);
+ ATF_CHECK(jitcall(code, pkt, 3, 3) == 2);
+ ATF_CHECK(jitcall(code, pkt, 4, 4) == 8);
+ ATF_CHECK(jitcall(code, pkt, 5, 5) == 3);
+ ATF_CHECK(jitcall(code, pkt, 6, 6) == 9);
+ ATF_CHECK(jitcall(code, pkt, 7, 7) == 6);
+ ATF_CHECK(jitcall(code, pkt, 8, 8) == 1);
bpfjit_free_code(code);
}
@@ -1794,6 +2455,98 @@ ATF_TC_BODY(libbpfjit_jmp_jset_x, tc)
bpfjit_free_code(code);
}
+ATF_TC(libbpfjit_jmp_jeq_x_noinit_ax);
+ATF_TC_HEAD(libbpfjit_jmp_jeq_x_noinit_ax, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised A and X");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_jeq_x_noinit_ax, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 10);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_jmp_jeq_x_noinit_a);
+ATF_TC_HEAD(libbpfjit_jmp_jeq_x_noinit_a, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised A");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_jeq_x_noinit_a, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0), /* X > 0 */
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+ bpfjit_free_code(code);
+}
+
+ATF_TC(libbpfjit_jmp_jeq_x_noinit_x);
+ATF_TC_HEAD(libbpfjit_jmp_jeq_x_noinit_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised X");
+}
+
+ATF_TC_BODY(libbpfjit_jmp_jeq_x_noinit_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_LEN, 0), /* A > 0 */
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ ATF_CHECK(bpf_validate(insns, insn_count));
+
+ code = bpfjit_generate_code(NULL, insns, insn_count);
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+ bpfjit_free_code(code);
+}
+
ATF_TC(libbpfjit_jmp_modulo_x);
ATF_TC_HEAD(libbpfjit_jmp_modulo_x, tc)
{
@@ -3883,6 +4636,8 @@ ATF_TP_ADD_TCS(tp)
* to ../../net/bpfjit/t_bpfjit.c
*/
ATF_TP_ADD_TC(tp, libbpfjit_empty);
+ ATF_TP_ADD_TC(tp, libbpfjit_ret_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_bad_ret_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_add_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_sub_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_mul_k);
@@ -3894,8 +4649,17 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, libbpfjit_alu_div10000_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_div7609801_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_div80000000_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod0_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod1_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod2_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod4_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10000_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod7609801_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod80000000_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_and_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_or_k);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_xor_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh0_k);
ATF_TP_ADD_TC(tp, libbpfjit_alu_rsh_k);
@@ -3912,8 +4676,17 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, libbpfjit_alu_div10000_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_div7609801_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_div80000000_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod0_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod1_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod2_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod4_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod10000_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod7609801_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_mod80000000_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_and_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_or_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_alu_xor_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_lsh0_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_rsh_x);
@@ -3921,6 +4694,8 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, libbpfjit_alu_modulo_x);
ATF_TP_ADD_TC(tp, libbpfjit_alu_neg);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_ja);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_ja_invalid);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_ja_overflow);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jgt_k);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jge_k);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_k);
@@ -3930,6 +4705,9 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jge_x);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_x);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_jset_x);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_x_noinit_ax);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_x_noinit_a);
+ ATF_TP_ADD_TC(tp, libbpfjit_jmp_jeq_x_noinit_x);
ATF_TP_ADD_TC(tp, libbpfjit_jmp_modulo_x);
ATF_TP_ADD_TC(tp, libbpfjit_ld_abs);
ATF_TP_ADD_TC(tp, libbpfjit_ld_abs_k_overflow);
diff --git a/contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S b/contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S
index 5308876..5cb5f39 100644
--- a/contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S
+++ b/contrib/netbsd-tests/lib/libc/arch/ia64/return_one.S
@@ -1,8 +1,11 @@
-/* $NetBSD: return_one.S,v 1.1 2011/07/18 23:16:09 jym Exp $ */
+/* $NetBSD: return_one.S,v 1.2 2016/08/05 15:02:29 scole Exp $ */
#include <machine/asm.h>
-.globl return_one, return_one_end;
+.globl return_one_end
-return_one: return_one_end:
- nop
+ENTRY(return_one,0)
+ mov ret0=1
+ br.ret.sptk.few rp
+return_one_end:
+END(return_one)
diff --git a/contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S b/contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S
index d40298e..10629c5 100644
--- a/contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S
+++ b/contrib/netbsd-tests/lib/libc/arch/powerpc/return_one.S
@@ -1,10 +1,11 @@
-/* $NetBSD: return_one.S,v 1.2 2012/03/16 08:51:47 matt Exp $ */
+/* $NetBSD: return_one.S,v 1.3 2015/03/29 00:38:36 matt Exp $ */
#include <machine/asm.h>
-.globl return_one, return_one_end
+.globl return_one_start, return_one_end
_ENTRY(return_one)
+return_one_start:
li %r3, 1
blr
return_one_end:
diff --git a/contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S b/contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S
index 43ddd2c..d393fd1 100644
--- a/contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S
+++ b/contrib/netbsd-tests/lib/libc/arch/riscv/return_one.S
@@ -1,11 +1,11 @@
-/* $NetBSD: return_one.S,v 1.1 2014/09/19 17:36:26 matt Exp $ */
+/* $NetBSD: return_one.S,v 1.2 2015/03/28 07:07:54 matt Exp $ */
#include <machine/asm.h>
.globl return_one_end
ENTRY_NP(return_one)
- li v0, 1
+ li a0, 1
ret
return_one_end:
END(return_one)
diff --git a/contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c b/contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c
index 474cfc7..8ca38b4 100644
--- a/contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c
+++ b/contrib/netbsd-tests/lib/libc/arch/sparc64/exec_prot_support.c
@@ -1,4 +1,4 @@
-/* $NetBSD: exec_prot_support.c,v 1.1 2011/07/18 23:16:10 jym Exp $ */
+/* $NetBSD: exec_prot_support.c,v 1.2 2016/12/31 11:51:20 martin Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -30,12 +30,13 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: exec_prot_support.c,v 1.1 2011/07/18 23:16:10 jym Exp $");
+__RCSID("$NetBSD: exec_prot_support.c,v 1.2 2016/12/31 11:51:20 martin Exp $");
#include "../../common/exec_prot.h"
int
exec_prot_support(void)
{
- return NOTIMPL;
+
+ return PERPAGE_XP;
}
diff --git a/contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S b/contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S
index 3495260..ec8bcdd 100644
--- a/contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S
+++ b/contrib/netbsd-tests/lib/libc/arch/sparc64/return_one.S
@@ -1,8 +1,11 @@
-/* $NetBSD: return_one.S,v 1.1 2011/07/18 23:16:10 jym Exp $ */
+/* $NetBSD: return_one.S,v 1.2 2016/12/31 11:51:20 martin Exp $ */
#include <machine/asm.h>
-.globl return_one, return_one_end;
+.global return_one_end
-return_one: return_one_end:
- nop
+ENTRY(return_one)
+return_one:
+ retl
+ mov 1, %o0
+return_one_end:
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c b/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c
index 99235ea..7de4f61 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_faccessat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_faccessat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_faccessat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_faccessat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_faccessat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_faccessat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/faccessat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c b/contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c
index 6598059..a7bb683 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_fchmodat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fchmodat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_fchmodat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fchmodat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_fchmodat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_fchmodat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/fchmodat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_fchownat.c b/contrib/netbsd-tests/lib/libc/c063/t_fchownat.c
index 2ca14cf..631d55a 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_fchownat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_fchownat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fchownat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_fchownat.c,v 1.4 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fchownat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_fchownat.c,v 1.4 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -40,10 +42,6 @@ __RCSID("$NetBSD: t_fchownat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
#include <string.h>
#include <unistd.h>
#include <pwd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/fchownat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_fexecve.c b/contrib/netbsd-tests/lib/libc/c063/t_fexecve.c
index 30b26a7..b9aa017 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_fexecve.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_fexecve.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fexecve.c,v 1.2 2013/03/17 04:35:59 jmmv Exp $ */
+/* $NetBSD: t_fexecve.c,v 1.3 2017/01/10 15:15:09 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fexecve.c,v 1.2 2013/03/17 04:35:59 jmmv Exp $");
+__RCSID("$NetBSD: t_fexecve.c,v 1.3 2017/01/10 15:15:09 christos Exp $");
#include <sys/wait.h>
@@ -70,9 +70,7 @@ ATF_TC_BODY(fexecve, tc)
error = 76;
else
error = EXIT_FAILURE;
-#ifdef __FreeBSD__
(void)close(fd);
-#endif
err(error, "fexecve");
}
}
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_fstatat.c b/contrib/netbsd-tests/lib/libc/c063/t_fstatat.c
index b23f625..c17961f 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_fstatat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_fstatat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fstatat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_fstatat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fstatat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_fstatat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_fstatat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/fstatat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c b/contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c
index 3736dfa..5c496c8 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_mkfifoat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mkfifoat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_mkfifoat.c,v 1.3 2017/01/10 15:15:09 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mkfifoat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_mkfifoat.c,v 1.3 2017/01/10 15:15:09 christos Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -63,9 +63,7 @@ ATF_TC_BODY(mkfifoat_fd, tc)
ATF_REQUIRE((fd = mkfifoat(dfd, BASEFIFO, mode)) != -1);
ATF_REQUIRE(close(fd) == 0);
ATF_REQUIRE(access(FIFO, F_OK) == 0);
-#ifdef __FreeBSD__
(void)close(dfd);
-#endif
}
ATF_TC(mkfifoat_fdcwd);
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_mknodat.c b/contrib/netbsd-tests/lib/libc/c063/t_mknodat.c
index e8f71cd..7c3ab9b 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_mknodat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_mknodat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mknodat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_mknodat.c,v 1.4 2017/01/10 15:15:09 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mknodat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_mknodat.c,v 1.4 2017/01/10 15:15:09 christos Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -80,9 +80,7 @@ ATF_TC_BODY(mknodat_fd, tc)
ATF_REQUIRE((fd = mknodat(dfd, BASEFILE, mode, dev)) != -1);
ATF_REQUIRE(close(fd) == 0);
ATF_REQUIRE(access(FILE, F_OK) == 0);
-#ifdef __FreeBSD__
(void)close(dfd);
-#endif
}
ATF_TC(mknodat_fdcwd);
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_o_search.c b/contrib/netbsd-tests/lib/libc/c063/t_o_search.c
index d9dbe19..7cefa8b 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_o_search.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_o_search.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_o_search.c,v 1.4 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_o_search.c,v 1.5 2017/01/10 22:25:01 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,9 +29,13 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_o_search.c,v 1.4 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_o_search.c,v 1.5 2017/01/10 22:25:01 christos Exp $");
#include <atf-c.h>
+
+#include <sys/param.h>
+#include <sys/stat.h>
+
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
@@ -40,7 +44,6 @@ __RCSID("$NetBSD: t_o_search.c,v 1.4 2013/03/17 04:46:06 jmmv Exp $");
#include <string.h>
#include <unistd.h>
#include <pwd.h>
-#include <sys/param.h>
/*
* dholland 20130112: disable tests that require O_SEARCH semantics
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_openat.c b/contrib/netbsd-tests/lib/libc/c063/t_openat.c
index 5112efc..f7c8c74 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_openat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_openat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_openat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_openat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_openat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_openat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_openat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/openat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c b/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c
index c9bc267..cf14652 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_readlinkat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_readlinkat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_readlinkat.c,v 1.4 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_readlinkat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_readlinkat.c,v 1.4 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_readlinkat.c,v 1.3 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/readlinkat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c b/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c
index 220c4b2..9897b92 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_unlinkat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_unlinkat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_unlinkat.c,v 1.3 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_unlinkat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_unlinkat.c,v 1.3 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,10 +41,6 @@ __RCSID("$NetBSD: t_unlinkat.c,v 1.2 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#define DIR "dir"
#define FILE "dir/unlinkat"
diff --git a/contrib/netbsd-tests/lib/libc/c063/t_utimensat.c b/contrib/netbsd-tests/lib/libc/c063/t_utimensat.c
index 9f21fd6..682c2df 100644
--- a/contrib/netbsd-tests/lib/libc/c063/t_utimensat.c
+++ b/contrib/netbsd-tests/lib/libc/c063/t_utimensat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_utimensat.c,v 1.5 2013/03/17 04:46:06 jmmv Exp $ */
+/* $NetBSD: t_utimensat.c,v 1.6 2017/01/10 15:13:56 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,8 +29,11 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_utimensat.c,v 1.5 2013/03/17 04:46:06 jmmv Exp $");
+__RCSID("$NetBSD: t_utimensat.c,v 1.6 2017/01/10 15:13:56 christos Exp $");
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/time.h>
#include <atf-c.h>
#include <errno.h>
#include <fcntl.h>
@@ -39,8 +42,6 @@ __RCSID("$NetBSD: t_utimensat.c,v 1.5 2013/03/17 04:46:06 jmmv Exp $");
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
-#include <sys/time.h>
#define DIR "dir"
#define FILE "dir/utimensat"
diff --git a/contrib/netbsd-tests/lib/libc/db/h_db.c b/contrib/netbsd-tests/lib/libc/db/h_db.c
index dfb1385..dd19a03 100644
--- a/contrib/netbsd-tests/lib/libc/db/h_db.c
+++ b/contrib/netbsd-tests/lib/libc/db/h_db.c
@@ -1,4 +1,4 @@
-/* $NetBSD: h_db.c,v 1.1 2011/01/07 15:05:58 pgoyette Exp $ */
+/* $NetBSD: h_db.c,v 1.3 2016/09/24 21:18:22 christos Exp $ */
/*-
* Copyright (c) 1992, 1993, 1994
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1992, 1993, 1994\
#if 0
static char sccsid[] = "@(#)dbtest.c 8.17 (Berkeley) 9/1/94";
#else
-__RCSID("$NetBSD: h_db.c,v 1.1 2011/01/07 15:05:58 pgoyette Exp $");
+__RCSID("$NetBSD: h_db.c,v 1.3 2016/09/24 21:18:22 christos Exp $");
#endif
#endif /* not lint */
@@ -57,12 +57,13 @@ __RCSID("$NetBSD: h_db.c,v 1.1 2011/01/07 15:05:58 pgoyette Exp $");
#include <unistd.h>
#include <err.h>
#include <db.h>
+#include "btree.h"
enum S { COMMAND, COMPARE, GET, PUT, REMOVE, SEQ, SEQFLAG, KEY, DATA };
static void compare(DBT *, DBT *);
static DBTYPE dbtype(const char *);
-static void dump(DB *, int);
+static void dump(DB *, int, int);
static void get(DB *, DBT *);
static void getdata(DB *, DBT *, DBT *);
static void put(DB *, DBT *, DBT *);
@@ -73,6 +74,9 @@ static void *rfile(char *, size_t *);
static void seq(DB *, DBT *);
static u_int setflags(char *);
static void *setinfo(DBTYPE, char *);
+#ifdef __NetBSD__
+static void unlinkpg(DB *);
+#endif
static void usage(void) __attribute__((__noreturn__));
static void *xcopy(void *, size_t);
static void chkcmd(enum S);
@@ -82,6 +86,9 @@ static void chkkey(enum S);
#ifdef STATISTICS
extern void __bt_stat(DB *);
#endif
+#ifdef __NetBSD__
+extern int __bt_relink(BTREE *, PAGE *);
+#endif
static DBTYPE type; /* Database type. */
static void *infop; /* Iflags. */
@@ -315,8 +322,16 @@ lkey: switch (command) {
}
break;
case 'o':
- dump(dbp, p[1] == 'r');
+ dump(dbp, p[1] == 'r', 0);
+ break;
+#ifdef __NetBSD__
+ case 'O':
+ dump(dbp, p[1] == 'r', 1);
break;
+ case 'u':
+ unlinkpg(dbp);
+ break;
+#endif
default:
errx(1, "line %zu: %s: unknown command character",
lineno, p);
@@ -483,17 +498,25 @@ seq(DB *dbp, DBT *kp)
}
static void
-dump(DB *dbp, int rev)
+dump(DB *dbp, int rev, int recurse)
{
DBT key, data;
int xflags, nflags;
if (rev) {
xflags = R_LAST;
+#ifdef __NetBSD__
+ nflags = recurse ? R_RPREV : R_PREV;
+#else
nflags = R_PREV;
+#endif
} else {
xflags = R_FIRST;
+#ifdef __NetBSD__
+ nflags = recurse ? R_RNEXT : R_NEXT;
+#else
nflags = R_NEXT;
+#endif
}
for (;; xflags = nflags)
switch (dbp->seq(dbp, &key, &data, xflags)) {
@@ -511,6 +534,42 @@ dump(DB *dbp, int rev)
done: return;
}
+#ifdef __NetBSD__
+void
+unlinkpg(DB *dbp)
+{
+ BTREE *t = dbp->internal;
+ PAGE *h = NULL;
+ pgno_t pg;
+
+ for (pg = P_ROOT; pg < t->bt_mp->npages;
+ mpool_put(t->bt_mp, h, 0), pg++) {
+ if ((h = mpool_get(t->bt_mp, pg, 0)) == NULL)
+ break;
+ /* Look for a nonempty leaf page that has both left
+ * and right siblings. */
+ if (h->prevpg == P_INVALID || h->nextpg == P_INVALID)
+ continue;
+ if (NEXTINDEX(h) == 0)
+ continue;
+ if ((h->flags & (P_BLEAF | P_RLEAF)))
+ break;
+ }
+ if (h == NULL || pg == t->bt_mp->npages) {
+ errx(1, "%s: no appropriate page found", __func__);
+ return;
+ }
+ if (__bt_relink(t, h) != 0) {
+ perror("unlinkpg");
+ goto cleanup;
+ }
+ h->prevpg = P_INVALID;
+ h->nextpg = P_INVALID;
+cleanup:
+ mpool_put(t->bt_mp, h, MPOOL_DIRTY);
+}
+#endif
+
static u_int
setflags(char *s)
{
@@ -725,7 +784,11 @@ static void
usage(void)
{
(void)fprintf(stderr,
- "Usage: %s [-l] [-f file] [-i info] [-o file] type script\n",
- getprogname());
+#ifdef __NetBSD__
+ "Usage: %s [-lu] [-f file] [-i info] [-o file] [-O file] "
+#else
+ "Usage: %s [-l] [-f file] [-i info] [-o file] "
+#endif
+ "type script\n", getprogname());
exit(1);
}
diff --git a/contrib/netbsd-tests/lib/libc/db/h_lfsr.c b/contrib/netbsd-tests/lib/libc/db/h_lfsr.c
new file mode 100644
index 0000000..3f3d712
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/db/h_lfsr.c
@@ -0,0 +1,179 @@
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: h_lfsr.c,v 1.1 2015/11/18 18:35:35 christos Exp $");
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <err.h>
+#include <string.h>
+#include <unistd.h>
+#include <db.h>
+
+#define MAXKEY 0xffff
+#ifdef DEBUG
+#define DPRINTF(...) printf(__VA_ARGS__)
+#else
+#define DPRINTF(...)
+#endif
+
+static uint16_t
+next(uint16_t *cur)
+{
+ uint16_t lsb = *cur & 1;
+ *cur >>= 1;
+ *cur ^= (-lsb) & 0xB400u;
+ return *cur;
+}
+
+int
+main(int argc, char *argv[])
+{
+ char buf[65536];
+ char kb[256];
+ DBT key, val;
+ DB *db;
+ HASHINFO hi;
+ uint8_t c;
+ uint16_t len;
+ uint32_t pagesize = atoi(argv[1]);
+
+ memset(&hi, 0, sizeof(hi));
+ memset(buf, 'a', sizeof(buf));
+ hi.bsize = pagesize;
+ hi.nelem = 65536;
+ hi.ffactor = 128;
+
+ key.data = kb;
+ val.data = buf;
+
+ db = dbopen(NULL, O_CREAT|O_TRUNC|O_RDWR, 0, DB_HASH, &hi);
+ if (db == NULL)
+ err(EXIT_FAILURE, "dbopen");
+
+ len = 0xaec1;
+ for (size_t i = 0; i < MAXKEY; i++) {
+ key.size = (len & 0xff) + 1;
+ c = len >> 8;
+ memset(kb, c, key.size);
+ val.size = (next(&len) & 0xff) + 1;
+ switch ((*db->put)(db, &key, &val, R_NOOVERWRITE)) {
+ case 0:
+ DPRINTF("put %zu %zu %#x\n",
+ key.size, val.size, c);
+ break;
+ case -1:
+ err(EXIT_FAILURE, "put error %zu %zu %#x",
+ key.size, val.size, c);
+ case 1:
+ errx(EXIT_FAILURE, "put overwrite %zu %zu %#x",
+ key.size, val.size, c);
+ default:
+ abort();
+ }
+ }
+
+ len = 0xaec1;
+ for (size_t i = 0; i < MAXKEY; i++) {
+ key.size = (len & 0xff) + 1;
+ c = len >> 8;
+ memset(kb, c, key.size);
+ next(&len);
+ switch ((*db->get)(db, &key, &val, 0)) {
+ case 0:
+ DPRINTF("get %zu %zu %#x\n",
+ key.size, val.size, c);
+ break;
+ case -1:
+ err(EXIT_FAILURE, "get %zu %zu %#x",
+ key.size, val.size, c);
+ case 1:
+ errx(EXIT_FAILURE, "get not found %zu %zu %#x",
+ key.size, val.size, c);
+ default:
+ abort();
+ }
+ if (memcmp(key.data, kb, key.size) != 0)
+ errx(EXIT_FAILURE, "get badkey %zu %zu %#x",
+ key.size, val.size, c);
+ if (val.size != (len & 0xff) + 1U)
+ errx(EXIT_FAILURE, "get badvallen %zu %zu %#x",
+ key.size, val.size, c);
+ if (memcmp(val.data, buf, val.size) != 0)
+ errx(EXIT_FAILURE, "get badval %zu %zu %#x",
+ key.size, val.size, c);
+ }
+
+ len = 0xaec1;
+ for (size_t i = 0; i < MAXKEY; i++) {
+ key.size = (len & 0xff) + 1;
+ c = len >> 8;
+ memset(kb, c, key.size);
+ next(&len);
+ switch ((*db->del)(db, &key, 0)) {
+ case 0:
+ DPRINTF("del %zu %zu %#x\n",
+ key.size, val.size, c);
+ break;
+ case -1:
+ err(EXIT_FAILURE, "del %zu %zu %#x", key.size,
+ val.size, c);
+ case 1:
+ errx(EXIT_FAILURE, "del not found %zu %zu %#x",
+ key.size, val.size, c);
+ default:
+ abort();
+ }
+ }
+
+ len = 0xaec1;
+ for (size_t i = 0; i < MAXKEY; i++) {
+ key.size = (len & 0xff) + 1;
+ c = len >> 8;
+ memset(kb, c, key.size);
+ next(&len);
+ switch ((*db->get)(db, &key, &val, 0)) {
+ case 0:
+ errx(EXIT_FAILURE, "get2 found %zu %zu %#x",
+ key.size, val.size, c);
+ break;
+ case -1:
+ err(EXIT_FAILURE, "get2 %zu %zu %#x",
+ key.size, val.size, c);
+ case 1:
+ DPRINTF("get2 %zu %zu %#x\n",
+ key.size, val.size, c);
+ break;
+ default:
+ abort();
+ }
+ }
+ return 0;
+}
diff --git a/contrib/netbsd-tests/lib/libc/db/t_db.sh b/contrib/netbsd-tests/lib/libc/db/t_db.sh
index d256508..6858e36 100755
--- a/contrib/netbsd-tests/lib/libc/db/t_db.sh
+++ b/contrib/netbsd-tests/lib/libc/db/t_db.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_db.sh,v 1.4 2013/07/29 10:43:15 skrll Exp $
+# $NetBSD: t_db.sh,v 1.7 2016/09/24 20:12:33 christos Exp $
#
# Copyright (c) 2008 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -25,11 +25,16 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-prog()
+prog_db()
{
echo $(atf_get_srcdir)/h_db
}
+prog_lfsr()
+{
+ echo $(atf_get_srcdir)/h_lfsr
+}
+
dict()
{
if [ -f /usr/share/dict/words ]; then
@@ -37,6 +42,7 @@ dict()
elif [ -f /usr/dict/words ]; then
echo /usr/dict/words
else
+ echo ""
atf_fail "no dictionary found"
fi
}
@@ -44,12 +50,7 @@ dict()
# Begin FreeBSD
dict()
{
- if [ -f /usr/share/dict/words ]; then
- echo /usr/share/dict/words
- else
- echo /nonexistent
- atf_skip "Test requires dict/words"
- fi
+ echo /usr/share/dict/words
}
# End FreeBSD
@@ -62,6 +63,9 @@ small_btree_head()
"Checks btree database using small keys and small data" \
"pairs: takes the first hundred entries in the dictionary," \
"and makes them be key/data pairs."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
small_btree_body()
{
@@ -78,7 +82,7 @@ small_btree_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" btree in
+ atf_check -o file:exp "$(prog_db)" btree in
}
atf_test_case small_hash
@@ -88,6 +92,9 @@ small_hash_head()
"Checks hash database using small keys and small data" \
"pairs: takes the first hundred entries in the dictionary," \
"and makes them be key/data pairs."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
small_hash_body()
{
@@ -104,7 +111,7 @@ small_hash_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" hash in
+ atf_check -o file:exp "$(prog_db)" hash in
}
atf_test_case small_recno
@@ -114,6 +121,9 @@ small_recno_head()
"Checks recno database using small keys and small data" \
"pairs: takes the first hundred entries in the dictionary," \
"and makes them be key/data pairs."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
small_recno_body()
{
@@ -128,7 +138,7 @@ small_recno_body()
printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i);
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case medium_btree
@@ -138,6 +148,9 @@ medium_btree_head()
"Checks btree database using small keys and medium" \
"data pairs: takes the first 200 entries in the" \
"dictionary, and gives them each a medium size data entry."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
medium_btree_body()
{
@@ -156,7 +169,7 @@ medium_btree_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" btree in
+ atf_check -o file:exp "$(prog_db)" btree in
}
atf_test_case medium_hash
@@ -166,6 +179,9 @@ medium_hash_head()
"Checks hash database using small keys and medium" \
"data pairs: takes the first 200 entries in the" \
"dictionary, and gives them each a medium size data entry."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
medium_hash_body()
{
@@ -184,7 +200,7 @@ medium_hash_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" hash in
+ atf_check -o file:exp "$(prog_db)" hash in
}
atf_test_case medium_recno
@@ -209,7 +225,7 @@ medium_recno_body()
printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i);
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case big_btree
@@ -238,7 +254,7 @@ big_btree_body()
echo k$i
done >in
- atf_check "$(prog)" -o out btree in
+ atf_check "$(prog_db)" -o out btree in
cmp -s exp out || atf_fail "test failed for page size: $psize"
done
}
@@ -266,7 +282,7 @@ big_hash_body()
echo k$i
done >in
- atf_check "$(prog)" -o out hash in
+ atf_check "$(prog_db)" -o out hash in
cmp -s exp out || atf_fail "test failed"
}
@@ -294,7 +310,7 @@ big_recno_body()
for psize in 512 16384 65536; do
echo "checking page size: $psize"
- atf_check "$(prog)" -o out recno in
+ atf_check "$(prog_db)" -o out recno in
cmp -s exp out || atf_fail "test failed for page size: $psize"
done
}
@@ -362,7 +378,7 @@ random_recno_body()
printf("g\nk%d\n", i);
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case reverse_recno
@@ -400,7 +416,7 @@ reverse_recno_body()
printf("g\nk%d\n", i);
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case alternate_recno
@@ -452,7 +468,7 @@ alternate_recno_body()
printf("g\nk%d\n", i);
}' >in
- atf_check "$(prog)" -o out recno in
+ atf_check "$(prog_db)" -o out recno in
sort -o exp exp
sort -o out out
@@ -521,7 +537,7 @@ h_delete()
}' >> exp
fi
- atf_check "$(prog)" -o out $type in
+ atf_check "$(prog_db)" -o out $type in
atf_check -o file:exp cat out
}
@@ -547,6 +563,7 @@ delete_recno_body()
h_repeated()
{
+ local type="$1"
TMPDIR="$(pwd)/db_dir"; export TMPDIR
mkdir ${TMPDIR}
@@ -565,7 +582,7 @@ h_repeated()
}
}' >in
- $(prog) btree in
+ $(prog_db) $type in
}
atf_test_case repeated_btree
@@ -620,16 +637,15 @@ duplicate_btree_body()
printf("o\n");
}' >in
- atf_check -o file:exp -x "$(prog) -iflags=1 btree in | sort"
+ atf_check -o file:exp -x "$(prog_db) -iflags=1 btree in | sort"
}
h_cursor_flags()
{
+ local type=$1
TMPDIR="$(pwd)/db_dir"; export TMPDIR
mkdir ${TMPDIR}
- type=$1
-
echo $SEVEN_SEVEN |
awk '{
for (i = 1; i <= 20; ++i)
@@ -649,7 +665,7 @@ h_cursor_flags()
printf("eR_CURSOR SHOULD HAVE FAILED\n");
}' >in
- atf_check -o ignore -e ignore -s ne:0 "$(prog)" -o out $type in
+ atf_check -o ignore -e ignore -s ne:0 "$(prog_db)" -o out $type in
atf_check -s ne:0 test -s out
cat exp |
@@ -663,7 +679,7 @@ h_cursor_flags()
printf("eR_CURSOR SHOULD HAVE FAILED\n");
}' >in
- atf_check -o ignore -e ignore -s ne:0 "$(prog)" -o out $type in
+ atf_check -o ignore -e ignore -s ne:0 "$(prog_db)" -o out $type in
atf_check -s ne:0 test -s out
}
@@ -719,7 +735,7 @@ reverse_order_recno_body()
printf("or\n");
}' >in
- atf_check -o file:exp "$(prog)" recno in
+ atf_check -o file:exp "$(prog_db)" recno in
}
atf_test_case small_page_btree
@@ -731,6 +747,9 @@ small_page_btree_head()
"reverses them, and gives them each a small size data" \
"entry. Uses a small page size to make sure the btree" \
"split code gets hammered."
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
small_page_btree_body()
{
@@ -749,7 +768,7 @@ small_page_btree_body()
echo k$i
done >in
- atf_check -o file:exp "$(prog)" -i psize=512 btree in
+ atf_check -o file:exp "$(prog_db)" -i psize=512 btree in
}
h_byte_orders()
@@ -765,18 +784,19 @@ h_byte_orders()
echo p
echo k$i
echo d$i
+ echo S
echo g
echo k$i
done >in
- atf_check -o file:exp "$(prog)" -ilorder=$order -f byte.file $type in
+ atf_check -o file:exp "$(prog_db)" -ilorder=$order -f byte.file $type in
for i in `sed 50q $(dict)`; do
echo g
echo k$i
done >in
- atf_check -o file:exp "$(prog)" -s -ilorder=$order -f byte.file $type in
+ atf_check -o file:exp "$(prog_db)" -s -ilorder=$order -f byte.file $type in
done
}
@@ -784,6 +804,9 @@ atf_test_case byte_orders_btree
byte_orders_btree_head()
{
atf_set "descr" "Checks btree database using differing byte orders"
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
byte_orders_btree_body()
{
@@ -806,16 +829,19 @@ h_bsize_ffactor()
ffactor=$2
echo "bucketsize $bsize, fill factor $ffactor"
- atf_check -o file:exp "$(prog)" "-ibsize=$bsize,\
+ atf_check -o file:exp "$(prog_db)" "-ibsize=$bsize,\
ffactor=$ffactor,nelem=25000,cachesize=65536" hash in
}
atf_test_case bsize_ffactor
bsize_ffactor_head()
{
- atf_set "timeout" "480"
+ atf_set "timeout" "1800"
atf_set "descr" "Checks hash database with various" \
"bucketsizes and fill factors"
+ # Begin FreeBSD
+ atf_set "require.files" /usr/share/dict/words
+ # End FreeBSD
}
bsize_ffactor_body()
{
@@ -876,9 +902,27 @@ bsize_ffactor_body()
h_bsize_ffactor 8192 341
h_bsize_ffactor 8192 455
h_bsize_ffactor 8192 683
+
+ h_bsize_ffactor 16384 341
+ h_bsize_ffactor 16384 455
+ h_bsize_ffactor 16384 683
+
+ h_bsize_ffactor 32768 341
+ h_bsize_ffactor 32768 455
+ h_bsize_ffactor 32768 683
+
+ # Begin FreeBSD
+ if false; then
+ # End FreeBSD
+ h_bsize_ffactor 65536 341
+ h_bsize_ffactor 65536 455
+ h_bsize_ffactor 65536 683
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
}
-# FIXME: what does it test?
+# This tests 64K block size addition/removal
atf_test_case four_char_hash
four_char_hash_head()
{
@@ -901,15 +945,328 @@ EOF
# Begin FreeBSD
if true; then
- atf_check "$(prog)" -i bsize=32768 hash in
+ atf_check "$(prog_db)" -i bsize=32768 hash in
else
# End FreeBSD
- atf_check "$(prog)" -i bsize=65536 hash in
+ atf_check "$(prog_db)" -i bsize=65536 hash in
# Begin FreeBSD
fi
# End FreeBSD
}
+
+atf_test_case bsize_torture
+bsize_torture_head()
+{
+ atf_set "timeout" "36000"
+ atf_set "descr" "Checks hash database with various bucket sizes"
+}
+bsize_torture_body()
+{
+ TMPDIR="$(pwd)/db_dir"; export TMPDIR
+ mkdir ${TMPDIR}
+ # Begin FreeBSD
+ #
+ # db(3) doesn't support 64kB bucket sizes
+ for i in 2048 4096 8192 16384 32768 # 65536
+ # End FreeBSD
+ do
+ atf_check "$(prog_lfsr)" $i
+ done
+}
+
+atf_test_case btree_weird_page_split
+btree_weird_page_split_head()
+{
+ atf_set "descr" \
+ "Test for a weird page split condition where an insertion " \
+ "into index 0 of a page that would cause the new item to " \
+ "be the only item on the left page results in index 0 of " \
+ "the right page being erroneously skipped; this only " \
+ "happens with one particular key+data length for each page size."
+}
+btree_weird_page_split_body()
+{
+ for psize in 512 1024 2048 4096 8192; do
+ echo " page size $psize"
+ kdsizes=`awk 'BEGIN {
+ psize = '$psize'; hsize = int(psize/2);
+ for (kdsize = hsize-40; kdsize <= hsize; kdsize++) {
+ print kdsize;
+ }
+ }' /dev/null`
+
+ # Use a series of keylen+datalen values in the right
+ # neighborhood to find the one that triggers the bug.
+ # We could compute the exact size that triggers the
+ # bug but this additional fuzz may be useful.
+
+ # Insert keys in reverse order to maximize the chances
+ # for a split on index 0.
+
+ for kdsize in $kdsizes; do
+ awk 'BEGIN {
+ kdsize = '$kdsize';
+ for (i = 8; i-- > 0; ) {
+ s = sprintf("a%03d:%09d", i, kdsize);
+ for (j = 0; j < kdsize-20; j++) {
+ s = s "x";
+ }
+ printf("p\nka%03d\nd%s\n", i, s);
+ }
+ print "o";
+ }' /dev/null > in
+ sed -n 's/^d//p' in | sort > exp
+ atf_check -o file:exp \
+ "$(prog_db)" -i psize=$psize btree in
+ done
+ done
+}
+
+# Extremely tricky test attempting to replicate some unusual database
+# corruption seen in the field: pieces of the database becoming
+# inaccessible to random access, sequential access, or both. The
+# hypothesis is that at least some of these are triggered by the bug
+# in page splits on index 0 with a particular exact keylen+datalen.
+# (See Test 40.) For psize=4096, this size is exactly 2024.
+
+# The order of operations here relies on very specific knowledge of
+# the internals of the btree access method in order to place records
+# at specific offsets in a page and to create certain keys on internal
+# pages. The to-be-split page immediately prior to the bug-triggering
+# split has the following properties:
+#
+# * is not the leftmost leaf page
+# * key on the parent page is compares less than the key of the item
+# on index 0
+# * triggering record's key also compares greater than the key on the
+# parent page
+
+# Additionally, we prime the mpool LRU chain so that the head page on
+# the chain has the following properties:
+#
+# * record at index 0 is located where it will not get overwritten by
+# items written to the right-hand page during the split
+# * key of the record at index 0 compares less than the key of the
+# bug-triggering record
+
+# If the page-split bug exists, this test appears to create a database
+# where some records are inaccessible to a search, but still remain in
+# the file and are accessible by sequential traversal. At least one
+# record gets duplicated out of sequence.
+
+atf_test_case btree_tricky_page_split
+btree_tricky_page_split_head()
+{
+ atf_set "descr" \
+ "btree: no unsearchables due to page split on index 0"
+}
+btree_tricky_page_split_body()
+{
+ list=`(for i in a b c d; do
+ for j in 990 998 999; do
+ echo g ${i}${j} 1024
+ done
+ done;
+ echo g y997 2014
+ for i in y z; do
+ for j in 998 999; do
+ echo g ${i}${j} 1024
+ done
+ done)`
+ # Exact number for trigger condition accounts for newlines
+ # retained by dbtest with -ofile but not without; we use
+ # -ofile, so count newlines. keylen=5,datalen=5+2014 for
+ # psize=4096 here.
+ (cat - <<EOF
+p z999 1024
+p z998 1024
+p y999 1024
+p y990 1024
+p d999 1024
+p d990 1024
+p c999 1024
+p c990 1024
+p b999 1024
+p b990 1024
+p a999 1024
+p a990 1024
+p y998 1024
+r y990
+p d998 1024
+p d990 1024
+p c998 1024
+p c990 1024
+p b998 1024
+p b990 1024
+p a998 1024
+p a990 1024
+p y997 2014
+S
+o
+EOF
+ echo "$list") |
+ # awk script input:
+ # {p|g|r} key [datasize]
+ awk '/^[pgr]/{
+ printf("%s\nk%s\n", $1, $2);
+ }
+ /^p/{
+ s = $2;
+ for (i = 0; i < $3; i++) {
+ s = s "x";
+ }
+ printf("d%s\n", s);
+ }
+ !/^[pgr]/{
+ print $0;
+ }' > in
+ (echo "$list"; echo "$list") | awk '{
+ s = $2;
+ for (i = 0; i < $3; i++) {
+ s = s "x";
+ }
+ print s;
+ }' > exp
+ atf_check -o file:exp \
+ "$(prog_db)" -i psize=4096 btree in
+}
+
+# Begin FreeBSD
+if false; then
+# End FreeBSD
+atf_test_case btree_recursive_traversal
+btree_recursive_traversal_head()
+{
+ atf_set "descr" \
+ "btree: Test for recursive traversal successfully " \
+ "retrieving records that are inaccessible to normal " \
+ "sequential 'sibling-link' traversal. This works by " \
+ "unlinking a few leaf pages but leaving their parent " \
+ "links intact. To verify that the unlink actually makes " \
+ "records inaccessible, the test first uses 'o' to do a " \
+ "normal sequential traversal, followed by 'O' to do a " \
+ "recursive traversal."
+}
+btree_recursive_traversal_body()
+{
+ fill="abcdefghijklmnopqrstuvwxyzy"
+ script='{
+ for (i = 0; i < 20000; i++) {
+ printf("p\nkAA%05d\nd%05d%s\n", i, i, $0);
+ }
+ print "u";
+ print "u";
+ print "u";
+ print "u";
+ }'
+ (echo $fill | awk "$script"; echo o) > in1
+ echo $fill |
+ awk '{
+ for (i = 0; i < 20000; i++) {
+ if (i >= 5 && i <= 40)
+ continue;
+ printf("%05d%s\n", i, $0);
+ }
+ }' > exp1
+ atf_check -o file:exp1 \
+ "$(prog_db)" -i psize=512 btree in1
+ echo $fill |
+ awk '{
+ for (i = 0; i < 20000; i++) {
+ printf("%05d%s\n", i, $0);
+ }
+ }' > exp2
+ (echo $fill | awk "$script"; echo O) > in2
+ atf_check -o file:exp2 \
+ "$(prog_db)" -i psize=512 btree in2
+}
+# Begin FreeBSD
+fi
+# End FreeBSD
+
+atf_test_case btree_byteswap_unaligned_access_bksd
+btree_byteswap_unaligned_access_bksd_head()
+{
+ atf_set "descr" \
+ "btree: big key, small data, byteswap unaligned access"
+}
+btree_byteswap_unaligned_access_bksd_body()
+{
+ (echo foo; echo bar) |
+ awk '{
+ s = $0
+ for (i = 0; i < 488; i++) {
+ s = s "x";
+ }
+ printf("p\nk%s\ndx\n", s);
+ }' > in
+ for order in 1234 4321; do
+ atf_check \
+ "$(prog_db)" -o out -i psize=512,lorder=$order btree in
+ done
+}
+
+atf_test_case btree_byteswap_unaligned_access_skbd
+btree_byteswap_unaligned_access_skbd_head()
+{
+ atf_set "descr" \
+ "btree: small key, big data, byteswap unaligned access"
+}
+btree_byteswap_unaligned_access_skbd_body()
+{
+ # 484 = 512 - 20 (header) - 7 ("foo1234") - 1 (newline)
+ (echo foo1234; echo bar1234) |
+ awk '{
+ s = $0
+ for (i = 0; i < 484; i++) {
+ s = s "x";
+ }
+ printf("p\nk%s\nd%s\n", $0, s);
+ }' > in
+ for order in 1234 4321; do
+ atf_check \
+ "$(prog_db)" -o out -i psize=512,lorder=$order btree in
+ done
+}
+
+atf_test_case btree_known_byte_order
+btree_known_byte_order_head()
+{
+ atf_set "descr" \
+ "btree: small key, big data, known byte order"
+}
+btree_known_byte_order_body()
+{
+ local a="-i psize=512,lorder="
+
+ (echo foo1234; echo bar1234) |
+ awk '{
+ s = $0
+ for (i = 0; i < 484; i++) {
+ s = s "x";
+ }
+ printf("%s\n", s);
+ }' > exp
+ (echo foo1234; echo bar1234) |
+ awk '{
+ s = $0
+ for (i = 0; i < 484; i++) {
+ s = s "x";
+ }
+ printf("p\nk%s\nd%s\n", $0, s);
+ }' > in1
+ for order in 1234 4321; do
+ atf_check \
+ "$(prog_db)" -f out.$order $a$order btree in1
+ done
+ (echo g; echo kfoo1234; echo g; echo kbar1234) > in2
+ for order in 1234 4321; do
+ atf_check -o file:exp \
+ "$(prog_db)" -s -f out.$order $a$order btree in2
+ done
+}
+
atf_init_test_cases()
{
atf_add_test_case small_btree
@@ -937,4 +1294,17 @@ atf_init_test_cases()
atf_add_test_case byte_orders_hash
atf_add_test_case bsize_ffactor
atf_add_test_case four_char_hash
+ atf_add_test_case bsize_torture
+ atf_add_test_case btree_weird_page_split
+ atf_add_test_case btree_tricky_page_split
+ # Begin FreeBSD
+ if false; then
+ # End FreeBSD
+ atf_add_test_case btree_recursive_traversal
+ # Begin FreeBSD
+ fi
+ # End FreeBSD
+ atf_add_test_case btree_byteswap_unaligned_access_bksd
+ atf_add_test_case btree_byteswap_unaligned_access_skbd
+ atf_add_test_case btree_known_byte_order
}
diff --git a/contrib/netbsd-tests/lib/libc/db/t_db_hash_seq.c b/contrib/netbsd-tests/lib/libc/db/t_db_hash_seq.c
new file mode 100644
index 0000000..6e19e22
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/db/t_db_hash_seq.c
@@ -0,0 +1,343 @@
+/* $NetBSD: t_db_hash_seq.c,v 1.2 2015/06/22 22:35:51 christos Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_db_hash_seq.c,v 1.2 2015/06/22 22:35:51 christos Exp $");
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <db.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <syslog.h>
+#include <netinet/in.h>
+
+#define ATF
+
+struct conf {
+ struct sockaddr_storage c_ss;
+ int c_lmask;
+ int c_port;
+ int c_proto;
+ int c_family;
+ int c_uid;
+ int c_nfail;
+ char c_name[128];
+ int c_rmask;
+ int c_duration;
+};
+
+struct dbinfo {
+ int count;
+ time_t last;
+ char id[64];
+};
+
+#ifdef ATF
+#include <atf-c.h>
+
+#define DO_ERR(msg, ...) ATF_REQUIRE_MSG(0, msg, __VA_ARGS__)
+#define DO_WARNX(msg, ...) ATF_REQUIRE_MSG(0, msg, __VA_ARGS__)
+#else
+#include <err.h>
+
+#define DO_ERR(fmt, ...) err(EXIT_FAILURE, fmt, __VA_ARGS__)
+#define DO_WARNX(fmt, ...) warnx(fmt, __VA_ARGS__)
+#endif
+
+#define DO_DEBUG(fmt, ...) fprintf(stderr, fmt, __VA_ARGS__)
+
+static HASHINFO openinfo = {
+ 4096, /* bsize */
+ 32, /* ffactor */
+ 256, /* nelem */
+ 8 * 1024 * 1024,/* cachesize */
+ NULL, /* hash() */
+ 0 /* lorder */
+};
+
+static int debug = 0;
+
+static int
+state_close(DB *db)
+{
+ if (db == NULL)
+ return -1;
+ if ((*db->close)(db) == -1)
+ DO_ERR("%s: can't close db", __func__);
+ return 0;
+}
+
+static DB *
+state_open(const char *dbname, int flags, mode_t perm)
+{
+ DB *db;
+
+ db = dbopen(dbname, flags, perm, DB_HASH, &openinfo);
+ if (db == NULL) {
+ if (errno == ENOENT && (flags & O_CREAT) == 0)
+ return NULL;
+ DO_ERR("%s: can't open `%s'", __func__, dbname);
+ }
+ return db;
+}
+
+static int
+state_sizecheck(const DBT *t)
+{
+ if (sizeof(struct conf) == t->size)
+ return 0;
+ DO_WARNX("Key size mismatch %zu != %zu", sizeof(struct conf), t->size);
+ return 0;
+}
+
+static int
+state_del(DB *db, const struct conf *c)
+{
+ int rv;
+ DBT k;
+
+ if (db == NULL)
+ return -1;
+
+ k.data = __UNCONST(c);
+ k.size = sizeof(*c);
+
+ switch (rv = (*db->del)(db, &k, 1)) {
+ case 0:
+ case 1:
+ if (debug > 1) {
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ (*db->sync)(db, 0);
+ }
+ return 0;
+ default:
+ DO_ERR("%s: failed", __func__);
+ return -1;
+ }
+}
+
+#if 0
+static int
+state_get(DB *db, const struct conf *c, struct dbinfo *dbi)
+{
+ int rv;
+ DBT k, v;
+
+ if (db == NULL)
+ return -1;
+
+ k.data = __UNCONST(c);
+ k.size = sizeof(*c);
+
+ switch (rv = (*db->get)(db, &k, &v, 0)) {
+ case 0:
+ case 1:
+ if (rv)
+ memset(dbi, 0, sizeof(*dbi));
+ else
+ memcpy(dbi, v.data, sizeof(*dbi));
+ if (debug > 1)
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ return 0;
+ default:
+ DO_ERR("%s: failed", __func__);
+ return -1;
+ }
+}
+#endif
+
+static int
+state_put(DB *db, const struct conf *c, const struct dbinfo *dbi)
+{
+ int rv;
+ DBT k, v;
+
+ if (db == NULL)
+ return -1;
+
+ k.data = __UNCONST(c);
+ k.size = sizeof(*c);
+ v.data = __UNCONST(dbi);
+ v.size = sizeof(*dbi);
+
+ switch (rv = (*db->put)(db, &k, &v, 0)) {
+ case 0:
+ if (debug > 1) {
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ (*db->sync)(db, 0);
+ }
+ return 0;
+ case 1:
+ errno = EEXIST;
+ /*FALLTHROUGH*/
+ default:
+ DO_ERR("%s: failed", __func__);
+ }
+}
+
+static int
+state_iterate(DB *db, struct conf *c, struct dbinfo *dbi, unsigned int first)
+{
+ int rv;
+ DBT k, v;
+
+ if (db == NULL)
+ return -1;
+
+ first = first ? R_FIRST : R_NEXT;
+
+ switch (rv = (*db->seq)(db, &k, &v, first)) {
+ case 0:
+ if (state_sizecheck(&k) == -1)
+ return -1;
+ memcpy(c, k.data, sizeof(*c));
+ memcpy(dbi, v.data, sizeof(*dbi));
+ if (debug > 1)
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ return 1;
+ case 1:
+ if (debug > 1)
+ DO_DEBUG("%s: returns %d", __func__, rv);
+ return 0;
+ default:
+ DO_ERR("%s: failed", __func__);
+ return -1;
+ }
+}
+
+#define MAXB 100
+
+static int
+testdb(int skip)
+{
+ size_t i;
+ int f;
+ char flag[MAXB];
+ DB *db;
+ struct conf c;
+ struct dbinfo d;
+
+ db = state_open(NULL, O_RDWR|O_CREAT|O_TRUNC, 0600);
+ if (db == NULL)
+ DO_ERR("%s: cannot open `%s'", __func__, "foo");
+
+ memset(&c, 0, sizeof(c));
+ memset(&d, 0, sizeof(d));
+ memset(flag, 0, sizeof(flag));
+
+ for (i = 0; i < __arraycount(flag); i++) {
+ c.c_port = i;
+ state_put(db, &c, &d);
+ }
+
+ for (f = 1, i = 0; state_iterate(db, &c, &d, f) == 1; f = 0, i++) {
+ if (debug > 1)
+ DO_DEBUG("%zu %d\n", i, c.c_port);
+ if (flag[c.c_port])
+ DO_WARNX("Already visited %d", c.c_port);
+ flag[c.c_port] = 1;
+ if (skip == 0 || c.c_port % skip != 0)
+ continue;
+ state_del(db, &c);
+ }
+ state_close(db);
+ for (i = 0; i < __arraycount(flag); i++) {
+ if (flag[i] == 0)
+ DO_WARNX("Not visited %zu", i);
+ }
+ return 0;
+}
+
+#ifndef ATF
+int
+main(int argc, char *argv[])
+{
+ return testdb(6);
+}
+#else
+
+ATF_TC(test_hash_del_none);
+ATF_TC_HEAD(test_hash_del_none, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check sequential scan of hash tables deleting none");
+}
+
+ATF_TC_BODY(test_hash_del_none, tc)
+{
+ testdb(0);
+}
+
+ATF_TC(test_hash_del_all);
+ATF_TC_HEAD(test_hash_del_all, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check sequential scan of hash tables deleting all");
+}
+
+ATF_TC_BODY(test_hash_del_all, tc)
+{
+ testdb(1);
+}
+
+ATF_TC(test_hash_del_alt);
+ATF_TC_HEAD(test_hash_del_alt, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check sequential scan of hash tables alternating deletets");
+}
+
+ATF_TC_BODY(test_hash_del_alt, tc)
+{
+ testdb(2);
+}
+
+ATF_TC(test_hash_del_every_7);
+ATF_TC_HEAD(test_hash_del_every_7, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check sequential scan of hash tables deleting every 7 elements");
+}
+
+ATF_TC_BODY(test_hash_del_every_7, tc)
+{
+ testdb(7);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, test_hash_del_none);
+ ATF_TP_ADD_TC(tp, test_hash_del_all);
+ ATF_TP_ADD_TC(tp, test_hash_del_alt);
+ ATF_TP_ADD_TC(tp, test_hash_del_every_7);
+
+ return 0;
+}
+#endif
diff --git a/contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c b/contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c
index 32de6e7..d3752cd 100644
--- a/contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c
+++ b/contrib/netbsd-tests/lib/libc/gen/execve/t_execve.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_execve.c,v 1.1 2014/04/29 06:29:02 uebayasi Exp $ */
+/* $NetBSD: t_execve.c,v 1.2 2015/09/12 15:21:33 christos Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -47,7 +47,8 @@ ATF_TC_BODY(t_execve_null, tc)
err = execve(NULL, NULL, NULL);
ATF_REQUIRE(err == -1);
- ATF_REQUIRE(errno == EFAULT);
+ ATF_REQUIRE_MSG(errno == EFAULT,
+ "wrong error returned %d instead of %d", errno, EFAULT);
}
ATF_TP_ADD_TCS(tp)
diff --git a/contrib/netbsd-tests/lib/libc/gen/isqemu.h b/contrib/netbsd-tests/lib/libc/gen/isqemu.h
index 7d73a22..c44ffda 100644
--- a/contrib/netbsd-tests/lib/libc/gen/isqemu.h
+++ b/contrib/netbsd-tests/lib/libc/gen/isqemu.h
@@ -1,4 +1,4 @@
-/* $NetBSD: isqemu.h,v 1.3 2013/04/14 12:46:29 martin Exp $ */
+/* $NetBSD: isqemu.h,v 1.4 2015/01/03 14:21:05 gson Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -34,12 +34,37 @@
#include <sys/param.h>
#include <sys/sysctl.h>
#include <stdbool.h>
+#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <err.h>
static __inline bool
isQEMU(void) {
+#ifdef __FreeBSD__
+ char *vm_guest_name_buf;
+ size_t len;
+ bool is_vm;
+
+ if (sysctlbyname("kern.vm_guest", NULL, &len, NULL, 0) == -1)
+ err(EXIT_FAILURE, "sysctl");
+
+ if ((vm_guest_name_buf = malloc(len)) == NULL)
+ err(EXIT_FAILURE, "malloc");
+
+ if (sysctlbyname("kern.vm_guest", vm_guest_name_buf, &len, NULL, 0)
+ == -1)
+ err(EXIT_FAILURE, "sysctl");
+
+ if (strcmp(vm_guest_name_buf, "none") == 0)
+ is_vm = false;
+ else
+ is_vm = true;
+
+ free(vm_guest_name_buf);
+
+ return is_vm;
+#else
#if defined(__i386__) || defined(__x86_64__)
char name[1024];
size_t len = sizeof(name);
@@ -53,6 +78,7 @@ isQEMU(void) {
#else
return false;
#endif
+#endif
}
#ifdef TEST
diff --git a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c
index 5bbf337..74009a8 100644
--- a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c
+++ b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_fileactions.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fileactions.c,v 1.5 2012/04/09 19:42:07 martin Exp $ */
+/* $NetBSD: t_fileactions.c,v 1.6 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -31,10 +31,11 @@
*/
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
#include <atf-c.h>
+
+#include <sys/wait.h>
+#include <sys/stat.h>
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -42,7 +43,6 @@
#include <fcntl.h>
#include <spawn.h>
#include <unistd.h>
-#include <sys/wait.h>
ATF_TC(t_spawn_openmode);
diff --git a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c
index 178374b..12f2760 100644
--- a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c
+++ b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawn.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_spawn.c,v 1.1 2012/02/13 21:03:08 martin Exp $ */
+/* $NetBSD: t_spawn.c,v 1.2 2014/10/18 08:33:30 snj Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -137,7 +137,7 @@ ATF_TC(t_spawn_child);
ATF_TC_HEAD(t_spawn_child, tc)
{
atf_tc_set_md_var(tc, "descr",
- "posix_spawn a child and get it's return code");
+ "posix_spawn a child and get its return code");
}
ATF_TC_BODY(t_spawn_child, tc)
diff --git a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c
index 78313cd..2085b9e 100644
--- a/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c
+++ b/contrib/netbsd-tests/lib/libc/gen/posix_spawn/t_spawnattr.c
@@ -60,16 +60,16 @@ get_different_scheduler(void)
/* get current schedule policy */
scheduler = sched_getscheduler(0);
- for (i = 0; i < nitems(schedulers); i++) {
+ for (i = 0; i < __arraycount(schedulers); i++) {
if (schedulers[i] == scheduler)
break;
}
- ATF_REQUIRE_MSG(i < nitems(schedulers),
+ ATF_REQUIRE_MSG(i < __arraycount(schedulers),
"Unknown current scheduler %d", scheduler);
-
+
/* new scheduler */
i++;
- if (i >= nitems(schedulers))
+ if (i >= __arraycount(schedulers))
i = 0;
return schedulers[i];
}
@@ -85,7 +85,7 @@ get_different_priority(int scheduler)
sched_getparam(0, &param);
priority = param.sched_priority;
-
+
/*
* Change numerical value of the priority, to ensure that it
* was set for the spawned child.
@@ -127,7 +127,7 @@ ATF_TC_BODY(t_spawnattr, tc)
scheduler = get_different_scheduler();
priority = get_different_priority(scheduler);
sp.sched_priority = priority;
-
+
sigemptyset(&sig);
sigaddset(&sig, SIGUSR1);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_assert.c b/contrib/netbsd-tests/lib/libc/gen/t_assert.c
index a09c130..ce73015 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_assert.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_assert.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_assert.c,v 1.2 2011/06/14 05:28:00 jruoho Exp $ */
+/* $NetBSD: t_assert.c,v 1.3 2017/01/10 15:17:57 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,8 +29,11 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_assert.c,v 1.2 2011/06/14 05:28:00 jruoho Exp $");
+__RCSID("$NetBSD: t_assert.c,v 1.3 2017/01/10 15:17:57 christos Exp $");
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <sys/time.h>
#include <sys/wait.h>
#include <assert.h>
@@ -40,11 +43,6 @@ __RCSID("$NetBSD: t_assert.c,v 1.2 2011/06/14 05:28:00 jruoho Exp $");
#include <string.h>
#include <unistd.h>
-#ifdef __FreeBSD__
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-
static void
disable_corefile(void)
{
@@ -55,7 +53,6 @@ disable_corefile(void)
ATF_REQUIRE(setrlimit(RLIMIT_CORE, &limits) == 0);
}
-#endif
static void handler(int);
@@ -82,9 +79,7 @@ ATF_TC_BODY(assert_false, tc)
if (pid == 0) {
-#ifdef __FreeBSD__
disable_corefile();
-#endif
(void)closefrom(0);
(void)memset(&sa, 0, sizeof(struct sigaction));
@@ -122,9 +117,7 @@ ATF_TC_BODY(assert_true, tc)
if (pid == 0) {
-#ifdef __FreeBSD__
disable_corefile();
-#endif
(void)closefrom(0);
(void)memset(&sa, 0, sizeof(struct sigaction));
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_dir.c b/contrib/netbsd-tests/lib/libc/gen/t_dir.c
index b37d89d..40de116 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_dir.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_dir.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_dir.c,v 1.6 2013/10/19 17:45:00 christos Exp $ */
+/* $NetBSD: t_dir.c,v 1.10 2017/01/11 18:15:02 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -26,22 +26,19 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <atf-c.h>
-
+#include <sys/stat.h>
#include <assert.h>
+#include <atf-c.h>
#include <dirent.h>
#include <err.h>
+#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <sys/stat.h>
-#ifdef __FreeBSD__
-#include <errno.h>
-#endif
ATF_TC(seekdir_basic);
ATF_TC_HEAD(seekdir_basic, tc)
@@ -58,7 +55,6 @@ ATF_TC_BODY(seekdir_basic, tc)
struct dirent *entry;
long here;
-#ifdef __FreeBSD__
#define CREAT(x, m) do { \
int _creat_fd; \
ATF_REQUIRE_MSG((_creat_fd = creat((x), (m))) != -1, \
@@ -72,12 +68,6 @@ ATF_TC_BODY(seekdir_basic, tc)
CREAT("t/a", 0600);
CREAT("t/b", 0600);
CREAT("t/c", 0600);
-#else
- mkdir("t", 0755);
- creat("t/a", 0600);
- creat("t/b", 0600);
- creat("t/c", 0600);
-#endif
dp = opendir("t");
if ( dp == NULL)
@@ -85,35 +75,40 @@ ATF_TC_BODY(seekdir_basic, tc)
/* skip two for . and .. */
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ ".", strerror(errno));
+
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "..", strerror(errno));
/* get first entry */
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "first", strerror(errno));
+
here = telldir(dp);
-#ifdef __FreeBSD__
- ATF_REQUIRE_MSG(here != -1,
- "telldir failed: %s", strerror(errno));
-#endif
+ ATF_REQUIRE_MSG(here != -1, "telldir failed: %s", strerror(errno));
/* get second entry */
entry = readdir(dp);
-#ifdef __FreeBSD__
- ATF_REQUIRE_MSG(entry != NULL,
- "readdir failed: %s", strerror(errno));
-#endif
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "second", strerror(errno));
+
wasname = strdup(entry->d_name);
if (wasname == NULL)
atf_tc_fail("cannot allocate memory");
/* get third entry */
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "third", strerror(errno));
/* try to return to the position after the first entry */
seekdir(dp, here);
entry = readdir(dp);
-
- if (entry == NULL)
- atf_tc_fail("entry 1 not found");
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "first[1]", strerror(errno));
if (strcmp(entry->d_name, wasname) != 0)
atf_tc_fail("1st seekdir found wrong name");
@@ -121,25 +116,22 @@ ATF_TC_BODY(seekdir_basic, tc)
seekdir(dp, here);
here = telldir(dp);
entry = readdir(dp);
-
- if (entry == NULL)
- atf_tc_fail("entry 2 not found");
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "second[1]", strerror(errno));
if (strcmp(entry->d_name, wasname) != 0)
atf_tc_fail("2nd seekdir found wrong name");
/* One more time, to make sure that telldir() doesn't affect result */
seekdir(dp, here);
entry = readdir(dp);
+ ATF_REQUIRE_MSG(entry != NULL, "readdir[%s] failed: %s",
+ "third[1]", strerror(errno));
- if (entry == NULL)
- atf_tc_fail("entry 3 not found");
if (strcmp(entry->d_name, wasname) != 0)
atf_tc_fail("3rd seekdir found wrong name");
closedir(dp);
-#ifdef __FreeBSD__
free(wasname);
-#endif
}
ATF_TC(telldir_leak);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c b/contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c
index ef372f7..c3417bb 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_floatunditf.c
@@ -119,6 +119,11 @@ ATF_TC_BODY(floatunditf, tc)
#else
size_t i;
+#if defined(__FreeBSD__) && defined(__i386__)
+ atf_tc_expect_fail("the floating point error on FreeBSD/i386 doesn't "
+ "match the expected floating point error on NetBSD");
+#endif
+
for (i = 0; i < __arraycount(testcases); ++i)
ATF_CHECK_MSG(
testcases[i].ld == (long double)testcases[i].u64,
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c b/contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c
index f90d8cf..69ee8d2 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_fnmatch.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fnmatch.c,v 1.3 2012/04/08 09:58:59 jruoho Exp $ */
+/* $NetBSD: t_fnmatch.c,v 1.7 2016/10/31 05:08:53 dholland Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_fnmatch.c,v 1.3 2012/04/08 09:58:59 jruoho Exp $");
+__RCSID("$NetBSD: t_fnmatch.c,v 1.7 2016/10/31 05:08:53 dholland Exp $");
#include <atf-c.h>
#include <fnmatch.h>
@@ -153,6 +153,31 @@ ATF_TC_BODY(fnmatch_period, tc)
ATF_CHECK(fnmatch("x/*y", "x/.y", FNM_PATHNAME | FNM_PERIOD) != 0);
}
+ATF_TC(fnmatch_initialbracket);
+ATF_TC_HEAD(fnmatch_initialbracket, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test fnmatch with initial [");
+}
+
+ATF_TC_BODY(fnmatch_initialbracket, tc)
+{
+ ATF_CHECK(fnmatch("[[?*\\\\]", "\\", 0) == 0);
+ ATF_CHECK(fnmatch("[]?*\\\\]", "]", 0) == 0);
+ ATF_CHECK(fnmatch("[!]a-]", "b", 0) == 0);
+ ATF_CHECK(fnmatch("[]-_]", "^", 0) == 0); /* range: ']', '^', '_' */
+ ATF_CHECK(fnmatch("[!]-_]", "X", 0) == 0);
+ ATF_CHECK(fnmatch("[A-\\\\]", "[", 0) == 0);
+ ATF_CHECK(fnmatch("[a-z]/[a-z]", "a/b", 0) == 0);
+ ATF_CHECK(fnmatch("[*]/b", "*/b", 0) == 0);
+ ATF_CHECK(fnmatch("[?]/b", "?/b", 0) == 0);
+ ATF_CHECK(fnmatch("[[a]/b", "a/b", 0) == 0);
+ ATF_CHECK(fnmatch("[[a]/b", "[/b", 0) == 0);
+ ATF_CHECK(fnmatch("[/b", "[/b", 0) == 0);
+
+ ATF_CHECK(fnmatch("[*]/b", "a/b", 0) != 0);
+ ATF_CHECK(fnmatch("[?]/b", "a/b", 0) != 0);
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -162,6 +187,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, fnmatch_noescape);
ATF_TP_ADD_TC(tp, fnmatch_pathname);
ATF_TP_ADD_TC(tp, fnmatch_period);
+ ATF_TP_ADD_TC(tp, fnmatch_initialbracket);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c b/contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c
index 3366c1f..5edc583 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_fpsetmask.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fpsetmask.c,v 1.14 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_fpsetmask.c,v 1.16 2016/03/12 11:55:14 martin Exp $ */
/*-
* Copyright (c) 1995 The NetBSD Foundation, Inc.
@@ -58,8 +58,20 @@ ATF_TC_BODY(no_test, tc)
#include <ieeefp.h>
-const char *skip_mesg;
-const char *skip_arch;
+#if __arm__ && !__SOFTFP__
+ /*
+ * Some NEON fpus do not implement IEEE exception handling,
+ * skip these tests if running on them and compiled for
+ * hard float.
+ */
+#define FPU_PREREQ() \
+ if (0 == fpsetmask(fpsetmask(FP_X_INV))) \
+ atf_tc_skip("FPU does not implement exception handling");
+#endif
+
+#ifndef FPU_PREREQ
+#define FPU_PREREQ() /* nothing */
+#endif
void sigfpe(int, siginfo_t *, void *);
@@ -296,6 +308,9 @@ sigfpe(int s, siginfo_t *si, void *c)
\
ATF_TC_BODY(m##_##t, tc) \
{ \
+ \
+ FPU_PREREQ(); \
+ \
if (strcmp(MACHINE, "macppc") == 0) \
atf_tc_expect_fail("PR port-macppc/46319"); \
\
@@ -323,11 +338,13 @@ ATF_TC_BODY(fpsetmask_basic, tc)
size_t i;
fp_except_t msk, lst[] = { FP_X_INV, FP_X_DZ, FP_X_OFL, FP_X_UFL };
+ FPU_PREREQ();
+
msk = fpgetmask();
for (i = 0; i < __arraycount(lst); i++) {
fpsetmask(msk | lst[i]);
ATF_CHECK((fpgetmask() & lst[i]) != 0);
- fpsetmask(msk & lst[i]);
+ fpsetmask(msk & ~lst[i]);
ATF_CHECK((fpgetmask() & lst[i]) == 0);
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_ftok.c b/contrib/netbsd-tests/lib/libc/gen/t_ftok.c
index 718d310..4c1ab18 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_ftok.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_ftok.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ftok.c,v 1.1 2011/11/08 05:47:00 jruoho Exp $ */
+/* $NetBSD: t_ftok.c,v 1.2 2017/01/10 15:19:52 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_ftok.c,v 1.1 2011/11/08 05:47:00 jruoho Exp $");
+__RCSID("$NetBSD: t_ftok.c,v 1.2 2017/01/10 15:19:52 christos Exp $");
#include <sys/types.h>
#include <sys/ipc.h>
@@ -68,9 +68,7 @@ ATF_TC_BODY(ftok_link, tc)
fd = open(path, O_RDONLY | O_CREAT);
ATF_REQUIRE(fd >= 0);
-#ifdef __FreeBSD__
(void)close(fd);
-#endif
ATF_REQUIRE(link(path, hlnk) == 0);
ATF_REQUIRE(symlink(path, slnk) == 0);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c b/contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c
index 5836c86..17eac87 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_humanize_number.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_humanize_number.c,v 1.8 2012/03/18 07:14:08 jruoho Exp $ */
+/* $NetBSD: t_humanize_number.c,v 1.9 2017/01/10 15:20:44 christos Exp $ */
/*-
* Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
@@ -247,6 +247,7 @@ ATF_TC_BODY(humanize_number_basic, tc)
newline();
atf_tc_fail_nonfatal("Failed for table entry %d", i);
}
+ free(buf);
}
ATF_TC(humanize_number_big);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_nice.c b/contrib/netbsd-tests/lib/libc/gen/t_nice.c
index 10b8df7..9a0eac7 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_nice.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_nice.c
@@ -72,11 +72,6 @@ ATF_TC_BODY(nice_err, tc)
{
int i;
-#ifdef __FreeBSD__
- atf_tc_expect_fail("nice(incr) with incr < 0 fails with unprivileged "
- "users and sets errno == EPERM; see PR # 189821 for more details");
-#endif
-
/*
* The call should fail with EPERM if the
* supplied parameter is negative and the
@@ -130,7 +125,7 @@ ATF_TC_BODY(nice_priority, tc)
if (pid == 0) {
errno = 0;
-#ifdef __FreeBSD__
+#ifdef __NetBSD__
pri = getpriority(PRIO_PROCESS, 0);
#else
pri2 = getpriority(PRIO_PROCESS, 0);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_randomid.c b/contrib/netbsd-tests/lib/libc/gen/t_randomid.c
index 8377806..9ab2cca 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_randomid.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_randomid.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_randomid.c,v 1.3 2011/07/07 09:49:59 jruoho Exp $ */
+/* $NetBSD: t_randomid.c,v 1.5 2015/03/07 09:59:15 isaki Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
#define PERIOD 30000
-uint64_t last[65536];
+uint32_t last[65536];
ATF_TC(randomid_basic);
ATF_TC_HEAD(randomid_basic, tc)
@@ -50,30 +50,30 @@ ATF_TC_HEAD(randomid_basic, tc)
ATF_TC_BODY(randomid_basic, tc)
{
static randomid_t ctx = NULL;
- uint64_t lowest, n, diff;
+ uint32_t lowest, n, diff;
uint16_t id;
memset(last, 0, sizeof(last));
ctx = randomid_new(16, (long)3600);
- lowest = UINT64_MAX;
+ lowest = UINT32_MAX;
- for (n = 0; n < 1000000; n++) {
+ for (n = 0; n < 100000; n++) {
id = randomid(ctx);
if (last[id] > 0) {
diff = n - last[id];
if (diff <= lowest) {
- if (lowest != UINT64_MAX)
- printf("id %5d: last call at %9"PRIu64
- ", current call %9"PRIu64
- " (diff %5"PRIu64"), "
- "lowest %"PRIu64"\n",
+ if (lowest != UINT32_MAX)
+ printf("id %5d: last call at %9"PRIu32
+ ", current call %9"PRIu32
+ " (diff %5"PRIu32"), "
+ "lowest %"PRIu32"\n",
id, last[id], n, diff, lowest);
ATF_REQUIRE_MSG(diff >= PERIOD,
- "diff (%"PRIu64") less than minimum "
+ "diff (%"PRIu32") less than minimum "
"period (%d)", diff, PERIOD);
lowest = diff;
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_siginfo.c b/contrib/netbsd-tests/lib/libc/gen/t_siginfo.c
index 9c9a3c7..64f72ac 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_siginfo.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_siginfo.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_siginfo.c,v 1.24 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_siginfo.c,v 1.30 2015/12/22 14:25:58 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -46,8 +46,9 @@
#include <setjmp.h>
#include <float.h>
-#ifdef HAVE_FENV
#include <fenv.h>
+#ifdef __HAVE_FENV
+#include <ieeefp.h> /* only need for ARM Cortex/Neon hack */
#elif defined(_FLOAT_IEEE754)
#include <ieeefp.h>
#endif
@@ -316,13 +317,21 @@ ATF_TC_BODY(sigfpe_flt, tc)
atf_tc_skip("Test does not run correctly under QEMU");
#if defined(__powerpc__)
atf_tc_skip("Test not valid on powerpc");
+#elif defined(__arm__) && !__SOFTFP__
+ /*
+ * Some NEON fpus do not implement IEEE exception handling,
+ * skip these tests if running on them and compiled for
+ * hard float.
+ */
+ if (0 == fpsetmask(fpsetmask(FP_X_INV)))
+ atf_tc_skip("FPU does not implement exception handling");
#endif
if (sigsetjmp(sigfpe_flt_env, 0) == 0) {
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = sigfpe_flt_action;
sigemptyset(&sa.sa_mask);
sigaction(SIGFPE, &sa, NULL);
-#ifdef HAVE_FENV
+#ifdef __HAVE_FENV
feenableexcept(FE_ALL_EXCEPT);
#elif defined(_FLOAT_IEEE754)
fpsetmask(FP_X_INV|FP_X_DZ|FP_X_OFL|FP_X_UFL|FP_X_IMP);
@@ -373,7 +382,7 @@ ATF_TC_BODY(sigfpe_int, tc)
sa.sa_sigaction = sigfpe_int_action;
sigemptyset(&sa.sa_mask);
sigaction(SIGFPE, &sa, NULL);
-#ifdef HAVE_FENV
+#ifdef __HAVE_FENV
feenableexcept(FE_ALL_EXCEPT);
#elif defined(_FLOAT_IEEE754)
fpsetmask(FP_X_INV|FP_X_DZ|FP_X_OFL|FP_X_UFL|FP_X_IMP);
@@ -454,15 +463,19 @@ ATF_TC_BODY(sigbus_adraln, tc)
{
struct sigaction sa;
-#if defined(__alpha__)
+#if defined(__alpha__) || defined(__arm__)
int rv, val;
size_t len = sizeof(val);
rv = sysctlbyname("machdep.unaligned_sigbus", &val, &len, NULL, 0);
ATF_REQUIRE(rv == 0);
if (val == 0)
- atf_tc_skip("SIGBUS signal not enabled for unaligned accesses");
+ atf_tc_skip("No SIGBUS signal for unaligned accesses");
#endif
+ /* m68k (except sun2) never issue SIGBUS (PR lib/49653) */
+ if (strcmp(MACHINE_ARCH, "m68k") == 0)
+ atf_tc_skip("No SIGBUS signal for unaligned accesses");
+
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = sigbus_action;
sigemptyset(&sa.sa_mask);
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_sleep.c b/contrib/netbsd-tests/lib/libc/gen/t_sleep.c
index f722ec9..e85867a 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_sleep.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_sleep.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_sleep.c,v 1.8 2014/07/15 14:56:34 gson Exp $ */
+/* $NetBSD: t_sleep.c,v 1.11 2017/01/10 15:43:59 maya Exp $ */
/*-
* Copyright (c) 2006 Frank Kardel
@@ -26,8 +26,18 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#ifdef __FreeBSD__
+/* kqueue(2) on FreeBSD requires sys/types.h for uintptr_t; NetBSD doesn't. */
+#include <sys/types.h>
+#endif
+#include <sys/cdefs.h>
+#include <sys/event.h>
+#include <sys/signal.h>
+#include <sys/time.h> /* for TIMESPEC_TO_TIMEVAL on FreeBSD */
+
#include <atf-c.h>
#include <errno.h>
+#include <inttypes.h>
#include <poll.h>
#include <stdio.h>
#include <stdlib.h>
@@ -35,10 +45,6 @@
#include <time.h>
#include <unistd.h>
-#include <sys/cdefs.h>
-#include <sys/event.h>
-#include <sys/signal.h>
-
#include "isqemu.h"
#define BILLION 1000000000LL /* nano-seconds per second */
@@ -49,11 +55,6 @@
#define KEVNT_TIMEOUT 10300 /* measured in milli-seconds */
#define FUZZ (40 * MILLION) /* scheduling fuzz accepted - 40 ms */
-#ifdef __FreeBSD__
-#include <sys/time.h>
-#include <inttypes.h>
-#endif
-
/*
* Timer notes
*
@@ -180,7 +181,8 @@ do_kevent(struct timespec *delay, struct timespec *remain)
(void)close(kq);
if (rtc == -1) {
- ATF_REQUIRE_MSG(kerrno == EINTR, "kevent: %s", strerror(errno));
+ ATF_REQUIRE_MSG(kerrno == EINTR, "kevent: %s",
+ strerror(kerrno));
return 0;
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_time.c b/contrib/netbsd-tests/lib/libc/gen/t_time.c
index 790f3ca..15a8d58 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_time.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_time.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_time.c,v 1.2 2011/11/11 05:03:38 jruoho Exp $ */
+/* $NetBSD: t_time.c,v 1.4 2017/01/10 15:32:46 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,11 +29,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_time.c,v 1.2 2011/11/11 05:03:38 jruoho Exp $");
+__RCSID("$NetBSD: t_time.c,v 1.4 2017/01/10 15:32:46 christos Exp $");
-#ifdef __FreeBSD__
-#include <sys/time.h>
-#endif
#include <atf-c.h>
#include <errno.h>
#include <inttypes.h>
@@ -41,6 +38,7 @@ __RCSID("$NetBSD: t_time.c,v 1.2 2011/11/11 05:03:38 jruoho Exp $");
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
+#include <sys/time.h>
#include <unistd.h>
ATF_TC(time_copy);
@@ -94,15 +92,16 @@ ATF_TC_HEAD(time_timeofday, tc)
ATF_TC_BODY(time_timeofday, tc)
{
struct timeval tv = { 0, 0 };
- time_t t;
+ time_t t1, t2;
- t = time(NULL);
+ t1 = time(NULL);
ATF_REQUIRE(gettimeofday(&tv, NULL) == 0);
+ t2 = time(NULL);
(void)fprintf(stderr, "%"PRId64" vs. %"PRId64"\n",
- (int64_t)t, (int64_t)tv.tv_sec);
+ (int64_t)t1, (int64_t)tv.tv_sec);
- if (t != tv.tv_sec)
+ if (t1 > tv.tv_sec || t2 < tv.tv_sec)
atf_tc_fail("time(3) and gettimeofday(2) differ");
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_ttyname.c b/contrib/netbsd-tests/lib/libc/gen/t_ttyname.c
index 1c813fb..61121b8 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_ttyname.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_ttyname.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ttyname.c,v 1.3 2011/05/01 18:14:01 jruoho Exp $ */
+/* $NetBSD: t_ttyname.c,v 1.4 2017/01/10 15:33:40 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_ttyname.c,v 1.3 2011/05/01 18:14:01 jruoho Exp $");
+__RCSID("$NetBSD: t_ttyname.c,v 1.4 2017/01/10 15:33:40 christos Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -78,9 +78,7 @@ ATF_TC_BODY(ttyname_err, tc)
ATF_REQUIRE(ttyname(fd) == NULL);
ATF_REQUIRE(errno == ENOTTY);
-#ifdef __FreeBSD__
(void)close(fd);
-#endif
}
}
diff --git a/contrib/netbsd-tests/lib/libc/gen/t_vis.c b/contrib/netbsd-tests/lib/libc/gen/t_vis.c
index 525bafa..adb0930 100644
--- a/contrib/netbsd-tests/lib/libc/gen/t_vis.c
+++ b/contrib/netbsd-tests/lib/libc/gen/t_vis.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_vis.c,v 1.7 2014/09/08 19:01:03 christos Exp $ */
+/* $NetBSD: t_vis.c,v 1.9 2017/01/10 15:16:57 christos Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -32,6 +32,7 @@
#include <string.h>
#include <stdlib.h>
+#include <locale.h>
#include <err.h>
#include <vis.h>
@@ -143,6 +144,37 @@ ATF_TC_BODY(strunvis_hex, tc)
}
}
+#ifdef VIS_NOLOCALE
+ATF_TC(strvis_locale);
+ATF_TC_HEAD(strvis_locale, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test strvis(3) with locale");
+}
+
+ATF_TC_BODY(strvis_locale, tc)
+{
+ char s[256], cd[sizeof(s) * 4 + 1], jd[sizeof(cd)], *ol;
+ int jr, cr;
+
+ for (size_t i = 0; i < sizeof(s) - 1; i++)
+ s[i] = i + 1;
+ s[sizeof(s) - 1] = '\0';
+
+ ol = setlocale(LC_CTYPE, "ja_JP.UTF-8");
+ ATF_REQUIRE(ol != NULL);
+ jr = strvisx(jd, s, sizeof(s), VIS_WHITE | VIS_NOLOCALE);
+ ATF_REQUIRE(jr != -1);
+ ol = strdup(ol);
+ ATF_REQUIRE(ol != NULL);
+ ATF_REQUIRE(setlocale(LC_CTYPE, "C") != NULL);
+ cr = strvisx(cd, s, sizeof(s), VIS_WHITE);
+ ATF_REQUIRE(jr == cr);
+ ATF_REQUIRE(memcmp(jd, cd, jr) == 0);
+ setlocale(LC_CTYPE, ol);
+ free(ol);
+}
+#endif /* VIS_NOLOCALE */
+
ATF_TP_ADD_TCS(tp)
{
@@ -150,6 +182,9 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, strvis_null);
ATF_TP_ADD_TC(tp, strvis_empty);
ATF_TP_ADD_TC(tp, strunvis_hex);
+#ifdef VIS_NOLOCALE
+ ATF_TP_ADD_TC(tp, strvis_locale);
+#endif /* VIS_NOLOCALE */
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/inet/t_inet_addr.c b/contrib/netbsd-tests/lib/libc/inet/t_inet_addr.c
new file mode 100644
index 0000000..d7547fd
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/inet/t_inet_addr.c
@@ -0,0 +1,109 @@
+/* $NetBSD: t_inet_addr.c,v 1.1 2015/04/09 16:47:56 ginsbach Exp $ */
+
+/*
+ * Copyright (c) 2011 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__COPYRIGHT("@(#) Copyright (c) 2011\
+ The NetBSD Foundation, inc. All rights reserved.");
+__RCSID("$NetBSD: t_inet_addr.c,v 1.1 2015/04/09 16:47:56 ginsbach Exp $");
+
+#include <arpa/inet.h>
+
+#include <atf-c.h>
+#include <stdio.h>
+#include <string.h>
+
+ATF_TC(inet_addr_basic);
+ATF_TC_HEAD(inet_addr_basic, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks inet_addr(3)");
+}
+
+ATF_TC_BODY(inet_addr_basic, tc)
+{
+ static const char *addrs[] = {
+ "127.0.0.1", "99.99.99.99", "0.0.0.0", "255.255.255.255" };
+
+ struct in_addr ia;
+ const char *ian;
+ in_addr_t addr;
+ size_t i;
+
+ for (i = 0; i < __arraycount(addrs); i++) {
+
+ (void)fprintf(stderr, "checking %s\n", addrs[i]);;
+
+ addr = inet_addr(addrs[i]);
+ ia.s_addr = addr;
+ ian = inet_ntoa(ia);
+
+ ATF_REQUIRE(ian != NULL);
+ ATF_CHECK(strcmp(ian, addrs[i]) == 0);
+ }
+}
+
+ATF_TC(inet_addr_err);
+ATF_TC_HEAD(inet_addr_err, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Invalid addresses with inet_addr(3)");
+}
+
+ATF_TC_BODY(inet_addr_err, tc)
+{
+ static const char *addrs[] = {
+ ". . . .", "1.2.3.", "0.0.0.256", "255.255.255.256",
+ "................................................",
+ "a.b.c.d", "0x0.0x1.0x2.0x3", "-1.-1.-1.-1", "", " "};
+
+ struct in_addr ia;
+ const char *ian;
+ in_addr_t addr;
+ size_t i;
+
+ for (i = 0; i < __arraycount(addrs); i++) {
+
+ (void)fprintf(stderr, "checking %s\n", addrs[i]);;
+
+ addr = inet_addr(addrs[i]);
+ ia.s_addr = addr;
+ ian = inet_ntoa(ia);
+
+ ATF_REQUIRE(ian != NULL);
+ ATF_CHECK(strcmp(ian, addrs[i]) != 0);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, inet_addr_basic);
+ ATF_TP_ADD_TC(tp, inet_addr_err);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/inet/t_inet_network.c b/contrib/netbsd-tests/lib/libc/inet/t_inet_network.c
index a6a6c62..c44fe11 100644
--- a/contrib/netbsd-tests/lib/libc/inet/t_inet_network.c
+++ b/contrib/netbsd-tests/lib/libc/inet/t_inet_network.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_inet_network.c,v 1.3 2011/07/15 11:27:23 jruoho Exp $ */
+/* $NetBSD: t_inet_network.c,v 1.4 2015/04/09 16:47:56 ginsbach Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -32,79 +32,17 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_inet_network.c,v 1.3 2011/07/15 11:27:23 jruoho Exp $");
+__RCSID("$NetBSD: t_inet_network.c,v 1.4 2015/04/09 16:47:56 ginsbach Exp $");
#include <arpa/inet.h>
#include <atf-c.h>
-#include <stdio.h>
-#include <string.h>
#define H_REQUIRE(input, expected) \
ATF_REQUIRE_EQ_MSG(inet_network(input), (in_addr_t) expected, \
"inet_network(%s) returned: 0x%08X, expected: %s", #input, \
inet_network(input), #expected)
-ATF_TC(inet_addr_basic);
-ATF_TC_HEAD(inet_addr_basic, tc)
-{
- atf_tc_set_md_var(tc, "descr", "Checks inet_addr(3)");
-}
-
-ATF_TC_BODY(inet_addr_basic, tc)
-{
- static const char *addrs[] = {
- "127.0.0.1", "99.99.99.99", "0.0.0.0", "255.255.255.255" };
-
- struct in_addr ia;
- const char *ian;
- in_addr_t addr;
- size_t i;
-
- for (i = 0; i < __arraycount(addrs); i++) {
-
- (void)fprintf(stderr, "checking %s\n", addrs[i]);;
-
- addr = inet_addr(addrs[i]);
- ia.s_addr = addr;
- ian = inet_ntoa(ia);
-
- ATF_REQUIRE(ian != NULL);
- ATF_CHECK(strcmp(ian, addrs[i]) == 0);
- }
-}
-
-ATF_TC(inet_addr_err);
-ATF_TC_HEAD(inet_addr_err, tc)
-{
- atf_tc_set_md_var(tc, "descr", "Invalid addresses with inet_addr(3)");
-}
-
-ATF_TC_BODY(inet_addr_err, tc)
-{
- static const char *addrs[] = {
- ". . . .", "1.2.3.", "0.0.0.256", "255.255.255.256",
- "................................................",
- "a.b.c.d", "0x0.0x1.0x2.0x3", "-1.-1.-1.-1", "", " "};
-
- struct in_addr ia;
- const char *ian;
- in_addr_t addr;
- size_t i;
-
- for (i = 0; i < __arraycount(addrs); i++) {
-
- (void)fprintf(stderr, "checking %s\n", addrs[i]);;
-
- addr = inet_addr(addrs[i]);
- ia.s_addr = addr;
- ian = inet_ntoa(ia);
-
- ATF_REQUIRE(ian != NULL);
- ATF_CHECK(strcmp(ian, addrs[i]) != 0);
- }
-}
-
ATF_TC(inet_network_basic);
ATF_TC_HEAD(inet_network_basic, tc)
{
@@ -165,8 +103,6 @@ ATF_TC_BODY(inet_network_err, tc)
ATF_TP_ADD_TCS(tp)
{
- ATF_TP_ADD_TC(tp, inet_addr_basic);
- ATF_TP_ADD_TC(tp, inet_addr_err);
ATF_TP_ADD_TC(tp, inet_network_basic);
ATF_TP_ADD_TC(tp, inet_network_err);
diff --git a/contrib/netbsd-tests/lib/libc/net/t_servent.sh b/contrib/netbsd-tests/lib/libc/net/t_servent.sh
index 0979eb3..4c23f00 100755
--- a/contrib/netbsd-tests/lib/libc/net/t_servent.sh
+++ b/contrib/netbsd-tests/lib/libc/net/t_servent.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_servent.sh,v 1.1 2011/01/12 17:32:27 pgoyette Exp $
+# $NetBSD: t_servent.sh,v 1.2 2016/03/08 08:34:17 joerg Exp $
#
# Copyright (c) 2008 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -29,6 +29,8 @@ atf_test_case servent
servent_head()
{
atf_set "descr" "Checks {get,set,end}servent(3)"
+ # libc doesn't include aliases
+ atf_set "require.files" "/var/db/services.cdb"
}
servent_body()
{
diff --git a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
index a9715cf..9c14a22 100644
--- a/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
+++ b/contrib/netbsd-tests/lib/libc/rpc/t_rpc.c
@@ -1,18 +1,19 @@
-/* $NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $ */
+/* $NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $ */
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $");
+__RCSID("$NetBSD: t_rpc.c,v 1.10 2016/08/27 14:36:22 christos Exp $");
#include <sys/types.h>
#include <sys/socket.h>
#include <rpc/rpc.h>
#include <stdlib.h>
+#include <string.h>
#include <err.h>
#include <netdb.h>
#include <stdio.h>
+#include <errno.h>
#include <unistd.h>
-
#ifndef TEST
#include <atf-c.h>
@@ -20,17 +21,36 @@ __RCSID("$NetBSD: t_rpc.c,v 1.3 2013/02/28 15:56:53 christos Exp $");
#define SKIPX(ev, msg, ...) do { \
atf_tc_skip(msg, __VA_ARGS__); \
- return; \
+ return ev; \
+} while(/*CONSTCOND*/0)
+
+#ifdef __FreeBSD__
+#define SKIPXI(ev, msg, ...) do { \
+ atf_tc_skip(msg, __VA_ARGS__); \
+ return ev; \
} while(/*CONSTCOND*/0)
+#endif
#else
-#define ERRX(ev, msg, ...) errx(ev, msg, __VA_ARGS__)
-#define SKIPX(ev, msg, ...) errx(ev, msg, __VA_ARGS__)
+#define ERRX(ev, msg, ...) errx(EXIT_FAILURE, msg, __VA_ARGS__)
+#define SKIPX(ev, msg, ...) errx(EXIT_FAILURE, msg, __VA_ARGS__)
+#endif
+
+#ifdef DEBUG
+#define DPRINTF(...) printf(__VA_ARGS__)
+#else
+#define DPRINTF(...)
#endif
#define RPCBPROC_NULL 0
+/* XXX (ngie): for clarity on what needs to be reverted later. */
+#define __FreeBSD_bug_216954__
+#ifdef __FreeBSD_bug_216954__
+#include <signal.h>
+#endif
+
static int
reply(caddr_t replyp, struct netbuf * raddrp, struct netconfig * nconf)
{
@@ -51,7 +71,7 @@ reply(caddr_t replyp, struct netbuf * raddrp, struct netconfig * nconf)
#define __rpc_control rpc_control
#endif
-extern bool __rpc_control(int, void *);
+extern bool_t __rpc_control(int, void *);
static void
onehost(const char *host, const char *transp)
@@ -69,7 +89,7 @@ onehost(const char *host, const char *transp)
__rpc_control(CLCR_SET_RPCB_TIMEOUT, &tv);
if ((clnt = clnt_create(host, RPCBPROG, RPCBVERS, transp)) == NULL)
- SKIPX(EXIT_FAILURE, "clnt_create (%s)", clnt_spcreateerror(""));
+ SKIPX(, "clnt_create (%s)", clnt_spcreateerror(""));
tv.tv_sec = 1;
tv.tv_usec = 0;
@@ -81,14 +101,147 @@ onehost(const char *host, const char *transp)
if (clnt_call(clnt, RPCBPROC_NULL, xdr_void, NULL, xdr_void, NULL, tv)
!= RPC_SUCCESS)
#endif
- ERRX(EXIT_FAILURE, "clnt_call (%s)", clnt_sperror(clnt, ""));
+ ERRX(, "clnt_call (%s)", clnt_sperror(clnt, ""));
clnt_control(clnt, CLGET_SVC_ADDR, (char *) &addr);
reply(NULL, &addr, NULL);
}
+#define PROGNUM 0x81
+#define VERSNUM 0x01
+#define PLUSONE 1
+#define DESTROY 2
+
+static struct timeval tout = {1, 0};
+
+static void
+server(struct svc_req *rqstp, SVCXPRT *transp)
+{
+ int num;
+
+ DPRINTF("Starting server\n");
+
+ switch (rqstp->rq_proc) {
+ case NULLPROC:
+ if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
+ ERRX(, "svc_sendreply failed %d", 0);
+ return;
+ case PLUSONE:
+ break;
+ case DESTROY:
+ if (!svc_sendreply(transp, (xdrproc_t)xdr_void, NULL))
+ ERRX(, "svc_sendreply failed %d", 0);
+ svc_destroy(transp);
+ exit(0);
+ default:
+ svcerr_noproc(transp);
+ return;
+ }
+
+ if (!svc_getargs(transp, (xdrproc_t)xdr_int, (void *)&num)) {
+ svcerr_decode(transp);
+ return;
+ }
+ DPRINTF("About to increment\n");
+ num++;
+ if (!svc_sendreply(transp, (xdrproc_t)xdr_int, (void *)&num))
+ ERRX(, "svc_sendreply failed %d", 1);
+ DPRINTF("Leaving server procedure.\n");
+}
+
+static int
+rawtest(const char *arg)
+{
+ CLIENT *clnt;
+ SVCXPRT *svc;
+ int num, resp;
+ enum clnt_stat rv;
+
+ if (arg)
+ num = atoi(arg);
+ else
+ num = 0;
+
+ svc = svc_raw_create();
+ if (svc == NULL)
+ ERRX(EXIT_FAILURE, "Cannot create server %d", num);
+ if (!svc_reg(svc, PROGNUM, VERSNUM, server, NULL))
+ ERRX(EXIT_FAILURE, "Cannot register server %d", num);
+
+ clnt = clnt_raw_create(PROGNUM, VERSNUM);
+ if (clnt == NULL)
+ ERRX(EXIT_FAILURE, "%s",
+ clnt_spcreateerror("clnt_raw_create"));
+ rv = clnt_call(clnt, PLUSONE, (xdrproc_t)xdr_int, (void *)&num,
+ (xdrproc_t)xdr_int, (void *)&resp, tout);
+ if (rv != RPC_SUCCESS)
+ ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv));
+ DPRINTF("Got %d\n", resp);
+ clnt_destroy(clnt);
+ svc_destroy(svc);
+ if (++num != resp)
+ ERRX(EXIT_FAILURE, "expected %d got %d", num, resp);
+
+ return EXIT_SUCCESS;
+}
+
+static int
+regtest(const char *hostname, const char *transp, const char *arg, int p)
+{
+ CLIENT *clnt;
+ int num, resp;
+ enum clnt_stat rv;
+ pid_t pid;
+
+ if (arg)
+ num = atoi(arg);
+ else
+ num = 0;
+
+#ifdef __NetBSD__
+ svc_fdset_init(p ? SVC_FDSET_POLL : 0);
+#endif
+ if (!svc_create(server, PROGNUM, VERSNUM, transp))
+ {
+ SKIPXI(EXIT_FAILURE, "Cannot create server %d", num);
+ }
+
+ switch ((pid = fork())) {
+ case 0:
+ DPRINTF("Calling svc_run\n");
+ svc_run();
+ ERRX(EXIT_FAILURE, "svc_run returned %d!", num);
+ case -1:
+ ERRX(EXIT_FAILURE, "Fork failed (%s)", strerror(errno));
+ default:
+ sleep(1);
+ break;
+ }
+
+ DPRINTF("Initializing client\n");
+ clnt = clnt_create(hostname, PROGNUM, VERSNUM, transp);
+ if (clnt == NULL)
+ ERRX(EXIT_FAILURE, "%s",
+ clnt_spcreateerror("clnt_raw_create"));
+ rv = clnt_call(clnt, PLUSONE, (xdrproc_t)xdr_int, (void *)&num,
+ (xdrproc_t)xdr_int, (void *)&resp, tout);
+ if (rv != RPC_SUCCESS)
+ ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv));
+ DPRINTF("Got %d\n", resp);
+ if (++num != resp)
+ ERRX(EXIT_FAILURE, "expected %d got %d", num, resp);
+ rv = clnt_call(clnt, DESTROY, (xdrproc_t)xdr_void, NULL,
+ (xdrproc_t)xdr_void, NULL, tout);
+ if (rv != RPC_SUCCESS)
+ ERRX(EXIT_FAILURE, "clnt_call: %s", clnt_sperrno(rv));
+ clnt_destroy(clnt);
+
+ return EXIT_SUCCESS;
+}
+
+
#ifdef TEST
static void
-allhosts(void)
+allhosts(const char *transp)
{
enum clnt_stat clnt_stat;
@@ -103,28 +256,49 @@ int
main(int argc, char *argv[])
{
int ch;
+ int s, p;
const char *transp = "udp";
-
- while ((ch = getopt(argc, argv, "ut")) != -1)
+ p = s = 0;
+ while ((ch = getopt(argc, argv, "prstu")) != -1)
switch (ch) {
+ case 'p':
+ p = 1;
+ break;
+ case 's':
+ s = 1;
+ break;
case 't':
transp = "tcp";
break;
case 'u':
transp = "udp";
break;
+ case 'r':
+ transp = NULL;
+ break;
default:
- fprintf(stderr, "Usage: %s -[t|u] [<hostname>...]\n",
+ fprintf(stderr,
+ "Usage: %s -[r|s|t|u] [<hostname>...]\n",
getprogname());
return EXIT_FAILURE;
}
- if (argc == optind)
- allhosts();
- else
- for (; optind < argc; optind++)
- onehost(argv[optind], transp);
+ if (argc == optind) {
+ if (transp)
+ allhosts(transp);
+ else
+ rawtest(NULL);
+ } else {
+ for (; optind < argc; optind++) {
+ if (transp)
+ s == 0 ?
+ onehost(argv[optind], transp) :
+ regtest(argv[optind], transp, "1", p);
+ else
+ rawtest(argv[optind]);
+ }
+ }
return EXIT_SUCCESS;
}
@@ -156,10 +330,96 @@ ATF_TC_BODY(get_svc_addr_udp, tc)
}
+ATF_TC(raw);
+ATF_TC_HEAD(raw, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc raw");
+}
+
+ATF_TC_BODY(raw, tc)
+{
+#ifdef __FreeBSD__
+#ifdef __FreeBSD_bug_216954__
+ atf_tc_expect_signal(SIGSEGV,
+ "fails with SIGSEGV only on ^/stable/10 -- bug # 216954");
+#else
+ atf_tc_expect_fail("fails with: clnt_call: "
+ "RPC: Can't decode result -- PR # 211804");
+#endif
+#endif
+ rawtest(NULL);
+
+}
+
+ATF_TC(tcp);
+ATF_TC_HEAD(tcp, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc tcp (select)");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
+}
+
+ATF_TC_BODY(tcp, tc)
+{
+ regtest("localhost", "tcp", "1", 0);
+
+}
+
+ATF_TC(udp);
+ATF_TC_HEAD(udp, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc udp (select)");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
+}
+
+ATF_TC_BODY(udp, tc)
+{
+ regtest("localhost", "udp", "1", 0);
+
+}
+
+ATF_TC(tcp_poll);
+ATF_TC_HEAD(tcp_poll, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc tcp (poll)");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
+}
+
+ATF_TC_BODY(tcp_poll, tc)
+{
+ regtest("localhost", "tcp", "1", 1);
+
+}
+
+ATF_TC(udp_poll);
+ATF_TC_HEAD(udp_poll, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks svc udp (poll)");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
+}
+
+ATF_TC_BODY(udp_poll, tc)
+{
+ regtest("localhost", "udp", "1", 1);
+
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, get_svc_addr_udp);
ATF_TP_ADD_TC(tp, get_svc_addr_tcp);
+ ATF_TP_ADD_TC(tp, raw);
+ ATF_TP_ADD_TC(tp, tcp);
+ ATF_TP_ADD_TC(tp, udp);
+ ATF_TP_ADD_TC(tp, tcp_poll);
+ ATF_TP_ADD_TC(tp, udp_poll);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c b/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c
index 4d2a93b..34fd5cc 100644
--- a/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c
+++ b/contrib/netbsd-tests/lib/libc/setjmp/t_setjmp.c
@@ -87,7 +87,7 @@ __RCSID("$NetBSD: t_setjmp.c,v 1.1 2010/12/27 19:35:31 pgoyette Exp $");
static int expectsignal;
static void
-aborthandler(int signo)
+aborthandler(int signo __unused)
{
ATF_REQUIRE_MSG(expectsignal, "kill(SIGABRT) succeeded");
atf_tc_pass();
diff --git a/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c b/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c
index 4437c92..2014470 100644
--- a/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c
+++ b/contrib/netbsd-tests/lib/libc/setjmp/t_threadjmp.c
@@ -91,7 +91,7 @@ static pthread_t myself = NULL;
static int expectsignal;
static void
-aborthandler(int signo)
+aborthandler(int signo __unused)
{
ATF_REQUIRE(myself == pthread_self());
ATF_REQUIRE_MSG(expectsignal, "kill(SIGABRT) succeeded");
diff --git a/contrib/netbsd-tests/lib/libc/ssp/t_ssp.sh b/contrib/netbsd-tests/lib/libc/ssp/t_ssp.sh
index 2986ccf..e535e3e 100755
--- a/contrib/netbsd-tests/lib/libc/ssp/t_ssp.sh
+++ b/contrib/netbsd-tests/lib/libc/ssp/t_ssp.sh
@@ -361,6 +361,9 @@ raw_head()
raw_body()
{
prog="$(atf_get_srcdir)/h_raw"
+ # Begin FreeBSD
+ [ -x $prog ] || atf_skip "$prog is missing; skipping testcase"
+ # End FreeBSD
h_pass "$prog 9"
# Begin FreeBSD
diff --git a/contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c b/contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c
new file mode 100644
index 0000000..950a258
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/stdio/t_open_memstream.c
@@ -0,0 +1,96 @@
+/*
+ * Based on the OpenBSD test
+ * Copyright (c) 2011 Martin Pieuchot <mpi@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_open_memstream.c,v 1.2 2014/10/19 11:17:43 justin Exp $");
+
+#include <atf-c.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+ATF_TC(test_open_memstream);
+ATF_TC_HEAD(test_open_memstream, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test open_memstream functionality");
+}
+
+#define OFFSET 16384
+
+const char start[] = "start";
+const char hello[] = "hello";
+
+ATF_TC_BODY(test_open_memstream, tc)
+{
+ FILE *fp;
+ char *buf = (char *)0xff;
+ size_t size = 0;
+ off_t off;
+ int i;
+
+ fp = open_memstream(&buf, &size);
+ ATF_REQUIRE(fp != NULL);
+
+ off = ftello(fp);
+ ATF_CHECK(off == 0);
+
+ ATF_CHECK(fflush(fp) == 0);
+ ATF_CHECK(size == 0);
+ ATF_CHECK(buf != (char *)0xff);
+ ATF_CHECK(fseek(fp, -6, SEEK_SET) == -1);
+ ATF_CHECK(fseek(fp, OFFSET, SEEK_SET) == 0);
+ ATF_CHECK(fprintf(fp, hello) != EOF);
+ ATF_CHECK(fflush(fp) != EOF);
+ ATF_CHECK(size == OFFSET + sizeof(hello)-1);
+ ATF_CHECK(fseek(fp, 0, SEEK_SET) == 0);
+ ATF_CHECK(fprintf(fp, start) != EOF);
+ ATF_CHECK(fflush(fp) != EOF);
+ ATF_CHECK(size == sizeof(start)-1);
+
+ /* Needed for sparse files */
+ ATF_CHECK(strncmp(buf, start, sizeof(start)-1) == 0);
+ for (i = sizeof(start)-1; i < OFFSET; i++)
+ ATF_CHECK(buf[i] == '\0');
+
+ ATF_CHECK(memcmp(buf + OFFSET, hello, sizeof(hello)-1) == 0);
+
+ /* verify that simply seeking past the end doesn't increase the size */
+ ATF_CHECK(fseek(fp, 100, SEEK_END) == 0);
+ ATF_CHECK(fflush(fp) != EOF);
+ ATF_CHECK(size == OFFSET + sizeof(hello)-1);
+ ATF_CHECK(fseek(fp, 8, SEEK_SET) == 0);
+ ATF_CHECK(ftell(fp) == 8);
+
+ /* Try to seek backward */
+ ATF_CHECK(fseek(fp, -1, SEEK_CUR) == 0);
+ ATF_CHECK(ftell(fp) == 7);
+ ATF_CHECK(fseek(fp, 5, SEEK_CUR) == 0);
+ ATF_CHECK(fclose(fp) != EOF);
+ ATF_CHECK(size == 12);
+
+ free(buf);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, test_open_memstream);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c b/contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c
index 5a8fa28..7e29778 100644
--- a/contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_getenv.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_getenv.c,v 1.2 2011/07/15 13:54:31 jruoho Exp $ */
+/* $NetBSD: t_getenv.c,v 1.3 2015/02/27 08:55:35 martin Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_getenv.c,v 1.2 2011/07/15 13:54:31 jruoho Exp $");
+__RCSID("$NetBSD: t_getenv.c,v 1.3 2015/02/27 08:55:35 martin Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -123,7 +123,7 @@ ATF_TC_HEAD(setenv_basic, tc)
{
atf_tc_set_md_var(tc, "descr",
"Test setenv(3), getenv(3), unsetenv(3)");
- atf_tc_set_md_var(tc, "timeout", "300");
+ atf_tc_set_md_var(tc, "timeout", "600");
}
ATF_TC_BODY(setenv_basic, tc)
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c b/contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c
index 47afb84..8db7880 100644
--- a/contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_posix_memalign.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_posix_memalign.c,v 1.2 2011/07/07 11:12:18 jruoho Exp $ */
+/* $NetBSD: t_posix_memalign.c,v 1.4 2015/11/07 17:35:31 nros Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -32,11 +32,12 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_posix_memalign.c,v 1.2 2011/07/07 11:12:18 jruoho Exp $");
+__RCSID("$NetBSD: t_posix_memalign.c,v 1.4 2015/11/07 17:35:31 nros Exp $");
#include <atf-c.h>
#include <errno.h>
+#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -49,10 +50,10 @@ ATF_TC_HEAD(posix_memalign_basic, tc)
}
ATF_TC_BODY(posix_memalign_basic, tc)
{
- size_t size[] = {
+ static const size_t size[] = {
1, 2, 3, 4, 10, 100, 16384, 32768, 65536
};
- size_t align[] = {
+ static const size_t align[] = {
512, 1024, 16, 32, 64, 4, 2048, 16, 2
};
@@ -63,7 +64,7 @@ ATF_TC_BODY(posix_memalign_basic, tc)
int ret;
p = (void*)0x1;
- (void)printf("Checking posix_memalign(&p, %zd, %zd)...\n",
+ (void)printf("Checking posix_memalign(&p, %zu, %zu)...\n",
align[i], size[i]);
ret = posix_memalign(&p, align[i], size[i]);
@@ -80,9 +81,71 @@ ATF_TC_BODY(posix_memalign_basic, tc)
}
}
+
+ATF_TC(aligned_alloc_basic);
+ATF_TC_HEAD(aligned_alloc_basic, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks aligned_alloc(3)");
+}
+ATF_TC_BODY(aligned_alloc_basic, tc)
+{
+ static const size_t size[] = {
+ 1, 2, 3, 4, 10, 100, 16384, 32768, 65536, 10000, 0
+ };
+ static const size_t align[] = {
+ 512, 1024, 16, 32, 64, 4, 2048, 16, 2, 2048, 0
+ };
+
+ size_t i;
+ void *p;
+
+ for (i = 0; i < __arraycount(size); i++) {
+ (void)printf("Checking aligned_alloc(%zu, %zu)...\n",
+ align[i], size[i]);
+ p = aligned_alloc(align[i], size[i]);
+ if (p == NULL) {
+ if (align[i] == 0 || ((align[i] - 1) & align[i]) != 0 ||
+ size[i] % align[i] != 0) {
+ ATF_REQUIRE_EQ_MSG(errno, EINVAL,
+ "aligned_alloc: %s", strerror(errno));
+ }
+ else {
+ ATF_REQUIRE_EQ_MSG(errno, ENOMEM,
+ "aligned_alloc: %s", strerror(errno));
+ }
+ }
+ else {
+ ATF_REQUIRE_EQ_MSG(align[i] == 0, false,
+ "aligned_alloc: success when alignment was not "
+ "a power of 2");
+ ATF_REQUIRE_EQ_MSG((align[i] - 1) & align[i], 0,
+ "aligned_alloc: success when alignment was not "
+ "a power of 2");
+#ifdef __NetBSD__
+ /*
+ * NetBSD-specific invariant
+ *
+ * From aligned_alloc(3) on FreeBSD:
+ *
+ * Behavior is undefined if size is not an integral
+ * multiple of alignment.
+ */
+ ATF_REQUIRE_EQ_MSG(size[i] % align[i], 0,
+ "aligned_alloc: success when size was not an "
+ "integer multiple of alignment");
+#endif
+ ATF_REQUIRE_EQ_MSG(((intptr_t)p) & (align[i] - 1), 0,
+ "p = %p", p);
+ free(p);
+ }
+ }
+}
+
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, posix_memalign_basic);
-
+ ATF_TP_ADD_TC(tp, aligned_alloc_basic);
+
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c b/contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c
index 8f0f899..06f2de0 100644
--- a/contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_strtod.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strtod.c,v 1.32 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_strtod.c,v 1.34 2015/12/22 14:19:25 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
/* Public domain, Otto Moerbeek <otto@drijf.net>, 2006. */
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_strtod.c,v 1.32 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_strtod.c,v 1.34 2015/12/22 14:19:25 christos Exp $");
#include <errno.h>
#include <math.h>
@@ -42,9 +42,7 @@ __RCSID("$NetBSD: t_strtod.c,v 1.32 2014/11/04 00:20:19 justin Exp $");
#include <atf-c.h>
-#if defined(__i386__) || defined(__amd64__) || defined(__sparc__)
#include <fenv.h>
-#endif
#if !defined(__vax__)
static const char * const inf_strings[] =
@@ -53,10 +51,6 @@ static const char * const inf_strings[] =
const char *nan_string = "NaN(x)y";
#endif
-#ifdef __FreeBSD__
-#define __HAVE_LONG_DOUBLE
-#endif
-
ATF_TC(strtod_basic);
ATF_TC_HEAD(strtod_basic, tc)
{
@@ -246,7 +240,7 @@ ATF_TC_HEAD(strtod_round, tc)
ATF_TC_BODY(strtod_round, tc)
{
-#if defined(__i386__) || defined(__amd64__) || defined(__sparc__)
+#ifdef __HAVE_FENV
/*
* Test that strtod(3) honors the current rounding mode.
@@ -270,7 +264,7 @@ ATF_TC_BODY(strtod_round, tc)
atf_tc_fail("strtod(3) did not honor fesetround(3)");
}
#else
- atf_tc_skip("Requires one of i386, amd64 or sparc");
+ atf_tc_skip("Requires <fenv.h> support");
#endif
}
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_strtoi.c b/contrib/netbsd-tests/lib/libc/stdlib/t_strtoi.c
new file mode 100644
index 0000000..bf958a1
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_strtoi.c
@@ -0,0 +1,304 @@
+/* $NetBSD: t_strtoi.c,v 1.1 2015/05/01 14:17:56 christos Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jukka Ruohonen.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Created by Kamil Rytarowski, vesed on ID:
+ * NetBSD: t_strtol.c,v 1.5 2011/06/14 02:45:58 jruoho Exp
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_strtoi.c,v 1.1 2015/05/01 14:17:56 christos Exp $");
+
+#include <atf-c.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+struct test {
+ const char *str;
+ intmax_t res;
+ int base;
+ const char *end;
+ intmax_t lo;
+ intmax_t hi;
+ int rstatus;
+};
+
+static void check(struct test *, intmax_t, char *, int);
+
+static void
+check(struct test *t, intmax_t rv, char *end, int rstatus)
+{
+
+ if (rv != t->res)
+ atf_tc_fail_nonfatal("strtoi(%s, &end, %d, %jd, %jd, &rstatus)"
+ " failed (rv = %jd)", t->str, t->base, t->lo, t->hi, rv);
+
+ if (rstatus != t->rstatus)
+ atf_tc_fail_nonfatal("strtoi(%s, &end, %d, %jd, %jd, &rstatus)"
+ " failed (rstatus: %d ('%s'))",
+ t->str, t->base, t->lo, t->hi, rstatus, strerror(rstatus));
+
+ if ((t->end != NULL && strcmp(t->end, end) != 0) ||
+ (t->end == NULL && *end != '\0'))
+ atf_tc_fail_nonfatal("invalid end pointer ('%s') from "
+ "strtoi(%s, &end, %d, %jd, %jd, &rstatus)",
+ end, t->str, t->base, t->lo, t->hi);
+}
+
+ATF_TC(strtoi_base);
+ATF_TC_HEAD(strtoi_base, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test strtoi(3) with different bases");
+}
+
+ATF_TC_BODY(strtoi_base, tc)
+{
+ struct test t[] = {
+ { "123456789", 123456789, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "111010110111100110100010101",123456789, 2, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "22121022020212200", 123456789, 3, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "13112330310111", 123456789, 4, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "223101104124", 123456789, 5, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "20130035113", 123456789, 6, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "3026236221", 123456789, 7, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "726746425", 123456789, 8, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "277266780", 123456789, 9, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "123456789", 123456789, 10, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "63762A05", 123456789, 11, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "35418A99", 123456789, 12, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "1C767471", 123456789, 13, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "12579781", 123456789, 14, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "AC89BC9", 123456789, 15, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "75BCD15", 123456789, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "1234567", 342391, 8, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "01234567", 342391, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "0123456789", 123456789, 10, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "0x75bcd15", 123456789, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ };
+
+ intmax_t rv;
+ char *end;
+ int e;
+ size_t i;
+
+ for (i = 0; i < __arraycount(t); i++) {
+
+ errno = 0;
+ rv = strtoi(t[i].str, &end, t[i].base, t[i].lo, t[i].hi, &e);
+
+ if (errno != 0)
+ atf_tc_fail("strtoi(3) changed errno to %d ('%s')",
+ e, strerror(e));
+
+ check(&t[i], rv, end, e);
+ }
+}
+
+ATF_TC(strtoi_case);
+ATF_TC_HEAD(strtoi_case, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Case insensitivity with strtoi(3)");
+}
+
+ATF_TC_BODY(strtoi_case, tc)
+{
+ struct test t[] = {
+ { "abcd", 0xabcd, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { " dcba", 0xdcba, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "abcd dcba", 0xabcd, 16, " dcba",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "abc0x123", 0xabc0, 16, "x123",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "abcd\0x123", 0xabcd, 16, "\0x123",
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "ABCD", 0xabcd, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "aBcD", 0xabcd, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "0xABCD", 0xabcd, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "0xABCDX", 0xabcd, 16, "X",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP},
+ };
+
+ intmax_t rv;
+ char *end;
+ int e;
+ size_t i;
+
+ for (i = 0; i < __arraycount(t); i++) {
+
+ errno = 0;
+ rv = strtoi(t[i].str, &end, t[i].base, t[i].lo, t[i].hi, &e);
+
+ if (errno != 0)
+ atf_tc_fail("strtoi(3) changed errno to %d ('%s')",
+ e, strerror(e));
+
+ check(&t[i], rv, end, e);
+ }
+}
+
+ATF_TC(strtoi_range);
+ATF_TC_HEAD(strtoi_range, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test ERANGE from strtoi(3)");
+}
+
+ATF_TC_BODY(strtoi_range, tc)
+{
+ struct test t[] = {
+#if INTMAX_MAX == 0x7fffffffffffffff
+ { "1000000000000000000000", INTMAX_MAX, 8, NULL,
+ INTMAX_MIN, INTMAX_MAX, ERANGE },
+ { "9223372036854775808", INTMAX_MAX, 10, NULL,
+ INTMAX_MIN, INTMAX_MAX, ERANGE },
+ { "8000000000000000", INTMAX_MAX, 16, NULL,
+ INTMAX_MIN, INTMAX_MAX, ERANGE },
+#else
+#error extend this test to your platform!
+#endif
+ { "10", 1, 10, NULL,
+ -1, 1, ERANGE },
+ { "10", 11, 10, NULL,
+ 11, 20, ERANGE },
+ };
+
+ intmax_t rv;
+ char *end;
+ int e;
+ size_t i;
+
+ for (i = 0; i < __arraycount(t); i++) {
+
+ errno = 0;
+ rv = strtoi(t[i].str, &end, t[i].base, t[i].lo, t[i].hi, &e);
+
+ if (errno != 0)
+ atf_tc_fail("strtoi(3) changed errno to %d ('%s')",
+ e, strerror(e));
+
+ check(&t[i], rv, end, e);
+ }
+}
+
+ATF_TC(strtoi_signed);
+ATF_TC_HEAD(strtoi_signed, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "A basic test of strtoi(3)");
+}
+
+ATF_TC_BODY(strtoi_signed, tc)
+{
+ struct test t[] = {
+ { "1", 1, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { " 2", 2, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { " 3", 3, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { " -3", -3, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "--1", 0, 0, "--1",
+ INTMAX_MIN, INTMAX_MAX, ECANCELED },
+ { "+-2", 0, 0, "+-2",
+ INTMAX_MIN, INTMAX_MAX, ECANCELED },
+ { "++3", 0, 0, "++3",
+ INTMAX_MIN, INTMAX_MAX, ECANCELED },
+ { "+9", 9, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "+123", 123, 0, NULL,
+ INTMAX_MIN, INTMAX_MAX, 0 },
+ { "-1 3", -1, 0, " 3",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "-1.3", -1, 0, ".3",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "- 3", 0, 0, "- 3",
+ INTMAX_MIN, INTMAX_MAX, ECANCELED },
+ { "+33.", 33, 0, ".",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ { "30x0", 30, 0, "x0",
+ INTMAX_MIN, INTMAX_MAX, ENOTSUP },
+ };
+
+ intmax_t rv;
+ char *end;
+ int e;
+ size_t i;
+
+ for (i = 0; i < __arraycount(t); i++) {
+
+ errno = 0;
+ rv = strtoi(t[i].str, &end, t[i].base, t[i].lo, t[i].hi, &e);
+
+ if (errno != 0)
+ atf_tc_fail("strtoi(3) changed errno to %d ('%s')",
+ e, strerror(e));
+
+ check(&t[i], rv, end, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, strtoi_base);
+ ATF_TP_ADD_TC(tp, strtoi_case);
+ ATF_TP_ADD_TC(tp, strtoi_range);
+ ATF_TP_ADD_TC(tp, strtoi_signed);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c b/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c
index 5a0c6d0..54e1907 100644
--- a/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c
+++ b/contrib/netbsd-tests/lib/libc/stdlib/t_strtol.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strtol.c,v 1.5 2011/06/14 02:45:58 jruoho Exp $ */
+/* $NetBSD: t_strtol.c,v 1.6 2016/06/01 01:12:02 pgoyette Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_strtol.c,v 1.5 2011/06/14 02:45:58 jruoho Exp $");
+__RCSID("$NetBSD: t_strtol.c,v 1.6 2016/06/01 01:12:02 pgoyette Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -59,7 +59,8 @@ check(struct test *t, long int li, long long int lli, char *end)
atf_tc_fail_nonfatal("strtoll(%s, NULL, %d) failed "
"(rv = %lld)", t->str, t->base, lli);
- if (t->end != NULL && strcmp(t->end, end) != 0)
+ if ((t->end != NULL && strcmp(t->end, end) != 0) ||
+ (t->end == NULL && *end != '\0'))
atf_tc_fail_nonfatal("invalid end pointer ('%s') from "
"strtol(%s, &end, %d)", end, t->str, t->base);
}
@@ -89,8 +90,8 @@ ATF_TC_BODY(strtol_base, tc)
{ "12579781", 123456789, 14, NULL },
{ "AC89BC9", 123456789, 15, NULL },
{ "75BCD15", 123456789, 16, NULL },
- { "123456789", 342391, 8, NULL },
- { "0123456789", 342391, 0, NULL },
+ { "1234567", 342391, 8, NULL },
+ { "01234567", 342391, 0, NULL },
{ "0123456789", 123456789, 10, NULL },
{ "0x75bcd15", 123456789, 0, NULL },
};
@@ -121,7 +122,7 @@ ATF_TC_BODY(strtol_case, tc)
{ "abcd", 0xabcd, 16, NULL },
{ " dcba", 0xdcba, 16, NULL },
{ "abcd dcba", 0xabcd, 16, " dcba" },
- { "abc0x123", 0xabc0, 16, NULL },
+ { "abc0x123", 0xabc0, 16, "x123" },
{ "abcd\0x123", 0xabcd, 16, "\0x123" },
{ "ABCD", 0xabcd, 16, NULL },
{ "aBcD", 0xabcd, 16, NULL },
diff --git a/contrib/netbsd-tests/lib/libc/string/t_memcpy.c b/contrib/netbsd-tests/lib/libc/string/t_memcpy.c
index 5bbd924..64cdb29 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_memcpy.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_memcpy.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_memcpy.c,v 1.5 2013/03/17 02:23:31 christos Exp $ */
+/* $NetBSD: t_memcpy.c,v 1.6 2017/01/11 18:05:54 christos Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -108,12 +108,8 @@ ATF_TC_BODY(memcpy_basic, tc)
if (i != j)
runTest(start[i], start[j]);
MD5End(mc, result);
-#ifdef __NetBSD__
- ATF_REQUIRE_EQ(strcmp(result, goodResult), 0);
-#else
ATF_REQUIRE_EQ_MSG(strcmp(result, goodResult), 0, "%s != %s",
result, goodResult);
-#endif
}
ATF_TC(memccpy_simple);
diff --git a/contrib/netbsd-tests/lib/libc/string/t_memmem.c b/contrib/netbsd-tests/lib/libc/string/t_memmem.c
index 8734bc3..5bf60ce 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_memmem.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_memmem.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_memmem.c,v 1.2 2011/07/07 08:27:36 jruoho Exp $ */
+/* $NetBSD: t_memmem.c,v 1.3 2017/01/11 18:07:37 christos Exp $ */
/*-
* Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -51,6 +51,8 @@ char p6[] = "9";
int lp6 = 1;
char p7[] = "654";
int lp7 = 3;
+char p8[] = "89abc";
+int lp8 = 5;
char b0[] = "";
int lb0 = 0;
@@ -75,7 +77,7 @@ ATF_TC_HEAD(memmem_basic, tc)
ATF_TC_BODY(memmem_basic, tc)
{
-#if defined(__darwin__) || defined(__FreeBSD__)
+#if defined(__darwin__)
expect(memmem(b2, lb2, p0, lp0) == NULL);
expect(memmem(b0, lb0, p0, lp0) == NULL);
#else
@@ -94,6 +96,7 @@ ATF_TC_BODY(memmem_basic, tc)
expect(memmem(b2, lb2, p4, lp4) == NULL);
expect(memmem(b2, lb2, p7, lp7) == NULL);
+ expect(memmem(b2, lb2, p8, lp8) == NULL);
}
ATF_TP_ADD_TCS(tp)
diff --git a/contrib/netbsd-tests/lib/libc/string/t_memset.c b/contrib/netbsd-tests/lib/libc/string/t_memset.c
index c1fb385..5a2be28 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_memset.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_memset.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_memset.c,v 1.3 2013/03/17 02:23:31 christos Exp $ */
+/* $NetBSD: t_memset.c,v 1.4 2015/09/11 09:25:52 martin Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_memset.c,v 1.3 2013/03/17 02:23:31 christos Exp $");
+__RCSID("$NetBSD: t_memset.c,v 1.4 2015/09/11 09:25:52 martin Exp $");
#include <sys/stat.h>
@@ -42,6 +42,8 @@ static long page = 0;
static void fill(char *, size_t, char);
static bool check(char *, size_t, char);
+int zero; /* always zero, but the compiler does not know */
+
ATF_TC(memset_array);
ATF_TC_HEAD(memset_array, tc)
{
@@ -133,6 +135,50 @@ ATF_TC_BODY(memset_nonzero, tc)
free(buf);
}
+ATF_TC(memset_zero_size);
+
+ATF_TC_HEAD(memset_zero_size, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test memset(3) with zero size");
+}
+
+ATF_TC_BODY(memset_zero_size, tc)
+{
+ char buf[1024];
+
+ (void)memset(buf, 'x', sizeof(buf));
+
+ if (check(buf, sizeof(buf), 'x') != true)
+ atf_tc_fail("memset(3) did not fill a static buffer");
+
+ (void)memset(buf+sizeof(buf)/2, 0, zero);
+
+ if (check(buf, sizeof(buf), 'x') != true)
+ atf_tc_fail("memset(3) with 0 size did change the buffer");
+}
+
+ATF_TC(bzero_zero_size);
+
+ATF_TC_HEAD(bzero_zero_size, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test bzero(3) with zero size");
+}
+
+ATF_TC_BODY(bzero_zero_size, tc)
+{
+ char buf[1024];
+
+ (void)memset(buf, 'x', sizeof(buf));
+
+ if (check(buf, sizeof(buf), 'x') != true)
+ atf_tc_fail("memset(3) did not fill a static buffer");
+
+ (void)bzero(buf+sizeof(buf)/2, zero);
+
+ if (check(buf, sizeof(buf), 'x') != true)
+ atf_tc_fail("bzero(3) with 0 size did change the buffer");
+}
+
ATF_TC(memset_struct);
ATF_TC_HEAD(memset_struct, tc)
{
@@ -202,6 +248,8 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, memset_nonzero);
ATF_TP_ADD_TC(tp, memset_struct);
ATF_TP_ADD_TC(tp, memset_return);
+ ATF_TP_ADD_TC(tp, memset_zero_size);
+ ATF_TP_ADD_TC(tp, bzero_zero_size);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/string/t_strchr.c b/contrib/netbsd-tests/lib/libc/string/t_strchr.c
index 4556b2c..5dd9a62 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_strchr.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_strchr.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strchr.c,v 1.1 2011/07/07 08:59:33 jruoho Exp $ */
+/* $NetBSD: t_strchr.c,v 1.2 2017/01/10 15:34:49 christos Exp $ */
/*
* Written by J.T. Conklin <jtc@acorntoolworks.com>
@@ -58,12 +58,10 @@ ATF_TC_HEAD(strchr_basic, tc)
ATF_TC_BODY(strchr_basic, tc)
{
-#ifdef __FreeBSD__
void *dl_handle;
-#endif
- unsigned int t, a;
char *off;
char buf[32];
+ unsigned int t, a;
const char *tab[] = {
"",
@@ -248,12 +246,8 @@ ATF_TC_BODY(strchr_basic, tc)
"abcdefgh/abcdefgh/",
};
-#ifdef __FreeBSD__
dl_handle = dlopen(NULL, RTLD_LAZY);
strchr_fn = dlsym(dl_handle, "test_strlen");
-#else
- strchr_fn = dlsym(dlopen(0, RTLD_LAZY), "test_strchr");
-#endif
if (!strchr_fn)
strchr_fn = strchr;
@@ -288,9 +282,7 @@ ATF_TC_BODY(strchr_basic, tc)
verify_strchr(buf + a, 0xff, t, a);
}
}
-#ifdef __FreeBSD__
(void)dlclose(dl_handle);
-#endif
}
ATF_TP_ADD_TCS(tp)
diff --git a/contrib/netbsd-tests/lib/libc/string/t_strerror.c b/contrib/netbsd-tests/lib/libc/string/t_strerror.c
index 888a826..99b95b4 100644
--- a/contrib/netbsd-tests/lib/libc/string/t_strerror.c
+++ b/contrib/netbsd-tests/lib/libc/string/t_strerror.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strerror.c,v 1.3 2011/05/10 06:55:27 jruoho Exp $ */
+/* $NetBSD: t_strerror.c,v 1.4 2017/01/10 20:35:49 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,18 +29,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_strerror.c,v 1.3 2011/05/10 06:55:27 jruoho Exp $");
+__RCSID("$NetBSD: t_strerror.c,v 1.4 2017/01/10 20:35:49 christos Exp $");
#include <atf-c.h>
#include <errno.h>
+#include <stdio.h> /* Needed for sys_nerr on FreeBSD */
#include <limits.h>
#include <locale.h>
#include <string.h>
-#ifdef __FreeBSD__
-#include <stdio.h>
-#endif
-
ATF_TC(strerror_basic);
ATF_TC_HEAD(strerror_basic, tc)
{
diff --git a/contrib/netbsd-tests/lib/libc/sync/cpp_atomic_ops_linkable.cc b/contrib/netbsd-tests/lib/libc/sync/cpp_atomic_ops_linkable.cc
new file mode 100644
index 0000000..e7822b7
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sync/cpp_atomic_ops_linkable.cc
@@ -0,0 +1,107 @@
+/* $NetBSD: cpp_atomic_ops_linkable.cc,v 1.5 2017/01/11 12:10:26 joerg Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Martin Husemann <martin@NetBSD.org>.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * This is a simple link-time test to verify all builtin atomic sync
+ * operations for C++ <atomic> are available.
+ */
+
+#include <atomic>
+#include <machine/types.h> // for __HAVE_ATOMIC64_OPS
+
+template <class T>
+class ATest {
+public:
+ ATest() : m_val(0)
+ {
+ m_val.exchange(std::atomic<T>(8));
+ m_val--;
+ m_val++;
+ m_val ^= 0x0f;
+ m_val &= 0x0f;
+ m_val |= 2;
+
+ T tval(1), other(42);
+ m_val.compare_exchange_weak(tval, other,
+ std::memory_order_release, std::memory_order_relaxed);
+ }
+
+private:
+ volatile std::atomic<T> m_val;
+};
+
+int main(int argc, char **argv)
+{
+ ATest<char>();
+ ATest<signed char>();
+ ATest<unsigned char>();
+ ATest<short>();
+ ATest<unsigned short>();
+ ATest<int>();
+ ATest<unsigned int>();
+ ATest<long>();
+ ATest<unsigned long>();
+#ifdef __HAVE_ATOMIC64_OPS
+ ATest<long long>();
+ ATest<unsigned long long>();
+#endif
+ ATest<char16_t>();
+ ATest<char32_t>();
+ ATest<wchar_t>();
+ ATest<int_least8_t>();
+ ATest<uint_least8_t>();
+ ATest<int_least16_t>();
+ ATest<uint_least16_t>();
+ ATest<int_least32_t>();
+ ATest<uint_least32_t>();
+#ifdef __HAVE_ATOMIC64_OPS
+ ATest<int_least64_t>();
+ ATest<uint_least64_t>();
+#endif
+ ATest<int_fast8_t>();
+ ATest<uint_fast8_t>();
+ ATest<int_fast16_t>();
+ ATest<uint_fast16_t>();
+ ATest<int_fast32_t>();
+ ATest<uint_fast32_t>();
+#ifdef __HAVE_ATOMIC64_OPS
+ ATest<int_fast64_t>();
+ ATest<uint_fast64_t>();
+#endif
+ ATest<intptr_t>();
+ ATest<uintptr_t>();
+ ATest<std::size_t>();
+ ATest<std::ptrdiff_t>();
+#ifdef __HAVE_ATOMIC64_OPS
+ ATest<intmax_t>();
+ ATest<uintmax_t>();
+#endif
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_access.c b/contrib/netbsd-tests/lib/libc/sys/t_access.c
index 69d2df2..c537eca 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_access.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_access.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_access.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $ */
+/* $NetBSD: t_access.c,v 2.2 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_access.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $");
+__RCSID("$NetBSD: t_access.c,v 1.2 2017/01/10 22:36:29 christos Exp $");
+
+#ifdef __FreeBSD__
+#include <sys/param.h> /* For __FreeBSD_version */
+#endif
+
+#include <atf-c.h>
+
+#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h>
@@ -38,13 +46,6 @@ __RCSID("$NetBSD: t_access.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $");
#include <stdlib.h>
#include <unistd.h>
-#include <atf-c.h>
-
-#ifdef __FreeBSD__
-#include <sys/param.h>
-#include <sys/stat.h>
-#endif
-
static const char path[] = "access";
static const int mode[4] = { R_OK, W_OK, X_OK, F_OK };
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_bind.c b/contrib/netbsd-tests/lib/libc/sys/t_bind.c
new file mode 100644
index 0000000..0c6027c
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_bind.c
@@ -0,0 +1,78 @@
+/* $NetBSD: t_bind.c,v 1.3 2015/04/05 23:28:10 rtr Exp $ */
+/*
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
+ * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <unistd.h>
+
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+
+#include <atf-c.h>
+
+ATF_TC(bind_foreign_family);
+
+ATF_TC_HEAD(bind_foreign_family, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks that binding a socket "
+ "with a different address family fails");
+}
+
+ATF_TC_BODY(bind_foreign_family, tc)
+{
+ struct sockaddr_in addr;
+
+ /* addr.sin_family = AF_UNSPEC = 0 */
+ memset(&addr, 0, sizeof(addr));
+
+ /*
+ * it is not necessary to initialize sin_{addr,port} since
+ * those structure members shall not be accessed if bind
+ * fails correctly.
+ */
+
+ int sock = socket(AF_LOCAL, SOCK_STREAM, 0);
+ ATF_REQUIRE(sock != -1);
+
+ /* should fail but currently doesn't */
+ ATF_REQUIRE(-1 == bind(sock, (struct sockaddr *)&addr, sizeof(addr)));
+ ATF_REQUIRE(EAFNOSUPPORT == errno);
+
+ close(sock);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, bind_foreign_family);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_chroot.c b/contrib/netbsd-tests/lib/libc/sys/t_chroot.c
index 651dc10..1f1c49b 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_chroot.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_chroot.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_chroot.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $ */
+/* $NetBSD: t_chroot.c,v 1.2 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,9 +29,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_chroot.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $");
+__RCSID("$NetBSD: t_chroot.c,v 1.2 2017/01/10 22:36:29 christos Exp $");
#include <sys/wait.h>
+#include <sys/stat.h>
#include <atf-c.h>
#include <errno.h>
@@ -42,10 +43,6 @@ __RCSID("$NetBSD: t_chroot.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $");
#include <string.h>
#include <unistd.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
-
ATF_TC(chroot_basic);
ATF_TC_HEAD(chroot_basic, tc)
{
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c b/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c
new file mode 100644
index 0000000..8c1fd03
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_clock_nanosleep.c
@@ -0,0 +1,63 @@
+/* $NetBSD: t_clock_nanosleep.c,v 1.1 2016/11/11 15:30:44 njoly Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_clock_nanosleep.c,v 1.1 2016/11/11 15:30:44 njoly Exp $");
+
+#include <atf-c.h>
+#include <time.h>
+
+ATF_TC(clock_nanosleep_remain);
+ATF_TC_HEAD(clock_nanosleep_remain, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Check clock_nanosleep(2) remaining time");
+}
+
+ATF_TC_BODY(clock_nanosleep_remain, tc)
+{
+ struct timespec rqtp, rmtp;
+
+ rqtp.tv_sec = 0; rqtp.tv_nsec = 0;
+ rmtp.tv_sec = -1; rmtp.tv_nsec = -1;
+ ATF_REQUIRE(clock_nanosleep(CLOCK_REALTIME, 0, &rqtp, &rmtp) == 0);
+ ATF_CHECK(rmtp.tv_sec == 0 && rmtp.tv_nsec == 0);
+
+ ATF_REQUIRE(clock_gettime(CLOCK_REALTIME, &rqtp) == 0);
+ rmtp.tv_sec = -1; rmtp.tv_nsec = -1;
+ ATF_REQUIRE(clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &rqtp, &rmtp) == 0);
+ ATF_CHECK(rmtp.tv_sec == -1 && rmtp.tv_nsec == -1);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, clock_nanosleep_remain);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_connect.c b/contrib/netbsd-tests/lib/libc/sys/t_connect.c
index 896b490..672a022 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_connect.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_connect.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_connect.c,v 1.1 2011/11/05 18:19:02 jruoho Exp $ */
+/* $NetBSD: t_connect.c,v 1.2 2015/04/05 23:17:41 rtr Exp $ */
/*
* Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -102,10 +102,39 @@ ATF_TC_BODY(connect_low_port, tc)
#endif
}
+ATF_TC(connect_foreign_family);
+ATF_TC_HEAD(connect_foreign_family, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks that connecting a socket "
+ "with a different address family fails");
+}
+ATF_TC_BODY(connect_foreign_family, tc)
+{
+ struct sockaddr_in addr;
+
+ /* addr.sin_family = AF_UNSPEC = 0 */
+ memset(&addr, 0, sizeof(addr));
+
+ /*
+ * it is not necessary to initialize sin_{addr,port} since
+ * those structure members shall not be accessed if connect
+ * fails correctly.
+ */
+
+ int sock = socket(AF_LOCAL, SOCK_STREAM, 0);
+ ATF_REQUIRE(sock != -1);
+
+ ATF_REQUIRE(-1 == connect(sock, (struct sockaddr *)&addr, sizeof(addr)));
+ ATF_REQUIRE(EAFNOSUPPORT == errno);
+
+ close(sock);
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, connect_low_port);
+ ATF_TP_ADD_TC(tp, connect_foreign_family);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c b/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c
index 46c0ff1..9f21b3e 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_getcontext.c
@@ -53,6 +53,10 @@ run(int n, ...)
va_start(va, n);
#if defined(__FreeBSD__) && defined(__amd64__)
for (i = 0; i < 5; i++) {
+#elif defined(__FreeBSD__) && defined(__aarch64__)
+ for (i = 0; i < 7; i++) {
+#elif defined(__FreeBSD__) && defined(__mips__)
+ for (i = 0; i < 5; i++) {
#else
for (i = 0; i < 9; i++) {
#endif
@@ -116,6 +120,14 @@ ATF_TC_BODY(setcontext_link, tc)
/* FreeBSD/amd64 only permits up to 6 arguments. */
makecontext(&uc[i], (void *)run, 6, i,
0, 1, 2, 3, 4);
+#elif defined(__FreeBSD__) && defined(__aarch64__)
+ /* FreeBSD/arm64 only permits up to 8 arguments. */
+ makecontext(&uc[i], (void *)run, 8, i,
+ 0, 1, 2, 3, 4, 5, 6);
+#elif defined(__FreeBSD__) && defined(__mips__)
+ /* FreeBSD/mips only permits up to 6 arguments. */
+ makecontext(&uc[i], (void *)run, 6, i,
+ 0, 1, 2, 3, 4);
#else
makecontext(&uc[i], (void *)run, 10, i,
0, 1, 2, 3, 4, 5, 6, 7, 8);
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_getrusage.c b/contrib/netbsd-tests/lib/libc/sys/t_getrusage.c
index 85eeac6..f4ee96b 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_getrusage.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_getrusage.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_getrusage.c,v 1.3 2014/09/03 19:24:12 matt Exp $ */
+/* $NetBSD: t_getrusage.c,v 1.4 2016/08/05 15:01:39 scole Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_getrusage.c,v 1.3 2014/09/03 19:24:12 matt Exp $");
+__RCSID("$NetBSD: t_getrusage.c,v 1.4 2016/08/05 15:01:39 scole Exp $");
#include <sys/resource.h>
#include <sys/time.h>
@@ -56,6 +56,10 @@ sighandler(int signo)
/* Nothing. */
}
+#ifdef __FreeBSD__
+#define asm __asm
+#endif
+
static void
work(void)
{
@@ -64,6 +68,8 @@ work(void)
while (n > 0) {
#ifdef __or1k__
asm volatile("l.nop"); /* Do something. */
+#elif defined(__ia64__)
+ asm volatile("nop 0"); /* Do something. */
#else
asm volatile("nop"); /* Do something. */
#endif
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_getsockname.c b/contrib/netbsd-tests/lib/libc/sys/t_getsockname.c
new file mode 100644
index 0000000..01b1f8a
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_getsockname.c
@@ -0,0 +1,82 @@
+/* $NetBSD: t_getsockname.c,v 1.1 2016/07/30 11:03:54 njoly Exp $ */
+/*
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
+ * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <string.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+ATF_TC(getsockname_unix);
+
+ATF_TC_HEAD(getsockname_unix, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks getsockname with UNIX domain");
+}
+
+ATF_TC_BODY(getsockname_unix, tc)
+{
+ const char *path = "sock.unix";
+ int sd;
+ socklen_t len;
+ struct sockaddr_un sun;
+
+ sd = socket(AF_UNIX, SOCK_STREAM, 0);
+ ATF_REQUIRE(sd != -1);
+
+ len = sizeof(sun);
+ memset(&sun, 0, sizeof(sun));
+ ATF_REQUIRE(getsockname(sd, (struct sockaddr *)&sun, &len) != -1);
+ ATF_CHECK(sun.sun_family == AF_UNIX);
+ ATF_CHECK(strcmp(sun.sun_path, "") == 0);
+
+ len = sizeof(sun);
+ memset(&sun, 0, sizeof(sun));
+ sun.sun_family = AF_UNIX;
+ strcpy(sun.sun_path, path);
+ ATF_REQUIRE(bind(sd, (struct sockaddr *)&sun, len) != -1);
+
+ len = sizeof(sun);
+ memset(&sun, 0, sizeof(sun));
+ ATF_REQUIRE(getsockname(sd, (struct sockaddr *)&sun, &len) != -1);
+ ATF_CHECK(sun.sun_family == AF_UNIX);
+ ATF_CHECK(strcmp(sun.sun_path, path) == 0);
+
+ ATF_REQUIRE(close(sd) != -1);
+ ATF_REQUIRE(unlink(path) != -1);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, getsockname_unix);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_kevent.c b/contrib/netbsd-tests/lib/libc/sys/t_kevent.c
index c2fef44..8a20d63 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_kevent.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_kevent.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_kevent.c,v 1.6 2012/11/29 09:13:44 martin Exp $ */
+/* $NetBSD: t_kevent.c,v 1.7 2015/02/05 13:55:37 isaki Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_kevent.c,v 1.6 2012/11/29 09:13:44 martin Exp $");
+__RCSID("$NetBSD: t_kevent.c,v 1.7 2015/02/05 13:55:37 isaki Exp $");
#include <sys/types.h>
#include <sys/event.h>
@@ -182,8 +182,14 @@ ATF_TC_BODY(kqueue_unsupported_fd, tc)
struct kevent ev;
fd = open(DRVCTLDEV, O_RDONLY);
- if (fd == -1 && errno == ENOENT)
- atf_tc_skip("no " DRVCTLDEV " available for testing");
+ if (fd == -1) {
+ switch (errno) {
+ case ENOENT:
+ case ENXIO:
+ atf_tc_skip("no " DRVCTLDEV " available for testing");
+ break;
+ }
+ }
ATF_REQUIRE(fd != -1);
ATF_REQUIRE((kq = kqueue()) != -1);
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_mincore.c b/contrib/netbsd-tests/lib/libc/sys/t_mincore.c
index c31170f..ab8c33f 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_mincore.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_mincore.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mincore.c,v 1.8 2012/06/08 07:18:58 martin Exp $ */
+/* $NetBSD: t_mincore.c,v 1.9 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -59,9 +59,10 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mincore.c,v 1.8 2012/06/08 07:18:58 martin Exp $");
+__RCSID("$NetBSD: t_mincore.c,v 1.9 2017/01/10 22:36:29 christos Exp $");
#include <sys/mman.h>
+#include <sys/stat.h>
#include <sys/shm.h>
#include <atf-c.h>
@@ -74,10 +75,6 @@ __RCSID("$NetBSD: t_mincore.c,v 1.8 2012/06/08 07:18:58 martin Exp $");
#include <unistd.h>
#include <sys/resource.h>
-#ifdef __FreeBSD__
-#include <sys/stat.h>
-#endif
-
static long page = 0;
static const char path[] = "mincore";
static size_t check_residency(void *, size_t);
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_mlock.c b/contrib/netbsd-tests/lib/libc/sys/t_mlock.c
index 85d82c7..dcfba2b 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_mlock.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_mlock.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mlock.c,v 1.5 2014/02/26 20:49:26 martin Exp $ */
+/* $NetBSD: t_mlock.c,v 1.6 2016/08/09 12:02:44 kre Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mlock.c,v 1.5 2014/02/26 20:49:26 martin Exp $");
+__RCSID("$NetBSD: t_mlock.c,v 1.6 2016/08/09 12:02:44 kre Exp $");
#ifdef __FreeBSD__
#include <sys/types.h>
@@ -50,86 +50,13 @@ __RCSID("$NetBSD: t_mlock.c,v 1.5 2014/02/26 20:49:26 martin Exp $");
#include <limits.h>
#define _KMEMUSER
#include <machine/vmparam.h>
+
+void set_vm_max_wired(int);
+void restore_vm_max_wired(void);
#endif
static long page = 0;
-#ifdef __FreeBSD__
-#define VM_MAX_WIRED "vm.max_wired"
-
-static void
-vm_max_wired_sysctl(int *old_value, int *new_value)
-{
- size_t old_len;
- size_t new_len = (new_value == NULL ? 0 : sizeof(int));
-
- if (old_value == NULL)
- printf("Setting the new value to %d\n", *new_value);
- else {
- ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, NULL, &old_len,
- new_value, new_len) == 0,
- "sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno));
- }
-
- ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, old_value, &old_len,
- new_value, new_len) == 0,
- "sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno));
-
- if (old_value != NULL)
- printf("Saved the old value (%d)\n", *old_value);
-}
-
-static void
-set_vm_max_wired(int new_value)
-{
- FILE *fp;
- int old_value;
-
- fp = fopen(VM_MAX_WIRED, "w");
- if (fp == NULL) {
- atf_tc_skip("could not open %s for writing: %s",
- VM_MAX_WIRED, strerror(errno));
- return;
- }
-
- vm_max_wired_sysctl(&old_value, NULL);
-
- ATF_REQUIRE_MSG(fprintf(fp, "%d", old_value) > 0,
- "saving %s failed", VM_MAX_WIRED);
-
- fclose(fp);
-
- vm_max_wired_sysctl(NULL, &new_value);
-}
-
-static void
-restore_vm_max_wired(void)
-{
- FILE *fp;
- int saved_max_wired;
-
- fp = fopen(VM_MAX_WIRED, "r");
- if (fp == NULL) {
- perror("fopen failed\n");
- return;
- }
-
- if (fscanf(fp, "%d", &saved_max_wired) != 1) {
- perror("fscanf failed\n");
- fclose(fp);
- return;
- }
-
- fclose(fp);
- printf("old value in %s: %d\n", VM_MAX_WIRED, saved_max_wired);
-
- if (saved_max_wired == 0) /* This will cripple the test host */
- return;
-
- vm_max_wired_sysctl(NULL, &saved_max_wired);
-}
-#endif
-
ATF_TC(mlock_clip);
ATF_TC_HEAD(mlock_clip, tc)
{
@@ -178,6 +105,7 @@ ATF_TC_BODY(mlock_err, tc)
#endif
void *invalid_ptr;
int null_errno = ENOMEM; /* error expected for NULL */
+ void *buf;
#ifdef __FreeBSD__
#ifdef VM_MIN_ADDRESS
@@ -189,28 +117,48 @@ ATF_TC_BODY(mlock_err, tc)
#else
if (sysctlbyname("vm.minaddress", &vmin, &len, NULL, 0) != 0)
atf_tc_fail("failed to read vm.minaddress");
+ /*
+ * Any bad address must return ENOMEM (for lock & unlock)
+ */
+ errno = 0;
+ ATF_REQUIRE_ERRNO(ENOMEM, mlock(NULL, page) == -1);
if (vmin > 0)
null_errno = EINVAL; /* NULL is not inside user VM */
#endif
errno = 0;
- ATF_REQUIRE_ERRNO(null_errno, mlock(NULL, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, mlock((char *)0, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(null_errno, mlock((char *)0, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, mlock((char *)-1, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(EINVAL, mlock((char *)-1, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, munlock(NULL, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(null_errno, munlock(NULL, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, munlock((char *)0, page) == -1);
errno = 0;
- ATF_REQUIRE_ERRNO(null_errno, munlock((char *)0, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, munlock((char *)-1, page) == -1);
+
+ buf = malloc(page);
+ ATF_REQUIRE(buf != NULL);
+
+ /*
+ * unlocking memory that is not locked is an error...
+ */
errno = 0;
- ATF_REQUIRE_ERRNO(EINVAL, munlock((char *)-1, page) == -1);
+ ATF_REQUIRE_ERRNO(ENOMEM, munlock(buf, page) == -1);
+
+ /*
+ * These are permitted to fail (EINVAL) but do not on NetBSD
+ */
+ ATF_REQUIRE(mlock((void *)(((uintptr_t)buf) + page/3), page/5) == 0);
+ ATF_REQUIRE(munlock((void *)(((uintptr_t)buf) + page/3), page/5) == 0);
+
+ (void)free(buf);
/*
* Try to create a pointer to an unmapped page - first after current
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_mmap.c b/contrib/netbsd-tests/lib/libc/sys/t_mmap.c
index 5d821ec..738758c 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_mmap.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_mmap.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mmap.c,v 1.7 2012/06/14 17:47:58 bouyer Exp $ */
+/* $NetBSD: t_mmap.c,v 1.10 2017/01/10 22:36:29 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -55,10 +55,11 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mmap.c,v 1.7 2012/06/14 17:47:58 bouyer Exp $");
+__RCSID("$NetBSD: t_mmap.c,v 1.10 2017/01/10 22:36:29 christos Exp $");
#include <sys/param.h>
#include <sys/mman.h>
+#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/wait.h>
@@ -78,7 +79,6 @@ __RCSID("$NetBSD: t_mmap.c,v 1.7 2012/06/14 17:47:58 bouyer Exp $");
#ifdef __FreeBSD__
#include <sys/disklabel.h>
-#include <sys/stat.h>
#include <stdint.h>
#endif
@@ -381,9 +381,13 @@ ATF_TC_BODY(mmap_prot_3, tc)
* the access should generate SIGSEGV.
*/
fd = open(path, O_RDWR | O_CREAT, 0700);
-
if (fd < 0)
+#ifdef __FreeBSD__
+ atf_tc_skip("opening %s failed; skipping testcase: %s",
+ path, strerror(errno));
+#else
return;
+#endif
ATF_REQUIRE(write(fd, "XXX", 3) == 3);
ATF_REQUIRE(close(fd) == 0);
@@ -409,6 +413,9 @@ ATF_TC_BODY(mmap_prot_3, tc)
ATF_REQUIRE(WIFEXITED(sta) != 0);
ATF_REQUIRE(WEXITSTATUS(sta) == SIGSEGV);
ATF_REQUIRE(munmap(map, 3) == 0);
+#ifdef __FreeBSD__
+ (void)close(fd);
+#endif
}
ATF_TC_CLEANUP(mmap_prot_3, tc)
@@ -453,6 +460,9 @@ ATF_TC_BODY(mmap_truncate, tc)
ATF_REQUIRE(ftruncate(fd, page / 12) == 0);
ATF_REQUIRE(ftruncate(fd, page / 64) == 0);
+#ifdef __FreeBSD__
+ (void)munmap(map, page);
+#endif
ATF_REQUIRE(close(fd) == 0);
}
@@ -461,6 +471,76 @@ ATF_TC_CLEANUP(mmap_truncate, tc)
(void)unlink(path);
}
+ATF_TC_WITH_CLEANUP(mmap_truncate_signal);
+ATF_TC_HEAD(mmap_truncate_signal, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test mmap(2) ftruncate(2) causing signal");
+}
+
+ATF_TC_BODY(mmap_truncate_signal, tc)
+{
+ char *map;
+ long i;
+ int fd, sta;
+ pid_t pid;
+
+#ifdef __FreeBSD__
+ atf_tc_expect_fail("testcase fails with SIGSEGV on FreeBSD; bug # 211924");
+#endif
+
+ fd = open(path, O_RDWR | O_CREAT, 0700);
+
+ if (fd < 0)
+ return;
+
+ ATF_REQUIRE(write(fd, "foo\n", 5) == 5);
+
+ map = mmap(NULL, page, PROT_READ, MAP_FILE|MAP_PRIVATE, fd, 0);
+ ATF_REQUIRE(map != MAP_FAILED);
+
+ sta = 0;
+ for (i = 0; i < 5; i++)
+ sta += map[i];
+ ATF_REQUIRE(sta == 334);
+
+ ATF_REQUIRE(ftruncate(fd, 0) == 0);
+ pid = fork();
+ ATF_REQUIRE(pid >= 0);
+
+ if (pid == 0) {
+ ATF_REQUIRE(signal(SIGBUS, map_sighandler) != SIG_ERR);
+ ATF_REQUIRE(signal(SIGSEGV, map_sighandler) != SIG_ERR);
+ sta = 0;
+ for (i = 0; i < page; i++)
+ sta += map[i];
+ /* child never will get this far, but the compiler will
+ not know, so better use the values calculated to
+ prevent the access to be optimized out */
+ ATF_REQUIRE(i == 0);
+ ATF_REQUIRE(sta == 0);
+#ifdef __FreeBSD__
+ (void)munmap(map, page);
+ (void)close(fd);
+#endif
+ return;
+ }
+
+ (void)wait(&sta);
+
+ ATF_REQUIRE(WIFEXITED(sta) != 0);
+ if (WEXITSTATUS(sta) == SIGSEGV)
+ atf_tc_fail("child process got SIGSEGV instead of SIGBUS");
+ ATF_REQUIRE(WEXITSTATUS(sta) == SIGBUS);
+ ATF_REQUIRE(munmap(map, page) == 0);
+ ATF_REQUIRE(close(fd) == 0);
+}
+
+ATF_TC_CLEANUP(mmap_truncate_signal, tc)
+{
+ (void)unlink(path);
+}
+
ATF_TC(mmap_va0);
ATF_TC_HEAD(mmap_va0, tc)
{
@@ -518,6 +598,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, mmap_prot_2);
ATF_TP_ADD_TC(tp, mmap_prot_3);
ATF_TP_ADD_TC(tp, mmap_truncate);
+ ATF_TP_ADD_TC(tp, mmap_truncate_signal);
ATF_TP_ADD_TC(tp, mmap_va0);
return atf_no_error();
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_mprotect.c b/contrib/netbsd-tests/lib/libc/sys/t_mprotect.c
index ee345aa..5dc3eae 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_mprotect.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_mprotect.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mprotect.c,v 1.3 2011/07/20 22:53:44 jym Exp $ */
+/* $NetBSD: t_mprotect.c,v 1.4 2016/05/28 14:34:49 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_mprotect.c,v 1.3 2011/07/20 22:53:44 jym Exp $");
+__RCSID("$NetBSD: t_mprotect.c,v 1.4 2016/05/28 14:34:49 christos Exp $");
#include <sys/param.h>
#include <sys/mman.h>
@@ -78,10 +78,7 @@ paxinit(void)
rv = sysctlbyname("security.pax.mprotect.enabled",
&pax_enabled, &len, NULL, 0);
- if (rv != 0)
- return false;
-
- return paxset(1, 1);
+ return rv == 0;
}
static bool
@@ -194,6 +191,12 @@ ATF_TC_BODY(mprotect_exec, tc)
break;
}
+ if (!paxinit())
+ return;
+ if (pax_enabled == 1 && pax_global == 1)
+ atf_tc_skip("PaX MPROTECT restrictions enabled");
+
+
/*
* Map a page read/write and copy a trivial assembly function inside.
* We will then change the mapping rights:
@@ -262,7 +265,7 @@ ATF_TC_BODY(mprotect_pax, tc)
size_t i;
int rv;
- if (paxinit() != true)
+ if (!paxinit() || !paxset(1, 1))
return;
/*
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_posix_fallocate.c b/contrib/netbsd-tests/lib/libc/sys/t_posix_fallocate.c
new file mode 100644
index 0000000..b931ebd
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_posix_fallocate.c
@@ -0,0 +1,63 @@
+/* $NetBSD: t_posix_fallocate.c,v 1.1 2015/01/31 23:06:57 christos Exp $ */
+
+/*-
+ * Copyright 2015, Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Google nor the names of its contributors may
+ * be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_posix_fallocate.c,v 1.1 2015/01/31 23:06:57 christos Exp $");
+
+#include <atf-c.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+ATF_TC_WITHOUT_HEAD(ebadf);
+ATF_TC_BODY(ebadf, tc)
+{
+ int rc, saved;
+
+ errno = 1111;
+ rc = posix_fallocate(-1, 0, 4096);
+ saved = errno;
+ if (rc == -1 && saved != 1111)
+ atf_tc_fail("Should return error %s without setting errno.",
+ strerror(saved));
+ if (rc != EBADF)
+ atf_tc_fail("returned %s but expected %s.",
+ strerror(saved), strerror(EBADF));
+ if (saved != 1111)
+ atf_tc_fail("errno should be %d but got changed to %d.",
+ 1111, saved);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, ebadf);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c b/contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c
index 4b21860..31db878 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_setrlimit.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_setrlimit.c,v 1.4 2012/06/12 23:56:19 christos Exp $ */
+/* $NetBSD: t_setrlimit.c,v 1.5 2016/07/13 09:53:16 njoly Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_setrlimit.c,v 1.4 2012/06/12 23:56:19 christos Exp $");
+__RCSID("$NetBSD: t_setrlimit.c,v 1.5 2016/07/13 09:53:16 njoly Exp $");
#include <sys/resource.h>
#include <sys/mman.h>
@@ -50,6 +50,11 @@ __RCSID("$NetBSD: t_setrlimit.c,v 1.4 2012/06/12 23:56:19 christos Exp $");
#include <ucontext.h>
#include <unistd.h>
+#ifdef __FreeBSD__
+void set_vm_max_wired(int);
+void restore_vm_max_wired(void);
+#endif
+
static void sighandler(int);
static const char path[] = "setrlimit";
@@ -238,10 +243,18 @@ sighandler(int signo)
_exit(EXIT_SUCCESS);
}
+#ifdef __FreeBSD__
+ATF_TC_WITH_CLEANUP(setrlimit_memlock);
+#else
ATF_TC(setrlimit_memlock);
+#endif
ATF_TC_HEAD(setrlimit_memlock, tc)
{
atf_tc_set_md_var(tc, "descr", "Test setrlimit(2), RLIMIT_MEMLOCK");
+#ifdef __FreeBSD__
+ atf_tc_set_md_var(tc, "require.config", "allow_sysctl_side_effects");
+ atf_tc_set_md_var(tc, "require.user", "root");
+#endif
}
ATF_TC_BODY(setrlimit_memlock, tc)
@@ -252,6 +265,11 @@ ATF_TC_BODY(setrlimit_memlock, tc)
pid_t pid;
int sta;
+#ifdef __FreeBSD__
+ /* Set max_wired really really high to avoid EAGAIN */
+ set_vm_max_wired(INT_MAX);
+#endif
+
page = sysconf(_SC_PAGESIZE);
ATF_REQUIRE(page >= 0);
@@ -295,6 +313,14 @@ ATF_TC_BODY(setrlimit_memlock, tc)
atf_tc_fail("RLIMIT_MEMLOCK not enforced");
}
+#ifdef __FreeBSD__
+ATF_TC_CLEANUP(setrlimit_memlock, tc)
+{
+
+ restore_vm_max_wired();
+}
+#endif
+
ATF_TC(setrlimit_nofile_1);
ATF_TC_HEAD(setrlimit_nofile_1, tc)
{
@@ -515,6 +541,25 @@ ATF_TC_BODY(setrlimit_perm, tc)
}
}
+ATF_TC(setrlimit_stack);
+ATF_TC_HEAD(setrlimit_stack, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test setrlimit(2), RLIMIT_STACK");
+ atf_tc_set_md_var(tc, "require.user", "unprivileged");
+}
+
+ATF_TC_BODY(setrlimit_stack, tc)
+{
+ struct rlimit res;
+
+ /* Ensure soft limit is not bigger than hard limit */
+ res.rlim_cur = res.rlim_max = 4192256;
+ ATF_REQUIRE(setrlimit(RLIMIT_STACK, &res) == 0);
+ ATF_REQUIRE(getrlimit(RLIMIT_STACK, &res) == 0);
+ ATF_CHECK(res.rlim_cur <= res.rlim_max);
+
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -530,6 +575,7 @@ ATF_TP_ADD_TCS(tp)
#ifdef __NetBSD__
ATF_TP_ADD_TC(tp, setrlimit_nthr);
#endif
+ ATF_TP_ADD_TC(tp, setrlimit_stack);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c b/contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c
index 6686f02..e911d42 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_sigqueue.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_sigqueue.c,v 1.4 2011/07/07 16:31:11 jruoho Exp $ */
+/* $NetBSD: t_sigqueue.c,v 1.6 2016/08/04 06:43:43 christos Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -30,8 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_sigqueue.c,v 1.4 2011/07/07 16:31:11 jruoho Exp $");
-
+__RCSID("$NetBSD: t_sigqueue.c,v 1.6 2016/08/04 06:43:43 christos Exp $");
#include <atf-c.h>
#include <errno.h>
@@ -40,6 +39,11 @@ __RCSID("$NetBSD: t_sigqueue.c,v 1.4 2011/07/07 16:31:11 jruoho Exp $");
#include <sched.h>
#include <unistd.h>
+#ifdef __FreeBSD__
+#include <err.h>
+#include <stdio.h>
+#endif
+
static void handler(int, siginfo_t *, void *);
#define VALUE (int)0xc001dad1
@@ -77,7 +81,7 @@ ATF_TC_BODY(sigqueue_basic, tc)
sv.sival_int = VALUE;
#ifdef __FreeBSD__
- /*
+ /*
* From kern_sig.c:
* Specification says sigqueue can only send signal to single process.
*/
@@ -99,17 +103,158 @@ ATF_TC_HEAD(sigqueue_err, tc)
ATF_TC_BODY(sigqueue_err, tc)
{
- union sigval sv;
+ static union sigval sv;
errno = 0;
ATF_REQUIRE_ERRNO(EINVAL, sigqueue(getpid(), -1, sv) == -1);
}
+static int signals[] = {
+ SIGINT, SIGRTMIN + 1, SIGINT, SIGRTMIN + 0, SIGRTMIN + 2,
+ SIGQUIT, SIGRTMIN + 1
+};
+#ifdef __arraycount
+#define CNT __arraycount(signals)
+#else
+#define CNT (sizeof(signals) / sizeof(signals[0]))
+#endif
+
+static sig_atomic_t count = 0;
+static int delivered[CNT];
+
+static void
+myhandler(int signo, siginfo_t *info, void *context)
+{
+ delivered[count++] = signo;
+#ifdef __FreeBSD__
+ printf("Signal #%zu: signo: %d\n", (size_t)count, signo);
+#endif
+}
+
+static int
+asc(const void *a, const void *b)
+{
+ const int *ia = a, *ib = b;
+ return *ib - *ia;
+}
+
+/*
+ * given a array of signals to be delivered in tosend of size len
+ * place in ordered the signals to be delivered in delivery order
+ * and return the number of signals that should be delivered
+ */
+static size_t
+sigorder(int *ordered, const int *tosend, size_t len)
+{
+ memcpy(ordered, tosend, len * sizeof(*tosend));
+ qsort(ordered, len, sizeof(*ordered), asc);
+ if (len == 1)
+ return len;
+
+#ifdef __FreeBSD__
+ /*
+ * Don't dedupe signal numbers (bug 212173)
+ *
+ * Per kib's comment..
+ *
+ * "
+ * OTOH, FreeBSD behaviour is to treat all signals as realtime while
+ * there is no mem shortage and siginfo can be allocated. In
+ * particular, signals < SIGRTMIN are not collapsed when queued more
+ * than once.
+ * "
+ */
+
+ return len;
+#else
+
+ size_t i, j;
+ for (i = 0, j = 0; i < len - 1; i++) {
+ if (ordered[i] >= SIGRTMIN)
+ continue;
+ if (j == 0)
+ j = i + 1;
+ while (ordered[i] == ordered[j] && j < len)
+ j++;
+ if (j == len)
+ break;
+ ordered[i + 1] = ordered[j];
+ }
+ return i + 1;
+#endif
+}
+
+ATF_TC(sigqueue_rt);
+ATF_TC_HEAD(sigqueue_rt, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test queuing of real-time signals");
+}
+
+ATF_TC_BODY(sigqueue_rt, tc)
+{
+ pid_t pid;
+ union sigval val;
+ struct sigaction act;
+ int ordered[CNT];
+ struct sigaction oact[CNT];
+ size_t ndelivered;
+
+ ndelivered = sigorder(ordered, signals, CNT);
+
+ act.sa_flags = SA_SIGINFO;
+ act.sa_sigaction = myhandler;
+ sigemptyset(&act.sa_mask);
+ for (size_t i = 0; i < ndelivered; i++)
+ ATF_REQUIRE(sigaction(ordered[i], &act, &oact[i]) != -1);
+
+ val.sival_int = 0;
+ pid = getpid();
+
+ sigset_t mask, orig;
+ sigemptyset(&mask);
+ for (size_t i = 0; i < CNT; i++)
+#ifdef __FreeBSD__
+ if (sigaddset(&mask, signals[i]) == -1)
+ warn("sigaddset");
+#else
+ sigaddset(&mask, signals[i]);
+#endif
+
+ ATF_REQUIRE(sigprocmask(SIG_BLOCK, &mask, &orig) != -1);
+
+ for (size_t i = 0; i < CNT; i++)
+ ATF_REQUIRE(sigqueue(pid, signals[i], val) != -1);
+
+ ATF_REQUIRE(sigprocmask(SIG_UNBLOCK, &mask, &orig) != -1);
+ sleep(1);
+#ifdef __FreeBSD__
+ ATF_CHECK_MSG((size_t)count == ndelivered,
+ "count %zu != ndelivered %zu", (size_t)count, ndelivered);
+#else
+ ATF_REQUIRE_MSG((size_t)count == ndelivered,
+ "count %zu != ndelivered %zu", (size_t)count, ndelivered);
+#endif
+ for (size_t i = 0; i < ndelivered; i++)
+ ATF_REQUIRE_MSG(ordered[i] == delivered[i],
+ "%zu: ordered %d != delivered %d",
+ i, ordered[i], delivered[i]);
+
+#ifdef __FreeBSD__
+ if (count > ndelivered)
+ for (size_t i = ndelivered; i < count; i++)
+ printf("Undelivered signal #%zu: %d\n", i, ordered[i]);
+#endif
+
+ for (size_t i = 0; i < ndelivered; i++)
+ ATF_REQUIRE(sigaction(signals[i], &oact[i], NULL) != -1);
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, sigqueue_basic);
ATF_TP_ADD_TC(tp, sigqueue_err);
+ ATF_TP_ADD_TC(tp, sigqueue_rt);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_timer_create.c b/contrib/netbsd-tests/lib/libc/sys/t_timer_create.c
index cc85307..364daaa 100644
--- a/contrib/netbsd-tests/lib/libc/sys/t_timer_create.c
+++ b/contrib/netbsd-tests/lib/libc/sys/t_timer_create.c
@@ -116,6 +116,61 @@ timer_signal_create(clockid_t cid, bool expire)
ATF_REQUIRE(timer_delete(t) == 0);
}
+#ifdef __FreeBSD__
+static void
+timer_callback(union sigval value)
+{
+ timer_t *tp;
+
+ tp = value.sival_ptr;
+
+ if (*tp == t)
+ fail = false;
+}
+
+static void
+timer_thread_create(clockid_t cid, bool expire)
+{
+ struct itimerspec tim;
+ struct sigevent evt;
+
+ t = 0;
+ fail = true;
+
+ (void)memset(&evt, 0, sizeof(struct sigevent));
+ (void)memset(&tim, 0, sizeof(struct itimerspec));
+
+ /*
+ * Create the timer (SIGEV_THREAD).
+ */
+ evt.sigev_notify_function = timer_callback;
+ evt.sigev_value.sival_ptr = &t;
+ evt.sigev_notify = SIGEV_THREAD;
+
+ ATF_REQUIRE(timer_create(cid, &evt, &t) == 0);
+
+ /*
+ * Start the timer.
+ */
+ tim.it_value.tv_sec = expire ? 5 : 1;
+ tim.it_value.tv_nsec = 0;
+
+ ATF_REQUIRE(timer_settime(t, 0, &tim, NULL) == 0);
+
+ (void)sleep(2);
+
+ if (expire) {
+ if (!fail)
+ atf_tc_fail("timer fired too soon");
+ } else {
+ if (fail)
+ atf_tc_fail("timer failed to fire");
+ }
+
+ ATF_REQUIRE(timer_delete(t) == 0);
+}
+#endif
+
ATF_TC(timer_create_err);
ATF_TC_HEAD(timer_create_err, tc)
{
@@ -198,6 +253,64 @@ ATF_TC_BODY(timer_create_mono_expire, tc)
timer_signal_create(CLOCK_MONOTONIC, true);
}
+ATF_TC(timer_thread_create_real);
+ATF_TC_HEAD(timer_thread_create_real, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timer_create(2) with CLOCK_REALTIME and sigevent(3), "
+ "SIGEV_THREAD");
+}
+
+#ifdef __FreeBSD__
+ATF_TC_BODY(timer_thread_create_real, tc)
+{
+ timer_thread_create(CLOCK_REALTIME, false);
+}
+
+ATF_TC(timer_thread_create_mono);
+ATF_TC_HEAD(timer_thread_create_mono, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timer_create(2) with CLOCK_MONOTONIC and sigevent(3), "
+ "SIGEV_THREAD");
+}
+
+ATF_TC_BODY(timer_thread_create_mono, tc)
+{
+ timer_thread_create(CLOCK_MONOTONIC, false);
+}
+
+ATF_TC(timer_thread_create_real_expire);
+ATF_TC_HEAD(timer_thread_create_real_expire, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timer_create(2) with CLOCK_REALTIME and sigevent(3), "
+ "SIGEV_THREAD, with expiration");
+}
+
+ATF_TC_BODY(timer_thread_create_real_expire, tc)
+{
+ timer_thread_create(CLOCK_REALTIME, true);
+}
+
+ATF_TC(timer_thread_create_mono_expire);
+ATF_TC_HEAD(timer_thread_create_mono_expire, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timer_create(2) with CLOCK_MONOTONIC and sigevent(3), "
+ "SIGEV_THREAD, with expiration");
+}
+
+ATF_TC_BODY(timer_thread_create_mono_expire, tc)
+{
+ timer_thread_create(CLOCK_MONOTONIC, true);
+}
+#endif
+
ATF_TP_ADD_TCS(tp)
{
@@ -206,6 +319,12 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, timer_create_mono);
ATF_TP_ADD_TC(tp, timer_create_real_expire);
ATF_TP_ADD_TC(tp, timer_create_mono_expire);
+#ifdef __FreeBSD__
+ ATF_TP_ADD_TC(tp, timer_thread_create_real);
+ ATF_TP_ADD_TC(tp, timer_thread_create_mono);
+ ATF_TP_ADD_TC(tp, timer_thread_create_real_expire);
+ ATF_TP_ADD_TC(tp, timer_thread_create_mono_expire);
+#endif
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_wait.c b/contrib/netbsd-tests/lib/libc/sys/t_wait.c
new file mode 100644
index 0000000..8653265
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_wait.c
@@ -0,0 +1,323 @@
+/* $NetBSD: t_wait.c,v 1.7 2016/11/06 15:04:14 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_wait.c,v 1.7 2016/11/06 15:04:14 kamil Exp $");
+
+#include <sys/wait.h>
+#include <sys/resource.h>
+
+#include <stdio.h>
+#include <errno.h>
+#include <limits.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+#ifdef __FreeBSD__
+#define wrusage __wrusage
+#endif
+
+ATF_TC(wait6_invalid);
+ATF_TC_HEAD(wait6_invalid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) returns EINVAL with 0 options");
+}
+
+ATF_TC_BODY(wait6_invalid, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ ATF_REQUIRE(wait6(P_ALL, 0, &st, 0, &wru, &si) == -1
+ && errno == EINVAL);
+}
+
+ATF_TC(wait6_exited);
+ATF_TC_HEAD(wait6_exited, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled exiting process and code");
+}
+
+ATF_TC_BODY(wait6_exited, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+
+ switch (pid = fork()) {
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ case 0:
+ exit(0x5a5a5a5a);
+ /*NOTREACHED*/
+ default:
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(WIFEXITED(st) && WEXITSTATUS(st) == 0x5a);
+ ATF_REQUIRE(si.si_status = 0x5a5a5a5a);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_EXITED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+ break;
+ }
+}
+
+ATF_TC(wait6_terminated);
+ATF_TC_HEAD(wait6_terminated, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled terminated process and code");
+}
+
+ATF_TC_BODY(wait6_terminated, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+
+ switch (pid = fork()) {
+ case 0:
+ sleep(100);
+ /*FALLTHROUGH*/
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ default:
+ ATF_REQUIRE(kill(pid, SIGTERM) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(WIFSIGNALED(st) && WTERMSIG(st) == SIGTERM);
+ ATF_REQUIRE(si.si_status == SIGTERM);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_KILLED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+ break;
+ }
+}
+
+ATF_TC(wait6_coredumped);
+ATF_TC_HEAD(wait6_coredumped, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled coredumped process and code");
+}
+
+ATF_TC_BODY(wait6_coredumped, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+ static const struct rlimit rl = { RLIM_INFINITY, RLIM_INFINITY };
+
+ switch (pid = fork()) {
+ case 0:
+ ATF_REQUIRE(setrlimit(RLIMIT_CORE, &rl) == 0);
+ *(char *)8 = 0;
+ /*FALLTHROUGH*/
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ default:
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(WIFSIGNALED(st) && WTERMSIG(st) == SIGSEGV
+ && WCOREDUMP(st));
+ ATF_REQUIRE(si.si_status == SIGSEGV);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_DUMPED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+ break;
+ }
+}
+
+ATF_TC(wait6_stop_and_go);
+ATF_TC_HEAD(wait6_stop_and_go, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled stopped/continued process and code");
+}
+
+ATF_TC_BODY(wait6_stop_and_go, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+ static const struct rlimit rl = { 0, 0 };
+
+ ATF_REQUIRE(setrlimit(RLIMIT_CORE, &rl) == 0);
+ switch (pid = fork()) {
+ case 0:
+ sleep(100);
+ /*FALLTHROUGH*/
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ default:
+ ATF_REQUIRE(kill(pid, SIGSTOP) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WSTOPPED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(!WIFSIGNALED(st));
+ ATF_REQUIRE(WIFSTOPPED(st) && WSTOPSIG(st) == SIGSTOP);
+ ATF_REQUIRE(!WIFCONTINUED(st));
+ ATF_REQUIRE(si.si_status == SIGSTOP);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_STOPPED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+
+ ATF_REQUIRE(kill(pid, SIGCONT) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WCONTINUED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(!WIFSIGNALED(st));
+ ATF_REQUIRE(WIFCONTINUED(st));
+ ATF_REQUIRE(!WIFSTOPPED(st));
+ ATF_REQUIRE(si.si_status == SIGCONT);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_CONTINUED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+
+ ATF_REQUIRE(kill(pid, SIGQUIT) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(WIFSIGNALED(st) && WTERMSIG(st) == SIGQUIT);
+ ATF_REQUIRE(!WIFSTOPPED(st));
+ ATF_REQUIRE(!WIFCONTINUED(st));
+ ATF_REQUIRE(si.si_status == SIGQUIT);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_KILLED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+ break;
+ }
+}
+
+ATF_TC(wait6_stopgo_loop);
+ATF_TC_HEAD(wait6_stopgo_loop, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) handled stopped/continued process loop");
+}
+
+ATF_TC_BODY(wait6_stopgo_loop, tc)
+{
+ siginfo_t si;
+ struct wrusage wru;
+ int st;
+ pid_t pid;
+ static const struct rlimit rl = { 0, 0 };
+ size_t N = 100;
+
+ ATF_REQUIRE(setrlimit(RLIMIT_CORE, &rl) == 0);
+ switch (pid = fork()) {
+ case 0:
+ sleep(100);
+ /*FALLTHROUGH*/
+ case -1:
+ ATF_REQUIRE(pid > 0);
+ }
+
+ printf("Before loop of SIGSTOP/SIGCONT sequence %zu times\n", N);
+ while (N --> 0) {
+ ATF_REQUIRE(kill(pid, SIGSTOP) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WSTOPPED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(!WIFSIGNALED(st));
+ ATF_REQUIRE(WIFSTOPPED(st) && WSTOPSIG(st) == SIGSTOP);
+ ATF_REQUIRE(!WIFCONTINUED(st));
+ ATF_REQUIRE(si.si_status == SIGSTOP);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_STOPPED);
+
+ ATF_REQUIRE(kill(pid, SIGCONT) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WCONTINUED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(!WIFSIGNALED(st));
+ ATF_REQUIRE(WIFCONTINUED(st));
+ ATF_REQUIRE(!WIFSTOPPED(st));
+ ATF_REQUIRE(si.si_status == SIGCONT);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_CONTINUED);
+ }
+ ATF_REQUIRE(kill(pid, SIGQUIT) == 0);
+ ATF_REQUIRE(wait6(P_PID, pid, &st, WEXITED, &wru, &si) == pid);
+ ATF_REQUIRE(!WIFEXITED(st));
+ ATF_REQUIRE(WIFSIGNALED(st) && WTERMSIG(st) == SIGQUIT);
+ ATF_REQUIRE(!WIFSTOPPED(st));
+ ATF_REQUIRE(!WIFCONTINUED(st));
+ ATF_REQUIRE(si.si_status == SIGQUIT);
+ ATF_REQUIRE(si.si_pid == pid);
+ ATF_REQUIRE(si.si_uid == getuid());
+ ATF_REQUIRE(si.si_code == CLD_KILLED);
+#ifdef __NetBSD__
+ printf("user: %ju system: %ju\n", (uintmax_t)si.si_utime,
+ (uintmax_t)si.si_utime);
+#endif
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, wait6_invalid);
+ ATF_TP_ADD_TC(tp, wait6_exited);
+ ATF_TP_ADD_TC(tp, wait6_terminated);
+ ATF_TP_ADD_TC(tp, wait6_coredumped);
+ ATF_TP_ADD_TC(tp, wait6_stop_and_go);
+ ATF_TP_ADD_TC(tp, wait6_stopgo_loop);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc.c b/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc.c
new file mode 100644
index 0000000..e5ddcbd
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc.c
@@ -0,0 +1,345 @@
+/* $NetBSD: t_wait_noproc.c,v 1.5 2016/11/09 17:50:19 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_wait_noproc.c,v 1.5 2016/11/09 17:50:19 kamil Exp $");
+
+#ifdef __FreeBSD__
+#include <sys/param.h> /* For NBBY -- it's in sys/types.h on NetBSD */
+#endif
+#include <sys/wait.h>
+#include <sys/resource.h>
+
+#include <errno.h>
+#include <stdio.h>
+
+#include <atf-c.h>
+
+#ifndef TWAIT_OPTION
+#define TWAIT_OPTION 0
+#endif
+
+#if TWAIT_OPTION == 0
+ATF_TC(wait);
+ATF_TC_HEAD(wait, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait(2) returns ECHILD for no child");
+}
+
+ATF_TC_BODY(wait, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD, wait(NULL) == -1);
+}
+#endif
+
+ATF_TC(waitpid);
+ATF_TC_HEAD(waitpid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that waitpid(2) returns ECHILD for WAIT_ANY and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(waitpid, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD, waitpid(WAIT_ANY, NULL, TWAIT_OPTION) == -1);
+}
+
+ATF_TC(waitid);
+ATF_TC_HEAD(waitid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that waitid(2) returns ECHILD for P_ALL and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(waitid, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD,
+ waitid(P_ALL, 0, NULL,
+ WTRAPPED | WEXITED | TWAIT_OPTION) == -1);
+}
+
+ATF_TC(wait3);
+ATF_TC_HEAD(wait3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait3(2) returns ECHILD for no child");
+}
+
+ATF_TC_BODY(wait3, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD, wait3(NULL, TWAIT_OPTION, NULL) == -1);
+}
+
+ATF_TC(wait4);
+ATF_TC_HEAD(wait4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait4(2) returns ECHILD for WAIT_ANY and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(wait4, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait4(WAIT_ANY, NULL, TWAIT_OPTION, NULL) == -1);
+}
+
+ATF_TC(wait6);
+ATF_TC_HEAD(wait6, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) returns ECHILD for P_ALL and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(wait6, tc)
+{
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait6(P_ALL, 0, NULL,
+ WTRAPPED | WEXITED | TWAIT_OPTION, NULL, NULL) == -1);
+}
+
+/*
+ * Generator of valid combinations of options
+ * Usage: i = 0; while ((o = get_options_wait6(i++)) != -1) {}
+ */
+static int
+get_options6(size_t pos)
+{
+ int rv = 0;
+ size_t n;
+
+ /*
+ * waitid(2) must specify at least one of WEXITED, WUNTRACED,
+ * WSTOPPED, WTRAPPED or WCONTINUED. Single option WNOWAIT
+ * isn't valid.
+ */
+
+ const int matrix[] = {
+ WNOWAIT, /* First in order to blacklist it easily */
+ WEXITED,
+ WUNTRACED,
+ WSTOPPED, /* SUS compatibility, equal to WUNTRACED */
+ WTRAPPED,
+ WCONTINUED
+ };
+
+ const size_t M = (1 << __arraycount(matrix)) - 1;
+
+ /* Skip empty and sole WNOWAIT option */
+ pos+=2;
+
+ if (pos > M)
+ return -1;
+
+ for (n = 0; n < __arraycount(matrix); n++) {
+ if (pos & __BIT(n))
+ rv |= matrix[n];
+ }
+
+ return rv;
+}
+
+/*
+ * Generator of valid combinations of options
+ * Usage: i = 0; while ((o = get_options_wait4(i++)) != -1) {}
+ */
+static int
+get_options4(size_t pos)
+{
+ int rv = 0;
+ size_t n;
+
+ const int special[] = {
+ 0,
+#ifdef __NetBSD__
+ WALLSIG,
+ WALTSIG,
+ __WALL, /* Linux compatibility, equal to WALLSIG */
+ __WCLONE /* Linux compatibility, equal to WALTSIG */
+#endif
+ };
+
+ const int matrix[] = {
+ WNOWAIT,
+ WEXITED,
+ WUNTRACED,
+ WSTOPPED, /* SUS compatibility, equal to WUNTRACED */
+ WTRAPPED,
+ WCONTINUED
+ };
+
+ const size_t M = (1 << __arraycount(special)) - 1;
+
+ if (pos < __arraycount(special))
+ return special[pos];
+
+ pos -= __arraycount(special);
+
+ ++pos; /* Don't start with empty mask */
+
+ if (pos > M)
+ return -1;
+
+ for (n = 0; n < __arraycount(special); n++) {
+ if (pos & __BIT(n))
+ rv |= matrix[n];
+ }
+
+ return rv;
+}
+
+ATF_TC(waitpid_options);
+ATF_TC_HEAD(waitpid_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that waitpid(2) returns ECHILD for WAIT_ANY and valid "
+ "combination of options with%s WNOHANG",
+ TWAIT_OPTION == 0 ? "out" : "");
+}
+
+ATF_TC_BODY(waitpid_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options4(i++)) != -1) {
+ printf("Testing waitpid(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ waitpid(WAIT_ANY, NULL, o | TWAIT_OPTION) == -1);
+ }
+}
+
+ATF_TC(waitid_options);
+ATF_TC_HEAD(waitid_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that waitid(2) returns ECHILD for P_ALL and valid "
+ "combination of options with%s WNOHANG",
+ TWAIT_OPTION == 0 ? "out" : "");
+}
+
+ATF_TC_BODY(waitid_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options6(i++)) != -1) {
+ printf("Testing waitid(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ waitid(P_ALL, 0, NULL, o | TWAIT_OPTION) == -1);
+ }
+}
+
+ATF_TC(wait3_options);
+ATF_TC_HEAD(wait3_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait3(2) returns ECHILD for no child");
+}
+
+ATF_TC_BODY(wait3_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options4(i++)) != -1) {
+ printf("Testing wait3(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait3(NULL, o | TWAIT_OPTION, NULL) == -1);
+ }
+}
+
+ATF_TC(wait4_options);
+ATF_TC_HEAD(wait4_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait4(2) returns ECHILD for WAIT_ANY and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(wait4_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options4(i++)) != -1) {
+ printf("Testing wait4(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait4(WAIT_ANY, NULL, o | TWAIT_OPTION, NULL) == -1);
+ }
+}
+
+ATF_TC(wait6_options);
+ATF_TC_HEAD(wait6_options, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that wait6(2) returns ECHILD for P_ALL and option %s",
+ ___STRING(TWAIT_OPTION));
+}
+
+ATF_TC_BODY(wait6_options, tc)
+{
+ size_t i = 0;
+ int o;
+
+ while((o = get_options6(i++)) != -1) {
+ printf("Testing wait6(2) with options %x\n", o);
+
+ ATF_REQUIRE_ERRNO(ECHILD,
+ wait6(P_ALL, 0, NULL, o | TWAIT_OPTION, NULL, NULL) == -1);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+#if TWAIT_OPTION == 0
+ ATF_TP_ADD_TC(tp, wait);
+#endif
+ ATF_TP_ADD_TC(tp, waitpid);
+ ATF_TP_ADD_TC(tp, waitid);
+ ATF_TP_ADD_TC(tp, wait3);
+ ATF_TP_ADD_TC(tp, wait4);
+ ATF_TP_ADD_TC(tp, wait6);
+
+ ATF_TP_ADD_TC(tp, waitpid_options);
+ ATF_TP_ADD_TC(tp, waitid_options);
+ ATF_TP_ADD_TC(tp, wait3_options);
+ ATF_TP_ADD_TC(tp, wait4_options);
+ ATF_TP_ADD_TC(tp, wait6_options);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc_wnohang.c b/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc_wnohang.c
new file mode 100644
index 0000000..45a9998
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc_wnohang.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_wait_noproc_wnohang.c,v 1.1 2016/11/06 15:03:30 kamil Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TWAIT_OPTION WNOHANG
+#include "t_wait_noproc.c"
diff --git a/contrib/netbsd-tests/lib/libc/t_cdb.c b/contrib/netbsd-tests/lib/libc/t_cdb.c
index 5e88e65..97da4a3 100644
--- a/contrib/netbsd-tests/lib/libc/t_cdb.c
+++ b/contrib/netbsd-tests/lib/libc/t_cdb.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_cdb.c,v 1.1 2012/09/27 00:38:57 joerg Exp $ */
+/* $NetBSD: t_cdb.c,v 1.2 2017/01/10 22:24:29 christos Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -32,9 +32,12 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_cdb.c,v 1.1 2012/09/27 00:38:57 joerg Exp $");
+__RCSID("$NetBSD: t_cdb.c,v 1.2 2017/01/10 22:24:29 christos Exp $");
#include <atf-c.h>
+
+#include <sys/stat.h>
+
#include <assert.h>
#include <cdbr.h>
#include <cdbw.h>
diff --git a/contrib/netbsd-tests/lib/libc/time/t_strptime.c b/contrib/netbsd-tests/lib/libc/time/t_strptime.c
index 99871ff..863df36e 100644
--- a/contrib/netbsd-tests/lib/libc/time/t_strptime.c
+++ b/contrib/netbsd-tests/lib/libc/time/t_strptime.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_strptime.c,v 1.1 2011/01/13 00:14:10 pgoyette Exp $ */
+/* $NetBSD: t_strptime.c,v 1.12 2015/10/31 02:25:11 christos Exp $ */
/*-
* Copyright (c) 1998, 2008 The NetBSD Foundation, Inc.
@@ -32,9 +32,11 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_strptime.c,v 1.1 2011/01/13 00:14:10 pgoyette Exp $");
+__RCSID("$NetBSD: t_strptime.c,v 1.12 2015/10/31 02:25:11 christos Exp $");
#include <time.h>
+#include <stdlib.h>
+#include <stdio.h>
#include <atf-c.h>
@@ -97,6 +99,124 @@ h_fail(const char *buf, const char *fmt)
#endif
}
+static struct {
+ const char *name;
+ long offs;
+} zt[] = {
+ { "Z", 0 },
+ { "UT", 0 },
+ { "UTC", 0 },
+ { "GMT", 0 },
+ { "EST", -18000 },
+ { "EDT", -14400 },
+ { "CST", -21600 },
+ { "CDT", -18000 },
+ { "MST", -25200 },
+ { "MDT", -21600 },
+ { "PST", -28800 },
+ { "PDT", -25200 },
+
+ { "VST", -1 },
+ { "VDT", -1 },
+
+ { "+03", 10800 },
+ { "-03", -10800 },
+ { "+0403", 14580 },
+ { "-0403", -14580 },
+ { "+04:03", 14580 },
+ { "-04:03", -14580 },
+ { "+14:00", 50400 },
+ { "-14:00", -50400 },
+ { "+23:59", 86340 },
+ { "-23:59", -86340 },
+
+ { "1", -1 },
+ { "03", -1 },
+ { "0304", -1 },
+ { "+1", -1 },
+ { "-203", -1 },
+ { "+12345", -1 },
+ { "+12:345", -1 },
+ { "+123:45", -1 },
+ { "+2400", -1 },
+ { "-2400", -1 },
+ { "+1060", -1 },
+ { "-1060", -1 },
+
+ { "A", -3600 },
+ { "B", -7200 },
+ { "C", -10800 },
+ { "D", -14400 },
+ { "E", -18000 },
+ { "F", -21600 },
+ { "G", -25200 },
+ { "H", -28800 },
+ { "I", -32400 },
+ { "L", -39600 },
+ { "M", -43200 },
+ { "N", 3600 },
+ { "O", 7200 },
+ { "P", 10800 },
+ { "Q", 14400 },
+ { "R", 18000 },
+ { "T", 25200 },
+ { "U", 28800 },
+ { "V", 32400 },
+ { "W", 36000 },
+ { "X", 39600 },
+ { "Y", 43200 },
+
+ { "J", -2 },
+
+ { "America/Los_Angeles", -28800 },
+ { "America/New_York", -18000 },
+ { "EST4EDT", -14400 },
+
+ { "Bogus", -1 },
+};
+
+static void
+ztest1(const char *name, const char *fmt, long value)
+{
+ struct tm tm;
+ char *rv;
+
+ memset(&tm, 0, sizeof(tm));
+ if ((rv = strptime(name, fmt, &tm)) == NULL)
+ tm.tm_gmtoff = -1;
+ else if (rv == name && fmt[1] == 'Z')
+ value = 0;
+
+ switch (value) {
+ case -2:
+ value = -timezone;
+ break;
+ case -1:
+ if (fmt[1] == 'Z')
+ value = 0;
+ break;
+ default:
+ break;
+ }
+
+ ATF_REQUIRE_MSG(tm.tm_gmtoff == value,
+ "strptime(\"%s\", \"%s\", &tm): "
+ "expected: tm.tm_gmtoff=%ld, got: tm.tm_gmtoff=%ld",
+ name, fmt, value, tm.tm_gmtoff);
+ printf("%s %s %ld\n", name, fmt, tm.tm_gmtoff);
+}
+
+static void
+ztest(const char *fmt)
+{
+ setenv("TZ", "US/Eastern", 1);
+ ztest1("GMT", fmt, 0);
+ ztest1("UTC", fmt, 0);
+ ztest1("US/Eastern", fmt, -18000);
+ for (size_t i = 0; i < __arraycount(zt); i++)
+ ztest1(zt[i].name, fmt, zt[i].offs);
+}
+
ATF_TC(common);
ATF_TC_HEAD(common, tc)
@@ -113,33 +233,17 @@ ATF_TC_BODY(common, tc)
#endif
h_pass("Tue Jan 20 23:27:46 1998", "%a %b %d %T %Y",
- 24, 46, 27, 23, 20, 0, 98, 2, -1);
+ 24, 46, 27, 23, 20, 0, 98, 2, 19);
h_pass("Tue Jan 20 23:27:46 1998", "%a %b %d %H:%M:%S %Y",
- 24, 46, 27, 23, 20, 0, 98, 2, -1);
+ 24, 46, 27, 23, 20, 0, 98, 2, 19);
h_pass("Tue Jan 20 23:27:46 1998", "%c",
- 24, 46, 27, 23, 20, 0, 98, 2, -1);
+ 24, 46, 27, 23, 20, 0, 98, 2, 19);
h_pass("Fri Mar 4 20:05:34 2005", "%a %b %e %H:%M:%S %Y",
- 24, 34, 5, 20, 4, 2, 105, 5, -1);
+ 24, 34, 5, 20, 4, 2, 105, 5, 62);
h_pass("5\t3 4 8pm:05:34 2005", "%w%n%m%t%d%n%k%p:%M:%S %Y",
- 21, 34, 5, 20, 4, 2, 105, 5, -1);
+ 21, 34, 5, 20, 4, 2, 105, 5, 62);
h_pass("Fri Mar 4 20:05:34 2005", "%c",
- 24, 34, 5, 20, 4, 2, 105, 5, -1);
-
- h_pass("x20y", "x%Cy", 4, -1, -1, -1, -1, -1, 100, -1, -1);
- h_pass("x84y", "x%yy", 4, -1, -1, -1, -1, -1, 84, -1, -1);
- h_pass("x2084y", "x%C%yy", 6, -1, -1, -1, -1, -1, 184, -1, -1);
- h_pass("x8420y", "x%y%Cy", 6, -1, -1, -1, -1, -1, 184, -1, -1);
- h_pass("%20845", "%%%C%y5", 6, -1, -1, -1, -1, -1, 184, -1, -1);
- h_fail("%", "%E%");
-
- h_pass("1980", "%Y", 4, -1, -1, -1, -1, -1, 80, -1, -1);
- h_pass("1980", "%EY", 4, -1, -1, -1, -1, -1, 80, -1, -1);
-
- h_pass("0", "%S", 1, 0, -1, -1, -1, -1, -1, -1, -1);
- h_pass("59", "%S", 2, 59, -1, -1, -1, -1, -1, -1, -1);
- h_pass("60", "%S", 2, 60, -1, -1, -1, -1, -1, -1, -1);
- h_pass("61", "%S", 2, 61, -1, -1, -1, -1, -1, -1, -1);
- h_fail("62", "%S");
+ 24, 34, 5, 20, 4, 2, 105, 5, 62);
}
ATF_TC(day);
@@ -147,7 +251,8 @@ ATF_TC(day);
ATF_TC_HEAD(day, tc)
{
- atf_tc_set_md_var(tc, "descr", "Checks strptime(3): day names");
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) day name conversions [aA]");
}
ATF_TC_BODY(day, tc)
@@ -202,12 +307,35 @@ ATF_TC_BODY(day, tc)
#endif
}
+ATF_TC(hour);
+
+ATF_TC_HEAD(hour, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) hour conversions [IH]");
+}
+
+ATF_TC_BODY(hour, tc)
+{
+
+ h_fail("00", "%I");
+ h_fail("13", "%I");
+
+ h_pass("00", "%H", 2, -1, -1, 0, -1, -1, -1, -1, -1);
+ h_pass("12", "%H", 2, -1, -1, 12, -1, -1, -1, -1, -1);
+ h_pass("23", "%H", 2, -1, -1, 23, -1, -1, -1, -1, -1);
+ h_fail("24", "%H");
+}
+
+
ATF_TC(month);
ATF_TC_HEAD(month, tc)
{
- atf_tc_set_md_var(tc, "descr", "Checks strptime(3): month names");
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) month name conversions [bB]");
}
ATF_TC_BODY(month, tc)
@@ -270,12 +398,89 @@ ATF_TC_BODY(month, tc)
h_pass("septembe", "%B", 3, -1, -1, -1, -1, 8, -1, -1, -1);
}
+ATF_TC(seconds);
+
+ATF_TC_HEAD(seconds, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) seconds conversions [S]");
+}
+
+ATF_TC_BODY(seconds, tc)
+{
+
+ h_pass("0", "%S", 1, 0, -1, -1, -1, -1, -1, -1, -1);
+ h_pass("59", "%S", 2, 59, -1, -1, -1, -1, -1, -1, -1);
+ h_pass("60", "%S", 2, 60, -1, -1, -1, -1, -1, -1, -1);
+ h_pass("61", "%S", 2, 61, -1, -1, -1, -1, -1, -1, -1);
+ h_fail("62", "%S");
+}
+
+ATF_TC(year);
+
+ATF_TC_HEAD(year, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) century/year conversions [CyY]");
+}
+
+ATF_TC_BODY(year, tc)
+{
+
+ h_pass("x20y", "x%Cy", 4, -1, -1, -1, -1, -1, 100, -1, -1);
+ h_pass("x84y", "x%yy", 4, -1, -1, -1, -1, -1, 84, -1, -1);
+ h_pass("x2084y", "x%C%yy", 6, -1, -1, -1, -1, -1, 184, -1, -1);
+ h_pass("x8420y", "x%y%Cy", 6, -1, -1, -1, -1, -1, 184, -1, -1);
+ h_pass("%20845", "%%%C%y5", 6, -1, -1, -1, -1, -1, 184, -1, -1);
+ h_fail("%", "%E%");
+
+ h_pass("1980", "%Y", 4, -1, -1, -1, -1, -1, 80, -1, -1);
+ h_pass("1980", "%EY", 4, -1, -1, -1, -1, -1, 80, -1, -1);
+}
+
+ATF_TC(zone);
+
+ATF_TC_HEAD(zone, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) timezone conversion [z]");
+}
+
+
+ATF_TC_BODY(zone, tc)
+{
+ ztest("%z");
+}
+
+ATF_TC(Zone);
+
+ATF_TC_HEAD(Zone, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks strptime(3) timezone conversion [Z]");
+}
+
+
+ATF_TC_BODY(Zone, tc)
+{
+ ztest("%z");
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, common);
ATF_TP_ADD_TC(tp, day);
+ ATF_TP_ADD_TC(tp, hour);
ATF_TP_ADD_TC(tp, month);
+ ATF_TP_ADD_TC(tp, seconds);
+ ATF_TP_ADD_TC(tp, year);
+ ATF_TP_ADD_TC(tp, zone);
+ ATF_TP_ADD_TC(tp, Zone);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y b/contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y
index 37c813f..75aaf62 100644
--- a/contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y
+++ b/contrib/netbsd-tests/lib/libcurses/director/testlang_parse.y
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: testlang_parse.y,v 1.13 2012/09/19 11:51:56 blymn Exp $ */
+/* $NetBSD: testlang_parse.y,v 1.14 2015/01/04 20:19:46 christos Exp $ */
/*-
* Copyright 2009 Brett Lymn <blymn@NetBSD.org>
@@ -39,7 +39,8 @@
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
-#include <sys/syslimits.h>
+#include <stdlib.h>
+#include <limits.h>
#include <time.h>
#include <vis.h>
#include <stdint.h>
diff --git a/contrib/netbsd-tests/lib/libm/t_casinh.c b/contrib/netbsd-tests/lib/libm/t_casinh.c
new file mode 100644
index 0000000..f9f93c3
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_casinh.c
@@ -0,0 +1,81 @@
+/* $NetBSD: t_casinh.c,v 1.2 2016/09/20 17:19:28 christos Exp $ */
+
+/*
+ * Written by Maya Rashish
+ * Public domain.
+ *
+ * Testing special values of casinh
+ * Values from ISO/IEC 9899:201x G.6.2.2
+ */
+
+#include <atf-c.h>
+#include <complex.h>
+#include <math.h>
+
+#define RE(z) (((double *)(&z))[0])
+#define IM(z) (((double *)(&z))[1])
+
+static const struct {
+ double input_re;
+ double input_im;
+ double result_re;
+ double result_im;
+} values[] = {
+ { +0, +0, +0, +0},
+ { +5.032E3, +INFINITY, +INFINITY, +M_PI/2},
+ { +INFINITY, +5.023E3, +INFINITY, +0},
+ { +INFINITY, +INFINITY, +INFINITY, +M_PI/4},
+#ifdef __HAVE_NANF
+ { +INFINITY, +NAN, +INFINITY, +NAN},
+ { +5.032E3, +NAN, +NAN, +NAN}, /* + FE_INVALID optionally raised */
+ { +NAN, +0, +NAN, +0},
+ { +NAN, -5.023E3, +NAN, +NAN}, /* + FE_INVALID optionally raised */
+ { +NAN, +INFINITY, +INFINITY, +NAN}, /* sign of real part of result unspecified */
+ { +NAN, +NAN, +NAN, +NAN},
+#endif
+};
+
+#ifdef __HAVE_NANF
+#define both_nan(a,b) (isnan(a) && isnan(b))
+#else
+#define both_nan(a,b) 0
+#endif
+
+#define crude_equality(a,b) ((a == b) || both_nan(a,b))
+
+#define ATF_COMPLEX_EQUAL(a,b) do { \
+ complex double ci = casinh(a); \
+ ATF_CHECK_MSG(crude_equality(creal(ci),creal(b)) && \
+ crude_equality(cimag(ci), cimag(b)), \
+ "for casinh([%g,%g]) = [%g,%g] != [%g,%g]", \
+ creal(a), cimag(a), creal(ci), cimag(ci), creal(b), cimag(b)); \
+} while (0/*CONSTCOND*/)
+
+
+ATF_TC(casinh);
+ATF_TC_HEAD(casinh, tc)
+{
+ atf_tc_set_md_var(tc, "descr","Check casinh family - special values");
+}
+
+ATF_TC_BODY(casinh, tc)
+{
+ complex double input;
+ complex double result;
+ unsigned int i;
+ for (i = 0; i < __arraycount(values); i++) {
+ RE(input) = values[i].input_re;
+ IM(input) = values[i].input_im;
+ RE(result) = values[i].result_re;
+ IM(result) = values[i].result_im;
+ ATF_COMPLEX_EQUAL(input, result);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, casinh);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libm/t_exp.c b/contrib/netbsd-tests/lib/libm/t_exp.c
index 7a8e9f8..0eb6412 100644
--- a/contrib/netbsd-tests/lib/libm/t_exp.c
+++ b/contrib/netbsd-tests/lib/libm/t_exp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_exp.c,v 1.7 2014/03/17 11:08:11 martin Exp $ */
+/* $NetBSD: t_exp.c,v 1.8 2014/10/07 16:53:44 gson Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -145,47 +145,40 @@ ATF_LIBM_TEST(exp2_values, "Test exp2(x) is correct for some x")
{
static const struct {
double x;
- double y;
+ double d_y;
+ float f_y;
double d_eps;
double f_eps;
} v[] = {
#if __DBL_MAX_EXP__ > 128
/* The largest double constant */
- { 0x1.fffffffffffffp9, 0x1.ffffffffffd3ap1023,
+ { 0x1.fffffffffffffp9, 0x1.ffffffffffd3ap1023, 0.00,
0x1p969, 0.0 },
/* The largest float constant */
- { 0x1.fffffep6, 0x1.ffff4ep+127, 6e30, 0.0 },
+ { 0x1.fffffep6, 0x1.ffff4ep+127, 0x1.ffff4ep+127, 6e30, 0.0 },
#endif
#ifdef T_LIBM_PLUS_INF
- { T_LIBM_PLUS_INF, T_LIBM_PLUS_INF, 0.0, 0.0 },
+ { T_LIBM_PLUS_INF, T_LIBM_PLUS_INF, T_LIBM_PLUS_INF, 0.0, 0.0 },
#endif
/* The few values from the old tests */
/* Results from i386/amd64, d_eps needed on i386 */
- { 1.1, 0x1.125fbee250664p+1, 0x1p-52, 0x1.8p-22 },
- { 2.2, 0x1.2611186bae675p+2, 0x1p-51, 0x1.8p-21 },
- { 3.3, 0x1.3b2c47bff8328p+3, 0x1p-50, 0x1.8p-20 },
- { 4.4, 0x1.51cb453b9536ep+4, 0x1p-49, 0x1.8p-19 },
- { 5.5, 0x1.6a09e667f3bcdp+5, 0x1p-48, 0x1.8p-18 },
- { 6.6, 0x1.8406003b2ae5bp+6, 0x1p-47, 0x1.8p-17 },
- /*
- * These two currently fail for 'float'.
- * 8.8 is definitely out by more than it should be.
- */
- { 7.7, 0x1.9fdf8bcce533ep+7, 0x1p-46, 0x1.8p-16 },
- { 8.8, 0x1.bdb8cdadbe124p+8, 0x1p-45, 0x1.8p-15 },
+ /* f_y values calculated using py-mpmath */
+ { 1.1, 0x1.125fbee250664p+1, 0x1.125fc0p+1, 0x1p-52, 0x1.8p-22 },
+ { 2.2, 0x1.2611186bae675p+2, 0x1.26111ap+2, 0x1p-51, 0x1.8p-21 },
+ { 3.3, 0x1.3b2c47bff8328p+3, 0x1.3b2c48p+3, 0x1p-50, 0x1.8p-20 },
+ { 4.4, 0x1.51cb453b9536ep+4, 0x1.51cb46p+4, 0x1p-49, 0x1.8p-19 },
+ { 5.5, 0x1.6a09e667f3bcdp+5, 0x1.6a09e6p+5, 0x1p-48, 0x1.8p-18 },
+ { 6.6, 0x1.8406003b2ae5bp+6, 0x1.8405fep+6, 0x1p-47, 0x1.8p-17 },
+ { 7.7, 0x1.9fdf8bcce533ep+7, 0x1.9fdf88p+7, 0x1p-46, 0x1.8p-16 },
+ { 8.8, 0x1.bdb8cdadbe124p+8, 0x1.bdb8d2p+8, 0x1p-45, 0x1.8p-15 },
};
unsigned int i;
-#ifdef __FreeBSD__
- atf_tc_expect_fail("Some of the cases produce failures on FreeBSD "
- "due to the error epsilon being so small");
-#endif
-
for (i = 0; i < __arraycount(v); i++) {
- T_LIBM_CHECK(i, exp2, v[i].x, v[i].y, v[i].d_eps);
+ T_LIBM_CHECK(i, exp2, v[i].x, v[i].d_y, v[i].d_eps);
if (i > 1)
- T_LIBM_CHECK(i, exp2f, v[i].x, v[i].y, v[i].f_eps);
+ T_LIBM_CHECK(i, exp2f, v[i].x, v[i].f_y, v[i].f_eps);
}
}
diff --git a/contrib/netbsd-tests/lib/libm/t_fe_round.c b/contrib/netbsd-tests/lib/libm/t_fe_round.c
new file mode 100644
index 0000000..fe805b4
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_fe_round.c
@@ -0,0 +1,124 @@
+/*
+ * Written by Maya Rashish <maya@NetBSD.org>
+ * Public domain.
+ *
+ * Testing IEEE-754 rounding modes (and lrint)
+ */
+
+#include <atf-c.h>
+#include <fenv.h>
+#ifdef __HAVE_FENV
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/*#pragma STDC FENV_ACCESS ON gcc?? */
+
+#define INT 9223L
+
+#define EPSILON 0.001
+
+static const struct {
+ int round_mode;
+ double input;
+ long int expected;
+} values[] = {
+ { FE_DOWNWARD, 3.7, 3},
+ { FE_DOWNWARD, -3.7, -4},
+ { FE_DOWNWARD, +0, 0},
+ { FE_DOWNWARD, -INT-0.01, -INT-1},
+ { FE_DOWNWARD, +INT-0.01, INT-1},
+ { FE_DOWNWARD, -INT+0.01, -INT},
+ { FE_DOWNWARD, +INT+0.01, INT},
+#if 0 /* cpu bugs? */
+ { FE_DOWNWARD, -0, -1},
+
+ { FE_UPWARD, +0, 1},
+#endif
+ { FE_UPWARD, -0, 0},
+ { FE_UPWARD, -123.7, -123},
+ { FE_UPWARD, 123.999, 124},
+ { FE_UPWARD, -INT-0.01, -INT},
+ { FE_UPWARD, +INT-0.01, INT},
+ { FE_UPWARD, -INT+0.01, -INT+1},
+ { FE_UPWARD, +INT+0.01, INT+1},
+
+ { FE_TOWARDZERO, 1.99, 1},
+ { FE_TOWARDZERO, -1.99, -1},
+ { FE_TOWARDZERO, 0.2, 0},
+ { FE_TOWARDZERO, INT+0.01, INT},
+ { FE_TOWARDZERO, INT-0.01, INT - 1},
+ { FE_TOWARDZERO, -INT+0.01, -INT + 1},
+ { FE_TOWARDZERO, +0, 0},
+ { FE_TOWARDZERO, -0, 0},
+
+ { FE_TONEAREST, -INT-0.01, -INT},
+ { FE_TONEAREST, +INT-0.01, INT},
+ { FE_TONEAREST, -INT+0.01, -INT},
+ { FE_TONEAREST, +INT+0.01, INT},
+ { FE_TONEAREST, -INT-0.501, -INT-1},
+ { FE_TONEAREST, +INT-0.501, INT-1},
+ { FE_TONEAREST, -INT+0.501, -INT+1},
+ { FE_TONEAREST, +INT+0.501, INT+1},
+ { FE_TONEAREST, +0, 0},
+ { FE_TONEAREST, -0, 0},
+};
+
+ATF_TC(fe_round);
+ATF_TC_HEAD(fe_round, tc)
+{
+ atf_tc_set_md_var(tc, "descr","Checking IEEE 754 rounding modes using lrint");
+}
+
+ATF_TC_BODY(fe_round, tc)
+{
+ long int received;
+
+ for (unsigned int i = 0; i < __arraycount(values); i++) {
+ fesetround(values[i].round_mode);
+
+ received = lrint(values[i].input);
+ ATF_CHECK_MSG(
+ (labs(received - values[i].expected) < EPSILON),
+ "lrint rounding wrong, difference too large\n"
+ "input: %f (index %d): got %ld, expected %ld\n",
+ values[i].input, i, received, values[i].expected);
+
+ /* Do we get the same rounding mode out? */
+ ATF_CHECK_MSG(
+ (fegetround() == values[i].round_mode),
+ "Didn't get the same rounding mode out!\n"
+ "(index %d) fed in %d rounding mode, got %d out\n",
+ i, fegetround(), values[i].round_mode);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, fe_round);
+
+ return atf_no_error();
+}
+#else
+ATF_TC(t_nofe_round);
+
+ATF_TC_HEAD(t_nofe_round, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "dummy test case - no fenv.h support");
+}
+
+
+ATF_TC_BODY(t_nofe_round, tc)
+{
+ atf_tc_skip("no fenv.h support on this architecture");
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, t_nofe_round);
+ return atf_no_error();
+}
+
+#endif
diff --git a/contrib/netbsd-tests/lib/libm/t_fenv.c b/contrib/netbsd-tests/lib/libm/t_fenv.c
new file mode 100644
index 0000000..5445036
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_fenv.c
@@ -0,0 +1,220 @@
+/* $NetBSD: t_fenv.c,v 1.3 2015/12/22 14:20:59 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Martin Husemann.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_fenv.c,v 1.3 2015/12/22 14:20:59 christos Exp $");
+
+#include <atf-c.h>
+
+#include <fenv.h>
+#ifdef __HAVE_FENV
+
+#include <ieeefp.h>
+#include <stdlib.h>
+
+
+#if __arm__ && !__SOFTFP__
+ /*
+ * Some NEON fpus do not implement IEEE exception handling,
+ * skip these tests if running on them and compiled for
+ * hard float.
+ */
+#define FPU_EXC_PREREQ() \
+ if (0 == fpsetmask(fpsetmask(FP_X_INV))) \
+ atf_tc_skip("FPU does not implement exception handling");
+
+ /*
+ * Same as above: some don't allow configuring the rounding mode.
+ */
+#define FPU_RND_PREREQ() \
+ if (0 == fpsetround(fpsetround(FP_RZ))) \
+ atf_tc_skip("FPU does not implement configurable " \
+ "rounding modes");
+#endif
+
+#ifndef FPU_EXC_PREREQ
+#define FPU_EXC_PREREQ() /* nothing */
+#endif
+#ifndef FPU_RND_PREREQ
+#define FPU_RND_PREREQ() /* nothing */
+#endif
+
+
+ATF_TC(fegetround);
+
+ATF_TC_HEAD(fegetround, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "verify the fegetround() function agrees with the legacy "
+ "fpsetround");
+}
+
+ATF_TC_BODY(fegetround, tc)
+{
+ FPU_RND_PREREQ();
+
+ fpsetround(FP_RZ);
+ ATF_CHECK(fegetround() == FE_TOWARDZERO);
+ fpsetround(FP_RM);
+ ATF_CHECK(fegetround() == FE_DOWNWARD);
+ fpsetround(FP_RN);
+ ATF_CHECK(fegetround() == FE_TONEAREST);
+ fpsetround(FP_RP);
+ ATF_CHECK(fegetround() == FE_UPWARD);
+}
+
+ATF_TC(fesetround);
+
+ATF_TC_HEAD(fesetround, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "verify the fesetround() function agrees with the legacy "
+ "fpgetround");
+}
+
+ATF_TC_BODY(fesetround, tc)
+{
+ FPU_RND_PREREQ();
+
+ fesetround(FE_TOWARDZERO);
+ ATF_CHECK(fpgetround() == FP_RZ);
+ fesetround(FE_DOWNWARD);
+ ATF_CHECK(fpgetround() == FP_RM);
+ fesetround(FE_TONEAREST);
+ ATF_CHECK(fpgetround() == FP_RN);
+ fesetround(FE_UPWARD);
+ ATF_CHECK(fpgetround() == FP_RP);
+}
+
+ATF_TC(fegetexcept);
+
+ATF_TC_HEAD(fegetexcept, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "verify the fegetexcept() function agrees with the legacy "
+ "fpsetmask()");
+}
+
+ATF_TC_BODY(fegetexcept, tc)
+{
+ FPU_EXC_PREREQ();
+
+ fpsetmask(0);
+ ATF_CHECK(fegetexcept() == 0);
+
+ fpsetmask(FP_X_INV|FP_X_DZ|FP_X_OFL|FP_X_UFL|FP_X_IMP);
+ ATF_CHECK(fegetexcept() == (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW
+ |FE_UNDERFLOW|FE_INEXACT));
+
+ fpsetmask(FP_X_INV);
+ ATF_CHECK(fegetexcept() == FE_INVALID);
+
+ fpsetmask(FP_X_DZ);
+ ATF_CHECK(fegetexcept() == FE_DIVBYZERO);
+
+ fpsetmask(FP_X_OFL);
+ ATF_CHECK(fegetexcept() == FE_OVERFLOW);
+
+ fpsetmask(FP_X_UFL);
+ ATF_CHECK(fegetexcept() == FE_UNDERFLOW);
+
+ fpsetmask(FP_X_IMP);
+ ATF_CHECK(fegetexcept() == FE_INEXACT);
+}
+
+ATF_TC(feenableexcept);
+
+ATF_TC_HEAD(feenableexcept, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "verify the feenableexcept() function agrees with the legacy "
+ "fpgetmask()");
+}
+
+ATF_TC_BODY(feenableexcept, tc)
+{
+ FPU_EXC_PREREQ();
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ ATF_CHECK(fpgetmask() == 0);
+
+ feenableexcept(FE_UNDERFLOW);
+ ATF_CHECK(fpgetmask() == FP_X_UFL);
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(FE_OVERFLOW);
+ ATF_CHECK(fpgetmask() == FP_X_OFL);
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(FE_DIVBYZERO);
+ ATF_CHECK(fpgetmask() == FP_X_DZ);
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(FE_INEXACT);
+ ATF_CHECK(fpgetmask() == FP_X_IMP);
+
+ fedisableexcept(FE_ALL_EXCEPT);
+ feenableexcept(FE_INVALID);
+ ATF_CHECK(fpgetmask() == FP_X_INV);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, fegetround);
+ ATF_TP_ADD_TC(tp, fesetround);
+ ATF_TP_ADD_TC(tp, fegetexcept);
+ ATF_TP_ADD_TC(tp, feenableexcept);
+
+ return atf_no_error();
+}
+
+#else /* no fenv.h support */
+
+ATF_TC(t_nofenv);
+
+ATF_TC_HEAD(t_nofenv, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "dummy test case - no fenv.h support");
+}
+
+
+ATF_TC_BODY(t_nofenv, tc)
+{
+ atf_tc_skip("no fenv.h support on this architecture");
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ ATF_TP_ADD_TC(tp, t_nofenv);
+ return atf_no_error();
+}
+
+#endif
diff --git a/contrib/netbsd-tests/lib/libm/t_fmod.c b/contrib/netbsd-tests/lib/libm/t_fmod.c
index 837e9b2..2a221f5 100644
--- a/contrib/netbsd-tests/lib/libm/t_fmod.c
+++ b/contrib/netbsd-tests/lib/libm/t_fmod.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fmod.c,v 1.2 2014/02/27 17:26:02 joerg Exp $ */
+/* $NetBSD: t_fmod.c,v 1.3 2015/01/03 14:23:53 gson Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -33,6 +33,8 @@
#include <float.h>
#include <math.h>
+#include "isqemu.h"
+
ATF_TC(fmod);
ATF_TC_HEAD(fmod, tc)
{
@@ -41,6 +43,11 @@ ATF_TC_HEAD(fmod, tc)
ATF_TC_BODY(fmod, tc)
{
+#ifdef __NetBSD__
+ if (isQEMU())
+ atf_tc_expect_fail("PR misc/44767");
+#endif
+
ATF_CHECK(fmodf(2.0, 1.0) == 0);
ATF_CHECK(fmod(2.0, 1.0) == 0);
#if !defined(__FreeBSD__) || LDBL_PREC != 53
diff --git a/contrib/netbsd-tests/lib/libm/t_hypot.c b/contrib/netbsd-tests/lib/libm/t_hypot.c
new file mode 100644
index 0000000..deb7e86
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_hypot.c
@@ -0,0 +1,81 @@
+/* $NetBSD: t_hypot.c,v 1.1 2016/01/24 20:26:47 gson Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <atf-c.h>
+#include <math.h>
+
+ATF_TC(hypot_integer);
+ATF_TC_HEAD(hypot_integer, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test hypot with integer args");
+}
+
+ATF_TC_BODY(hypot_integer, tc)
+{
+ /* volatile so hypotf() won't be evaluated at compile time */
+ volatile double a = 5;
+ volatile double b = 12;
+ ATF_CHECK(hypot(a, b) == 13.0);
+}
+
+ATF_TC(hypotf_integer);
+ATF_TC_HEAD(hypotf_integer, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test hypotf with integer args");
+}
+
+ATF_TC_BODY(hypotf_integer, tc)
+{
+ volatile float a = 5;
+ volatile float b = 12;
+ ATF_CHECK(hypotf(a, b) == 13.0f);
+}
+
+ATF_TC(pr50698);
+ATF_TC_HEAD(pr50698, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Check for the bug of PR 50698");
+}
+
+ATF_TC_BODY(pr50698, tc)
+{
+ volatile float a = 1e-18f;
+ float val = hypotf(a, a);
+ ATF_CHECK(!isinf(val));
+ ATF_CHECK(!isnan(val));
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, hypot_integer);
+ ATF_TP_ADD_TC(tp, hypotf_integer);
+ ATF_TP_ADD_TC(tp, pr50698);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libm/t_ilogb.c b/contrib/netbsd-tests/lib/libm/t_ilogb.c
new file mode 100644
index 0000000..b3c2126
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libm/t_ilogb.c
@@ -0,0 +1,130 @@
+/* $NetBSD: t_ilogb.c,v 1.6 2016/08/26 08:01:55 christos Exp $ */
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Maya Rashish.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef __FreeBSD__
+#include <limits.h>
+#endif
+#include <atf-c.h>
+#include <fenv.h>
+#include <math.h>
+
+#ifndef __HAVE_FENV
+
+# define ATF_CHECK_RAISED_INVALID
+# define ATF_CHECK_RAISED_NOTHING
+
+#else
+# define ATF_CHECK_RAISED_INVALID do { \
+ int r = fetestexcept(FE_ALL_EXCEPT); \
+ ATF_CHECK_MSG(r == FE_INVALID, "r=%#x != %#x\n", r, FE_INVALID); \
+ (void)feclearexcept(FE_ALL_EXCEPT); \
+} while (/*CONSTCOND*/0)
+
+# define ATF_CHECK_RAISED_NOTHING do { \
+ int r = fetestexcept(FE_ALL_EXCEPT); \
+ ATF_CHECK_MSG(r == 0, "r=%#x != 0\n", r); \
+ (void)feclearexcept(FE_ALL_EXCEPT); \
+} while (/*CONSTCOND*/0)
+#endif
+
+ATF_TC(ilogb);
+ATF_TC_HEAD(ilogb, tc)
+{
+ atf_tc_set_md_var(tc, "descr","Check ilogb family");
+}
+
+ATF_TC_BODY(ilogb, tc)
+{
+
+ ATF_CHECK(ilogbf(0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+
+ ATF_CHECK(ilogbf(-0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(-0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(-0) == FP_ILOGB0);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+
+ ATF_CHECK(ilogbf(INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+
+ ATF_CHECK(ilogbf(-INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(-INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(-INFINITY) == INT_MAX);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+
+ ATF_CHECK(ilogbf(1024) == 10);
+ ATF_CHECK_RAISED_NOTHING;
+ ATF_CHECK(ilogb(1024) == 10);
+ ATF_CHECK_RAISED_NOTHING;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(1024) == 10);
+ ATF_CHECK_RAISED_NOTHING;
+#endif
+
+#ifndef __vax__
+ ATF_CHECK(ilogbf(NAN) == FP_ILOGBNAN);
+ ATF_CHECK_RAISED_INVALID;
+ ATF_CHECK(ilogb(NAN) == FP_ILOGBNAN);
+ ATF_CHECK_RAISED_INVALID;
+#ifdef __HAVE_LONG_DOUBLE
+ ATF_CHECK(ilogbl(NAN) == FP_ILOGBNAN);
+ ATF_CHECK_RAISED_INVALID;
+#endif
+#endif
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, ilogb);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libm/t_ldexp.c b/contrib/netbsd-tests/lib/libm/t_ldexp.c
index eaf8a4b..251f2ae 100644
--- a/contrib/netbsd-tests/lib/libm/t_ldexp.c
+++ b/contrib/netbsd-tests/lib/libm/t_ldexp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ldexp.c,v 1.14 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_ldexp.c,v 1.16 2016/08/25 00:32:31 maya Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_ldexp.c,v 1.14 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_ldexp.c,v 1.16 2016/08/25 00:32:31 maya Exp $");
#include <sys/param.h>
@@ -96,10 +96,12 @@ struct ldexp_test ldexp_overflow[] = {
{ 1.0, 1023, 1, " inf" },
{ 1.0, -1022, 2046, " inf" },
{ 1.0, 1025, SKIP, " inf" },
+ { 2.0, INT_MAX,SKIP, " inf" },
{ -1.0, 1024, SKIP, " -inf" },
{ -1.0, 1023, 1, " -inf" },
{ -1.0, -1022, 2046, " -inf" },
{ -1.0, 1025, SKIP, " -inf" },
+ { -2.0, INT_MAX,SKIP, " -inf" },
{ 0, 0, 0, NULL }
};
@@ -170,10 +172,8 @@ run_test(struct ldexp_test *table)
v = ldexp(table->x, table->exp1);
- if (table->exp2 == SKIP)
- continue;
-
- v = ldexp(v, table->exp2);
+ if (table->exp2 != SKIP)
+ v = ldexp(v, table->exp2);
(void)snprintf(outbuf, sizeof(outbuf), FORMAT, v);
diff --git a/contrib/netbsd-tests/lib/libm/t_log.c b/contrib/netbsd-tests/lib/libm/t_log.c
index 0164233..756efcf 100644
--- a/contrib/netbsd-tests/lib/libm/t_log.c
+++ b/contrib/netbsd-tests/lib/libm/t_log.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_log.c,v 1.12 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_log.c,v 1.13 2015/02/09 19:39:48 martin Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_log.c,v 1.12 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_log.c,v 1.13 2015/02/09 19:39:48 martin Exp $");
#include <atf-c.h>
@@ -186,10 +186,6 @@ ATF_TC_BODY(log10f_inf_pos, tc)
{
const float x = 1.0L / 0.0L;
-#if defined(__alpha__)
- atf_tc_expect_fail("PR port-alpha/46301");
-#endif
-
ATF_CHECK(log10f(x) == x);
}
@@ -562,10 +558,6 @@ ATF_TC_BODY(log2f_inf_pos, tc)
{
const float x = 1.0L / 0.0L;
-#if defined(__alpha__)
- atf_tc_expect_fail("PR port-alpha/46301");
-#endif
-
ATF_CHECK(log2f(x) == x);
}
@@ -766,10 +758,6 @@ ATF_TC_BODY(logf_inf_pos, tc)
{
const float x = 1.0L / 0.0L;
-#if defined(__alpha__)
- atf_tc_expect_fail("PR port-alpha/46301");
-#endif
-
ATF_CHECK(logf(x) == x);
}
diff --git a/contrib/netbsd-tests/lib/libm/t_pow.c b/contrib/netbsd-tests/lib/libm/t_pow.c
index a8ae6f0..fbdb984 100644
--- a/contrib/netbsd-tests/lib/libm/t_pow.c
+++ b/contrib/netbsd-tests/lib/libm/t_pow.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_pow.c,v 1.3 2014/03/03 10:39:08 martin Exp $ */
+/* $NetBSD: t_pow.c,v 1.4 2015/09/08 05:24:27 dholland Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_pow.c,v 1.3 2014/03/03 10:39:08 martin Exp $");
+__RCSID("$NetBSD: t_pow.c,v 1.4 2015/09/08 05:24:27 dholland Exp $");
#include <atf-c.h>
#include <math.h>
@@ -284,21 +284,18 @@ ATF_TC_BODY(pow_zero_x, tc)
z = pow(+0.0, -4.0);
if (z != HUGE_VAL) {
- atf_tc_expect_fail("PR port-amd64/45391");
atf_tc_fail_nonfatal("pow(+0.0, -4.0) != HUGE_VAL");
}
z = pow(-0.0, -4.0);
if (z != HUGE_VAL) {
- atf_tc_expect_fail("PR port-amd64/45391");
atf_tc_fail_nonfatal("pow(-0.0, -4.0) != HUGE_VAL");
}
z = pow(+0.0, -5.0);
if (z != HUGE_VAL) {
- atf_tc_expect_fail("PR port-amd64/45391");
atf_tc_fail_nonfatal("pow(+0.0, -5.0) != HUGE_VAL");
}
diff --git a/contrib/netbsd-tests/lib/libm/t_precision.c b/contrib/netbsd-tests/lib/libm/t_precision.c
index c01deba..df2d8a3 100644
--- a/contrib/netbsd-tests/lib/libm/t_precision.c
+++ b/contrib/netbsd-tests/lib/libm/t_precision.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_precision.c,v 1.2 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_precision.c,v 1.3 2016/08/27 10:07:05 christos Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_precision.c,v 1.2 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_precision.c,v 1.3 2016/08/27 10:07:05 christos Exp $");
#include <atf-c.h>
@@ -45,7 +45,9 @@ ATF_TC_HEAD(t_precision, tc)
}
volatile double x = 1;
+#if __HAVE_LONG_DOUBLE
volatile long double y = 1;
+#endif
ATF_TC_BODY(t_precision, tc)
{
@@ -58,7 +60,7 @@ ATF_TC_BODY(t_precision, tc)
x += DBL_EPSILON;
ATF_CHECK(x == 2.0);
-#if !defined(__FreeBSD__) || !defined(__i386__)
+#if __HAVE_LONG_DOUBLE
y += LDBL_EPSILON;
ATF_CHECK(y != 1.0L);
y -= 1;
diff --git a/contrib/netbsd-tests/lib/libpthread/h_common.h b/contrib/netbsd-tests/lib/libpthread/h_common.h
index f4d03bc..2e8b0a1 100644
--- a/contrib/netbsd-tests/lib/libpthread/h_common.h
+++ b/contrib/netbsd-tests/lib/libpthread/h_common.h
@@ -9,4 +9,10 @@
ATF_REQUIRE_MSG(ret == 0, "%s: %s", #x, strerror(ret)); \
} while (0)
+#define PTHREAD_REQUIRE_STATUS(x, v) \
+ do { \
+ int ret = (x); \
+ ATF_REQUIRE_MSG(ret == (v), "%s: %s", #x, strerror(ret)); \
+ } while (0)
+
#endif // H_COMMON_H
diff --git a/contrib/netbsd-tests/lib/libpthread/t_cond.c b/contrib/netbsd-tests/lib/libpthread/t_cond.c
index 9f33c9e..83a3833 100644
--- a/contrib/netbsd-tests/lib/libpthread/t_cond.c
+++ b/contrib/netbsd-tests/lib/libpthread/t_cond.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_cond.c,v 1.6 2014/09/03 16:23:24 gson Exp $ */
+/* $NetBSD: t_cond.c,v 1.7 2016/07/03 14:24:59 christos Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_cond.c,v 1.6 2014/09/03 16:23:24 gson Exp $");
+__RCSID("$NetBSD: t_cond.c,v 1.7 2016/07/03 14:24:59 christos Exp $");
#include <sys/time.h>
@@ -547,6 +547,26 @@ ATF_TC_BODY(destroy_after_cancel, tc)
PTHREAD_REQUIRE(pthread_mutex_destroy(&mutex));
}
+ATF_TC(condattr);
+ATF_TC_HEAD(condattr, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks Condattr");
+}
+ATF_TC_BODY(condattr, tc)
+{
+ pthread_condattr_t condattr;
+ clockid_t clockid;
+
+ PTHREAD_REQUIRE(pthread_condattr_init(&condattr));
+ PTHREAD_REQUIRE(pthread_condattr_setclock(&condattr, CLOCK_REALTIME));
+ PTHREAD_REQUIRE(pthread_condattr_getclock(&condattr, &clockid));
+ ATF_REQUIRE_EQ(clockid, CLOCK_REALTIME);
+
+ PTHREAD_REQUIRE(pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC));
+ PTHREAD_REQUIRE(pthread_condattr_getclock(&condattr, &clockid));
+ ATF_REQUIRE_EQ(clockid, CLOCK_MONOTONIC);
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -558,6 +578,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, broadcast);
ATF_TP_ADD_TC(tp, bogus_timedwaits);
ATF_TP_ADD_TC(tp, destroy_after_cancel);
+ ATF_TP_ADD_TC(tp, condattr);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libpthread/t_mutex.c b/contrib/netbsd-tests/lib/libpthread/t_mutex.c
index eb371fa..b8d60e6 100644
--- a/contrib/netbsd-tests/lib/libpthread/t_mutex.c
+++ b/contrib/netbsd-tests/lib/libpthread/t_mutex.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_mutex.c,v 1.7 2014/11/04 00:20:19 justin Exp $ */
+/* $NetBSD: t_mutex.c,v 1.14 2016/10/31 23:51:20 christos Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -29,12 +29,20 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_mutex.c,v 1.7 2014/11/04 00:20:19 justin Exp $");
+__RCSID("$NetBSD: t_mutex.c,v 1.14 2016/10/31 23:51:20 christos Exp $");
+#ifdef __FreeBSD__
+#include <sys/time.h> /* For timespecadd */
+#include <inttypes.h> /* For UINT16_MAX */
+#endif
#include <pthread.h>
#include <stdio.h>
#include <string.h>
+#include <errno.h>
+#include <time.h>
#include <unistd.h>
+#include <sys/sched.h>
+#include <sys/param.h>
#include <atf-c.h>
@@ -44,6 +52,31 @@ static pthread_mutex_t mutex;
static pthread_mutex_t static_mutex = PTHREAD_MUTEX_INITIALIZER;
static int global_x;
+#ifdef TIMEDMUTEX
+/* This code is used for verifying non-timed specific code */
+static struct timespec ts_lengthy = {
+ .tv_sec = UINT16_MAX,
+ .tv_nsec = 0
+};
+/* This code is used for verifying timed-only specific code */
+static struct timespec ts_shortlived = {
+ .tv_sec = 0,
+ .tv_nsec = 120
+};
+
+static int
+mutex_lock(pthread_mutex_t *m, const struct timespec *ts)
+{
+ struct timespec ts_wait;
+ ATF_REQUIRE(clock_gettime(CLOCK_REALTIME, &ts_wait) != -1);
+ timespecadd(&ts_wait, ts, &ts_wait);
+
+ return pthread_mutex_timedlock(m, &ts_wait);
+}
+#else
+#define mutex_lock(a, b) pthread_mutex_lock(a)
+#endif
+
static void *
mutex1_threadfunc(void *arg)
{
@@ -53,7 +86,7 @@ mutex1_threadfunc(void *arg)
param = arg;
printf("2: Locking mutex\n");
- pthread_mutex_lock(&mutex);
+ mutex_lock(&mutex, &ts_lengthy);
printf("2: Got mutex. *param = %d\n", *param);
ATF_REQUIRE_EQ(*param, 20);
(*param)++;
@@ -78,7 +111,7 @@ ATF_TC_BODY(mutex1, tc)
PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
x = 1;
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
PTHREAD_REQUIRE(pthread_create(&new, NULL, mutex1_threadfunc, &x));
printf("1: Before changing the value.\n");
sleep(2);
@@ -89,7 +122,7 @@ ATF_TC_BODY(mutex1, tc)
printf("1: After releasing the mutex.\n");
PTHREAD_REQUIRE(pthread_join(new, &joinval));
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("1: Thread joined. X was %d. Return value (int) was %d\n",
x, *(int *)joinval);
ATF_REQUIRE_EQ(x, 21);
@@ -105,7 +138,7 @@ mutex2_threadfunc(void *arg)
printf("2: Second thread (%p). Count is %ld\n", pthread_self(), count);
while (count--) {
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
global_x++;
PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
}
@@ -142,7 +175,7 @@ ATF_TC_BODY(mutex2, tc)
global_x = 0;
count = count2 = 10000000;
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
PTHREAD_REQUIRE(pthread_create(&new, NULL, mutex2_threadfunc, &count2));
printf("1: Thread %p\n", pthread_self());
@@ -150,14 +183,14 @@ ATF_TC_BODY(mutex2, tc)
PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
while (count--) {
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
global_x++;
PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
}
PTHREAD_REQUIRE(pthread_join(new, &joinval));
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("1: Thread joined. X was %d. Return value (long) was %ld\n",
global_x, (long)joinval);
ATF_REQUIRE_EQ(global_x, 20000000);
@@ -181,7 +214,7 @@ mutex3_threadfunc(void *arg)
printf("2: Second thread (%p). Count is %ld\n", pthread_self(), count);
while (count--) {
- PTHREAD_REQUIRE(pthread_mutex_lock(&static_mutex));
+ PTHREAD_REQUIRE(mutex_lock(&static_mutex, &ts_lengthy));
global_x++;
PTHREAD_REQUIRE(pthread_mutex_unlock(&static_mutex));
}
@@ -217,7 +250,7 @@ ATF_TC_BODY(mutex3, tc)
global_x = 0;
count = count2 = 10000000;
- PTHREAD_REQUIRE(pthread_mutex_lock(&static_mutex));
+ PTHREAD_REQUIRE(mutex_lock(&static_mutex, &ts_lengthy));
PTHREAD_REQUIRE(pthread_create(&new, NULL, mutex3_threadfunc, &count2));
printf("1: Thread %p\n", pthread_self());
@@ -225,14 +258,14 @@ ATF_TC_BODY(mutex3, tc)
PTHREAD_REQUIRE(pthread_mutex_unlock(&static_mutex));
while (count--) {
- PTHREAD_REQUIRE(pthread_mutex_lock(&static_mutex));
+ PTHREAD_REQUIRE(mutex_lock(&static_mutex, &ts_lengthy));
global_x++;
PTHREAD_REQUIRE(pthread_mutex_unlock(&static_mutex));
}
PTHREAD_REQUIRE(pthread_join(new, &joinval));
- PTHREAD_REQUIRE(pthread_mutex_lock(&static_mutex));
+ PTHREAD_REQUIRE(mutex_lock(&static_mutex, &ts_lengthy));
printf("1: Thread joined. X was %d. Return value (long) was %ld\n",
global_x, (long)joinval);
ATF_REQUIRE_EQ(global_x, 20000000);
@@ -257,7 +290,7 @@ mutex4_threadfunc(void *arg)
param = arg;
printf("2: Locking mutex\n");
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("2: Got mutex. *param = %d\n", *param);
(*param)++;
@@ -288,11 +321,11 @@ ATF_TC_BODY(mutex4, tc)
PTHREAD_REQUIRE(pthread_mutexattr_destroy(&mattr));
x = 1;
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
PTHREAD_REQUIRE(pthread_create(&new, NULL, mutex4_threadfunc, &x));
printf("1: Before recursively acquiring the mutex.\n");
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("1: Before releasing the mutex once.\n");
sleep(2);
@@ -308,7 +341,7 @@ ATF_TC_BODY(mutex4, tc)
PTHREAD_REQUIRE(pthread_join(new, &joinval));
- PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
printf("1: Thread joined. X was %d. Return value (int) was %d\n",
x, *(int *)joinval);
ATF_REQUIRE_EQ(x, 21);
@@ -316,12 +349,405 @@ ATF_TC_BODY(mutex4, tc)
PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
}
+#ifdef __NetBSD__
+static pthread_mutexattr_t attr5;
+static pthread_mutex_t mutex5;
+static int min_fifo_prio, max_fifo_prio;
+
+static void *
+child_func(void* arg)
+{
+ int res;
+
+ printf("child is waiting\n");
+ res = _sched_protect(-2);
+ ATF_REQUIRE_EQ_MSG(res, -1, "sched_protect returned %d", res);
+ ATF_REQUIRE_EQ(errno, ENOENT);
+ PTHREAD_REQUIRE(mutex_lock(&mutex5, &ts_lengthy));
+ printf("child is owning resource\n");
+ res = _sched_protect(-2);
+ ATF_REQUIRE_EQ(res, max_fifo_prio);
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex5));
+ printf("child is done\n");
+
+ return 0;
+}
+
+ATF_TC(mutex5);
+ATF_TC_HEAD(mutex5, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks mutexes for priority setting");
+ atf_tc_set_md_var(tc, "require.user", "root");
+}
+
+ATF_TC_BODY(mutex5, tc)
+{
+ int res;
+ struct sched_param param;
+ pthread_t child;
+
+ min_fifo_prio = sched_get_priority_min(SCHED_FIFO);
+ max_fifo_prio = sched_get_priority_max(SCHED_FIFO);
+ printf("min prio for FIFO = %d\n", min_fifo_prio);
+ param.sched_priority = min_fifo_prio;
+
+ /* = 0 OTHER, 1 FIFO, 2 RR, -1 NONE */
+ res = sched_setscheduler(getpid(), SCHED_FIFO, &param);
+ printf("previous policy used = %d\n", res);
+
+ res = sched_getscheduler(getpid());
+ ATF_REQUIRE_EQ_MSG(res, SCHED_FIFO, "sched %d != FIFO %d", res,
+ SCHED_FIFO);
+
+ PTHREAD_REQUIRE(pthread_mutexattr_init(&attr5));
+ PTHREAD_REQUIRE(pthread_mutexattr_setprotocol(&attr5,
+ PTHREAD_PRIO_PROTECT));
+ PTHREAD_REQUIRE(pthread_mutexattr_setprioceiling(&attr5,
+ max_fifo_prio));
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex5, &attr5));
+ PTHREAD_REQUIRE(mutex_lock(&mutex5, &ts_lengthy));
+ printf("enter critical section for main\n");
+ PTHREAD_REQUIRE(pthread_create(&child, NULL, child_func, NULL));
+ printf("main starts to sleep\n");
+ sleep(10);
+ printf("main completes\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex5));
+ PTHREAD_REQUIRE(pthread_join(child, NULL));
+}
+
+static pthread_mutex_t mutex6;
+static int start = 0;
+static uintmax_t high_cnt = 0, low_cnt = 0, MAX_LOOP = 100000000;
+
+static void *
+high_prio(void* arg)
+{
+ struct sched_param param;
+ int policy;
+ param.sched_priority = min_fifo_prio + 10;
+ pthread_t childid = pthread_self();
+
+ PTHREAD_REQUIRE(pthread_setschedparam(childid, 1, &param));
+ PTHREAD_REQUIRE(pthread_getschedparam(childid, &policy, &param));
+ printf("high protect = %d, prio = %d\n",
+ _sched_protect(-2), param.sched_priority);
+ ATF_REQUIRE_EQ(policy, 1);
+ printf("high prio = %d\n", param.sched_priority);
+ sleep(1);
+ long tmp = 0;
+ for (int i = 0; i < 20; i++) {
+ while (high_cnt < MAX_LOOP) {
+ tmp += (123456789 % 1234) * (987654321 % 54321);
+ high_cnt += 1;
+ }
+ high_cnt = 0;
+ sleep(1);
+ }
+ PTHREAD_REQUIRE(mutex_lock(&mutex6, &ts_lengthy));
+ if (start == 0) start = 2;
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex6));
+
+ return 0;
+}
+
+static void *
+low_prio(void* arg)
+{
+ struct sched_param param;
+ int policy;
+ param.sched_priority = min_fifo_prio;
+ pthread_t childid = pthread_self();
+ int res = _sched_protect(max_fifo_prio);
+ ATF_REQUIRE_EQ(res, 0);
+ PTHREAD_REQUIRE(pthread_setschedparam(childid, 1, &param));
+ PTHREAD_REQUIRE(pthread_getschedparam(childid, &policy, &param));
+ printf("low protect = %d, prio = %d\n", _sched_protect(-2),
+ param.sched_priority);
+ ATF_REQUIRE_EQ(policy, 1);
+ printf("low prio = %d\n", param.sched_priority);
+ sleep(1);
+ long tmp = 0;
+ for (int i = 0; i < 20; i++) {
+ while (low_cnt < MAX_LOOP) {
+ tmp += (123456789 % 1234) * (987654321 % 54321);
+ low_cnt += 1;
+ }
+ low_cnt = 0;
+ sleep(1);
+ }
+ PTHREAD_REQUIRE(mutex_lock(&mutex6, &ts_lengthy));
+ if (start == 0)
+ start = 1;
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex6));
+
+ return 0;
+}
+
+ATF_TC(mutex6);
+ATF_TC_HEAD(mutex6, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Checks scheduling for priority ceiling");
+ atf_tc_set_md_var(tc, "require.user", "root");
+}
+
+/*
+ * 1. main thread sets itself to be a realtime task and launched two tasks,
+ * one has higher priority and the other has lower priority.
+ * 2. each child thread(low and high priority thread) sets its scheduler and
+ * priority.
+ * 3. each child thread did several rounds of computation, after each round it
+ * sleep 1 second.
+ * 4. the child thread with low priority will call _sched_protect to increase
+ * its protect priority.
+ * 5. We verify the thread with low priority runs first.
+ *
+ * Why does it work? From the main thread, we launched the high
+ * priority thread first. This gives this thread the benefit of
+ * starting first. The low priority thread did not call _sched_protect(2).
+ * The high priority thread should finish the task first. After each
+ * round of computation, we call sleep, to put the task into the
+ * sleep queue, and wake up again after the timer expires. This
+ * gives the scheduler the chance to decide which task to run. So,
+ * the thread with real high priority will always block the thread
+ * with real low priority.
+ *
+ */
+ATF_TC_BODY(mutex6, tc)
+{
+ struct sched_param param;
+ int res;
+ pthread_t high, low;
+
+ min_fifo_prio = sched_get_priority_min(SCHED_FIFO);
+ max_fifo_prio = sched_get_priority_max(SCHED_FIFO);
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+ printf("min_fifo_prio = %d, max_fifo_info = %d\n", min_fifo_prio,
+ max_fifo_prio);
+
+ param.sched_priority = min_fifo_prio;
+ res = sched_setscheduler(getpid(), SCHED_FIFO, &param);
+ printf("previous policy used = %d\n", res);
+
+ res = sched_getscheduler(getpid());
+ ATF_REQUIRE_EQ(res, 1);
+ PTHREAD_REQUIRE(pthread_create(&high, NULL, high_prio, NULL));
+ PTHREAD_REQUIRE(pthread_create(&low, NULL, low_prio, NULL));
+ sleep(5);
+ PTHREAD_REQUIRE(pthread_join(low, NULL));
+ PTHREAD_REQUIRE(pthread_join(high, NULL));
+
+ ATF_REQUIRE_EQ(start, 1);
+}
+#endif
+
+ATF_TC(mutexattr1);
+ATF_TC_HEAD(mutexattr1, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks mutexattr");
+}
+
+ATF_TC_BODY(mutexattr1, tc)
+{
+ pthread_mutexattr_t mattr;
+ int protocol, target;
+
+ PTHREAD_REQUIRE(pthread_mutexattr_init(&mattr));
+
+ target = PTHREAD_PRIO_NONE;
+ PTHREAD_REQUIRE(pthread_mutexattr_setprotocol(&mattr, target));
+ PTHREAD_REQUIRE(pthread_mutexattr_getprotocol(&mattr, &protocol));
+ ATF_REQUIRE_EQ(protocol, target);
+
+ /*
+ target = PTHREAD_PRIO_INHERIT;
+ PTHREAD_REQUIRE(pthread_mutexattr_setprotocol(&mattr, target));
+ PTHREAD_REQUIRE(pthread_mutexattr_getprotocol(&mattr, &protocol));
+ ATF_REQUIRE_EQ(protocol, target);
+ */
+
+ target = PTHREAD_PRIO_PROTECT;
+ PTHREAD_REQUIRE(pthread_mutexattr_setprotocol(&mattr, target));
+ PTHREAD_REQUIRE(pthread_mutexattr_getprotocol(&mattr, &protocol));
+ ATF_REQUIRE_EQ(protocol, target);
+}
+
+ATF_TC(mutexattr2);
+ATF_TC_HEAD(mutexattr2, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks mutexattr");
+}
+
+ATF_TC_BODY(mutexattr2, tc)
+{
+ pthread_mutexattr_t mattr;
+
+#ifdef __FreeBSD__
+ atf_tc_expect_fail("fails on i == 0 with: "
+ "pthread_mutexattr_setprioceiling(&mattr, i): Invalid argument "
+ "-- PR # 211802");
+#endif
+
+ PTHREAD_REQUIRE(pthread_mutexattr_init(&mattr));
+ int max_prio = sched_get_priority_max(SCHED_FIFO);
+ int min_prio = sched_get_priority_min(SCHED_FIFO);
+ for (int i = min_prio; i <= max_prio; i++) {
+ int prioceiling;
+#ifdef __FreeBSD__
+ int protocol;
+
+ PTHREAD_REQUIRE(pthread_mutexattr_getprotocol(&mattr,
+ &protocol));
+
+ printf("priority: %d\nprotocol: %d\n", i, protocol);
+#endif
+ PTHREAD_REQUIRE(pthread_mutexattr_setprioceiling(&mattr, i));
+ PTHREAD_REQUIRE(pthread_mutexattr_getprioceiling(&mattr,
+ &prioceiling));
+#ifdef __FreeBSD__
+ printf("prioceiling: %d\n", prioceiling);
+#endif
+ ATF_REQUIRE_EQ(i, prioceiling);
+ }
+}
+
+#ifdef TIMEDMUTEX
+ATF_TC(timedmutex1);
+ATF_TC_HEAD(timedmutex1, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks timeout on selflock");
+}
+
+ATF_TC_BODY(timedmutex1, tc)
+{
+
+ printf("Timed mutex-test 1\n");
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+
+ printf("Before acquiring mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+
+ printf("Before endeavor to reacquire timed-mutex (timeout expected)\n");
+ PTHREAD_REQUIRE_STATUS(mutex_lock(&mutex, &ts_shortlived),
+ ETIMEDOUT);
+
+ printf("Unlocking mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
+}
+
+ATF_TC(timedmutex2);
+ATF_TC_HEAD(timedmutex2, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timeout on selflock with timedlock");
+}
+
+ATF_TC_BODY(timedmutex2, tc)
+{
+
+ printf("Timed mutex-test 2\n");
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+
+ printf("Before acquiring mutex with timedlock\n");
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
+
+ printf("Before endeavor to reacquire timed-mutex (timeout expected)\n");
+ PTHREAD_REQUIRE_STATUS(mutex_lock(&mutex, &ts_shortlived),
+ ETIMEDOUT);
+
+ printf("Unlocking mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
+}
+
+ATF_TC(timedmutex3);
+ATF_TC_HEAD(timedmutex3, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timeout on selflock in a new thread");
+}
+
+static void *
+timedmtx_thrdfunc(void *arg)
+{
+ printf("Before endeavor to reacquire timed-mutex (timeout expected)\n");
+ PTHREAD_REQUIRE_STATUS(mutex_lock(&mutex, &ts_shortlived),
+ ETIMEDOUT);
+
+ return NULL;
+}
+
+ATF_TC_BODY(timedmutex3, tc)
+{
+ pthread_t new;
+
+ printf("Timed mutex-test 3\n");
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+
+ printf("Before acquiring mutex with timedlock\n");
+ PTHREAD_REQUIRE(pthread_mutex_lock(&mutex));
+
+ printf("Before creating new thread\n");
+ PTHREAD_REQUIRE(pthread_create(&new, NULL, timedmtx_thrdfunc, NULL));
+
+ printf("Before joining the mutex\n");
+ PTHREAD_REQUIRE(pthread_join(new, NULL));
+
+ printf("Unlocking mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
+}
+
+ATF_TC(timedmutex4);
+ATF_TC_HEAD(timedmutex4, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Checks timeout on selflock with timedlock in a new thread");
+}
+
+ATF_TC_BODY(timedmutex4, tc)
+{
+ pthread_t new;
+
+ printf("Timed mutex-test 4\n");
+
+ PTHREAD_REQUIRE(pthread_mutex_init(&mutex, NULL));
+
+ printf("Before acquiring mutex with timedlock\n");
+ PTHREAD_REQUIRE(mutex_lock(&mutex, &ts_lengthy));
+
+ printf("Before creating new thread\n");
+ PTHREAD_REQUIRE(pthread_create(&new, NULL, timedmtx_thrdfunc, NULL));
+
+ printf("Before joining the mutex\n");
+ PTHREAD_REQUIRE(pthread_join(new, NULL));
+
+ printf("Unlocking mutex\n");
+ PTHREAD_REQUIRE(pthread_mutex_unlock(&mutex));
+}
+#endif
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, mutex1);
ATF_TP_ADD_TC(tp, mutex2);
ATF_TP_ADD_TC(tp, mutex3);
ATF_TP_ADD_TC(tp, mutex4);
+#ifdef __NetBSD__
+ ATF_TP_ADD_TC(tp, mutex5);
+ ATF_TP_ADD_TC(tp, mutex6);
+#endif
+ ATF_TP_ADD_TC(tp, mutexattr1);
+ ATF_TP_ADD_TC(tp, mutexattr2);
+
+#ifdef TIMEDMUTEX
+ ATF_TP_ADD_TC(tp, timedmutex1);
+ ATF_TP_ADD_TC(tp, timedmutex2);
+ ATF_TP_ADD_TC(tp, timedmutex3);
+ ATF_TP_ADD_TC(tp, timedmutex4);
+#endif
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libpthread/t_rwlock.c b/contrib/netbsd-tests/lib/libpthread/t_rwlock.c
index b2a3d6f..81f8c58 100644
--- a/contrib/netbsd-tests/lib/libpthread/t_rwlock.c
+++ b/contrib/netbsd-tests/lib/libpthread/t_rwlock.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_rwlock.c,v 1.1 2010/07/16 15:42:53 jmmv Exp $ */
+/* $NetBSD: t_rwlock.c,v 1.2 2015/06/26 11:07:20 pooka Exp $ */
/*
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -55,7 +55,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_rwlock.c,v 1.1 2010/07/16 15:42:53 jmmv Exp $");
+__RCSID("$NetBSD: t_rwlock.c,v 1.2 2015/06/26 11:07:20 pooka Exp $");
#include <errno.h>
#include <pthread.h>
@@ -70,6 +70,8 @@ pthread_rwlock_t lk;
struct timespec to;
+static pthread_rwlock_t static_rwlock = PTHREAD_RWLOCK_INITIALIZER;
+
/* ARGSUSED */
static void *
do_nothing(void *dummy)
@@ -117,9 +119,23 @@ ATF_TC_BODY(rwlock1, tc)
"%s", strerror(error));
}
+ATF_TC(rwlock_static);
+ATF_TC_HEAD(rwlock_static, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "rwlock w/ static initializer");
+}
+ATF_TC_BODY(rwlock_static, tc)
+{
+
+ PTHREAD_REQUIRE(pthread_rwlock_rdlock(&static_rwlock));
+ PTHREAD_REQUIRE(pthread_rwlock_unlock(&static_rwlock));
+ PTHREAD_REQUIRE(pthread_rwlock_destroy(&static_rwlock));
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, rwlock1);
+ ATF_TP_ADD_TC(tp, rwlock_static);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/lib/libpthread/t_swapcontext.c b/contrib/netbsd-tests/lib/libpthread/t_swapcontext.c
index a18ac2f..8536846 100644
--- a/contrib/netbsd-tests/lib/libpthread/t_swapcontext.c
+++ b/contrib/netbsd-tests/lib/libpthread/t_swapcontext.c
@@ -104,6 +104,15 @@ ATF_TC_BODY(swapcontext1, tc)
{
pthread_t thread;
+#if defined(__FreeBSD__) && defined(__mips__)
+ /*
+ * MIPS modifies TLS pointer in set_mcontext(), so
+ * swapping contexts obtained from different threads
+ * gives us different pthread_self() return value.
+ */
+ atf_tc_skip("Platform is not supported.");
+#endif
+
oself = (void *)&val1;
nself = (void *)&val2;
diff --git a/contrib/netbsd-tests/lib/libpthread/t_timedmutex.c b/contrib/netbsd-tests/lib/libpthread/t_timedmutex.c
new file mode 100644
index 0000000..4f71acd
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libpthread/t_timedmutex.c
@@ -0,0 +1,30 @@
+/* $NetBSD: t_timedmutex.c,v 1.2 2016/10/31 16:21:23 christos Exp $ */
+
+/*
+ * Copyright (c) 2008 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#define TIMEDMUTEX
+#include "t_mutex.c"
diff --git a/contrib/netbsd-tests/lib/librumpclient/h_execthr.c b/contrib/netbsd-tests/lib/librumpclient/h_execthr.c
index f653fe6..c209375 100644
--- a/contrib/netbsd-tests/lib/librumpclient/h_execthr.c
+++ b/contrib/netbsd-tests/lib/librumpclient/h_execthr.c
@@ -1,4 +1,4 @@
-/* $NetBSD: h_execthr.c,v 1.3 2014/08/13 00:03:00 pooka Exp $ */
+/* $NetBSD: h_execthr.c,v 1.7 2016/11/24 00:37:29 dholland Exp $ */
/*
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -42,6 +42,14 @@
#include <rump/rumpclient.h>
#include <rump/rump_syscalls.h>
+//#define VERBOSE
+
+#ifdef VERBOSE
+#define SAY(...) printf(__VA_ARGS__)
+#else
+#define SAY(...)
+#endif
+
static int canreturn = 0;
/*
@@ -103,6 +111,7 @@ main(int argc, char *argv[], char *envp[])
else
execd = 0;
sprintf(nexec, "%d", execd+1);
+ SAY("execd: %d\n", execd);
if (rumpclient_init() == -1) {
if (execd)
@@ -111,33 +120,43 @@ main(int argc, char *argv[], char *envp[])
err(1, "init");
}
mypid = rump_sys_getpid();
+ SAY("rumpclient_init finished.\n");
if (execd) {
canreturn = 1;
- if (pthread_create(&pt, NULL,
- wrk, (void *)(uintptr_t)P2_0) != 0)
- errx(1, "exec pthread_create");
+ errno = pthread_create(&pt, NULL,
+ wrk, (void *)(uintptr_t)P2_0);
+ if (errno != 0)
+ err(1, "exec pthread_create");
+ SAY("startup pthread_create finished.\n");
i = 37;
rump_sys_write(P2_1, &i, sizeof(i));
pthread_join(pt, NULL);
+ SAY("startup pthread_join finished.\n");
n = rump_sys_read(P1_0, &i, sizeof(i));
if (n != -1 || errno != EBADF)
errx(1, "post-exec cloexec works");
+ SAY("startup rump_sys_read finished.\n");
getproc(mypid, &p);
+ SAY("startup getproc finished.\n");
if (p.p_nlwps != 2)
errx(1, "invalid nlwps: %lld", (long long)p.p_nlwps);
/* we passed? */
- if (execd > 10)
+ if (execd > 10) {
+ SAY("done.\n");
exit(0);
+ }
rump_sys_close(P2_0);
rump_sys_close(P2_1);
}
+ SAY("making pipes...\n");
+
if (rump_sys_pipe(p1) == -1)
err(1, "pipe1");
if (p1[0] != P1_0 || p1[1] != P1_1)
@@ -151,32 +170,47 @@ main(int argc, char *argv[], char *envp[])
if (rump_sys_fcntl(p1[1], F_SETFD, FD_CLOEXEC) == -1)
err(1, "cloexec");
- for (i = 0; i < NTHR; i++)
- if (pthread_create(&pt, NULL,
- wrk, (void *)(uintptr_t)p1[0]) != 0)
- errx(1, "pthread_create 1 %d", i);
+ SAY("making threads...\n");
+
+ for (i = 0; i < NTHR; i++) {
+ errno = pthread_create(&pt, NULL,
+ wrk, (void *)(uintptr_t)p1[0]);
+ if (errno != 0)
+ err(1, "pthread_create 1 %d", i);
+ }
+
+ for (i = 0; i < NTHR; i++) {
+ errno = pthread_create(&pt, NULL,
+ wrk, (void *)(uintptr_t)p2[0]);
+ if (errno != 0)
+ err(1, "pthread_create 2 %d", i);
+ }
- for (i = 0; i < NTHR; i++)
- if (pthread_create(&pt, NULL,
- wrk, (void *)(uintptr_t)p2[0]) != 0)
- errx(1, "pthread_create 2 %d", i);
+ SAY("waiting for threads to start...\n");
/* wait for all the threads to be enjoying themselves */
for (;;) {
getproc(mypid, &p);
+ SAY("getproc finished.\n");
if (p.p_nlwps == 2*NTHR + 2)
break;
usleep(10000);
}
+ SAY("making some more threads start...\n");
+
/*
* load up one more (big) set. these won't start executing, though,
* but we're interested in if they create blockage
*/
- for (i = 0; i < 3*NTHR; i++)
- if (pthread_create(&pt, NULL,
- wrk, (void *)(uintptr_t)p1[0]) != 0)
- errx(1, "pthread_create 1 %d", i);
+ for (i = 0; i < 3*NTHR; i++) {
+ errno = pthread_create(&pt, NULL,
+ wrk, (void *)(uintptr_t)p1[0]);
+ if (errno != 0)
+ err(1, "pthread_create 3 %d", i);
+ }
+
+ SAY("calling exec...\n");
/* then, we exec! */
execarg[0] = argv[0];
diff --git a/contrib/netbsd-tests/lib/librumpclient/t_exec.sh b/contrib/netbsd-tests/lib/librumpclient/t_exec.sh
index 661a3b9..a07af0c 100755
--- a/contrib/netbsd-tests/lib/librumpclient/t_exec.sh
+++ b/contrib/netbsd-tests/lib/librumpclient/t_exec.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_exec.sh,v 1.8 2011/03/08 12:40:25 pooka Exp $
+# $NetBSD: t_exec.sh,v 1.9 2016/08/10 21:10:18 kre Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -25,7 +25,7 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-rumpsrv='rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet'
+rumpsrv='rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpdev -lrumpvfs'
export RUMP_SERVER=unix://csock
export RUMPHIJACK_RETRYCONNECT='die'
diff --git a/contrib/netbsd-tests/lib/librumpclient/t_fd.c b/contrib/netbsd-tests/lib/librumpclient/t_fd.c
index aa0d1cc..6e6d947 100644
--- a/contrib/netbsd-tests/lib/librumpclient/t_fd.c
+++ b/contrib/netbsd-tests/lib/librumpclient/t_fd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_fd.c,v 1.4 2011/08/25 18:46:01 hannken Exp $ */
+/* $NetBSD: t_fd.c,v 1.5 2016/08/10 21:10:18 kre Exp $ */
/*
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -110,7 +110,7 @@ ATF_TC_BODY(sigio, tc)
signal(SIGIO, gotsig);
RZ(system("rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet "
- RUMPSERV));
+ "-lrumpdev -lrumpvfs " RUMPSERV));
RL(setenv("RUMP_SERVER", RUMPSERV, 1));
RL(rumpclient_init());
diff --git a/contrib/netbsd-tests/lib/librumphijack/t_tcpip.sh b/contrib/netbsd-tests/lib/librumphijack/t_tcpip.sh
index d6a16fa..411be33 100755
--- a/contrib/netbsd-tests/lib/librumphijack/t_tcpip.sh
+++ b/contrib/netbsd-tests/lib/librumphijack/t_tcpip.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_tcpip.sh,v 1.13 2014/01/03 13:18:00 pooka Exp $
+# $NetBSD: t_tcpip.sh,v 1.18 2016/08/13 11:22:11 christos Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -25,7 +25,8 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-rumpnetsrv='rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet'
+rumpnetlibs="-lrumpnet -lrumpnet_net -lrumpnet_netinet6 -lrumpnet_netinet"
+rumpnetsrv="rump_server $rumpnetlibs -lrumpdev"
export RUMP_SERVER=unix://csock
atf_test_case http cleanup
@@ -37,7 +38,7 @@ http_head()
http_body()
{
- atf_check -s exit:0 ${rumpnetsrv} -lrumpnet_netinet6 ${RUMP_SERVER}
+ atf_check -s exit:0 ${rumpnetsrv} ${RUMP_SERVER}
# start bozo in daemon mode
atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \
@@ -53,8 +54,9 @@ http_body()
# check that we got what we wanted
atf_check -o match:'HTTP/1.0 200 OK' cat webfile
atf_check -o match:'Content-Length: 95' cat webfile
+ blank_line_re="$(printf '^\r$')" # matches a line with only <CR><LF>
atf_check -o file:"$(atf_get_srcdir)/index.html" \
- sed -n '1,/^$/!p' webfile
+ sed -n "1,/${blank_line_re}/!p" webfile
}
http_cleanup()
@@ -121,6 +123,7 @@ ssh_head()
ssh_body()
{
+ atf_expect_fail "PR lib/50174"
atf_check -s exit:0 ${rumpnetsrv} ${RUMP_SERVER}
# make sure clients die after we nuke the server
@@ -177,6 +180,8 @@ test_nfs()
'echo "/export -noresvport -noresvmnt 10.1.1.100" | \
dd of=/rump/etc/exports 2> /dev/null'
+ atf_check -s exit:0 rump.sysctl -q -w kern.module.autoload=1
+
atf_check -s exit:0 -e ignore mount_ffs /dk /rump/export
atf_check -s exit:0 -x "echo ${magicstr} > /rump/export/im_alive"
@@ -201,7 +206,7 @@ test_nfs()
unset LD_PRELOAD
# at least the kernel server is easier
- atf_check -s exit:0 rump_server -lrumpvfs -lrumpnet \
+ atf_check -s exit:0 rump_server -lrumpvfs -lrumpnet -lrumpdev \
-lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpfs_nfs\
${RUMP_SERVER}
@@ -228,7 +233,7 @@ nfs_head()
nfs_body()
{
test_nfs -lrumpvfs -lrumpdev -lrumpnet -lrumpnet_net \
- -lrumpnet_netinet -lrumpnet_local -lrumpnet_shmif \
+ -lrumpnet_netinet -lrumpnet_local -lrumpnet_shmif -lrumpdev \
-lrumpdev_disk -lrumpfs_ffs -lrumpfs_nfs -lrumpfs_nfsserver \
-d key=/dk,hostpath=ffs.img,size=host
}
@@ -250,7 +255,7 @@ nfs_autoload_body()
{
[ `uname -m` = "i386" ] || atf_skip "test currently valid only on i386"
test_nfs -lrumpvfs -lrumpdev -lrumpnet -lrumpnet_net \
- -lrumpnet_netinet -lrumpnet_local -lrumpnet_shmif \
+ -lrumpnet_netinet -lrumpnet_local -lrumpnet_shmif -lrumpdev \
-lrumpdev_disk -d key=/dk,hostpath=ffs.img,size=host
}
diff --git a/contrib/netbsd-tests/lib/libusbhid/hid_test_data.c b/contrib/netbsd-tests/lib/libusbhid/hid_test_data.c
new file mode 100644
index 0000000..dedcb11
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libusbhid/hid_test_data.c
@@ -0,0 +1,137 @@
+/* $NetBSD: hid_test_data.c,v 1.2 2016/01/07 15:58:23 jakllsch Exp $ */
+
+/*
+ * Copyright (c) 2016 Jonathan A. Kollasch
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+static const uint8_t range_test_report_descriptor[] = {
+ 0x0b, 0x03, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x20, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x17, 0x00, 0x00, 0x00, 0x80, // Logical Minimum
+ 0x27, 0xff, 0xff, 0xff, 0x7f, // Logical Maximum
+ 0x37, 0x00, 0x00, 0x00, 0x80, // Physical Minimum
+ 0x47, 0xff, 0xff, 0xff, 0x7f, // Physical Maximum
+ 0x81, 0x00, // Input
+
+ 0x0b, 0x02, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x10, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x16, 0x00, 0x80, // Logical Minimum
+ 0x26, 0xff, 0x7f, // Logical Maximum
+ 0x36, 0x00, 0x80, // Physical Minimum
+ 0x46, 0xff, 0x7f, // Physical Maximum
+ 0x81, 0x00, // Input
+
+ 0x0b, 0x01, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x08, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x15, 0x80, // Logical Minimum
+ 0x25, 0x7f, // Logical Maximum
+ 0x35, 0x80, // Physical Minimum
+ 0x45, 0x7f, // Physical Maximum
+ 0x81, 0x00, // Input
+};
+
+static const uint8_t range_test_minimum_report[7] = {
+ 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x80,
+ 0x80,
+};
+
+static const uint8_t range_test_negative_one_report[7] = {
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff,
+ 0xff,
+};
+
+static const uint8_t range_test_positive_one_report[7] = {
+ 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00,
+ 0x01,
+};
+
+static const uint8_t range_test_maximum_report[7] = {
+ 0xff, 0xff, 0xff, 0x7f,
+ 0xff, 0x7f,
+ 0x7f,
+};
+
+static const uint8_t unsigned_range_test_report_descriptor[] = {
+ 0x0b, 0x13, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x20, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x17, 0x00, 0x00, 0x00, 0x00, // Logical Minimum
+ 0x27, 0xff, 0xff, 0xff, 0xff, // Logical Maximum
+ 0x37, 0x00, 0x00, 0x00, 0x00, // Physical Minimum
+ 0x47, 0xff, 0xff, 0xff, 0xff, // Physical Maximum
+ 0x81, 0x00, // Input
+
+ 0x0b, 0x12, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x10, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x16, 0x00, 0x00, // Logical Minimum
+ 0x26, 0xff, 0xff, // Logical Maximum
+ 0x36, 0x00, 0x00, // Physical Minimum
+ 0x46, 0xff, 0xff, // Physical Maximum
+ 0x81, 0x00, // Input
+
+ 0x0b, 0x11, 0x00, 0x00, 0xff, // Usage
+ 0x75, 0x08, // Report Size
+ 0x95, 0x01, // Report Count
+ 0x15, 0x00, // Logical Minimum
+ 0x25, 0xff, // Logical Maximum
+ 0x35, 0x00, // Physical Minimum
+ 0x45, 0xff, // Physical Maximum
+ 0x81, 0x00, // Input
+};
+
+static const uint8_t unsigned_range_test_minimum_report[7] = {
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00,
+};
+
+static const uint8_t unsigned_range_test_positive_one_report[7] = {
+ 0x01, 0x00, 0x00, 0x00,
+ 0x01, 0x00,
+ 0x01,
+};
+
+static const uint8_t unsigned_range_test_negative_one_report[7] = {
+ 0xfe, 0xff, 0xff, 0xff,
+ 0xfe, 0xff,
+ 0xfe,
+};
+
+static const uint8_t unsigned_range_test_maximum_report[7] = {
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff,
+ 0xff,
+};
+
+static const uint8_t just_pop_report_descriptor[] = {
+ 0xb4,
+};
diff --git a/contrib/netbsd-tests/lib/libusbhid/t_usbhid.c b/contrib/netbsd-tests/lib/libusbhid/t_usbhid.c
new file mode 100644
index 0000000..2766da2
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libusbhid/t_usbhid.c
@@ -0,0 +1,452 @@
+/* $NetBSD: t_usbhid.c,v 1.12 2016/08/17 12:10:42 jakllsch Exp $ */
+
+/*
+ * Copyright (c) 2016 Jonathan A. Kollasch
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_usbhid.c,v 1.12 2016/08/17 12:10:42 jakllsch Exp $");
+
+#include <atf-c.h>
+
+#include <inttypes.h>
+#include <usbhid.h>
+#include <string.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <limits.h>
+
+ATF_TC(check_hid_logical_range);
+ATF_TC(check_hid_physical_range);
+ATF_TC(check_hid_usage);
+ATF_TC(check_hid_get_data);
+ATF_TC(check_hid_set_data);
+ATF_TC(check_parse_just_pop);
+
+#define MYd_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %d", (d))
+
+#define MYu_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== %u", (d))
+
+#define MYx_ATF_CHECK_EQ(d, v) \
+ ATF_CHECK_EQ_MSG(d, v, "== 0x%x", (d))
+
+#include "hid_test_data.c"
+
+ATF_TC_HEAD(check_hid_usage, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test libusbhid usage.c");
+}
+
+ATF_TC_BODY(check_hid_usage, tc)
+{
+ char usages_path[PATH_MAX];
+
+ (void)strlcpy(usages_path, atf_tc_get_config_var(tc, "srcdir"),
+ sizeof(usages_path));
+ (void)strlcat(usages_path, "/test_usb_hid_usages",
+ sizeof(usages_path));
+
+ hid_init(usages_path);
+
+ ATF_CHECK_STREQ("t_usbhid_page", hid_usage_page(0xff1b));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_page("t_usbhid_page"), 0xff1b);
+
+ ATF_CHECK_STREQ("t_usbhid_usage", hid_usage_in_page(0xff1bff2a));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
+ "t_usbhid_page:t_usbhid_usage"), 0xff1bff2a);
+
+ ATF_CHECK_STREQ("Quick_zephyrs_blow_vexing_daft_Jim_",
+ hid_usage_page(0xff2a));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_page(
+ "Quick_zephyrs_blow_vexing_daft_Jim_"), 0xff2a);
+
+ ATF_CHECK_STREQ("Usage_ID_Zero_%", hid_usage_in_page(0xff2a0000));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
+ "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_Zero_%"),
+ 0xff2a0000);
+
+ //ATF_CHECK_STREQ("Usage_ID_0_%", hid_usage_in_page(0xff2a0000));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
+ "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_0_%"), 0xff2a0000);
+
+ ATF_CHECK_STREQ("Usage_ID_65535_%", hid_usage_in_page(0xff2affff));
+ ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page(
+ "Quick_zephyrs_blow_vexing_daft_Jim_:Usage_ID_65535_%"),
+ 0xff2affff);
+
+ MYx_ATF_CHECK_EQ((uint32_t)hid_parse_usage_in_page("0xff2a:0xff1b"),
+ 0xff2aff1b);
+}
+
+ATF_TC_HEAD(check_hid_logical_range, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test hid_get_item "
+ "Logical Minimum/Maximum results");
+}
+
+ATF_TC_BODY(check_hid_logical_range, tc)
+{
+ report_desc_t hrd;
+ hid_item_t hi;
+ uint32_t minimum, maximum;
+
+ atf_tc_expect_fail("only the 32-bit opcode works, "
+ "8 and 16-bit is broken");
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -128);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 127);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -32768);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 32767);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.logical_minimum, -2147483648);
+ MYd_ATF_CHECK_EQ(hi.logical_maximum, 2147483647);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ unsigned_range_test_report_descriptor,
+ __arraycount(unsigned_range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
+ minimum = (uint32_t)hi.logical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = (uint32_t)hi.logical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 255);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
+ minimum = hi.logical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = hi.logical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 65535);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.logical_minimum > hi.logical_maximum);
+ minimum = hi.logical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = hi.logical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 4294967295);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TC_HEAD(check_hid_physical_range, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test hid_get_item "
+ "Physical Minimum/Maximum results");
+}
+
+ATF_TC_BODY(check_hid_physical_range, tc)
+{
+ report_desc_t hrd;
+ hid_item_t hi;
+ uint32_t minimum, maximum;
+
+ atf_tc_expect_fail("only the 32-bit opcode works, "
+ "8 and 16-bit is broken");
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -128);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 127);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -32768);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 32767);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ MYd_ATF_CHECK_EQ(hi.physical_minimum, -2147483648);
+ MYd_ATF_CHECK_EQ(hi.physical_maximum, 2147483647);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ unsigned_range_test_report_descriptor,
+ __arraycount(unsigned_range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
+ minimum = (uint32_t)hi.physical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = (uint32_t)hi.physical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 255);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
+ minimum = hi.physical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = hi.physical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 65535);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ ATF_CHECK(hi.physical_minimum > hi.physical_maximum);
+ minimum = hi.physical_minimum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(minimum, 0);
+ maximum = hi.physical_maximum & ((1ULL<<hi.report_size)-1);
+ MYu_ATF_CHECK_EQ(maximum, 4294967295);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TC_HEAD(check_hid_get_data, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test hid_get_data results");
+}
+
+ATF_TC_BODY(check_hid_get_data, tc)
+{
+ report_desc_t hrd;
+ hid_item_t hi;
+ int32_t data;
+ uint32_t udat;
+
+ atf_tc_expect_fail("only the 32-bit opcode works, "
+ "8 and 16-bit is broken");
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ data = hid_get_data(range_test_minimum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -128);
+ data = hid_get_data(range_test_negative_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -1);
+ data = hid_get_data(range_test_positive_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 1);
+ data = hid_get_data(range_test_maximum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 127);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ data = hid_get_data(range_test_minimum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -32768);
+ data = hid_get_data(range_test_negative_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -1);
+ data = hid_get_data(range_test_positive_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 1);
+ data = hid_get_data(range_test_maximum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 32767);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ data = hid_get_data(range_test_minimum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -2147483648);
+ data = hid_get_data(range_test_negative_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, -1);
+ data = hid_get_data(range_test_positive_one_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 1);
+ data = hid_get_data(range_test_maximum_report, &hi);
+ MYd_ATF_CHECK_EQ(data, 2147483647);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ unsigned_range_test_report_descriptor,
+ __arraycount(unsigned_range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 0);
+ udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 1);
+ udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 254);
+ udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 255);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 0);
+ udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 1);
+ udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 65534);
+ udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 65535);
+
+ ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ udat = hid_get_data(unsigned_range_test_minimum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 0);
+ udat = hid_get_data(unsigned_range_test_positive_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 1);
+ udat = hid_get_data(unsigned_range_test_negative_one_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 4294967294);
+ udat = hid_get_data(unsigned_range_test_maximum_report, &hi);
+ MYu_ATF_CHECK_EQ(udat, 4294967295);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TC_HEAD(check_hid_set_data, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Test hid_set_data results");
+}
+
+ATF_TC_BODY(check_hid_set_data, tc)
+{
+ report_desc_t hrd;
+ hid_item_t hi;
+ uint8_t test_data_minimum[7];
+ uint8_t test_data_negative_one[7];
+ uint8_t test_data_positive_one[7];
+ uint8_t test_data_maximum[7];
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000001U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, -128);
+ hid_set_data(test_data_negative_one, &hi, -1);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_maximum, &hi, 127);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000002U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, -32768);
+ hid_set_data(test_data_negative_one, &hi, -1);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_maximum, &hi, 32767);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000003U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, -2147483648);
+ hid_set_data(test_data_negative_one, &hi, -1);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_maximum, &hi, 2147483647);
+ ATF_CHECK(memcmp(test_data_minimum, range_test_minimum_report,
+ sizeof test_data_minimum) == 0);
+ ATF_CHECK(memcmp(test_data_negative_one,
+ range_test_negative_one_report,
+ sizeof test_data_negative_one) == 0);
+ ATF_CHECK(memcmp(test_data_positive_one,
+ range_test_positive_one_report,
+ sizeof test_data_positive_one) == 0);
+ ATF_CHECK(memcmp(test_data_maximum, range_test_maximum_report,
+ sizeof test_data_maximum) == 0);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ unsigned_range_test_report_descriptor,
+ __arraycount(range_test_report_descriptor))) != NULL);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000011U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, 0);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_negative_one, &hi, 0xfffffffe);
+ hid_set_data(test_data_maximum, &hi, 0xffffffff);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000012U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, 0);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_negative_one, &hi, 0xfffe);
+ hid_set_data(test_data_maximum, &hi, 0xffff);
+ ATF_REQUIRE(hid_locate(hrd, 0xff000013U, hid_input, &hi,
+ NO_REPORT_ID) > 0);
+ hid_set_data(test_data_minimum, &hi, 0);
+ hid_set_data(test_data_positive_one, &hi, 1);
+ hid_set_data(test_data_negative_one, &hi, 0xfffffffe);
+ hid_set_data(test_data_maximum, &hi, 0xffffffff);
+ ATF_CHECK(memcmp(test_data_minimum,
+ unsigned_range_test_minimum_report,
+ sizeof test_data_minimum) == 0);
+ ATF_CHECK(memcmp(test_data_negative_one,
+ unsigned_range_test_negative_one_report,
+ sizeof test_data_negative_one) == 0);
+ ATF_CHECK(memcmp(test_data_positive_one,
+ unsigned_range_test_positive_one_report,
+ sizeof test_data_positive_one) == 0);
+ ATF_CHECK(memcmp(test_data_maximum,
+ unsigned_range_test_maximum_report,
+ sizeof test_data_maximum) == 0);
+
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TC_HEAD(check_parse_just_pop, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "check Pop on empty stack bug");
+}
+
+ATF_TC_BODY(check_parse_just_pop, tc)
+{
+ report_desc_t hrd;
+ hid_data_t hd;
+ hid_item_t hi;
+
+ ATF_REQUIRE((hrd = hid_use_report_desc(
+ just_pop_report_descriptor,
+ sizeof just_pop_report_descriptor)) != NULL);
+ hd = hid_start_parse(hrd, 0, NO_REPORT_ID);
+ while (hid_get_item(hd, &hi) > 0) {
+ }
+ hid_end_parse(hd);
+ hid_dispose_report_desc(hrd);
+ hrd = NULL;
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, check_hid_logical_range);
+ ATF_TP_ADD_TC(tp, check_hid_physical_range);
+ ATF_TP_ADD_TC(tp, check_hid_usage);
+ ATF_TP_ADD_TC(tp, check_hid_get_data);
+ ATF_TP_ADD_TC(tp, check_hid_set_data);
+ ATF_TP_ADD_TC(tp, check_parse_just_pop);
+
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/lib/libusbhid/test_usb_hid_usages b/contrib/netbsd-tests/lib/libusbhid/test_usb_hid_usages
new file mode 100644
index 0000000..2444ef2
--- /dev/null
+++ b/contrib/netbsd-tests/lib/libusbhid/test_usb_hid_usages
@@ -0,0 +1,17 @@
+# $NetBSD: test_usb_hid_usages,v 1.1 2016/01/01 21:38:54 jakllsch Exp $
+#
+# USB HID usage table (for t_usbhid)
+# Syntax:
+# - lines that do not start with a white space give the number and name of
+# a usage page.
+# - lines that start with a white space give the number and name of
+# a usage with the last given page.
+# If the number is * then the line matches all usages and the name
+# is a printf formatting string that will be given the usage number.
+#
+0xff1b t_usbhid page
+ 0xff2a t_usbhid usage
+
+0xff2a Quick zephyrs blow vexing daft Jim.
+ 0 Usage ID Zero %
+ * Usage ID %u %%
diff --git a/contrib/netbsd-tests/lib/libutil/t_parsedate.c b/contrib/netbsd-tests/lib/libutil/t_parsedate.c
index ec035a6..c78df58 100644
--- a/contrib/netbsd-tests/lib/libutil/t_parsedate.c
+++ b/contrib/netbsd-tests/lib/libutil/t_parsedate.c
@@ -1,6 +1,6 @@
-/* $NetBSD: t_parsedate.c,v 1.7 2013/01/19 15:21:43 apb Exp $ */
+/* $NetBSD: t_parsedate.c,v 1.25 2016/06/22 15:01:38 kre Exp $ */
/*-
- * Copyright (c) 2010 The NetBSD Foundation, Inc.
+ * Copyright (c) 2010, 2015 The NetBSD Foundation, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,14 +29,88 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_parsedate.c,v 1.7 2013/01/19 15:21:43 apb Exp $");
+__RCSID("$NetBSD: t_parsedate.c,v 1.25 2016/06/22 15:01:38 kre Exp $");
#include <atf-c.h>
#include <errno.h>
+#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <util.h>
+/*
+ * ANY is used as a placeholder for values that do not need to be
+ * checked. The actual value is arbitrary. We don't use -1
+ * because some tests might want to use -1 as a literal value.
+ */
+#define ANY -30215
+
+/* parsecheck --
+ * call parsedate(), then call time_to_tm() on the result,
+ * and check that year/month/day/hour/minute/second are as expected.
+ *
+ * time_to_tm should usually be localtime_r or gmtime_r.
+ *
+ * Don't check values specified as ANY.
+ */
+static void
+parsecheck(const char *datestr, const time_t *reftime, const int *zoff,
+ struct tm * time_to_tm(const time_t *, struct tm *),
+ int year, int month, int day, int hour, int minute, int second)
+{
+ time_t t;
+ struct tm tm;
+ char argstr[128];
+
+ /*
+ * printable version of the args.
+ *
+ * Note that printf("%.*d", 0, 0)) prints nothing at all,
+ * while printf("%.*d", 1, val) prints the value as usual.
+ */
+ snprintf(argstr, sizeof(argstr), "%s%s%s, %s%.*jd, %s%.*d",
+ /* NULL or \"<datestr>\" */
+ (datestr ? "\"" : ""),
+ (datestr ? datestr : "NULL"),
+ (datestr ? "\"" : ""),
+ /* NULL or *reftime */
+ (reftime ? "" : "NULL"),
+ (reftime ? 1 : 0),
+ (reftime ? (intmax_t)*reftime : (intmax_t)0),
+ /* NULL or *zoff */
+ (zoff ? "" : "NULL"),
+ (zoff ? 1 : 0),
+ (zoff ? *zoff : 0));
+
+ ATF_CHECK_MSG((t = parsedate(datestr, reftime, zoff)) != -1,
+ "parsedate(%s) returned -1\n", argstr);
+ ATF_CHECK(time_to_tm(&t, &tm) != NULL);
+ if (year != ANY)
+ ATF_CHECK_MSG(tm.tm_year + 1900 == year,
+ "parsedate(%s) expected year %d got %d (+1900)\n",
+ argstr, year, (int)tm.tm_year);
+ if (month != ANY)
+ ATF_CHECK_MSG(tm.tm_mon + 1 == month,
+ "parsedate(%s) expected month %d got %d (+1)\n",
+ argstr, month, (int)tm.tm_mon);
+ if (day != ANY)
+ ATF_CHECK_MSG(tm.tm_mday == day,
+ "parsedate(%s) expected day %d got %d\n",
+ argstr, day, (int)tm.tm_mday);
+ if (hour != ANY)
+ ATF_CHECK_MSG(tm.tm_hour == hour,
+ "parsedate(%s) expected hour %d got %d\n",
+ argstr, hour, (int)tm.tm_hour);
+ if (minute != ANY)
+ ATF_CHECK_MSG(tm.tm_min == minute,
+ "parsedate(%s) expected minute %d got %d\n",
+ argstr, minute, (int)tm.tm_min);
+ if (second != ANY)
+ ATF_CHECK_MSG(tm.tm_sec == second,
+ "parsedate(%s) expected second %d got %d\n",
+ argstr, second, (int)tm.tm_sec);
+}
+
ATF_TC(dates);
ATF_TC_HEAD(dates, tc)
@@ -48,15 +122,34 @@ ATF_TC_HEAD(dates, tc)
ATF_TC_BODY(dates, tc)
{
- ATF_CHECK(parsedate("69-09-10", NULL, NULL) != -1);
- ATF_CHECK(parsedate("2006-11-17", NULL, NULL) != -1);
- ATF_CHECK(parsedate("10/1/2000", NULL, NULL) != -1);
- ATF_CHECK(parsedate("20 Jun 1994", NULL, NULL) != -1);
- ATF_CHECK(parsedate("23jun2001", NULL, NULL) != -1);
- ATF_CHECK(parsedate("1-sep-06", NULL, NULL) != -1);
- ATF_CHECK(parsedate("1/11", NULL, NULL) != -1);
- ATF_CHECK(parsedate("1500-01-02", NULL, NULL) != -1);
- ATF_CHECK(parsedate("9999-12-21", NULL, NULL) != -1);
+ parsecheck("9/10/69", NULL, NULL, localtime_r,
+ 2069, 9, 10, 0, 0, 0); /* year < 70: add 2000 */
+ parsecheck("9/10/70", NULL, NULL, localtime_r,
+ 1970, 9, 10, 0, 0, 0); /* 70 <= year < 100: add 1900 */
+ parsecheck("69-09-10", NULL, NULL, localtime_r,
+ 69, 9, 10, 0, 0, 0); /* ISO8601 year remains unchanged */
+ parsecheck("70-09-10", NULL, NULL, localtime_r,
+ 70, 9, 10, 0, 0, 0); /* ISO8601 year remains unchanged */
+ parsecheck("2006-11-17", NULL, NULL, localtime_r,
+ 2006, 11, 17, 0, 0, 0);
+ parsecheck("10/1/2000", NULL, NULL, localtime_r,
+ 2000, 10, 1, 0, 0, 0); /* month/day/year */
+ parsecheck("20 Jun 1994", NULL, NULL, localtime_r,
+ 1994, 6, 20, 0, 0, 0);
+ parsecheck("97 September 2", NULL, NULL, localtime_r,
+ 1997, 9, 2, 0, 0, 0);
+ parsecheck("23jun2001", NULL, NULL, localtime_r,
+ 2001, 6, 23, 0, 0, 0);
+ parsecheck("1-sep-06", NULL, NULL, localtime_r,
+ 2006, 9, 1, 0, 0, 0);
+ parsecheck("1/11", NULL, NULL, localtime_r,
+ ANY, 1, 11, 0, 0, 0); /* month/day */
+ parsecheck("1500-01-02", NULL, NULL, localtime_r,
+ 1500, 1, 2, 0, 0, 0);
+ parsecheck("9999-12-21", NULL, NULL, localtime_r,
+ 9999, 12, 21, 0, 0, 0);
+ parsecheck("2015.12.07.08.07.35", NULL, NULL, localtime_r,
+ 2015, 12, 7, 8, 7, 35);
}
ATF_TC(times);
@@ -70,10 +163,66 @@ ATF_TC_HEAD(times, tc)
ATF_TC_BODY(times, tc)
{
- ATF_CHECK(parsedate("10:01", NULL, NULL) != -1);
- ATF_CHECK(parsedate("10:12pm", NULL, NULL) != -1);
- ATF_CHECK(parsedate("12:11:01.000012", NULL, NULL) != -1);
- ATF_CHECK(parsedate("12:21-0500", NULL, NULL) != -1);
+ parsecheck("10:01", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 10, 1, 0);
+ parsecheck("10:12pm", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 22, 12, 0);
+ parsecheck("12:11:01.000012", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 12, 11, 1);
+ parsecheck("12:21-0500", NULL, NULL, gmtime_r,
+ ANY, ANY, ANY, 12+5, 21, 0);
+ /* numeric zones not permitted with am/pm ... */
+ parsecheck("7 a.m. ICT", NULL, NULL, gmtime_r,
+ ANY, ANY, ANY, 7-7, 0, 0);
+ parsecheck("midnight", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 0, 0, 0);
+ parsecheck("mn", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 0, 0, 0);
+ parsecheck("noon", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 12, 0, 0);
+}
+
+ATF_TC(dsttimes);
+
+ATF_TC_HEAD(dsttimes, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test DST transition times"
+ " (PR lib/47916)");
+}
+
+ATF_TC_BODY(dsttimes, tc)
+{
+ struct tm tm;
+ time_t t;
+ int tzoff;
+
+ putenv(__UNCONST("TZ=EST"));
+ tzset();
+ parsecheck("12:0", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 12, 0, 0);
+
+ putenv(__UNCONST("TZ=Asia/Tokyo"));
+ tzset();
+ parsecheck("12:0", NULL, NULL, localtime_r,
+ ANY, ANY, ANY, 12, 0, 0);
+
+ /*
+ * When the effective local time is Tue Jul 9 13:21:53 BST 2013,
+ * check mktime("14:00")
+ */
+ putenv(__UNCONST("TZ=Europe/London"));
+ tzset();
+ tm = (struct tm){
+ .tm_year = 2013-1900, .tm_mon = 7-1, .tm_mday = 9,
+ .tm_hour = 13, .tm_min = 21, .tm_sec = 53,
+ .tm_isdst = 0 };
+ t = mktime(&tm);
+ ATF_CHECK(t != (time_t)-1);
+ parsecheck("14:00", &t, NULL, localtime_r,
+ 2013, 7, 9, 14, 0, 0);
+ tzoff = -60; /* British Summer Time */
+ parsecheck("14:00", &t, &tzoff, localtime_r,
+ 2013, 7, 9, 14, 0, 0);
}
ATF_TC(relative);
@@ -86,6 +235,23 @@ ATF_TC_HEAD(relative, tc)
ATF_TC_BODY(relative, tc)
{
+ struct tm tm;
+ time_t now;
+
+#define REL_CHECK(s, now, tm) do { \
+ time_t p, q; \
+ char nb[30], pb[30], qb[30]; \
+ p = parsedate(s, &now, NULL); \
+ q = mktime(&tm); \
+ ATF_CHECK_EQ_MSG(p, q, \
+ "From %jd (%24.24s) using \"%s\", obtained %jd (%24.24s); expected %jd (%24.24s)", \
+ (uintmax_t)now, ctime_r(&now, nb), \
+ s, (uintmax_t)p, ctime_r(&p, pb), (uintmax_t)q, \
+ ctime_r(&q, qb)); \
+ } while (/*CONSTCOND*/0)
+
+#define isleap(yr) (((yr) & 3) == 0 && (((yr) % 100) != 0 || \
+ ((1900+(yr)) % 400) == 0))
ATF_CHECK(parsedate("-1 month", NULL, NULL) != -1);
ATF_CHECK(parsedate("last friday", NULL, NULL) != -1);
@@ -93,6 +259,169 @@ ATF_TC_BODY(relative, tc)
ATF_CHECK(parsedate("this thursday", NULL, NULL) != -1);
ATF_CHECK(parsedate("next sunday", NULL, NULL) != -1);
ATF_CHECK(parsedate("+2 years", NULL, NULL) != -1);
+
+ /*
+ * Test relative to a number of fixed dates. Avoid the
+ * edges of the time_t range to avert under- or overflow
+ * of the relative date, and use a prime step for maximum
+ * coverage of different times of day/week/month/year.
+ */
+ for (now = 0x00FFFFFF; now < 0xFF000000; now += 3777779) {
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mday--;
+ /* "yesterday" leaves time untouched */
+ tm.tm_isdst = -1;
+ REL_CHECK("yesterday", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mday++;
+ /* as does "tomorrow" */
+ tm.tm_isdst = -1;
+ REL_CHECK("tomorrow", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday > 4)
+ tm.tm_mday += 7;
+ tm.tm_mday += 4 - tm.tm_wday;
+ /* if a day name is mentioned, it means midnight (by default) */
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ tm.tm_isdst = -1;
+ REL_CHECK("this thursday", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mday += 14 - (tm.tm_wday ? tm.tm_wday : 7);
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ tm.tm_isdst = -1;
+ REL_CHECK("next sunday", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday <= 5)
+ tm.tm_mday -= 7;
+ tm.tm_mday += 5 - tm.tm_wday;
+ tm.tm_sec = tm.tm_min = 0;
+ tm.tm_hour = 16;
+ tm.tm_isdst = -1;
+ REL_CHECK("last friday 4 p.m.", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mday += 14;
+ if (tm.tm_wday > 3)
+ tm.tm_mday += 7;
+ tm.tm_mday += 3 - tm.tm_wday;
+ tm.tm_sec = tm.tm_min = 0;
+ tm.tm_hour = 3;
+ tm.tm_isdst = -1;
+ REL_CHECK("we fortnight 3 a.m.", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_min -= 5;
+ tm.tm_isdst = -1;
+ REL_CHECK("5 minutes ago", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_hour++;
+ tm.tm_min += 37;
+ tm.tm_isdst = -1;
+ REL_CHECK("97 minutes", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon++;
+ if (tm.tm_mon == 1 &&
+ tm.tm_mday > 28 + isleap(tm.tm_year))
+ tm.tm_mday = 28 + isleap(tm.tm_year);
+ else if ((tm.tm_mon == 3 || tm.tm_mon == 5 ||
+ tm.tm_mon == 8 || tm.tm_mon == 10) && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_isdst = -1;
+ REL_CHECK("month", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon += 2; /* "next" means add 2 ... */
+ if (tm.tm_mon == 13 &&
+ tm.tm_mday > 28 + isleap(tm.tm_year + 1))
+ tm.tm_mday = 28 + isleap(tm.tm_year + 1);
+ else if (tm.tm_mon == 8 && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_isdst = -1;
+ REL_CHECK("next month", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon--;
+ if (tm.tm_mon == 1 &&
+ tm.tm_mday > 28 + isleap(tm.tm_year))
+ tm.tm_mday = 28 + isleap(tm.tm_year);
+ else if ((tm.tm_mon == 3 || tm.tm_mon == 5 ||
+ tm.tm_mon == 8 || tm.tm_mon == 10) && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_isdst = -1;
+ REL_CHECK("last month", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon += 6;
+ if (tm.tm_mon == 13 &&
+ tm.tm_mday > 28 + isleap(tm.tm_year + 1))
+ tm.tm_mday = 28 + isleap(tm.tm_year + 1);
+ else if ((tm.tm_mon == 15 || tm.tm_mon == 17 ||
+ tm.tm_mon == 8 || tm.tm_mon == 10) && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_mday += 2;
+ tm.tm_isdst = -1;
+ REL_CHECK("+6 months 2 days", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_mon -= 9;
+ if (tm.tm_mon == 1 && tm.tm_mday > 28 + isleap(tm.tm_year))
+ tm.tm_mday = 28 + isleap(tm.tm_year);
+ else if ((tm.tm_mon == -9 || tm.tm_mon == -7 ||
+ tm.tm_mon == -2) && tm.tm_mday == 31)
+ tm.tm_mday = 30;
+ tm.tm_isdst = -1;
+ REL_CHECK("9 months ago", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday <= 2)
+ tm.tm_mday -= 7;
+ tm.tm_mday += 2 - tm.tm_wday;
+ tm.tm_isdst = -1;
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ REL_CHECK("1 week ago Tu", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_isdst = -1;
+ tm.tm_mday++;
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ REL_CHECK("midnight tomorrow", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_isdst = -1;
+ tm.tm_mday++;
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ REL_CHECK("tomorrow midnight", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ tm.tm_isdst = -1;
+ tm.tm_mday++;
+ tm.tm_hour = 12;
+ tm.tm_min = tm.tm_sec = 0;
+ REL_CHECK("noon tomorrow", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday > 2)
+ tm.tm_mday += 7;
+ tm.tm_mday += 2 - tm.tm_wday;
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ tm.tm_isdst = -1;
+ REL_CHECK("midnight Tuesday", now, tm);
+
+ ATF_CHECK(localtime_r(&now, &tm) != NULL);
+ if (tm.tm_wday > 2 + 1)
+ tm.tm_mday += 7;
+ tm.tm_mday += 2 - tm.tm_wday;
+ tm.tm_mday++; /* xxx midnight --> the next day */
+ tm.tm_sec = tm.tm_min = tm.tm_hour = 0;
+ tm.tm_isdst = -1;
+ REL_CHECK("Tuesday midnight", now, tm);
+ }
}
ATF_TC(atsecs);
@@ -131,12 +460,124 @@ ATF_TC_BODY(atsecs, tc)
ATF_CHECK(parsedate("@junk", NULL, NULL) == (time_t)-1 && errno != 0);
}
+ATF_TC(zones);
+
+ATF_TC_HEAD(zones, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test parsing dates with zones");
+}
+
+ATF_TC_BODY(zones, tc)
+{
+ parsecheck("2015-12-06 16:11:48 UTC", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 16, 11, 48);
+ parsecheck("2015-12-06 16:11:48 UT", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 16, 11, 48);
+ parsecheck("2015-12-06 16:11:48 GMT", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 16, 11, 48);
+ parsecheck("2015-12-06 16:11:48 +0000", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 16, 11, 48);
+
+ parsecheck("2015-12-06 16:11:48 -0500", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 21, 11, 48);
+ parsecheck("2015-12-06 16:11:48 EST", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 21, 11, 48);
+ parsecheck("2015-12-06 16:11:48 EDT", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 20, 11, 48);
+ parsecheck("2015-12-06 16:11:48 +0500", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 11, 11, 48);
+
+ parsecheck("2015-12-06 16:11:48 +1000", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 6, 11, 48);
+ parsecheck("2015-12-06 16:11:48 AEST", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 6, 11, 48);
+ parsecheck("2015-12-06 16:11:48 -1000", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 2, 11, 48);
+ parsecheck("2015-12-06 16:11:48 HST", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 2, 11, 48);
+
+ parsecheck("2015-12-06 16:11:48 AWST", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 8, 11, 48);
+ parsecheck("2015-12-06 16:11:48 NZDT", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 3, 11, 48);
+
+ parsecheck("Sun, 6 Dec 2015 09:43:16 -0500", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 14, 43, 16);
+ parsecheck("Mon Dec 7 03:13:31 ICT 2015", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 20, 13, 31);
+ /* the day name is ignored when a day of month (etc) is given... */
+ parsecheck("Sat Dec 7 03:13:31 ICT 2015", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 20, 13, 31);
+
+
+ parsecheck("2015-12-06 12:00:00 IDLW", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 0, 0, 0);
+ parsecheck("2015-12-06 12:00:00 IDLE", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 0, 0, 0);
+
+ parsecheck("2015-12-06 21:17:33 NFT", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 0, 47, 33);
+ parsecheck("2015-12-06 21:17:33 ACST", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 11, 47, 33);
+ parsecheck("2015-12-06 21:17:33 +0717", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 14, 0, 33);
+
+ parsecheck("2015-12-06 21:21:21 Z", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 21, 21, 21);
+ parsecheck("2015-12-06 21:21:21 A", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 22, 21, 21);
+ parsecheck("2015-12-06 21:21:21 G", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 4, 21, 21);
+ parsecheck("2015-12-06 21:21:21 M", NULL, NULL, gmtime_r,
+ 2015, 12, 7, 9, 21, 21);
+ parsecheck("2015-12-06 21:21:21 N", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 20, 21, 21);
+ parsecheck("2015-12-06 21:21:21 T", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 14, 21, 21);
+ parsecheck("2015-12-06 21:21:21 Y", NULL, NULL, gmtime_r,
+ 2015, 12, 6, 9, 21, 21);
+
+}
+
+ATF_TC(gibberish);
+
+ATF_TC_HEAD(gibberish, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test (not) parsing nonsense");
+}
+
+ATF_TC_BODY(gibberish, tc)
+{
+ errno = 0;
+ ATF_CHECK(parsedate("invalid nonsense", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("12th day of Christmas", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("2015-31-07 15:00", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("2015-02-29 10:01", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("2015-12-06 24:01", NULL, NULL) == (time_t)-1
+ && errno != 0);
+ errno = 0;
+ ATF_CHECK(parsedate("2015-12-06 14:61", NULL, NULL) == (time_t)-1
+ && errno != 0);
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, dates);
ATF_TP_ADD_TC(tp, times);
+ ATF_TP_ADD_TC(tp, dsttimes);
ATF_TP_ADD_TC(tp, relative);
ATF_TP_ADD_TC(tp, atsecs);
+ ATF_TP_ADD_TC(tp, zones);
+ ATF_TP_ADD_TC(tp, gibberish);
return atf_no_error();
}
+
diff --git a/contrib/netbsd-tests/net/arp/t_arp.sh b/contrib/netbsd-tests/net/arp/t_arp.sh
new file mode 100755
index 0000000..04e2f70
--- /dev/null
+++ b/contrib/netbsd-tests/net/arp/t_arp.sh
@@ -0,0 +1,612 @@
+# $NetBSD: t_arp.sh,v 1.22 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKSRC=unix://commsock1
+SOCKDST=unix://commsock2
+IP4SRC=10.0.1.1
+IP4DST=10.0.1.2
+IP4DST_PROXYARP1=10.0.1.3
+IP4DST_PROXYARP2=10.0.1.4
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=1
+
+atf_test_case arp_cache_expiration_5s cleanup
+atf_test_case arp_cache_expiration_10s cleanup
+atf_test_case arp_command cleanup
+atf_test_case arp_garp cleanup
+atf_test_case arp_cache_overwriting cleanup
+atf_test_case arp_proxy_arp_pub cleanup
+atf_test_case arp_proxy_arp_pubproxy cleanup
+atf_test_case arp_link_activation cleanup
+atf_test_case arp_static cleanup
+
+arp_cache_expiration_5s_head()
+{
+ atf_set "descr" "Tests for ARP cache expiration (5s)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_cache_expiration_10s_head()
+{
+ atf_set "descr" "Tests for ARP cache expiration (10s)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_command_head()
+{
+ atf_set "descr" "Tests for arp_commands of arp(8)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_garp_head()
+{
+ atf_set "descr" "Tests for GARP"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_cache_overwriting_head()
+{
+ atf_set "descr" "Tests for behavior of overwriting ARP caches"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_proxy_arp_pub_head()
+{
+ atf_set "descr" "Tests for Proxy ARP (pub)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_proxy_arp_pubproxy_head()
+{
+ atf_set "descr" "Tests for Proxy ARP (pub proxy)"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_link_activation_head()
+{
+ atf_set "descr" "Tests for activating a new MAC address"
+ atf_set "require.progs" "rump_server"
+}
+
+arp_static_head()
+{
+
+ atf_set "descr" "Tests for static ARP entries"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_dst_server()
+{
+
+ rump_server_add_iface $SOCKDST shmif0 bus1
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4DST/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && rump.arp -n -a
+}
+
+setup_src_server()
+{
+ local keep=$1
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # Adjust ARP parameters
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.arp.keep=$keep
+
+ # Setup an interface
+ rump_server_add_iface $SOCKSRC shmif0 bus1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $IP4SRC/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ # Sanity check
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
+ atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
+}
+
+test_cache_expiration()
+{
+ local arp_keep=$1
+ local bonus=2
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ #
+ # Check if a cache is expired expectedly
+ #
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
+
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
+ # Should be cached
+ atf_check -s exit:0 -o ignore rump.arp -n $IP4DST
+
+ atf_check -s exit:0 sleep $(($arp_keep + $bonus))
+
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -n $IP4SRC
+ # Should be expired
+ atf_check -s not-exit:0 -e ignore rump.arp -n $IP4DST
+}
+
+arp_cache_expiration_5s_body()
+{
+
+ test_cache_expiration 5
+ rump_server_destroy_ifaces
+}
+
+arp_cache_expiration_10s_body()
+{
+
+ test_cache_expiration 10
+ rump_server_destroy_ifaces
+}
+
+arp_command_body()
+{
+ local arp_keep=5
+ local bonus=2
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # We can delete the entry for the interface's IP address
+ atf_check -s exit:0 -o ignore rump.arp -d $IP4SRC
+
+ # Add and delete a static entry
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.10
+ atf_check -s exit:0 -o ignore rump.arp -d 10.0.1.10
+ $DEBUG && rump.arp -n -a
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10
+
+ # Add multiple entries via a file
+ cat - > ./list <<-EOF
+ 10.0.1.11 b2:a0:20:00:00:11
+ 10.0.1.12 b2:a0:20:00:00:12
+ 10.0.1.13 b2:a0:20:00:00:13
+ 10.0.1.14 b2:a0:20:00:00:14
+ 10.0.1.15 b2:a0:20:00:00:15
+ EOF
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -f ./list
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:11' rump.arp -n 10.0.1.11
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.11
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:12' rump.arp -n 10.0.1.12
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.12
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:13' rump.arp -n 10.0.1.13
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.13
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:14' rump.arp -n 10.0.1.14
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.14
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:15' rump.arp -n 10.0.1.15
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n 10.0.1.15
+
+ # Test arp -a
+ atf_check -s exit:0 -o match:'10.0.1.11' rump.arp -n -a
+ atf_check -s exit:0 -o match:'10.0.1.12' rump.arp -n -a
+ atf_check -s exit:0 -o match:'10.0.1.13' rump.arp -n -a
+ atf_check -s exit:0 -o match:'10.0.1.14' rump.arp -n -a
+ atf_check -s exit:0 -o match:'10.0.1.15' rump.arp -n -a
+
+ # Flush all entries
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -d -a
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.11
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.12
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.13
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.14
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.15
+ atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.1
+
+ # Test temp option
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
+ atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10
+
+ # Hm? the cache doesn't expire...
+ atf_check -s exit:0 sleep $(($arp_keep + $bonus))
+ $DEBUG && rump.arp -n -a
+ #atf_check -s not-exit:0 -e ignore rump.arp -n 10.0.1.10
+
+ rump_server_destroy_ifaces
+}
+
+make_pkt_str_arpreq()
+{
+ local target=$1
+ local sender=$2
+ pkt="> ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42:"
+ pkt="$pkt Request who-has $target tell $sender, length 28"
+ echo $pkt
+}
+
+arp_garp_body()
+{
+ local pkt=
+
+ rump_server_start $SOCKSRC
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # Setup an interface
+ rump_server_add_iface $SOCKSRC shmif0 bus1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.1/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.2/24 alias
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ $DEBUG && rump.ifconfig shmif0
+
+ atf_check -s exit:0 sleep 1
+ shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out
+
+ # A GARP packet is sent for the primary address
+ pkt=$(make_pkt_str_arpreq 10.0.0.1 10.0.0.1)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # No GARP packet is sent for the alias address
+ pkt=$(make_pkt_str_arpreq 10.0.0.2 10.0.0.2)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.3/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.4/24 alias
+
+ # No GARP packets are sent during IFF_UP
+ shmif_dumpbus -p - bus1 2>/dev/null| tcpdump -n -e -r - > ./out
+ pkt=$(make_pkt_str_arpreq 10.0.0.3 10.0.0.3)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+ pkt=$(make_pkt_str_arpreq 10.0.0.4 10.0.0.4)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ rump_server_destroy_ifaces
+}
+
+arp_cache_overwriting_body()
+{
+ local arp_keep=5
+ local bonus=2
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # Cannot overwrite a permanent cache
+ atf_check -s not-exit:0 -e match:'File exists' \
+ rump.arp -s $IP4SRC b2:a0:20:00:00:ff
+ $DEBUG && rump.arp -n -a
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4DST
+ $DEBUG && rump.arp -n -a
+ # Can overwrite a dynamic cache
+ atf_check -s exit:0 -o ignore rump.arp -s $IP4DST b2:a0:20:00:00:00
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:00' rump.arp -n $IP4DST
+ atf_check -s exit:0 -o match:'permanent' rump.arp -n $IP4DST
+
+ atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:10 temp
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:10' rump.arp -n 10.0.1.10
+ atf_check -s exit:0 -o not-match:'permanent' rump.arp -n 10.0.1.10
+ # Can overwrite a temp cache
+ atf_check -s exit:0 -o ignore rump.arp -s 10.0.1.10 b2:a0:20:00:00:ff
+ atf_check -s exit:0 -o match:'b2:a0:20:00:00:ff' rump.arp -n 10.0.1.10
+ $DEBUG && rump.arp -n -a
+
+ rump_server_destroy_ifaces
+}
+
+make_pkt_str_arprep()
+{
+ local ip=$1
+ local mac=$2
+ pkt="ethertype ARP (0x0806), length 42: "
+ pkt="Reply $ip is-at $mac, length 28"
+ echo $pkt
+}
+
+make_pkt_str_garp()
+{
+ local ip=$1
+ local mac=$2
+ local pkt=
+ pkt="$mac > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),"
+ pkt="$pkt length 42: Request who-has $ip tell $ip, length 28"
+ echo $pkt
+}
+
+test_proxy_arp()
+{
+ local arp_keep=5
+ local opts= title= flags=
+ local type=$1
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST tap
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1
+ macaddr_dst=$(get_macaddr $SOCKDST shmif0)
+
+ if [ "$type" = "pub" ]; then
+ opts="pub"
+ title="permanent published"
+ else
+ opts="pub proxy"
+ title='permanent published \(proxy only\)'
+ fi
+
+ #
+ # Test#1: First setup an endpoint then create proxy arp entry
+ #
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 rump.ifconfig tap1 create
+ atf_check -s exit:0 rump.ifconfig tap1 $IP4DST_PROXYARP1/24 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ # Try to ping (should fail w/o proxy arp)
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1
+
+ # Flushing
+ extract_new_packets bus1 > ./out
+
+ # Set up proxy ARP entry
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore \
+ rump.arp -s $IP4DST_PROXYARP1 $macaddr_dst $opts
+ atf_check -s exit:0 -o match:"$title" rump.arp -n $IP4DST_PROXYARP1
+
+ # Try to ping
+ export RUMP_SERVER=$SOCKSRC
+ if [ "$type" = "pub" ]; then
+ # XXX fails
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1
+ else
+ atf_check -s exit:0 -o ignore \
+ rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP1
+ fi
+
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ pkt1=$(make_pkt_str_arprep $IP4DST_PROXYARP1 $macaddr_dst)
+ pkt2=$(make_pkt_str_garp $IP4DST_PROXYARP1 $macaddr_dst)
+ if [ "$type" = "pub" ]; then
+ atf_check -s not-exit:0 -x \
+ "cat ./out |grep -q -e '$pkt1' -e '$pkt2'"
+ else
+ atf_check -s exit:0 -x "cat ./out |grep -q -e '$pkt1' -e '$pkt2'"
+ fi
+
+ #
+ # Test#2: Create proxy arp entry then set up an endpoint
+ #
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore \
+ rump.arp -s $IP4DST_PROXYARP2 $macaddr_dst $opts
+ atf_check -s exit:0 -o match:"$title" rump.arp -n $IP4DST_PROXYARP2
+ $DEBUG && rump.netstat -nr -f inet
+
+ # Try to ping (should fail because no endpoint exists)
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP2
+
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # ARP reply should be sent
+ pkt=$(make_pkt_str_arprep $IP4DST_PROXYARP2 $macaddr_dst)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 rump.ifconfig tap2 create
+ atf_check -s exit:0 rump.ifconfig tap2 $IP4DST_PROXYARP2/24 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ # Try to ping
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP4DST_PROXYARP2
+}
+
+arp_proxy_arp_pub_body()
+{
+
+ test_proxy_arp pub
+ rump_server_destroy_ifaces
+}
+
+arp_proxy_arp_pubproxy_body()
+{
+
+ test_proxy_arp pubproxy
+ rump_server_destroy_ifaces
+}
+
+arp_link_activation_body()
+{
+ local arp_keep=5
+ local bonus=2
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ # flush old packets
+ extract_new_packets bus1 > ./out
+
+ export RUMP_SERVER=$SOCKSRC
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
+ b2:a1:00:00:00:01
+
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ pkt=$(make_pkt_str_arpreq $IP4SRC $IP4SRC)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
+ b2:a1:00:00:00:02 active
+
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ pkt=$(make_pkt_str_arpreq $IP4SRC $IP4SRC)
+ atf_check -s exit:0 -x \
+ "cat ./out |grep '$pkt' |grep -q 'b2:a1:00:00:00:02'"
+
+ rump_server_destroy_ifaces
+}
+
+arp_static_body()
+{
+ local arp_keep=5
+ local macaddr_src=
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKDST
+
+ setup_dst_server
+ setup_src_server $arp_keep
+
+ macaddr_src=$(get_macaddr $SOCKSRC shmif0)
+
+ # Set a (valid) static ARP entry for the src server
+ export RUMP_SERVER=$SOCKDST
+ $DEBUG && rump.arp -n -a
+ atf_check -s exit:0 -o ignore rump.arp -s $IP4SRC $macaddr_src
+ $DEBUG && rump.arp -n -a
+
+ # Test receiving an ARP request with the static ARP entry (as spa/sha)
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 $IP4DST
+
+ rump_server_destroy_ifaces
+}
+
+arp_cache_expiration_5s_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_cache_expiration_10s_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_command_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_garp_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_cache_overwriting_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_proxy_arp_pub_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_proxy_arp_pubproxy_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_link_activation_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+arp_static_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case arp_cache_expiration_5s
+ atf_add_test_case arp_cache_expiration_10s
+ atf_add_test_case arp_command
+ atf_add_test_case arp_garp
+ atf_add_test_case arp_cache_overwriting
+ atf_add_test_case arp_proxy_arp_pub
+ atf_add_test_case arp_proxy_arp_pubproxy
+ atf_add_test_case arp_link_activation
+ atf_add_test_case arp_static
+}
diff --git a/contrib/netbsd-tests/net/arp/t_dad.sh b/contrib/netbsd-tests/net/arp/t_dad.sh
new file mode 100755
index 0000000..57a7d4b0
--- /dev/null
+++ b/contrib/netbsd-tests/net/arp/t_dad.sh
@@ -0,0 +1,201 @@
+# $NetBSD: t_dad.sh,v 1.13 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKLOCAL=unix://commsock1
+SOCKPEER=unix://commsock2
+
+DEBUG=${DEBUG:-false}
+
+atf_test_case dad_basic cleanup
+atf_test_case dad_duplicated cleanup
+
+dad_basic_head()
+{
+ atf_set "descr" "Tests for IPv4 DAD basic behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+dad_duplicated_head()
+{
+ atf_set "descr" "Tests for IPv4 DAD duplicated state"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_server()
+{
+ local sock=$1
+ local ip=$2
+
+ rump_server_add_iface $sock shmif0 bus1
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $ip/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+}
+
+make_pkt_str()
+{
+ local target=$1
+ local sender=$2
+ pkt="> ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42:"
+ pkt="$pkt Request who-has $target tell $sender, length 28"
+ echo $pkt
+}
+
+dad_basic_body()
+{
+ local pkt=
+
+ rump_server_start $SOCKLOCAL
+ rump_server_add_iface $SOCKLOCAL shmif0 bus1
+
+ export RUMP_SERVER=$SOCKLOCAL
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.1/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.2/24 alias
+ $DEBUG && rump.ifconfig shmif0
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ rump.ifconfig shmif0 > ./out
+ $DEBUG && cat ./out
+
+ # The primary address doesn't start with tentative state
+ atf_check -s not-exit:0 -x "cat ./out |grep 10.0.0.1 |grep -iq tentative"
+ # The alias address starts with tentative state
+ # XXX we have no stable way to check this, so skip for now
+ #atf_check -s exit:0 -x "cat ./out |grep 10.0.0.2 |grep -iq tentative"
+
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # Check DAD probe packets
+ pkt=$(make_pkt_str 10.0.0.2 0.0.0.0)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # No DAD for the primary address
+ pkt=$(make_pkt_str 10.0.0.1 0.0.0.0)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 10
+ # Give a chance to send a DAD announce packet
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # Check the DAD announce packet
+ pkt=$(make_pkt_str 10.0.0.2 10.0.0.2)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # The alias address left tentative
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep 10.0.0.2 |grep -iq tentative"
+
+ #
+ # Add a new address on the fly
+ #
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.0.3/24 alias
+
+ # The new address starts with tentative state
+ # XXX we have no stable way to check this, so skip for now
+ #atf_check -s exit:0 -x "rump.ifconfig shmif0 |grep 10.0.0.3 |grep -iq tentative"
+
+ # Check DAD probe packets
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+ pkt=$(make_pkt_str 10.0.0.3 0.0.0.0)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 10
+ # Give a chance to send a DAD announce packet
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # Check the DAD announce packet
+ pkt=$(make_pkt_str 10.0.0.3 10.0.0.3)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # The new address left tentative
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep 10.0.0.3 |grep -iq tentative"
+
+ rump_server_destroy_ifaces
+}
+
+dad_duplicated_body()
+{
+ local localip1=10.0.1.1
+ local localip2=10.0.1.11
+ local peerip=10.0.1.2
+
+ rump_server_start $SOCKLOCAL
+ rump_server_start $SOCKPEER
+
+ setup_server $SOCKLOCAL $localip1
+ setup_server $SOCKPEER $peerip
+
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # The primary address isn't marked as duplicated
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip1 |grep -iq duplicated"
+
+ #
+ # Add a new address duplicated with the peer server
+ #
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $peerip alias
+ atf_check -s exit:0 sleep 1
+
+ # The new address is marked as duplicated
+ atf_check -s exit:0 -x "rump.ifconfig shmif0 |grep $peerip |grep -iq duplicated"
+
+ # A unique address isn't marked as duplicated
+ atf_check -s exit:0 rump.ifconfig shmif0 inet $localip2 alias
+ atf_check -s exit:0 sleep 1
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip2 |grep -iq duplicated"
+
+ rump_server_destroy_ifaces
+}
+
+dad_basic_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+dad_duplicated_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case dad_basic
+ atf_add_test_case dad_duplicated
+}
diff --git a/contrib/netbsd-tests/net/bpfilter/t_bpfilter.c b/contrib/netbsd-tests/net/bpfilter/t_bpfilter.c
index 9d8d56f..460b43e 100644
--- a/contrib/netbsd-tests/net/bpfilter/t_bpfilter.c
+++ b/contrib/netbsd-tests/net/bpfilter/t_bpfilter.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_bpfilter.c,v 1.8 2014/06/24 11:32:36 alnsn Exp $ */
+/* $NetBSD: t_bpfilter.c,v 1.10 2015/02/11 23:39:07 alnsn Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -25,7 +25,7 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_bpfilter.c,v 1.8 2014/06/24 11:32:36 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfilter.c,v 1.10 2015/02/11 23:39:07 alnsn Exp $");
#include <sys/param.h>
#include <sys/ioctl.h>
@@ -115,6 +115,21 @@ static struct bpf_insn noinitX_prog[] = {
BPF_STMT(BPF_RET+BPF_A, 0),
};
+static struct bpf_insn badjmp_prog[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 5),
+ BPF_STMT(BPF_RET+BPF_A, 0),
+};
+
+static struct bpf_insn negjmp_prog[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 0),
+ BPF_STMT(BPF_JMP+BPF_JA, UINT32_MAX - 1), // -2
+ BPF_STMT(BPF_RET+BPF_A, 0),
+};
+
+static struct bpf_insn badret_prog[] = {
+ BPF_STMT(BPF_RET+BPF_A+0x8000, 0),
+};
+
static uint16_t
in_cksum(void *data, size_t len)
{
@@ -387,6 +402,70 @@ ATF_TC_BODY(bpfilternoinitX, tc)
RL(send_bpf_prog("bpfilternoinitX", &prog));
}
+ATF_TC(bpfilterbadjmp);
+ATF_TC_HEAD(bpfilterbadjmp, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Checks that bpf program that "
+ "jumps to invalid destination is rejected by the kernel");
+ atf_tc_set_md_var(tc, "timeout", "30");
+}
+
+ATF_TC_BODY(bpfilterbadjmp, tc)
+{
+ struct bpf_program prog;
+
+ prog.bf_len = __arraycount(badjmp_prog);
+ prog.bf_insns = badjmp_prog;
+ ATF_CHECK_ERRNO(EINVAL, send_bpf_prog("bpfilterbadjmp", &prog) == -1);
+}
+
+ATF_TC(bpfilternegjmp);
+ATF_TC_HEAD(bpfilternegjmp, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Checks that bpf program that "
+ "jumps backwards is rejected by the kernel");
+ atf_tc_set_md_var(tc, "timeout", "30");
+}
+
+ATF_TC_BODY(bpfilternegjmp, tc)
+{
+ struct bpf_program prog;
+
+ prog.bf_len = __arraycount(negjmp_prog);
+ prog.bf_insns = negjmp_prog;
+ ATF_CHECK_ERRNO(EINVAL, send_bpf_prog("bpfilternegjmp", &prog) == -1);
+}
+
+ATF_TC(bpfilterbadret);
+ATF_TC_HEAD(bpfilterbadret, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "Checks that bpf program that "
+ "ends with invalid BPF_RET instruction is rejected by the kernel");
+ atf_tc_set_md_var(tc, "timeout", "30");
+}
+
+ATF_TC_BODY(bpfilterbadret, tc)
+{
+ struct bpf_program prog;
+ struct bpf_insn *last;
+
+ prog.bf_len = __arraycount(badret_prog);
+ prog.bf_insns = badret_prog;
+
+ /*
+ * The point of this test is checking a bad instruction of
+ * a valid class and with a valid BPF_RVAL data.
+ */
+ last = &prog.bf_insns[prog.bf_len - 1];
+ ATF_CHECK(BPF_CLASS(last->code) == BPF_RET &&
+ (BPF_RVAL(last->code) == BPF_K || BPF_RVAL(last->code) == BPF_A));
+
+ ATF_CHECK_ERRNO(EINVAL, send_bpf_prog("bpfilterbadret", &prog) == -1);
+}
+
ATF_TP_ADD_TCS(tp)
{
@@ -395,6 +474,9 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfilterbadmem);
ATF_TP_ADD_TC(tp, bpfilternoinitA);
ATF_TP_ADD_TC(tp, bpfilternoinitX);
+ ATF_TP_ADD_TC(tp, bpfilterbadjmp);
+ ATF_TP_ADD_TC(tp, bpfilternegjmp);
+ ATF_TP_ADD_TC(tp, bpfilterbadret);
return atf_no_error();
}
diff --git a/contrib/netbsd-tests/net/bpfjit/t_bpfjit.c b/contrib/netbsd-tests/net/bpfjit/t_bpfjit.c
index a9f8f41..58db1e0 100644
--- a/contrib/netbsd-tests/net/bpfjit/t_bpfjit.c
+++ b/contrib/netbsd-tests/net/bpfjit/t_bpfjit.c
@@ -1,7 +1,7 @@
-/* $NetBSD: t_bpfjit.c,v 1.2 2014/07/08 21:44:26 alnsn Exp $ */
+/* $NetBSD: t_bpfjit.c,v 1.11 2015/02/14 22:34:33 alnsn Exp $ */
/*-
- * Copyright (c) 2011-2012, 2014 Alexander Nasonov.
+ * Copyright (c) 2011-2012, 2014-2015 Alexander Nasonov.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_bpfjit.c,v 1.2 2014/07/08 21:44:26 alnsn Exp $");
+__RCSID("$NetBSD: t_bpfjit.c,v 1.11 2015/02/14 22:34:33 alnsn Exp $");
#include <sys/param.h>
#include <sys/mbuf.h>
@@ -79,15 +79,73 @@ ATF_TC_HEAD(bpfjit_empty, tc)
ATF_TC_BODY(bpfjit_empty, tc)
{
struct bpf_insn dummy;
- bpfjit_func_t fn;
+ bpfjit_func_t code;
RZ(rump_init());
+ ATF_CHECK(!prog_validate(&dummy, 0));
+
rump_schedule();
- fn = rumpns_bpfjit_generate_code(NULL, &dummy, 0);
+ code = rumpns_bpfjit_generate_code(NULL, &dummy, 0);
rump_unschedule();
- ATF_CHECK(fn == NULL);
+ ATF_CHECK(code == NULL);
+}
+
+ATF_TC(bpfjit_ret_k);
+ATF_TC_HEAD(bpfjit_ret_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of a trivial bpf program");
+}
+
+ATF_TC_BODY(bpfjit_ret_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_RET+BPF_K, 17)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 17);
+}
+
+ATF_TC(bpfjit_bad_ret_k);
+ATF_TC_HEAD(bpfjit_bad_ret_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test that JIT compilation of a program with bad BPF_RET fails");
+}
+
+ATF_TC_BODY(bpfjit_bad_ret_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_RET+BPF_K+0x8000, 13)
+ };
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ /*
+ * The point of this test is checking a bad instruction of
+ * a valid class and with a valid BPF_RVAL data.
+ */
+ const uint16_t rcode = insns[0].code;
+ ATF_CHECK(BPF_CLASS(rcode) == BPF_RET &&
+ (BPF_RVAL(rcode) == BPF_K || BPF_RVAL(rcode) == BPF_A));
+
+ RZ(rump_init());
+
+ ATF_CHECK(!prog_validate(insns, insn_count));
+
+ /* Current implementation generates code. */
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 13);
}
ATF_TC(bpfjit_alu_add_k);
@@ -364,6 +422,205 @@ ATF_TC_BODY(bpfjit_alu_div80000000_k, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
}
+ATF_TC(bpfjit_alu_mod0_k);
+ATF_TC_HEAD(bpfjit_alu_mod0_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod0_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ //ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod1_k);
+ATF_TC_HEAD(bpfjit_alu_mod1_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=1");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod1_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 1),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod2_k);
+ATF_TC_HEAD(bpfjit_alu_mod2_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=2");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod2_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 2),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
+}
+
+ATF_TC(bpfjit_alu_mod4_k);
+ATF_TC_HEAD(bpfjit_alu_mod4_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=4");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod4_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 4),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3);
+}
+
+ATF_TC(bpfjit_alu_mod10_k);
+ATF_TC_HEAD(bpfjit_alu_mod10_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod10_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 9);
+}
+
+ATF_TC(bpfjit_alu_mod10000_k);
+ATF_TC_HEAD(bpfjit_alu_mod10000_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=10000");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod10000_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, 10000),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3849);
+}
+
+ATF_TC(bpfjit_alu_mod7609801_k);
+ATF_TC_HEAD(bpfjit_alu_mod7609801_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=7609801");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod7609801_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(7609801)),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3039531);
+}
+
+ATF_TC(bpfjit_alu_mod80000000_k);
+ATF_TC_HEAD(bpfjit_alu_mod80000000_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_K with k=0x80000000");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod80000000_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_K, UINT32_C(0x80000000)),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == UINT32_C(0x7fffffde));
+}
+
ATF_TC(bpfjit_alu_and_k);
ATF_TC_HEAD(bpfjit_alu_and_k, tc)
{
@@ -414,6 +671,31 @@ ATF_TC_BODY(bpfjit_alu_or_k, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
}
+ATF_TC(bpfjit_alu_xor_k);
+ATF_TC_HEAD(bpfjit_alu_xor_k, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_K");
+}
+
+ATF_TC_BODY(bpfjit_alu_xor_k, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+ BPF_STMT(BPF_ALU+BPF_XOR+BPF_K, 0x0000b1e0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
+}
+
ATF_TC(bpfjit_alu_lsh_k);
ATF_TC_HEAD(bpfjit_alu_lsh_k, tc)
{
@@ -852,7 +1134,7 @@ ATF_TC_HEAD(bpfjit_alu_div80000000_x, tc)
ATF_TC_BODY(bpfjit_alu_div80000000_x, tc)
{
static struct bpf_insn insns[] = {
- BPF_STMT(BPF_LD+BPF_IMM, UINT32_MAX - 33),
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
BPF_STMT(BPF_ALU+BPF_DIV+BPF_X, 0),
BPF_STMT(BPF_RET+BPF_A, 0)
@@ -868,6 +1150,213 @@ ATF_TC_BODY(bpfjit_alu_div80000000_x, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
}
+ATF_TC(bpfjit_alu_mod0_x);
+ATF_TC_HEAD(bpfjit_alu_mod0_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod0_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod1_x);
+ATF_TC_HEAD(bpfjit_alu_mod1_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=1");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod1_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 1),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0);
+}
+
+ATF_TC(bpfjit_alu_mod2_x);
+ATF_TC_HEAD(bpfjit_alu_mod2_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=2");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod2_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 7),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 2),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 1);
+}
+
+ATF_TC(bpfjit_alu_mod4_x);
+ATF_TC_HEAD(bpfjit_alu_mod4_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=4");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod4_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffff)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 4),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3);
+}
+
+ATF_TC(bpfjit_alu_mod10_x);
+ATF_TC_HEAD(bpfjit_alu_mod10_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod10_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 9);
+}
+
+ATF_TC(bpfjit_alu_mod10000_x);
+ATF_TC_HEAD(bpfjit_alu_mod10000_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=10000");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod10000_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294843849)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 10000),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3849);
+}
+
+ATF_TC(bpfjit_alu_mod7609801_x);
+ATF_TC_HEAD(bpfjit_alu_mod7609801_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=7609801");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod7609801_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(4294967295)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(7609801)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 3039531);
+}
+
+ATF_TC(bpfjit_alu_mod80000000_x);
+ATF_TC_HEAD(bpfjit_alu_mod80000000_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_MOD+BPF_X with X=0x80000000");
+}
+
+ATF_TC_BODY(bpfjit_alu_mod80000000_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, UINT32_C(0xffffffde)),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, UINT32_C(0x80000000)),
+ BPF_STMT(BPF_ALU+BPF_MOD+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == UINT32_C(0x7fffffde));
+}
+
ATF_TC(bpfjit_alu_and_x);
ATF_TC_HEAD(bpfjit_alu_and_x, tc)
{
@@ -920,6 +1409,32 @@ ATF_TC_BODY(bpfjit_alu_or_x, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
}
+ATF_TC(bpfjit_alu_xor_x);
+ATF_TC_HEAD(bpfjit_alu_xor_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test JIT compilation of BPF_ALU+BPF_XOR+BPF_X");
+}
+
+ATF_TC_BODY(bpfjit_alu_xor_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_IMM, 0xdead0f0f),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 0x0000b1e0),
+ BPF_STMT(BPF_ALU+BPF_XOR+BPF_X, 0),
+ BPF_STMT(BPF_RET+BPF_A, 0)
+ };
+
+ uint8_t pkt[1]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+ ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == 0xdeadbeef);
+}
+
ATF_TC(bpfjit_alu_lsh_x);
ATF_TC_HEAD(bpfjit_alu_lsh_x, tc)
{
@@ -1155,6 +1670,66 @@ ATF_TC_BODY(bpfjit_jmp_ja, tc)
ATF_CHECK(exec_prog(insns, insn_count, pkt, 1) == UINT32_MAX);
}
+ATF_TC(bpfjit_jmp_ja_invalid);
+ATF_TC_HEAD(bpfjit_jmp_ja_invalid, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test BPF_JMP+BPF_JA to invalid destination");
+}
+
+ATF_TC_BODY(bpfjit_jmp_ja_invalid, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 4),
+ BPF_STMT(BPF_RET+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_K, 1),
+ BPF_STMT(BPF_RET+BPF_K, 2),
+ BPF_STMT(BPF_RET+BPF_K, 3),
+ };
+
+ bpfjit_func_t code;
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(!prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_CHECK(code == NULL);
+}
+
+ATF_TC(bpfjit_jmp_ja_overflow);
+ATF_TC_HEAD(bpfjit_jmp_ja_overflow, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test BPF_JMP+BPF_JA with negative offset");
+}
+
+ATF_TC_BODY(bpfjit_jmp_ja_overflow, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_JMP+BPF_JA, 1),
+ BPF_STMT(BPF_RET+BPF_K, 777),
+ BPF_STMT(BPF_JMP+BPF_JA, UINT32_MAX - 1), // -2
+ BPF_STMT(BPF_RET+BPF_K, 0)
+ };
+
+ bpfjit_func_t code;
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ /* Jumps with negative offsets work only in userspace. */
+ ATF_CHECK(!prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_CHECK(code == NULL);
+}
+
ATF_TC(bpfjit_jmp_jgt_k);
ATF_TC_HEAD(bpfjit_jmp_jgt_k, tc)
{
@@ -1574,26 +2149,26 @@ ATF_TC_BODY(bpfjit_jmp_jeq_x, tc)
BPF_STMT(BPF_LD+BPF_W+BPF_LEN, 0),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 8),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
- BPF_STMT(BPF_RET+BPF_K, 0),
+ BPF_STMT(BPF_RET+BPF_K, 1),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 3),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 0),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 9),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
- BPF_STMT(BPF_RET+BPF_K, 1),
- BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 1),
BPF_STMT(BPF_RET+BPF_K, 2),
+ BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 5),
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 3),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 7),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 2, 3),
- BPF_STMT(BPF_RET+BPF_K, 3),
BPF_STMT(BPF_RET+BPF_K, 4),
BPF_STMT(BPF_RET+BPF_K, 5),
+ BPF_STMT(BPF_RET+BPF_K, 6),
BPF_STMT(BPF_LDX+BPF_W+BPF_IMM, 6),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 3, 1),
- BPF_STMT(BPF_RET+BPF_K, 6),
- BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 1, 0, 0),
BPF_STMT(BPF_RET+BPF_K, 7),
- BPF_STMT(BPF_RET+BPF_K, 8)
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 1, 0),
+ BPF_STMT(BPF_RET+BPF_K, 8),
+ BPF_STMT(BPF_RET+BPF_K, 9)
};
bpfjit_func_t code;
@@ -1610,14 +2185,14 @@ ATF_TC_BODY(bpfjit_jmp_jeq_x, tc)
rump_unschedule();
ATF_REQUIRE(code != NULL);
- ATF_CHECK(jitcall(code, pkt, 1, 1) == 7);
- ATF_CHECK(jitcall(code, pkt, 2, 2) == 7);
- ATF_CHECK(jitcall(code, pkt, 3, 3) == 1);
- ATF_CHECK(jitcall(code, pkt, 4, 4) == 7);
- ATF_CHECK(jitcall(code, pkt, 5, 5) == 7);
- ATF_CHECK(jitcall(code, pkt, 6, 6) == 8);
- ATF_CHECK(jitcall(code, pkt, 7, 7) == 5);
- ATF_CHECK(jitcall(code, pkt, 8, 8) == 0);
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 8);
+ ATF_CHECK(jitcall(code, pkt, 2, 2) == 8);
+ ATF_CHECK(jitcall(code, pkt, 3, 3) == 2);
+ ATF_CHECK(jitcall(code, pkt, 4, 4) == 8);
+ ATF_CHECK(jitcall(code, pkt, 5, 5) == 3);
+ ATF_CHECK(jitcall(code, pkt, 6, 6) == 9);
+ ATF_CHECK(jitcall(code, pkt, 7, 7) == 6);
+ ATF_CHECK(jitcall(code, pkt, 8, 8) == 1);
rump_schedule();
rumpns_bpfjit_free_code(code);
@@ -1687,6 +2262,116 @@ ATF_TC_BODY(bpfjit_jmp_jset_x, tc)
rump_unschedule();
}
+ATF_TC(bpfjit_jmp_jeq_x_noinit_ax);
+ATF_TC_HEAD(bpfjit_jmp_jeq_x_noinit_ax, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised A and X");
+}
+
+ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_ax, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 10);
+
+ rump_schedule();
+ rumpns_bpfjit_free_code(code);
+ rump_unschedule();
+}
+
+ATF_TC(bpfjit_jmp_jeq_x_noinit_a);
+ATF_TC_HEAD(bpfjit_jmp_jeq_x_noinit_a, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised A");
+}
+
+ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_a, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LDX+BPF_W+BPF_LEN, 0), /* X > 0 */
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+ rump_schedule();
+ rumpns_bpfjit_free_code(code);
+ rump_unschedule();
+}
+
+ATF_TC(bpfjit_jmp_jeq_x_noinit_x);
+ATF_TC_HEAD(bpfjit_jmp_jeq_x_noinit_x, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Test JIT compilation "
+ "of BPF_JMP+BPF_EQ+BPF_X with uninitialised X");
+}
+
+ATF_TC_BODY(bpfjit_jmp_jeq_x_noinit_x, tc)
+{
+ static struct bpf_insn insns[] = {
+ BPF_STMT(BPF_LD+BPF_LEN, 0), /* A > 0 */
+ BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_X, 0, 0, 1),
+ BPF_STMT(BPF_RET+BPF_K, 10),
+ BPF_STMT(BPF_RET+BPF_K, 11)
+ };
+
+ bpfjit_func_t code;
+ uint8_t pkt[8]; /* the program doesn't read any data */
+
+ size_t insn_count = sizeof(insns) / sizeof(insns[0]);
+
+ RZ(rump_init());
+
+ ATF_CHECK(prog_validate(insns, insn_count));
+
+ rump_schedule();
+ code = rumpns_bpfjit_generate_code(NULL, insns, insn_count);
+ rump_unschedule();
+ ATF_REQUIRE(code != NULL);
+
+ ATF_CHECK(jitcall(code, pkt, 1, 1) == 11);
+
+ rump_schedule();
+ rumpns_bpfjit_free_code(code);
+ rump_unschedule();
+}
+
ATF_TC(bpfjit_jmp_modulo_x);
ATF_TC_HEAD(bpfjit_jmp_modulo_x, tc)
{
@@ -3887,6 +4572,8 @@ ATF_TP_ADD_TCS(tp)
* to ../../lib/libbpfjit/t_bpfjit.c
*/
ATF_TP_ADD_TC(tp, bpfjit_empty);
+ ATF_TP_ADD_TC(tp, bpfjit_ret_k);
+ ATF_TP_ADD_TC(tp, bpfjit_bad_ret_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_add_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_sub_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_mul_k);
@@ -3898,8 +4585,17 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfjit_alu_div10000_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_div7609801_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_div80000000_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod0_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod1_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod2_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod4_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod10_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod10000_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod7609801_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod80000000_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_and_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_or_k);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_xor_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_lsh_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_lsh0_k);
ATF_TP_ADD_TC(tp, bpfjit_alu_rsh_k);
@@ -3916,8 +4612,17 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfjit_alu_div10000_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_div7609801_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_div80000000_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod0_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod1_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod2_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod4_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod10_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod10000_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod7609801_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_mod80000000_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_and_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_or_x);
+ ATF_TP_ADD_TC(tp, bpfjit_alu_xor_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_lsh_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_lsh0_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_rsh_x);
@@ -3925,6 +4630,8 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfjit_alu_modulo_x);
ATF_TP_ADD_TC(tp, bpfjit_alu_neg);
ATF_TP_ADD_TC(tp, bpfjit_jmp_ja);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_ja_invalid);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_ja_overflow);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jgt_k);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_k);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_k);
@@ -3934,6 +4641,9 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, bpfjit_jmp_jge_x);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x);
ATF_TP_ADD_TC(tp, bpfjit_jmp_jset_x);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_ax);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_a);
+ ATF_TP_ADD_TC(tp, bpfjit_jmp_jeq_x_noinit_x);
ATF_TP_ADD_TC(tp, bpfjit_jmp_modulo_x);
ATF_TP_ADD_TC(tp, bpfjit_ld_abs);
ATF_TP_ADD_TC(tp, bpfjit_ld_abs_k_overflow);
diff --git a/contrib/netbsd-tests/net/icmp/t_forward.c b/contrib/netbsd-tests/net/icmp/t_forward.c
index d0c23cc..d418027 100644
--- a/contrib/netbsd-tests/net/icmp/t_forward.c
+++ b/contrib/netbsd-tests/net/icmp/t_forward.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_forward.c,v 1.8 2012/03/18 09:46:50 jruoho Exp $ */
+/* $NetBSD: t_forward.c,v 1.9 2015/02/26 13:03:21 martin Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: t_forward.c,v 1.8 2012/03/18 09:46:50 jruoho Exp $");
+__RCSID("$NetBSD: t_forward.c,v 1.9 2015/02/26 13:03:21 martin Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -129,7 +129,7 @@ ATF_TC_HEAD(returndatabytes, tc)
atf_tc_set_md_var(tc, "descr", "icmp.returndatabytes with certain "
"packets can cause kernel panic (PR kern/43548)");
- atf_tc_set_md_var(tc, "timeout", "4"); /* just in case */
+ atf_tc_set_md_var(tc, "timeout", "20"); /* just in case */
}
ATF_TC_BODY(returndatabytes, tc)
diff --git a/contrib/netbsd-tests/net/icmp/t_icmp6_redirect.sh b/contrib/netbsd-tests/net/icmp/t_icmp6_redirect.sh
new file mode 100755
index 0000000..5dcdc9c
--- /dev/null
+++ b/contrib/netbsd-tests/net/icmp/t_icmp6_redirect.sh
@@ -0,0 +1,152 @@
+# $NetBSD: t_icmp6_redirect.sh,v 1.7 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+SOCK_PEER=unix://commsock2
+SOCK_GW1=unix://commsock3
+SOCK_GW2=unix://commsock4
+
+BUS1=bus1
+BUS2=bus2
+IP6BUS1=fc00:1::/64
+IP6BUS2=fc00:2::/64
+IP6IF0_LOCAL=fc00:1::2
+IP6IF0_PEER=fc00:2::2
+IP6IF0_GW1=fc00:1::1
+IP6IF1_GW1=fc00:2::1
+IP6IF0_GW2=fc00:1::3
+
+REDIRECT_TIMEOUT=5
+
+DEBUG=${DEBUG:-true}
+
+atf_test_case icmp6_redirect_basic cleanup
+
+icmp6_redirect_basic_head()
+{
+
+ atf_set "descr" "Test for the basically function of the ICMP6 redirect"
+ atf_set "require.progs" "rump_server rump.route rump.ping rump.ifconfig"
+}
+
+icmp6_redirect_basic_body()
+{
+ local gw1_lladdr0=
+ local gw1_lladdr1=
+ local gw2_lladdr0=
+
+ rump_server_start $SOCK_LOCAL netinet6
+ rump_server_start $SOCK_PEER netinet6
+ rump_server_start $SOCK_GW1 netinet6
+ rump_server_start $SOCK_GW2 netinet6
+
+ #
+ # Setup
+ #
+ # Setup gateway #1 (real gateway)
+ export RUMP_SERVER=${SOCK_GW1}
+ rump_server_add_iface $SOCK_GW1 shmif0 $BUS1
+ rump_server_add_iface $SOCK_GW1 shmif1 $BUS2
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_GW1}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6IF1_GW1}
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w \
+ net.inet6.ip6.forwarding=1
+ unset RUMP_SERVER
+
+ gw1_lladdr0=`get_linklocal_addr ${SOCK_GW1} shmif0`
+ gw1_lladdr1=`get_linklocal_addr ${SOCK_GW1} shmif1`
+
+ # Setup a peer behind gateway #1
+ export RUMP_SERVER=${SOCK_PEER}
+ rump_server_add_iface $SOCK_PEER shmif0 $BUS2
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_PEER}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.route add \
+ -inet6 default ${gw1_lladdr1}%shmif0
+ unset RUMP_SERVER
+
+ # Setup gateway #2 (fake gateway)
+ export RUMP_SERVER=${SOCK_GW2}
+ rump_server_add_iface $SOCK_GW2 shmif0 $BUS1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_GW2}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore rump.route add \
+ -inet6 ${IP6BUS2} ${gw1_lladdr0}%shmif0
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w \
+ net.inet6.ip6.forwarding=1
+ unset RUMP_SERVER
+
+ gw2_lladdr0=`get_linklocal_addr ${SOCK_GW2} shmif0`
+
+ export RUMP_SERVER=${SOCK_LOCAL}
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6IF0_LOCAL}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ # Teach the fake gateway as the default gateway
+ atf_check -s exit:0 -o ignore rump.route add \
+ -inet6 default ${gw2_lladdr0}%shmif0
+ $DEBUG && rump.route get -inet6 ${IP6IF0_PEER}
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet6.icmp6.redirtimeout=$REDIRECT_TIMEOUT
+
+ #
+ # Tests
+ #
+ atf_check -s exit:0 -o ignore rump.ping6 -c 1 -n ${IP6IF0_PEER}
+ $DEBUG && rump.route show -inet6
+ # Check if a created route is correctly redirected to gateway #1
+ atf_check -s exit:0 -o match:"gateway: ${gw1_lladdr0}" rump.route get \
+ -inet6 ${IP6IF0_PEER}
+
+ atf_check -s exit:0 sleep $((REDIRECT_TIMEOUT + 2))
+ $DEBUG && rump.route show -inet6
+ # Check if the created route is expired
+ atf_check -s exit:0 -o not-match:"gateway: ${gw1_lladdr0}" rump.route get \
+ -inet6 ${IP6IF0_PEER}
+
+ rump_server_destroy_ifaces
+}
+
+icmp6_redirect_basic_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case icmp6_redirect_basic
+}
diff --git a/contrib/netbsd-tests/net/icmp/t_icmp_redirect.sh b/contrib/netbsd-tests/net/icmp/t_icmp_redirect.sh
new file mode 100755
index 0000000..6697216
--- /dev/null
+++ b/contrib/netbsd-tests/net/icmp/t_icmp_redirect.sh
@@ -0,0 +1,285 @@
+# $NetBSD: t_icmp_redirect.sh,v 1.6 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Most codes are derived from tests/net/route/t_flags.sh
+
+SOCK_LOCAL=unix://commsock1
+SOCK_PEER=unix://commsock2
+SOCK_GW=unix://commsock3
+BUS=bus1
+BUS2=bus2
+REDIRECT_TIMEOUT=5
+
+DEBUG=${DEBUG:-false}
+
+atf_test_case icmp_redirect_timeout cleanup
+
+icmp_redirect_timeout_head()
+{
+
+ atf_set "descr" "Tests for ICMP redirect timeout";
+ atf_set "require.progs" "rump_server";
+}
+
+setup_local()
+{
+
+ rump_server_start $SOCK_LOCAL
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet.icmp.redirtimeout=$REDIRECT_TIMEOUT
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+setup_peer()
+{
+
+ rump_server_start $SOCK_PEER
+ rump_server_add_iface $SOCK_PEER shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+setup_gw()
+{
+
+ rump_server_start $SOCK_GW
+ rump_server_add_iface $SOCK_GW shmif0 $BUS
+ rump_server_add_iface $SOCK_GW shmif1 $BUS2
+
+ export RUMP_SERVER=$SOCK_GW
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
+
+ # Wait until DAD completes (10 sec at most)
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif1 |grep -q tentative"
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+icmp_redirect_timeout_body()
+{
+
+ $DEBUG && ulimit -c unlimited
+
+ setup_local
+ setup_peer
+
+ ### Testing Dynamic flag ###
+
+ #
+ # Setup a gateway 10.0.0.254. 10.0.2.1 is behind it.
+ #
+ setup_gw
+
+ #
+ # Teach the peer that 10.0.2.* is behind 10.0.0.254
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254
+ # Up, Gateway, Static
+ check_route_flags 10.0.2/24 UGS
+
+ #
+ # Setup the default gateway to the peer, 10.0.0.1
+ #
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ # Up, Gateway, Static
+ check_route_flags default UGS
+
+ # Try ping 10.0.2.1
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Dynamic
+ check_route_flags 10.0.2.1 UGHD
+ check_route_gw 10.0.2.1 10.0.0.254
+
+ atf_check -s exit:0 sleep $((REDIRECT_TIMEOUT + 2))
+
+ # The dynamic entry should be expired and removed
+ check_route_no_entry 10.0.2.1
+
+ export RUMP_SERVER=$SOCK_PEER
+ $DEBUG && rump.netstat -rn -f inet
+
+ rump_server_destroy_ifaces
+}
+
+icmp_redirect_timeout_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case icmp_redirect cleanup
+
+icmp_redirect_head()
+{
+
+ atf_set "descr" "Tests for icmp redirect";
+ atf_set "require.progs" "rump_server";
+}
+
+setup_redirect()
+{
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet.ip.redirect=1
+}
+
+teardown_redirect()
+{
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet.ip.redirect=0
+}
+
+icmp_redirect_body()
+{
+
+ $DEBUG && ulimit -c unlimited
+
+ setup_local
+ setup_peer
+
+ #
+ # Setup a gateway 10.0.0.254. 10.0.2.1 is behind it.
+ #
+ setup_gw
+
+ #
+ # Teach the peer that 10.0.2.* is behind 10.0.0.254
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254
+ # Up, Gateway, Static
+ check_route_flags 10.0.2/24 UGS
+
+ #
+ # Setup the default gateway to the peer, 10.0.0.1
+ #
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ # Up, Gateway, Static
+ check_route_flags default UGS
+
+
+ ### ICMP redirects are NOT sent by the peer ###
+
+ #
+ # Disable net.inet.ip.redirect
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ teardown_redirect
+
+ # Try ping 10.0.2.1
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # A direct route shouldn't be created
+ check_route_no_entry 10.0.2.1
+
+
+ ### ICMP redirects are sent by the peer ###
+
+ #
+ # Enable net.inet.ip.redirect
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ setup_redirect
+
+ # Try ping 10.0.2.1
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Dynamic
+ check_route_flags 10.0.2.1 UGHD
+ check_route_gw 10.0.2.1 10.0.0.254
+
+ export RUMP_SERVER=$SOCK_PEER
+ $DEBUG && rump.netstat -rn -f inet
+
+
+ # cleanup
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route delete 10.0.2.1
+ check_route_no_entry 10.0.2.1
+
+
+ ### ICMP redirects are NOT sent by the peer (again) ###
+
+ #
+ # Disable net.inet.ip.redirect
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ teardown_redirect
+
+ # Try ping 10.0.2.1
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # A direct route shouldn't be created
+ check_route_no_entry 10.0.2.1
+
+ rump_server_destroy_ifaces
+}
+
+icmp_redirect_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case icmp_redirect
+ atf_add_test_case icmp_redirect_timeout
+}
diff --git a/contrib/netbsd-tests/net/icmp/t_ping.c b/contrib/netbsd-tests/net/icmp/t_ping.c
index fd8067c..68a00c7 100644
--- a/contrib/netbsd-tests/net/icmp/t_ping.c
+++ b/contrib/netbsd-tests/net/icmp/t_ping.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_ping.c,v 1.15 2012/09/04 22:31:58 alnsn Exp $ */
+/* $NetBSD: t_ping.c,v 1.16 2015/02/26 13:06:10 martin Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: t_ping.c,v 1.15 2012/09/04 22:31:58 alnsn Exp $");
+__RCSID("$NetBSD: t_ping.c,v 1.16 2015/02/26 13:06:10 martin Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -60,7 +60,7 @@ ATF_TC_HEAD(simpleping, tc)
{
atf_tc_set_md_var(tc, "descr", "check that kernel responds to ping");
- atf_tc_set_md_var(tc, "timeout", "2");
+ atf_tc_set_md_var(tc, "timeout", "20");
}
ATF_TC_BODY(simpleping, tc)
@@ -316,7 +316,7 @@ ATF_TC_HEAD(ping_of_death, tc)
{
atf_tc_set_md_var(tc, "descr", "send a \"ping of death\"");
- atf_tc_set_md_var(tc, "timeout", "2");
+ atf_tc_set_md_var(tc, "timeout", "20");
}
ATF_TC_BODY(ping_of_death, tc)
diff --git a/contrib/netbsd-tests/net/icmp/t_ping2.sh b/contrib/netbsd-tests/net/icmp/t_ping2.sh
index 30ff73b..fc75196 100755
--- a/contrib/netbsd-tests/net/icmp/t_ping2.sh
+++ b/contrib/netbsd-tests/net/icmp/t_ping2.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_ping2.sh,v 1.4 2010/12/30 16:58:07 pooka Exp $
+# $NetBSD: t_ping2.sh,v 1.5 2016/08/10 22:17:44 kre Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -26,7 +26,7 @@
#
netserver=\
-"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
+"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev"
atf_test_case basic cleanup
basic_head()
diff --git a/contrib/netbsd-tests/net/if/ifconf.c b/contrib/netbsd-tests/net/if/ifconf.c
new file mode 100644
index 0000000..424c5e8
--- /dev/null
+++ b/contrib/netbsd-tests/net/if/ifconf.c
@@ -0,0 +1,134 @@
+/* $NetBSD: ifconf.c,v 1.1 2014/12/08 04:23:03 ozaki-r Exp $ */
+/*
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: ifconf.c,v 1.1 2014/12/08 04:23:03 ozaki-r Exp $");
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+#include <sys/ioctl.h>
+
+#include <net/if.h>
+
+#include <stdio.h>
+#include <err.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+static void
+help(void)
+{
+ fprintf(stderr, "usage:\n\t%s total\n\t%s list [<nifreqs>]\n",
+ getprogname(), getprogname());
+ exit(EXIT_FAILURE);
+}
+
+static int
+get_number_of_entries(void)
+{
+ int fd, r;
+ struct ifconf ifc;
+
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (fd == -1)
+ err(EXIT_FAILURE, "socket");
+
+ ifc.ifc_len = 0;
+ ifc.ifc_buf = NULL;
+
+ r = ioctl(fd, SIOCGIFCONF, &ifc);
+ if (r == -1)
+ err(EXIT_FAILURE, "ioctl");
+
+ close(fd);
+
+ return ifc.ifc_len / sizeof(struct ifreq);
+}
+
+static void
+show_number_of_entries(void)
+{
+ printf("%d\n", get_number_of_entries());
+}
+
+static void
+show_interfaces(int nifreqs)
+{
+ int i, fd, r;
+ struct ifconf ifc;
+ struct ifreq *ifreqs;
+
+ if (nifreqs == 0)
+ nifreqs = get_number_of_entries();
+
+ if (nifreqs <= 0)
+ errx(EXIT_FAILURE, "nifreqs=%d", nifreqs);
+
+ ifreqs = malloc(sizeof(struct ifreq) * nifreqs);
+ if (ifreqs == NULL)
+ err(EXIT_FAILURE, "malloc(sizeof(ifreq) * %d)", nifreqs);
+
+ fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (fd == -1)
+ err(EXIT_FAILURE, "socket");
+
+ ifc.ifc_len = sizeof(struct ifreq) * nifreqs;
+ ifc.ifc_req = ifreqs;
+
+ r = ioctl(fd, SIOCGIFCONF, &ifc);
+ if (r == -1)
+ err(EXIT_FAILURE, "ioctl");
+ close(fd);
+
+ for (i=0; i < (int)(ifc.ifc_len / sizeof(struct ifreq)); i++) {
+ printf("%s: af=%hhu socklen=%hhu\n", ifreqs[i].ifr_name,
+ ifreqs[i].ifr_addr.sa_family, ifreqs[i].ifr_addr.sa_len);
+ }
+
+ free(ifreqs);
+}
+
+int
+main(int argc, char *argv[])
+{
+ if (argc < 2)
+ help();
+
+ if (strcmp(argv[1], "total") == 0) {
+ show_number_of_entries();
+ } else if (strcmp(argv[1], "list") == 0) {
+ if (argc == 2)
+ show_interfaces(0);
+ else if (argc == 3)
+ show_interfaces(atoi(argv[2]));
+ else
+ help();
+ } else
+ help();
+
+ return EXIT_SUCCESS;
+}
diff --git a/contrib/netbsd-tests/net/if/t_compat.c b/contrib/netbsd-tests/net/if/t_compat.c
index 4798034..9eb84a3 100644
--- a/contrib/netbsd-tests/net/if/t_compat.c
+++ b/contrib/netbsd-tests/net/if/t_compat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_compat.c,v 1.1 2010/11/07 19:53:42 pooka Exp $ */
+/* $NetBSD: t_compat.c,v 1.4 2016/11/12 15:12:59 kre Exp $ */
#include <sys/socket.h>
#include <sys/ioctl.h>
@@ -65,6 +65,8 @@ ATF_TC_BODY(OOSIOCGIFBRDADDR, tc)
sprintf(ifreq.ifr_name, "shmif%d", ifnum);
netcfg_rump_if(ifreq.ifr_name, "1.7.64.10", "255.255.0.0");
+ atf_tc_expect_fail("PR kern/51610: rump does not include COMPAT_43");
+
/* query kernel for iface bcast */
RL(fd = rump_sys_socket(AF_INET, SOCK_DGRAM, 0));
RL(rump_sys_ioctl(fd, OOSIOCGIFBRDADDR, &ifreq));
diff --git a/contrib/netbsd-tests/net/if/t_ifconf.sh b/contrib/netbsd-tests/net/if/t_ifconf.sh
new file mode 100755
index 0000000..f56e9e3
--- /dev/null
+++ b/contrib/netbsd-tests/net/if/t_ifconf.sh
@@ -0,0 +1,100 @@
+# $NetBSD: t_ifconf.sh,v 1.3 2016/08/10 22:30:02 kre Exp $
+#
+# Copyright (c) 2014 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+RUMP_SERVER1=unix://./r1
+
+RUMP_FLAGS=\
+"-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev"
+
+atf_test_case basic cleanup
+basic_head()
+{
+
+ atf_set "descr" "basic ifconf (SIOCGIFCONF) test"
+ atf_set "require.progs" "rump_server"
+}
+
+basic_body()
+{
+ local ifconf="$(atf_get_srcdir)/ifconf"
+
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1}
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+
+ # lo0 (127.0.0.1 and link local)
+ atf_check -s exit:0 -o match:'^2$' "$ifconf" total
+ atf_check -s exit:0 -o match:'lo0' "$ifconf" list
+
+ # Add shmif0 (no address)
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 -o match:'^3$' "$ifconf" total
+ atf_check -s exit:0 -o match:'shmif0' "$ifconf" list
+
+ # Add shmif1 (no address)
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 -o match:'^4$' "$ifconf" total
+ atf_check -s exit:0 -o match:'shmif1' "$ifconf" list
+
+ # Add an address to shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24
+ atf_check -s exit:0 -o match:'^5$' "$ifconf" total
+
+ # Vary the number of requesting interfaces
+ atf_check -s exit:0 -o match:1 -x "$ifconf list 1 | wc -l"
+ atf_check -s exit:0 -o match:2 -x "$ifconf list 2 | wc -l"
+ atf_check -s exit:0 -o match:3 -x "$ifconf list 3 | wc -l"
+ atf_check -s exit:0 -o match:4 -x "$ifconf list 4 | wc -l"
+ atf_check -s exit:0 -o match:5 -x "$ifconf list 5 | wc -l"
+ atf_check -s exit:0 -o match:5 -x "$ifconf list 6 | wc -l"
+
+ # Check if removing an interface is reflected
+ atf_check -s exit:0 rump.ifconfig shmif0 destroy
+ atf_check -s exit:0 -o match:'^3$' "$ifconf" total
+ atf_check -s exit:0 -o not-match:'shmif0' "$ifconf" list
+ atf_check -s exit:0 -o match:1 -x "$ifconf list 1 | wc -l"
+ atf_check -s exit:0 -o match:2 -x "$ifconf list 2 | wc -l"
+ atf_check -s exit:0 -o match:3 -x "$ifconf list 3 | wc -l"
+ atf_check -s exit:0 -o match:3 -x "$ifconf list 4 | wc -l"
+
+ unset LD_PRELOAD
+ unset RUMP_SERVER
+}
+
+basic_cleanup()
+{
+
+ RUMP_SERVER=${RUMP_SERVER1} rump.halt
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case basic
+}
diff --git a/contrib/netbsd-tests/net/if/t_ifconfig.sh b/contrib/netbsd-tests/net/if/t_ifconfig.sh
new file mode 100755
index 0000000..a610017
--- /dev/null
+++ b/contrib/netbsd-tests/net/if/t_ifconfig.sh
@@ -0,0 +1,333 @@
+# $NetBSD: t_ifconfig.sh,v 1.14 2016/10/01 22:15:04 kre Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+RUMP_SERVER1=unix://./r1
+RUMP_SERVER2=unix://./r2
+
+RUMP_FLAGS=\
+"-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif"
+RUMP_FLAGS="${RUMP_FLAGS} -lrumpdev"
+
+TIMEOUT=3
+
+anycast="[Aa][Nn][Yy][Cc][Aa][Ss][Tt]"
+deprecated="[Dd][Ee][Pp][Rr][Ee][Cc][Aa][Tt][Ee][Dd]"
+
+atf_test_case ifconfig_create_destroy cleanup
+ifconfig_create_destroy_head()
+{
+
+ atf_set "descr" "tests of ifconfig create and destroy"
+ atf_set "require.progs" "rump_server"
+}
+
+ifconfig_create_destroy_body()
+{
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1}
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+
+ # Create and destroy (no address)
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 destroy
+
+ # Create and destroy (with an IPv4 address)
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif0 destroy
+
+ # Create and destroy (with an IPv6 address)
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif0 destroy
+
+ unset RUMP_SERVER
+}
+
+ifconfig_create_destroy_cleanup()
+{
+
+ RUMP_SERVER=${RUMP_SERVER1} rump.halt
+}
+
+atf_test_case ifconfig_options cleanup
+ifconfig_options_head()
+{
+
+ atf_set "descr" "tests of ifconfig options"
+ atf_set "require.progs" "rump_server"
+}
+
+ifconfig_options_body()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 rump_server $RUMP_FLAGS $RUMP_SERVER1
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr bus1
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet 10.0.0.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 fc00::1/64
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ $DEBUG && rump.ifconfig shmif0
+
+ # ifconfig [-N] interface address_family
+ # -N resolves hostnames
+ atf_check -s exit:0 -o match:'inet 127.0.0.1' rump.ifconfig lo0 inet
+ atf_check -s exit:0 -o match:'inet localhost' rump.ifconfig -N lo0 inet
+ atf_check -s exit:0 -o match:'inet6 ::1' rump.ifconfig lo0 inet6
+ atf_check -s exit:0 -o match:'inet6 localhost' rump.ifconfig -N lo0 inet6
+ atf_check -s not-exit:0 -e match:'not supported' rump.ifconfig lo0 atalk
+ atf_check -s not-exit:0 -e match:'not supported' rump.ifconfig -N lo0 atalk
+ atf_check -s exit:0 -o ignore rump.ifconfig lo0 link
+ atf_check -s exit:0 -o ignore rump.ifconfig -N lo0 link
+
+ # ifconfig [-hLmNvz] interface
+ # -h -v shows statistics in human readable format
+ atf_check -s exit:0 -o ignore rump.ifconfig -h -v lo0
+ # -L shows IPv6 lifetime
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 fc00::2 \
+ pltime 100
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'vltime' rump.ifconfig -L shmif0
+ # -m shows all of the supported media (not supported in shmif)
+ $DEBUG && rump.ifconfig -m shmif0
+ atf_check -s exit:0 -o ignore rump.ifconfig -m shmif0
+ atf_check -s exit:0 -o match:'localhost' rump.ifconfig -N lo0
+ atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -v lo0
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT localhost
+ # -z clears and shows statistics at that point
+ atf_check -s exit:0 -o match:'2 packets' rump.ifconfig -z lo0
+ atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -v lo0
+
+ # ifconfig -a [-bdhLNmsuvz]
+ # -a shows all interfaces in the system
+ $DEBUG && rump.ifconfig -a
+ atf_check -s exit:0 -o match:'shmif0' -o match:'lo0' rump.ifconfig -a
+ # -a -b shows only broadcast interfaces
+ atf_check -s exit:0 -o match:'shmif0' -o not-match:'lo0' rump.ifconfig -a -b
+ # -a -d shows only down interfaces
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -a -d
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig -a -d
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -a -L
+ atf_check -s exit:0 -o match:'vltime' rump.ifconfig -a -L
+ atf_check -s exit:0 -o match:'localhost' rump.ifconfig -a -N
+ atf_check -s exit:0 -o ignore rump.ifconfig -a -m
+ # -a -s shows only interfaces connected to a network
+ # (shmif is always connected)
+ $DEBUG && rump.ifconfig -a -s
+ atf_check -s exit:0 -o ignore rump.ifconfig -a -s
+ # -a -u shows only up interfaces
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -a -u
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down
+ atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig -a -u
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -a -v
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT localhost
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down
+ atf_check -s exit:0 -o match:'2 packets' rump.ifconfig -a -z
+ atf_check -s exit:0 -o not-match:'2 packets' rump.ifconfig -a -v
+ atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -a -v
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ # ifconfig -l [-bdsu]
+ # -l shows only inteface names
+ atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -b
+ atf_check -s exit:0 -o not-match:'lo0' rump.ifconfig -l -b
+ atf_check -s exit:0 -o ignore rump.ifconfig -l -d
+ atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l -s
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -s
+ atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l -u
+ atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -u
+
+ # ifconfig -s interface
+ # -s interface exists with 0 / 1 if connected / disconnected
+ atf_check -s exit:0 -o empty rump.ifconfig -s lo0
+ atf_check -s exit:0 -o empty rump.ifconfig -s shmif0
+
+ # ifconfig -C
+ # -C shows all of the interface cloners available on the system
+ atf_check -s exit:0 -o match:'shmif lo carp' rump.ifconfig -C
+
+ unset RUMP_SERVER
+}
+
+ifconfig_options_cleanup()
+{
+
+ env RUMP_SERVER=${RUMP_SERVER1} rump.halt
+}
+
+
+atf_test_case ifconfig_parameters cleanup
+ifconfig_parameters_head()
+{
+ atf_set "descr" "tests of interface parameters"
+ atf_set "require.progs" "rump_server"
+}
+
+ifconfig_parameters_body()
+{
+ local interval=
+
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER2}
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.2/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.3/24 alias
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+
+ # active
+ atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:01 active
+ atf_check -s exit:0 -o match:'address:.b2:a0:75:00:00:01' \
+ rump.ifconfig shmif0
+ # down, up
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ping -c 1 \
+ -w $TIMEOUT -n 192.168.0.2
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT -n 192.168.0.2
+
+ # alias
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1/24 alias
+ atf_check -s exit:0 -o match:'192.168.1.1/24' rump.ifconfig shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1/24 -alias
+ atf_check -s exit:0 -o not-match:'192.168.1.1/24' rump.ifconfig shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2
+ atf_check -s exit:0 -o match:'fc00::1' rump.ifconfig shmif0 inet6
+ atf_check -s exit:0 -o match:'fc00::2' rump.ifconfig shmif0 inet6
+
+ # delete
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1 alias
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1 delete
+ atf_check -s exit:0 -o not-match:'192.168.1.1' rump.ifconfig shmif0 inet
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.1 delete
+ atf_check -s exit:0 -o not-match:'192.168.0.1' rump.ifconfig shmif0 inet
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 delete
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2 delete
+ atf_check -s exit:0 -o not-match:'fc00::1' rump.ifconfig shmif0 inet6
+ atf_check -s exit:0 -o not-match:'fc00::2' rump.ifconfig shmif0 inet6
+ # can delete inactive link
+ atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:02
+ atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:02 delete
+ # cannot delete active link
+ atf_check -s not-exit:0 -e match:'SIOCDLIFADDR: Device busy' \
+ rump.ifconfig shmif0 link b2:a0:75:00:00:01 delete
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.1/24
+
+ # arp
+ atf_check -s exit:0 rump.ifconfig shmif0 -arp
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -c 1 -w $TIMEOUT -n 192.168.0.3
+ atf_check -s exit:0 -o not-match:'192.168.0.3' rump.arp -an
+ # The entry shouldn't appear in the routing table anymore
+ atf_check -s exit:0 -o not-match:'192.168.0.3' rump.netstat -nr
+
+ # netmask
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 netmask 255.255.255.0 alias
+ atf_check -s exit:0 -o match:'172.16.0/24' rump.netstat -rn -f inet
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 delete
+
+ # broadcast (does it not work?)
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 \
+ broadcast 255.255.255.255 alias
+ atf_check -s exit:0 -o match:'broadcast 255.255.255.255' \
+ rump.ifconfig shmif0 inet
+
+ # metric (external only)
+ atf_check -s exit:0 rump.ifconfig shmif0 metric 10
+ atf_check -s exit:0 rump.ifconfig shmif0 metric 0
+
+ # prefixlen
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 prefixlen 70
+ atf_check -s exit:0 -o match:'fc00::/70' rump.netstat -rn -f inet6
+
+ # anycast
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2 anycast
+ atf_check -s exit:0 -o match:"fc00::2.+$anycast" rump.ifconfig shmif0 inet6
+
+ # deprecated
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 deprecated
+ # Not deprecated immediately. Need to wait nd6_timer that does it is scheduled.
+ interval=$(sysctl -n net.inet6.icmp6.nd6_prune)
+ atf_check -s exit:0 sleep $((interval + 1))
+ atf_check -s exit:0 -o match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 -deprecated
+ atf_check -s exit:0 -o not-match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
+
+ # pltime
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 pltime 3
+ atf_check -s exit:0 -o not-match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
+ atf_check -s exit:0 sleep 5
+ atf_check -s exit:0 -o match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6
+
+ # eui64
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00:1::0 eui64
+ atf_check -s exit:0 -o match:'fc00:1::' rump.ifconfig shmif0 inet6
+
+ unset RUMP_SERVER
+}
+
+ifconfig_parameters_cleanup()
+{
+ env RUMP_SERVER=${RUMP_SERVER1} rump.halt
+ env RUMP_SERVER=${RUMP_SERVER2} rump.halt
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case ifconfig_create_destroy
+ atf_add_test_case ifconfig_options
+ atf_add_test_case ifconfig_parameters
+}
diff --git a/contrib/netbsd-tests/net/if_bridge/t_bridge.sh b/contrib/netbsd-tests/net/if_bridge/t_bridge.sh
index 5fbafc7..25edb35 100755
--- a/contrib/netbsd-tests/net/if_bridge/t_bridge.sh
+++ b/contrib/netbsd-tests/net/if_bridge/t_bridge.sh
@@ -1,5 +1,4 @@
-#! /usr/bin/atf-sh
-# $NetBSD: t_bridge.sh,v 1.1 2014/09/18 15:13:27 ozaki-r Exp $
+# $NetBSD: t_bridge.sh,v 1.16 2016/11/25 08:51:16 ozaki-r Exp $
#
# Copyright (c) 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -26,9 +25,6 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-inetserver="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_bridge -lrumpnet_shmif"
-inet6server="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_bridge -lrumpnet_shmif"
-
SOCK1=unix://commsock1
SOCK2=unix://commsock2
SOCK3=unix://commsock3
@@ -36,22 +32,50 @@ IP1=10.0.0.1
IP2=10.0.0.2
IP61=fc00::1
IP62=fc00::2
+IPBR1=10.0.0.11
+IPBR2=10.0.0.12
+IP6BR1=fc00::11
+IP6BR2=fc00::12
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=5
-atf_test_case basic cleanup
-atf_test_case basic6 cleanup
+atf_test_case bridge_ipv4 cleanup
+atf_test_case bridge_ipv6 cleanup
+atf_test_case bridge_rtable cleanup
+atf_test_case bridge_member_ipv4 cleanup
+atf_test_case bridge_member_ipv6 cleanup
-basic_head()
+bridge_ipv4_head()
{
atf_set "descr" "Does simple if_bridge tests"
atf_set "require.progs" "rump_server"
}
-basic6_head()
+bridge_ipv6_head()
{
atf_set "descr" "Does simple if_bridge tests (IPv6)"
atf_set "require.progs" "rump_server"
}
+bridge_rtable_head()
+{
+ atf_set "descr" "Tests route table operations of if_bridge"
+ atf_set "require.progs" "rump_server"
+}
+
+bridge_member_ipv4_head()
+{
+ atf_set "descr" "Tests if_bridge with members with an IP address"
+ atf_set "require.progs" "rump_server"
+}
+
+bridge_member_ipv6_head()
+{
+ atf_set "descr" "Tests if_bridge with members with an IP address (IPv6)"
+ atf_set "require.progs" "rump_server"
+}
+
setup_endpoint()
{
sock=${1}
@@ -59,9 +83,8 @@ setup_endpoint()
bus=${3}
mode=${4}
+ rump_server_add_iface $sock shmif0 $bus
export RUMP_SERVER=${sock}
- atf_check -s exit:0 rump.ifconfig shmif0 create
- atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${bus}
if [ $mode = "ipv6" ]; then
atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
else
@@ -69,7 +92,7 @@ setup_endpoint()
fi
atf_check -s exit:0 rump.ifconfig shmif0 up
- rump.ifconfig shmif0
+ $DEBUG && rump.ifconfig shmif0
}
test_endpoint()
@@ -82,22 +105,12 @@ test_endpoint()
export RUMP_SERVER=${sock}
atf_check -s exit:0 -o match:shmif0 rump.ifconfig
if [ $mode = "ipv6" ]; then
- export LD_PRELOAD=/usr/lib/librumphijack.so
- atf_check -s exit:0 -o ignore ping6 -n -c 1 ${addr}
- unset LD_PRELOAD
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
else
- atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 ${addr}
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
fi
}
-show_endpoint()
-{
- sock=${1}
-
- export RUMP_SERVER=${sock}
- rump.ifconfig -v shmif0
-}
-
test_setup()
{
test_endpoint $SOCK1 $IP1 bus1 ipv4
@@ -120,21 +133,20 @@ test_setup6()
setup_bridge_server()
{
+
+ rump_server_add_iface $SOCK2 shmif0 bus1
+ rump_server_add_iface $SOCK2 shmif1 bus2
export RUMP_SERVER=$SOCK2
- atf_check -s exit:0 rump.ifconfig shmif0 create
- atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
atf_check -s exit:0 rump.ifconfig shmif0 up
-
- atf_check -s exit:0 rump.ifconfig shmif1 create
- atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus2
atf_check -s exit:0 rump.ifconfig shmif1 up
}
setup()
{
- atf_check -s exit:0 ${inetserver} $SOCK1
- atf_check -s exit:0 ${inetserver} $SOCK2
- atf_check -s exit:0 ${inetserver} $SOCK3
+
+ rump_server_start $SOCK1 bridge
+ rump_server_start $SOCK2 bridge
+ rump_server_start $SOCK3 bridge
setup_endpoint $SOCK1 $IP1 bus1 ipv4
setup_endpoint $SOCK3 $IP2 bus2 ipv4
@@ -143,9 +155,10 @@ setup()
setup6()
{
- atf_check -s exit:0 ${inet6server} $SOCK1
- atf_check -s exit:0 ${inet6server} $SOCK2
- atf_check -s exit:0 ${inet6server} $SOCK3
+
+ rump_server_start $SOCK1 netinet6 bridge
+ rump_server_start $SOCK2 netinet6 bridge
+ rump_server_start $SOCK3 netinet6 bridge
setup_endpoint $SOCK1 $IP61 bus1 ipv6
setup_endpoint $SOCK3 $IP62 bus2 ipv6
@@ -167,6 +180,32 @@ setup_bridge()
rump.ifconfig shmif1
}
+setup_member_ip()
+{
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 rump.ifconfig shmif0 $IPBR1/24
+ atf_check -s exit:0 rump.ifconfig shmif1 $IPBR2/24
+ atf_check -s exit:0 rump.ifconfig -w 10
+ /sbin/brconfig bridge0
+ unset LD_PRELOAD
+ rump.ifconfig shmif0
+ rump.ifconfig shmif1
+}
+
+setup_member_ip6()
+{
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6BR1
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 $IP6BR2
+ atf_check -s exit:0 rump.ifconfig -w 10
+ /sbin/brconfig bridge0
+ unset LD_PRELOAD
+ rump.ifconfig shmif0
+ rump.ifconfig shmif1
+}
+
teardown_bridge()
{
export RUMP_SERVER=$SOCK2
@@ -190,19 +229,6 @@ test_setup_bridge()
unset LD_PRELOAD
}
-cleanup()
-{
- env RUMP_SERVER=$SOCK1 rump.halt
- env RUMP_SERVER=$SOCK2 rump.halt
- env RUMP_SERVER=$SOCK3 rump.halt
-}
-
-dump_bus()
-{
- /usr/bin/shmif_dumpbus -p - bus1 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
- /usr/bin/shmif_dumpbus -p - bus2 2>/dev/null| /usr/sbin/tcpdump -n -e -r -
-}
-
down_up_interfaces()
{
export RUMP_SERVER=$SOCK1
@@ -216,97 +242,332 @@ down_up_interfaces()
test_ping_failure()
{
export RUMP_SERVER=$SOCK1
- atf_check -s not-exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP2
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
export RUMP_SERVER=$SOCK3
- atf_check -s not-exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP1
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
}
test_ping_success()
{
export RUMP_SERVER=$SOCK1
rump.ifconfig -v shmif0
- atf_check -s exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP2
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP2
rump.ifconfig -v shmif0
export RUMP_SERVER=$SOCK3
rump.ifconfig -v shmif0
- atf_check -s exit:0 -o ignore rump.ping -q -n -w 1 -c 1 $IP1
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP1
rump.ifconfig -v shmif0
}
test_ping6_failure()
{
- export LD_PRELOAD=/usr/lib/librumphijack.so
export RUMP_SERVER=$SOCK1
- atf_check -s not-exit:0 -o ignore ping6 -q -n -c 1 $IP62
+ atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
export RUMP_SERVER=$SOCK3
- atf_check -s not-exit:0 -o ignore ping6 -q -n -c 1 $IP61
- unset LD_PRELOAD
+ atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
}
test_ping6_success()
{
export RUMP_SERVER=$SOCK1
rump.ifconfig -v shmif0
- export LD_PRELOAD=/usr/lib/librumphijack.so
- atf_check -s exit:0 -o ignore ping6 -q -n -c 1 $IP62
- unset LD_PRELOAD
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP62
+ rump.ifconfig -v shmif0
+
+ export RUMP_SERVER=$SOCK3
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP61
+ rump.ifconfig -v shmif0
+}
+
+test_ping_member()
+{
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
+ rump.ifconfig -v shmif0
+ # Test for PR#48104
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
+ rump.ifconfig -v shmif0
+
+ export RUMP_SERVER=$SOCK3
+ rump.ifconfig -v shmif0
+ # Test for PR#48104
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR1
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IPBR2
+ rump.ifconfig -v shmif0
+}
+
+test_ping6_member()
+{
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
+ rump.ifconfig -v shmif0
+ # Test for PR#48104
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
rump.ifconfig -v shmif0
export RUMP_SERVER=$SOCK3
rump.ifconfig -v shmif0
+ # Test for PR#48104
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR1
+ rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -X $TIMEOUT -c 1 $IP6BR2
+ rump.ifconfig -v shmif0
+}
+
+get_number_of_caches()
+{
+ export RUMP_SERVER=$SOCK2
export LD_PRELOAD=/usr/lib/librumphijack.so
- atf_check -s exit:0 -o ignore ping6 -q -n -c 1 $IP61
+ echo $(($(/sbin/brconfig bridge0 |grep -A 100 "Address cache" |wc -l) - 1))
+ unset LD_PRELOAD
+}
+
+test_brconfig_maxaddr()
+{
+ addr1= addr3= n=
+
+ # Get MAC addresses of the endpoints.
+ addr1=$(get_macaddr $SOCK1 shmif0)
+ addr3=$(get_macaddr $SOCK3 shmif0)
+
+ # Refill the MAC addresses of the endpoints.
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
+
+ # Check the default # of caches is 100
+ atf_check -s exit:0 -o match:"max cache: 100" /sbin/brconfig bridge0
+
+ # Test two MAC addresses are cached
+ n=$(get_number_of_caches)
+ atf_check_equal $n 2
+
+ # Limit # of caches to one
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 1
+ atf_check -s exit:0 -o match:"max cache: 1" /sbin/brconfig bridge0
+ /sbin/brconfig bridge0
+
+ # Test just one address is cached
+ n=$(get_number_of_caches)
+ atf_check_equal $n 1
+
+ # Increase # of caches to two
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 maxaddr 2
+ atf_check -s exit:0 -o match:"max cache: 2" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Test we can cache two addresses again
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
unset LD_PRELOAD
- rump.ifconfig -v shmif0
}
-basic_body()
+bridge_ipv4_body()
{
setup
test_setup
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
+
setup_bridge
+ sleep 1
test_setup_bridge
-
test_ping_success
teardown_bridge
test_ping_failure
+
+ rump_server_destroy_ifaces
}
-basic6_body()
+bridge_ipv6_body()
{
setup6
test_setup6
- # TODO: enable once ping6 implements timeout feature
- #test_ping6_failure
+ test_ping6_failure
+
+ setup_bridge
+ sleep 1
+ test_setup_bridge
+ test_ping6_success
+
+ teardown_bridge
+ test_ping6_failure
+
+ rump_server_destroy_ifaces
+}
+
+bridge_rtable_body()
+{
+ addr1= addr3=
+
+ setup
+ setup_bridge
+
+ # Get MAC addresses of the endpoints.
+ addr1=$(get_macaddr $SOCK1 shmif0)
+ addr3=$(get_macaddr $SOCK3 shmif0)
+
+ # Confirm there is no MAC address caches.
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ $DEBUG && /sbin/brconfig bridge0
+ atf_check -s exit:0 -o not-match:"$addr1" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o not-match:"$addr3" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Make the bridge learn the MAC addresses of the endpoints.
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
+ unset RUMP_SERVER
+
+ # Tests the addresses are in the cache.
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ $DEBUG && /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
+
+ # Tests brconfig deladdr
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr1"
+ atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 deladdr "$addr3"
+ atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Refill the MAC addresses of the endpoints.
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP2
+ unset RUMP_SERVER
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ $DEBUG && /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o match:"$addr3 shmif1" /sbin/brconfig bridge0
+
+ # Tests brconfig flush.
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 flush
+ atf_check -s exit:0 -o not-match:"$addr1 shmif0" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o not-match:"$addr3 shmif1" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Tests brconfig timeout.
+ export RUMP_SERVER=$SOCK2
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 -o match:"timeout: 1200" /sbin/brconfig bridge0
+ atf_check -s exit:0 -o ignore /sbin/brconfig bridge0 timeout 10
+ atf_check -s exit:0 -o match:"timeout: 10" /sbin/brconfig bridge0
+ unset LD_PRELOAD
+
+ # Tests brconfig maxaddr.
+ test_brconfig_maxaddr
+
+ # TODO: brconfig static/flushall/discover/learn
+ # TODO: cache expiration; it takes 5 minutes at least and we want to
+ # wait here so long. Should we have a sysctl to change the period?
+
+ rump_server_destroy_ifaces
+}
+
+bridge_member_ipv4_body()
+{
+ setup
+ test_setup
+
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
setup_bridge
+ sleep 1
test_setup_bridge
+ test_ping_success
+
+ setup_member_ip
+ test_ping_member
+
+ teardown_bridge
+ test_ping_failure
+
+ rump_server_destroy_ifaces
+}
+
+bridge_member_ipv6_body()
+{
+ setup6
+ test_setup6
+
+ test_ping6_failure
+ setup_bridge
+ sleep 1
+ test_setup_bridge
test_ping6_success
+ setup_member_ip6
+ test_ping6_member
+
teardown_bridge
- # TODO: enable once ping6 implements timeout feature
- #test_ping6_failure
+ test_ping6_failure
+
+ rump_server_destroy_ifaces
}
-basic_cleanup()
+bridge_ipv4_cleanup()
{
- dump_bus
+
+ $DEBUG && dump
+ cleanup
+}
+
+bridge_ipv6_cleanup()
+{
+
+ $DEBUG && dump
cleanup
}
-basic6_cleanup()
+bridge_rtable_cleanup()
{
- dump_bus
+
+ $DEBUG && dump
+ cleanup
+}
+
+bridge_member_ipv4_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+bridge_member_ipv6_cleanup()
+{
+
+ $DEBUG && dump
cleanup
}
atf_init_test_cases()
{
- atf_add_test_case basic
- atf_add_test_case basic6
+ atf_add_test_case bridge_ipv4
+ atf_add_test_case bridge_ipv6
+ atf_add_test_case bridge_rtable
+ atf_add_test_case bridge_member_ipv4
+ atf_add_test_case bridge_member_ipv6
}
diff --git a/contrib/netbsd-tests/net/if_gif/t_gif.sh b/contrib/netbsd-tests/net/if_gif/t_gif.sh
new file mode 100755
index 0000000..8690d78
--- /dev/null
+++ b/contrib/netbsd-tests/net/if_gif/t_gif.sh
@@ -0,0 +1,763 @@
+# $NetBSD: t_gif.sh,v 1.9 2016/12/21 09:46:39 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK1=unix://commsock1 # for ROUTER1
+SOCK2=unix://commsock2 # for ROUTER2
+ROUTER1_LANIP=192.168.1.1
+ROUTER1_LANNET=192.168.1.0/24
+ROUTER1_WANIP=10.0.0.1
+ROUTER1_GIFIP=172.16.1.1
+ROUTER1_WANIP_DUMMY=10.0.0.11
+ROUTER1_GIFIP_DUMMY=172.16.11.1
+ROUTER1_GIFIP_RECURSIVE1=172.16.101.1
+ROUTER1_GIFIP_RECURSIVE2=172.16.201.1
+ROUTER2_LANIP=192.168.2.1
+ROUTER2_LANNET=192.168.2.0/24
+ROUTER2_WANIP=10.0.0.2
+ROUTER2_GIFIP=172.16.2.1
+ROUTER2_WANIP_DUMMY=10.0.0.12
+ROUTER2_GIFIP_DUMMY=172.16.12.1
+ROUTER2_GIFIP_RECURSIVE1=172.16.102.1
+ROUTER2_GIFIP_RECURSIVE2=172.16.202.1
+
+ROUTER1_LANIP6=fc00:1::1
+ROUTER1_LANNET6=fc00:1::/64
+ROUTER1_WANIP6=fc00::1
+ROUTER1_GIFIP6=fc00:3::1
+ROUTER1_WANIP6_DUMMY=fc00::11
+ROUTER1_GIFIP6_DUMMY=fc00:13::1
+ROUTER1_GIFIP6_RECURSIVE1=fc00:103::1
+ROUTER1_GIFIP6_RECURSIVE2=fc00:203::1
+ROUTER2_LANIP6=fc00:2::1
+ROUTER2_LANNET6=fc00:2::/64
+ROUTER2_WANIP6=fc00::2
+ROUTER2_GIFIP6=fc00:4::1
+ROUTER2_WANIP6_DUMMY=fc00::12
+ROUTER2_GIFIP6_DUMMY=fc00:14::1
+ROUTER2_GIFIP6_RECURSIVE1=fc00:104::1
+ROUTER2_GIFIP6_RECURSIVE2=fc00:204::1
+
+DEBUG=${DEBUG:-true}
+TIMEOUT=5
+
+setup_router()
+{
+ sock=${1}
+ lan=${2}
+ lan_mode=${3}
+ wan=${4}
+ wan_mode=${5}
+
+ rump_server_add_iface $sock shmif0 bus0
+ rump_server_add_iface $sock shmif1 bus1
+
+ export RUMP_SERVER=${sock}
+ if [ ${lan_mode} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${lan}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${lan} netmask 0xffffff00
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ rump.ifconfig shmif0
+
+ if [ ${wan_mode} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${wan}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif1 inet ${wan} netmask 0xff000000
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ rump.ifconfig shmif1
+}
+
+test_router()
+{
+ sock=${1}
+ lan=${2}
+ lan_mode=${3}
+ wan=${4}
+ wan_mode=${5}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 -o match:shmif0 rump.ifconfig
+ if [ ${lan_mode} = "ipv6" ]; then
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${lan}
+ else
+ atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${lan}
+ fi
+
+ atf_check -s exit:0 -o match:shmif1 rump.ifconfig
+ if [ ${wan_mode} = "ipv6" ]; then
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${wan}
+ else
+ atf_check -s exit:0 -o ignore rump.ping -n -c 1 -w $TIMEOUT ${wan}
+ fi
+}
+
+setup()
+{
+ inner=${1}
+ outer=${2}
+
+ rump_server_start $SOCK1 netinet6 gif
+ rump_server_start $SOCK2 netinet6 gif
+
+ router1_lan=""
+ router1_lan_mode=""
+ router2_lan=""
+ router2_lan_mode=""
+ if [ ${inner} = "ipv6" ]; then
+ router1_lan=$ROUTER1_LANIP6
+ router1_lan_mode="ipv6"
+ router2_lan=$ROUTER2_LANIP6
+ router2_lan_mode="ipv6"
+ else
+ router1_lan=$ROUTER1_LANIP
+ router1_lan_mode="ipv4"
+ router2_lan=$ROUTER2_LANIP
+ router2_lan_mode="ipv4"
+ fi
+
+ if [ ${outer} = "ipv6" ]; then
+ setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
+ $ROUTER1_WANIP6 ipv6
+ setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
+ $ROUTER2_WANIP6 ipv6
+ else
+ setup_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
+ $ROUTER1_WANIP ipv4
+ setup_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
+ $ROUTER2_WANIP ipv4
+ fi
+}
+
+test_setup()
+{
+ inner=${1}
+ outer=${2}
+
+ router1_lan=""
+ router1_lan_mode=""
+ router2_lan=""
+ router2_lan_mode=""
+ if [ ${inner} = "ipv6" ]; then
+ router1_lan=$ROUTER1_LANIP6
+ router1_lan_mode="ipv6"
+ router2_lan=$ROUTER2_LANIP6
+ router2_lan_mode="ipv6"
+ else
+ router1_lan=$ROUTER1_LANIP
+ router1_lan_mode="ipv4"
+ router2_lan=$ROUTER2_LANIP
+ router2_lan_mode="ipv4"
+ fi
+ if [ ${outer} = "ipv6" ]; then
+ test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
+ $ROUTER1_WANIP6 ipv6
+ test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
+ $ROUTER2_WANIP6 ipv6
+ else
+ test_router $SOCK1 ${router1_lan} ${router1_lan_mode} \
+ $ROUTER1_WANIP ipv4
+ test_router $SOCK2 ${router2_lan} ${router2_lan_mode} \
+ $ROUTER2_WANIP ipv4
+ fi
+}
+
+setup_if_gif()
+{
+ sock=${1}
+ addr=${2}
+ remote=${3}
+ inner=${4}
+ src=${5}
+ dst=${6}
+ peernet=${7}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 rump.ifconfig gif0 create
+ atf_check -s exit:0 rump.ifconfig gif0 tunnel ${src} ${dst}
+ if [ ${inner} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig gif0 inet6 ${addr}/128 ${remote}
+ atf_check -s exit:0 -o ignore rump.route add -inet6 ${peernet} ${addr}
+ else
+ atf_check -s exit:0 rump.ifconfig gif0 inet ${addr}/32 ${remote}
+ atf_check -s exit:0 -o ignore rump.route add -inet ${peernet} ${addr}
+ fi
+
+ rump.ifconfig gif0
+ rump.route -nL show
+}
+
+setup_tunnel()
+{
+ inner=${1}
+ outer=${2}
+
+ addr=""
+ remote=""
+ src=""
+ dst=""
+ peernet=""
+
+ if [ ${inner} = "ipv6" ]; then
+ addr=$ROUTER1_GIFIP6
+ remote=$ROUTER2_GIFIP6
+ peernet=$ROUTER2_LANNET6
+ else
+ addr=$ROUTER1_GIFIP
+ remote=$ROUTER2_GIFIP
+ peernet=$ROUTER2_LANNET
+ fi
+ if [ ${outer} = "ipv6" ]; then
+ src=$ROUTER1_WANIP6
+ dst=$ROUTER2_WANIP6
+ else
+ src=$ROUTER1_WANIP
+ dst=$ROUTER2_WANIP
+ fi
+ setup_if_gif $SOCK1 ${addr} ${remote} ${inner} \
+ ${src} ${dst} ${peernet}
+
+ if [ $inner = "ipv6" ]; then
+ addr=$ROUTER2_GIFIP6
+ remote=$ROUTER1_GIFIP6
+ peernet=$ROUTER1_LANNET6
+ else
+ addr=$ROUTER2_GIFIP
+ remote=$ROUTER1_GIFIP
+ peernet=$ROUTER1_LANNET
+ fi
+ if [ $outer = "ipv6" ]; then
+ src=$ROUTER2_WANIP6
+ dst=$ROUTER1_WANIP6
+ else
+ src=$ROUTER2_WANIP
+ dst=$ROUTER1_WANIP
+ fi
+ setup_if_gif $SOCK2 ${addr} ${remote} ${inner} \
+ ${src} ${dst} ${peernet}
+}
+
+test_setup_tunnel()
+{
+ mode=${1}
+
+ peernet=""
+ opt=""
+ if [ ${mode} = "ipv6" ]; then
+ peernet=$ROUTER2_LANNET6
+ opt="-inet6"
+ else
+ peernet=$ROUTER2_LANNET
+ opt="-inet"
+ fi
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o match:gif0 rump.ifconfig
+ atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
+
+ if [ ${mode} = "ipv6" ]; then
+ peernet=$ROUTER1_LANNET6
+ opt="-inet6"
+ else
+ peernet=$ROUTER1_LANNET
+ opt="-inet"
+ fi
+ export RUMP_SERVER=$SOCK2
+ atf_check -s exit:0 -o match:gif0 rump.ifconfig
+ atf_check -s exit:0 -o match:gif0 rump.route -nL get ${opt} ${peernet}
+}
+
+teardown_tunnel()
+{
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif0 destroy
+
+ export RUMP_SERVER=$SOCK2
+ atf_check -s exit:0 rump.ifconfig gif0 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif0 destroy
+}
+
+setup_dummy_if_gif()
+{
+ sock=${1}
+ addr=${2}
+ remote=${3}
+ inner=${4}
+ src=${5}
+ dst=${6}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 rump.ifconfig gif1 create
+ atf_check -s exit:0 rump.ifconfig gif1 tunnel ${src} ${dst}
+ if [ ${inner} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig gif1 inet6 ${addr}/128 ${remote}
+ else
+ atf_check -s exit:0 rump.ifconfig gif1 inet ${addr}/32 ${remote}
+ fi
+
+ rump.ifconfig gif1
+}
+
+setup_dummy_tunnel()
+{
+ inner=${1}
+ outer=${2}
+
+ addr=""
+ remote=""
+ src=""
+ dst=""
+
+ if [ ${inner} = "ipv6" ]; then
+ addr=$ROUTER1_GIFIP6_DUMMY
+ remote=$ROUTER2_GIFIP6_DUMMY
+ else
+ addr=$ROUTER1_GIFIP_DUMMY
+ remote=$ROUTER2_GIFIP_DUMMY
+ fi
+ if [ ${outer} = "ipv6" ]; then
+ src=$ROUTER1_WANIP6_DUMMY
+ dst=$ROUTER2_WANIP6_DUMMY
+ else
+ src=$ROUTER1_WANIP_DUMMY
+ dst=$ROUTER2_WANIP_DUMMY
+ fi
+ setup_dummy_if_gif $SOCK1 ${addr} ${remote} ${inner} \
+ ${src} ${dst}
+
+ if [ $inner = "ipv6" ]; then
+ addr=$ROUTER2_GIFIP6_DUMMY
+ remote=$ROUTER1_GIFIP6_DUMMY
+ else
+ addr=$ROUTER2_GIFIP_DUMMY
+ remote=$ROUTER1_GIFIP_DUMMY
+ fi
+ if [ $outer = "ipv6" ]; then
+ src=$ROUTER2_WANIP6_DUMMY
+ dst=$ROUTER1_WANIP6_DUMMY
+ else
+ src=$ROUTER2_WANIP_DUMMY
+ dst=$ROUTER1_WANIP_DUMMY
+ fi
+ setup_dummy_if_gif $SOCK2 ${addr} ${remote} ${inner} \
+ ${src} ${dst}
+}
+
+test_setup_dummy_tunnel()
+{
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 -o match:gif1 rump.ifconfig
+
+ export RUMP_SERVER=$SOCK2
+ atf_check -s exit:0 -o match:gif1 rump.ifconfig
+}
+
+teardown_dummy_tunnel()
+{
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif1 destroy
+
+ export RUMP_SERVER=$SOCK2
+ atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif1 destroy
+}
+
+setup_recursive_if_gif()
+{
+ sock=${1}
+ gif=${2}
+ addr=${3}
+ remote=${4}
+ inner=${5}
+ src=${6}
+ dst=${7}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 rump.ifconfig ${gif} create
+ atf_check -s exit:0 rump.ifconfig ${gif} tunnel ${src} ${dst}
+ if [ ${inner} = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig ${gif} inet6 ${addr}/128 ${remote}
+ else
+ atf_check -s exit:0 rump.ifconfig ${gif} inet ${addr}/32 ${remote}
+ fi
+
+ rump.ifconfig ${gif}
+}
+
+# test in ROUTER1 only
+setup_recursive_tunnels()
+{
+ mode=${1}
+
+ addr=""
+ remote=""
+ src=""
+ dst=""
+
+ if [ ${mode} = "ipv6" ]; then
+ addr=$ROUTER1_GIFIP6_RECURSIVE1
+ remote=$ROUTER2_GIFIP6_RECURSIVE1
+ src=$ROUTER1_GIFIP6
+ dst=$ROUTER2_GIFIP6
+ else
+ addr=$ROUTER1_GIFIP_RECURSIVE1
+ remote=$ROUTER2_GIFIP_RECURSIVE1
+ src=$ROUTER1_GIFIP
+ dst=$ROUTER2_GIFIP
+ fi
+ setup_recursive_if_gif $SOCK1 gif1 ${addr} ${remote} ${mode} \
+ ${src} ${dst}
+
+ if [ ${mode} = "ipv6" ]; then
+ addr=$ROUTER1_GIFIP6_RECURSIVE2
+ remote=$ROUTER2_GIFIP6_RECURSIVE2
+ src=$ROUTER1_GIFIP6_RECURSIVE1
+ dst=$ROUTER2_GIFIP6_RECURSIVE1
+ else
+ addr=$ROUTER1_GIFIP_RECURSIVE2
+ remote=$ROUTER2_GIFIP_RECURSIVE2
+ src=$ROUTER1_GIFIP_RECURSIVE1
+ dst=$ROUTER2_GIFIP_RECURSIVE1
+ fi
+ setup_recursive_if_gif $SOCK1 gif2 ${addr} ${remote} ${mode} \
+ ${src} ${dst}
+}
+
+# test in router1 only
+test_recursive_check()
+{
+ mode=$1
+
+ export RUMP_SERVER=$SOCK1
+ if [ ${mode} = "ipv6" ]; then
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 $ROUTER2_GIFIP6_RECURSIVE2
+ else
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w $TIMEOUT -c 1 $ROUTER2_GIFIP_RECURSIVE2
+ fi
+
+ atf_check -o match:'gif0: recursively called too many times' \
+ -x "$HIJACKING dmesg"
+
+ $HIJACKING dmesg
+}
+
+teardown_recursive_tunnels()
+{
+ export RUMP_SERVER=$SOCK1
+ atf_check -s exit:0 rump.ifconfig gif1 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif1 destroy
+ atf_check -s exit:0 rump.ifconfig gif2 deletetunnel
+ atf_check -s exit:0 rump.ifconfig gif2 destroy
+}
+
+test_ping_failure()
+{
+ mode=$1
+
+ export RUMP_SERVER=$SOCK1
+ if [ ${mode} = "ipv6" ]; then
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
+ $ROUTER2_LANIP6
+ else
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
+ $ROUTER2_LANIP
+ fi
+
+ export RUMP_SERVER=$SOCK2
+ if [ ${mode} = "ipv6" ]; then
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
+ $ROUTER1_LANIP6
+ else
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
+ $ROUTER2_LANIP
+ fi
+}
+
+test_ping_success()
+{
+ mode=$1
+
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v gif0
+ if [ ${mode} = "ipv6" ]; then
+ # XXX
+ # rump.ping6 rarely fails with the message that
+ # "failed to get receiving hop limit".
+ # This is a known issue being analyzed.
+ atf_check -s exit:0 -o ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER1_LANIP6 \
+ $ROUTER2_LANIP6
+ else
+ atf_check -s exit:0 -o ignore \
+ rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER1_LANIP \
+ $ROUTER2_LANIP
+ fi
+ rump.ifconfig -v gif0
+
+ export RUMP_SERVER=$SOCK2
+ rump.ifconfig -v gif0
+ if [ ${mode} = "ipv6" ]; then
+ atf_check -s exit:0 -o ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 -S $ROUTER2_LANIP6 \
+ $ROUTER1_LANIP6
+ else
+ atf_check -s exit:0 -o ignore \
+ rump.ping -n -w $TIMEOUT -c 1 -I $ROUTER2_LANIP \
+ $ROUTER1_LANIP
+ fi
+ rump.ifconfig -v gif0
+}
+
+test_change_tunnel_duplicate()
+{
+ mode=$1
+
+ newsrc=""
+ newdst=""
+ if [ ${mode} = "ipv6" ]; then
+ newsrc=$ROUTER1_WANIP6_DUMMY
+ newdst=$ROUTER2_WANIP6_DUMMY
+ else
+ newsrc=$ROUTER1_WANIP_DUMMY
+ newdst=$ROUTER2_WANIP_DUMMY
+ fi
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v gif0
+ rump.ifconfig -v gif1
+ atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
+ rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
+ rump.ifconfig -v gif0
+ rump.ifconfig -v gif1
+
+ if [ ${mode} = "ipv6" ]; then
+ newsrc=$ROUTER2_WANIP6_DUMMY
+ newdst=$ROUTER1_WANIP6_DUMMY
+ else
+ newsrc=$ROUTER2_WANIP_DUMMY
+ newdst=$ROUTER1_WANIP_DUMMY
+ fi
+ export RUMP_SERVER=$SOCK2
+ rump.ifconfig -v gif0
+ rump.ifconfig -v gif1
+ atf_check -s exit:0 -e match:SIOCSLIFPHYADDR \
+ rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
+ rump.ifconfig -v gif0
+ rump.ifconfig -v gif1
+}
+
+test_change_tunnel_success()
+{
+ mode=$1
+
+ newsrc=""
+ newdst=""
+ if [ ${mode} = "ipv6" ]; then
+ newsrc=$ROUTER1_WANIP6_DUMMY
+ newdst=$ROUTER2_WANIP6_DUMMY
+ else
+ newsrc=$ROUTER1_WANIP_DUMMY
+ newdst=$ROUTER2_WANIP_DUMMY
+ fi
+ export RUMP_SERVER=$SOCK1
+ rump.ifconfig -v gif0
+ atf_check -s exit:0 \
+ rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
+ rump.ifconfig -v gif0
+
+ if [ ${mode} = "ipv6" ]; then
+ newsrc=$ROUTER2_WANIP6_DUMMY
+ newdst=$ROUTER1_WANIP6_DUMMY
+ else
+ newsrc=$ROUTER2_WANIP_DUMMY
+ newdst=$ROUTER1_WANIP_DUMMY
+ fi
+ export RUMP_SERVER=$SOCK2
+ rump.ifconfig -v gif0
+ atf_check -s exit:0 \
+ rump.ifconfig gif0 tunnel ${newsrc} ${newdst}
+ rump.ifconfig -v gif0
+}
+
+basic_setup()
+{
+ inner=$1
+ outer=$2
+
+ setup ${inner} ${outer}
+ test_setup ${inner} ${outer}
+
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
+
+ setup_tunnel ${inner} ${outer}
+ sleep 1
+ test_setup_tunnel ${inner}
+}
+
+basic_test()
+{
+ inner=$1
+ outer=$2 # not use
+
+ test_ping_success ${inner}
+}
+
+basic_teardown()
+{
+ inner=$1
+ outer=$2 # not use
+
+ teardown_tunnel
+ test_ping_failure ${inner}
+}
+
+ioctl_setup()
+{
+ inner=$1
+ outer=$2
+
+ setup ${inner} ${outer}
+ test_setup ${inner} ${outer}
+
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
+
+ setup_tunnel ${inner} ${outer}
+ setup_dummy_tunnel ${inner} ${outer}
+ sleep 1
+ test_setup_tunnel ${inner}
+}
+
+ioctl_test()
+{
+ inner=$1
+ outer=$2
+
+ test_ping_success ${inner}
+
+ test_change_tunnel_duplicate ${outer}
+
+ teardown_dummy_tunnel
+ test_change_tunnel_success ${outer}
+}
+
+ioctl_teardown()
+{
+ inner=$1
+ outer=$2 # not use
+
+ teardown_tunnel
+ test_ping_failure ${inner}
+}
+
+recursive_setup()
+{
+ inner=$1
+ outer=$2
+
+ setup ${inner} ${outer}
+ test_setup ${inner} ${outer}
+
+ # Enable once PR kern/49219 is fixed
+ #test_ping_failure
+
+ setup_tunnel ${inner} ${outer}
+ setup_recursive_tunnels ${inner}
+ sleep 1
+ test_setup_tunnel ${inner}
+}
+
+recursive_test()
+{
+ inner=$1
+ outer=$2 # not use
+
+ test_recursive_check ${inner}
+}
+
+recursive_teardown()
+{
+ inner=$1 # not use
+ outer=$2 # not use
+
+ teardown_recursive_tunnels
+ teardown_tunnel
+}
+
+add_test()
+{
+ category=$1
+ desc=$2
+ inner=$3
+ outer=$4
+
+ name="gif_${category}_${inner}over${outer}"
+ fulldesc="Does ${inner} over ${outer} if_gif ${desc}"
+
+ atf_test_case ${name} cleanup
+ eval "${name}_head() { \
+ atf_set \"descr\" \"${fulldesc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ ${name}_body() { \
+ ${category}_setup ${inner} ${outer}; \
+ ${category}_test ${inner} ${outer}; \
+ ${category}_teardown ${inner} ${outer}; \
+ rump_server_destroy_ifaces; \
+ }; \
+ ${name}_cleanup() { \
+ $DEBUG && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case ${name}
+}
+
+add_test_allproto()
+{
+ category=$1
+ desc=$2
+
+ add_test ${category} "${desc}" ipv4 ipv4
+ add_test ${category} "${desc}" ipv4 ipv6
+ add_test ${category} "${desc}" ipv6 ipv4
+ add_test ${category} "${desc}" ipv6 ipv6
+}
+
+atf_init_test_cases()
+{
+ add_test_allproto basic "basic tests"
+ add_test_allproto ioctl "ioctl tests"
+ add_test_allproto recursive "recursive check tests"
+}
diff --git a/contrib/netbsd-tests/net/if_pppoe/t_pppoe.sh b/contrib/netbsd-tests/net/if_pppoe/t_pppoe.sh
new file mode 100755
index 0000000..8d9d5c2
--- /dev/null
+++ b/contrib/netbsd-tests/net/if_pppoe/t_pppoe.sh
@@ -0,0 +1,416 @@
+# $NetBSD: t_pppoe.sh,v 1.16 2016/12/14 03:30:30 knakahara Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+server="rump_server -lrump -lrumpnet -lrumpnet_net -lrumpnet_netinet \
+ -lrumpnet_netinet6 -lrumpnet_shmif -lrumpdev \
+ -lrumpnet_pppoe"
+# pppoectl doesn't work with RUMPHIJACK=sysctl=yes
+HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so"
+
+SERVER=unix://commsock1
+CLIENT=unix://commsock2
+
+SERVER_IP=10.3.3.1
+CLIENT_IP=10.3.3.3
+SERVER_IP6=fc00::1
+CLIENT_IP6=fc00::3
+AUTHNAME=foobar@baz.com
+SECRET=oink
+BUS=bus0
+TIMEOUT=3
+WAITTIME=10
+DEBUG=${DEBUG:-false}
+
+setup()
+{
+ inet=true
+
+ if [ $# -ne 0 ]; then
+ eval $@
+ fi
+
+ atf_check -s exit:0 ${server} $SERVER
+ atf_check -s exit:0 ${server} $CLIENT
+
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 rump.ifconfig pppoe0 create
+ $inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
+ inet $SERVER_IP $CLIENT_IP down
+ atf_check -s exit:0 rump.ifconfig pppoe0 link0
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+
+ atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 rump.ifconfig pppoe0 create
+ $inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
+ inet 0.0.0.0 0.0.0.1 down
+
+ atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
+ unset RUMP_SERVER
+}
+
+cleanup()
+{
+ env RUMP_SERVER=$SERVER rump.halt
+ env RUMP_SERVER=$CLIENT rump.halt
+}
+
+
+wait_for_session_established()
+{
+ local dontfail=$1
+ local n=$WAITTIME
+
+ for i in $(seq $n); do
+ $HIJACKING pppoectl -d pppoe0 |grep -q "state = session"
+ [ $? = 0 ] && return
+ sleep 1
+ done
+
+ if [ "$dontfail" != "dontfail" ]; then
+ atf_fail "Couldn't connect to the server for $n seconds."
+ fi
+}
+
+wait_for_disconnected()
+{
+ local dontfail=$1
+ local n=$WAITTIME
+
+ for i in $(seq $n); do
+ $HIJACKING pppoectl -d pppoe0 | grep -q "state = initial"
+ [ $? = 0 ] && return
+ # If PPPoE client is disconnected by PPPoE server and then
+ # the client kicks callout of pppoe_timeout(), the client
+ # state is changed to PPPOE_STATE_PADI_SENT while padi retrying.
+ $HIJACKING pppoectl -d pppoe0 | grep -q "state = PADI sent"
+ [ $? = 0 ] && return
+
+ sleep 1
+ done
+
+ if [ "$dontfail" != "dontfail" ]; then
+ atf_fail "Couldn't disconnect for $n seconds."
+ fi
+}
+
+run_test()
+{
+ local auth=$1
+ setup
+
+ # As pppoe client doesn't support rechallenge yet.
+ local server_optparam=""
+ if [ $auth = "chap" ]; then
+ server_optparam="norechallenge"
+ fi
+
+ export RUMP_SERVER=$SERVER
+ local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
+ 'hisauthname=$AUTHNAME' \
+ 'hisauthsecret=$SECRET' \
+ 'myauthproto=none' \
+ $server_optparam"
+ atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$CLIENT
+ local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
+ 'myauthname=$AUTHNAME' \
+ 'myauthsecret=$SECRET' \
+ 'hisauthproto=none'"
+ atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ $DEBUG && rump.ifconfig
+ wait_for_session_established
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
+ unset RUMP_SERVER
+
+ # test for disconnection from server
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ export RUMP_SERVER=$CLIENT
+ wait_for_disconnected
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -c 1 -w $TIMEOUT $SERVER_IP
+ atf_check -s exit:0 -o match:'PADI sent' -x "$HIJACKING pppoectl -d pppoe0"
+ unset RUMP_SERVER
+
+ # test for recoonecting
+ atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 up"
+ export RUMP_SERVER=$CLIENT
+ wait_for_session_established
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
+ unset RUMP_SERVER
+
+ # test for disconnection from client
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 -x rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ export RUMP_SERVER=$SERVER
+ wait_for_disconnected
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
+ atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
+ unset RUMP_SERVER
+
+ # test for reconnecting
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 -x rump.ifconfig pppoe0 up
+ wait_for_session_established
+ $DEBUG && rump.ifconfig pppoe0
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
+ atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
+ $DEBUG && HIJACKING pppoectl -d pppoe0
+ unset RUMP_SERVER
+
+ # test for invalid password
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
+ 'myauthname=$AUTHNAME' \
+ 'myauthsecret=invalidsecret' \
+ 'hisauthproto=none'"
+ atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ wait_for_session_established dontfail
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -c 1 -w $TIMEOUT $SERVER_IP
+ atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
+ unset RUMP_SERVER
+}
+
+atf_test_case pppoe_pap cleanup
+
+pppoe_pap_head()
+{
+ atf_set "descr" "Does simple pap tests"
+ atf_set "require.progs" "rump_server pppoectl"
+}
+
+pppoe_pap_body()
+{
+ run_test pap
+}
+
+pppoe_pap_cleanup()
+{
+ cleanup
+}
+
+atf_test_case pppoe_chap cleanup
+
+pppoe_chap_head()
+{
+ atf_set "descr" "Does simple chap tests"
+ atf_set "require.progs" "rump_server pppoectl"
+}
+
+pppoe_chap_body()
+{
+ run_test chap
+}
+
+pppoe_chap_cleanup()
+{
+ cleanup
+}
+
+run_test6()
+{
+ local auth=$1
+ setup "inet=false"
+
+ # As pppoe client doesn't support rechallenge yet.
+ local server_optparam=""
+ if [ $auth = "chap" ]; then
+ server_optparam="norechallenge"
+ fi
+
+ export RUMP_SERVER=$SERVER
+ local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
+ 'hisauthname=$AUTHNAME' \
+ 'hisauthsecret=$SECRET' \
+ 'myauthproto=none' \
+ $server_optparam"
+ atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $SERVER_IP6/64 down
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$CLIENT
+ local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
+ 'myauthname=$AUTHNAME' \
+ 'myauthsecret=$SECRET' \
+ 'hisauthproto=none'"
+ atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $CLIENT_IP6/64 down
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ $DEBUG && rump.ifconfig
+ wait_for_session_established
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
+ unset RUMP_SERVER
+
+ # test for disconnection from server
+ export RUMP_SERVER=$SERVER
+ session_id=`$HIJACKING pppoectl -d pppoe0 | grep state`
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ export RUMP_SERVER=$CLIENT
+ wait_for_disconnected
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
+ atf_check -s exit:0 -o not-match:"$session_id" -x "$HIJACKING pppoectl -d pppoe0"
+ unset RUMP_SERVER
+
+ # test for recoonecting
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ wait_for_session_established
+ atf_check -s exit:0 rump.ifconfig -w 10
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ $DEBUG && rump.ifconfig pppoe0
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
+ unset RUMP_SERVER
+
+ # test for disconnection from client
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+
+ export RUMP_SERVER=$SERVER
+ wait_for_disconnected
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
+ atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
+ unset RUMP_SERVER
+
+ # test for reconnecting
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ wait_for_session_established
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig pppoe0
+ $DEBUG && $HIJACKING pppoectl -d pppoe0
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$SERVER
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
+ atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
+ $DEBUG && HIJACKING pppoectl -d pppoe0
+ unset RUMP_SERVER
+
+ # test for invalid password
+ export RUMP_SERVER=$CLIENT
+ atf_check -s exit:0 rump.ifconfig pppoe0 down
+ wait_for_disconnected
+ local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
+ 'myauthname=$AUTHNAME' \
+ 'myauthsecret=invalidsecret' \
+ 'hisauthproto=none'"
+ atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
+ atf_check -s exit:0 rump.ifconfig pppoe0 up
+ wait_for_session_established dontfail
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
+ atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
+ unset RUMP_SERVER
+}
+
+atf_test_case pppoe6_pap cleanup
+
+pppoe6_pap_head()
+{
+ atf_set "descr" "Does simple pap using IPv6 tests"
+ atf_set "require.progs" "rump_server pppoectl"
+}
+
+pppoe6_pap_body()
+{
+ run_test6 pap
+}
+
+pppoe6_pap_cleanup()
+{
+ cleanup
+}
+
+atf_test_case pppoe6_chap cleanup
+
+pppoe6_chap_head()
+{
+ atf_set "descr" "Does simple chap using IPv6 tests"
+ atf_set "require.progs" "rump_server pppoectl"
+}
+
+pppoe6_chap_body()
+{
+ run_test6 chap
+}
+
+pppoe6_chap_cleanup()
+{
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case pppoe_pap
+ atf_add_test_case pppoe_chap
+ atf_add_test_case pppoe6_pap
+ atf_add_test_case pppoe6_chap
+}
diff --git a/contrib/netbsd-tests/net/if_tap/t_tap.sh b/contrib/netbsd-tests/net/if_tap/t_tap.sh
new file mode 100755
index 0000000..4b1ce25
--- /dev/null
+++ b/contrib/netbsd-tests/net/if_tap/t_tap.sh
@@ -0,0 +1,198 @@
+# $NetBSD: t_tap.sh,v 1.6 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+SOCK_REMOTE=unix://commsock2
+BUS=bus1
+IP4_LOCAL=10.0.0.1
+IP4_TAP=10.0.0.2
+IP4_REMOTE=10.0.0.3
+IP6_LOCAL=fc00::1
+IP6_TAP=fc00::2
+IP6_REMOTE=fc00::3
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=1
+
+atf_test_case tap_create_destroy cleanup
+tap_create_destroy_head()
+{
+
+ atf_set "descr" "tests of creation and deletion of tap interface"
+ atf_set "require.progs" "rump_server"
+}
+
+tap_create_destroy_body()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6 tap
+
+ export RUMP_SERVER=${SOCK_LOCAL}
+
+ # Create and destroy (no address)
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 destroy
+
+ # Create and destroy (with an IPv4 address)
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 up
+ atf_check -s exit:0 rump.ifconfig tap0 destroy
+
+ # Create and destroy (with an IPv6 address)
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 up
+ atf_check -s exit:0 rump.ifconfig tap0 destroy
+}
+
+tap_create_destroy_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case tap_stand_alone cleanup
+tap_create_destroy_head()
+{
+
+ atf_set "descr" "tests of alone tap interface"
+ atf_set "require.progs" "rump_server"
+}
+
+tap_stand_alone_body()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6 tap
+ rump_server_start $SOCK_REMOTE netinet6 tap
+
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+ rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
+
+ export RUMP_SERVER=${SOCK_LOCAL}
+ atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ export RUMP_SERVER=${SOCK_REMOTE}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL
+ # Cannot reach to an alone tap
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL
+ # Cannot reach to an alone tap
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP
+
+ rump_server_destroy_ifaces
+}
+
+tap_stand_alone_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case tap_bridged cleanup
+tap_bridged_head()
+{
+
+ atf_set "descr" "tests of alone tap interface"
+ atf_set "require.progs" "rump_server"
+}
+
+tap_bridged_body()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6 tap bridge
+ rump_server_start $SOCK_REMOTE netinet6 tap
+
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+ rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
+
+ export RUMP_SERVER=${SOCK_LOCAL}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 $IP4_LOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_LOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig tap0 create
+ atf_check -s exit:0 rump.ifconfig tap0 $IP4_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 inet6 $IP6_TAP
+ atf_check -s exit:0 rump.ifconfig tap0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ atf_check -s exit:0 rump.ifconfig bridge0 create
+ atf_check -s exit:0 rump.ifconfig bridge0 up
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 brconfig bridge0 add shmif0
+ atf_check -s exit:0 brconfig bridge0 add tap0
+ unset LD_PRELOAD
+
+ export RUMP_SERVER=${SOCK_REMOTE}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 $IP4_REMOTE
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_REMOTE
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 $IP4_TAP
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_LOCAL
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6_TAP
+
+ rump_server_destroy_ifaces
+}
+
+tap_bridged_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case tap_create_destroy
+ atf_add_test_case tap_stand_alone
+ atf_add_test_case tap_bridged
+}
diff --git a/contrib/netbsd-tests/net/in_cksum/assym.h b/contrib/netbsd-tests/net/in_cksum/assym.h
new file mode 100644
index 0000000..60aa41f
--- /dev/null
+++ b/contrib/netbsd-tests/net/in_cksum/assym.h
@@ -0,0 +1,10 @@
+/* XXX: Depends on m_hdr */
+#ifdef _LP64
+#define M_NEXT 0
+#define M_DATA 16
+#define M_LEN 32
+#else
+#define M_NEXT 0
+#define M_DATA 8
+#define M_LEN 16
+#endif
diff --git a/contrib/netbsd-tests/net/in_cksum/in_cksum.c b/contrib/netbsd-tests/net/in_cksum/in_cksum.c
new file mode 100644
index 0000000..4bdaf5b
--- /dev/null
+++ b/contrib/netbsd-tests/net/in_cksum/in_cksum.c
@@ -0,0 +1,270 @@
+/* $NetBSD: in_cksum.c,v 1.5 2015/10/18 18:27:25 christos Exp $ */
+/*-
+ * Copyright (c) 2008 Joerg Sonnenberger <joerg@NetBSD.org>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: in_cksum.c,v 1.5 2015/10/18 18:27:25 christos Exp $");
+
+#include <sys/param.h>
+#include <sys/mbuf.h>
+#include <sys/resource.h>
+#include <err.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define cpu_in_cksum portable_cpu_in_cksum
+#include "cpu_in_cksum.c"
+
+#ifdef HAVE_CPU_IN_CKSUM
+#undef cpu_in_cksum
+int cpu_in_cksum(struct mbuf*, int, int, uint32_t);
+#endif
+
+static bool random_aligned;
+
+void panic(const char *, ...) __printflike(1, 2);
+void
+panic(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ verrx(1, fmt, ap);
+ va_end(ap);
+}
+
+static void
+free_mbuf_chain(struct mbuf *m)
+{
+ struct mbuf *next;
+
+ if (m == NULL)
+ return;
+
+ next = m->m_next;
+ free(m);
+ free_mbuf_chain(next);
+}
+
+static struct mbuf *
+allocate_mbuf_chain(char **lens)
+{
+ int len, off;
+ struct mbuf *m;
+
+ if (*lens == NULL)
+ return NULL;
+
+ len = atoi(*lens);
+ off = random_aligned ? rand() % 64 : 0;
+
+ m = malloc(sizeof(struct m_hdr) + len + off);
+ if (m == NULL)
+ err(EXIT_FAILURE, "malloc failed");
+
+ m->m_data = (char *)m + sizeof(struct m_hdr) + off;
+ m->m_len = len;
+
+ m->m_next = allocate_mbuf_chain(lens + 1);
+
+ return m;
+}
+
+#ifdef MBUFDUMP
+static void
+dump_mbuf(const struct mbuf *m, int len, int off)
+{
+ int x = 0;
+ if (len <= 0)
+ return;
+
+ printf("Starting len=%d off=%d:\n", len, off);
+ if (off > 0) {
+ for (; m; m = m->m_next)
+ if (off > m->m_len)
+ off -= m->m_len;
+ else
+ break;
+ if (m == NULL || off > m->m_len)
+ errx(1, "out of data");
+ }
+
+ unsigned char *ptr = mtod(m, unsigned char *) + off;
+ unsigned char *eptr = ptr + m->m_len;
+ printf("[");
+ for (;;) {
+ if (ptr == eptr) {
+ m = m->m_next;
+ if (m == NULL)
+ errx(1, "out of data");
+ ptr = mtod(m, unsigned char *);
+ eptr = ptr + m->m_len;
+ printf("]\n[");
+ x = 0;
+ }
+ printf("%.2x ", *ptr++);
+ if (++x % 16 == 0)
+ printf("\n");
+ if (--len == 0)
+ break;
+ }
+ printf("]\n");
+ fflush(stdout);
+}
+#endif
+
+static void
+randomise_mbuf_chain(struct mbuf *m)
+{
+ int i, data, len;
+
+ for (i = 0; i < m->m_len; i += sizeof(int)) {
+ data = rand();
+ if (i + sizeof(int) < (size_t)m->m_len)
+ len = sizeof(int);
+ else
+ len = m->m_len - i;
+ memcpy(m->m_data + i, &data, len);
+ }
+ if (m->m_next)
+ randomise_mbuf_chain(m->m_next);
+}
+
+static int
+mbuf_len(struct mbuf *m)
+{
+ return m == NULL ? 0 : m->m_len + mbuf_len(m->m_next);
+}
+
+int in_cksum_portable(struct mbuf *, int);
+int in_cksum(struct mbuf *, int);
+
+int
+main(int argc, char **argv)
+{
+ struct rusage res;
+ struct timeval tv, old_tv;
+ int loops, old_sum, off, len;
+#ifdef HAVE_CPU_IN_CKSUM
+ int new_sum;
+#endif
+ long i, iterations;
+ uint32_t init_sum;
+ struct mbuf *m;
+ bool verbose;
+ int c;
+
+ loops = 16;
+ verbose = false;
+ random_aligned = 0;
+ iterations = 100000;
+
+ while ((c = getopt(argc, argv, "i:l:u:v")) != -1) {
+ switch (c) {
+ case 'i':
+ iterations = atoi(optarg);
+ break;
+ case 'l':
+ loops = atoi(optarg);
+ break;
+ case 'u':
+ random_aligned = atoi(optarg);
+ break;
+ case 'v':
+ verbose = true;
+ break;
+ default:
+ errx(1, "%s [-l <loops>] [-u <unalign> [-i <iterations> "
+ "[<mbuf-size> ...]", getprogname());
+ }
+ }
+
+ for (; loops; --loops) {
+ if ((m = allocate_mbuf_chain(argv + 4)) == NULL)
+ continue;
+ randomise_mbuf_chain(m);
+ init_sum = rand();
+ len = mbuf_len(m);
+
+ /* force one loop over all data */
+ if (loops == 1)
+ off = 0;
+ else
+ off = len ? rand() % len : 0;
+
+ len -= off;
+ old_sum = portable_cpu_in_cksum(m, len, off, init_sum);
+#ifdef HAVE_CPU_IN_CKSUM
+#ifdef MBUFDUMP
+ printf("m->m_len=%d len=%d off=%d\n", m->m_len, len, off);
+ dump_mbuf(m, len, off);
+#endif
+ new_sum = cpu_in_cksum(m, len, off, init_sum);
+ if (old_sum != new_sum)
+ errx(1, "comparison failed: %x %x", old_sum, new_sum);
+#else
+ __USE(old_sum);
+#endif
+
+ if (iterations == 0)
+ continue;
+
+ getrusage(RUSAGE_SELF, &res);
+ tv = res.ru_utime;
+ for (i = iterations; i; --i)
+ (void)portable_cpu_in_cksum(m, len, off, init_sum);
+ getrusage(RUSAGE_SELF, &res);
+ timersub(&res.ru_utime, &tv, &old_tv);
+ if (verbose)
+ printf("portable version: %jd.%06jd\n",
+ (intmax_t)old_tv.tv_sec, (intmax_t)old_tv.tv_usec);
+
+#ifdef HAVE_CPU_IN_CKSUM
+ getrusage(RUSAGE_SELF, &res);
+ tv = res.ru_utime;
+ for (i = iterations; i; --i)
+ (void)cpu_in_cksum(m, len, off, init_sum);
+ getrusage(RUSAGE_SELF, &res);
+ timersub(&res.ru_utime, &tv, &tv);
+ if (verbose) {
+ printf("test version: %jd.%06jd\n",
+ (intmax_t)tv.tv_sec, (intmax_t)tv.tv_usec);
+ printf("relative time: %3.g%%\n",
+ 100 * ((double)tv.tv_sec * 1e6 + tv.tv_usec) /
+ ((double)old_tv.tv_sec * 1e6 + old_tv.tv_usec + 1));
+ }
+#endif
+ free_mbuf_chain(m);
+ }
+
+ return 0;
+}
diff --git a/contrib/netbsd-tests/net/in_cksum/t_in_cksum.sh b/contrib/netbsd-tests/net/in_cksum/t_in_cksum.sh
new file mode 100755
index 0000000..a342403
--- /dev/null
+++ b/contrib/netbsd-tests/net/in_cksum/t_in_cksum.sh
@@ -0,0 +1,78 @@
+#! /usr/bin/atf-sh
+# $NetBSD: t_in_cksum.sh,v 1.2 2015/01/06 15:13:16 martin Exp $
+#
+
+TIMING_LOOPS=10000
+incksum="$(atf_get_srcdir)/in_cksum"
+
+fail() {
+ atf_fail "see output for details"
+}
+
+mbufs() {
+ ${incksum} -l 16 -u $0 -i ${TIMING_LOOPS} \
+ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 \
+ || fail
+ ${incksum} -l 16 -u $0 -i ${TIMING_LOOPS} \
+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+ || fail
+ ${incksum} -l 64 -u $0 -i ${TIMING_LOOPS} \
+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \
+ || fail
+ ${incksum} -l 16 -u $0 -i ${TIMING_LOOPS} \
+ 1 3 1 3 1 3 1 \
+ || fail
+}
+
+sizes() {
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 2048 || fail
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 40 || fail
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 1536 || fail
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 576 || fail
+ ${incksum} -l 16 -u $1 -i ${TIMING_LOOPS} 1536 1536 1536 1536 1536 640 \
+ || fail
+}
+
+atf_test_case mbufs_aligned
+
+mbufs_aligned_head() {
+ atf_set "descr" "Test in_cksum mbuf chains aligned"
+}
+
+mbufs_aligned_body() {
+ mbufs 0
+}
+
+mbufs_unaligned_head() {
+ atf_set "descr" "Test in_cksum mbuf chains unaligned"
+}
+
+mbufs_unaligned_body() {
+ mbufs 1
+}
+
+sizes_aligned_head() {
+ atf_set "descr" "Test in_cksum sizes aligned"
+}
+
+sizes_aligned_body() {
+ sizes 0
+}
+
+sizes_unaligned_head() {
+ atf_set "descr" "Test in_cksum sizes unaligned"
+}
+
+sizes_unaligned_body() {
+ sizes 1
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case mbufs_aligned
+ atf_add_test_case mbufs_unaligned
+ atf_add_test_case sizes_aligned
+ atf_add_test_case sizes_unaligned
+}
diff --git a/contrib/netbsd-tests/net/mcast/mcast.c b/contrib/netbsd-tests/net/mcast/mcast.c
new file mode 100644
index 0000000..ad2c9b3
--- /dev/null
+++ b/contrib/netbsd-tests/net/mcast/mcast.c
@@ -0,0 +1,559 @@
+/* $NetBSD: mcast.c,v 1.3 2015/05/28 10:19:17 ozaki-r Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+#ifdef __RCSID
+__RCSID("$NetBSD: mcast.c,v 1.3 2015/05/28 10:19:17 ozaki-r Exp $");
+#else
+extern const char *__progname;
+#define getprogname() __progname
+#endif
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <sys/time.h>
+#include <netinet/in.h>
+
+#include <assert.h>
+#include <netdb.h>
+#include <time.h>
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <err.h>
+#include <errno.h>
+#include <poll.h>
+#include <stdbool.h>
+
+#ifdef ATF
+#include <atf-c.h>
+
+#define ERRX(ev, msg, ...) ATF_REQUIRE_MSG(0, msg, __VA_ARGS__)
+#define ERRX0(ev, msg) ATF_REQUIRE_MSG(0, msg)
+
+#define SKIPX(ev, msg, ...) do { \
+ atf_tc_skip(msg, __VA_ARGS__); \
+ return; \
+} while(/*CONSTCOND*/0)
+
+#else
+#define ERRX(ev, msg, ...) errx(ev, msg, __VA_ARGS__)
+#define ERRX0(ev, msg) errx(ev, msg)
+#define SKIPX(ev, msg, ...) errx(ev, msg, __VA_ARGS__)
+#endif
+
+static int debug;
+
+#define TOTAL 10
+#define PORT_V4MAPPED "6666"
+#define HOST_V4MAPPED "::FFFF:239.1.1.1"
+#define PORT_V4 "6666"
+#define HOST_V4 "239.1.1.1"
+#define PORT_V6 "6666"
+#define HOST_V6 "FF05:1:0:0:0:0:0:1"
+
+struct message {
+ size_t seq;
+ struct timespec ts;
+};
+
+static int
+addmc(int s, struct addrinfo *ai, bool bug)
+{
+ struct ip_mreq m4;
+ struct ipv6_mreq m6;
+ struct sockaddr_in *s4;
+ struct sockaddr_in6 *s6;
+ unsigned int ifc;
+
+ switch (ai->ai_family) {
+ case AF_INET:
+ s4 = (void *)ai->ai_addr;
+ assert(sizeof(*s4) == ai->ai_addrlen);
+ m4.imr_multiaddr = s4->sin_addr;
+ m4.imr_interface.s_addr = htonl(INADDR_ANY);
+ return setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
+ &m4, sizeof(m4));
+ case AF_INET6:
+ s6 = (void *)ai->ai_addr;
+ /*
+ * Linux: Does not support the v6 ioctls on v4 mapped
+ * sockets but it does support the v4 ones and
+ * it works.
+ * MacOS/X: Supports the v6 ioctls on v4 mapped sockets,
+ * but does not work and also does not support
+ * the v4 ioctls. So no way to make multicasting
+ * work with mapped addresses.
+ * NetBSD: Supports both and works for both.
+ */
+ if (bug && IN6_IS_ADDR_V4MAPPED(&s6->sin6_addr)) {
+ memcpy(&m4.imr_multiaddr, &s6->sin6_addr.s6_addr[12],
+ sizeof(m4.imr_multiaddr));
+ m4.imr_interface.s_addr = htonl(INADDR_ANY);
+ return setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,
+ &m4, sizeof(m4));
+ }
+ assert(sizeof(*s6) == ai->ai_addrlen);
+ memset(&m6, 0, sizeof(m6));
+#if 0
+ ifc = 1;
+ if (setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_LOOP,
+ &ifc, sizeof(ifc)) == -1)
+ return -1;
+ ifc = 224;
+ if (setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
+ &ifc, sizeof(ifc)) == -1)
+ return -1;
+ ifc = 1; /* XXX should pick a proper interface */
+ if (setsockopt(s, IPPROTO_IPV6, IPV6_MULTICAST_IF, &ifc,
+ sizeof(ifc)) == -1)
+ return -1;
+#else
+ ifc = 0; /* Let pick an appropriate interface */
+#endif
+ m6.ipv6mr_interface = ifc;
+ m6.ipv6mr_multiaddr = s6->sin6_addr;
+ return setsockopt(s, IPPROTO_IPV6, IPV6_JOIN_GROUP,
+ &m6, sizeof(m6));
+ default:
+ errno = EOPNOTSUPP;
+ return -1;
+ }
+}
+
+static int
+allowv4mapped(int s, struct addrinfo *ai)
+{
+ struct sockaddr_in6 *s6;
+ int zero = 0;
+
+ if (ai->ai_family != AF_INET6)
+ return 0;
+
+ s6 = (void *)ai->ai_addr;
+
+ if (!IN6_IS_ADDR_V4MAPPED(&s6->sin6_addr))
+ return 0;
+ return setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero));
+}
+
+static struct sockaddr_storage ss;
+static int
+connector(int fd, const struct sockaddr *sa, socklen_t slen)
+{
+ assert(sizeof(ss) > slen);
+ memcpy(&ss, sa, slen);
+ return 0;
+}
+
+static void
+show(const char *prefix, const struct message *msg)
+{
+ printf("%10.10s: %zu [%jd.%ld]\n", prefix, msg->seq, (intmax_t)
+ msg->ts.tv_sec, msg->ts.tv_nsec);
+}
+
+static int
+getsocket(const char *host, const char *port,
+ int (*f)(int, const struct sockaddr *, socklen_t), socklen_t *slen,
+ bool bug)
+{
+ int e, s, lasterrno = 0;
+ struct addrinfo hints, *ai0, *ai;
+ const char *cause = "?";
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_DGRAM;
+ e = getaddrinfo(host, port, &hints, &ai0);
+ if (e)
+ ERRX(EXIT_FAILURE, "Can't resolve %s:%s (%s)", host, port,
+ gai_strerror(e));
+
+ s = -1;
+ for (ai = ai0; ai; ai = ai->ai_next) {
+ s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+ if (s == -1) {
+ lasterrno = errno;
+ cause = "socket";
+ continue;
+ }
+ if (allowv4mapped(s, ai) == -1) {
+ cause = "allow v4 mapped";
+ goto out;
+ }
+ if ((*f)(s, ai->ai_addr, ai->ai_addrlen) == -1) {
+ cause = f == bind ? "bind" : "connect";
+ goto out;
+ }
+ if ((f == bind || f == connector) && addmc(s, ai, bug) == -1) {
+ cause = "join group";
+ goto out;
+ }
+ *slen = ai->ai_addrlen;
+ break;
+out:
+ lasterrno = errno;
+ close(s);
+ s = -1;
+ continue;
+ }
+ freeaddrinfo(ai0);
+ if (s == -1)
+ ERRX(EXIT_FAILURE, "%s (%s)", cause, strerror(lasterrno));
+ return s;
+}
+
+static int
+synchronize(const int fd, bool waiter)
+{
+ int syncmsg = 0;
+ int r;
+ struct pollfd pfd;
+
+ if (waiter) {
+ pfd.fd = fd;
+ pfd.events = POLLIN;
+
+ /* We use poll to avoid lock up when the peer died unexpectedly */
+ r = poll(&pfd, 1, 10000);
+ if (r == -1)
+ ERRX(EXIT_FAILURE, "poll (%s)", strerror(errno));
+ if (r == 0)
+ /* Timed out */
+ return -1;
+
+ if (read(fd, &syncmsg, sizeof(syncmsg)) == -1)
+ ERRX(EXIT_FAILURE, "read (%s)", strerror(errno));
+ } else {
+ if (write(fd, &syncmsg, sizeof(syncmsg)) == -1)
+ ERRX(EXIT_FAILURE, "write (%s)", strerror(errno));
+ }
+
+ return 0;
+}
+
+static int
+sender(const int fd, const char *host, const char *port, size_t n, bool conn,
+ bool bug)
+{
+ int s;
+ ssize_t l;
+ struct message msg;
+
+ socklen_t slen;
+
+ s = getsocket(host, port, conn ? connect : connector, &slen, bug);
+
+ /* Wait until receiver gets ready. */
+ if (synchronize(fd, true) == -1)
+ return -1;
+
+ for (msg.seq = 0; msg.seq < n; msg.seq++) {
+#ifdef CLOCK_MONOTONIC
+ if (clock_gettime(CLOCK_MONOTONIC, &msg.ts) == -1)
+ ERRX(EXIT_FAILURE, "clock (%s)", strerror(errno));
+#else
+ struct timeval tv;
+ if (gettimeofday(&tv, NULL) == -1)
+ ERRX(EXIT_FAILURE, "clock (%s)", strerror(errno));
+ msg.ts.tv_sec = tv.tv_sec;
+ msg.ts.tv_nsec = tv.tv_usec * 1000;
+#endif
+ if (debug)
+ show("sending", &msg);
+ l = conn ? send(s, &msg, sizeof(msg), 0) :
+ sendto(s, &msg, sizeof(msg), 0, (void *)&ss, slen);
+ if (l == -1)
+ ERRX(EXIT_FAILURE, "send (%s)", strerror(errno));
+ usleep(100);
+ }
+
+ /* Wait until receiver finishes its work. */
+ if (synchronize(fd, true) == -1)
+ return -1;
+
+ return 0;
+}
+
+static void
+receiver(const int fd, const char *host, const char *port, size_t n, bool conn,
+ bool bug)
+{
+ int s;
+ ssize_t l;
+ size_t seq;
+ struct message msg;
+ struct pollfd pfd;
+ socklen_t slen;
+
+ s = getsocket(host, port, bind, &slen, bug);
+ pfd.fd = s;
+ pfd.events = POLLIN;
+
+ /* Tell I'm ready */
+ synchronize(fd, false);
+
+ for (seq = 0; seq < n; seq++) {
+ if (poll(&pfd, 1, 10000) == -1)
+ ERRX(EXIT_FAILURE, "poll (%s)", strerror(errno));
+ l = conn ? recv(s, &msg, sizeof(msg), 0) :
+ recvfrom(s, &msg, sizeof(msg), 0, (void *)&ss, &slen);
+ if (l == -1)
+ ERRX(EXIT_FAILURE, "recv (%s)", strerror(errno));
+ if (debug)
+ show("got", &msg);
+ if (seq != msg.seq)
+ ERRX(EXIT_FAILURE, "seq: expect=%zu actual=%zu",
+ seq, msg.seq);
+ }
+
+ /* Tell I'm finished */
+ synchronize(fd, false);
+}
+
+static void
+run(const char *host, const char *port, size_t n, bool conn, bool bug)
+{
+ pid_t pid;
+ int status;
+ int syncfds[2];
+ int error;
+
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, syncfds) == -1)
+ ERRX(EXIT_FAILURE, "socketpair (%s)", strerror(errno));
+
+ switch ((pid = fork())) {
+ case 0:
+ receiver(syncfds[0], host, port, n, conn, bug);
+ return;
+ case -1:
+ ERRX(EXIT_FAILURE, "fork (%s)", strerror(errno));
+ default:
+ error = sender(syncfds[1], host, port, n, conn, bug);
+ again:
+ switch (waitpid(pid, &status, WNOHANG)) {
+ case -1:
+ ERRX(EXIT_FAILURE, "wait (%s)", strerror(errno));
+ case 0:
+ if (error == 0)
+ /*
+ * Receiver is still alive, but we know
+ * it will exit soon.
+ */
+ goto again;
+
+ if (kill(pid, SIGTERM) == -1)
+ ERRX(EXIT_FAILURE, "kill (%s)",
+ strerror(errno));
+ goto again;
+ default:
+ if (WIFSIGNALED(status)) {
+ if (WTERMSIG(status) == SIGTERM)
+ ERRX0(EXIT_FAILURE,
+ "receiver failed and was killed" \
+ "by sender");
+ else
+ ERRX(EXIT_FAILURE,
+ "receiver got signaled (%s)",
+ strsignal(WTERMSIG(status)));
+ } else if (WIFEXITED(status)) {
+ if (WEXITSTATUS(status) != 0)
+ ERRX(EXIT_FAILURE,
+ "receiver exited with status %d",
+ WEXITSTATUS(status));
+ } else {
+ ERRX(EXIT_FAILURE,
+ "receiver exited with unexpected status %d",
+ status);
+ }
+ break;
+ }
+ return;
+ }
+}
+
+#ifndef ATF
+int
+main(int argc, char *argv[])
+{
+ const char *host, *port;
+ int c;
+ size_t n;
+ bool conn, bug;
+
+ host = HOST_V4;
+ port = PORT_V4;
+ n = TOTAL;
+ bug = conn = false;
+
+ while ((c = getopt(argc, argv, "46bcdmn:")) != -1)
+ switch (c) {
+ case '4':
+ host = HOST_V4;
+ port = PORT_V4;
+ break;
+ case '6':
+ host = HOST_V6;
+ port = PORT_V6;
+ break;
+ case 'b':
+ bug = true;
+ break;
+ case 'c':
+ conn = true;
+ break;
+ case 'd':
+ debug++;
+ break;
+ case 'm':
+ host = HOST_V4MAPPED;
+ port = PORT_V4MAPPED;
+ break;
+ case 'n':
+ n = atoi(optarg);
+ break;
+ default:
+ fprintf(stderr, "Usage: %s [-cdm46] [-n <tot>]",
+ getprogname());
+ return 1;
+ }
+
+ run(host, port, n, conn, bug);
+ return 0;
+}
+#else
+
+ATF_TC(conninet4);
+ATF_TC_HEAD(conninet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks connected multicast for ipv4");
+}
+
+ATF_TC_BODY(conninet4, tc)
+{
+ run(HOST_V4, PORT_V4, TOTAL, true, false);
+}
+
+ATF_TC(connmappedinet4);
+ATF_TC_HEAD(connmappedinet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks connected multicast for mapped ipv4");
+}
+
+ATF_TC_BODY(connmappedinet4, tc)
+{
+ run(HOST_V4MAPPED, PORT_V4MAPPED, TOTAL, true, false);
+}
+
+ATF_TC(connmappedbuginet4);
+ATF_TC_HEAD(connmappedbuginet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks connected multicast for mapped ipv4 using the v4 ioctls");
+}
+
+ATF_TC_BODY(connmappedbuginet4, tc)
+{
+ run(HOST_V4MAPPED, PORT_V4MAPPED, TOTAL, true, true);
+}
+
+ATF_TC(conninet6);
+ATF_TC_HEAD(conninet6, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks connected multicast for ipv6");
+}
+
+ATF_TC_BODY(conninet6, tc)
+{
+ run(HOST_V6, PORT_V6, TOTAL, true, false);
+}
+
+ATF_TC(unconninet4);
+ATF_TC_HEAD(unconninet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks unconnected multicast for ipv4");
+}
+
+ATF_TC_BODY(unconninet4, tc)
+{
+ run(HOST_V4, PORT_V4, TOTAL, false, false);
+}
+
+ATF_TC(unconnmappedinet4);
+ATF_TC_HEAD(unconnmappedinet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks unconnected multicast for mapped ipv4");
+}
+
+ATF_TC_BODY(unconnmappedinet4, tc)
+{
+ run(HOST_V4MAPPED, PORT_V4MAPPED, TOTAL, false, false);
+}
+
+ATF_TC(unconnmappedbuginet4);
+ATF_TC_HEAD(unconnmappedbuginet4, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks unconnected multicast for mapped ipv4 using the v4 ioctls");
+}
+
+ATF_TC_BODY(unconnmappedbuginet4, tc)
+{
+ run(HOST_V4MAPPED, PORT_V4MAPPED, TOTAL, false, true);
+}
+
+ATF_TC(unconninet6);
+ATF_TC_HEAD(unconninet6, tc)
+{
+ atf_tc_set_md_var(tc, "descr", "Checks unconnected multicast for ipv6");
+}
+
+ATF_TC_BODY(unconninet6, tc)
+{
+ run(HOST_V6, PORT_V6, TOTAL, false, false);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+ debug++;
+ ATF_TP_ADD_TC(tp, conninet4);
+ ATF_TP_ADD_TC(tp, connmappedinet4);
+ ATF_TP_ADD_TC(tp, connmappedbuginet4);
+ ATF_TP_ADD_TC(tp, conninet6);
+ ATF_TP_ADD_TC(tp, unconninet4);
+ ATF_TP_ADD_TC(tp, unconnmappedinet4);
+ ATF_TP_ADD_TC(tp, unconnmappedbuginet4);
+ ATF_TP_ADD_TC(tp, unconninet6);
+
+ return atf_no_error();
+}
+#endif
diff --git a/contrib/netbsd-tests/net/mcast/t_mcast.sh b/contrib/netbsd-tests/net/mcast/t_mcast.sh
new file mode 100755
index 0000000..aeb7000
--- /dev/null
+++ b/contrib/netbsd-tests/net/mcast/t_mcast.sh
@@ -0,0 +1,106 @@
+# $NetBSD: t_mcast.sh,v 1.4 2016/11/25 08:51:16 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+export RUMP_SERVER=unix://commsock
+
+DEBUG=${DEBUG:-false}
+
+run_test()
+{
+ local name="$1"
+ local opts="$2"
+ local mcast="$(atf_get_srcdir)/mcast"
+
+ rump_server_start $RUMP_SERVER netinet6
+ rump_server_add_iface $RUMP_SERVER shmif0 bus1
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.2/24
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2/64
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 rump.ifconfig -w 10
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep -q tentative"
+
+ # A route to the mcast address is required to join the mcast group
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default fc00::1
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -nr
+
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ #$DEBUG && /usr/sbin/ifmcstat # Not yet run on rump kernel
+ if $DEBUG; then
+ atf_check -s exit:0 -o ignore $mcast -d ${opts}
+ else
+ atf_check -s exit:0 $mcast ${opts}
+ fi
+ #$DEBUG && /usr/sbin/ifmcstat # Not yet run on rump kernel
+ unset LD_PRELOAD
+}
+
+add_test()
+{
+ local name=$1
+ local opts="$2"
+ local desc="$3"
+
+ atf_test_case "mcast_${name}" cleanup
+ eval "mcast_${name}_head() { \
+ atf_set \"descr\" \"${desc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ mcast_${name}_body() { \
+ run_test \"${name}\" \"${opts}\"; \
+ rump_server_destroy_ifaces; \
+ }; \
+ mcast_${name}_cleanup() { \
+ ${DEBUG} && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case "mcast_${name}"
+}
+
+atf_init_test_cases()
+{
+
+ add_test conninet4 "-c -4" \
+ "Checks connected multicast for ipv4"
+ add_test connmappedinet4 "-c -m -4" \
+ "Checks connected multicast for mapped ipv4"
+ add_test connmappedbuginet4 "-c -m -b -4" \
+ "Checks connected multicast for mapped ipv4 using the v4 ioctls"
+ add_test conninet6 "-c -6" \
+ "Checks connected multicast for ipv6"
+ add_test unconninet4 "-4" \
+ "Checks unconnected multicast for ipv4"
+ add_test unconnmappedinet4 "-m -4" \
+ "Checks unconnected multicast for mapped ipv4"
+ add_test unconnmappedbuginet4 "-m -b -4" \
+ "Checks unconnected multicast for mapped ipv4 using the v4 ioctls"
+ add_test unconninet6 "-6" \
+ "Checks unconnected multicast for ipv6"
+}
diff --git a/contrib/netbsd-tests/net/mpls/t_ldp_regen.sh b/contrib/netbsd-tests/net/mpls/t_ldp_regen.sh
index 65fc29f..964b9ef 100755
--- a/contrib/netbsd-tests/net/mpls/t_ldp_regen.sh
+++ b/contrib/netbsd-tests/net/mpls/t_ldp_regen.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_ldp_regen.sh,v 1.4 2014/09/01 06:38:35 gson Exp $
+# $NetBSD: t_ldp_regen.sh,v 1.7 2016/08/10 07:50:37 ozaki-r Exp $
#
# Copyright (c) 2013 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -41,7 +41,8 @@ RUMP_SERVER2=unix://./r2
RUMP_SERVER3=unix://./r3
RUMP_SERVER4=unix://./r4
-RUMP_LIBS="-lrumpnet -lrumpnet_net -lrumpnet_netmpls -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif"
+RUMP_LIBS="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 \
+ -lrumpdev -lrumpnet_netmpls -lrumpnet_shmif"
LDP_FLAGS=""
atf_test_case ldp_regen cleanup
@@ -57,6 +58,8 @@ newaddr_and_ping() {
# Add new address on R4
RUMP_SERVER=${RUMP_SERVER4} atf_check -s exit:0 \
rump.ifconfig shmif1 10.0.5.1/24 alias
+ RUMP_SERVER=${RUMP_SERVER4} atf_check -s exit:0 \
+ rump.ifconfig -w 60
# Now ldpd on R5 should take notice of the new route and announce it
# to R4's ldpd. ldpd on R4 should verify that the next hop
@@ -145,6 +148,8 @@ create_servers() {
wait_ldp_ok() {
RUMP_SERVER=${RUMP_SERVER1} atf_check -s exit:0 -o ignore -e ignore \
+ rump.ifconfig -w 60
+ RUMP_SERVER=${RUMP_SERVER1} atf_check -s exit:0 -o ignore -e ignore \
rump.ping -o -w 60 10.0.4.1
}
@@ -158,7 +163,7 @@ docleanup() {
ldp_regen_body() {
- if sysctl machdep.cpu_brand | grep QEMU >/dev/null 2>&1
+ if sysctl machdep.cpu_brand 2>/dev/null | grep QEMU >/dev/null 2>&1
then
atf_skip "unreliable under qemu, skip until PR kern/43997 fixed"
fi
diff --git a/contrib/netbsd-tests/net/mpls/t_mpls_fw.sh b/contrib/netbsd-tests/net/mpls/t_mpls_fw.sh
index ddd42df..f974b44 100755
--- a/contrib/netbsd-tests/net/mpls/t_mpls_fw.sh
+++ b/contrib/netbsd-tests/net/mpls/t_mpls_fw.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_mpls_fw.sh,v 1.4 2014/03/18 18:20:44 riastradh Exp $
+# $NetBSD: t_mpls_fw.sh,v 1.5 2016/08/10 07:50:37 ozaki-r Exp $
#
# Copyright (c) 2013 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -42,8 +42,8 @@ RUMP_SERVER2=unix://./r2
RUMP_SERVER3=unix://./r3
RUMP_SERVER4=unix://./r4
-RUMP_FLAGS=\
-"-lrumpnet -lrumpnet_net -lrumpnet_netmpls -lrumpnet_netinet -lrumpnet_shmif"
+RUMP_FLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet \
+ -lrumpdev -lrumpnet_netmpls -lrumpnet_shmif"
atf_test_case mplsfw4 cleanup
mplsfw4_head()
diff --git a/contrib/netbsd-tests/net/mpls/t_mpls_fw6.sh b/contrib/netbsd-tests/net/mpls/t_mpls_fw6.sh
new file mode 100755
index 0000000..b9ac6cd
--- /dev/null
+++ b/contrib/netbsd-tests/net/mpls/t_mpls_fw6.sh
@@ -0,0 +1,220 @@
+# $NetBSD: t_mpls_fw6.sh,v 1.3 2016/08/10 07:50:37 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Test MPLS encap/decap and forwarding using INET6 as encapsulated protocol
+# Setup four routers connected like this: R1---R2---R3---R4--
+# Goal is to be able to ping from R1 the outermost interface of R4
+# Disable net.inet6.ip6.forwarding, enable net.mpls.forwarding
+# Add route on R1 in order to encapsulate into MPLS the IP6 packets with
+# destination equal to R4 right hand side interface
+# Add MPLS routes on R2 in order to forward frames belonging to that FEC to R3
+# Add MPLS "POP" route on R3 for that FEC, pointing to R4
+# Do the same for the reverse direction (R4 to R1)
+# ping6 from R1 to R4 right hand side interface
+#
+# redo the test using IPv6 explicit null label
+
+RUMP_SERVER1=unix://./r1
+RUMP_SERVER2=unix://./r2
+RUMP_SERVER3=unix://./r3
+RUMP_SERVER4=unix://./r4
+
+RUMP_FLAGS6="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 \
+ -lrumpdev -lrumpnet_shmif -lrumpnet_netmpls"
+
+atf_test_case mplsfw6 cleanup
+mplsfw6_head()
+{
+
+ atf_set "descr" "IP6/MPLS forwarding test using PHP"
+ atf_set "require.progs" "rump_server"
+}
+
+startservers()
+{
+
+ ulimit -r 300
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER1}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER2}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER3}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER4}
+}
+
+configservers()
+{
+
+ # Setup the first server
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -inet6 fd00:1234:0:3::/64 \
+ -ifa fd00:1234::1 \
+ -ifp mpls0 -tag 25 -inet6 fd00:1234::2
+
+ # Setup the second server
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom2
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:1::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -mpls 25 -tag 30 \
+ -inet6 fd00:1234:0:1::2
+ atf_check -s exit:0 rump.route -q add -mpls 27 -tag ${1} -inet6 \
+ fd00:1234::1
+
+ # Setup the third server
+ export RUMP_SERVER=${RUMP_SERVER3}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom2
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234:0:1::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom3
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:2::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -mpls 30 -tag ${1} \
+ -inet6 fd00:1234:0:2::2
+ atf_check -s exit:0 rump.route -q add -mpls 26 -tag 27 \
+ -inet6 fd00:1234:0:1::1
+
+ # Setup the fourth server
+ export RUMP_SERVER=${RUMP_SERVER4}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom3
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234:0:2::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom4
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:3::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -inet6 fd00:1234::/64 \
+ -ifa fd00:1234:0:2::2 \
+ -ifp mpls0 -tag 26 -inet6 fd00:1234:0:2::1
+
+ unset RUMP_SERVER
+}
+
+doping()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234::2
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:1::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:1::2
+ export RUMP_SERVER=${RUMP_SERVER3}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:2::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:2::2
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:3::1, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:3::1
+ unset RUMP_SERVER
+}
+
+do_check_route()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:"^fd00:1234:0:3::/64.+fd00:1234::2.+25.+mpls0" \
+ rump.netstat -nrT
+ unset RUMP_SERVER
+}
+
+docleanup()
+{
+
+ RUMP_SERVER=${RUMP_SERVER1} rump.halt
+ RUMP_SERVER=${RUMP_SERVER2} rump.halt
+ RUMP_SERVER=${RUMP_SERVER3} rump.halt
+ RUMP_SERVER=${RUMP_SERVER4} rump.halt
+}
+
+mplsfw6_body()
+{
+
+ startservers
+ configservers 3
+ do_check_route
+ doping
+}
+
+mplsfw6_cleanup()
+{
+
+ docleanup
+}
+
+
+atf_test_case mplsfw6_expl cleanup
+mplsfw4_expl_head()
+{
+
+ atf_set "descr" "IP6/MPLS forwarding test using explicit NULL labels"
+ atf_set "require.progs" "rump_server"
+}
+
+mplsfw6_expl_body()
+{
+
+ startservers
+ configservers 2
+ do_check_route
+ doping
+}
+
+mplsfw6_expl_cleanup()
+{
+
+ docleanup
+}
+
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case mplsfw6
+ atf_add_test_case mplsfw6_expl
+}
diff --git a/contrib/netbsd-tests/net/mpls/t_mpls_fw64.sh b/contrib/netbsd-tests/net/mpls/t_mpls_fw64.sh
new file mode 100755
index 0000000..9df3aa7
--- /dev/null
+++ b/contrib/netbsd-tests/net/mpls/t_mpls_fw64.sh
@@ -0,0 +1,226 @@
+# $NetBSD: t_mpls_fw64.sh,v 1.3 2016/08/10 07:50:37 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Test MPLS encap/decap and forwarding using INET6 as encapsulated protocol
+# Setup four routers connected like this: R1---R2---R3---R4--
+# Goal is to be able to ping from R1 the outermost interface of R4
+# Disable net.inet[6].ip[6].forwarding, enable net.mpls.forwarding
+# Use IPv6 between R1-R2-R3 and IPv4 between R3-R4
+# As we use IPv4 on last link we should use only expl.null there
+# because implicit null will assume IPv4 (as the next-hop)
+# But we can use impl null on R2-R1 link because stack will correctly
+# guess IPv6 (from next-hop)
+# Add route on R1 in order to encapsulate into MPLS the IP6 packets with
+# destination equal to R4 right hand side interface
+# Add MPLS routes on R2 in order to forward frames belonging to that FEC to R3
+# Add MPLS expl.null route on R3 for that FEC, pointing to R4
+# Do the same for the reverse direction (R4 to R1)
+# ping6 from R1 to R4 right hand side interface
+
+
+RUMP_SERVER1=unix://./r1
+RUMP_SERVER2=unix://./r2
+RUMP_SERVER3=unix://./r3
+RUMP_SERVER4=unix://./r4
+
+RUMP_FLAGS6="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 \
+ -lrumpdev -lrumpnet_shmif -lrumpnet_netmpls"
+
+startservers()
+{
+
+ ulimit -r 300
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER1}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER2}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER3}
+ atf_check -s exit:0 rump_server ${RUMP_FLAGS6} ${RUMP_SERVER4}
+}
+
+configservers()
+{
+
+ # Setup the first server
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -inet6 fd00:1234:0:3::/64 \
+ -ifa fd00:1234::1 \
+ -ifp mpls0 -tag 25 -inet6 fd00:1234::2
+
+ # Setup the second server
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom2
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:1::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.route -q add -mpls 25 -tag 30 \
+ -inet6 fd00:1234:0:1::2
+ atf_check -s exit:0 rump.route -q add -mpls 27 -tag ${1} -inet6 \
+ fd00:1234::1
+
+ # Setup the third server
+ export RUMP_SERVER=${RUMP_SERVER3}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom2
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 fd00:1234:0:1::2/64 alias
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom3
+ atf_check -s exit:0 rump.ifconfig shmif1 inet 10.0.3.1/24
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.forwarding=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
+ atf_check -s exit:0 rump.route -q add -mpls 30 -tag 2 \
+ -inet 10.0.3.2
+ atf_check -s exit:0 rump.route -q add -mpls 26 -tag 27 \
+ -inet6 fd00:1234:0:1::1
+
+ # Setup the fourth server
+ export RUMP_SERVER=${RUMP_SERVER4}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ./shdom3
+ atf_check -s exit:0 rump.ifconfig shmif0 inet 10.0.3.2
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ./shdom4
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 fd00:1234:0:3::1/64 alias
+ atf_check -s exit:0 rump.ifconfig mpls0 create up
+ atf_check -s exit:0 rump.sysctl -q -w net.mpls.accept=1
+ atf_check -s exit:0 rump.sysctl -q -w net.inet6.ip6.forwarding=0
+ atf_check -s exit:0 rump.sysctl -q -w net.inet.ip.forwarding=0
+ atf_check -s exit:0 rump.route -q add -inet6 fd00:1234::/64 \
+ -ifa fd00:1234:0:3::1 \
+ -ifp mpls0 -tag 26 -inet 10.0.3.1
+
+ unset RUMP_SERVER
+}
+
+doping()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234::2
+ export RUMP_SERVER=${RUMP_SERVER2}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:1::2, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:1::2
+ export RUMP_SERVER=${RUMP_SERVER3}
+ atf_check -s exit:0 \
+ -o match:" bytes from 10.0.3.2: icmp_seq" \
+ rump.ping -n -o -w 2 10.0.3.2
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:" bytes from fd00:1234:0:3::1, icmp_seq=" \
+ rump.ping6 -n -o -X 2 fd00:1234:0:3::1
+ unset RUMP_SERVER
+}
+
+do_check_route()
+{
+
+ export RUMP_SERVER=${RUMP_SERVER1}
+ atf_check -s exit:0 \
+ -o match:"^fd00:1234:0:3::/64.+fd00:1234::2.+25.+mpls0" \
+ rump.netstat -nrT
+ unset RUMP_SERVER
+}
+
+docleanup()
+{
+
+ RUMP_SERVER=${RUMP_SERVER1} rump.halt
+ RUMP_SERVER=${RUMP_SERVER2} rump.halt
+ RUMP_SERVER=${RUMP_SERVER3} rump.halt
+ RUMP_SERVER=${RUMP_SERVER4} rump.halt
+}
+
+atf_test_case mplsfw64_impl cleanup
+mplsfw64_impl_head()
+{
+
+ atf_set "descr" "IP6/MPLS test using impl. NULL labels in mixed env."
+ atf_set "require.progs" "rump_server"
+}
+
+mplsfw64_impl_body()
+{
+
+ startservers
+ configservers 3
+ do_check_route
+ doping
+}
+
+mplsfw64_impl_cleanup()
+{
+
+ docleanup
+}
+
+
+atf_test_case mplsfw64_expl cleanup
+mplsfw64_expl_head()
+{
+
+ atf_set "descr" "IP6/MPLS test using explicit NULL labels in mixed env."
+ atf_set "require.progs" "rump_server"
+}
+
+mplsfw64_expl_body()
+{
+
+ startservers
+ configservers 2
+ do_check_route
+ doping
+}
+
+mplsfw64_expl_cleanup()
+{
+
+ docleanup
+}
+
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case mplsfw64_impl
+ atf_add_test_case mplsfw64_expl
+}
diff --git a/contrib/netbsd-tests/net/mpls/t_rfc4182.sh b/contrib/netbsd-tests/net/mpls/t_rfc4182.sh
index 8c166f9..558f7fd 100755
--- a/contrib/netbsd-tests/net/mpls/t_rfc4182.sh
+++ b/contrib/netbsd-tests/net/mpls/t_rfc4182.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_rfc4182.sh,v 1.3 2014/03/18 18:20:44 riastradh Exp $
+# $NetBSD: t_rfc4182.sh,v 1.4 2016/08/10 07:50:37 ozaki-r Exp $
#
# Copyright (c) 2013 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -44,8 +44,8 @@ RUMP_SERVER2=unix://./r2
RUMP_SERVER3=unix://./r3
RUMP_SERVER4=unix://./r4
-RUMP_FLAGS=\
-"-lrumpnet -lrumpnet_net -lrumpnet_netmpls -lrumpnet_netinet -lrumpnet_shmif"
+RUMP_FLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet \
+ -lrumpdev -lrumpnet_netmpls -lrumpnet_shmif"
atf_test_case rfc4182 cleanup
rfc4182_head()
diff --git a/contrib/netbsd-tests/net/ndp/t_dad.sh b/contrib/netbsd-tests/net/ndp/t_dad.sh
new file mode 100755
index 0000000..50ec933
--- /dev/null
+++ b/contrib/netbsd-tests/net/ndp/t_dad.sh
@@ -0,0 +1,276 @@
+# $NetBSD: t_dad.sh,v 1.12 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKLOCAL=unix://commsock1
+SOCKPEER=unix://commsock2
+
+DEBUG=${DEBUG:-false}
+
+duplicated="[Dd][Uu][Pp][Ll][Ii][Cc][Aa][Tt][Ee][Dd]"
+
+atf_test_case dad_basic cleanup
+atf_test_case dad_duplicated cleanup
+atf_test_case dad_count cleanup
+
+dad_basic_head()
+{
+ atf_set "descr" "Tests for IPv6 DAD basic behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+dad_duplicated_head()
+{
+ atf_set "descr" "Tests for IPv6 DAD duplicated state"
+ atf_set "require.progs" "rump_server"
+}
+
+dad_count_head()
+{
+ atf_set "descr" "Tests for IPv6 DAD count behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_server()
+{
+ local sock=$1
+ local ip=$2
+
+ rump_server_add_iface $sock shmif0 bus1
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+}
+
+make_ns_pkt_str()
+{
+ local id=$1
+ local target=$2
+ pkt="33:33:ff:00:00:0${id}, ethertype IPv6 (0x86dd), length 78: ::"
+ pkt="$pkt > ff02::1:ff00:${id}: ICMP6, neighbor solicitation,"
+ pkt="$pkt who has $target, length 24"
+ echo $pkt
+}
+
+dad_basic_body()
+{
+ local pkt=
+ local localip1=fc00::1
+ local localip2=fc00::2
+ local localip3=fc00::3
+
+ rump_server_start $SOCKLOCAL netinet6
+ rump_server_add_iface $SOCKLOCAL shmif0 bus1
+
+ export RUMP_SERVER=$SOCKLOCAL
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip2
+ $DEBUG && rump.ifconfig shmif0
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ rump.ifconfig shmif0 > ./out
+ $DEBUG && cat ./out
+
+ # The primary address doesn't start with tentative state
+ atf_check -s not-exit:0 -x "cat ./out |grep $localip1 |grep -q tentative"
+ # The alias address starts with tentative state
+ # XXX we have no stable way to check this, so skip for now
+ #atf_check -s exit:0 -x "cat ./out |grep $localip2 |grep -q tentative"
+
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # Check DAD probe packets (Neighbor Solicitation Message)
+ pkt=$(make_ns_pkt_str 2 $localip2)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+ # No DAD for the primary address
+ pkt=$(make_ns_pkt_str 1 $localip1)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 10
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # IPv6 DAD doesn't announce (Neighbor Advertisement Message)
+
+ # The alias address left tentative
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip2 |grep -q tentative"
+
+ #
+ # Add a new address on the fly
+ #
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip3
+
+ # The new address starts with tentative state
+ # XXX we have no stable way to check this, so skip for now
+ #atf_check -s exit:0 -x "rump.ifconfig shmif0 |grep $localip3 |grep -q tentative"
+
+ # Check DAD probe packets (Neighbor Solicitation Message)
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+ pkt=$(make_ns_pkt_str 3 $localip3)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 10
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ # IPv6 DAD doesn't announce (Neighbor Advertisement Message)
+
+ # The new address left tentative
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif0 |grep $localip3 |grep -q tentative"
+
+ rump_server_destroy_ifaces
+}
+
+dad_duplicated_body()
+{
+ local localip1=fc00::1
+ local localip2=fc00::11
+ local peerip=fc00::2
+
+ rump_server_start $SOCKLOCAL netinet6
+ rump_server_start $SOCKPEER netinet6
+
+ setup_server $SOCKLOCAL $localip1
+ setup_server $SOCKPEER $peerip
+
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # The primary address isn't marked as duplicated
+ atf_check -s exit:0 -o not-match:"$localip1.+$duplicated" \
+ rump.ifconfig shmif0
+
+ #
+ # Add a new address duplicated with the peer server
+ #
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $peerip
+ atf_check -s exit:0 sleep 1
+
+ # The new address is marked as duplicated
+ atf_check -s exit:0 -o match:"$peerip.+$duplicated" \
+ rump.ifconfig shmif0
+
+ # A unique address isn't marked as duplicated
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $localip2
+ atf_check -s exit:0 sleep 1
+ atf_check -s exit:0 -o not-match:"$localip2.+$duplicated" \
+ rump.ifconfig shmif0
+
+ rump_server_destroy_ifaces
+}
+
+dad_count_test()
+{
+ local pkt=
+ local count=$1
+ local id=$2
+ local target=$3
+
+ #
+ # Set DAD count to $count
+ #
+ atf_check -s exit:0 rump.sysctl -w -q net.inet6.ip6.dad_count=$count
+
+ # Add a new address
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $target
+
+ # Waiting for DAD complete
+ atf_check -s exit:0 rump.ifconfig -w 20
+
+ # Check the number of DAD probe packets (Neighbor Solicitation Message)
+ atf_check -s exit:0 sleep 2
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+ pkt=$(make_ns_pkt_str $id $target)
+ atf_check -s exit:0 -o match:"$count" \
+ -x "cat ./out |grep '$pkt' | wc -l | tr -d ' '"
+}
+
+dad_count_body()
+{
+ local localip1=fc00::1
+ local localip2=fc00::2
+
+ rump_server_start $SOCKLOCAL netinet6
+ rump_server_add_iface $SOCKLOCAL shmif0 bus1
+
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # Check default value
+ atf_check -s exit:0 -o match:"1" rump.sysctl -n net.inet6.ip6.dad_count
+
+ # Setup interface
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 sleep 2
+ rump.ifconfig shmif0 > ./out
+ $DEBUG && cat ./out
+
+ #
+ # Set and test DAD count (count=1)
+ #
+ dad_count_test 1 1 $localip1
+
+ #
+ # Set and test DAD count (count=8)
+ #
+ dad_count_test 8 2 $localip2
+
+ rump_server_destroy_ifaces
+}
+
+dad_basic_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+dad_duplicated_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+dad_count_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case dad_basic
+ atf_add_test_case dad_duplicated
+ atf_add_test_case dad_count
+}
diff --git a/contrib/netbsd-tests/net/ndp/t_ndp.sh b/contrib/netbsd-tests/net/ndp/t_ndp.sh
new file mode 100755
index 0000000..aa96390
--- /dev/null
+++ b/contrib/netbsd-tests/net/ndp/t_ndp.sh
@@ -0,0 +1,406 @@
+# $NetBSD: t_ndp.sh,v 1.17 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKSRC=unix://commsock1
+SOCKDST=unix://commsock2
+IP6SRC=fc00::1
+IP6DST=fc00::2
+
+DEBUG=${DEBUG:-true}
+TIMEOUT=1
+
+atf_test_case ndp_cache_expiration cleanup
+atf_test_case ndp_commands cleanup
+atf_test_case ndp_cache_overwriting cleanup
+atf_test_case ndp_neighborgcthresh cleanup
+atf_test_case ndp_link_activation cleanup
+
+ndp_cache_expiration_head()
+{
+ atf_set "descr" "Tests for NDP cache expiration"
+ atf_set "require.progs" "rump_server"
+}
+
+ndp_commands_head()
+{
+ atf_set "descr" "Tests for commands of ndp(8)"
+ atf_set "require.progs" "rump_server"
+}
+
+ndp_cache_overwriting_head()
+{
+ atf_set "descr" "Tests for behavior of overwriting NDP caches"
+ atf_set "require.progs" "rump_server"
+}
+
+ndp_neighborgcthresh_head()
+{
+ atf_set "descr" "Tests for GC of neighbor caches"
+ atf_set "require.progs" "rump_server"
+}
+
+ndp_link_activation_head()
+{
+ atf_set "descr" "Tests for activating a new MAC address"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_dst_server()
+{
+ local assign_ip=$1
+
+ rump_server_add_iface $SOCKDST shmif0 bus1
+ export RUMP_SERVER=$SOCKDST
+ if [ "$assign_ip" != no ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6DST
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && rump.ndp -n -a
+}
+
+setup_src_server()
+{
+ $DEBUG && ulimit -c unlimited
+ export RUMP_SERVER=$SOCKSRC
+
+ # Setup an interface
+ rump_server_add_iface $SOCKSRC shmif0 bus1
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ # Sanity check
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o ignore rump.ndp -n $IP6SRC
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST
+}
+
+get_timeout()
+{
+ local timeout=$(env RUMP_SERVER=$SOCKSRC rump.ndp -n $IP6DST |grep $IP6DST|awk '{print $4;}')
+ timeout=${timeout%s}
+ echo $timeout
+}
+
+ndp_cache_expiration_body()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server
+ setup_src_server
+
+ #
+ # Check if a cache is expired expectedly
+ #
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
+
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC
+ # Should be cached
+ atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST
+
+ timeout=$(get_timeout $IP6DST)
+
+ atf_check -s exit:0 sleep $(($timeout + 1))
+
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6SRC
+ # Expired but remains until GC sweaps it (1 day)
+ atf_check -s exit:0 -o match:'(1d0h0m|23h59m)' rump.ndp -n $IP6DST
+
+ rump_server_destroy_ifaces
+}
+
+ifdown_dst_server()
+{
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ export RUMP_SERVER=$SOCKSRC
+}
+
+ndp_commands_body()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server
+ setup_src_server
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # We can delete the entry for the interface's IP address
+ atf_check -s exit:0 -o match:"$IP6SRC" rump.ndp -d $IP6SRC
+
+ # Add and delete a static entry
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::10
+ atf_check -s exit:0 -o match:'deleted' rump.ndp -d fc00::10
+ $DEBUG && rump.ndp -n -a
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n fc00::10
+
+ # Add multiple entries via a file (XXX not implemented)
+ #cat - > ./list <<-EOF
+ #fc00::11 b2:a0:20:00:00:11
+ #fc00::12 b2:a0:20:00:00:12
+ #fc00::13 b2:a0:20:00:00:13
+ #fc00::14 b2:a0:20:00:00:14
+ #fc00::15 b2:a0:20:00:00:15
+ #EOF
+ #$DEBUG && rump.ndp -n -a
+ #atf_check -s exit:0 -o ignore rump.ndp -f ./list
+ #$DEBUG && rump.ndp -n -a
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
+ atf_check -s exit:0 -o ignore rump.ndp -s fc00::11 b2:a0:20:00:00:11
+ atf_check -s exit:0 -o ignore rump.ndp -s fc00::12 b2:a0:20:00:00:12
+
+ atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n $IP6DST
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::11
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n fc00::12
+
+ # Test ndp -a
+ atf_check -s exit:0 -o match:'fc00::11' rump.ndp -n -a
+ atf_check -s exit:0 -o match:'fc00::12' rump.ndp -n -a
+
+ # Ensure no packet upsets the src server
+ ifdown_dst_server
+
+ # Flush all entries (-c)
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o ignore rump.ndp -c
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6SRC
+ atf_check -s not-exit:0 -o ignore -e ignore rump.ndp -n $IP6DST
+ # Only the static caches are not deleted
+ atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::11
+ atf_check -s exit:0 -o ignore -e ignore rump.ndp -n fc00::12
+
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp
+ rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10
+
+ rump_server_destroy_ifaces
+}
+
+ndp_cache_overwriting_body()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server
+ setup_src_server
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # Cannot overwrite a permanent cache
+ atf_check -s not-exit:0 -e ignore rump.ndp -s $IP6SRC b2:a0:20:00:00:ff
+ $DEBUG && rump.ndp -n -a
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 $IP6DST
+ $DEBUG && rump.ndp -n -a
+ # Can overwrite a dynamic cache
+ atf_check -s exit:0 -o ignore rump.ndp -s $IP6DST b2:a0:20:00:00:00
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'permanent' rump.ndp -n $IP6DST
+
+ # Test temp option (XXX it doesn't work; expire time isn't set)
+ #atf_check -s exit:0 -o ignore rump.ndp -s fc00::10 b2:a0:20:00:00:10 temp
+ #$DEBUG && rump.ndp -n -a
+ #atf_check -s exit:0 -o not-match:'permanent' rump.ndp -n fc00::10
+ # Cannot overwrite a temp cache
+ #atf_check -s not-exit:0 -e ignore rump.ndp -s fc00::10 b2:a0:20:00:00:ff
+ #$DEBUG && rump.ndp -n -a
+
+ rump_server_destroy_ifaces
+}
+
+get_n_caches()
+{
+
+ echo $(rump.ndp -a -n |grep -v -e Neighbor -e permanent |wc -l)
+}
+
+ndp_neighborgcthresh_body()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server no
+ setup_src_server
+
+ export RUMP_SERVER=$SOCKDST
+ for i in $(seq 0 9); do
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6DST}$i
+ done
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # ping to 3 destinations
+ $DEBUG && rump.ndp -n -a
+ for i in $(seq 0 2); do
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \
+ ${IP6DST}$i
+ done
+ $DEBUG && rump.ndp -n -a
+
+ # 3 caches should be created
+ atf_check_equal $(get_n_caches) 3
+
+ # ping to additional 3 destinations
+ for i in $(seq 3 5); do
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \
+ ${IP6DST}$i
+ done
+ $DEBUG && rump.ndp -n -a
+
+ # 6 caches should be created in total
+ atf_check_equal $(get_n_caches) 6
+
+ # Limit the number of neighbor caches to 5
+ atf_check -s exit:0 -o ignore rump.sysctl -w \
+ net.inet6.ip6.neighborgcthresh=5
+
+ # ping to additional 4 destinations
+ for i in $(seq 6 9); do
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X $TIMEOUT -c 1 \
+ ${IP6DST}$i
+ done
+
+ # More than 5 caches should be created in total, but exceeded caches
+ # should be GC-ed
+ if [ "$(get_n_caches)" -gt 5 ]; then
+ atf_fail "Neighbor caches are not GC-ed"
+ fi
+
+ rump_server_destroy_ifaces
+}
+
+make_pkt_str_na()
+{
+ local ip=$1
+ local mac=$2
+ local pkt=
+ pkt="$mac > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 86:"
+ pkt="$pkt $ip > ff02::1: ICMP6, neighbor advertisement"
+ echo $pkt
+}
+
+ndp_link_activation_body()
+{
+ local linklocal=
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_dst_server
+ setup_src_server
+
+ # flush old packets
+ extract_new_packets bus1 > ./out
+
+ export RUMP_SERVER=$SOCKSRC
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
+ b2:a1:00:00:00:01
+
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}')
+ $DEBUG && echo $linklocal
+
+ pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:01)
+ atf_check -s not-exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 link \
+ b2:a1:00:00:00:02 active
+
+ atf_check -s exit:0 sleep 1
+ extract_new_packets bus1 > ./out
+ $DEBUG && cat ./out
+
+ linklocal=$(rump.ifconfig shmif0 |awk '/fe80/ {print $2;}' |awk -F % '{print $1;}')
+ $DEBUG && echo $linklocal
+
+ pkt=$(make_pkt_str_na $linklocal b2:a1:00:00:00:02)
+ atf_check -s exit:0 -x "cat ./out |grep -q '$pkt'"
+
+ rump_server_destroy_ifaces
+}
+
+ndp_cache_expiration_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ndp_commands_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ndp_cache_overwriting_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ndp_neighborgcthresh_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ndp_link_activation_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case ndp_cache_expiration
+ atf_add_test_case ndp_commands
+ atf_add_test_case ndp_cache_overwriting
+ atf_add_test_case ndp_neighborgcthresh
+ atf_add_test_case ndp_link_activation
+}
diff --git a/contrib/netbsd-tests/net/ndp/t_ra.sh b/contrib/netbsd-tests/net/ndp/t_ra.sh
new file mode 100755
index 0000000..b234570
--- /dev/null
+++ b/contrib/netbsd-tests/net/ndp/t_ra.sh
@@ -0,0 +1,687 @@
+# $NetBSD: t_ra.sh,v 1.20 2017/01/11 03:15:44 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+RUMPSRV=unix://r1
+RUMPSRV1_2=unix://r12
+RUMPCLI=unix://r2
+RUMPSRV3=unix://r3
+RUMPSRV4=unix://r4
+IP6SRV=fc00:1::1
+IP6SRV1_2=fc00:1::2
+IP6SRV_PREFIX=fc00:1:
+IP6CLI=fc00:2::2
+IP6SRV3=fc00:3::1
+IP6SRV3_PREFIX=fc00:3:
+IP6SRV4=fc00:4::1
+IP6SRV4_PREFIX=fc00:4:
+PIDFILE=./rump.rtadvd.pid
+PIDFILE1_2=./rump.rtadvd.pid12
+PIDFILE3=./rump.rtadvd.pid3
+PIDFILE4=./rump.rtadvd.pid4
+CONFIG=./rtadvd.conf
+WAITTIME=2
+DEBUG=${DEBUG:-true}
+
+init_server()
+{
+
+ export RUMP_SERVER=$1
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1
+ export LD_PRELOAD=/usr/lib/librumphijack.so
+ atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd
+ unset LD_PRELOAD
+ unset RUMP_SERVER
+}
+
+setup_shmif0()
+{
+ local sock=$1
+ local IP6ADDR=$2
+
+ rump_server_add_iface $sock shmif0 bus1
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+}
+
+wait_term()
+{
+ local PIDFILE=${1}
+ shift
+
+ while [ -f ${PIDFILE} ]
+ do
+ sleep 0.2
+ done
+
+ return 0
+}
+
+create_rtadvdconfig()
+{
+
+ cat << _EOF > ${CONFIG}
+shmif0:\
+ :mtu#1300:maxinterval#4:mininterval#3:
+_EOF
+}
+
+start_rtadvd()
+{
+ local sock=$1
+ local pidfile=$2
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.rtadvd -c ${CONFIG} -p $pidfile shmif0
+ while [ ! -f $pidfile ]; do
+ sleep 0.2
+ done
+ unset RUMP_SERVER
+}
+
+check_entries()
+{
+ local cli=$1
+ local srv=$2
+ local addr_prefix=$3
+ local mac_srv= ll_srv=
+
+ ll_srv=$(get_linklocal_addr $srv shmif0)
+ mac_srv=$(get_macaddr $srv shmif0)
+
+ export RUMP_SERVER=$cli
+ $DEBUG && dump_entries
+ atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r
+ atf_check -s exit:0 -o match:'advertised' rump.ndp -p
+ atf_check -s exit:0 -o match:"${ll_srv}%shmif0 \(reachable\)" rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
+ atf_check -s exit:0 \
+ -o match:"$ll_srv%shmif0 +$mac_srv +shmif0 +(23h59m|1d0h0m)..s S R" \
+ rump.ndp -n -a
+ atf_check -s exit:0 -o match:$addr_prefix rump.ndp -n -a
+ atf_check -s exit:0 -o match:"$addr_prefix.+<AUTOCONF>" \
+ rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+}
+
+dump_entries()
+{
+
+ echo ndp -n -a
+ rump.ndp -n -a
+ echo ndp -p
+ rump.ndp -p
+ echo ndp -r
+ rump.ndp -r
+}
+
+atf_test_case ra_basic cleanup
+ra_basic_head()
+{
+
+ atf_set "descr" "Tests for basic functions of router advaertisement(RA)"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_basic_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ init_server $RUMPSRV
+
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+ export RUMP_SERVER=${RUMPCLI}
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv
+ unset RUMP_SERVER
+
+ create_rtadvdconfig
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o empty rump.ndp -r
+ atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0
+ atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ rump_server_destroy_ifaces
+}
+
+ra_basic_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_flush_prefix_entries cleanup
+ra_flush_prefix_entries_head()
+{
+
+ atf_set "descr" "Tests for flushing prefixes (ndp -P)"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_flush_prefix_entries_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ export RUMP_SERVER=${RUMPCLI}
+
+ # Terminate rtadvd to prevent new RA messages from coming
+ # Note that ifconfig down; kill -TERM doesn't work
+ kill -KILL `cat ${PIDFILE}`
+
+ # Flush all the entries in the prefix list
+ atf_check -s exit:0 rump.ndp -P
+
+ $DEBUG && dump_entries
+ atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r
+ atf_check -s exit:0 -o empty rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
+ atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a
+ atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ rump_server_destroy_ifaces
+}
+
+ra_flush_prefix_entries_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_flush_defrouter_entries cleanup
+ra_flush_defrouter_entries_head()
+{
+
+ atf_set "descr" "Tests for flushing default routers (ndp -R)"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_flush_defrouter_entries_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ export RUMP_SERVER=${RUMPCLI}
+
+ # Terminate rtadvd to prevent new RA messages from coming
+ # Note that ifconfig down; kill -TERM doesn't work
+ kill -KILL `cat ${PIDFILE}`
+
+ # Flush all the entries in the default router list
+ atf_check -s exit:0 rump.ndp -R
+
+ $DEBUG && dump_entries
+ atf_check -s exit:0 -o empty rump.ndp -r
+ atf_check -s exit:0 -o match:'No advertising router' rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
+ atf_check -s exit:0 -o match:'(23h59m|1d0h0m)..s S R' rump.ndp -n -a
+ atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
+ atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ rump_server_destroy_ifaces
+}
+
+ra_flush_defrouter_entries_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_delete_address cleanup
+ra_delete_address_head()
+{
+
+ atf_set "descr" "Tests for deleting auto-configured address"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_delete_address_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ export RUMP_SERVER=${RUMPCLI}
+ $DEBUG && rump.ifconfig shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 \
+ $(rump.ifconfig shmif0 |awk '/AUTOCONF/ {print $2}') delete
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ rump_server_destroy_ifaces
+}
+
+ra_delete_address_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_multiple_routers cleanup
+ra_multiple_routers_head()
+{
+
+ atf_set "descr" "Tests for multiple routers"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_multiple_routers_body()
+{
+ local n=
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_fs_start $RUMPSRV3 netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPSRV3} ${IP6SRV3}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+ init_server $RUMPSRV3
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ start_rtadvd $RUMPSRV3 $PIDFILE3
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+ check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX
+
+ export RUMP_SERVER=$RUMPCLI
+ # Two prefixes are advertised by differnt two routers
+ n=$(rump.ndp -p |grep 'advertised by' |wc -l)
+ atf_check_equal $n 2
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}`
+ wait_term ${PIDFILE3}
+
+ rump_server_destroy_ifaces
+}
+
+ra_multiple_routers_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+ if [ -f ${PIDFILE3} ]; then
+ kill -TERM `cat ${PIDFILE3}`
+ wait_term ${PIDFILE3}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_multiple_routers_single_prefix cleanup
+ra_multiple_routers_single_prefix_head()
+{
+
+ atf_set "descr" "Tests for multiple routers with a single prefix"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_multiple_routers_single_prefix_body()
+{
+ local n=
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_fs_start $RUMPSRV1_2 netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPSRV1_2} ${IP6SRV1_2}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+ init_server $RUMPSRV1_2
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ start_rtadvd $RUMPSRV1_2 $PIDFILE1_2
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+ check_entries $RUMPCLI $RUMPSRV1_2 $IP6SRV_PREFIX
+
+ export RUMP_SERVER=$RUMPCLI
+ # One prefix is advertised by differnt two routers
+ n=$(rump.ndp -p |grep 'advertised by' |wc -l)
+ atf_check_equal $n 1
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE1_2}`
+ wait_term ${PIDFILE1_2}
+
+ rump_server_destroy_ifaces
+}
+
+ra_multiple_routers_single_prefix_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+ if [ -f ${PIDFILE1_2} ]; then
+ kill -TERM `cat ${PIDFILE1_2}`
+ wait_term ${PIDFILE1_2}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_multiple_routers_maxifprefixes cleanup
+ra_multiple_routers_maxifprefixes_head()
+{
+
+ atf_set "descr" "Tests for exceeding the number of maximum prefixes"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_multiple_routers_maxifprefixes_body()
+{
+ local n=
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_fs_start $RUMPSRV3 netinet6
+ rump_server_fs_start $RUMPSRV4 netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ setup_shmif0 ${RUMPSRV3} ${IP6SRV3}
+ setup_shmif0 ${RUMPSRV4} ${IP6SRV4}
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+
+ init_server $RUMPSRV
+ init_server $RUMPSRV3
+ init_server $RUMPSRV4
+
+ create_rtadvdconfig
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' \
+ rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ # Limit the maximum number of prefix entries to 2
+ atf_check -s exit:0 -o match:'16.->.2' \
+ rump.sysctl -w net.inet6.ip6.maxifprefixes=2
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ start_rtadvd $RUMPSRV3 $PIDFILE3
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+ check_entries $RUMPCLI $RUMPSRV3 $IP6SRV3_PREFIX
+
+ start_rtadvd $RUMPSRV4 $PIDFILE4
+ sleep $WAITTIME
+
+ export RUMP_SERVER=${RUMPCLI}
+ $DEBUG && dump_entries
+ # There should remain two prefixes
+ n=$(rump.ndp -p |grep 'advertised by' |wc -l)
+ atf_check_equal $n 2
+ # TODO check other conditions
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE3}`
+ wait_term ${PIDFILE3}
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE4}`
+ wait_term ${PIDFILE4}
+
+ rump_server_destroy_ifaces
+}
+
+ra_multiple_routers_maxifprefixes_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+ if [ -f ${PIDFILE3} ]; then
+ kill -TERM `cat ${PIDFILE3}`
+ wait_term ${PIDFILE3}
+ fi
+ if [ -f ${PIDFILE4} ]; then
+ kill -TERM `cat ${PIDFILE4}`
+ wait_term ${PIDFILE4}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ra_temporary_address cleanup
+ra_temporary_address_head()
+{
+
+ atf_set "descr" "Tests for IPv6 temporary address"
+ atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
+}
+
+ra_temporary_address_body()
+{
+
+ rump_server_fs_start $RUMPSRV netinet6
+ rump_server_start $RUMPCLI netinet6
+
+ setup_shmif0 ${RUMPSRV} ${IP6SRV}
+ init_server $RUMPSRV
+
+ setup_shmif0 ${RUMPCLI} ${IP6CLI}
+ export RUMP_SERVER=${RUMPCLI}
+ $DEBUG && rump.ndp -n -a
+ atf_check -s exit:0 -o match:'= 0' \
+ rump.sysctl net.inet6.ip6.accept_rtadv
+ atf_check -s exit:0 -o match:'= 0' \
+ rump.sysctl net.inet6.ip6.use_tempaddr
+ unset RUMP_SERVER
+
+ create_rtadvdconfig
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o empty rump.ndp -r
+ atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p
+ atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0
+ atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
+ atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:'0.->.1' \
+ rump.sysctl -w net.inet6.ip6.accept_rtadv=1
+ atf_check -s exit:0 -o match:'0.->.1' \
+ rump.sysctl -w net.inet6.ip6.use_tempaddr=1
+ unset RUMP_SERVER
+
+ start_rtadvd $RUMPSRV $PIDFILE
+ sleep $WAITTIME
+
+ check_entries $RUMPCLI $RUMPSRV $IP6SRV_PREFIX
+
+ # Check temporary address
+ export RUMP_SERVER=${RUMPCLI}
+ atf_check -s exit:0 -o match:"$IP6SRV_PREFIX.+<AUTOCONF,TEMPORARY>" \
+ rump.ifconfig shmif0 inet6
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+
+ rump_server_destroy_ifaces
+}
+
+ra_temporary_address_cleanup()
+{
+
+ if [ -f ${PIDFILE} ]; then
+ kill -TERM `cat ${PIDFILE}`
+ wait_term ${PIDFILE}
+ fi
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case ra_basic
+ atf_add_test_case ra_flush_prefix_entries
+ atf_add_test_case ra_flush_defrouter_entries
+ atf_add_test_case ra_delete_address
+ atf_add_test_case ra_multiple_routers
+ atf_add_test_case ra_multiple_routers_single_prefix
+ atf_add_test_case ra_multiple_routers_maxifprefixes
+ atf_add_test_case ra_temporary_address
+}
diff --git a/contrib/netbsd-tests/net/net/t_forwarding.sh b/contrib/netbsd-tests/net/net/t_forwarding.sh
new file mode 100755
index 0000000..fc30530
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_forwarding.sh
@@ -0,0 +1,530 @@
+# $NetBSD: t_forwarding.sh,v 1.19 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKSRC=unix://commsock1
+SOCKFWD=unix://commsock2
+SOCKDST=unix://commsock3
+IP4SRC=10.0.1.2
+IP4SRCGW=10.0.1.1
+IP4DSTGW=10.0.2.1
+IP4DST=10.0.2.2
+IP4DST_BCAST=10.0.2.255
+IP6SRC=fc00:0:0:1::2
+IP6SRCGW=fc00:0:0:1::1
+IP6DSTGW=fc00:0:0:2::1
+IP6DST=fc00:0:0:2::2
+HTML_FILE=index.html
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=5
+
+atf_test_case ipforwarding_v4 cleanup
+atf_test_case ipforwarding_v6 cleanup
+atf_test_case ipforwarding_fastforward_v4 cleanup
+atf_test_case ipforwarding_fastforward_v6 cleanup
+atf_test_case ipforwarding_misc cleanup
+
+ipforwarding_v4_head()
+{
+ atf_set "descr" "Does IPv4 forwarding tests"
+ atf_set "require.progs" "rump_server"
+}
+
+ipforwarding_v6_head()
+{
+ atf_set "descr" "Does IPv6 forwarding tests"
+ atf_set "require.progs" "rump_server"
+}
+
+ipforwarding_fastforward_v4_head()
+{
+ atf_set "descr" "Tests for IPv4 fastforward"
+ atf_set "require.progs" "rump_server"
+}
+
+ipforwarding_fastforward_v6_head()
+{
+ atf_set "descr" "Tests for IPv6 fastfoward"
+ atf_set "require.progs" "rump_server"
+}
+
+ipforwarding_misc_head()
+{
+ atf_set "descr" "Does IPv4 forwarding tests"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_endpoint()
+{
+ sock=${1}
+ addr=${2}
+ bus=${3}
+ mode=${4}
+ gw=${5}
+
+ rump_server_add_iface $sock shmif0 $bus
+
+ export RUMP_SERVER=${sock}
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
+ atf_check -s exit:0 -o ignore rump.route add default ${gw}
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ if $DEBUG; then
+ rump.ifconfig shmif0
+ rump.netstat -nr
+ fi
+}
+
+test_endpoint()
+{
+ sock=${1}
+ addr=${2}
+ bus=${3}
+ mode=${4}
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 -o match:shmif0 rump.ifconfig
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${addr}
+ else
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${addr}
+ fi
+}
+
+setup_forwarder()
+{
+ mode=${1}
+
+ rump_server_add_iface $SOCKFWD shmif0 bus1
+ rump_server_add_iface $SOCKFWD shmif1 bus2
+
+ export RUMP_SERVER=$SOCKFWD
+
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${IP4SRCGW} netmask 0xffffff00
+ atf_check -s exit:0 rump.ifconfig shmif1 inet ${IP4DSTGW} netmask 0xffffff00
+ fi
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+
+ if $DEBUG; then
+ rump.netstat -nr
+ if [ $mode = "ipv6" ]; then
+ rump.sysctl net.inet6.ip6.forwarding
+ else
+ rump.sysctl net.inet.ip.forwarding
+ fi
+ fi
+}
+
+setup()
+{
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKFWD
+ rump_server_start $SOCKDST
+
+ setup_endpoint $SOCKSRC $IP4SRC bus1 ipv4 $IP4SRCGW
+ setup_endpoint $SOCKDST $IP4DST bus2 ipv4 $IP4DSTGW
+ setup_forwarder ipv4
+}
+
+setup6()
+{
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKFWD netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_endpoint $SOCKSRC $IP6SRC bus1 ipv6 $IP6SRCGW
+ setup_endpoint $SOCKDST $IP6DST bus2 ipv6 $IP6DSTGW
+ setup_forwarder ipv6
+}
+
+test_http_get()
+{
+ local ip=$1
+
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 rump.arp -d -a
+
+ export RUMP_SERVER=$SOCKSRC
+
+ # get the webpage
+ atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $TIMEOUT -o out http://$ip/$HTML_FILE
+}
+
+test_setup()
+{
+ test_endpoint $SOCKSRC $IP4SRC bus1 ipv4
+ test_endpoint $SOCKDST $IP4DST bus2 ipv4
+
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:shmif0 rump.ifconfig
+ atf_check -s exit:0 -o match:shmif1 rump.ifconfig
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${IP4SRCGW}
+ atf_check -s exit:0 -o ignore rump.ping -n -w $TIMEOUT -c 1 ${IP4DSTGW}
+}
+
+test_setup6()
+{
+ test_endpoint $SOCKSRC $IP6SRC bus1 ipv6
+ test_endpoint $SOCKDST $IP6DST bus2 ipv6
+
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:shmif0 rump.ifconfig
+ atf_check -s exit:0 -o match:shmif1 rump.ifconfig
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${IP6SRCGW}
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT ${IP6DSTGW}
+}
+
+setup_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1
+}
+
+setup_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1
+}
+
+setup_directed_broadcast()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.directed-broadcast=1
+}
+
+setup_icmp_bmcastecho()
+{
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.icmp.bmcastecho=1
+}
+
+teardown_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=0
+}
+
+teardown_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=0
+}
+
+teardown_directed_broadcast()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.directed-broadcast=0
+}
+
+teardown_icmp_bmcastecho()
+{
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.icmp.bmcastecho=0
+}
+
+teardown_interfaces()
+{
+
+ rump_server_destroy_ifaces
+}
+
+test_setup_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:"net.inet.ip.forwarding = 1" \
+ rump.sysctl net.inet.ip.forwarding
+}
+test_setup_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:"net.inet6.ip6.forwarding = 1" \
+ rump.sysctl net.inet6.ip6.forwarding
+}
+
+test_teardown_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:"net.inet.ip.forwarding = 0" \
+ rump.sysctl net.inet.ip.forwarding
+}
+test_teardown_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o match:"net.inet6.ip6.forwarding = 0" \
+ rump.sysctl net.inet6.ip6.forwarding
+}
+
+test_ping_failure()
+{
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DST
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRC
+}
+
+test_ping_success()
+{
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRCGW
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DST
+ $DEBUG && rump.ifconfig -v shmif0
+
+ export RUMP_SERVER=$SOCKDST
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DSTGW
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRC
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+test_ping_ttl()
+{
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 -T 1 $IP4SRCGW
+ atf_check -s not-exit:0 -o match:'Time To Live exceeded' \
+ rump.ping -v -n -w $TIMEOUT -c 1 -T 1 $IP4DST
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 -T 2 $IP4DST
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+test_sysctl_ttl()
+{
+ local ip=$1
+
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.ttl=1
+ # get the webpage
+ atf_check -s not-exit:0 -e match:'timed out' \
+ env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $TIMEOUT -o out http://$ip/$HTML_FILE
+
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.ttl=2
+ # get the webpage
+ atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $TIMEOUT -o out http://$ip/$HTML_FILE
+
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.ttl=64
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+test_directed_broadcast()
+{
+ setup_icmp_bmcastecho
+
+ setup_directed_broadcast
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DST_BCAST
+
+ teardown_directed_broadcast
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4DST_BCAST
+
+ teardown_icmp_bmcastecho
+}
+
+test_ping6_failure()
+{
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6DST
+ export RUMP_SERVER=$SOCKDST
+ atf_check -s not-exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6SRC
+}
+
+test_ping6_success()
+{
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6SRCGW
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6DST
+ $DEBUG && rump.ifconfig -v shmif0
+
+ export RUMP_SERVER=$SOCKDST
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6DSTGW
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -X $TIMEOUT $IP6SRC
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+test_hoplimit()
+{
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.ifconfig -v shmif0
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -h 1 -X $TIMEOUT $IP6SRCGW
+ atf_check -s not-exit:0 -o match:'Time to live exceeded' \
+ rump.ping6 -v -n -c 1 -h 1 -X $TIMEOUT $IP6DST
+ atf_check -s exit:0 -o ignore rump.ping6 -q -n -c 1 -h 2 -X $TIMEOUT $IP6DST
+ $DEBUG && rump.ifconfig -v shmif0
+}
+
+ipforwarding_v4_body()
+{
+ setup
+ test_setup
+
+ setup_forwarding
+ test_setup_forwarding
+ test_ping_success
+
+ teardown_forwarding
+ test_teardown_forwarding
+ test_ping_failure
+
+ teardown_interfaces
+}
+
+ipforwarding_v6_body()
+{
+ setup6
+ test_setup6
+
+ setup_forwarding6
+ test_setup_forwarding6
+ test_ping6_success
+ test_hoplimit
+
+ teardown_forwarding6
+ test_teardown_forwarding6
+ test_ping6_failure
+
+ teardown_interfaces
+}
+
+ipforwarding_fastforward_v4_body()
+{
+ setup
+ test_setup
+
+ setup_forwarding
+ test_setup_forwarding
+
+ touch $HTML_FILE
+ start_httpd $SOCKDST $IP4DST
+ $DEBUG && rump.netstat -a
+
+ test_http_get $IP4DST
+
+ teardown_interfaces
+}
+
+ipforwarding_fastforward_v6_body()
+{
+ setup6
+ test_setup6
+
+ setup_forwarding6
+ test_setup_forwarding6
+
+ touch $HTML_FILE
+ start_httpd $SOCKDST $IP6DST
+ $DEBUG && rump.netstat -a
+
+ test_http_get "[$IP6DST]"
+
+ teardown_interfaces
+}
+
+ipforwarding_misc_body()
+{
+ setup
+ test_setup
+
+ setup_forwarding
+ test_setup_forwarding
+
+ test_ping_ttl
+
+ test_directed_broadcast
+
+ touch $HTML_FILE
+ start_httpd $SOCKDST $IP4DST
+ $DEBUG && rump.netstat -a
+
+ test_sysctl_ttl $IP4DST
+
+ teardown_interfaces
+ return 0
+}
+
+ipforwarding_v4_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ipforwarding_v6_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+ipforwarding_fastforward_v4_cleanup()
+{
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+ipforwarding_fastforward_v6_cleanup()
+{
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+ipforwarding_misc_cleanup()
+{
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case ipforwarding_v4
+ atf_add_test_case ipforwarding_v6
+ atf_add_test_case ipforwarding_fastforward_v4
+ atf_add_test_case ipforwarding_fastforward_v6
+ atf_add_test_case ipforwarding_misc
+}
diff --git a/contrib/netbsd-tests/net/net/t_ipaddress.sh b/contrib/netbsd-tests/net/net/t_ipaddress.sh
new file mode 100755
index 0000000..4cdd954
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_ipaddress.sh
@@ -0,0 +1,193 @@
+# $NetBSD: t_ipaddress.sh,v 1.9 2016/12/15 02:43:56 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+BUS=bus
+
+DEBUG=${DEBUG:-false}
+
+test_same_address()
+{
+ local ip=10.0.0.1
+ local net=10.0.0/24
+
+ rump_server_start $SOCK_LOCAL
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 $ip/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ check_route $ip 'link#2' UHl lo0
+ check_route $net 'link#2' UC shmif0
+
+ # Delete the address
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 $ip delete
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ check_route_no_entry $ip
+ check_route_no_entry $net
+
+ # Assign the same address again
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 $ip/24
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ check_route $ip 'link#2' UHl lo0
+ check_route $net 'link#2' UC shmif0
+
+ # Delete the address again
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 $ip delete
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ check_route_no_entry $ip
+ check_route_no_entry $net
+
+ rump_server_destroy_ifaces
+}
+
+test_same_address6()
+{
+ local ip=fc00::1
+ local net=fc00::/64
+
+ rump_server_start $SOCK_LOCAL netinet6
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $ip
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet6
+
+ check_route $ip 'link#2' UHl lo0
+ check_route $net 'link#2' UC shmif0
+
+ # Delete the address
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $ip delete
+
+ $DEBUG && rump.netstat -nr -f inet6
+
+ check_route_no_entry $ip
+ check_route_no_entry $net
+
+ # Assign the same address again
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $ip
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet6
+
+ check_route $ip 'link#2' UHl lo0
+ check_route $net 'link#2' UC shmif0
+
+ # Delete the address again
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $ip delete
+
+ $DEBUG && rump.netstat -nr -f inet6
+
+ check_route_no_entry $ip
+ check_route_no_entry $net
+
+ rump_server_destroy_ifaces
+}
+
+test_auto_linklocal()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ #
+ # Test enabled auto linklocal
+ #
+
+ # Check default value
+ atf_check -s exit:0 -o match:"1" rump.sysctl -n net.inet6.ip6.auto_linklocal
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ # IPv6 link-local address is set
+ atf_check -s exit:0 -o match:"inet6 fe80::" rump.ifconfig shmif0
+
+ #
+ # Test disabled auto linklocal
+ #
+ atf_check -s exit:0 -o ignore rump.sysctl -w -q net.inet6.ip6.auto_linklocal=0
+
+ rump_server_add_iface $SOCK_LOCAL shmif1 $BUS
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ # IPv6 link-local address is not set
+ atf_check -s exit:0 -o not-match:"inet6 fe80::" rump.ifconfig shmif1
+
+ rump_server_destroy_ifaces
+}
+
+add_test()
+{
+ local name=$1
+ local desc="$2"
+
+ atf_test_case "ipaddr_${name}" cleanup
+ eval "ipaddr_${name}_head() { \
+ atf_set \"descr\" \"${desc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ ipaddr_${name}_body() { \
+ test_${name}; \
+ }; \
+ ipaddr_${name}_cleanup() { \
+ $DEBUG && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case "ipaddr_${name}"
+}
+
+atf_init_test_cases()
+{
+
+ add_test same_address "Assigning/deleting an IP address twice"
+ add_test same_address6 "Assigning/deleting an IPv6 address twice"
+ add_test auto_linklocal "Assigning an IPv6 link-local address automatically"
+}
diff --git a/contrib/netbsd-tests/net/net/t_ipv6_lifetime.sh b/contrib/netbsd-tests/net/net/t_ipv6_lifetime.sh
new file mode 100755
index 0000000..10e50fd
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_ipv6_lifetime.sh
@@ -0,0 +1,127 @@
+# $NetBSD: t_ipv6_lifetime.sh,v 1.6 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK=unix://sock
+BUS=./bus
+
+DEBUG=${DEBUG:-false}
+
+deprecated="[Dd][Ee][Pp][Rr][Ee][Cc][Aa][Tt][Ee][Dd]"
+
+atf_test_case basic cleanup
+
+basic_head()
+{
+ atf_set "descr" "Tests for IPv6 address lifetime"
+ atf_set "require.progs" "rump_server"
+}
+
+basic_body()
+{
+ local time=5
+ local bonus=2
+ local ip="fc00::1"
+
+ rump_server_start $SOCK netinet6
+ rump_server_add_iface $SOCK shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ # A normal IP address doesn't contain preferred/valid lifetime
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o not-match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o not-match:'vltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip delete
+
+ # Setting only a preferred lifetime
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip pltime $time
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'vltime infty' rump.ifconfig -L shmif0
+ atf_check -s exit:0 sleep $(($time + $bonus))
+ $DEBUG && rump.ifconfig -L shmif0
+ # Should remain but marked as deprecated
+ atf_check -s exit:0 -o match:"$ip.+$deprecated" rump.ifconfig -L shmif0
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip delete
+
+ # Setting only a valid lifetime (invalid)
+ atf_check -s not-exit:0 -e match:'Invalid argument' \
+ rump.ifconfig shmif0 inet6 $ip vltime $time
+
+ # Setting both preferred and valid lifetimes (same value)
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip \
+ pltime $time vltime $time
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'vltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 sleep $(($time + $bonus))
+ $DEBUG && rump.ifconfig -L shmif0
+ # Shouldn't remain anymore
+ atf_check -s exit:0 -o not-match:"$ip" rump.ifconfig -L shmif0
+
+ # Setting both preferred and valid lifetimes (pltime > vltime)
+ atf_check -s not-exit:0 -e match:'Invalid argument' rump.ifconfig \
+ shmif0 inet6 $ip pltime $(($time * 2)) vltime $time
+
+ # Setting both preferred and valid lifetimes (pltime < vltime)
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip \
+ pltime $time vltime $((time * 2))
+ $DEBUG && rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0
+ atf_check -s exit:0 -o match:'vltime' rump.ifconfig -L shmif0
+
+ if sysctl machdep.cpu_brand 2>/dev/null | grep QEMU >/dev/null 2>&1
+ then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip delete
+ atf_skip "unreliable under qemu, skip until PR kern/43997 fixed"
+ fi
+
+ atf_check -s exit:0 sleep $(($time + $bonus))
+ $DEBUG && rump.ifconfig -L shmif0
+ # Should remain but marked as deprecated
+ atf_check -s exit:0 -o match:"$ip.+$deprecated" rump.ifconfig -L shmif0
+ atf_check -s exit:0 sleep $(($time + $bonus))
+ $DEBUG && rump.ifconfig -L shmif0
+ # Shouldn't remain anymore
+ atf_check -s exit:0 -o not-match:"$ip" rump.ifconfig -L shmif0
+
+ rump_server_destroy_ifaces
+}
+
+basic_cleanup()
+{
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case basic
+}
diff --git a/contrib/netbsd-tests/net/net/t_ipv6address.sh b/contrib/netbsd-tests/net/net/t_ipv6address.sh
new file mode 100755
index 0000000..539a16d
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_ipv6address.sh
@@ -0,0 +1,387 @@
+# $NetBSD: t_ipv6address.sh,v 1.12 2016/12/14 02:50:42 ozaki-r Exp $
+#
+# Copyright (c) 2015 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+SERVER="rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet"
+SERVER="${SERVER} -lrumpnet_shmif -lrumpdev"
+SERVER6="${SERVER} -lrumpnet_netinet6"
+
+SOCKSRC=unix://commsock1
+SOCKFWD=unix://commsock2
+SOCKDST=unix://commsock3
+IP6SRCNW=fc00:1::0/64
+IP6SRC=fc00:1::1
+IP6DSTNW=fc00:2::0/64
+IP6DST=fc00:2::1
+IP6FWD0=fc00:3::1
+BUS1=bus1
+BUS2=bus2
+BUSSRC=bus_src
+BUSDST=bus_dst
+
+DEBUG=${DEBUG:-true}
+TIMEOUT=3
+
+atf_test_case linklocal cleanup
+atf_test_case linklocal_ops cleanup
+
+setup()
+{
+ atf_check -s exit:0 ${SERVER6} ${SOCKSRC}
+ atf_check -s exit:0 ${SERVER6} ${SOCKFWD}
+ atf_check -s exit:0 ${SERVER6} ${SOCKDST}
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 -o match:"0 -> 1" rump.sysctl \
+ -w net.inet6.ip6.forwarding=1
+ unset RUMP_SERVER
+
+ setup_ifcfg
+
+ export RUMP_SERVER=${SOCKSRC}
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+}
+setup_ifcfg()
+{
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS1}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ${BUSSRC}
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS2}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ${BUSDST}
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr ${BUS1}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr ${BUS2}
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ unset RUMP_SERVER
+}
+
+setup_route()
+{
+ local tmp_rump_server=$RUMP_SERVER
+
+ local src_if0_lladdr=`get_linklocal_addr ${SOCKSRC} shmif0`
+ local dst_if0_lladdr=`get_linklocal_addr ${SOCKDST} shmif0`
+ local fwd_if0_lladdr=`get_linklocal_addr ${SOCKFWD} shmif0`
+ local fwd_if1_lladdr=`get_linklocal_addr ${SOCKFWD} shmif1`
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s ignore -o ignore -e ignore \
+ rump.route delete -inet6 default ${fwd_if0_lladdr}%shmif0
+ atf_check -s exit:0 -o match:"add net default:" \
+ rump.route add -inet6 default ${fwd_if0_lladdr}%shmif0
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6SRC}
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ atf_check -s ignore -o ignore -e ignore \
+ rump.route delete -inet6 default ${fwd_if1_lladdr}%shmif0
+ atf_check -s exit:0 -o match:"add net default:" \
+ rump.route add -inet6 default ${fwd_if1_lladdr}%shmif0
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DST}
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s ignore -o ignore -e ignore \
+ rump.route delete -inet6 ${IP6SRCNW} ${src_if0_lladdr}%shmif0
+ atf_check -s exit:0 -o match:"add net" \
+ rump.route add -inet6 ${IP6SRCNW} ${src_if0_lladdr}%shmif0
+
+ atf_check -s ignore -o ignore -e ignore \
+ rump.route delete -inet6 ${IP6DSTNW} ${dst_if0_lladdr}%shmif1
+ atf_check -s exit:0 -o match:"add net" \
+ rump.route add -inet6 ${IP6DSTNW} ${dst_if0_lladdr}%shmif1
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ $DEBUG && rump.netstat -rn -f inet6
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=$tmp_rump_server
+}
+
+cleanup_bus()
+{
+ local tmp_rump_server=$RUMP_SERVER
+
+ $DEBUG && dump_bus
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ atf_check -s exit:0 rump.ifconfig shmif0 -linkstr
+ atf_check -s exit:0 rump.ifconfig shmif1 down
+ atf_check -s exit:0 rump.ifconfig shmif1 -linkstr
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKDST}
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ atf_check -s exit:0 rump.ifconfig shmif0 -linkstr
+ atf_check -s exit:0 rump.ifconfig shmif1 down
+ atf_check -s exit:0 rump.ifconfig shmif1 -linkstr
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s exit:0 rump.ifconfig shmif0 down
+ atf_check -s exit:0 rump.ifconfig shmif0 -linkstr
+ atf_check -s exit:0 rump.ifconfig shmif1 down
+ atf_check -s exit:0 rump.ifconfig shmif1 -linkstr
+ unset RUMP_SERVER
+
+ atf_check -s exit:0 rm ${BUSSRC}
+ atf_check -s exit:0 rm ${BUSDST}
+ atf_check -s exit:0 rm ${BUS1}
+ atf_check -s exit:0 rm ${BUS2}
+
+ setup_ifcfg
+
+ export RUMP_SERVER=$tmp_rump_server
+}
+
+cleanup_rump_servers()
+{
+
+ env RUMP_SERVER=${SOCKSRC} rump.halt
+ env RUMP_SERVER=${SOCKDST} rump.halt
+ env RUMP_SERVER=${SOCKFWD} rump.halt
+}
+
+dump_bus()
+{
+
+ shmif_dumpbus -p - ${BUSSRC} 2>/dev/null| tcpdump -n -e -r -
+ shmif_dumpbus -p - ${BUSDST} 2>/dev/null| tcpdump -n -e -r -
+ shmif_dumpbus -p - ${BUS1} 2>/dev/null| tcpdump -n -e -r -
+ shmif_dumpbus -p - ${BUS2} 2>/dev/null| tcpdump -n -e -r -
+}
+
+_dump()
+{
+
+ export RUMP_SERVER=${SOCKSRC}
+ rump.ndp -n -a
+ rump.netstat -nr -f inet6
+ export RUMP_SERVER=${SOCKDST}
+ rump.ndp -n -a
+ rump.netstat -nr -f inet6
+ export RUMP_SERVER=${SOCKFWD}
+ rump.ndp -n -a
+ rump.netstat -nr -f inet6
+ unset RUMP_SERVER
+}
+
+linklocal_head()
+{
+ atf_set "descr" \
+ "Test for bassically function of the IPv6 linklocal address"
+ atf_set "require.progs" \
+ "rump_server rump.route rump.ifconfig rump.ping6"
+}
+
+linklocal_body()
+{
+ setup
+
+ local src_if0_lladdr=`get_linklocal_addr ${SOCKSRC} shmif0`
+ local src_if1_lladdr=`get_linklocal_addr ${SOCKSRC} shmif1`
+ local dst_if0_lladdr=`get_linklocal_addr ${SOCKDST} shmif0`
+ local fwd_if0_lladdr=`get_linklocal_addr ${SOCKFWD} shmif0`
+ local fwd_if1_lladdr=`get_linklocal_addr ${SOCKFWD} shmif1`
+
+ export RUMP_SERVER=${SOCKSRC}
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # link local address to link local address
+
+ atf_check -s not-exit:0 -e match:"No route to host" \
+ rump.ping6 -c 1 -X $TIMEOUT -n ${fwd_if0_lladdr}
+
+ atf_check -s exit:0 -o match:"0.0% packet loss" \
+ rump.ping6 -c 1 -X $TIMEOUT -n ${fwd_if0_lladdr}%shmif0
+
+ atf_check -s ignore -o empty -e ignore \
+ -x "shmif_dumpbus -p - ${BUSSRC} | tcpdump -r - -n -p icmp6"
+ atf_check -s ignore -o not-empty -e ignore \
+ -x "shmif_dumpbus -p - ${BUS1} | tcpdump -r - -n -p icmp6"
+
+ cleanup_bus
+
+ atf_check -s not-exit:0 -o ignore -e ignore \
+ rump.ping6 -c 1 -X $TIMEOUT -n -S ${src_if1_lladdr}%shmif1 \
+ ${fwd_if0_lladdr}%shmif0
+ atf_check -s ignore -o not-match:"${src_if1_lladdr}" -e ignore \
+ -x "shmif_dumpbus -p - ${BUS1} | tcpdump -r - -n -p icmp6"
+ $DEBUG && shmif_dumpbus -p - ${BUS1} | tcpdump -r - -n -p icmp6
+ unset RUMP_SERVER
+
+ # link local address to host address
+ export RUMP_SERVER=${SOCKFWD}
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6FWD0}
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 -o match:"add net default:" \
+ rump.route add -inet6 default ${fwd_if0_lladdr}%shmif0
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig shmif0
+ $DEBUG && _dump
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 -o match:"0.0% packet loss" \
+ rump.ping6 -c 1 -X $TIMEOUT -n -S ${src_if0_lladdr}%shmif0 ${IP6FWD0}
+ unset RUMP_SERVER
+
+ export RUMP_SERVER=${SOCKFWD}
+ # host address to link local address
+ atf_check -s exit:0 -o match:"0.0% packet loss" \
+ rump.ping6 -c 1 -X $TIMEOUT -n ${src_if0_lladdr}%shmif0
+ atf_check -s not-exit:0 -o match:"100.0% packet loss" \
+ rump.ping6 -c 1 -X $TIMEOUT -n ${src_if1_lladdr}%shmif0
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6FWD0} delete
+
+ unset RUMP_SERVER
+
+ # forwarding with link local address
+ setup_route
+
+ export RUMP_SERVER=${SOCKSRC}
+ atf_check -s exit:0 -o match:"0.0% packet loss" rump.ping6 -c 1 \
+ -X $TIMEOUT -n -S ${IP6SRC} ${IP6DST}
+
+ cleanup_bus
+ $DEBUG && rump.ifconfig shmif0
+ atf_check -s not-exit:0 -o match:"100.0% packet loss" rump.ping6 -c 1 \
+ -X $TIMEOUT -n -S ${src_if0_lladdr}%shmif0 ${IP6DST}
+ atf_check -s ignore -o not-match:"${src_if0_lladdr}" -e ignore \
+ -x "shmif_dumpbus -p - ${BUS2} | tcpdump -r - -n -p icmp6"
+
+ cleanup_bus
+ atf_check -s not-exit:0 -o match:"100.0% packet loss" rump.ping6 -c 1 \
+ -X $TIMEOUT -n -S ${IP6SRC} ${dst_if0_lladdr}%shmif0
+ atf_check -s ignore -o not-empty -e ignore \
+ -x "shmif_dumpbus -p - ${BUS2} | tcpdump -r - -n -p icmp6"
+
+ unset RUMP_SERVER
+
+}
+
+linklocal_cleanup()
+{
+
+ $DEBUG && _dump
+ $DEBUG && dump_bus
+ cleanup_rump_servers
+}
+
+linklocal_ops_head()
+{
+
+ atf_set "descr" \
+ "Test for various operations to IPv6 linklocal addresses"
+ atf_set "require.progs" "rump_server rump.route rump.ndp"
+}
+
+linklocal_ops_body()
+{
+ local src_if0_lladdr=
+
+ setup
+
+ src_if0_lladdr=`get_linklocal_addr ${SOCKSRC} shmif0`
+
+ export RUMP_SERVER=${SOCKSRC}
+
+ # route get
+ atf_check -s exit:0 -o match:"${src_if0_lladdr}" \
+ rump.route get -inet6 ${src_if0_lladdr}%shmif0
+
+ # route get without an interface name (zone index)
+ atf_check -s not-exit:0 -e match:"not in table" \
+ rump.route get -inet6 ${src_if0_lladdr}
+
+ # ndp
+ atf_check -s exit:0 -o match:"${src_if0_lladdr}" \
+ rump.ndp -n ${src_if0_lladdr}%shmif0
+
+ # ndp without an interface name (zone index)
+ atf_check -s not-exit:0 -o ignore -e match:"no entry" \
+ rump.ndp -n ${src_if0_lladdr}
+}
+
+
+linklocal_ops_cleanup()
+{
+
+ cleanup_rump_servers
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case linklocal
+ atf_add_test_case linklocal_ops
+}
diff --git a/contrib/netbsd-tests/net/net/t_mtudisc.sh b/contrib/netbsd-tests/net/net/t_mtudisc.sh
new file mode 100755
index 0000000..a99d652
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_mtudisc.sh
@@ -0,0 +1,192 @@
+# $NetBSD: t_mtudisc.sh,v 1.8 2016/12/21 01:16:18 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKLOCAL=unix://commsock1
+SOCKGATEWAY=unix://commsock2
+SOCKREMOTE=unix://commsock3
+HTML_FILE=index.html
+
+DEBUG=${DEBUG:-false}
+
+atf_test_case mtudisc_basic cleanup
+
+mtudisc_basic_head()
+{
+ atf_set "descr" "Tests for IPv4 Path MTU Dicorvery basic behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_server()
+{
+ local sock=$1
+ local if=$2
+ local bus=$3
+ local ip=$4
+
+ rump_server_add_iface $sock $if $bus
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig $if $ip
+ atf_check -s exit:0 rump.ifconfig $if up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig $if
+}
+
+prepare_download_file()
+{
+ local file=$1
+ local data="0123456789"
+
+ touch $file
+ for i in `seq 1 512`
+ do
+ echo $data >> $file
+ done
+}
+
+do_http_get()
+{
+ local ip=$1
+ local ret=$2
+ local timeout=5
+
+ # get the webpage
+ atf_check -s exit:$ret env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $timeout -o ./out http://$ip/$HTML_FILE
+}
+
+mtudisc_basic_body()
+{
+ local pkt=
+ local local_ip=10.0.0.2
+ local gateway_local_ip=10.0.0.1
+ local gateway_remote_ip=10.0.1.1
+ local remote_ip=10.0.1.2
+ local prefixlen=24
+
+ rump_server_start $SOCKLOCAL
+ rump_server_start $SOCKGATEWAY
+ rump_server_start $SOCKREMOTE
+
+ #
+ # Setup servers
+ #
+ # [local server] [gateway server] [remote server with httpd]
+ # | 10.0.0.2 10.0.0.1 | | 10.0.1.1 10.0.1.2 |
+ # shmif0(mtu=1500) ----- shmif1(mtu=1280) shmif0(mtu=1500) ----- shmif0(mtu=1500)
+ #
+
+ # Assign IP addresses
+ setup_server $SOCKLOCAL shmif0 bus1 $local_ip/$prefixlen
+ setup_server $SOCKGATEWAY shmif0 bus1 $gateway_local_ip/$prefixlen
+ setup_server $SOCKGATEWAY shmif1 bus2 $gateway_remote_ip/$prefixlen
+ setup_server $SOCKREMOTE shmif0 bus2 $remote_ip/$prefixlen
+
+ ### Setup gateway server
+ export RUMP_SERVER=$SOCKGATEWAY
+
+ # Set mtu of shmif0 to 1280
+ export RUMP_SERVER=$SOCKGATEWAY
+ atf_check -s exit:0 rump.ifconfig shmif0 mtu 1280
+
+ # Enable IPv4 forwarding
+ atf_check -s exit:0 rump.sysctl -w -q net.inet.ip.forwarding=1
+
+ ### Setup remote server
+ export RUMP_SERVER=$SOCKREMOTE
+
+ # Check default value
+ atf_check -s exit:0 -o match:"1" rump.sysctl -n net.inet.ip.mtudisc
+
+ # Start httpd daemon
+ prepare_download_file $HTML_FILE
+ start_httpd $SOCKREMOTE $remote_ip
+ $DEBUG && rump.netstat -a -f inet
+
+ # Teach the peer thar 10.0.0.2(local serer) is behind 10.0.1.1(gateway server)
+ atf_check -s exit:0 -o ignore rump.route add $local_ip/32 $gateway_remote_ip
+
+ ### Setup local server
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # Teach the peer thar 10.0.1.2(remote serer) is behind 10.0.0.1(gateway server)
+ atf_check -s exit:0 -o ignore rump.route add $remote_ip/32 $gateway_local_ip
+
+ # Don't accept fragmented packets
+ atf_check -s exit:0 -o ignore rump.sysctl -w -q net.inet.ip.maxfragpackets=0
+
+ #
+ # Test disabled path mtu discorvery
+ #
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 -o ignore rump.sysctl -w -q net.inet.ip.mtudisc=0
+
+ # Get the webpage (expect: failed)
+ export RUMP_SERVER=$SOCKLOCAL
+ do_http_get $remote_ip 1
+ $DEBUG && extract_new_packets bus2 > ./out
+ $DEBUG && cat ./out
+
+ # Check path mtu size on remote server
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 \
+ -o match:"^10.0.0.2 +10.0.1.1 +UGHS +- +- +- +shmif0" \
+ rump.netstat -nr -f inet
+
+ #
+ # Test enabled path mtu discorvery
+ #
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 -o ignore rump.sysctl -w -q net.inet.ip.mtudisc=1
+
+ # Get the webpage (expect: success)
+ export RUMP_SERVER=$SOCKLOCAL
+ do_http_get $remote_ip 0
+ $DEBUG && extract_new_packets bus2 > ./out
+ $DEBUG && cat ./out
+
+ # Check path mtu size on remote server
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 \
+ -o match:"^10.0.0.2 +10.0.1.1 +UGHS +- +- +1280 +shmif0" \
+ rump.netstat -nr -f inet
+
+ rump_server_destroy_ifaces
+}
+
+mtudisc_basic_cleanup()
+{
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case mtudisc_basic
+}
diff --git a/contrib/netbsd-tests/net/net/t_mtudisc6.sh b/contrib/netbsd-tests/net/net/t_mtudisc6.sh
new file mode 100755
index 0000000..93bc12e
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_mtudisc6.sh
@@ -0,0 +1,179 @@
+# $NetBSD: t_mtudisc6.sh,v 1.5 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKLOCAL=unix://commsock1
+SOCKGATEWAY=unix://commsock2
+SOCKREMOTE=unix://commsock3
+HTML_FILE=index.html
+
+DEBUG=${DEBUG:-false}
+
+atf_test_case mtudisc6_basic cleanup
+
+mtudisc6_basic_head()
+{
+
+ atf_set "descr" "Tests for IPv6 Path MTU Dicorvery basic behavior"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_server()
+{
+ local sock=$1
+ local if=$2
+ local bus=$3
+ local ip=$4
+
+ rump_server_add_iface $sock $if $bus
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig $if inet6 $ip
+ atf_check -s exit:0 rump.ifconfig $if up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig $if
+}
+
+prepare_download_file()
+{
+ local file=$1
+ local data="0123456789"
+
+ touch $file
+ for i in `seq 1 512`
+ do
+ echo $data >> $file
+ done
+}
+
+do_http_get()
+{
+ local ip=$1
+ local ret=$2
+ local timeout=5
+
+ # get the webpage
+ atf_check -s exit:$ret env LD_PRELOAD=/usr/lib/librumphijack.so \
+ ftp -q $timeout -o ./out "http://[$ip]/$HTML_FILE"
+}
+
+mtudisc6_basic_body()
+{
+ local pkt=
+ local local_ip=fc00:0:0:1::2
+ local gateway_local_ip=fc00:0:0:1::1
+ local gateway_remote_ip=fc00:0:0:2::1
+ local remote_ip=fc00:0:0:2::2
+ local prefixlen=64
+
+ rump_server_start $SOCKLOCAL netinet6
+ rump_server_start $SOCKGATEWAY netinet6
+ rump_server_start $SOCKREMOTE netinet6
+
+ #
+ # Setup servers
+ #
+ # [local server] [gateway server] [remote server]
+ # | | | |
+ # shmif0(1500) -- shmif1(1280) shmif0(1500) -- shmif0(1500)
+ #
+
+ # Assign IP addresses
+ setup_server $SOCKLOCAL shmif0 bus1 $local_ip/$prefixlen
+ setup_server $SOCKGATEWAY shmif0 bus1 $gateway_local_ip/$prefixlen
+ setup_server $SOCKGATEWAY shmif1 bus2 $gateway_remote_ip/$prefixlen
+ setup_server $SOCKREMOTE shmif0 bus2 $remote_ip/$prefixlen
+
+ ### Setup gateway server
+ export RUMP_SERVER=$SOCKGATEWAY
+
+ # Set MTU of shmif0 to 1280
+ export RUMP_SERVER=$SOCKGATEWAY
+ atf_check -s exit:0 rump.ifconfig shmif0 mtu 1280
+
+ # Enable IPv6 forwarding
+ atf_check -s exit:0 rump.sysctl -w -q net.inet6.ip6.forwarding=1
+
+ ### Setup remote server
+ export RUMP_SERVER=$SOCKREMOTE
+
+ # Start httpd daemon
+ prepare_download_file $HTML_FILE
+ start_httpd $SOCKREMOTE $remote_ip
+ $DEBUG && rump.netstat -a
+
+ # Teach the peer that local serer is behind gateway server
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 $local_ip/128 $gateway_remote_ip
+
+ # Check path MTU size on remote server
+ atf_check -s exit:0 \
+ -o match:"^$local_ip +$gateway_remote_ip +UGHS +- +- +- +shmif0" \
+ rump.netstat -nr -f inet6
+
+ ### Setup local server
+ export RUMP_SERVER=$SOCKLOCAL
+
+ # Teach the peer that remote serer is behind gateway server
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 $remote_ip/128 $gateway_local_ip
+
+ # Don't accept fragmented packets
+ atf_check -s exit:0 -o ignore \
+ rump.sysctl -w -q net.inet6.ip6.maxfragpackets=0
+
+ #
+ # Test enabled path MTU discorvery
+ #
+ # Get the webpage (expect: success)
+ export RUMP_SERVER=$SOCKLOCAL
+ do_http_get $remote_ip 0
+ $DEBUG && extract_new_packets bus2 > ./out
+ $DEBUG && cat ./out
+
+ # Check path MTU size on remote server
+ export RUMP_SERVER=$SOCKREMOTE
+ atf_check -s exit:0 \
+ -o match:"^$local_ip +$gateway_remote_ip +UGHS +- +- +1280 +shmif0" \
+ rump.netstat -nr -f inet6
+
+ rump_server_destroy_ifaces
+}
+
+mtudisc6_basic_cleanup()
+{
+
+ $DEBUG && dump
+ stop_httpd
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case mtudisc6_basic
+}
diff --git a/contrib/netbsd-tests/net/net/t_ping6_opts.sh b/contrib/netbsd-tests/net/net/t_ping6_opts.sh
new file mode 100755
index 0000000..e2e774e
--- /dev/null
+++ b/contrib/netbsd-tests/net/net/t_ping6_opts.sh
@@ -0,0 +1,380 @@
+# $NetBSD: t_ping6_opts.sh,v 1.8 2016/11/25 08:51:17 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCKSRC=unix://commsock1
+SOCKFWD=unix://commsock2
+SOCKDST=unix://commsock3
+IP6SRC=fc00:0:0:1::2
+IP6SRCGW=fc00:0:0:1::1
+IP6DSTGW=fc00:0:0:2::1
+IP6DST=fc00:0:0:2::2
+BUS_SRCGW=bus1
+BUS_DSTGW=bus2
+
+IP6SRC2=fc00:0:0:1::3
+IP6SRCGW2=fc00:0:0:1::254
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=1
+
+#
+# Utility functions
+#
+setup_endpoint()
+{
+ local sock=${1}
+ local addr=${2}
+ local bus=${3}
+ local gw=${4}
+
+ rump_server_add_iface $sock shmif0 $bus
+
+ export RUMP_SERVER=${sock}
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ if $DEBUG; then
+ rump.ifconfig shmif0
+ rump.netstat -nr
+ fi
+}
+
+setup_forwarder()
+{
+
+ rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW
+ rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW
+
+ export RUMP_SERVER=$SOCKFWD
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ if $DEBUG; then
+ rump.netstat -nr
+ rump.sysctl net.inet6.ip6.forwarding
+ fi
+}
+
+setup_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1
+}
+
+setup6()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKFWD netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW $IP6SRCGW
+ setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW $IP6DSTGW
+ setup_forwarder
+}
+
+check_echo_request_pkt()
+{
+ local pkt="$1 > $2: .+ echo request"
+
+ extract_new_packets $BUS_SRCGW > ./out
+ $DEBUG && echo $pkt
+ $DEBUG && cat ./out
+ atf_check -s exit:0 -o match:"$pkt" cat ./out
+}
+
+check_echo_request_pkt_with_macaddr()
+{
+ local pkt="$1 > $2, .+ $3 > $4: .+ echo request"
+
+ extract_new_packets $BUS_SRCGW > ./out
+ $DEBUG && echo $pkt
+ $DEBUG && cat ./out
+ atf_check -s exit:0 -o match:"$pkt" cat ./out
+}
+
+check_echo_request_pkt_with_macaddr_and_rthdr0()
+{
+ local pkt=
+
+ pkt="$1 > $2, .+ $3 > $4:"
+ pkt="$pkt srcrt \\(len=2, type=0, segleft=1, \\[0\\]$5\\)"
+ pkt="$pkt .+ echo request"
+
+ extract_new_packets $BUS_SRCGW > ./out
+ $DEBUG && echo $pkt
+ $DEBUG && cat ./out
+ atf_check -s exit:0 -o match:"$pkt" cat ./out
+}
+
+#
+# Tests
+#
+atf_test_case ping6_opts_sourceaddr cleanup
+ping6_opts_sourceaddr_head()
+{
+
+ atf_set "descr" "tests of ping6 -S option"
+ atf_set "require.progs" "rump_server"
+}
+
+ping6_opts_sourceaddr_body()
+{
+
+ setup6
+ setup_forwarding6
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt $IP6SRC $IP6DST
+
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6SRC2
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt $IP6SRC $IP6DST
+
+ # ping6 -S <sourceaddr>
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -S $IP6SRC $IP6DST
+ check_echo_request_pkt $IP6SRC $IP6DST
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -S $IP6SRC2 $IP6DST
+ check_echo_request_pkt $IP6SRC2 $IP6DST
+
+ rump_server_destroy_ifaces
+}
+
+ping6_opts_sourceaddr_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ping6_opts_interface cleanup
+ping6_opts_interface_head()
+{
+
+ atf_set "descr" "tests of ping6 -I option"
+ atf_set "require.progs" "rump_server"
+}
+
+ping6_opts_interface_body()
+{
+ local shmif0_lladdr=
+ local shmif1_lladdr=
+ local gw_lladdr=
+
+ setup6
+ setup_forwarding6
+
+ shmif0_lladdr=$(get_linklocal_addr ${SOCKSRC} shmif0)
+ gw_lladdr=$(get_linklocal_addr ${SOCKFWD} shmif0)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $gw_lladdr
+ check_echo_request_pkt $shmif0_lladdr $gw_lladdr
+
+ rump_server_add_iface $SOCKSRC shmif1 $BUS_SRCGW
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+ shmif1_lladdr=$(get_linklocal_addr ${SOCKSRC} shmif1)
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $gw_lladdr
+ check_echo_request_pkt $shmif0_lladdr $gw_lladdr
+
+ # ping6 -I <interface>
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -I shmif0 $gw_lladdr
+ check_echo_request_pkt $shmif0_lladdr $gw_lladdr
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -I shmif1 $gw_lladdr
+ check_echo_request_pkt $shmif1_lladdr $gw_lladdr
+
+ rump_server_destroy_ifaces
+}
+
+ping6_opts_interface_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ping6_opts_gateway cleanup
+ping6_opts_gateway_head()
+{
+
+ atf_set "descr" "tests of ping6 -g option"
+ atf_set "require.progs" "rump_server"
+}
+
+ping6_opts_gateway_body()
+{
+ local my_macaddr=
+ local gw_shmif0_macaddr=
+ local gw_shmif2_macaddr=
+
+ setup6
+ setup_forwarding6
+
+ my_macaddr=$(get_macaddr ${SOCKSRC} shmif0)
+ gw_shmif0_macaddr=$(get_macaddr ${SOCKFWD} shmif0)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ rump_server_add_iface $SOCKFWD shmif2 $BUS_SRCGW
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 rump.ifconfig shmif2 inet6 $IP6SRCGW2
+ atf_check -s exit:0 rump.ifconfig -w 10
+ gw_shmif2_macaddr=$(get_macaddr ${SOCKFWD} shmif2)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ # ping6 -g <gateway>
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW2 $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif2_macaddr $IP6SRC $IP6DST
+
+ rump_server_destroy_ifaces
+}
+
+ping6_opts_gateway_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case ping6_opts_hops cleanup
+ping6_opts_hops_head()
+{
+
+ atf_set "descr" "tests of ping6 hops (Type 0 Routing Header)"
+ atf_set "require.progs" "rump_server"
+}
+
+ping6_opts_hops_body()
+{
+ local my_macaddr=
+ local gw_shmif0_macaddr=
+ local gw_shmif2_macaddr=
+
+ setup6
+ setup_forwarding6
+
+ my_macaddr=$(get_macaddr ${SOCKSRC} shmif0)
+ gw_shmif0_macaddr=$(get_macaddr ${SOCKFWD} shmif0)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ rump_server_add_iface $SOCKFWD shmif2 $BUS_SRCGW
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 rump.ifconfig shmif2 inet6 $IP6SRCGW2
+ atf_check -s exit:0 rump.ifconfig -w 10
+ gw_shmif2_macaddr=$(get_macaddr ${SOCKFWD} shmif2)
+
+ export RUMP_SERVER=$SOCKSRC
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6DST
+ check_echo_request_pkt_with_macaddr \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6DST
+
+ # ping6 hops
+
+ # ping6 fails expectedly because the kernel doesn't support
+ # to receive packets with type 0 routing headers, but we can
+ # check whether a sent packet is correct.
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ $IP6SRCGW $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6SRCGW $IP6DST
+
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ $IP6SRCGW2 $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif2_macaddr $IP6SRC $IP6SRCGW2 $IP6DST
+
+ # ping6 -g <gateway> hops
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW $IP6SRCGW $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6SRCGW $IP6DST
+
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW2 $IP6SRCGW2 $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif2_macaddr $IP6SRC $IP6SRCGW2 $IP6DST
+
+ # ping6 -g <gateway> hops, but different nexthops (is it valid?)
+ atf_check -s not-exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT \
+ -g $IP6SRCGW $IP6SRCGW2 $IP6DST
+ check_echo_request_pkt_with_macaddr_and_rthdr0 \
+ $my_macaddr $gw_shmif0_macaddr $IP6SRC $IP6SRCGW2 $IP6DST
+
+ rump_server_destroy_ifaces
+}
+
+ping6_opts_hops_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case ping6_opts_sourceaddr
+ atf_add_test_case ping6_opts_interface
+ atf_add_test_case ping6_opts_gateway
+ atf_add_test_case ping6_opts_hops
+}
diff --git a/contrib/netbsd-tests/net/net/t_tcp.c b/contrib/netbsd-tests/net/net/t_tcp.c
index 8972a0f..fd1f1e9 100644
--- a/contrib/netbsd-tests/net/net/t_tcp.c
+++ b/contrib/netbsd-tests/net/net/t_tcp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_tcp.c,v 1.3 2013/10/17 12:53:28 christos Exp $ */
+/* $NetBSD: t_tcp.c,v 1.4 2016/03/04 18:52:01 christos Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#ifdef __RCSID
-__RCSID("$Id: t_tcp.c,v 1.3 2013/10/17 12:53:28 christos Exp $");
+__RCSID("$Id: t_tcp.c,v 1.4 2016/03/04 18:52:01 christos Exp $");
#endif
/* Example code. Should block; does with accept not paccept. */
@@ -61,6 +61,10 @@ __RCSID("$Id: t_tcp.c,v 1.3 2013/10/17 12:53:28 christos Exp $");
#define FAIL(msg, ...) ATF_CHECK_MSG(0, msg, ## __VA_ARGS__); goto fail
#endif
+#ifdef __linux__
+#define paccept(a, b, c, d, e) accept4((a), (b), (c), (e))
+#endif
+
static void
ding(int al)
{
@@ -70,7 +74,8 @@ static void
paccept_block(bool pacceptblock, bool fcntlblock)
{
int srvr = -1, clnt = -1, as = -1;
- int ok, fl, n;
+ int ok, fl;
+ ssize_t n;
char buf[10];
struct sockaddr_in sin, ba;
struct sigaction sa;
@@ -105,10 +110,12 @@ paccept_block(bool pacceptblock, bool fcntlblock)
/* may not connect first time */
ok = connect(clnt, (struct sockaddr *) &ba, addrlen);
+ if (ok != -1 || errno != EINPROGRESS)
+ FAIL("expected connect to fail");
as = paccept(srvr, NULL, NULL, NULL, pacceptblock ? 0 : SOCK_NONBLOCK);
ok = connect(clnt, (struct sockaddr *) &ba, addrlen);
if (ok == -1 && errno != EISCONN)
- FAIL("both connects failed");
+ FAIL("connect failed");
#if 0
fl = fcntl(srvr, F_GETFL, 0);
diff --git a/contrib/netbsd-tests/net/net_common.sh b/contrib/netbsd-tests/net/net_common.sh
new file mode 100755
index 0000000..df21a88
--- /dev/null
+++ b/contrib/netbsd-tests/net/net_common.sh
@@ -0,0 +1,314 @@
+# $NetBSD: net_common.sh,v 1.11 2017/01/10 05:55:34 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+#
+# Common utility functions for tests/net
+#
+
+HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=sysctl=yes"
+
+extract_new_packets()
+{
+ local bus=$1
+ local old=./.__old
+
+ if [ ! -f $old ]; then
+ old=/dev/null
+ fi
+
+ shmif_dumpbus -p - $bus 2>/dev/null| \
+ tcpdump -n -e -r - 2>/dev/null > ./.__new
+ diff -u $old ./.__new |grep '^+' |cut -d '+' -f 2 > ./.__diff
+ mv -f ./.__new ./.__old
+ cat ./.__diff
+}
+
+check_route()
+{
+ local target=$1
+ local gw=$2
+ local flags=${3:-\.\+}
+ local ifname=${4:-\.\+}
+
+ target=$(echo $target |sed 's/\./\\./g')
+ if [ "$gw" = "" ]; then
+ gw=".+"
+ else
+ gw=$(echo $gw |sed 's/\./\\./g')
+ fi
+
+ atf_check -s exit:0 -e ignore \
+ -o match:"^$target +$gw +$flags +- +- +.+ +$ifname" \
+ rump.netstat -rn
+}
+
+check_route_flags()
+{
+
+ check_route "$1" "" "$2" ""
+}
+
+check_route_gw()
+{
+
+ check_route "$1" "$2" "" ""
+}
+
+check_route_no_entry()
+{
+ local target=$(echo $1 |sed 's/\./\\./g')
+
+ atf_check -s exit:0 -e ignore -o not-match:"^$target" \
+ rump.netstat -rn
+}
+
+get_linklocal_addr()
+{
+
+ export RUMP_SERVER=${1}
+ rump.ifconfig ${2} inet6 |
+ awk "/fe80/ {sub(/%$2/, \"\"); sub(/\\/[0-9]*/, \"\"); print \$2;}"
+ unset RUMP_SERVER
+
+ return 0
+}
+
+get_macaddr()
+{
+
+ env RUMP_SERVER=${1} \
+ rump.ifconfig ${2} |awk '/address/ {print $2;}'
+}
+
+HTTPD_PID=./.__httpd.pid
+start_httpd()
+{
+ local sock=$1
+ local ip=$2
+ local backup=$RUMP_SERVER
+
+ export RUMP_SERVER=$sock
+
+ # start httpd in daemon mode
+ atf_check -s exit:0 env LD_PRELOAD=/usr/lib/librumphijack.so \
+ /usr/libexec/httpd -P $HTTPD_PID -i $ip -b -s $(pwd)
+
+ export RUMP_SERVER=$backup
+
+ sleep 3
+}
+
+stop_httpd()
+{
+
+ if [ -f $HTTPD_PID ]; then
+ kill -9 $(cat $HTTPD_PID)
+ rm -f $HTTPD_PID
+ sleep 1
+ fi
+}
+
+BASIC_LIBS="-lrumpnet -lrumpnet_net -lrumpnet_netinet \
+ -lrumpnet_shmif -lrumpdev"
+FS_LIBS="$BASIC_LIBS -lrumpvfs -lrumpfs_ffs"
+
+# We cannot keep variables between test phases, so need to store in files
+_rump_server_socks=./.__socks
+_rump_server_ifaces=./.__ifaces
+_rump_server_buses=./.__buses
+
+_rump_server_start_common()
+{
+ local sock=$1
+ local libs=
+
+ shift 1
+ libs="$*"
+
+ atf_check -s exit:0 rump_server $libs $sock
+
+ echo $sock >> $_rump_server_socks
+ $DEBUG && cat $_rump_server_socks
+}
+
+rump_server_start()
+{
+ local sock=$1
+ local _libs=
+ local libs="$BASIC_LIBS"
+
+ shift 1
+ _libs="$*"
+
+ for lib in $_libs; do
+ libs="$libs -lrumpnet_$lib"
+ done
+
+ _rump_server_start_common $sock $libs
+
+ return 0
+}
+
+rump_server_fs_start()
+{
+ local sock=$1
+ local _libs=
+ local libs="$FS_LIBS"
+
+ shift 1
+ _libs="$*"
+
+ for lib in $_libs; do
+ libs="$libs -lrumpnet_$lib"
+ done
+
+ _rump_server_start_common $sock $libs
+
+ return 0
+}
+
+rump_server_add_iface()
+{
+ local sock=$1
+ local ifname=$2
+ local bus=$3
+ local backup=$RUMP_SERVER
+
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 rump.ifconfig $ifname create
+ atf_check -s exit:0 rump.ifconfig $ifname linkstr $bus
+ export RUMP_SERVER=$backup
+
+ echo $sock $ifname >> $_rump_server_ifaces
+ $DEBUG && cat $_rump_server_ifaces
+
+ echo $bus >> $_rump_server_buses
+ cat $_rump_server_buses |sort -u >./.__tmp
+ mv -f ./.__tmp $_rump_server_buses
+ $DEBUG && cat $_rump_server_buses
+
+ return 0
+}
+
+rump_server_destroy_ifaces()
+{
+ local backup=$RUMP_SERVER
+
+ $DEBUG && cat $_rump_server_ifaces
+
+ # Try to dump states before destroying interfaces
+ for sock in $(cat $_rump_server_socks); do
+ export RUMP_SERVER=$sock
+ atf_check -s exit:0 -o ignore rump.ifconfig
+ atf_check -s exit:0 -o ignore rump.netstat -nr
+ # XXX still need hijacking
+ atf_check -s exit:0 -o ignore $HIJACKING rump.netstat -i -a
+ atf_check -s exit:0 -o ignore rump.arp -na
+ atf_check -s exit:0 -o ignore rump.ndp -na
+ atf_check -s exit:0 -o ignore $HIJACKING ifmcstat
+ done
+
+ # XXX using pipe doesn't work. See PR bin/51667
+ #cat $_rump_server_ifaces | while read sock ifname; do
+ while read sock ifname; do
+ export RUMP_SERVER=$sock
+ if rump.ifconfig -l |grep -q $ifname; then
+ atf_check -s exit:0 rump.ifconfig $ifname destroy
+ fi
+ atf_check -s exit:0 -o ignore rump.ifconfig
+ done < $_rump_server_ifaces
+ export RUMP_SERVER=$backup
+
+ return 0
+}
+
+rump_server_halt_servers()
+{
+ local backup=$RUMP_SERVER
+
+ $DEBUG && cat $_rump_server_socks
+ for sock in $(cat $_rump_server_socks); do
+ env RUMP_SERVER=$sock rump.halt
+ done
+ export RUMP_SERVER=$backup
+
+ return 0
+}
+
+rump_server_dump_servers()
+{
+ local backup=$RUMP_SERVER
+
+ $DEBUG && cat $_rump_server_socks
+ for sock in $(cat $_rump_server_socks); do
+ echo "### Dumping $sock"
+ export RUMP_SERVER=$sock
+ rump.ifconfig
+ rump.netstat -nr
+ # XXX still need hijacking
+ $HIJACKING rump.netstat -i -a
+ rump.arp -na
+ rump.ndp -na
+ $HIJACKING ifmcstat
+ $HIJACKING dmesg
+ done
+ export RUMP_SERVER=$backup
+
+ if [ -f rump_server.core ]; then
+ gdb -ex bt /usr/bin/rump_server rump_server.core
+ strings rump_server.core |grep panic
+ fi
+ return 0
+}
+
+rump_server_dump_buses()
+{
+
+ if [ ! -f $_rump_server_buses ]; then
+ return 0
+ fi
+
+ $DEBUG && cat $_rump_server_buses
+ for bus in $(cat $_rump_server_buses); do
+ echo "### Dumping $bus"
+ shmif_dumpbus -p - $bus 2>/dev/null| tcpdump -n -e -r -
+ done
+ return 0
+}
+
+cleanup()
+{
+
+ rump_server_halt_servers
+}
+
+dump()
+{
+
+ rump_server_dump_servers
+ rump_server_dump_buses
+}
diff --git a/contrib/netbsd-tests/net/route/t_change.sh b/contrib/netbsd-tests/net/route/t_change.sh
index 3618aee..260cad0 100755
--- a/contrib/netbsd-tests/net/route/t_change.sh
+++ b/contrib/netbsd-tests/net/route/t_change.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_change.sh,v 1.4 2013/02/19 21:08:25 joerg Exp $
+# $NetBSD: t_change.sh,v 1.9 2016/11/07 05:25:37 ozaki-r Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -26,18 +26,21 @@
#
netserver=\
-"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet"
+"rump_server -lrumpdev -lrumpnet -lrumpnet_net \
+ -lrumpnet_netinet -lrumpnet_shmif"
export RUMP_SERVER=unix://commsock
-atf_test_case reject2blackhole cleanup
-reject2blackhole_head()
+DEBUG=${DEBUG:-false}
+
+atf_test_case route_change_reject2blackhole cleanup
+route_change_reject2blackhole_head()
{
atf_set "descr" "Change a reject route to blackhole"
atf_set "require.progs" "rump_server"
}
-reject2blackhole_body()
+route_change_reject2blackhole_body()
{
atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
@@ -49,10 +52,242 @@ reject2blackhole_body()
atf_check -s exit:0 -o ignore \
rump.route change 207.46.197.32 127.0.0.1 -blackhole
atf_check -s exit:0 -o match:' UGHBS ' -e ignore -x \
- "rump.netstat -rn -f inet | grep ^207.46| grep ^207.46"
+ "rump.netstat -rn -f inet | grep ^207.46"
+}
+
+route_change_reject2blackhole_cleanup()
+{
+
+ env RUMP_SERVER=unix://commsock rump.halt
+}
+
+atf_test_case route_change_gateway cleanup
+route_change_gateway_head()
+{
+
+ atf_set "descr" "Change the gateway of a route"
+ atf_set "require.progs" "rump_server"
+}
+
+route_change_gateway_body()
+{
+
+ atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 192.168.0.0/24 10.0.0.1
+ atf_check -s exit:0 -o match:'10.0.0.1' -x \
+ "rump.route -n show -inet | grep ^192.168"
+ atf_check -s exit:0 -o ignore \
+ rump.route change -net 192.168.0.0/24 10.0.0.254
+ atf_check -s exit:0 -o match:'10.0.0.254' -x \
+ "rump.route -n show -inet | grep ^192.168"
+}
+
+route_change_gateway_cleanup()
+{
+
+ env RUMP_SERVER=unix://commsock rump.halt
+}
+
+atf_test_case route_change_ifa cleanup
+route_change_ifa_head()
+{
+
+ atf_set "descr" "Change the ifa (local address) of a route"
+ atf_set "require.progs" "rump_server"
+}
+
+route_change_ifa_body()
+{
+
+ atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24
+ atf_check -s exit:0 rump.ifconfig shmif0 alias 10.0.0.11/24
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 192.168.0.0/24 10.0.0.1
+ atf_check -s exit:0 -o match:'10.0.0.1' -x \
+ "rump.route -n show -inet | grep ^192.168"
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.10
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Change the local address of the route
+ atf_check -s exit:0 -o ignore \
+ rump.route change -net 192.168.0.0/24 10.0.0.1 -ifa 10.0.0.11
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.11
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+}
+
+route_change_ifa_cleanup()
+{
+
+ env RUMP_SERVER=unix://commsock rump.halt
+}
+
+atf_test_case route_change_ifp cleanup
+route_change_ifp_head()
+{
+
+ atf_set "descr" "Change a route based on an interface (ifp)"
+ atf_set "require.progs" "rump_server"
+}
+
+route_change_ifp_body()
+{
+
+ atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
+
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 up
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 192.168.0.0/24 10.0.0.1
+ atf_check -s exit:0 -o match:'10.0.0.1' -x \
+ "rump.route -n show -inet | grep ^192.168"
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.10
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Change a route based on an interface
+ atf_check -s exit:0 -o ignore \
+ rump.route change -net 192.168.0.0/24 10.0.0.1 -ifp shmif1
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.11
+ interface: shmif1
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+}
+
+route_change_ifp_cleanup()
+{
+
+ env RUMP_SERVER=unix://commsock rump.halt
+}
+
+atf_test_case route_change_ifp_ifa cleanup
+route_change_ifp_head()
+{
+
+ atf_set "descr" "Change a route with -ifp and -ifa"
+ atf_set "require.progs" "rump_server"
+}
+
+route_change_ifp_ifa_body()
+{
+
+ atf_check -s exit:0 ${netserver} ${RUMP_SERVER}
+
+ atf_check -s exit:0 rump.ifconfig shmif0 create
+ atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.10/24 up
+
+ atf_check -s exit:0 rump.ifconfig shmif1 create
+ atf_check -s exit:0 rump.ifconfig shmif1 linkstr bus
+ atf_check -s exit:0 rump.ifconfig shmif1 10.0.0.11/24 up
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 192.168.0.0/24 10.0.0.1
+ atf_check -s exit:0 -o match:'10.0.0.1' -x \
+ "rump.route -n show -inet | grep ^192.168"
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.10
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Change a route with -ifa and -ifp
+ atf_check -s exit:0 -o ignore \
+ rump.route change -net 192.168.0.0/24 -ifa 10.0.0.1 -ifp shmif1
+ $DEBUG && rump.route -n show -inet
+ cat >./expect <<-EOF
+ route to: 192.168.0.1
+destination: 192.168.0.0
+ mask: 255.255.255.0
+ gateway: 10.0.0.1
+ local addr: 10.0.0.11
+ interface: shmif1
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get 192.168.0.1 > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
}
-reject2blackhole_cleanup()
+route_change_ifp_ifa_cleanup()
{
env RUMP_SERVER=unix://commsock rump.halt
@@ -61,5 +296,9 @@ reject2blackhole_cleanup()
atf_init_test_cases()
{
- atf_add_test_case reject2blackhole
+ atf_add_test_case route_change_reject2blackhole
+ atf_add_test_case route_change_gateway
+ atf_add_test_case route_change_ifa
+ atf_add_test_case route_change_ifp
+ atf_add_test_case route_change_ifp_ifa
}
diff --git a/contrib/netbsd-tests/net/route/t_flags.sh b/contrib/netbsd-tests/net/route/t_flags.sh
new file mode 100755
index 0000000..457e3f5
--- /dev/null
+++ b/contrib/netbsd-tests/net/route/t_flags.sh
@@ -0,0 +1,334 @@
+# $NetBSD: t_flags.sh,v 1.15 2016/12/21 02:46:08 ozaki-r Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+SOCK_PEER=unix://commsock2
+SOCK_GW=unix://commsock3
+BUS=bus1
+BUS2=bus2
+
+DEBUG=${DEBUG:-false}
+
+setup_local()
+{
+
+ rump_server_start $SOCK_LOCAL
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.2/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+setup_peer()
+{
+
+ rump_server_start $SOCK_PEER
+ rump_server_add_iface $SOCK_PEER shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+setup_gw()
+{
+
+ rump_server_start $SOCK_GW
+ rump_server_add_iface $SOCK_GW shmif0 $BUS
+ rump_server_add_iface $SOCK_GW shmif1 $BUS2
+
+ export RUMP_SERVER=$SOCK_GW
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 10.0.0.254/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 10.0.2.1/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 alias 10.0.2.2/24
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif1 up
+
+ # Wait until DAD completes (10 sec at most)
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+ atf_check -s not-exit:0 -x "rump.ifconfig shmif1 |grep -q tentative"
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet
+}
+
+test_lo()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Up, Host, local
+ check_route_flags 127.0.0.1 UHl
+}
+
+test_connected()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Up, Host, LLINFO, local
+ check_route_flags 10.0.0.2 UHl
+
+ # Up, Cloning
+ check_route_flags 10.0.0/24 UC
+}
+
+test_default_gateway()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Static
+ check_route_flags default UGS
+}
+
+test_static()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Static route to host
+ atf_check -s exit:0 -o ignore rump.route add 10.0.1.1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Static
+ check_route_flags 10.0.1.1 UGHS
+
+ # Static route to network
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Static
+ check_route_flags 10.0.2/24 UGS
+}
+
+test_blackhole()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.0.1
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ # Gateway must be lo0
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 10.0.0.0/24 127.0.0.1 -blackhole
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Blackhole, Static
+ check_route_flags 10.0.0/24 UGBS
+
+ atf_check -s not-exit:0 -o match:'100.0% packet loss' \
+ rump.ping -n -w 1 -c 1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Shouldn't be created
+ check_route_no_entry 10.0.0.1
+}
+
+test_reject()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -reject
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Reject, Static
+ check_route_flags 10.0.0/24 UGRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
+ rump.ping -n -w 1 -c 1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Shouldn't be created
+ check_route_no_entry 10.0.0.1
+
+ # Gateway is lo0 (RTF_GATEWAY)
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -net 10.0.0.0/24 127.0.0.1 -reject
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Reject, Static
+ check_route_flags 10.0.0/24 UGRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \
+ rump.ping -n -w 1 -c 1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Shouldn't be created
+ check_route_no_entry 10.0.0.1
+
+ # Gateway is lo0 (RTF_HOST)
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -host 10.0.0.1/24 127.0.0.1 -iface -reject
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Host, Reject, Static
+ check_route_flags 10.0.0.1 UHRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
+ rump.ping -n -w 1 -c 1 10.0.0.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ return 0
+}
+
+test_icmp_redirect()
+{
+
+ ### Testing Dynamic flag ###
+
+ #
+ # Setup a gateway 10.0.0.254. 10.0.2.1 is behind it.
+ #
+ setup_gw
+
+ #
+ # Teach the peer that 10.0.2.* is behind 10.0.0.254
+ #
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.2.0/24 10.0.0.254
+ # Up, Gateway, Static
+ check_route_flags 10.0.2/24 UGS
+
+ #
+ # Setup the default gateway to the peer, 10.0.0.1
+ #
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route add default 10.0.0.1
+ # Up, Gateway, Static
+ check_route_flags default UGS
+
+ # Try ping 10.0.2.1
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.1
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Dynamic
+ check_route_flags 10.0.2.1 UGHD
+ check_route_gw 10.0.2.1 10.0.0.254
+
+ export RUMP_SERVER=$SOCK_PEER
+ $DEBUG && rump.netstat -rn -f inet
+
+ ### Testing Modified flag ###
+
+ #
+ # Teach a wrong route to 10.0.2.2
+ #
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.route add 10.0.2.2 10.0.0.1
+ # Up, Gateway, Host, Static
+ check_route_flags 10.0.2.2 UGHS
+ check_route_gw 10.0.2.2 10.0.0.1
+
+ # Try ping 10.0.2.2
+ atf_check -s exit:0 -o ignore rump.ping -n -w 1 -c 1 10.0.2.2
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Host, Modified, Static
+ check_route_flags 10.0.2.2 UGHMS
+ check_route_gw 10.0.2.2 10.0.0.254
+}
+
+test_announce()
+{
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore rump.route delete -net 10.0.0.0/24
+
+ atf_check -s exit:0 -o ignore rump.route add -net 10.0.0.0/24 10.0.0.1 -proxy
+ $DEBUG && rump.netstat -rn -f inet
+
+ # Up, Gateway, Static, proxy
+ check_route_flags 10.0.0/24 UGSp
+
+ # TODO test its behavior
+}
+
+add_test()
+{
+ local name=$1
+ local desc="$2"
+
+ atf_test_case "route_flags_${name}" cleanup
+ eval "route_flags_${name}_head() { \
+ atf_set \"descr\" \"${desc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ route_flags_${name}_body() { \
+ setup_local; \
+ setup_peer; \
+ test_${name}; \
+ rump_server_destroy_ifaces; \
+ }; \
+ route_flags_${name}_cleanup() { \
+ $DEBUG && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case "route_flags_${name}"
+}
+
+atf_init_test_cases()
+{
+
+ add_test lo "Tests route flags: loop back interface"
+ add_test connected "Tests route flags: connected route"
+ add_test default_gateway "Tests route flags: default gateway"
+ add_test static "Tests route flags: static route"
+ add_test blackhole "Tests route flags: blackhole route"
+ add_test reject "Tests route flags: reject route"
+ add_test icmp_redirect "Tests route flags: icmp redirect"
+ add_test announce "Tests route flags: announce flag"
+}
diff --git a/contrib/netbsd-tests/net/route/t_flags6.sh b/contrib/netbsd-tests/net/route/t_flags6.sh
new file mode 100755
index 0000000..e570829
--- /dev/null
+++ b/contrib/netbsd-tests/net/route/t_flags6.sh
@@ -0,0 +1,268 @@
+# $NetBSD: t_flags6.sh,v 1.12 2016/12/21 02:46:08 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+SOCK_LOCAL=unix://commsock1
+SOCK_PEER=unix://commsock2
+SOCK_GW=unix://commsock3
+BUS=bus1
+BUS2=bus2
+
+IP6_LOCAL=fc00::2
+IP6_PEER=fc00::1
+
+DEBUG=${DEBUG:-false}
+
+setup_local()
+{
+
+ rump_server_start $SOCK_LOCAL netinet6
+ rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_LOCAL
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_LOCAL
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+}
+
+setup_peer()
+{
+
+ rump_server_start $SOCK_PEER netinet6
+ rump_server_add_iface $SOCK_PEER shmif0 $BUS
+
+ export RUMP_SERVER=$SOCK_PEER
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 $IP6_PEER
+ atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up
+ atf_check -s exit:0 -o ignore rump.ifconfig -w 10
+
+ $DEBUG && rump.ifconfig
+ $DEBUG && rump.netstat -rn -f inet6
+}
+
+test_lo6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Up, Host, local
+ check_route_flags fe80::1 UHl
+
+ # Up, Host, local
+ check_route_flags ::1 UHl
+}
+
+test_connected6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Up, Host, local
+ check_route_flags $IP6_LOCAL UHl
+
+ # Up, Connected
+ check_route_flags fc00::/64 UC
+}
+
+test_default_gateway6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Static
+ check_route_flags default UGS
+}
+
+test_static6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Static route to host
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 fc00::1:1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Host, Static
+ check_route_flags fc00::1:1 UGHS
+
+ # Static route to network
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/24 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Static
+ check_route_flags fc00::/24 UGS
+}
+
+test_blackhole6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ atf_check -s exit:0 -o ignore rump.ping6 -n -X 1 -c 1 $IP6_PEER
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ # Gateway must be lo0
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/64 ::1 -blackhole
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Blackhole, Static
+ check_route_flags fc00::/64 UGBS
+
+ atf_check -s not-exit:0 -o match:'100.0% packet loss' \
+ rump.ping6 -n -X 1 -c 1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Shouldn't be created
+ check_route_no_entry $IP6_PEER
+}
+
+test_reject6()
+{
+
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/64 $IP6_PEER -reject
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Reject, Static
+ check_route_flags fc00::/64 UGRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
+ rump.ping6 -n -X 1 -c 1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Shouldn't be created
+ check_route_no_entry $IP6_PEER
+
+ # Gateway is lo0 (RTF_GATEWAY)
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/64 ::1 -reject
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Reject, Static
+ check_route_flags fc00::/64 UGRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'Network is unreachable' \
+ rump.ping6 -n -X 1 -c 1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Shouldn't be created
+ check_route_no_entry $IP6_PEER
+
+ # Gateway is lo0 (RTF_HOST)
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -host fc00::/64 ::1 -iface -reject
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Host, Reject, Static
+ check_route_flags fc00:: UHRS
+
+ atf_check -s not-exit:0 -o ignore -e match:'No route to host' \
+ rump.ping6 -n -X 1 -c 1 $IP6_PEER
+ $DEBUG && rump.netstat -rn -f inet6
+
+ return 0
+}
+
+test_announce6()
+{
+ export RUMP_SERVER=$SOCK_LOCAL
+
+ # Delete an existing route first
+ atf_check -s exit:0 -o ignore \
+ rump.route delete -inet6 -net fc00::/64
+
+ atf_check -s exit:0 -o ignore \
+ rump.route add -inet6 -net fc00::/64 $IP6_PEER -proxy
+ $DEBUG && rump.netstat -rn -f inet6
+
+ # Up, Gateway, Static, proxy
+ check_route_flags fc00::/64 UGSp
+
+ # TODO test its behavior
+}
+
+add_test()
+{
+ local name=$1
+ local desc="$2"
+
+ atf_test_case "route_flags_${name}" cleanup
+ eval "route_flags_${name}_head() { \
+ atf_set \"descr\" \"${desc}\"; \
+ atf_set \"require.progs\" \"rump_server\"; \
+ }; \
+ route_flags_${name}_body() { \
+ setup_local; \
+ setup_peer; \
+ test_${name}; \
+ rump_server_destroy_ifaces; \
+ }; \
+ route_flags_${name}_cleanup() { \
+ $DEBUG && dump; \
+ cleanup; \
+ }"
+ atf_add_test_case "route_flags_${name}"
+}
+
+atf_init_test_cases()
+{
+
+ add_test lo6 "Tests route flags: loop back interface"
+ add_test connected6 "Tests route flags: connected route"
+ add_test default_gateway6 "Tests route flags: default gateway"
+ add_test static6 "Tests route flags: static route"
+ add_test blackhole6 "Tests route flags: blackhole route"
+ add_test reject6 "Tests route flags: reject route"
+ add_test announce6 "Tests route flags: announce flag"
+}
diff --git a/contrib/netbsd-tests/net/route/t_route.sh b/contrib/netbsd-tests/net/route/t_route.sh
new file mode 100755
index 0000000..053f48f
--- /dev/null
+++ b/contrib/netbsd-tests/net/route/t_route.sh
@@ -0,0 +1,406 @@
+# $NetBSD: t_route.sh,v 1.10 2016/12/21 02:46:08 ozaki-r Exp $
+#
+# Copyright (c) 2016 Internet Initiative Japan Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# non_subnet_gateway
+SOCK_CLIENT=unix://commsock1
+SOCK_GW=unix://commsock2
+BUS=bus1
+
+# command_get
+SOCKSRC=unix://commsock1
+SOCKFWD=unix://commsock2
+SOCKDST=unix://commsock3
+IP4SRC=10.0.1.2
+IP4SRCGW=10.0.1.1
+IP4DSTGW=10.0.2.1
+IP4DST=10.0.2.2
+IP4DST_BCAST=10.0.2.255
+IP6SRC=fc00:0:0:1::2
+IP6SRCGW=fc00:0:0:1::1
+IP6DSTGW=fc00:0:0:2::1
+IP6DST=fc00:0:0:2::2
+BUS_SRCGW=bus1
+BUS_DSTGW=bus2
+
+DEBUG=${DEBUG:-false}
+TIMEOUT=1
+PING_OPTS="-n -c 1 -w $TIMEOUT"
+
+atf_test_case route_non_subnet_gateway cleanup
+route_non_subnet_gateway_head()
+{
+
+ atf_set "descr" "tests of a gateway not on the local subnet"
+ atf_set "require.progs" "rump_server"
+}
+
+route_non_subnet_gateway_body()
+{
+
+ rump_server_start $SOCK_CLIENT
+ rump_server_start $SOCK_GW
+
+ export RUMP_SERVER=${SOCK_GW}
+ rump_server_add_iface $SOCK_GW shmif0 $BUS
+ atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+
+ # The gateway knows the client
+ atf_check -s exit:0 -o match:'add net 10.0.0.1: gateway shmif0' \
+ rump.route add -net 10.0.0.1/32 -link -cloning -iface shmif0
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ export RUMP_SERVER=${SOCK_CLIENT}
+ rump_server_add_iface $SOCK_CLIENT shmif0 $BUS
+ atf_check -s exit:0 rump.ifconfig shmif0 10.0.0.1/32
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ # Don't know a route to the gateway yet
+ atf_check -s not-exit:0 -o match:'100.0% packet loss' \
+ -e match:'No route to host' rump.ping $PING_OPTS 192.168.0.1
+
+ # Teach a route to the gateway
+ atf_check -s exit:0 -o match:'add net 192.168.0.1: gateway shmif0' \
+ rump.route add -net 192.168.0.1/32 -link -cloning -iface shmif0
+ atf_check -s exit:0 -o match:'add net default: gateway 192.168.0.1' \
+ rump.route add default -ifa 10.0.0.1 192.168.0.1
+
+ $DEBUG && rump.netstat -nr -f inet
+
+ # Be reachable to the gateway
+ atf_check -s exit:0 -o ignore rump.ping $PING_OPTS 192.168.0.1
+
+ rump_server_destroy_ifaces
+}
+
+route_non_subnet_gateway_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_test_case route_command_get cleanup
+atf_test_case route_command_get6 cleanup
+route_command_get_head()
+{
+
+ atf_set "descr" "tests of route get command"
+ atf_set "require.progs" "rump_server"
+}
+
+route_command_get6_head()
+{
+
+ atf_set "descr" "tests of route get command (IPv6)"
+ atf_set "require.progs" "rump_server"
+}
+
+setup_endpoint()
+{
+ local sock=${1}
+ local addr=${2}
+ local bus=${3}
+ local mode=${4}
+ local gw=${5}
+
+ export RUMP_SERVER=${sock}
+ rump_server_add_iface $sock shmif0 $bus
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${addr}
+ atf_check -s exit:0 -o ignore rump.route add -inet6 default ${gw}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${addr} netmask 0xffffff00
+ atf_check -s exit:0 -o ignore rump.route add default ${gw}
+ fi
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ if $DEBUG; then
+ rump.ifconfig shmif0
+ rump.netstat -nr
+ fi
+}
+
+setup_forwarder()
+{
+ mode=${1}
+
+ rump_server_add_iface $SOCKFWD shmif0 $BUS_SRCGW
+ rump_server_add_iface $SOCKFWD shmif1 $BUS_DSTGW
+
+ export RUMP_SERVER=$SOCKFWD
+ if [ $mode = "ipv6" ]; then
+ atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6SRCGW}
+ atf_check -s exit:0 rump.ifconfig shmif1 inet6 ${IP6DSTGW}
+ else
+ atf_check -s exit:0 rump.ifconfig shmif0 inet ${IP4SRCGW} netmask 0xffffff00
+ atf_check -s exit:0 rump.ifconfig shmif1 inet ${IP4DSTGW} netmask 0xffffff00
+ fi
+
+ atf_check -s exit:0 rump.ifconfig shmif0 up
+ atf_check -s exit:0 rump.ifconfig shmif1 up
+ atf_check -s exit:0 rump.ifconfig -w 10
+
+ if $DEBUG; then
+ rump.netstat -nr
+ if [ $mode = "ipv6" ]; then
+ rump.sysctl net.inet6.ip6.forwarding
+ else
+ rump.sysctl net.inet.ip.forwarding
+ fi
+ fi
+}
+
+setup_forwarding()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet.ip.forwarding=1
+}
+
+setup_forwarding6()
+{
+ export RUMP_SERVER=$SOCKFWD
+ atf_check -s exit:0 -o ignore rump.sysctl -w net.inet6.ip6.forwarding=1
+}
+
+setup()
+{
+
+ rump_server_start $SOCKSRC
+ rump_server_start $SOCKFWD
+ rump_server_start $SOCKDST
+
+ setup_endpoint $SOCKSRC $IP4SRC $BUS_SRCGW ipv4 $IP4SRCGW
+ setup_endpoint $SOCKDST $IP4DST $BUS_DSTGW ipv4 $IP4DSTGW
+ setup_forwarder ipv4
+}
+
+setup6()
+{
+
+ rump_server_start $SOCKSRC netinet6
+ rump_server_start $SOCKFWD netinet6
+ rump_server_start $SOCKDST netinet6
+
+ setup_endpoint $SOCKSRC $IP6SRC $BUS_SRCGW ipv6 $IP6SRCGW
+ setup_endpoint $SOCKDST $IP6DST $BUS_DSTGW ipv6 $IP6DSTGW
+ setup_forwarder ipv6
+}
+
+test_route_get()
+{
+
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.netstat -nr -f inet
+ $DEBUG && rump.arp -n -a
+
+ # Make sure an ARP cache to the gateway doesn't exist
+ rump.arp -d $IP4SRCGW
+
+ # Local
+ cat >./expect <<-EOF
+ route to: 10.0.1.2
+destination: 10.0.1.2
+ local addr: 10.0.1.2
+ interface: lo0
+ flags: <UP,HOST,DONE,LLINFO,LOCAL>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get $IP4SRC > ./output
+ $DEBUG && cat ./expect ./output
+ # XXX: omit the last line because expire is unstable on rump kernel.
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Neighbor
+ cat >./expect <<-EOF
+ route to: 10.0.1.1
+destination: 10.0.1.0
+ mask: 255.255.255.0
+ local addr: 10.0.1.2
+ interface: shmif0
+ flags: <UP,DONE,CONNECTED>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get $IP4SRCGW > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Remote host
+ cat >./expect <<-EOF
+ route to: 10.0.2.2
+destination: default
+ mask: default
+ gateway: 10.0.1.1
+ local addr: 10.0.1.2
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get $IP4DST > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Create a ARP cache
+ atf_check -s exit:0 -o ignore rump.ping -q -n -w $TIMEOUT -c 1 $IP4SRCGW
+
+ # Neighbor with a cache (no different from w/o cache)
+ cat >./expect <<-EOF
+ route to: 10.0.1.1
+destination: 10.0.1.0
+ mask: 255.255.255.0
+ local addr: 10.0.1.2
+ interface: shmif0
+ flags: <UP,DONE,CONNECTED>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get $IP4SRCGW > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+}
+
+test_route_get6()
+{
+
+ export RUMP_SERVER=$SOCKSRC
+ $DEBUG && rump.netstat -nr -f inet
+ $DEBUG && rump.ndp -n -a
+
+ # Make sure an ARP cache to the gateway doesn't exist
+ rump.ndp -d $IP6SRCGW
+
+ # Local
+ cat >./expect <<-EOF
+ route to: fc00:0:0:1::2
+destination: fc00:0:0:1::2
+ local addr: fc00:0:0:1::2
+ interface: lo0
+ flags: <UP,HOST,DONE,LLINFO,LOCAL>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get -inet6 $IP6SRC > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Neighbor
+ cat >./expect <<-EOF
+ route to: fc00:0:0:1::1
+destination: fc00:0:0:1::
+ mask: ffff:ffff:ffff:ffff::
+ local addr: fc00:0:0:1::2
+ interface: shmif0
+ flags: <UP,DONE,CONNECTED>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get -inet6 $IP6SRCGW > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Remote host
+ cat >./expect <<-EOF
+ route to: fc00:0:0:2::2
+destination: ::
+ mask: default
+ gateway: fc00:0:0:1::1
+ local addr: fc00:0:0:1::2
+ interface: shmif0
+ flags: <UP,GATEWAY,DONE,STATIC>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get -inet6 $IP6DST > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+
+ # Create a NDP cache
+ atf_check -s exit:0 -o ignore rump.ping6 -n -c 1 -X $TIMEOUT $IP6SRCGW
+
+ # Neighbor with a cache (no different from w/o cache)
+ cat >./expect <<-EOF
+ route to: fc00:0:0:1::1
+destination: fc00:0:0:1::
+ mask: ffff:ffff:ffff:ffff::
+ local addr: fc00:0:0:1::2
+ interface: shmif0
+ flags: <UP,DONE,CONNECTED>
+ recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
+ EOF
+ rump.route -n get -inet6 $IP6SRCGW > ./output
+ $DEBUG && cat ./expect ./output
+ sed -i '$d' ./output
+ atf_check -s exit:0 diff ./expect ./output
+}
+
+route_command_get_body()
+{
+
+ setup
+ setup_forwarding
+ test_route_get
+ rump_server_destroy_ifaces
+}
+
+route_command_get6_body()
+{
+
+ setup6
+ setup_forwarding6
+ test_route_get6
+ rump_server_destroy_ifaces
+}
+
+route_command_get_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+route_command_get6_cleanup()
+{
+
+ $DEBUG && dump
+ cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case route_non_subnet_gateway
+ atf_add_test_case route_command_get
+ atf_add_test_case route_command_get6
+}
diff --git a/contrib/netbsd-tests/rump/modautoload/t_modautoload.c b/contrib/netbsd-tests/rump/modautoload/t_modautoload.c
index f28ad55..2c21a90 100644
--- a/contrib/netbsd-tests/rump/modautoload/t_modautoload.c
+++ b/contrib/netbsd-tests/rump/modautoload/t_modautoload.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_modautoload.c,v 1.2 2014/03/10 22:38:53 pooka Exp $ */
+/* $NetBSD: t_modautoload.c,v 1.5 2016/09/14 03:19:11 ozaki-r Exp $ */
#include <sys/types.h>
#include <sys/mount.h>
@@ -33,6 +33,9 @@ ATF_TC_HEAD(modautoload, tc)
static void
mountkernfs(void)
{
+ bool old_autoload, new_autoload;
+ size_t old_len, new_len;
+ int error;
if (!rump_nativeabi_p())
atf_tc_skip("host kernel modules not supported");
@@ -41,6 +44,16 @@ mountkernfs(void)
if (rump_sys_mkdir("/kern", 0777) == -1)
atf_tc_fail_errno("mkdir /kern");
+
+ new_autoload = true;
+ old_len = sizeof(old_autoload);
+ new_len = sizeof(new_autoload);
+ error = sysctlbyname("kern.module.autoload",
+ &old_autoload, &old_len,
+ &new_autoload, new_len);
+ if (error != 0)
+ atf_tc_fail_errno("could not enable module autoload");
+
if (rump_sys_mount(MOUNT_KERNFS, "/kern", 0, NULL, 0) == -1)
atf_tc_fail_errno("could not mount kernfs");
}
diff --git a/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c b/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c
index 4e04c22..0ab3958 100644
--- a/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c
+++ b/contrib/netbsd-tests/rump/rumpkern/h_server/h_simpleserver.c
@@ -1,10 +1,11 @@
-/* $NetBSD: h_simpleserver.c,v 1.3 2011/01/14 13:23:15 pooka Exp $ */
+/* $NetBSD: h_simpleserver.c,v 1.4 2016/01/25 12:21:42 pooka Exp $ */
#include <sys/types.h>
#include <rump/rump.h>
#include <err.h>
+#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/contrib/netbsd-tests/rump/rumpkern/t_lwproc.c b/contrib/netbsd-tests/rump/rumpkern/t_lwproc.c
index dcdfdb6..6e78d02 100644
--- a/contrib/netbsd-tests/rump/rumpkern/t_lwproc.c
+++ b/contrib/netbsd-tests/rump/rumpkern/t_lwproc.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_lwproc.c,v 1.5 2011/01/02 12:58:17 pooka Exp $ */
+/* $NetBSD: t_lwproc.c,v 1.8 2017/01/10 22:36:29 christos Exp $ */
/*
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -29,6 +29,7 @@
#include <sys/types.h>
#include <sys/wait.h>
+#include <sys/stat.h>
#include <rump/rump.h>
#include <rump/rump_syscalls.h>
@@ -88,6 +89,7 @@ ATF_TC_BODY(proccreds, tc)
rump_init();
RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG));
l1 = rump_pub_lwproc_curlwp();
+ RZ(rump_pub_lwproc_newlwp(rump_sys_getpid()));
RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG));
l2 = rump_pub_lwproc_curlwp();
diff --git a/contrib/netbsd-tests/rump/rumpkern/t_sp.sh b/contrib/netbsd-tests/rump/rumpkern/t_sp.sh
index 9d11d2a..2c4404a 100755
--- a/contrib/netbsd-tests/rump/rumpkern/t_sp.sh
+++ b/contrib/netbsd-tests/rump/rumpkern/t_sp.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_sp.sh,v 1.12 2014/08/30 12:14:17 gson Exp $
+# $NetBSD: t_sp.sh,v 1.13 2016/08/10 23:47:14 kre Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -73,7 +73,8 @@ stress()
export RUMP_SERVER=unix://commsock
atf_check -s exit:0 rump_server \
- -lrumpvfs -lrumpnet -lrumpnet_net -lrumpnet_netinet ${RUMP_SERVER}
+ -lrumpvfs -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpdev \
+ ${RUMP_SERVER}
atf_check -s exit:0 -e ignore $(atf_get_srcdir)/h_client/h_stresscli $@
}
@@ -81,7 +82,7 @@ fork()
{
export RUMP_SERVER=unix://commsock
- atf_check -s exit:0 rump_server -lrumpvfs ${RUMP_SERVER}
+ atf_check -s exit:0 rump_server -lrumpvfs -lrumpdev ${RUMP_SERVER}
atf_check -s exit:0 $(atf_get_srcdir)/h_client/h_forkcli ${1}
}
diff --git a/contrib/netbsd-tests/rump/rumpnet/t_shmif.sh b/contrib/netbsd-tests/rump/rumpnet/t_shmif.sh
index dc463f2..4de8b4f 100755
--- a/contrib/netbsd-tests/rump/rumpnet/t_shmif.sh
+++ b/contrib/netbsd-tests/rump/rumpnet/t_shmif.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_shmif.sh,v 1.2 2013/09/09 19:27:49 pooka Exp $
+# $NetBSD: t_shmif.sh,v 1.3 2016/08/10 23:49:03 kre Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -39,7 +39,7 @@ startserver()
export RUMP_SERVER=unix://sock${1}
atf_check -s exit:0 rump_server -lrumpnet -lrumpnet_net \
- -lrumpnet_netinet -lrumpnet_shmif ${RUMP_SERVER}
+ -lrumpnet_netinet -lrumpnet_shmif -lrumpdev ${RUMP_SERVER}
atf_check -s exit:0 rump.ifconfig shmif0 create
atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus
atf_check -s exit:0 rump.ifconfig shmif0 inet 1.1.1.${1}
diff --git a/contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c b/contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c
index 735c607..c94e5e1 100644
--- a/contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c
+++ b/contrib/netbsd-tests/rump/rumpvfs/t_p2kifs.c
@@ -1,4 +1,4 @@
-/* $NetBSD: t_p2kifs.c,v 1.4 2014/02/07 15:29:23 hannken Exp $ */
+/* $NetBSD: t_p2kifs.c,v 1.5 2016/01/25 11:45:57 pooka Exp $ */
/*-
* Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -32,6 +32,7 @@
#include <sys/sysctl.h>
#include <rump/rump.h>
+#include <rump/rumpvnode_if.h>
#include <rump/rump_syscalls.h>
#include <atf-c.h>
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.label b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.label
new file mode 100644
index 0000000..dfb2b99
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.label
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - potato
+ 1058 9150 2 GPT part - tomato
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.normal
new file mode 100644
index 0000000..667c4d8
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.normal
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - EFI System
+ 1058 9150 2 GPT part - NetBSD FFSv1/FFSv2
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.uuid b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.uuid
new file mode 100644
index 0000000..77c41cc
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.2part.show.uuid
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - c12a7328-f81f-11d2-ba4b-00a0c93ec93b
+ 1058 9150 2 GPT part - 49f48d5a-b10e-11dc-b99b-0019d1879648
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.backup b/contrib/netbsd-tests/sbin/gpt/gpt.backup
new file mode 100644
index 0000000..8c57949
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.backup
@@ -0,0 +1,1851 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>GPT_HDR</key>
+ <dict>
+ <key>entries</key>
+ <integer>128</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>revision</key>
+ <integer>0x10000</integer>
+ </dict>
+ <key>GPT_TBL</key>
+ <dict>
+ <key>gpt_array</key>
+ <array>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x421</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>1</integer>
+ <key>start</key>
+ <integer>0x22</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x27df</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>2</integer>
+ <key>start</key>
+ <integer>0x422</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>3</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>4</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>5</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>6</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>7</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>8</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>9</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>10</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>11</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>12</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>13</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>14</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>15</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>16</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>17</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>18</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>19</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>20</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>21</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>22</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>23</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>24</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>25</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>26</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>27</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>28</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>29</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>30</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>31</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>32</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>33</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>34</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>35</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>36</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>37</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>38</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>39</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>40</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>41</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>42</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>43</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>44</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>45</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>46</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>47</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>48</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>49</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>50</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>51</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>52</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>53</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>54</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>55</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>56</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>57</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>58</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>59</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>60</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>61</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>62</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>63</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>64</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>65</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>66</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>67</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>68</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>69</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>70</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>71</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>72</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>73</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>74</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>75</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>76</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>77</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>78</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>79</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>80</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>81</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>82</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>83</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>84</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>85</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>86</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>87</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>88</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>89</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>90</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>91</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>92</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>93</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>94</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>95</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>96</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>97</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>98</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>99</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>100</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>101</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>102</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>103</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>104</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>105</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>106</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>107</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>108</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>109</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>110</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>111</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>112</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>113</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>114</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>115</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>116</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>117</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>118</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>119</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>120</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>121</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>122</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>123</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>124</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>125</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>126</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>127</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ <dict>
+ <key>attributes</key>
+ <integer>0x0</integer>
+ <key>end</key>
+ <integer>0x0</integer>
+ <key>guid</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ <key>index</key>
+ <integer>128</integer>
+ <key>start</key>
+ <integer>0x0</integer>
+ <key>type</key>
+ <string>00000000-0000-0000-0000-000000000000</string>
+ </dict>
+ </array>
+ </dict>
+ <key>MBR</key>
+ <dict>
+ <key>code</key>
+ <data>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</data>
+ <key>mbr_array</key>
+ <array>
+ <dict>
+ <key>end_cylinder</key>
+ <integer>0xff</integer>
+ <key>end_head</key>
+ <integer>0xfe</integer>
+ <key>end_sector</key>
+ <integer>0xff</integer>
+ <key>flag</key>
+ <integer>0x0</integer>
+ <key>index</key>
+ <integer>0</integer>
+ <key>lba_size_high</key>
+ <integer>0x0</integer>
+ <key>lba_size_low</key>
+ <integer>0x2800</integer>
+ <key>lba_start_high</key>
+ <integer>0x0</integer>
+ <key>lba_start_low</key>
+ <integer>0x1</integer>
+ <key>start_cylinder</key>
+ <integer>0x0</integer>
+ <key>start_head</key>
+ <integer>0x0</integer>
+ <key>start_sector</key>
+ <integer>0x2</integer>
+ <key>type</key>
+ <integer>0xee</integer>
+ </dict>
+ </array>
+ </dict>
+ <key>sector_size</key>
+ <integer>512</integer>
+</dict>
+</plist>
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.disklabel b/contrib/netbsd-tests/sbin/gpt/gpt.disklabel
new file mode 100644
index 0000000..4a598ee
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.disklabel
@@ -0,0 +1,27 @@
+# gpt.disk:
+type: ESDI
+disk: WDC WD2500SD-01K
+label: fictitious
+flags:
+bytes/sector: 512
+sectors/track: 63
+tracks/cylinder: 16
+sectors/cylinder: 1000
+cylinders: 10
+total sectors: 10000
+rpm: 3600
+interleave: 1
+trackskew: 0
+cylinderskew: 0
+headswitch: 0 # microseconds
+track-to-track seek: 0 # microseconds
+drivedata: 0
+
+6 partitions:
+# size offset fstype [fsize bsize cpg/sgs]
+ a: 500 63 4.2BSD 1024 8192 0 # (Cyl. 0*- 0*)
+ b: 1000 563 swap # (Cyl. 0*- 1*)
+ c: 1000 63 unused 0 0 # (Cyl. 0*- 1*)
+ d: 1063 0 unused 0 0 # (Cyl. 0 - 1*)
+ e: 1000 1563 4.2BSD 1024 8192 0 # (Cyl. 1*- 2*)
+ f: 400 2563 MSDOS # (Cyl. 2*- 2*)
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.disklabel.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.disklabel.show.normal
new file mode 100644
index 0000000..5d93707
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.disklabel.show.normal
@@ -0,0 +1,12 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 29 Unused
+ 63 500 1 GPT part - NetBSD FFSv1/FFSv2
+ 563 1000 2 GPT part - NetBSD swap
+ 1563 1000 3 GPT part - NetBSD FFSv1/FFSv2
+ 2563 400 4 GPT part - Windows basic data
+ 2963 7245 Unused
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.empty.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.empty.show.normal
new file mode 100644
index 0000000..e55c5a9
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.empty.show.normal
@@ -0,0 +1,7 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 10174 Unused
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.removepart.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.removepart.show.normal
new file mode 100644
index 0000000..bf89431
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.removepart.show.normal
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 Unused
+ 1058 9150 2 GPT part - NetBSD FFSv1/FFSv2
+ 10208 32 Sec GPT table
+ 10240 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.resizedisk.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.resizedisk.show.normal
new file mode 100644
index 0000000..a328028
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.resizedisk.show.normal
@@ -0,0 +1,9 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - EFI System
+ 1058 9150 2 GPT part - NetBSD FFSv1/FFSv2
+ 10208 10240 Unused
+ 20448 32 Sec GPT table
+ 20480 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/gpt.resizepart.show.normal b/contrib/netbsd-tests/sbin/gpt/gpt.resizepart.show.normal
new file mode 100644
index 0000000..6228a63
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/gpt.resizepart.show.normal
@@ -0,0 +1,8 @@
+ start size index contents
+ 0 1 PMBR
+ 1 1 Pri GPT header
+ 2 32 Pri GPT table
+ 34 1024 1 GPT part - EFI System
+ 1058 19390 2 GPT part - NetBSD FFSv1/FFSv2
+ 20448 32 Sec GPT table
+ 20480 1 Sec GPT header
diff --git a/contrib/netbsd-tests/sbin/gpt/t_gpt.sh b/contrib/netbsd-tests/sbin/gpt/t_gpt.sh
new file mode 100755
index 0000000..0381313
--- /dev/null
+++ b/contrib/netbsd-tests/sbin/gpt/t_gpt.sh
@@ -0,0 +1,318 @@
+# $NetBSD: t_gpt.sh,v 1.15 2016/03/08 08:04:48 joerg Exp $
+#
+# Copyright (c) 2015 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Christos Zoulas
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+bootblk=/usr/mdec/gptmbr.bin
+size=10240
+newsize=20480
+shdr=34
+disk=gpt.disk
+uuid="........-....-....-....-............"
+zero="00000000-0000-0000-0000-000000000000"
+src=$(atf_get_srcdir)
+
+silence() {
+ atf_check -s exit:0 -o empty -e empty "$@"
+}
+
+inline() {
+ local inline="$1"
+ shift
+ atf_check -s exit:0 -e empty -o inline:"$inline" "$@"
+}
+
+match() {
+ local match="$1"
+ shift
+ atf_check -s exit:0 -e empty -o match:"$match" "$@"
+}
+
+matcherr() {
+ local match="$1"
+ shift
+ atf_check -s exit:0 -o empty -e match:"$match" "$@"
+}
+
+file() {
+ local file="$1"
+ shift
+ atf_check -s exit:0 -e empty -o file:"$file" "$@"
+}
+
+save() {
+ local save="$1"
+ shift
+ atf_check -s exit:0 -e empty -o save:"$save" "$@"
+}
+
+zerodd() {
+ silence dd conv=notrunc msgfmt=quiet if=/dev/zero of="$disk" "$@"
+}
+
+prepare() {
+ rm -f "$disk"
+ zerodd seek="$size" count=1
+}
+
+prepare_2part() {
+ prepare
+ silence gpt create "$disk"
+ match "$(partaddmsg 1 34 1024)" gpt add -t efi -s 1024 "$disk"
+ match "$(partaddmsg 2 1058 9150)" gpt add "$disk"
+}
+
+# Calling this from tests does not work. BUG!
+check_2part() {
+ file "$src/gpt.2part.show.normal" gpt show "$disk"
+ file "$src/gpt.2part.show.uuid" gpt show -u "$disk"
+}
+
+partaddmsg() {
+ echo "^$disk: Partition $1 added: $uuid $2 $3\$"
+}
+
+partresmsg() {
+ echo "^$disk: Partition $1 resized: $2 $3\$"
+}
+
+partremmsg() {
+ echo "^$disk: Partition $1 removed\$"
+}
+
+partlblmsg() {
+ echo "^$disk: Partition $1 label changed\$"
+}
+
+partbootmsg() {
+ echo "^$disk: Partition $1 marked as bootable\$"
+}
+
+recovermsg() {
+ echo "^$disk: Recovered $1 GPT [a-z]* from $2\$"
+}
+
+migratemsg() {
+ echo -n "^gpt: $disk: Partition $1 unknown type MSDOS, "
+ echo 'using "Microsoft Basic Data"$'
+}
+
+attrmsg() {
+ echo "^$disk: Partition $1 attributes updated\$"
+}
+
+typemsg() {
+ echo "^$disk: Partition $1 type changed\$"
+}
+
+atf_test_case create_empty
+create_empty_head() {
+ atf_set "descr" "Create empty disk"
+}
+
+create_empty_body() {
+ prepare
+ silence gpt create "$disk"
+ file "$src/gpt.empty.show.normal" gpt show "$disk"
+}
+
+atf_test_case create_2part
+create_2part_head() {
+ atf_set "descr" "Create 2 partition disk"
+}
+
+create_2part_body() {
+ prepare_2part
+ check_2part
+}
+
+atf_test_case change_attr_2part
+change_attr_2part_head() {
+ atf_set "descr" "Change the attribute of 2 partition disk"
+}
+
+change_attr_2part_body() {
+ prepare_2part
+ match "$(attrmsg 1)" gpt set -i 1 -a biosboot,bootme "$disk"
+ save attr gpt show -i 1 "$disk"
+ match "^Attributes: biosboot, bootme\$" tail -1 attr
+ match "$(attrmsg 1)" gpt unset -i 1 -a biosboot,bootme "$disk"
+ save attr gpt show -i 1 "$disk"
+ match "^Attributes: None\$" tail -1 attr
+}
+
+atf_test_case change_type_2part
+change_type_2part_head() {
+ atf_set "descr" "Change the partition type type of 2 partition disk"
+}
+
+change_type_2part_body() {
+ prepare_2part
+ match "$(typemsg 1)" gpt type -i 1 -T apple "$disk"
+ save type gpt show -i 1 "$disk"
+ inline "Type: apple (48465300-0000-11aa-aa11-00306543ecac)\n" \
+ grep "^Type:" type
+ match "$(typemsg 1)" gpt type -i 1 -T efi "$disk"
+ save type gpt show -i 1 "$disk"
+ inline "Type: efi (c12a7328-f81f-11d2-ba4b-00a0c93ec93b)\n" \
+ grep "^Type:" type
+}
+
+atf_test_case backup_2part
+backup_2part_head() {
+ atf_set "descr" "Backup 2 partition disk"
+}
+
+backup_2part_body() {
+ prepare_2part
+ save test.backup gpt backup "$disk"
+ file "$src/gpt.backup" sed -e "s/$uuid/$zero/g" "test.backup"
+}
+
+atf_test_case restore_2part
+restore_2part_head() {
+ atf_set "descr" "Restore 2 partition disk"
+}
+
+restore_2part_body() {
+ prepare_2part
+ save test.backup gpt backup "$disk"
+ prepare
+ silence gpt restore -i test.backup "$disk"
+ check_2part
+}
+
+atf_test_case recover_backup
+recover_backup_head() {
+ atf_set "descr" "Recover the backup GPT header and table"
+}
+
+recover_backup_body() {
+ prepare_2part
+ zerodd seek="$((size - shdr))" count="$shdr"
+ match "$(recovermsg secondary primary)" gpt recover "$disk"
+ check_2part
+}
+
+atf_test_case recover_primary
+recover_primary_head() {
+ atf_set "descr" "Recover the primary GPT header and table"
+}
+
+recover_primary_body() {
+ prepare_2part
+ zerodd seek=1 count="$shdr"
+ match "$(recovermsg primary secondary)" gpt recover "$disk"
+ check_2part
+}
+
+atf_test_case resize_2part
+resize_2part_head() {
+ atf_set "descr" "Resize a 2 partition disk and partition"
+}
+
+resize_2part_body() {
+ prepare_2part
+ zerodd seek="$newsize" count=1
+ silence gpt resizedisk "$disk"
+ file "$src/gpt.resizedisk.show.normal" gpt show "$disk"
+ match "$(partresmsg 2 1058 19390)" gpt resize -i 2 "$disk"
+ file "$src/gpt.resizepart.show.normal" gpt show "$disk"
+}
+
+atf_test_case remove_2part
+remove_2part_head() {
+ atf_set "descr" "Remove a partition from a 2 partition disk"
+}
+
+remove_2part_body() {
+ prepare_2part
+ match "$(partremmsg 1)" -e empty gpt remove \
+ -i 1 "$disk"
+ file "$src/gpt.removepart.show.normal" \
+ gpt show "$disk"
+}
+
+atf_test_case label_2part
+label_2part_head() {
+ atf_set "descr" "Label partitions in a 2 partition disk"
+}
+
+label_2part_body() {
+ prepare_2part
+ match "$(partlblmsg 1)" gpt label -i 1 -l potato "$disk"
+ match "$(partlblmsg 2)" gpt label -i 2 -l tomato "$disk"
+ file "$src/gpt.2part.show.label" \
+ gpt show -l "$disk"
+}
+
+atf_test_case bootable_2part
+bootable_2part_head() {
+ atf_set "descr" "Make partition 2 bootable in a 2 partition disk"
+ atf_set "require.files" "$bootblk"
+}
+
+bootable_2part_body() {
+ prepare_2part
+ match "$(partbootmsg 2)" gpt biosboot -i 2 "$disk"
+ local bootsz="$(ls -l "$bootblk" | awk '{ print $5 }')"
+ silence dd msgfmt=quiet if="$disk" of=bootblk bs=1 count="$bootsz"
+ silence cmp "$bootblk" bootblk
+ save bootattr gpt show -i 2 "$disk"
+ match "^Attributes: biosboot\$" tail -1 bootattr
+}
+
+atf_test_case migrate_disklabel
+migrate_disklabel_head() {
+ atf_set "descr" "Migrate an MBR+disklabel disk to GPT"
+}
+
+migrate_disklabel_body() {
+ prepare
+ silence fdisk -fi "$disk"
+ silence fdisk -fu0s "169/63/$((size / 10))" "$disk"
+ silence disklabel -R "$disk" "$src/gpt.disklabel"
+ matcherr "$(migratemsg 5)" gpt migrate "$disk"
+ file "$src/gpt.disklabel.show.normal" gpt show "$disk"
+}
+
+atf_init_test_cases() {
+ atf_add_test_case create_empty
+ atf_add_test_case create_2part
+ atf_add_test_case change_attr_2part
+ atf_add_test_case change_type_2part
+ atf_add_test_case backup_2part
+ atf_add_test_case remove_2part
+ atf_add_test_case restore_2part
+ atf_add_test_case recover_backup
+ atf_add_test_case recover_primary
+ atf_add_test_case resize_2part
+ atf_add_test_case label_2part
+ atf_add_test_case bootable_2part
+ atf_add_test_case migrate_disklabel
+}
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/common.sh b/contrib/netbsd-tests/sbin/resize_ffs/common.sh
index 1b1d5da..80ebc65 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/common.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/common.sh
@@ -146,6 +146,8 @@ resize_ffs()
fi
umount mnt
+ # Check that resize needed
+ atf_check -s exit:0 -o ignore resize_ffs -c -y -s ${nsize} ${IMG}
atf_check -s exit:0 -o ignore resize_ffs -y -s ${nsize} ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
atf_check -s exit:0 -e ignore rump_ffs ${IMG} mnt
@@ -155,5 +157,7 @@ resize_ffs()
# checking everything because we don't delete on grow
check_data_range 1 ${numdata}
fi
+ # Check that no resize needed
+ atf_check -s exit:1 -o ignore resize_ffs -c -y -s ${nsize} ${IMG}
umount mnt
}
diff --git a/contrib/netbsd-tests/bin/sh/t_compexit.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_check.sh
index 019b740..5b92292 100755
--- a/contrib/netbsd-tests/bin/sh/t_compexit.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_check.sh
@@ -1,8 +1,11 @@
-# $NetBSD: t_compexit.sh,v 1.1 2012/03/17 16:33:11 jruoho Exp $
+# $NetBSD: t_check.sh,v 1.1 2015/03/29 19:37:02 chopps Exp $
#
-# Copyright (c) 2007 The NetBSD Foundation, Inc.
+# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Christian E. Hopps
+#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
@@ -25,39 +28,29 @@
# POSSIBILITY OF SUCH DAMAGE.
#
-# The standard
-# http://www.opengroup.org/onlinepubs/007904975/utilities/set.html
-# says:
-#
-# -e
-#
-# When this option is on, if a simple command fails for any of the
-# reasons listed in Consequences of Shell Errors or returns an exit
-# status value >0, and is not part of the compound list following a
-# while, until, or if keyword, and is not a part of an AND or OR list,
-# and is not a pipeline preceded by the ! reserved word, then the shell
-# shall immediately exit.
+atf_test_case check_grow
-crud() {
- set -e
- for x in a
- do
- BAR="foo"
- false && echo true
- echo mumble
- done
+check_grow_head() {
+ atf_set "descr" "Tests check for room to grow in image"
+ atf_set "require.user" "root"
}
-atf_test_case set_e
-set_e_head() {
- atf_set "descr" "Tests that 'set -e' turns on error detection" \
- "and that it behaves as defined by the standard"
-}
-set_e_body() {
- foo=`crud`
- atf_check_equal 'x$foo' 'xmumble'
+check_grow_body() {
+ echo "***resize_ffs check grow test"
+
+ atf_check -o ignore -e ignore newfs -V1 -s 6144 -F ${IMG}
+ dd if=/dev/zero count=2048 >> ${IMG}
+
+ # test room to grow, grow then check that we did.
+ atf_check -s exit:0 -o match:"newsize: 8192 oldsize: 6144" resize_ffs -v -c -y ${IMG}
+ atf_check -s exit:0 -o ignore resize_ffs -y ${IMG}
+ atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 -o match:"already 8192 blocks" \
+ resize_ffs -v -c -y ${IMG}
}
-atf_init_test_cases() {
- atf_add_test_case set_e
+atf_init_test_cases()
+{
+ setupvars
+ atf_add_test_case check_grow
}
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/t_grow.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_grow.sh
index 31d117b..08512d1 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/t_grow.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_grow.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_grow.sh,v 1.8 2011/01/11 00:50:02 riz Exp $
+# $NetBSD: t_grow.sh,v 1.9 2015/03/29 19:37:02 chopps Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -131,8 +131,10 @@ grow_ffsv1_partial_cg_body()
atf_check -o ignore -e ignore newfs -V1 -s 4000 -F ${IMG}
# size to grow to is chosen to cause partial cg
+ atf_check -s exit:0 -o ignore resize_ffs -c -y -s 5760 ${IMG}
atf_check -s exit:0 -o ignore resize_ffs -y -s 5760 ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 -o ignore resize_ffs -c -y -s 5760 ${IMG}
}
atf_init_test_cases()
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh
index 07dc514..3dba236 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_grow_swapped.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_grow_swapped.sh,v 1.2 2011/01/11 00:50:02 riz Exp $
+# $NetBSD: t_grow_swapped.sh,v 1.3 2015/03/29 19:37:02 chopps Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -130,8 +130,10 @@ grow_ffsv1_partial_cg_body()
atf_check -o ignore -e ignore newfs -B be -V1 -s 4000 -F ${IMG}
# size to grow to is chosen to cause partial cg
+ atf_check -s exit:0 -o ignore resize_ffs -c -y -s 5760 ${IMG}
atf_check -s exit:0 -o ignore resize_ffs -y -s 5760 ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 -o ignore resize_ffs -c -y -s 5760 ${IMG}
}
atf_init_test_cases()
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh
index 1b66759..8a9cf19 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_shrink.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_shrink.sh,v 1.7 2011/01/05 02:25:27 riz Exp $
+# $NetBSD: t_shrink.sh,v 1.8 2015/03/29 19:37:02 chopps Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -112,8 +112,10 @@ shrink_ffsv1_partial_cg_body()
atf_check -o ignore -e ignore newfs -V1 -F -s 5760 ${IMG}
# shrink so there's a partial cg at the end
+ atf_check -s exit:0 resize_ffs -c -s 4000 -y ${IMG}
atf_check -s exit:0 resize_ffs -s 4000 -y ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 resize_ffs -c -s 4000 -y ${IMG}
}
atf_init_test_cases()
diff --git a/contrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh b/contrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh
index 30e4add..50dc436 100755
--- a/contrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh
+++ b/contrib/netbsd-tests/sbin/resize_ffs/t_shrink_swapped.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_shrink_swapped.sh,v 1.1 2011/01/05 02:25:27 riz Exp $
+# $NetBSD: t_shrink_swapped.sh,v 1.2 2015/03/29 19:37:02 chopps Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -112,8 +112,10 @@ shrink_ffsv1_partial_cg_body()
atf_check -o ignore -e ignore newfs -V1 -F -s 5760 ${IMG}
# shrink so there's a partial cg at the end
+ atf_check -s exit:0 resize_ffs -c -s 4000 -y ${IMG}
atf_check -s exit:0 resize_ffs -s 4000 -y ${IMG}
atf_check -s exit:0 -o ignore fsck_ffs -f -n -F ${IMG}
+ atf_check -s exit:1 resize_ffs -c -s 4000 -y ${IMG}
}
atf_init_test_cases()
diff --git a/contrib/netbsd-tests/sbin/sysctl/t_perm.sh b/contrib/netbsd-tests/sbin/sysctl/t_perm.sh
index 6acfd19..25b2975 100755
--- a/contrib/netbsd-tests/sbin/sysctl/t_perm.sh
+++ b/contrib/netbsd-tests/sbin/sysctl/t_perm.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_perm.sh,v 1.6 2012/03/18 09:46:50 jruoho Exp $
+# $NetBSD: t_perm.sh,v 1.7 2016/06/17 03:55:35 pgoyette Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -39,6 +39,7 @@ clean() {
sysctl_write() {
deadbeef="3735928559"
+ deadbeef_signed="-559038737"
sysctl $1 | cut -d= -f1 > $file
@@ -63,7 +64,7 @@ sysctl_write() {
# A functional verification that $deadbeef
# was not actually written to the node.
#
- if [ ! -z $(sysctl $1 | grep $deadbeef) ]; then
+ if [ ! -z $(sysctl $1 | grep -e $deadbeef -e $deadbeef_signed) ]; then
atf_fail "value was written"
fi
}
diff --git a/contrib/netbsd-tests/share/mk/t_lib.sh b/contrib/netbsd-tests/share/mk/t_lib.sh
index 5f18e14..0187aa2 100755
--- a/contrib/netbsd-tests/share/mk/t_lib.sh
+++ b/contrib/netbsd-tests/share/mk/t_lib.sh
@@ -31,6 +31,12 @@ defaults__build_and_install_body() {
create_c_module module1 first
create_c_module module2 second
+ CC=gcc
+ if [ ! -e /usr/bin/gcc -a -e /usr/bin/clang ]; then
+ export HAVE_LLVM=yes
+ CC=clang
+ fi
+
cat >Makefile <<EOF
LIB = two-modules
SRCS = module1.c module2.c
@@ -44,7 +50,7 @@ EOF
atf_check -o ignore make install
create_main_using_modules main.c module1.h:first module2.h:second
- atf_check -o ignore gcc -I. -Lroot/usr/lib -o main main.c -ltwo-modules
+ atf_check -o ignore ${CC} -I. -Lroot/usr/lib -o main main.c -ltwo-modules
atf_check -o inline:'module1\nmodule2\n' ./main
}
diff --git a/contrib/netbsd-tests/share/mk/t_prog.sh b/contrib/netbsd-tests/share/mk/t_prog.sh
index d004070..e21f1f6 100755
--- a/contrib/netbsd-tests/share/mk/t_prog.sh
+++ b/contrib/netbsd-tests/share/mk/t_prog.sh
@@ -31,6 +31,10 @@ defaults__build_and_install_head() {
atf_set "require.progs" "/usr/bin/mandoc"
}
defaults__build_and_install_body() {
+ if [ ! -e /usr/bin/gcc -a -e /usr/bin/clang ]; then
+ export HAVE_LLVM=yes
+ fi
+
cat >hello.c <<EOF
#include <stdio.h>
int main(void) { printf("Hello, test!\n"); return 0; }
@@ -61,6 +65,10 @@ EOF
atf_test_case without_man__build_and_install
without_man__build_and_install_body() {
+ if [ ! -e /usr/bin/gcc -a -e /usr/bin/clang ]; then
+ export HAVE_LLVM=yes
+ fi
+
cat >hello.c <<EOF
#include <stdio.h>
int main(void) { printf("Hello, test!\n"); return 0; }
diff --git a/contrib/netbsd-tests/share/mk/t_test.sh b/contrib/netbsd-tests/share/mk/t_test.sh
index c8bb1f3..08681d8 100755
--- a/contrib/netbsd-tests/share/mk/t_test.sh
+++ b/contrib/netbsd-tests/share/mk/t_test.sh
@@ -34,6 +34,10 @@
# The second argument is the name of the test program, without an extension.
# The corresponding source file must exist in the current directory.
one_test() {
+
+ if [ ! -e /usr/bin/gcc -a -e /usr/bin/clang ]; then
+ export HAVE_LLVM=yes
+ fi
local lang="${1}"; shift
local name="${1}"; shift
diff --git a/contrib/netbsd-tests/sys/net/t_print.c b/contrib/netbsd-tests/sys/net/t_print.c
new file mode 100644
index 0000000..ff17895
--- /dev/null
+++ b/contrib/netbsd-tests/sys/net/t_print.c
@@ -0,0 +1,178 @@
+/* $NetBSD: t_print.c,v 1.2 2016/08/27 11:30:49 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_print.c,v 1.2 2016/08/27 11:30:49 christos Exp $");
+
+#include "net/dl_print.c"
+
+#include <atf-c.h>
+
+static const struct {
+ struct dl_addr ia;
+ const char *str;
+ int len;
+} tst[] = {
+ {
+ {
+ .dl_type = 6,
+ .dl_nlen = 0,
+ .dl_alen = 6,
+ .dl_slen = 0,
+ .dl_data = {
+ (char)0x01, (char)0xa2, (char)0x03,
+ (char)0xc4, (char)0x05, (char)0xf6,
+ },
+ },
+ "/6#01:a2:03:c4:05:f6",
+ 20,
+ },
+ {
+ {
+ .dl_type = 24,
+ .dl_nlen = 3,
+ .dl_alen = 6,
+ .dl_slen = 0,
+ .dl_data = {
+ 'l', 'o', '0',
+ (char)0x11, (char)0x22, (char)0x33,
+ (char)0x44, (char)0x55, (char)0x66,
+ },
+ },
+ "lo0/24#11:22:33:44:55:66",
+ 24,
+ },
+ {
+ {
+ .dl_type = 24,
+ .dl_nlen = 7,
+ .dl_alen = 1,
+ .dl_slen = 0,
+ .dl_data = {
+ 'n', 'p', 'f', 'l', 'o', 'g', '0', (char)0xa5,
+ },
+ },
+ "npflog0/24#a5",
+ 13,
+ },
+ {
+ {
+ .dl_type = 0,
+ .dl_nlen = 0,
+ .dl_alen = 0,
+ .dl_slen = 0,
+ .dl_data = {
+ '\0'
+ },
+ },
+ "/0#",
+ 3,
+ },
+};
+
+
+ATF_TC(dl_print);
+ATF_TC_HEAD(dl_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of link address");
+}
+
+ATF_TC_BODY(dl_print, tc)
+{
+ char buf[LINK_ADDRSTRLEN];
+ int r;
+ size_t l = sizeof(buf);
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = dl_print(buf, l, &tst[i].ia);
+ ATF_REQUIRE_STREQ(buf, tst[i].str);
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+
+ l = 4;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = dl_print(buf, l, &tst[i].ia);
+ ATF_CHECK(strncmp(buf, tst[i].str, l - 1) == 0);
+ if (r > (int)l)
+ ATF_REQUIRE_EQ(buf[l - 1], '\0');
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+}
+
+ATF_TC(sdl_print);
+ATF_TC_HEAD(sdl_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of sockaddr_dl");
+}
+
+ATF_TC_BODY(sdl_print, tc)
+{
+ char buf[1024];
+ char res[1024];
+ int r, e;
+ size_t l = sizeof(buf);
+ struct sockaddr_dl sdl;
+
+ memset(&sdl, 0, sizeof(sdl));
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ memcpy(&sdl.sdl_addr, &tst[i].ia, sizeof(sdl.sdl_addr));
+ sdl.sdl_index = (uint16_t)i;
+ r = sdl_print(buf, l, &sdl);
+ if (i == 3)
+ e = snprintf(res, l, "link#%zu", i);
+ else
+ e = snprintf(res, l, "[%s]:%zu", tst[i].str, i);
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+
+ l = 8;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ memcpy(&sdl.sdl_addr, &tst[i].ia, sizeof(sdl.sdl_addr));
+ sdl.sdl_index = (uint16_t)i;
+ r = sdl_print(buf, l, &sdl);
+ if (i == 3)
+ e = snprintf(res, l, "link#%zu", i);
+ else
+ e = snprintf(res, l, "[%s]:%zu", tst[i].str, i);
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, dl_print);
+ ATF_TP_ADD_TC(tp, sdl_print);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/sys/netatalk/t_print.c b/contrib/netbsd-tests/sys/netatalk/t_print.c
new file mode 100644
index 0000000..2e506c6
--- /dev/null
+++ b/contrib/netbsd-tests/sys/netatalk/t_print.c
@@ -0,0 +1,135 @@
+/* $NetBSD: t_print.c,v 1.1 2014/12/02 19:48:21 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_print.c,v 1.1 2014/12/02 19:48:21 christos Exp $");
+
+#include "netatalk/at_print.c"
+
+#include <atf-c.h>
+
+static const struct {
+ struct at_addr ia;
+ const char *str;
+ int len;
+} tst[] = {
+ {
+ { 0, 0 },
+ "0.0",
+ 3,
+ },
+ {
+ { htons(3), 255 },
+ "3.255",
+ 5,
+ },
+};
+
+
+ATF_TC(at_print);
+ATF_TC_HEAD(at_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of struct at_addr");
+}
+
+ATF_TC_BODY(at_print, tc)
+{
+ char buf[ATALK_ADDRSTRLEN];
+ int r;
+ size_t l = sizeof(buf);
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = at_print(buf, l, &tst[i].ia);
+ ATF_REQUIRE_STREQ(buf, tst[i].str);
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+
+ l = 4;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = at_print(buf, l, &tst[i].ia);
+ ATF_CHECK(strncmp(buf, tst[i].str, l - 1) == 0);
+ if (r > (int)l)
+ ATF_REQUIRE_EQ(buf[l - 1], '\0');
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+}
+
+ATF_TC(sat_print);
+ATF_TC_HEAD(sat_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of sockaddr_at");
+}
+
+ATF_TC_BODY(sat_print, tc)
+{
+ char buf[1024];
+ char res[1024];
+ int r, e;
+ size_t l = sizeof(buf);
+ struct sockaddr_at sat;
+
+ memset(&sat, 0, sizeof(sat));
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sat.sat_addr = tst[i].ia;
+ sat.sat_port = (uint8_t)i;
+ r = sat_print(buf, l, &sat);
+ if (i == 0)
+ e = snprintf(res, sizeof(res), "%s", tst[i].str);
+ else
+ e = snprintf(res, sizeof(res), "%s:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+
+ l = 8;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sat.sat_addr = tst[i].ia;
+ sat.sat_port = (uint8_t)i;
+ r = sat_print(buf, l, &sat);
+ if (i == 0)
+ e = snprintf(res, l, "%s", tst[i].str);
+ else
+ e = snprintf(res, l, "%s:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, at_print);
+ ATF_TP_ADD_TC(tp, sat_print);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/sys/netinet/t_print.c b/contrib/netbsd-tests/sys/netinet/t_print.c
new file mode 100644
index 0000000..6a0d913a
--- /dev/null
+++ b/contrib/netbsd-tests/sys/netinet/t_print.c
@@ -0,0 +1,144 @@
+/* $NetBSD: t_print.c,v 1.2 2014/12/03 13:10:49 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_print.c,v 1.2 2014/12/03 13:10:49 christos Exp $");
+
+#include "netinet/in_print.c"
+
+#include <atf-c.h>
+
+static const struct {
+ struct in_addr ia;
+ const char *str;
+ int len;
+} tst[] = {
+ {
+ { .s_addr = ntohl(INADDR_LOOPBACK) },
+ "127.0.0.1",
+ 9,
+ },
+ {
+ { .s_addr = ntohl(INADDR_ANY) },
+ "0.0.0.0",
+ 7,
+ },
+ {
+ { .s_addr = ntohl(IN_CLASSC_NET) },
+ "255.255.255.0",
+ 13,
+ },
+ {
+ { .s_addr = ntohl(INADDR_ALLHOSTS_GROUP) },
+ "224.0.0.1",
+ 9,
+ },
+};
+
+
+ATF_TC(in_print);
+ATF_TC_HEAD(in_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of struct in_addr");
+}
+
+ATF_TC_BODY(in_print, tc)
+{
+ char buf[INET_ADDRSTRLEN];
+ int r;
+ size_t l = sizeof(buf);
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = in_print(buf, l, &tst[i].ia);
+ ATF_REQUIRE_STREQ(buf, tst[i].str);
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+
+ l = 8;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = in_print(buf, l, &tst[i].ia);
+ ATF_CHECK(strncmp(buf, tst[i].str, l - 1) == 0);
+ ATF_REQUIRE_EQ(buf[l - 1], '\0');
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+}
+
+ATF_TC(sin_print);
+ATF_TC_HEAD(sin_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of sockaddr_in");
+}
+
+ATF_TC_BODY(sin_print, tc)
+{
+ char buf[1024];
+ char res[1024];
+ int r, e;
+ size_t l = sizeof(buf);
+ struct sockaddr_in sin;
+ memset(&sin, 0, sizeof(sin));
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sin.sin_addr = tst[i].ia;
+ sin.sin_port = (in_port_t)htons(i);
+ r = sin_print(buf, l, &sin);
+ if (i == 0)
+ e = snprintf(res, sizeof(res), "%s", tst[i].str);
+ else
+ e = snprintf(res, sizeof(res), "%s:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+
+ l = 14;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sin.sin_addr = tst[i].ia;
+ sin.sin_port = (in_port_t)htons(i);
+ r = sin_print(buf, l, &sin);
+ if (i == 0)
+ e = snprintf(res, l, "%s", tst[i].str);
+ else
+ e = snprintf(res, l, "%s:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, in_print);
+ ATF_TP_ADD_TC(tp, sin_print);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/sys/netinet6/t_print.c b/contrib/netbsd-tests/sys/netinet6/t_print.c
new file mode 100644
index 0000000..629c23f
--- /dev/null
+++ b/contrib/netbsd-tests/sys/netinet6/t_print.c
@@ -0,0 +1,154 @@
+/* $NetBSD: t_print.c,v 1.2 2014/12/03 13:10:49 christos Exp $ */
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: t_print.c,v 1.2 2014/12/03 13:10:49 christos Exp $");
+
+#include "netinet6/in6_print.c"
+#include "netinet/in_print.c"
+
+#include <atf-c.h>
+
+static const struct {
+ struct in6_addr ia;
+ const char *str;
+ int len;
+} tst[] = {
+ {
+ IN6ADDR_ANY_INIT,
+ "::",
+ 2,
+ },
+ {
+ IN6ADDR_LOOPBACK_INIT,
+ "::1",
+ 3,
+ },
+ {
+ IN6ADDR_NODELOCAL_ALLNODES_INIT,
+ "ff01::1",
+ 7,
+ },
+ {
+ {{{ 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80,
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }}},
+ "1020:3040:5060:7080:102:304:506:708",
+ 35,
+ },
+ {
+ {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0x88, 0x44, 0x22, 0x11 }}},
+ "::ffff:136.68.34.17",
+ 19,
+ },
+};
+
+
+ATF_TC(in6_print);
+ATF_TC_HEAD(in6_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of struct in6_addr");
+}
+
+ATF_TC_BODY(in6_print, tc)
+{
+ char buf[INET6_ADDRSTRLEN];
+ int r;
+ size_t l = sizeof(buf);
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = in6_print(buf, l, &tst[i].ia);
+ ATF_REQUIRE_STREQ(buf, tst[i].str);
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+
+ l = 12;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ r = in6_print(buf, l, &tst[i].ia);
+ ATF_CHECK(strncmp(buf, tst[i].str, l - 1) == 0);
+ if (r > (int)l)
+ ATF_REQUIRE_EQ(buf[l - 1], '\0');
+ ATF_REQUIRE_EQ(r, tst[i].len);
+ }
+}
+
+ATF_TC(sin6_print);
+ATF_TC_HEAD(sin6_print, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr", "printing of sockaddr_in6");
+}
+
+ATF_TC_BODY(sin6_print, tc)
+{
+ char buf[1024];
+ char res[1024];
+ int r, e;
+ size_t l = sizeof(buf);
+ struct sockaddr_in6 sin6;
+ memset(&sin6, 0, sizeof(sin6));
+
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sin6.sin6_addr = tst[i].ia;
+ sin6.sin6_port = (in_port_t)htons(i);
+ r = sin6_print(buf, l, &sin6);
+ if (i == 0)
+ e = snprintf(res, sizeof(res), "%s", tst[i].str);
+ else
+ e = snprintf(res, sizeof(res), "[%s]:%zu",
+ tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+
+ l = 14;
+ for (size_t i = 0; i < __arraycount(tst); i++) {
+ sin6.sin6_addr = tst[i].ia;
+ sin6.sin6_port = (in_port_t)htons(i);
+ r = sin6_print(buf, l, &sin6);
+ if (i == 0)
+ e = snprintf(res, l, "%s", tst[i].str);
+ else
+ e = snprintf(res, l, "[%s]:%zu", tst[i].str, i);
+
+ ATF_REQUIRE_STREQ(buf, res);
+ ATF_REQUIRE_EQ(r, e);
+ }
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, in6_print);
+ ATF_TP_ADD_TC(tp, sin6_print);
+ return atf_no_error();
+}
diff --git a/contrib/netbsd-tests/usr.bin/cc/t_hello.sh b/contrib/netbsd-tests/usr.bin/cc/t_hello.sh
index 9fa1352..6edc58b 100755
--- a/contrib/netbsd-tests/usr.bin/cc/t_hello.sh
+++ b/contrib/netbsd-tests/usr.bin/cc/t_hello.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_hello.sh,v 1.2 2012/07/21 12:30:55 martin Exp $
+# $NetBSD: t_hello.sh,v 1.3 2016/04/03 14:41:30 gson Exp $
#
# Copyright (c) 2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -39,7 +39,7 @@ hello_pic_head() {
atf_test_case hello_pie
hello_pie_head() {
- atf_set "descr" "compile and run position independend (PIE) \"hello world\""
+ atf_set "descr" "compile and run position independent (PIE) \"hello world\""
atf_set "require.progs" "cc"
}
diff --git a/contrib/netbsd-tests/usr.bin/config/d_min b/contrib/netbsd-tests/usr.bin/config/d_min
new file mode 100644
index 0000000..4ccdbfc
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/config/d_min
@@ -0,0 +1,6 @@
+include "arch/regress/conf/std.regress"
+maxusers 4
+
+master0 at root
+
+config regress root on ?
diff --git a/contrib/netbsd-tests/usr.bin/config/support/conf/files b/contrib/netbsd-tests/usr.bin/config/support/conf/files
index d525782..01022ee 100644
--- a/contrib/netbsd-tests/usr.bin/config/support/conf/files
+++ b/contrib/netbsd-tests/usr.bin/config/support/conf/files
@@ -24,3 +24,18 @@ device loopbaby
attach loopbaby at loopchild
defpseudo pseudodev: hook
+
+define a
+file a.c a
+
+define b: a
+file b.c b
+
+define c: b
+file c.c c
+
+define i {}
+
+device d: i
+attach d at root
+file d.c d
diff --git a/contrib/netbsd-tests/usr.bin/config/t_config.sh b/contrib/netbsd-tests/usr.bin/config/t_config.sh
index 9f97b5e..55af069 100755
--- a/contrib/netbsd-tests/usr.bin/config/t_config.sh
+++ b/contrib/netbsd-tests/usr.bin/config/t_config.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_config.sh,v 1.1 2012/03/17 16:33:12 jruoho Exp $
+# $NetBSD: t_config.sh,v 1.8 2016/08/27 12:08:14 christos Exp $
#
# Copyright (c) 2008, 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -25,15 +25,62 @@
# POSSIBILITY OF SUCH DAMAGE.
#
+srcdir=..
+merge_backslash()
+{
+ sed '
+: again
+/\\$/ {
+ N
+ s/\\\n//
+ t again
+}
+' "$1"
+}
+run_and_check_prep()
+{
+ local name="${1}"; shift
+
+ mkdir -p compile
+ srcdir="$(atf_get_srcdir)"
+ if [ ! -d "${srcdir}/support" ]; then
+ srcdir="$(dirname "${srcdir}")"
+ if [ ! -d "${srcdir}/support" ]; then
+ atf_fail "bad source directory ${srcdir}"
+ exit 1
+ fi
+ fi
+ supportdir="${srcdir}/support"
+
+ local config_str
+ eval config_str=\$${name}_config_str
+ if [ -n "$config_str" ]; then
+ config="d_${name}"
+ printf "$config_str" >"${config}"
+ else
+ config="${srcdir}/d_${name}"
+ fi
+}
+
run_and_check_pass()
{
local name="${1}"; shift
- mkdir compile
- supportdir="$(atf_get_srcdir)/support"
- config="$(atf_get_srcdir)/d_${name}"
+ run_and_check_prep "${name}"
+
+ atf_check -o ignore -s eq:0 \
+ config -s "${supportdir}" -b "compile/${name}" "${config}"
+}
+
+run_and_check_warn()
+{
+ local name="${1}"; shift
+
+ run_and_check_prep "${name}"
- atf_check -o ignore \
+ local stderr
+ eval stderr=\$${name}_stderr
+ atf_check -o ignore -e "${stderr}" -s eq:0 \
config -s "${supportdir}" -b "compile/${name}" "${config}"
}
@@ -41,14 +88,28 @@ run_and_check_fail()
{
local name="${1}"; shift
- mkdir compile
- supportdir="$(atf_get_srcdir)/support"
- config="$(atf_get_srcdir)/d_${name}"
+ run_and_check_prep "${name}"
atf_check -o ignore -e ignore -s ne:0 \
config -s "${supportdir}" -b "compile/${name}" "${config}"
}
+test_output()
+{
+ local name="${1}"; shift
+ local res=1
+
+ run_and_check_prep "${name}"
+
+ config -s "${supportdir}" -b compile/"${name}" "${config}" >/dev/null &&
+ cd compile/"${name}" &&
+ check_${name} &&
+ cd $OLDPWD &&
+ res=0
+
+ atf_check test $res -eq 0
+}
+
# Defines a test case for config(1).
test_case()
{
@@ -79,6 +140,126 @@ test_case no_pseudo fail "Checks that config catches ommited 'pseudo-device'" \
test_case deffs_redef fail "Checks that config doesn't allow a deffs to use" \
"the same name as a previous defflag/defparam"
+# Selecting an undefined option.
+undefined_opt_config_str="
+include \"${srcdir}/d_min\"
+options UNDEFINED
+"
+test_case undefined_opt pass \
+ "Checks that config allows a selection for an undefined options"
+
+# Negating an undefined option.
+no_undefined_opt_config_str="
+include \"${srcdir}/d_min\"
+no options UNDEFINED
+"
+no_undefined_opt_stderr='match:UNDEFINED'
+test_case no_undefined_opt warn \
+ "Checks that config allows a negation for an undefined options"
+
+# Attribute selection
+test_case select pass "Attribute selection"
+select_config_str="
+include \"${srcdir}/d_min\"
+select c
+"
+check_select()
+{
+ local f=Makefile
+
+ grep -q '^ a\.c ' $f &&
+ grep -q '^ b\.c ' $f &&
+ grep -q '^ c\.c ' $f &&
+ :
+}
+select_body() {
+ test_output select
+}
+
+# Attribute negation
+test_case no_select pass "Attribute negation"
+no_select_config_str="
+include \"${srcdir}/d_min\"
+select c
+no select a
+"
+check_no_select()
+{
+ local f=Makefile
+
+ : >tmp
+ grep -q '^a\.o:' $f >>tmp
+ grep -q '^b\.o:' $f >>tmp
+ grep -q '^c\.o:' $f >>tmp
+
+ [ ! -s tmp ] &&
+ :
+}
+no_select_body() {
+ test_output no_select
+}
+
+# Device instance
+test_case devi pass "Device instance"
+devi_config_str="
+include \"${srcdir}/d_min\"
+d0 at root
+"
+check_devi()
+{
+ local f=ioconf.c
+
+ sed -ne '/^struct cfdriver \* const cfdriver_list_initial\[\]/,/^};/p' $f >tmp.cfdriver
+ sed -ne '/^struct cfdata cfdata\[\]/,/^};/p' $f >tmp.cfdata
+
+ grep -q '^CFDRIVER_DECL(d, ' $f &&
+ grep -q '&d_cd,' tmp.cfdriver &&
+ grep -q '^extern struct cfattach d_ca;$' $f &&
+ grep -q '^static const struct cfiattrdata \* const d_attrs\[\]' $f &&
+ grep -q '^static const struct cfiattrdata icf_iattrdata' $f &&
+ grep -q '{ "d",' tmp.cfdata &&
+ :
+}
+devi_body() {
+ test_output devi
+}
+
+# Check minimal kernel config(1) output
+test_case min pass "Minimal config"
+check_min_files()
+{
+ test -e Makefile &&
+ test -e config_file.h &&
+ test -e config_time.src &&
+ test -e ioconf.c &&
+ test -e ioconf.h &&
+ test -e locators.h &&
+ test -e swapregress.c &&
+ test -h machine &&
+ test -h regress &&
+ :
+}
+check_min_makefile()
+{
+ local f=Makefile
+
+ grep -q '^%' $f >tmp.template
+
+ grep -q '^MACHINE=regress$' $f &&
+ (merge_backslash $f | grep -q '^IDENT=[ ]*-DMAXUSERS="4"') &&
+ [ ! -s tmp.template ] &&
+ :
+}
+check_min()
+{
+ check_min_files &&
+ check_min_makefile &&
+ :
+}
+min_body() {
+ test_output min
+}
+
atf_init_test_cases()
{
atf_add_test_case shadow_instance
@@ -88,4 +269,10 @@ atf_init_test_cases()
atf_add_test_case postponed_orphan
atf_add_test_case no_pseudo
atf_add_test_case deffs_redef
+ atf_add_test_case undefined_opt
+ atf_add_test_case no_undefined_opt
+ atf_add_test_case select
+ atf_add_test_case no_select
+ atf_add_test_case devi
+ atf_add_test_case min
}
diff --git a/contrib/netbsd-tests/usr.bin/gdb/t_regress.sh b/contrib/netbsd-tests/usr.bin/gdb/t_regress.sh
new file mode 100755
index 0000000..5ea8713
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/gdb/t_regress.sh
@@ -0,0 +1,77 @@
+# $NetBSD: t_regress.sh,v 1.1 2016/04/08 10:09:16 gson Exp $
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Regression tests for some GDB PRs
+
+# PR 47430
+
+atf_test_case threads
+threads_head() {
+ atf_set "descr" "Test that gdb works with threaded programs"
+ atf_set "require.progs" "gdb"
+}
+threads_body() {
+ # Dig at an unused IP address so that dig fails the
+ # same way on machines with Internet connectivity
+ # as on those without.
+ cat <<EOF >test.gdb
+run +time=1 +tries=1 @127.0.0.177
+cont
+cont
+cont
+cont
+cont
+EOF
+ gdb --batch -x test.gdb dig >gdb.out
+ atf_check -s exit:1 -o ignore -e ignore grep "Program received signal SIGTRAP" gdb.out
+}
+
+# PR 48250
+
+atf_test_case pie
+pie_head() {
+ atf_set "descr" "Test that gdb works with PIE executables"
+ atf_set "require.progs" "cc gdb"
+}
+pie_body() {
+ cat <<\EOF >test.c
+#include <stdio.h>
+int main(int argc, char **argv) { printf ("hello\n"); return 0; }
+EOF
+ cc -fpie -pie -g test.c -o test
+ cat <<EOF >test.gdb
+break main
+run
+EOF
+ gdb --batch -x test.gdb ./test >gdb.out 2>&1
+ atf_check -s exit:1 -o ignore -e ignore grep "annot access memory" gdb.out
+}
+
+atf_init_test_cases() {
+ atf_add_test_case threads
+ atf_add_test_case pie
+}
diff --git a/contrib/netbsd-tests/usr.bin/ld/t_script.sh b/contrib/netbsd-tests/usr.bin/ld/t_script.sh
new file mode 100755
index 0000000..6262dac
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/ld/t_script.sh
@@ -0,0 +1,230 @@
+# $NetBSD: t_script.sh,v 1.7 2014/11/16 04:47:18 uebayasi Exp $
+#
+# Copyright (c) 2014 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+################################################################################
+
+atf_test_case order_default
+order_default_head() {
+ atf_set "descr" "check if default object ordering works"
+ atf_set "require.progs" "cc" "ld" "readelf" "nm" "sed" "grep"
+}
+
+order_default_body() {
+ cat > test.x << EOF
+SECTIONS {
+ /* do nothing; but ld has implicit scripts internally */
+ /* which usually do: *(.data) *(.data.*) */
+}
+EOF
+ order_assert_descending
+}
+
+################################################################################
+
+atf_test_case order_merge
+order_merge_head() {
+ atf_set "descr" "check if glob merge keeps object ordering"
+ atf_set "require.progs" ${order_require_progs}
+}
+
+order_merge_body() {
+ cat > test.x << EOF
+SECTIONS {
+ .data : {
+ *(.data .data.*)
+ }
+}
+EOF
+ order_assert_descending
+}
+
+################################################################################
+
+atf_test_case order_reorder
+order_reorder_head() {
+ atf_set "descr" "check if object reordering works"
+ atf_set "require.progs" ${order_require_progs}
+}
+
+order_reorder_body() {
+ cat > test.x << EOF
+SECTIONS {
+ .data : {
+ *(.data)
+ *(.data.a)
+ *(.data.b)
+ *(.data.c)
+ }
+}
+EOF
+ order_assert_ascending
+}
+
+################################################################################
+
+atf_test_case order_sort
+order_sort_head() {
+ atf_set "descr" "check if object sort works"
+ atf_set "require.progs" ${order_require_progs}
+}
+
+order_sort_body() {
+ cat > test.x << EOF
+SECTIONS {
+ .data : {
+ *(.data)
+ /* SORT_BY_NAME */
+ SORT(*)(.data.*)
+ }
+}
+EOF
+ order_assert_ascending
+}
+
+################################################################################
+
+atf_test_case multisec
+multisec_head() {
+ atf_set "descr" "check if multiple SECTIONS commands work"
+ atf_set "require.progs" ${order_require_progs}
+}
+
+multisec_body() {
+ cat > test.c << EOF
+#include <sys/cdefs.h>
+char a __section(".data.a") = 'a';
+char b __section(".data.b") = 'b';
+char c __section(".data.c") = 'c';
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -c test.c
+
+ cat > test.x << EOF
+SECTIONS {
+ .data : {
+ *(.data)
+ *(.data.a)
+ }
+}
+SECTIONS {
+ .data : {
+ *(.data)
+ *(.data.b)
+ }
+}
+EOF
+ atf_check -s exit:0 -o ignore -e ignore \
+ ld -r -T test.x -Map test.map -o test.ro test.o
+ extract_section_names test.ro >test.secs
+ extract_symbol_names test.ro >test.syms
+ assert_nosec '\.data\.a'
+ assert_nosec '\.data\.b'
+ assert_sec '\.data\.c'
+}
+
+################################################################################
+
+order_require_progs="cc ld readelf nm sed grep"
+
+order_assert_ascending() {
+ order_assert_order a b c
+}
+
+order_assert_descending() {
+ order_assert_order c b a
+}
+
+order_assert_order() {
+ order_compile
+ order_link
+ {
+ match $1 && match $2 && match $3
+ } <test.syms
+ atf_check test "$?" -eq 0
+}
+
+order_compile() {
+ for i in a b c; do
+ cat > $i.c << EOF
+#include <sys/cdefs.h>
+char $i __section(".data.$i") = '$i';
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -c $i.c
+ done
+ cat > test.c << EOF
+int main(void) { return 0; }
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -c test.c
+}
+
+order_link() {
+ # c -> b -> a
+ atf_check -s exit:0 -o ignore -e ignore \
+ ld -r -T test.x -Map test.map -o x.o c.o b.o a.o
+ atf_check -s exit:0 -o ignore -e ignore \
+ cc -o test test.o x.o
+ extract_symbol_names test |
+ grep '^[abc]$' >test.syms
+}
+
+extract_section_names() {
+ readelf -S "$1" |
+ sed -ne '/\] \./ { s/^.*\] //; s/ .*$//; p }'
+}
+
+extract_symbol_names() {
+ nm -n "$1" |
+ sed -e 's/^.* //'
+}
+
+match() {
+ read line
+ case "$line" in
+ *"$1"*) return 0;
+ esac
+ return 1
+}
+
+assert_sec() {
+ atf_check -s exit:0 -o ignore -e ignore \
+ grep "^$1\$" test.secs
+}
+
+assert_nosec() {
+ atf_check -s exit:1 -o ignore -e ignore \
+ grep "^$1\$" test.secs
+}
+
+################################################################################
+
+atf_init_test_cases()
+{
+ atf_add_test_case order_default
+ atf_add_test_case order_merge
+ atf_add_test_case order_reorder
+ atf_add_test_case order_sort
+ atf_add_test_case multisec
+}
diff --git a/contrib/netbsd-tests/usr.bin/ld/t_section.sh b/contrib/netbsd-tests/usr.bin/ld/t_section.sh
new file mode 100755
index 0000000..03c12e4
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/ld/t_section.sh
@@ -0,0 +1,100 @@
+# $NetBSD: t_section.sh,v 1.4 2015/02/17 11:51:04 martin Exp $
+#
+# Copyright (c) 2014 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+################################################################################
+
+atf_test_case startstop
+startstop_head() {
+ atf_set "descr" "check if __start_*/__stop_* symbols are generated"
+ atf_set "require.progs" "cc"
+}
+
+startstop_body() {
+ cat > test.c << EOF
+#include <sys/cdefs.h>
+int i __section("hoge");
+extern int __start_hoge[], __stop_hoge[];
+int main(void) { return __start_hoge[0] + __stop_hoge[0]; }
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -o test test.c
+}
+
+################################################################################
+
+atf_test_case orphan
+orphan_head() {
+ atf_set "descr" "check orphan section placement"
+ atf_set "require.progs" "cc" "readelf" "grep"
+}
+
+orphan_body() {
+ cat > test.c << EOF
+#include <sys/cdefs.h>
+/* read-only orphan */
+const char a[] __section("hoge") = "hoge";
+/* read-write orphan */
+char b[] __section("fuga") = { 'f', 'u', 'g', 'a', '\0' };
+/* .data */
+int c[1024] = { 123, 20, 1, 0 };
+/* .bss */
+int d = 0;
+/* .text */
+int main(void) { return 0; }
+EOF
+ atf_check -s exit:0 -o ignore -e ignore cc -o test test.c
+ readelf -S test |
+ grep ' \.text\| hoge\| \.data\| fuga\| \.bss' >test.secs
+ {
+ # Read-only orphan sections are placed after well-known
+ # read-only sections (.text, .rodata) but before .data.
+ match ".text" &&
+ match "hoge" &&
+ # Read-write orphan sections are placed after well-known
+ # read-write sections (.data) but before .bss.
+ match ".data" &&
+ match "fuga" &&
+ match ".bss" &&
+ :
+ } < test.secs
+ atf_check test "$?" -eq 0
+}
+
+match() {
+ read line
+ case "$line" in
+ *"$1"*) return 0;
+ esac
+ return 1
+}
+
+################################################################################
+
+atf_init_test_cases()
+{
+ atf_add_test_case startstop
+ atf_add_test_case orphan
+}
diff --git a/contrib/netbsd-tests/usr.bin/make/t_make.sh b/contrib/netbsd-tests/usr.bin/make/t_make.sh
index 70c3ead..42fd795 100755
--- a/contrib/netbsd-tests/usr.bin/make/t_make.sh
+++ b/contrib/netbsd-tests/usr.bin/make/t_make.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_make.sh,v 1.6 2014/08/23 16:26:13 apb Exp $
+# $NetBSD: t_make.sh,v 1.7 2015/01/27 12:57:14 martin Exp $
#
# Copyright (c) 2008, 2010, 2014 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -31,6 +31,17 @@ run_and_check()
local atfname="${1}"; shift
local makename="${1}"; shift
+ # these tests fail since the backout of the patch in PR
+ # 49085 - adjust for more concrete PR if there is one
+ case ${makename} in
+ escape) atf_expect_fail "see PR toolchain/49085";;
+ impsrc) atf_expect_fail "see PR toolchain/49085";;
+ phony*) atf_expect_fail "see PR toolchain/49085";;
+ posix1) atf_expect_fail "see PR toolchain/49085";;
+ suffixes) atf_expect_fail "see PR toolchain/49085"
+ atf_fail "this uses up all memory and then fails";;
+ esac
+
local srcdir="$(atf_get_srcdir)"
local testdir="$(atf_get_srcdir)/unit-tests"
diff --git a/contrib/netbsd-tests/usr.bin/netpgpverify/Testspec b/contrib/netbsd-tests/usr.bin/netpgpverify/Testspec
new file mode 100644
index 0000000..d04f4ad
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/netpgpverify/Testspec
@@ -0,0 +1,114 @@
+#! /bin/sh
+
+# $NetBSD: Testspec,v 1.2 2016/06/01 14:52:56 agc Exp $
+
+# Copyright (c) 2016 Alistair Crooks <agc@NetBSD.org>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+TESTNAME=netpgpverify
+
+TESTSET_1_NAME=rsa_signatures
+TESTSET_1_FILES='
+a.gpg
+b.gpg
+det
+det.sig
+jj.asc
+pubring.gpg
+NetBSD-6.0_hashes.asc:gzip
+expected16
+expected17
+expected18
+expected19
+expected20
+expected21
+expected22
+expected23
+expected24
+expected25
+expected26
+expected27
+expected28
+expected29
+expected30
+expected31
+expected32
+expected33
+expected34
+expected35
+'
+TESTSET_1_CASE_1="-s eq:0 -o file:1.expected -e empty b2e < 1.in"
+TESTSET_1_CASE_2="-s eq:0 -o file:2.expected -e empty b2e < 2.in"
+
+TESTSET_1_CASE_1="-s eq:0 -o file:expected16 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c verify b.gpg"
+DISABLE_TESTSET_1_CASE_2="-s eq:0 -o file:expected17 -e empty netpgpverify -c verify a.gpg"
+TESTSET_1_CASE_3="-s eq:0 -o file:expected18 -e empty env TZ=US/Pacific netpgpverify -c verify a.gpg"
+TESTSET_1_CASE_4="-s eq:0 -o file:expected19 -e empty env TZ=US/Pacific netpgpverify -c verify NetBSD-6.0_RC2_hashes.asc"
+TESTSET_1_CASE_5="-s eq:0 -o file:expected20 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat jj.asc"
+TESTSET_1_CASE_6="-s eq:0 -o file:expected21 -e empty env TZ=US/Pacific netpgpverify < a.gpg"
+TESTSET_1_CASE_7="-s eq:0 -o file:expected22 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < jj.asc"
+TESTSET_1_CASE_8="-s eq:0 -o file:expected23 -e empty env TZ=US/Pacific netpgpverify < NetBSD-6.0_RC2_hashes.asc"
+TESTSET_1_CASE_9="-s eq:0 -o file:expected24 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < b.gpg"
+DISABLE_TESTSET_1_CASE_10="-s eq:0 -o file:expected25 -e empty netpgpverify NetBSD-6.0_RC1_hashes.gpg"
+DISABLE_TESTSET_1_CASE_11="-s eq:0 -o file:expected26 -e empty netpgpverify < NetBSD-6.0_RC1_hashes.gpg"
+TESTSET_1_CASE_12="-s eq:0 -o file:expected27 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < NetBSD-6.0_hashes.asc"
+TESTSET_1_CASE_13="-s eq:0 -o file:expected28 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg NetBSD-6.0_hashes.asc"
+DISABLE_TESTSET_1_CASE_14="-s eq:0 -o file:expected29 -e empty netpgpverify NetBSD-6.0_RC1_hashes_ascii.gpg"
+DISABLE_TESTSET_1_CASE_15="-s eq:0 -o file:expected30 -e empty netpgpverify < NetBSD-6.0_RC1_hashes_ascii.gpg"
+TESTSET_1_CASE_16="-s eq:0 -o file:expected31 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat b.gpg b.gpg b.gpg"
+TESTSET_1_CASE_17="-s eq:0 -o file:expected32 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg b.gpg b.gpg b.gpg"
+TESTSET_1_CASE_18="-s eq:0 -o file:expected33 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat b.gpg jj.asc b.gpg"
+TESTSET_1_CASE_19="-s eq:0 -o file:expected34 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg det.sig"
+TESTSET_1_CASE_20="-s eq:0 -o file:expected35 -e empty env TZ=US/Pacific netpgpverify -c cat -k pubring.gpg det.sig"
+DISABLE_TESTSET_1_CASE_21="-s eq:0 -o file:expected46 -e empty netpgpverify -k problem-pubring.gpg NetBSD-6.0_hashes.asc"
+
+TESTSET_2_NAME=dsa_signatures
+TESTSET_2_FILES='
+dsa-pubring.gpg
+in1.gpg
+in1.asc
+in2.gpg
+in2.asc
+expected36
+expected37
+expected38
+expected39
+expected40
+expected41
+expected42
+expected43
+expected44
+expected45
+expected46
+'
+TESTSET_2_CASE_1="-s eq:0 -o file:expected36 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in1.gpg"
+TESTSET_2_CASE_2="-s eq:0 -o file:expected37 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg < in1.gpg"
+TESTSET_2_CASE_3="-s eq:0 -o file:expected38 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in1.asc"
+TESTSET_2_CASE_4="-s eq:0 -o file:expected39 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg < in1.asc"
+TESTSET_2_CASE_5="-s eq:0 -o file:expected40 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg -c cat in1.gpg"
+TESTSET_2_CASE_6="-s eq:0 -o file:expected41 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg -c cat < in1.gpg"
+TESTSET_2_CASE_7="-s eq:0 -o file:expected42 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg -c cat in1.asc"
+TESTSET_2_CASE_8="-s eq:0 -o file:expected43 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg -c cat < in1.asc"
+TESTSET_2_CASE_9="-s eq:0 -o file:expected44 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in2.gpg"
+TESTSET_2_CASE_10="-s eq:0 -o file:expected45 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in2.asc"
diff --git a/contrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh b/contrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh
index 110761c..2d532c0 100755
--- a/contrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh
+++ b/contrib/netbsd-tests/usr.bin/netpgpverify/t_netpgpverify.sh
@@ -1,10 +1,14 @@
#! /bin/sh
-# $NetBSD: t_netpgpverify.sh,v 1.1 2012/11/20 07:55:54 agc Exp $
+# $NetBSD: t_netpgpverify.sh,v 1.4 2016/08/28 15:59:15 christos Exp $
-# Copyright (c) 2012 Alistair Crooks <agc@NetBSD.org>
+#
+# Copyright (c) 2016 The NetBSD Foundation, Inc.
# All rights reserved.
#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Alistair Crooks (agc@NetBSD.org)
+#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
@@ -14,25 +18,53 @@
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
#
-atf_test_case netpgpverify_case
+# Define test sets with atf_test_case
+# There may well be only one test set - these are tests for different
+# functionality, so netpgpverify has 2 sets, 1 for RSA and 1 for DSA
+# each test set has a
+# + *_head() function, to define the set, and
+# + *_body(), to set up the supporting input and expected output files
+# and some atf_check calls, which actually carry out the tests
-netpgpverify_rsa_head() {
- atf_set "descr" "RSA signatures for netpgpverify"
-}
+# any binary files should be uuencoded
+# we need to give the input and expected output files like this as tests
+# take place in a clean directory, so we need to be able to set them up
+# from the shell script
-netpgpverify_rsa_body() {
+# Test set 1 (rsa_signatures) for netpgpverify
+atf_test_case netpgpverify_testset_1_rsa_signatures
+
+netpgpverify_testset_1_rsa_signatures_head() {
+ atf_set "descr" "Test set 1 (rsa_signatures) for netpgpverify"
+}
+netpgpverify_testset_1_rsa_signatures_body() {
+ uudecode << EOF
+begin-base64 644 a.gpg
+owGbwMvMwMQonXHnz4HIDGXGNduSGBPD/Rq2KSuo+KWWOAW7WCn4JmanpmXmpOqU
+KRjqGSoYGRga6Rsa6hsZKBiYW5maWpmaKCSmJyu4VhQoqHBx6WXmJeeUpqQq2CQV
+p+jll+fp5WbbcXGFuAaHBLt4BtkqqFSD2U6Owa61+qXFRXpJmXn6eaklBekFZalF
+mWmVUMXxwR7atgol8ahSqMaXpBaXgM3vZJRhYWBkYmBjZQK5noGLUwDmp2X32f/X
+n4pynyaz+0jbeluli8/NgkI2bK65Ud+ecUelqkvNaXlNVo3TKyX9TuNUpmX3l7l2
+t2xy4e8veH8/OpurgK9V4EXAB98rbddTgtpzTxhuWH5x0Qf3O0xOzL5MR5SfLH7/
+zJMl72uqUExspt5UJuXIEw+LTj2JKfA7Mcl219+lKebOVlfqpA20HzSeXmaatynY
+NrX2BWfpS++vxxJiWL/wtLvzSVk/uZVunlXBsfDV/rbUxFDGPdMuNT/98f6cQ1Fz
+/+nLOY84rsk7K/NnulZuvNzb9jw3Qv58qPvep1saRDy6XhcUxhwOmZvh1DvLz/HG
+HNZMdVcl/iahoFURvHryU72zzz5eKXgoSc0SAA==
+====
+EOF
uudecode << EOF
begin-base64 644 b.gpg
xA0DAAgBG2jc/MBZaCMBy4tiAAAAAABQUk9HPXAKU1JDUz1wYXJzZS5jCldBUk5T
@@ -47,23 +79,14 @@ XxejP0Thtft0T+AKTANVrtx+aTseVt4CR3jBt0n4CJjTTRQwnIYxGML3ddgMXSPT
0c4J/4dwyMqdDuhby//52Nw=
====
EOF
- cat >det << EOF
-To Do
-=====
-tests with -k sig
-detached sigs
-DSA
-
-Done
+ uudecode << EOF
+begin-base64 644 det
+VG8gRG8KPT09PT0KdGVzdHMgd2l0aCAtayBzaWcKZGV0YWNoZWQgc2lncwpEU0EK
+CkRvbmUKPT09PQpiYXNpY3MKbG9jYWxpc2UgcGdwX3JlYWRfcGFja2V0cwpmaXgg
+bGludApXQVJOUz01CmxpYiBtYW4gcGFnZQpwcm9nIG1hbiBwYWdlCmRvIHdlIGRv
+IGl0IHN0YXRpY2FsbHkgbGlua2VkIGFzIHdlbGw/Cm11bHRpcGxlIGZpbGVzIGlu
+IG5ldHBncHZlcmlmeQo=
====
-basics
-localise pgp_read_packets
-fix lint
-WARNS=5
-lib man page
-prog man page
-do we do it statically linked as well?
-multiple files in netpgpverify
EOF
uudecode << EOF
begin-base64 644 det.sig
@@ -75,39 +98,24 @@ X66bHxCHtRyGcWsHU8Ab2fJCvsCbBBMtg3JjZ7+VgDoZqPqBgIkhmppqC05vU5QR
leNo8g9OwiJ6fMtdwTMsFkxqjjVKk5//X/6jQd/mf55XcxLOw4UK4ev5ADExnOU=
====
EOF
- cat >jj.asc << EOF
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-1. tag & 0x3f
-2. len
-
-one pass (tag 4)
-========
-b version:3
-b sig type
-b hash alg
-b pubkey alg
-8b keyid
-
-literal data (tag 11)
-=============
-b binary/text
-b length
-c string
-L mtime
-text
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.11 (NetBSD)
-
-iQEcBAEBAgAGBQJQaIZcAAoJEBto3PzAWWgj678IALbDHon3Rm6qUhn7k1TFT6D3
-yi/jzf3piSJGsgUg2wEghs175edC/cJK3lG9Gx/3/uQq06R9g37nVRX8I0sK7yT2
-XgR+RHoGh/b+CQxdRNC+ub5QoNb8LcmCb/MQGq2KK9otSExiy4WMUP4K1DblaK5L
-+Hg4VTooMot1NVqyFSoB2aZauXc2F4ZVh5q0fn8w5GEw45P+AUUbmzpgbLwXbl+I
-tMsX54V1dxyDcCYUs0xUH/VxJUQEeIlDbCOXYMbCVtggYRqKksTr+u/riw/Llnql
-jQdq5rBRW1SlD7Ll6z/LF2WBJOWtHzp4qbnBGSq5uB1q37H3mWL28f1tL//TUjM=
-=EX8W
------END PGP SIGNATURE-----
+ uudecode << EOF
+begin-base64 644 jj.asc
+LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQpIYXNoOiBTSEExCgox
+LiB0YWcgJiAweDNmCjIuIGxlbgoKb25lIHBhc3MgKHRhZyA0KQo9PT09PT09PQpi
+IHZlcnNpb246MwpiIHNpZyB0eXBlCmIgaGFzaCBhbGcKYiBwdWJrZXkgYWxnCjhi
+IGtleWlkCgpsaXRlcmFsIGRhdGEgKHRhZyAxMSkKPT09PT09PT09PT09PQpiIGJp
+bmFyeS90ZXh0CmIgbGVuZ3RoCmMgc3RyaW5nCkwgbXRpbWUKdGV4dAotLS0tLUJF
+R0lOIFBHUCBTSUdOQVRVUkUtLS0tLQpWZXJzaW9uOiBHbnVQRyB2MS40LjExIChO
+ZXRCU0QpCgppUUVjQkFFQkFnQUdCUUpRYUlaY0FBb0pFQnRvM1B6QVdXZ2o2NzhJ
+QUxiREhvbjNSbTZxVWhuN2sxVEZUNkQzCnlpL2p6ZjNwaVNKR3NnVWcyd0VnaHMx
+NzVlZEMvY0pLM2xHOUd4LzMvdVFxMDZSOWczN25WUlg4STBzSzd5VDIKWGdSK1JI
+b0doL2IrQ1F4ZFJOQyt1YjVRb05iOExjbUNiL01RR3EyS0s5b3RTRXhpeTRXTVVQ
+NEsxRGJsYUs1TAorSGc0VlRvb01vdDFOVnF5RlNvQjJhWmF1WGMyRjRaVmg1cTBm
+bjh3NUdFdzQ1UCtBVVVibXpwZ2JMd1hibCtJCnRNc1g1NFYxZHh5RGNDWVVzMHhV
+SC9WeEpVUUVlSWxEYkNPWFlNYkNWdGdnWVJxS2tzVHIrdS9yaXcvTGxucWwKalFk
+cTVyQlJXMVNsRDdMbDZ6L0xGMldCSk9XdEh6cDRxYm5CR1NxNXVCMXEzN0gzbVdM
+MjhmMXRMLy9UVWpNPQo9RVg4VwotLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0K
+====
EOF
uudecode << EOF
begin-base64 644 pubring.gpg
@@ -515,8074 +523,6599 @@ ijaSDfX/EpCVyoua0S63m4xuuOp5bPsgKs0EMOWVlVhKDfxAQNDh9I+Rh3TSDlo9
StZtC+VbuN66pfHwsAIAAw==
====
EOF
- cat >NetBSD-6.0_hashes.asc << EOF
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-
-
-The following is a complete list of distribution files for NetBSD-6.0
-
-This includes all binary distributions, kernels, install images,
-source tarballs, release notes and related files. Multiple hash
-formats are used for each file.
-
-Signatures will be made available for any additional install media as
-they are published.
-
-UPDATE: the macppc ISO was replaced, the mac68k and source ISOs were added,
-and a new signature was generated for this hashes file on 15 October 2012.
-
- NetBSD Security-Officer
- security-officer@NetBSD.org
-
-SHA1 (NetBSD-6.0/CHANGES) = 44ed658e4f8c813d67613497afdc6656470aab00
-SHA512 (NetBSD-6.0/CHANGES) = ababa97f9674bfaa4d941515cff2b98a1c254221394e10f3060f456474f6888f5e79aa6480bebb6f69dc1e682cd8f4c450feee91c0da1a2ed1fc805bd1dec273
-RMD160 (NetBSD-6.0/CHANGES) = 2a0ed7457dfe13229bb72cfde66668ffff4ec7ff
-MD5 (NetBSD-6.0/CHANGES) = 63363144027cac2345030caf2d934d05
-SHA1 (NetBSD-6.0/CHANGES-6.0) = 159eef1002f7e904954fb3bd9490ac2e5391fdbb
-SHA512 (NetBSD-6.0/CHANGES-6.0) = f09bf320629f6db65a469c4220eebd8db668a81fcc1a8d41b9fb06bbadbcdafd76c9d6372d8d9e5258af8424abf648d1114da2eef3ae9b396642b9b3aba434ec
-RMD160 (NetBSD-6.0/CHANGES-6.0) = b03df64c3b4081c56578066c23a24db14ae935e1
-MD5 (NetBSD-6.0/CHANGES-6.0) = 92a82839d67702799f45da9167b0a60e
-SHA1 (NetBSD-6.0/CHANGES.prev) = 25bdfe4a49acc75ee3a59ca04dc3b3c7c71a4563
-SHA512 (NetBSD-6.0/CHANGES.prev) = 73057475c27c98d729dc97f6203f89f39459405c74f7abd7b18d4382f7c5ad6c3f598989cecdd5013ba4b77d66e694c05e3fcd51fd9776fde908513ea70e63d5
-RMD160 (NetBSD-6.0/CHANGES.prev) = 38f959a7c9d0c8da19eeb1740126b04dbb71a90e
-MD5 (NetBSD-6.0/CHANGES.prev) = 0a50635a033237b439f5d7ef4c29b802
-SHA1 (NetBSD-6.0/LAST_MINUTE) = 49f8a218ff6657e0d30449a87b7c4f65ccf6115b
-SHA512 (NetBSD-6.0/LAST_MINUTE) = d6b47cdd24a6be60d68f867c361106da69dea5f9b7f4f9764d1bd0f706e8fc9d604a6b89b95eb2829dba78df936f824be3dec21318da495705796a1882ee9277
-RMD160 (NetBSD-6.0/LAST_MINUTE) = ba07328d66f7955cc9fcb402e461871bfcf2aad3
-MD5 (NetBSD-6.0/LAST_MINUTE) = fb247c08580991ef0cc5f126b62f3b6e
-SHA1 (NetBSD-6.0/README.files) = 183b12bef627768c595ab7df30bc038952166809
-SHA512 (NetBSD-6.0/README.files) = 9aacd7e1042c7579309ed9ec1ee0fb017803f967be04e51f08e78fd56537ceae6ee79ed0bd3250994e4c16dd7de6995c1be3a301aeb95a500bbc77f6915ecb31
-RMD160 (NetBSD-6.0/README.files) = 61301ea3ffe6a3e1c415ce00cfe6d22b2d544365
-MD5 (NetBSD-6.0/README.files) = 7e47e7eb92db7cb8b8ce39ceb5986847
-SHA1 (NetBSD-6.0/acorn26/binary/kernel/netbsd-FOURMEG.gz) = e127c41d5e332c75e79f5ca0e72ba250ef3c739a
-SHA512 (NetBSD-6.0/acorn26/binary/kernel/netbsd-FOURMEG.gz) = 7487273a4289d2f1dd69fb0230c263ac4fd198aac5399de043e1416834ea4b0bb4970129886223b9c5090ea9526dd765e6152f89ccfa58d4c8ba95597a845a34
-RMD160 (NetBSD-6.0/acorn26/binary/kernel/netbsd-FOURMEG.gz) = 09dcd3b8f9be85b99ed094fefc6a88e27be9b91d
-MD5 (NetBSD-6.0/acorn26/binary/kernel/netbsd-FOURMEG.gz) = 5aef629404b3d65f15bc44554b948145
-SHA1 (NetBSD-6.0/acorn26/binary/kernel/netbsd-GENERIC.gz) = c6362b83dbc496509c4e539cca33924b14318804
-SHA512 (NetBSD-6.0/acorn26/binary/kernel/netbsd-GENERIC.gz) = da75edae5fcd456028c5699d3872ac6e9c041aafb37141cfbf6b5f374f5c69d21979d23709f7e82a9198580e6f5c3c50060b9d1cd3dcac74c1e2530131c5e892
-RMD160 (NetBSD-6.0/acorn26/binary/kernel/netbsd-GENERIC.gz) = 6caa2f5e65c871664b1af2dd2a5eceb8b64f2212
-MD5 (NetBSD-6.0/acorn26/binary/kernel/netbsd-GENERIC.gz) = b14bd857ffbe97a3601f91bc0a1b388d
-SHA1 (NetBSD-6.0/acorn26/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/acorn26/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/acorn26/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/acorn26/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/acorn26/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/acorn26/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/acorn26/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/acorn26/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/acorn26/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/acorn26/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/acorn26/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/acorn26/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xbase.tgz) = 875fd641f969ec00f854ca1334d084947450c740
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xbase.tgz) = 75d0c9e9685b6b7bb706df7427c8b52f59c4fc4d0e725b02ee18024f75a546dc41de5f1a5d8552a8d2c84bdf87856e5857b0f12914801ca7b36b69536d617b4e
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xbase.tgz) = 1a4d099d59b2bd882e99f1b2df1c7bf22b890d48
-MD5 (NetBSD-6.0/acorn26/binary/sets/xbase.tgz) = 5eb9c573c5a0c96701f268a3470a58b9
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/acorn26/binary/sets/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/acorn26/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/acorn26/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/acorn26/binary/sets/xserver.tgz) = 4ccfef1d49179603286042088bec0218c6b2031d
-SHA512 (NetBSD-6.0/acorn26/binary/sets/xserver.tgz) = 809fc0a9065c1b9e7cd17aeb0d41cfd3158efd6c585556af01c4a3c93f0df3646a2ff77c6994449a703a408c0988fc1aa68cf34c7e297a3056d73ded57034c12
-RMD160 (NetBSD-6.0/acorn26/binary/sets/xserver.tgz) = 403604404261764c74f10fab774c4653fd20cc9b
-MD5 (NetBSD-6.0/acorn26/binary/sets/xserver.tgz) = 914f909b6878cef16a92765a8cbb52ca
-SHA1 (NetBSD-6.0/acorn26/binary/sets/kern-FOURMEG.tgz) = 3e74d7ca4f0ad181d8f37a28fc179fe4fdc3521f
-SHA512 (NetBSD-6.0/acorn26/binary/sets/kern-FOURMEG.tgz) = 794689c5f293ed453fe424f3e1cd45bdf6127a08da0e6ded9b6f3c8afe0af6f65b1ca1aca96db5b8a4891102f38b2895aca82bba0dce8ee1389f2eb439ce11b7
-RMD160 (NetBSD-6.0/acorn26/binary/sets/kern-FOURMEG.tgz) = 66e7db127f67cf318789d74d7bdf5a57fdb922ed
-MD5 (NetBSD-6.0/acorn26/binary/sets/kern-FOURMEG.tgz) = f26ed42c971ee7ce64682f5fa5a5c2b5
-SHA1 (NetBSD-6.0/acorn26/binary/sets/base.tgz) = 48cf8b5b14a8a61a85bf8bfa1ae739ef599a17e6
-SHA512 (NetBSD-6.0/acorn26/binary/sets/base.tgz) = f68d2d3e80b88fad8ff98a9bfdac7cc039d51e766130d3cade364a83bede6c6984c0cbcc56588f81760e6754ebbb08ad444fe4dd006e8ef91a3bc4e66c777e4a
-RMD160 (NetBSD-6.0/acorn26/binary/sets/base.tgz) = 090a8ef5abfede25635b86e1ed989bd8c7b988e5
-MD5 (NetBSD-6.0/acorn26/binary/sets/base.tgz) = 6ea39b172012faf2bdbcb861d0de443c
-SHA1 (NetBSD-6.0/acorn26/binary/sets/comp.tgz) = 8d6222fb0ba80750737719e3c9eb4d42aef1c92e
-SHA512 (NetBSD-6.0/acorn26/binary/sets/comp.tgz) = eeacb62b5075abfd130a4ee4bcc8b3ada6fe2e3b4ad95cfa65fb45e61956092368c9e7dd90b7fbfefd7d96162890d23872d3bc4ad92488d92a50738d59629f9c
-RMD160 (NetBSD-6.0/acorn26/binary/sets/comp.tgz) = adc77379342aa005884eb58a65a8d57d07e63853
-MD5 (NetBSD-6.0/acorn26/binary/sets/comp.tgz) = a660a76cb874c828690f5a128ff61501
-SHA1 (NetBSD-6.0/acorn26/binary/sets/etc.tgz) = 183e6af0c9ddf7c62218f3616129ed1223e0fd0b
-SHA512 (NetBSD-6.0/acorn26/binary/sets/etc.tgz) = 0c9967126ddf9cdfdf568b6a7183bd9a17a119798f318f511ec9b9351770ffb8a394d57ccf09ce1e38b4e56d836f4ab61c943e81d932007e8726819733b0b108
-RMD160 (NetBSD-6.0/acorn26/binary/sets/etc.tgz) = 92fab0f295c28c53f693444918b12bc026596a3f
-MD5 (NetBSD-6.0/acorn26/binary/sets/etc.tgz) = 1c4124013d68bbf2b85d3025aab1a0a9
-SHA1 (NetBSD-6.0/acorn26/binary/sets/kern-GENERIC.tgz) = 86de3875a3df7b400d86d2f97ea02067dac49288
-SHA512 (NetBSD-6.0/acorn26/binary/sets/kern-GENERIC.tgz) = c3eb9e9e696c7f166c9da1acdbf14b314863f68a5af5786c9d79c5e2ffd9c70ad366a6cec7ff0858ffae2ab8e028c0224b091de5bfcfad6a4ae5327709c7981e
-RMD160 (NetBSD-6.0/acorn26/binary/sets/kern-GENERIC.tgz) = f2b59e92e18402c2e96a4b254fa18f21b339629c
-MD5 (NetBSD-6.0/acorn26/binary/sets/kern-GENERIC.tgz) = 107061f8599c58b8a982c7f6b96e0fd3
-SHA1 (NetBSD-6.0/acorn26/binary/sets/modules.tgz) = 2e72e54d98a0bae829f2fdd53a9a927a4269fe83
-SHA512 (NetBSD-6.0/acorn26/binary/sets/modules.tgz) = 560d27968ab9740b7fec62e5afefddc5d6db9ebb73b79c38c34ab4d609fc4cfebe8bef7e05eb5fdacc17502236ae95675e2db87e5a8c258a3633f93635fe5aae
-RMD160 (NetBSD-6.0/acorn26/binary/sets/modules.tgz) = eee9e83fc9e9936b93f382beb4f619c0d7010cd8
-MD5 (NetBSD-6.0/acorn26/binary/sets/modules.tgz) = 3e0985108f65114c721c3672279d28cb
-SHA1 (NetBSD-6.0/acorn26/binary/sets/tests.tgz) = 72b14d964822d8a2e03c4d3855c33b2d5a02bcf5
-SHA512 (NetBSD-6.0/acorn26/binary/sets/tests.tgz) = 1b87e9174bb22df4c6b894fb731c53df03af87e6dbb8b2488fec832721c3ef3508c7dac35a2f51f144c6e726a8fff61d6f66d6a5c354c11ca2f2c8fe31a7d7a8
-RMD160 (NetBSD-6.0/acorn26/binary/sets/tests.tgz) = aa26cbefa7b2891c0d2e51a5f59c123c223721ff
-MD5 (NetBSD-6.0/acorn26/binary/sets/tests.tgz) = a69e9d96707beccb4149aed72d701bfa
-SHA1 (NetBSD-6.0/acorn26/binary/sets/text.tgz) = b4974a12425354e1d6dbe8e1e7def8ca2c8bea5a
-SHA512 (NetBSD-6.0/acorn26/binary/sets/text.tgz) = 360652de2f694807759927e57beff0e60fae7855d4ab55a574e8c2d9cab25bf76bf1b880dd419c4bef6339dc72a16959f563e964644d64a81029354c87fb1b08
-RMD160 (NetBSD-6.0/acorn26/binary/sets/text.tgz) = e40abdac843b3ac9055fdacff0c74d259609886d
-MD5 (NetBSD-6.0/acorn26/binary/sets/text.tgz) = e1ad13174b20a114fd74863b8a5a0399
-SHA1 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.gz) = e7fda95700ee86c95cb2135c841840b815319eb5
-SHA512 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.gz) = 79c810a6e1f7221aacd1e7b7edca4064ec6c3b7b99bbbe7282bdec0354c9387f9170019c7e6df5ec049497d8b0a69c07aaf485dfd286069437c16b7a44dd04ab
-RMD160 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.gz) = 68c551c4746c765068cc39e81eff40d13065ac19
-MD5 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.gz) = 2f3714cfea4b8ace15469ca877ddcaf2
-SHA1 (NetBSD-6.0/acorn26/installation/misc/boot26,ffa) = 983591033b4f5301e5c3f9696b3e9037aaa11047
-SHA512 (NetBSD-6.0/acorn26/installation/misc/boot26,ffa) = 16ef2baf8d00639c68dafbf42a563815ca6a0cc51c1083820c47d10c06422abfa8257d25be675024bf674d70def6747cb70a45d2a8451551e0b7ac6915057bfe
-RMD160 (NetBSD-6.0/acorn26/installation/misc/boot26,ffa) = a517e705c94bf87b617648aee6542e8194ad29b4
-MD5 (NetBSD-6.0/acorn26/installation/misc/boot26,ffa) = ed0fd36ea9ed9893250d9f588d5c358c
-SHA1 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.symbols.gz) = 3eca116cb41df17471b9e24e453c3164bc2f6fee
-SHA512 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.symbols.gz) = e2fce3e17958cd1865c584fa3a97a061f8fef09a8793f61018144e753d4667026349747ac7d9dfa6ad70afe2c4dbfeaef1f5718430947958f34785858e2424e3
-RMD160 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.symbols.gz) = 9f25df06373241ff5dfaafa250311a4bc5020197
-MD5 (NetBSD-6.0/acorn26/installation/misc/netbsd-INSTALL.symbols.gz) = 4daa298789745793c9f9f1a03c4ecdb5
-SHA1 (NetBSD-6.0/acorn26/INSTALL.html) = e1896519f52cf8b3574c2ddad19d135e837ff05b
-SHA512 (NetBSD-6.0/acorn26/INSTALL.html) = 9951385e876eed0126a9706c5c075453fd27ef0eb8fc42fa1bdca0e100a04d5f2d269145040eaffcfb683ef63f51a574254ce02cd3d0d3449ef867205e55c49a
-RMD160 (NetBSD-6.0/acorn26/INSTALL.html) = 4e81e718d1526b61a1ebfc3dde631cc1c4f1998d
-MD5 (NetBSD-6.0/acorn26/INSTALL.html) = e77700615f6d71545079d4f98be4fda3
-SHA1 (NetBSD-6.0/acorn26/INSTALL.more) = 31ce17bd0e1a3eb8956f06af4a2635a8cea3693e
-SHA512 (NetBSD-6.0/acorn26/INSTALL.more) = c9693333dbbde859f3f8e1f5cb571e43eeac2a1727ce7e4681b4dacda1e145a54bacbb16346bed669a0f83e3592e7b824b66d0e0a2a0f39ab41891a0bee78ca5
-RMD160 (NetBSD-6.0/acorn26/INSTALL.more) = 12606307f5f4314a84d4401c5297bcf701fc1dcb
-MD5 (NetBSD-6.0/acorn26/INSTALL.more) = 2104dbaa19182d2de7416aa62b7de537
-SHA1 (NetBSD-6.0/acorn26/INSTALL.ps) = 61b3e6838c01429478fd78f84fc380a320f1b2ba
-SHA512 (NetBSD-6.0/acorn26/INSTALL.ps) = d96d21356a59e59ab344d4e4b720e9425b3e7a3f926e8e7d453f33c907eff12c9dfdb8a97133d77bafc30a7fdf5fb63ab529a73facbad6ac8f9a36c63a236db5
-RMD160 (NetBSD-6.0/acorn26/INSTALL.ps) = 50c971d098fc714fb2efe2f3e2cf49351a0f8fc5
-MD5 (NetBSD-6.0/acorn26/INSTALL.ps) = f0d32affe70e695f4bcbe2df304f6a65
-SHA1 (NetBSD-6.0/acorn26/INSTALL.txt) = 00ac475ec70626dc1041211ecd0e5c7e213af948
-SHA512 (NetBSD-6.0/acorn26/INSTALL.txt) = 816c536f0caacbf292b9b54e812dc474299ee6a1084682321039bb1d3fd725523d76666fc14c772951ca45409550a25b5b74cefa0bf3f7539a17995a56df9756
-RMD160 (NetBSD-6.0/acorn26/INSTALL.txt) = c4618e23cd501a7520502285a24dc8813e1a4913
-MD5 (NetBSD-6.0/acorn26/INSTALL.txt) = f02c846c660d531f87f85271e991c77b
-SHA1 (NetBSD-6.0/acorn32/binary/kernel/netbsd-GENERIC.gz) = 8d2b1f19b2ba2231aba8e20c14ab5fd83dde59ae
-SHA512 (NetBSD-6.0/acorn32/binary/kernel/netbsd-GENERIC.gz) = 364ad36c66788c822a3cbfd0ddffafc6d19f9bb82144be988848970b7e0b6d11c2afaf4784f2132affe6ca052c69a4595181b1c37363637bb54f849e5bf4a1dd
-RMD160 (NetBSD-6.0/acorn32/binary/kernel/netbsd-GENERIC.gz) = 02d7f52cc0c15ff1039f3767cfa3840e5551e03a
-MD5 (NetBSD-6.0/acorn32/binary/kernel/netbsd-GENERIC.gz) = 96f504edccc8d4f5657c1837cdfd2aaa
-SHA1 (NetBSD-6.0/acorn32/binary/kernel/netbsd-NC.gz) = fc98fecc5548fde9220873e791d4d4846cefe4b3
-SHA512 (NetBSD-6.0/acorn32/binary/kernel/netbsd-NC.gz) = ff106589ca7b58c2ef3146a93be72b73987c221694400f3a2256728e618a7b486f32020f031e68edade5d13b3b9584a18ca88ce3fed71f06f9b494b3cb6eb844
-RMD160 (NetBSD-6.0/acorn32/binary/kernel/netbsd-NC.gz) = 4ff74a916d3283eb80e77739fd31dcda4890658b
-MD5 (NetBSD-6.0/acorn32/binary/kernel/netbsd-NC.gz) = f3a826b7eea3f009868a5ad419b69c3c
-SHA1 (NetBSD-6.0/acorn32/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/acorn32/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/acorn32/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/acorn32/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/acorn32/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/acorn32/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/acorn32/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/acorn32/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/acorn32/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/acorn32/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/acorn32/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/acorn32/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/acorn32/binary/sets/kern-GENERIC.tgz) = 0ec8993d446ad847bf7a6154a19c638d944bd24b
-SHA512 (NetBSD-6.0/acorn32/binary/sets/kern-GENERIC.tgz) = bed0345f83d42ee18b1cb1fab95e6780a217edda00c0c548aeb99323327493d1720b615d746a4e364a5217f963f24ae55142fc943a0d95aec65d8ddff2d36045
-RMD160 (NetBSD-6.0/acorn32/binary/sets/kern-GENERIC.tgz) = 2f27e6f036ad4fb08171f93e21324b9f901b781a
-MD5 (NetBSD-6.0/acorn32/binary/sets/kern-GENERIC.tgz) = 5eed762a46bf55d66491dab47bd40f23
-SHA1 (NetBSD-6.0/acorn32/binary/sets/base.tgz) = 519435bdcdffa41f24c56796558ad43ba6c89f31
-SHA512 (NetBSD-6.0/acorn32/binary/sets/base.tgz) = b7a3f4a5627790133104674c25e434d16a0e706006352f0032a4672f624c7fbf37b0678f72f593c5e17dea469afc03e09ac914eb4a02acb47b9a5673bd7e9777
-RMD160 (NetBSD-6.0/acorn32/binary/sets/base.tgz) = caf168bcd8c374896c8a0408e3d34e9c7e6f2c7b
-MD5 (NetBSD-6.0/acorn32/binary/sets/base.tgz) = b221228a61e59d66f1b457f5dcb1b5cc
-SHA1 (NetBSD-6.0/acorn32/binary/sets/comp.tgz) = 54b3cdd58c6db224ec42033f1f40842e55625e9f
-SHA512 (NetBSD-6.0/acorn32/binary/sets/comp.tgz) = a32e6f39ea01c783e1ff603c8774130698db0056923ef4c029f29f0df20f6b63885f33a50586774bc7c12b392f278344afd3aca42112bed8a3cd14d6ef72ff7e
-RMD160 (NetBSD-6.0/acorn32/binary/sets/comp.tgz) = cde7f725c376e8c0633d821357033e742358bb28
-MD5 (NetBSD-6.0/acorn32/binary/sets/comp.tgz) = c3866ce0cbc35fc4ffc58b14cc72ed31
-SHA1 (NetBSD-6.0/acorn32/binary/sets/etc.tgz) = e7c005ca92edbf1b8225f951b95b5938a94ee651
-SHA512 (NetBSD-6.0/acorn32/binary/sets/etc.tgz) = 01b47e91a0969eb2c3d7fd7f73563e98201ab401b9069b6d5e64e878757761410b8a181fcd04b141168c851d466e6d4e1b48b540e654d1831195deecbe5c23f7
-RMD160 (NetBSD-6.0/acorn32/binary/sets/etc.tgz) = f654da0c3fa14a8d8dc3a0cdb977d98b07b0d4ac
-MD5 (NetBSD-6.0/acorn32/binary/sets/etc.tgz) = 295b42a630082e4db876d35a7e5a204c
-SHA1 (NetBSD-6.0/acorn32/binary/sets/kern-NC.tgz) = e0744de8e7bc2a5808e603563cd8201de0601323
-SHA512 (NetBSD-6.0/acorn32/binary/sets/kern-NC.tgz) = 93c2fda5dd5a16eab210f74c0cf749fd013ec3488d6424fea84d404b2db5555a449a6a0ce9d936d7e18ec93216b1fa7a914e951dba3f223ac6b4de27d1f8cd32
-RMD160 (NetBSD-6.0/acorn32/binary/sets/kern-NC.tgz) = b0be18f3134075df50daec32dc87e30f370f7531
-MD5 (NetBSD-6.0/acorn32/binary/sets/kern-NC.tgz) = 5b8eb4b95fa6151bfbcaf0f72a6f6abb
-SHA1 (NetBSD-6.0/acorn32/binary/sets/modules.tgz) = 7df712c3742771ef53b42065426e7761020cf439
-SHA512 (NetBSD-6.0/acorn32/binary/sets/modules.tgz) = 3c682c61bca3059470ea6ceaf5e40314cc1876b9b183910692a1664a975aacae619c2214695a92f68463142940640042ba48f9acb39488fddfa757ffb74eb6e4
-RMD160 (NetBSD-6.0/acorn32/binary/sets/modules.tgz) = 35fc06c8194cb14f2258ce805c1e4fb8097669d0
-MD5 (NetBSD-6.0/acorn32/binary/sets/modules.tgz) = ffbd55bff72382bbc82342bacf6840ba
-SHA1 (NetBSD-6.0/acorn32/binary/sets/tests.tgz) = 68dae6dac916379bb48be79e8b2fe49898c4cfe5
-SHA512 (NetBSD-6.0/acorn32/binary/sets/tests.tgz) = b06a5ac96d76e0521e2d6666518a1549975a4d11767264c7d3b0d3dd8afe8aaa8e4f3113095d18d74146ee7e4c17a8d8a180bb4367c9aff6359b60ec06107970
-RMD160 (NetBSD-6.0/acorn32/binary/sets/tests.tgz) = 5a4c05ecc975a7ee61eda422a7dc7a5b1084424f
-MD5 (NetBSD-6.0/acorn32/binary/sets/tests.tgz) = ef0313ce1e3aec16c96660fc0b8e691b
-SHA1 (NetBSD-6.0/acorn32/binary/sets/text.tgz) = bb5835aee28d492add5e601c1323c4c1f0ac09e0
-SHA512 (NetBSD-6.0/acorn32/binary/sets/text.tgz) = ac45662324b717ccc775d4f4adfaf6623e8383fea5c5d4177fe21f8799a2a7534faff515c979f85cac6de86f166a0fcbc1021a8b8ff2a2c787fd341a4e6a6c91
-RMD160 (NetBSD-6.0/acorn32/binary/sets/text.tgz) = 96fbbe37b32d596fad17af067c28acf08eaaaa57
-MD5 (NetBSD-6.0/acorn32/binary/sets/text.tgz) = 1ff71742549a26794970d5aaef2c5f09
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xbase.tgz) = 150aad78ea2477c5c1b395bda15bae8f0f72d36c
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xbase.tgz) = 7ff70ee14b5943899517b4a7b2422ba1c62468399f55905e595d50de15fcfa2e89281a917c96d6d36e2dec519162227f7e6809c9a1da475c68982216d9acb242
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xbase.tgz) = 0411d8686275c3d1146e42ddb69a0080bc82d950
-MD5 (NetBSD-6.0/acorn32/binary/sets/xbase.tgz) = 97aec1ef3a6ef744c85a7eaa6c403c1a
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xcomp.tgz) = 9847900750d33556792e7b62e3e0ffc3f3ea625f
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xcomp.tgz) = 010fc75bcd0355d1ea09cd8ddba94b16fab7224bec4aba26d07bf43f259b47b564fe008e6c477ce4a41161ae76dbd26d89f894ec5bf2ea7193cab2965d96de50
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xcomp.tgz) = 975dbb1ec0a8f32cee4bfe55b4adb9f617d917be
-MD5 (NetBSD-6.0/acorn32/binary/sets/xcomp.tgz) = 7e761d7288845752bf05af5ac943d158
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xetc.tgz) = 6b7815869c1c48a2efb0dfcdaae373700d5da8d9
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xetc.tgz) = 42cbbc48a006498d46221eff6403acceeaf20ee5cb4a4f368b74e5b4599cccbd54f3d83b4a55359622599184f376f6bea2f2ad0feb364ce7d0293c3fb9d5b32d
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xetc.tgz) = a60ea2e898741a2d009ca8c6c621fbcae1f1efce
-MD5 (NetBSD-6.0/acorn32/binary/sets/xetc.tgz) = 16cc8b76db930a1eb7b009e7776e2881
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xfont.tgz) = 558af1104a11439ab8c868728c55027dd5862ce8
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xfont.tgz) = fb28abf27b6cadadc9c0ca82df3025e22d4e0661dcc0488083c7339c5372acf0adea8edc848b7cea50980d971aa24f81bbda068b4b4bed6ac4cf26cc4f5b35bf
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xfont.tgz) = f6df63aefaa5c459b2c86ae79fc7b07253424c97
-MD5 (NetBSD-6.0/acorn32/binary/sets/xfont.tgz) = 498abc855e6717ab51d5d0be8fa5662d
-SHA1 (NetBSD-6.0/acorn32/binary/sets/xserver.tgz) = 292d81e44c40c73e8341d59175695b649f839baa
-SHA512 (NetBSD-6.0/acorn32/binary/sets/xserver.tgz) = 3593eeeda7a9f55ff29622c2a95672c746f9235e007b3d8e81e33829fa655d0f6bc8ba90f6ef53baad1b25789fd656d5d8ea14152a9b41abf1a1bfbd2b11937f
-RMD160 (NetBSD-6.0/acorn32/binary/sets/xserver.tgz) = e0e2425da086891061ddae334fd8e98d77c519c9
-MD5 (NetBSD-6.0/acorn32/binary/sets/xserver.tgz) = bd36f768d1488956ea90a9f13ac8929c
-SHA1 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.symbols.gz) = b155be9bb81a3c15abe2b6732d48e8bfe53abc53
-SHA512 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.symbols.gz) = a3a1c068acbe2d634da3442aac4de7107dfcaf3634be291f9c3285aeb9fa680e59acb9273774e6317f71d6f9be2e1851a0e0f60b3cc83972f3e185f3e8237522
-RMD160 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.symbols.gz) = 3ac12cb07a5e8b9810946c489b9a4c3b9aecdcbc
-MD5 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.symbols.gz) = 1fe3c151480781a09a6f642ab87b9495
-SHA1 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.gz) = dc38de07bef2736068ee9cd3103f87ea6938fd6d
-SHA512 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.gz) = 11b29549b4b8232380eb6db4bf89a979e9b2a2726a3c7ff51ab059fd4f8b6a979d2cb7fe6d0c1802e345c445989655339a9a8b8d4a10f728ac7a24bae9f1830f
-RMD160 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.gz) = 605df2071d2e590be8a4d0f83c9a55a140066bc5
-MD5 (NetBSD-6.0/acorn32/installation/kernel/netbsd-INSTALL.gz) = dbc61ce2c5adf5f8e18441138aa4ae5a
-SHA1 (NetBSD-6.0/acorn32/installation/misc/BtNetBSD.spk) = 12dac3d0059f8eef736a378bb6e026166694c1a5
-SHA512 (NetBSD-6.0/acorn32/installation/misc/BtNetBSD.spk) = f54991c3e27613ac735b1a10d5ffcc102799417a68415b74c9557657c0e714fd7faa381a3945991bd80b49cefa2ec01395d88d0e935d063ff91174a8e12887ee
-RMD160 (NetBSD-6.0/acorn32/installation/misc/BtNetBSD.spk) = 02e5c2a9d751d8236ebbd0d4151f687fdd896735
-MD5 (NetBSD-6.0/acorn32/installation/misc/BtNetBSD.spk) = 4b3907f57b03d49765f92ffff178ef40
-SHA1 (NetBSD-6.0/acorn32/installation/misc/ramdisk.fs.gz) = 73ae7358fb27f8d227e253b6f43e5fcbdd7cb5f3
-SHA512 (NetBSD-6.0/acorn32/installation/misc/ramdisk.fs.gz) = 3c68e80766ae3603b289f11469c2c80ba1ffb5eb30f323fee016d992d7d226bf1984f487ee486cb3d0b1739bf45ae3ad52ddeb5f90ff2d0abd08cafc1a181ccf
-RMD160 (NetBSD-6.0/acorn32/installation/misc/ramdisk.fs.gz) = 3320c3a2a2d0e60d55b4612811d1870a4e8b9ec1
-MD5 (NetBSD-6.0/acorn32/installation/misc/ramdisk.fs.gz) = 70f0aee2f9cfc56744c50b3bed23b5a5
-SHA1 (NetBSD-6.0/acorn32/installation/misc/boot32,ffa) = 1a8c3e3a8950e68d6fd3d22ccf985814f67e00c1
-SHA512 (NetBSD-6.0/acorn32/installation/misc/boot32,ffa) = 2f7091d17fc4c910846f5cdc8cd267eb7d4056e281175c00407ab958548c62af4936394a04bde6549223fc874df72c5c46b0d11ae32ea6970c17326b0cedc6af
-RMD160 (NetBSD-6.0/acorn32/installation/misc/boot32,ffa) = 5821041d9dff2485cba9ab49e289a0bd479fc63d
-MD5 (NetBSD-6.0/acorn32/installation/misc/boot32,ffa) = 0f03b946d6479db2aaf8088dba4632ed
-SHA1 (NetBSD-6.0/acorn32/installation/misc/splug.bas) = 19015ba8a9efd73fea65fe180596271640893d1b
-SHA512 (NetBSD-6.0/acorn32/installation/misc/splug.bas) = ef38a1da79c93ff798c858f02d3d13e88d24bd0b56808ddb71b3dd577203195a60f601aa52e37892ab164ef7dd0cd490995ac9cd689fe33282fb49435f4c4d56
-RMD160 (NetBSD-6.0/acorn32/installation/misc/splug.bas) = 3080fc8d5ff946754a33bc41e7ad83cbe1eaa0b5
-MD5 (NetBSD-6.0/acorn32/installation/misc/splug.bas) = 5596dc5df580ceb656d040393e778087
-SHA1 (NetBSD-6.0/acorn32/INSTALL.html) = d16bd043227b34d9a9c3c69f380c6c42b50d080c
-SHA512 (NetBSD-6.0/acorn32/INSTALL.html) = 629401693cb91992f46b839a34bf4c4ac704194fd8aa6be3aa51e405920b697fe961fa7320eef7a4cf804dad96891b38ca57c61ef3c0c6096bb6bc71f58e55a9
-RMD160 (NetBSD-6.0/acorn32/INSTALL.html) = 222b9b590667b0a6dfe2717bb6dc94e95a485174
-MD5 (NetBSD-6.0/acorn32/INSTALL.html) = 07466bc8646d08bee6c7030d00cc9173
-SHA1 (NetBSD-6.0/acorn32/INSTALL.more) = 011db6fc8ab7b724dc66eafb3b712e9202bb2174
-SHA512 (NetBSD-6.0/acorn32/INSTALL.more) = d13335bfe65882608362fda44f89091113e3bffb53893f15bb747aaa72eefbb24ca3fd3d72017cfc446ba49ad7c00f34436e859f71727f9e6a182766a1810a13
-RMD160 (NetBSD-6.0/acorn32/INSTALL.more) = aaa800047583e64496187a80e54d0ac3bf4c851c
-MD5 (NetBSD-6.0/acorn32/INSTALL.more) = c45c7b7fd7522e41a977ffa6a58b5a4d
-SHA1 (NetBSD-6.0/acorn32/INSTALL.ps) = 78d2daf3255e7bc61b5682d5fcfd853d7dd25883
-SHA512 (NetBSD-6.0/acorn32/INSTALL.ps) = 4aec0769a5827735e13ab61dd80b5c7254561786afe0c95ff76796a8b29ae2284c064a1a1c523120366e37197bcbfd3d588985dbaae62c9848a4669d8c797714
-RMD160 (NetBSD-6.0/acorn32/INSTALL.ps) = 764dc8cc82d5623174886f98f77d808650ef90d1
-MD5 (NetBSD-6.0/acorn32/INSTALL.ps) = fc4371f1451a03c4ea429fe029e46d9c
-SHA1 (NetBSD-6.0/acorn32/INSTALL.txt) = 9d1ed61f6916645ffa30e66b23da2d0d24e18582
-SHA512 (NetBSD-6.0/acorn32/INSTALL.txt) = 10763c9164aeb2d4070f1677b0f97ca8263ec1b9d9c017fbcf348ce302d7d846fa669b741031eef4b12c27a7d077f6af9073f7668244b1b4daa39ab426d79ec7
-RMD160 (NetBSD-6.0/acorn32/INSTALL.txt) = 755fbe335d76c9b549fae4d01120cbe00290e8ca
-MD5 (NetBSD-6.0/acorn32/INSTALL.txt) = 1a6f36bd9f77e0773aeae95de9ceed8f
-SHA1 (NetBSD-6.0/acorn32/prep.RISCOS) = 269ee721985cbc44a8056ca4804f8b2d70d52a3e
-SHA512 (NetBSD-6.0/acorn32/prep.RISCOS) = 54923d8dc59e6a3852ceab25adbced3e545de19458c412552ef0cb47534303d812e8860662025b1aa9ddf9a99bb139f4be75656ef109546a328ba57985ec2cfa
-RMD160 (NetBSD-6.0/acorn32/prep.RISCOS) = 8e3acd93d35d85062996b061cff5d7293f46ee1f
-MD5 (NetBSD-6.0/acorn32/prep.RISCOS) = 3c0e290b44f735728abd3bda8bd96a0f
-SHA1 (NetBSD-6.0/algor/binary/kernel/netbsd-P4032.gz) = e9df71ffe487dd98c1aae0c6e79fbf8e4780340a
-SHA512 (NetBSD-6.0/algor/binary/kernel/netbsd-P4032.gz) = 48673b13075fc7694dccb1a31b6121281c5c0e85c5d7107a4f9414e9888c19f07133a07e43400495dd9e11757acc2fa2269458ae4b091900772c49a944624465
-RMD160 (NetBSD-6.0/algor/binary/kernel/netbsd-P4032.gz) = 85b0c6fde5bd0f4a02f71c30ccaf35d9bc29ac19
-MD5 (NetBSD-6.0/algor/binary/kernel/netbsd-P4032.gz) = 2f041466a193e263576e80bfca3ce8ef
-SHA1 (NetBSD-6.0/algor/binary/kernel/netbsd-P5064.gz) = f230eefee689dff40a0aca1983191c2e21c7dbde
-SHA512 (NetBSD-6.0/algor/binary/kernel/netbsd-P5064.gz) = eb7fea73f29d2141f508743785ee865bd5f7ce23477fc1bf256e40a0f47de76a7cdb22bfac0cb9dce94c0e1694b1c84b1760db13ab1b34248a6e04367817214d
-RMD160 (NetBSD-6.0/algor/binary/kernel/netbsd-P5064.gz) = 355d23c8cbde9c1a92bf5f1eb4e1f1890603e7f7
-MD5 (NetBSD-6.0/algor/binary/kernel/netbsd-P5064.gz) = 5ebc249debbe1797d915529f1d469f8b
-SHA1 (NetBSD-6.0/algor/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/algor/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/algor/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/algor/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/algor/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/algor/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/algor/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/algor/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/algor/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/algor/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/algor/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/algor/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/algor/binary/sets/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/algor/binary/sets/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/algor/binary/sets/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/algor/binary/sets/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/algor/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/algor/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/algor/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/algor/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/algor/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/algor/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/algor/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/algor/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/algor/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/algor/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/algor/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/algor/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/algor/binary/sets/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/algor/binary/sets/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/algor/binary/sets/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/algor/binary/sets/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/algor/binary/sets/kern-P4032.tgz) = 810ebe688c1817dcfd7cab153a6d9997900555b8
-SHA512 (NetBSD-6.0/algor/binary/sets/kern-P4032.tgz) = 8846047a1a93d3ba853e235b2169286e09f5955d3116bd2bdb18f0d252c8b0ae0d310f3ccf6d30244d089f7b077579e8246ddb27f32ddcee26e6b7b7b2266aaa
-RMD160 (NetBSD-6.0/algor/binary/sets/kern-P4032.tgz) = 039bc25b47bc29648ebb86fad5fb52852badc0fc
-MD5 (NetBSD-6.0/algor/binary/sets/kern-P4032.tgz) = f8011c18eab0acde582df5ddda0d3a57
-SHA1 (NetBSD-6.0/algor/binary/sets/base.tgz) = 1cacc62a3d246592b148a70bef11a751b63a4810
-SHA512 (NetBSD-6.0/algor/binary/sets/base.tgz) = cd448e4f0533c50daf74ed21467409013d512e128b177c9b9ab47771d3d2cffcbe403ba207309af77eb6712d316d9db2923205765be8d9045e2b2216f94774d4
-RMD160 (NetBSD-6.0/algor/binary/sets/base.tgz) = c78efd1403b1cb3af77f5a0cbddbd095505d4f65
-MD5 (NetBSD-6.0/algor/binary/sets/base.tgz) = 33b467da96b628c9b68cd57209d353b7
-SHA1 (NetBSD-6.0/algor/binary/sets/comp.tgz) = 3e955d4a87fe115e37da729b9d2474a775614d30
-SHA512 (NetBSD-6.0/algor/binary/sets/comp.tgz) = 12ce5ac677ba9f44944f57859218d668d3d2bc3323ac5793545ca7de849480dc093f03226fed4dac42bf7a4ee69fc998b4a5e2c62607d754e0b58a3cc73d3d9d
-RMD160 (NetBSD-6.0/algor/binary/sets/comp.tgz) = 106fbdfddd7c9bd13d1b5d2111b39d4338bd8c10
-MD5 (NetBSD-6.0/algor/binary/sets/comp.tgz) = 8d493a09f9e5580f830f15a3c0b12d84
-SHA1 (NetBSD-6.0/algor/binary/sets/etc.tgz) = c0511cfd28c1b22e71166507a0f564c24015f025
-SHA512 (NetBSD-6.0/algor/binary/sets/etc.tgz) = d47fee208d0d59cf0edbbf2c75bbe404a176f66f0058db93ba553fffdc31d5b5ed6c2ba2df505f7b1576cd06cc27de5da3dfda1230927c2ac603a326aff688b2
-RMD160 (NetBSD-6.0/algor/binary/sets/etc.tgz) = 09d069cea8b5a133736d483097bcf24649f0d52a
-MD5 (NetBSD-6.0/algor/binary/sets/etc.tgz) = 4ce17fdd45c77f0d8632a836463db036
-SHA1 (NetBSD-6.0/algor/binary/sets/kern-P5064.tgz) = 1fa8786b3038a1bc218f5e8280ae3871f5687e4c
-SHA512 (NetBSD-6.0/algor/binary/sets/kern-P5064.tgz) = 0977b6911d05ee98e53841af3acff6b5f751c93841c96f3869cfad0e978596204cb22d3a1608842c36d24a50f16a35d0ec00288d56fd69e6cd33d8b2b1dc37c6
-RMD160 (NetBSD-6.0/algor/binary/sets/kern-P5064.tgz) = 8fd50961f224a94e272a15df2061f226d0d2456a
-MD5 (NetBSD-6.0/algor/binary/sets/kern-P5064.tgz) = 7932f7ce7a89995425a3e97319de27b7
-SHA1 (NetBSD-6.0/algor/binary/sets/modules.tgz) = 3627b369e3392221946d517d950da8bb6c3b6170
-SHA512 (NetBSD-6.0/algor/binary/sets/modules.tgz) = bbdaa688d423fce2ba3513727b4fd0758cb3c6b6db3147b09319990270380b4cf8feede38a2b57757095627356d6955a30d647d770d67a2bf97e66f0673e4770
-RMD160 (NetBSD-6.0/algor/binary/sets/modules.tgz) = 5040267ebae4a2069ad1b9168b31d568d2f81fca
-MD5 (NetBSD-6.0/algor/binary/sets/modules.tgz) = d3e9a884b3cef9a6ee2dd6b8c715901a
-SHA1 (NetBSD-6.0/algor/binary/sets/tests.tgz) = 76544bff809ab691a739a3ffebc3988b1473fdc2
-SHA512 (NetBSD-6.0/algor/binary/sets/tests.tgz) = 5e5709ec49a4e20f253ed5686f9fc62300b3c0aa70bc2cf036a41130803c578cc692b89fc234334723bc39f74cb0a8bd9e9be88cfa692213554713766c9a3b7b
-RMD160 (NetBSD-6.0/algor/binary/sets/tests.tgz) = 66eb344c33b3c463c3a6c3af96af263d8cb6dfe0
-MD5 (NetBSD-6.0/algor/binary/sets/tests.tgz) = 3ae196d57949ee2cb682ab871c9ef316
-SHA1 (NetBSD-6.0/algor/binary/sets/text.tgz) = fe2e0c01c5af66987eab5bb59b06fba32c006be2
-SHA512 (NetBSD-6.0/algor/binary/sets/text.tgz) = 3fdd84b91bc54bb3f045bf068d01b4b67fe35a62deffdf8b5964f5dc978d55b58b5b592c9fc9a05d40b305914ce7465981b4d55ec95571203c54f240a2bdff4c
-RMD160 (NetBSD-6.0/algor/binary/sets/text.tgz) = 420dc3d206809ea2438b82c912a041637e4d0949
-MD5 (NetBSD-6.0/algor/binary/sets/text.tgz) = b421f4428b8e52bb19e997954cb1d0ca
-SHA1 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.MP.gz) = 20bd351669d8b8c5e6ed9726567516aa2b20e101
-SHA512 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.MP.gz) = 16699cd9ff46de1282439235429a63aa38ad6eae8197f037e7f8bd2324ff696a04d4b2008723edb8bdae8e55f139024c55e3858670a3db4f6ff317fef3d39919
-RMD160 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.MP.gz) = 5897524a8bc830e819894c17803a141c65b4f417
-MD5 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.MP.gz) = 0ab46adc2ba2d37bfaac5fe5296fe616
-SHA1 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.gz) = daee92c8428d90796700da80702277f38afd7c78
-SHA512 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.gz) = 658bcdb3fe7c015e0de0d6fd795e9a9033618eb193c6e81b179b978836c93cd3b6a09f79ff4405f831f81e003bd190e91534112e9a923d10c3fb094478f4421a
-RMD160 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.gz) = 2bbdd4f11b998dbe08e2076e895785e90f17b192
-MD5 (NetBSD-6.0/alpha/binary/kernel/netbsd-GENERIC.gz) = 12d571967266dbdce4d9c0b02cda4718
-SHA1 (NetBSD-6.0/alpha/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/alpha/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/alpha/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/alpha/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/alpha/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/alpha/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/alpha/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/alpha/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.MP.tgz) = bef91c02bdb6ebd5e578bae73acbcbc5d9fcb47b
-SHA512 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.MP.tgz) = 0800ef43e76c838a4f91535fbad30adee37a4be94d01220ce3d0ca898204ef4b9140d753853faa29944ef1f0b7feff2a54551633ed10293751d0fb5c2134c858
-RMD160 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.MP.tgz) = bbc5e568ee1036473614f45ce443ae6129c2afb1
-MD5 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.MP.tgz) = 255686b1fa7b97a53599c7759fad4843
-SHA1 (NetBSD-6.0/alpha/binary/sets/base.tgz) = d6a62bc7f515a3cf470fe4298045346f79dbdfb8
-SHA512 (NetBSD-6.0/alpha/binary/sets/base.tgz) = b3eee92239be76b17cf36cf49d845123dd26853ec162d2f340338fff172af3ca20d6c85025e9a5fbc085d8522d331ecec488acc034c757f7a44d885b8f31ec41
-RMD160 (NetBSD-6.0/alpha/binary/sets/base.tgz) = 447c0754e06c36c2844563722dfd727938b7fdb5
-MD5 (NetBSD-6.0/alpha/binary/sets/base.tgz) = e898499ce51685436186e3be5227184a
-SHA1 (NetBSD-6.0/alpha/binary/sets/comp.tgz) = 3cd2356501ebeb4190de3596453b045f694f69de
-SHA512 (NetBSD-6.0/alpha/binary/sets/comp.tgz) = 51a526038f6e9cf7d787b86997abee47e9735a56f02215cd8f3260e50d2d3bd7a17d11b2f80b2010fd52640aab0afe074fa8997c3522ccf1a8463854bab9ee0b
-RMD160 (NetBSD-6.0/alpha/binary/sets/comp.tgz) = 5fd982783cb934f260a96a0f85279b07deb2b505
-MD5 (NetBSD-6.0/alpha/binary/sets/comp.tgz) = c5deb3e315f875050362df56411badcf
-SHA1 (NetBSD-6.0/alpha/binary/sets/etc.tgz) = b525757e8a68fee704bc4845c411c6e9ab06db01
-SHA512 (NetBSD-6.0/alpha/binary/sets/etc.tgz) = 4c881736688636b7376dc7f255266f606678d7fe57a9a787275dc78bbafb8c0f36948bc6b06ea853bd7d1e2dc3de90693fc518c3ffe57aa831777229d910b8c3
-RMD160 (NetBSD-6.0/alpha/binary/sets/etc.tgz) = bbacdc2a3adc49d3772faa1e60227d3f20357220
-MD5 (NetBSD-6.0/alpha/binary/sets/etc.tgz) = 5975a4d5767d0d68fd4371e32f1ebd40
-SHA1 (NetBSD-6.0/alpha/binary/sets/games.tgz) = f3c81c83cd5dd29ff44eeff54a39bc22e1739b43
-SHA512 (NetBSD-6.0/alpha/binary/sets/games.tgz) = f773dfef7f2449a7ea804e756181ea622428becff7cd86e227f8d9c33a343ea097a191c08b73f258e236695ac37df6af80ffcc930ae75a3f6bc4a542a0797673
-RMD160 (NetBSD-6.0/alpha/binary/sets/games.tgz) = 079affe9e062a8f418e15fc69dae6b19722d8e43
-MD5 (NetBSD-6.0/alpha/binary/sets/games.tgz) = 1bdf16fbef7c6ee4bc1e8f6e99cbe649
-SHA1 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.tgz) = e6e00d7a0d440b435c65b34ba6e5ea156f123f18
-SHA512 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.tgz) = b5a99efe112a3d00b4108dc632a2413c0edc72c8a4fdd4daba1c974b5f1233d48e21964e4e1f7588430d01b0813767861bc0a700910a1e288493fccf269255f3
-RMD160 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.tgz) = ccba42305acbf2080751f1b35c23a8bd2464d1c6
-MD5 (NetBSD-6.0/alpha/binary/sets/kern-GENERIC.tgz) = b05f2ce6966e37b9dd3018930753f14c
-SHA1 (NetBSD-6.0/alpha/binary/sets/modules.tgz) = 2ed2d5d8a1054fac920b44123147d1f445a8cd20
-SHA512 (NetBSD-6.0/alpha/binary/sets/modules.tgz) = e85332336dd7091fecb0d48aa772ec0f9890fae90a71bf3e79178cc319a32c7320e7e6357d4355292335809d12499875357583179199f9b0c94dedcce2bffee8
-RMD160 (NetBSD-6.0/alpha/binary/sets/modules.tgz) = 286d34676fdeb368fe4146a636878026b678afad
-MD5 (NetBSD-6.0/alpha/binary/sets/modules.tgz) = 31ddea9a696f752f01db0c8910252dbe
-SHA1 (NetBSD-6.0/alpha/binary/sets/tests.tgz) = 5a71181696e124159891257ed04551ca0fac96ed
-SHA512 (NetBSD-6.0/alpha/binary/sets/tests.tgz) = a62eb137237ed94f16b759f4b836932caf06f4fa4215126db879918e38b993349962b6cd63dc06b2516cccb2604208d12df0b599ae64c4b5bfacd8d51618be0c
-RMD160 (NetBSD-6.0/alpha/binary/sets/tests.tgz) = baaa5152926a07e890f3c6ab2e2ba0123e132d62
-MD5 (NetBSD-6.0/alpha/binary/sets/tests.tgz) = a3bfffe6cbdb12c847a397c474996dbd
-SHA1 (NetBSD-6.0/alpha/binary/sets/text.tgz) = 4087ff757867de3d1e48c7edcd0a1f63879141a2
-SHA512 (NetBSD-6.0/alpha/binary/sets/text.tgz) = 396175d3caa9afb10f69ca6724fe1544b685863edb272a36e46c6164f8a5ce8099d9ce98c988fc691e61cafa0741053b31f46af6d87873e7473ee2c7db05c5e2
-RMD160 (NetBSD-6.0/alpha/binary/sets/text.tgz) = 84877daedd720eaae66d03670b5391586cb5818d
-MD5 (NetBSD-6.0/alpha/binary/sets/text.tgz) = 3ad58e3441e75733d2bd172cc03d96c2
-SHA1 (NetBSD-6.0/alpha/binary/sets/xbase.tgz) = 8cb5878605114e42a100af9f6000da692936b458
-SHA512 (NetBSD-6.0/alpha/binary/sets/xbase.tgz) = 55901d2b29117e70ee9f60bca845a291f73c827b82a6d79d2035e8e861cc6d3553e9b698a2573af458ba7ff7f0d66c1b904e0510aac5391a768a7e85c8dcafa5
-RMD160 (NetBSD-6.0/alpha/binary/sets/xbase.tgz) = 27a6b757c2c136eb48d35e996bebae1154691620
-MD5 (NetBSD-6.0/alpha/binary/sets/xbase.tgz) = 7599e1da98dc669a5915742f46819445
-SHA1 (NetBSD-6.0/alpha/binary/sets/xcomp.tgz) = 0f7cf0e0611671bcc8763c66b6ddb96ba2b84cbc
-SHA512 (NetBSD-6.0/alpha/binary/sets/xcomp.tgz) = cabd0398fbb72d9d2c833a56c5ff77e5fcef535dd4ebb7ecf482fc278c6a05d9bdc4d0e443b2eaa9c1ba2ba6044cb066b9c10de8377bf754c3b2fde1925e90e8
-RMD160 (NetBSD-6.0/alpha/binary/sets/xcomp.tgz) = 0e6f7dfd1b78eed02bfedd4e354017d4ca193d3f
-MD5 (NetBSD-6.0/alpha/binary/sets/xcomp.tgz) = f830daacbaca8ab9bc135239ee1568ec
-SHA1 (NetBSD-6.0/alpha/binary/sets/xetc.tgz) = 392c70eb80215d3165d545e40212a8b5d0e071e1
-SHA512 (NetBSD-6.0/alpha/binary/sets/xetc.tgz) = 54d20a3d9023cb964eac1ea822cab4648ee70d4ddd4e45779077f9ee7bfeb895f06adf2ec5e6f63869c4746d89aaefad17837afe43023631a204b1e536b15447
-RMD160 (NetBSD-6.0/alpha/binary/sets/xetc.tgz) = 6308c2a5326f2e8dc958195e9c98e151c9727b06
-MD5 (NetBSD-6.0/alpha/binary/sets/xetc.tgz) = a591745a497f419dd0d277d43c2e7e1c
-SHA1 (NetBSD-6.0/alpha/binary/sets/xfont.tgz) = da7a98e196e0630e68572a298db959c1ad9e5cac
-SHA512 (NetBSD-6.0/alpha/binary/sets/xfont.tgz) = 6304ec4f69e76faaaea07f0ee720bc90dbbcb620d8980dedb6966767cd58be9ba2c8c4a7f977f4a4b9293f40dc267f7d1a92ced290e704ea6cab7f512a2e21eb
-RMD160 (NetBSD-6.0/alpha/binary/sets/xfont.tgz) = 51c4aeaae821cb352d3249f2894bbd4b90884e5b
-MD5 (NetBSD-6.0/alpha/binary/sets/xfont.tgz) = 18fdd4a9bed7c69c840cd8591c17670a
-SHA1 (NetBSD-6.0/alpha/binary/sets/xserver.tgz) = 32e0112e7e65de8beda18c41e9ddd18db5d586c9
-SHA512 (NetBSD-6.0/alpha/binary/sets/xserver.tgz) = 82587fb8cd0719eb39bc14f0e8bbf8a943d6ac710a9f4bed1ac8ea16443cf84a4f378a5dd8f077d5f8ce9213da74d6444a9da10b872f074ab45da8abc89135a5
-RMD160 (NetBSD-6.0/alpha/binary/sets/xserver.tgz) = 60936683b7027ff514f411e63c1767828afed830
-MD5 (NetBSD-6.0/alpha/binary/sets/xserver.tgz) = d8b3888a02b4e6f2198d67e731296e4a
-SHA1 (NetBSD-6.0/alpha/installation/diskimage/README.files) = 8fef6343776d407c097ffbb0622b509aa3b5d6ed
-SHA512 (NetBSD-6.0/alpha/installation/diskimage/README.files) = 0a37602db16239255dd32a5b6585a23780d9c7568e7bcdcd4f67f4cc5869ce772deda68df2428b6a8ae4e7e2e4e449f7b643d1fc5d929efa0409466a50cfaf74
-RMD160 (NetBSD-6.0/alpha/installation/diskimage/README.files) = ff4ac5a982e0c75bcc3a466b27b003da73573026
-MD5 (NetBSD-6.0/alpha/installation/diskimage/README.files) = 47f2c0383d6fc4ac6c8b25c348fa992c
-SHA1 (NetBSD-6.0/alpha/installation/diskimage/cdhdtape) = 560f896de7f7b1e2f8cb908048b3ebaeb6636263
-SHA512 (NetBSD-6.0/alpha/installation/diskimage/cdhdtape) = 10d6bd96b74b6df96c35533d14237b771d5f3f449120ea7062aff44960e8c0480048d607139ec2358961d93bba17afef407d0e775513c262e44249224ac54834
-RMD160 (NetBSD-6.0/alpha/installation/diskimage/cdhdtape) = 69eadfe52a7b4b3fe412190b7d2fd5fb83f7fe6a
-MD5 (NetBSD-6.0/alpha/installation/diskimage/cdhdtape) = 87f184344a501c90af4f7bcff11622ee
-SHA1 (NetBSD-6.0/alpha/installation/floppy/README.files) = 8fef6343776d407c097ffbb0622b509aa3b5d6ed
-SHA512 (NetBSD-6.0/alpha/installation/floppy/README.files) = 0a37602db16239255dd32a5b6585a23780d9c7568e7bcdcd4f67f4cc5869ce772deda68df2428b6a8ae4e7e2e4e449f7b643d1fc5d929efa0409466a50cfaf74
-RMD160 (NetBSD-6.0/alpha/installation/floppy/README.files) = ff4ac5a982e0c75bcc3a466b27b003da73573026
-MD5 (NetBSD-6.0/alpha/installation/floppy/README.files) = 47f2c0383d6fc4ac6c8b25c348fa992c
-SHA1 (NetBSD-6.0/alpha/installation/floppy/disk1of3) = 4d855acf87e1e1064b06c2232178d75a13c33fd3
-SHA512 (NetBSD-6.0/alpha/installation/floppy/disk1of3) = 9e86017634026e3e90a50c84a8f57badb1b7cf223aca9a643fae2bf186e443dc9eb5380cba764c89d64b7288078ca5b086b5a37b97fc47a4cc0ecfaad755af67
-RMD160 (NetBSD-6.0/alpha/installation/floppy/disk1of3) = 74abd218ad7f0299822e154ac2b420b258c83aad
-MD5 (NetBSD-6.0/alpha/installation/floppy/disk1of3) = 5a2d6e79a6714cf358c9ee8755e0aedf
-SHA1 (NetBSD-6.0/alpha/installation/floppy/disk2of3) = 4c8d4ef59efd9aeaceaef12aba4acb5c80ac3be2
-SHA512 (NetBSD-6.0/alpha/installation/floppy/disk2of3) = 72fcf5173d3b29eca98afcc9dd1c0ca172cf8509c9f449356086fcef28acff3641140745df32db394b43281a1421000959631cf55185673e430a792d026e4eb3
-RMD160 (NetBSD-6.0/alpha/installation/floppy/disk2of3) = 02ff0fdc28cb7ac47eae6869620ec5f801324654
-MD5 (NetBSD-6.0/alpha/installation/floppy/disk2of3) = 4f86d12bbbb50c2c06103f2002c88be9
-SHA1 (NetBSD-6.0/alpha/installation/floppy/disk3of3) = 4f0a721ea8eb063d964c3ec31e035f41febad205
-SHA512 (NetBSD-6.0/alpha/installation/floppy/disk3of3) = f3c66c64760246cde2e99999deac1a4dba5caa47603491de0edd47badafc5f6a08b7108e62a3e2c44d4cca55f17df48e1bc41fee948bca15d7dc0874ed321b18
-RMD160 (NetBSD-6.0/alpha/installation/floppy/disk3of3) = 1ca8581e23cc086d8bf93b39bf1efb34c8964d32
-MD5 (NetBSD-6.0/alpha/installation/floppy/disk3of3) = e558bf919697872fc6f5bfb8ef697f8f
-SHA1 (NetBSD-6.0/alpha/installation/instkernel/netbsd.symbols.gz) = 72358f5496a38794927cca6f55addc09e74983bd
-SHA512 (NetBSD-6.0/alpha/installation/instkernel/netbsd.symbols.gz) = f4fde67472e0cea2069a5d8c1a614429486c275a3ff38fd2f9c216a79749b366c79c898e9e4d58b4a2826c8b724d76b6de6b744d4eba058169ffb88b428b7790
-RMD160 (NetBSD-6.0/alpha/installation/instkernel/netbsd.symbols.gz) = 0b8b2fda5075cf789139581258d33e55e7edc18b
-MD5 (NetBSD-6.0/alpha/installation/instkernel/netbsd.symbols.gz) = 2f1474645c7c61a79af6046b873d0c53
-SHA1 (NetBSD-6.0/alpha/installation/instkernel/README.files) = 8fef6343776d407c097ffbb0622b509aa3b5d6ed
-SHA512 (NetBSD-6.0/alpha/installation/instkernel/README.files) = 0a37602db16239255dd32a5b6585a23780d9c7568e7bcdcd4f67f4cc5869ce772deda68df2428b6a8ae4e7e2e4e449f7b643d1fc5d929efa0409466a50cfaf74
-RMD160 (NetBSD-6.0/alpha/installation/instkernel/README.files) = ff4ac5a982e0c75bcc3a466b27b003da73573026
-MD5 (NetBSD-6.0/alpha/installation/instkernel/README.files) = 47f2c0383d6fc4ac6c8b25c348fa992c
-SHA1 (NetBSD-6.0/alpha/installation/instkernel/netbsd.gz) = 3057e0db687c65ad00bcc9433a8e1e8e8853b0f8
-SHA512 (NetBSD-6.0/alpha/installation/instkernel/netbsd.gz) = 72c72707e34bf282fec601e885eaa9dbfafc34dc44c97d1e100e439620ed5f3751e2b629b2b1ff40b229a29b1b217627f5fb70a198d571c0478d13d2c1f9d5e2
-RMD160 (NetBSD-6.0/alpha/installation/instkernel/netbsd.gz) = bb22d8b6c7113aad71720a489ab71dbe938e1475
-MD5 (NetBSD-6.0/alpha/installation/instkernel/netbsd.gz) = 9fece65592c8b7decdbff32513650306
-SHA1 (NetBSD-6.0/alpha/installation/netboot/netboot) = 17cf3e7f848aa8a853e322e977163547830f7357
-SHA512 (NetBSD-6.0/alpha/installation/netboot/netboot) = eb78138cdb1d289e4f39af61e24a2d0a42b5807c6869e921ffbcaf720902362f0c702ece18e1bbbb599d50b31b09ecebcaf9df5786f337ee511c0900e1bcb9cf
-RMD160 (NetBSD-6.0/alpha/installation/netboot/netboot) = 3228d2be31a224636f15cfa0f5c24cebea1d4b64
-MD5 (NetBSD-6.0/alpha/installation/netboot/netboot) = 2a71b40ce0eebc66564f796f681592b2
-SHA1 (NetBSD-6.0/alpha/INSTALL.html) = 6984fd17504c01e2c1dd83e7dbdf34bdcc7b6b1e
-SHA512 (NetBSD-6.0/alpha/INSTALL.html) = d4b63b33e62764fa6e008f5961599abf0ceb486aee59c55deb0e2f62f5e3efb0a7ec667217f72f553460d1931fff86c209345c6eccb688f67822e19f78f2b35b
-RMD160 (NetBSD-6.0/alpha/INSTALL.html) = 3d6597686d7079ca4857f5afe7fada4ddae2e4db
-MD5 (NetBSD-6.0/alpha/INSTALL.html) = c00f5ce1cc724dddfbe201deb54605d3
-SHA1 (NetBSD-6.0/alpha/INSTALL.more) = b670f381aeda31fa7a1c861aa90c8856a144460c
-SHA512 (NetBSD-6.0/alpha/INSTALL.more) = e8343ca62e59534c74a2cb3404092b71a771390943c5738c10cec908be2b202b4caafa09629b5086c0119f8c867a294fb759a76dc80705583f3db7115ad41b1c
-RMD160 (NetBSD-6.0/alpha/INSTALL.more) = 6236acfbb416a7f45499c9ba097b0ebc7df0ddc0
-MD5 (NetBSD-6.0/alpha/INSTALL.more) = c0f41cb950b8c2133e1c3d6005ed478b
-SHA1 (NetBSD-6.0/alpha/INSTALL.ps) = 902a55dd7d1b3cc6489f730e76fd8a656188ca3c
-SHA512 (NetBSD-6.0/alpha/INSTALL.ps) = 612f6a50dd02a6ef525948faaa4f77c6b60e6ea6b73fbf43fe28891523b0ba715c4c513991bbd99b36a1842c5bea3a4f59c31abcb7141af3ca77419d5ac7a399
-RMD160 (NetBSD-6.0/alpha/INSTALL.ps) = 95af61540f44c6ad5bde6110bb988b30144cac0e
-MD5 (NetBSD-6.0/alpha/INSTALL.ps) = d5cb827162bea74a99a75c4ec658cb13
-SHA1 (NetBSD-6.0/alpha/INSTALL.txt) = 00428f4fee211a107142bd3c673ac0e1bf82f8bb
-SHA512 (NetBSD-6.0/alpha/INSTALL.txt) = acc36a8ca1e2e171db9a482d5b5914cde68c2ba917478c91cbe4c6b1f14f0e46b6fc5393a6597b928b2fe043afe9373e92bc50eddaccad205b1513c9cfa5b89b
-RMD160 (NetBSD-6.0/alpha/INSTALL.txt) = c340c3eafed3235732e7bd6de8bd2e5798279a32
-MD5 (NetBSD-6.0/alpha/INSTALL.txt) = bebe671881b51664213b2b74a352ccea
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.symbols.gz) = cb8fb452336026da954a431064ac908983c73c56
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.symbols.gz) = 5ac462c2bbe07c1fc5bb719af9b8a048278c914e25c3e63a5908d04eed9b9ed3b3324af677f5910065c569e7eef9ab92fb7b23dc27a06361065193736170beb9
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.symbols.gz) = f294d6c837951cc2179aabe993db92be0507b73b
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.symbols.gz) = d5c7cba8ce43359a50bc6b41e1a59ac8
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.gz) = 0e1a51e79c8ed82328856cb4e9e1ca1f77f96ad6
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.gz) = 71822434adf5610fc6bf77371f0ea65403cbfac39194435c6fd0dcd62cfd214da5d9bd8c9a06ae300b81425339ecdca1e373e91d38870a56f1910e9e4b2f0dcb
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.gz) = 2344b490341441b4a08608454269d1bb55db13fa
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-GENERIC.gz) = fdba9cfe2198dbc3403ba5c9b251147e
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.symbols.gz) = b275c23887a6d7522777f6c70da7191ae2d3b64d
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.symbols.gz) = 30f57b1aa47d0c8dfae72063810dffda248ad25e03e432221861c4de98088eba502637675cf4d400809c6d2d45a17ee2b3ce87be4007fa8a2b86fb507d13426b
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.symbols.gz) = c98d06602cce33614079d4ac9049235aa71601f5
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.symbols.gz) = 5d2e2deeac92159eefa0c14bedb999e5
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.gz) = 22859d8f0aa148474db11e8493c1c1c5ca88a4bf
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.gz) = 5aad6a3e174330803b12b3c5566f422c96d6755e520b2bda951e7efd73f8f4bfbc0b902d7964688650717630355af96d51fed90fac5bbfe343f3c06d3354f5e6
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.gz) = 25124d4395c714580bcc3a2f8574df3d9a5e5ef4
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL.gz) = 09691319c1029293d76f2b51048cd7d8
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 1ef0dce70ce636d55eb7cb5973f335729d17826a
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 49a644ba39cd11ad2fd3c1aa27b7f2999019613bbb4731ee2098b484eee74d740baf4f67ddb7b4cdaf7f710e507ed719bc6840d704acf5ed80ce419fb8bfae1b
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 459fb44892f496a9c7b445e837d875ddc1a7f056
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 5902c6bc85313724e355e95a06e968a0
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOM0.gz) = 0f4ec7742c4c53d99cbc4b645931758d0a7ebe2a
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOM0.gz) = fa1e39362e515e808831bc81751231062ebe4987eb1790eb87cab7490697372472fac67df5d49fd41b1d6d3fbecc93f64d7c433d357c13a626636feda14f4a7e
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOM0.gz) = 2322a8960ba58563ea8507a0073c03934d8f58ad
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOM0.gz) = 31ea20a739a3e9caad0f4af0da531a0d
-SHA1 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOMU.gz) = 30bfc0edb5ec053c327cfab318877bcf633e3d26
-SHA512 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOMU.gz) = 7244306522782443df4e807ebf627eab0f6f994c3c1de9cde73781b7b8d16a2b3e7d1ab578c03bd3b2d6df19dc20485146ecb9ff920e2860a0858158509a4229
-RMD160 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOMU.gz) = bbae752f9fc5b0a9725e12aef5da652699ba614b
-MD5 (NetBSD-6.0/amd64/binary/kernel/netbsd-XEN3_DOMU.gz) = 72cc8998d1dd79b0471e4924a1ee9cbf
-SHA1 (NetBSD-6.0/amd64/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/amd64/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/amd64/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/amd64/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/amd64/binary/sets/kern-GENERIC.tgz) = 8880ef6795951dbca5379bffb7040b31e75e8217
-SHA512 (NetBSD-6.0/amd64/binary/sets/kern-GENERIC.tgz) = e1a58551a91511f0fa86ab4395a8901154e75bae344045200c1794d759cbd82c2441703123ee0c5d42561f08cb192e2bb39c57f4cb61b8fb970b579525fb1952
-RMD160 (NetBSD-6.0/amd64/binary/sets/kern-GENERIC.tgz) = be4c1cef72f8b3971890c549d908d03cf9ccae74
-MD5 (NetBSD-6.0/amd64/binary/sets/kern-GENERIC.tgz) = 60e67b64337a09d0d00bbe70c0ef43f6
-SHA1 (NetBSD-6.0/amd64/binary/sets/base.tgz) = 41f139d30b18839b0486e238bdcb1a08e084ac0f
-SHA512 (NetBSD-6.0/amd64/binary/sets/base.tgz) = 136fec9ccc141fbf39c4667f09f45ed3a7f07183c315819c391e3c47b67574d4278762e9be6ac7e325e7ebd2929dd59d1d8aa84411fb435baccf5b7d71c1e58b
-RMD160 (NetBSD-6.0/amd64/binary/sets/base.tgz) = 38903209c490bb8094061951fffc5ba7bf2cce24
-MD5 (NetBSD-6.0/amd64/binary/sets/base.tgz) = c4d69c1e245e95ee1ef891a998536f30
-SHA1 (NetBSD-6.0/amd64/binary/sets/comp.tgz) = 5d0d34f4debbf611578852fdc549197357f574c2
-SHA512 (NetBSD-6.0/amd64/binary/sets/comp.tgz) = 96cd27a092b2cbabc0f6f053d651ae94b6ec65b2c9f4812c6efd432c9ea9a321d38f8e88e6dba03ca7e6d3fe8dc2b43c3846880966964d6841d6cacb87f5c4a0
-RMD160 (NetBSD-6.0/amd64/binary/sets/comp.tgz) = 0fc9f9cef2839291204f399014f730a321ff846a
-MD5 (NetBSD-6.0/amd64/binary/sets/comp.tgz) = 1f6de4df6174d0e919b343bb0426ba92
-SHA1 (NetBSD-6.0/amd64/binary/sets/etc.tgz) = 23e42cd803c314f35f61713d7ce3d8ae6f978036
-SHA512 (NetBSD-6.0/amd64/binary/sets/etc.tgz) = 3aa2017bfd9d81b51371b31ae2eb4fa613c3cc90c532aabf1e76df938c312d1894f1b5313869a93fbd4463b903bb390ea5cf485e870d421ff0580240a04505e3
-RMD160 (NetBSD-6.0/amd64/binary/sets/etc.tgz) = d8d98a46df49ec9a28cda63da60c2fd8b2f5440c
-MD5 (NetBSD-6.0/amd64/binary/sets/etc.tgz) = d4d5351a9ee4c89d46d03025363d0af7
-SHA1 (NetBSD-6.0/amd64/binary/sets/games.tgz) = 535c8d580229e63485dbc9215ff8994babd19ba4
-SHA512 (NetBSD-6.0/amd64/binary/sets/games.tgz) = abc07cbb728d3b4148ca824f3d37c0fd789f22548f92c8d03c78cd04969828d6fb3e7396654e4709bfdc82783e5c17e3998372149b76a7bdfb186fd417a4e1cd
-RMD160 (NetBSD-6.0/amd64/binary/sets/games.tgz) = 80ca9419dae0b955ae39ba879b269eb27d34b0f9
-MD5 (NetBSD-6.0/amd64/binary/sets/games.tgz) = 1f7b98cfd037ac9a6b2487b1d3e2397a
-SHA1 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOM0.tgz) = 622ca31060c3d803bff339d53321e3b5cbe56fcf
-SHA512 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOM0.tgz) = 9943d8752f75569a2cb6611f2eb87a552cf98c92040cf2c0ec699ff0380b3b5395a7b2c951fcdbc6ef74d36073b7b066dc37ee1d60a3463836820fee7f15e5fe
-RMD160 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOM0.tgz) = 4627daedf28168da5994ad430aaac7b069785d42
-MD5 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOM0.tgz) = 3c473eed7a2c400bc22e743e6f2fad74
-SHA1 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOMU.tgz) = d29bb910d1ecf61700d54790c7376f2729dd6a71
-SHA512 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOMU.tgz) = e714d759a0635e3375ce56f945fa5df011b5037502ce0602d74db1a9d3ddf86144b13b9a2a503c231c931de998a645b8562b5254bc8e68c9537a7dea366957da
-RMD160 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOMU.tgz) = adb7515022b355b9b2f61a318d1fea6734e8859a
-MD5 (NetBSD-6.0/amd64/binary/sets/kern-XEN3_DOMU.tgz) = 3beec0bff32cc7c78bcadb6f90b0455f
-SHA1 (NetBSD-6.0/amd64/binary/sets/man.tgz) = f583717a7705475c144e1b66e93b3c9c6d8e3293
-SHA512 (NetBSD-6.0/amd64/binary/sets/man.tgz) = 92f6dbefacff42d2a6c317158aee801e8d4f3791704a792ce0761faf5425c516166a9769e7f3b81abd282cc9a60e0ff07c4350ac889fe66aec794f359a27452b
-RMD160 (NetBSD-6.0/amd64/binary/sets/man.tgz) = 02ffd712d7b6d265e8c566ccbfcaa34cc9916eda
-MD5 (NetBSD-6.0/amd64/binary/sets/man.tgz) = 59adc1ce49347d61ee6eea024e2ea2a2
-SHA1 (NetBSD-6.0/amd64/binary/sets/modules.tgz) = 46a78ea373e41e73dabc27ae802b395b7348c419
-SHA512 (NetBSD-6.0/amd64/binary/sets/modules.tgz) = 8dc00ff46c87d04b72f2e4fa0b2b290ab326b907f88f4d2667e63aa0390756df4c45ed5b9e36bec6e60e472a8162b9ddc55eea89b6ed65bd2f6cf5d760f611b9
-RMD160 (NetBSD-6.0/amd64/binary/sets/modules.tgz) = b2d93414e9e22b4b55dd73fb347aefe4b6a11d10
-MD5 (NetBSD-6.0/amd64/binary/sets/modules.tgz) = aa84f46e76b3f543ac9d8ea315869092
-SHA1 (NetBSD-6.0/amd64/binary/sets/tests.tgz) = cdcfc53423e8cd984258bc8635490bd815576322
-SHA512 (NetBSD-6.0/amd64/binary/sets/tests.tgz) = d11520f52dd889947a298a2428e4b81b840ef939ee82a63fb39ac30fa59918348a6546598b9b6f28268677f7bebf9e022f8ba568a47e3f9ff801ff08666c1366
-RMD160 (NetBSD-6.0/amd64/binary/sets/tests.tgz) = 7fb2dbecae8a377eca305f74075e9f4c4f326455
-MD5 (NetBSD-6.0/amd64/binary/sets/tests.tgz) = 4c8e0463db9e784b47d92aa43bd7ec82
-SHA1 (NetBSD-6.0/amd64/binary/sets/text.tgz) = 2ad7dfb1cf3e39da165e6d0d356444a3dda315ab
-SHA512 (NetBSD-6.0/amd64/binary/sets/text.tgz) = 77140ca96473762ba22737bdf1dcd74fbe7dea97778c2da7b8b015daa2af47c20a9663e5eee092a8b353cb36caf599efc5975b7572692cb5c8b77bcde7bb8fff
-RMD160 (NetBSD-6.0/amd64/binary/sets/text.tgz) = bdb4eb7e3081ec2bbd4b1eaaacd0cd96dfe92be1
-MD5 (NetBSD-6.0/amd64/binary/sets/text.tgz) = 3c9ac230578345961050fd8adbb15023
-SHA1 (NetBSD-6.0/amd64/binary/sets/xbase.tgz) = c88f6ae63e7acba75831ae5a19cfb8151f961780
-SHA512 (NetBSD-6.0/amd64/binary/sets/xbase.tgz) = be81153fc620a58e00ab7e1069dfa80567e9d641fc4ab6256512074d5cebb7a561fa8596de8f985022ef79ec0330ee317f2a2628a7236882f28a1ea9475d809f
-RMD160 (NetBSD-6.0/amd64/binary/sets/xbase.tgz) = 9e961b920bdc6432e1e0bfcad9adfb8dfc872cfb
-MD5 (NetBSD-6.0/amd64/binary/sets/xbase.tgz) = b98819c3afd401940a578ced15418ab6
-SHA1 (NetBSD-6.0/amd64/binary/sets/xcomp.tgz) = 7f6d2efa3a5e3a5ea2729020a8ad175929353995
-SHA512 (NetBSD-6.0/amd64/binary/sets/xcomp.tgz) = 35652d685c9581d20f198d13de8b34764c9a67e808416f006b98793f6ded279111d2bbeee6ad453a8416ba3259a5d7967d0327aa7e7109b7651d923bde31a8bd
-RMD160 (NetBSD-6.0/amd64/binary/sets/xcomp.tgz) = 0b3a659fdca9ed423aec4e799f739ad6ed3a2b7b
-MD5 (NetBSD-6.0/amd64/binary/sets/xcomp.tgz) = 72711d2c486caca7a8db94316c7704ad
-SHA1 (NetBSD-6.0/amd64/binary/sets/xetc.tgz) = d2a37199497c292f9a780bb5a77a14dd481bc0db
-SHA512 (NetBSD-6.0/amd64/binary/sets/xetc.tgz) = e8fe86ecaa56d0a016ad52024d956d8e77d690b4ccbb24b060d1c824f5e67979b2067ea6635361f25e80160e6abe3d4bce7ac586107fb673c12d65e9d9bbc4bf
-RMD160 (NetBSD-6.0/amd64/binary/sets/xetc.tgz) = e566d0c03e66e9365ad71c0057dd86bcc8663f96
-MD5 (NetBSD-6.0/amd64/binary/sets/xetc.tgz) = 6a1af564a85ba3996757440dfed4df94
-SHA1 (NetBSD-6.0/amd64/binary/sets/xfont.tgz) = 425d64efdeed5bf9f8038b9f0d61cdfd0b8679ba
-SHA512 (NetBSD-6.0/amd64/binary/sets/xfont.tgz) = c6e1b0829edb2e78302cf352880d4ee3cb6f6a5187f8082b0a0df3d49bd32f57cb0df450b850044cc0437da2f0ad75249cbf0777295d90ab38a9e1e13c786e08
-RMD160 (NetBSD-6.0/amd64/binary/sets/xfont.tgz) = d0f3520bdaad4cdbd90b3fe32e663c543153c0d0
-MD5 (NetBSD-6.0/amd64/binary/sets/xfont.tgz) = be05eeb3078d0fbb93b97130d49c5982
-SHA1 (NetBSD-6.0/amd64/binary/sets/xserver.tgz) = bc339a86b1e7d42e667a03561dd66835b0e39828
-SHA512 (NetBSD-6.0/amd64/binary/sets/xserver.tgz) = 00739626f1c78297988d1696e369b7ec933119ee7f76d57c426f83a1efba9414b7a1258258ab86b6b79a1277a327ac3ab0e2177bcaa396332ecc5221c6bf8954
-RMD160 (NetBSD-6.0/amd64/binary/sets/xserver.tgz) = 9adf580fd382fa5edc147da77b23410830e6ef9b
-MD5 (NetBSD-6.0/amd64/binary/sets/xserver.tgz) = b30af2c69ca833f25c0b163fea4496d8
-SHA1 (NetBSD-6.0/amd64/installation/cdrom/boot-com.iso) = 0aeb15a62bfd640903525b517b5cb254fbb8f694
-SHA512 (NetBSD-6.0/amd64/installation/cdrom/boot-com.iso) = c3998bedff5f4320e3b14b3bc07f7e348f45a106a1f78d738934fbce564b209eb9bce72f91bfbd4f95247a2eb4fb69366d3a8a4f7a597be3bfae889858f1badc
-RMD160 (NetBSD-6.0/amd64/installation/cdrom/boot-com.iso) = 90e7d9c68c959a8c3455fca88ac7fdc5af40589d
-MD5 (NetBSD-6.0/amd64/installation/cdrom/boot-com.iso) = 5551d8cd6c5675eda32c80de279860ee
-SHA1 (NetBSD-6.0/amd64/installation/cdrom/boot.iso) = 12323858ce09cfce6d3b294bb6d33a3ecd599400
-SHA512 (NetBSD-6.0/amd64/installation/cdrom/boot.iso) = 536021f6159e5412a9b7be41967e75cdaafb3fcb319ce7c712af6bac22cee2b07f185500fb77505f5a4018a0fa5e619a5e00dc11aee59babfc1dd3c69081a0c0
-RMD160 (NetBSD-6.0/amd64/installation/cdrom/boot.iso) = a66e6ff744cb27ed79f58824945806b4ddc5e743
-MD5 (NetBSD-6.0/amd64/installation/cdrom/boot.iso) = b4ae730ff5fcc86885c266665183dd35
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com1.fs) = 7773242845d56dae16e957ba3dcde54db2d44ad9
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com1.fs) = 14a0d9a1d7b6d893ee962b6c0e73cd2f44cdef9aa0c8d814465eb9e30bbee00fffd332a962d86430a04e13fb8b111fc857b5790648d27bbbe6eaac3fb0f6a0c5
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com1.fs) = 911fbf259c7ede76a08956e0e38ea8dba1522ae6
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com1.fs) = 18052eb95118b57ee28cff9cd78a0fab
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com2.fs) = 5a1705082aa0fdbe9df2deeb8bfcde27f62e39c9
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com2.fs) = 57a01c68902c568a9e061d588b3f96857de3ebe05eab55fffc38a843bb1e25d3c1962aeb78d711a5c70ee2cc7abd5717abc4b4224794803019cd1e81c9afa547
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com2.fs) = 03c5214a031d1cee57c50888bad984f59a0ec275
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com2.fs) = 9d14a976045f475ae3a96cb7ed04bae6
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com3.fs) = 80a4a45120aad34e9cc46b8f2fbba73977e395da
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com3.fs) = db431a6d199f53a3f367e759ed4fcb117a7b664dd9d5060677a7b3ef60853d3c6d31f5c4e6c54b33df6e4223a8aa7e27c3cb56f777205b58b7239980da5f58d5
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com3.fs) = fd6ca1f2110722e28189179a1e6ae1724c1b0c3d
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com3.fs) = cf7c49437a2e74cef7d07e5ecefe26f9
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com4.fs) = 611b759a6b95830057cea83517f8065fa131d328
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com4.fs) = 8d0229d04d365efe365a1dc84a5d05090290d684fda96cb637fd8989e162a6cd90c9a9409a80740356cdbe39cb81dcf498874db475b4c2aa443ec3087675611c
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com4.fs) = f7fda0f8502ab8255fc63de3de54c92d05ce6a17
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com4.fs) = 4e1c8e49e8592e5e7a13e4118df3a13c
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot-com5.fs) = 671ad9865cf186c69739279463e408504e89c072
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot-com5.fs) = 1a4329afefd19b3dbf37a12cb287aa771dfabdeeaf6b0302158eae0cde68d970a94a9643b4b18798654473c6eb577c8e555188a7c7776e6cccc05241a7b47c7f
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot-com5.fs) = 9e7000ef7b4a971936e74eb1858b0f74816d42f3
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot-com5.fs) = 52824ec1c65bc87f196fe4fcd1887cb2
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot1.fs) = 8393070ff7b79fb60d3aa6bf9675c5bce42b7340
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot1.fs) = 092f3177383ff4bb4f51fdca19069306f75bb0b86674e2862c34374bdc2da633008805c0cdd2bd352f0da12a2cd529e19086323f0c74d1fed89b2a0d65066bba
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot1.fs) = 9b24c6e8042942c96ad46c65443e48824c2b1fa8
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot1.fs) = ad5246fc6d7ce6840762ce87d281e0fc
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot2.fs) = 5a1705082aa0fdbe9df2deeb8bfcde27f62e39c9
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot2.fs) = 57a01c68902c568a9e061d588b3f96857de3ebe05eab55fffc38a843bb1e25d3c1962aeb78d711a5c70ee2cc7abd5717abc4b4224794803019cd1e81c9afa547
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot2.fs) = 03c5214a031d1cee57c50888bad984f59a0ec275
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot2.fs) = 9d14a976045f475ae3a96cb7ed04bae6
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot3.fs) = 80a4a45120aad34e9cc46b8f2fbba73977e395da
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot3.fs) = db431a6d199f53a3f367e759ed4fcb117a7b664dd9d5060677a7b3ef60853d3c6d31f5c4e6c54b33df6e4223a8aa7e27c3cb56f777205b58b7239980da5f58d5
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot3.fs) = fd6ca1f2110722e28189179a1e6ae1724c1b0c3d
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot3.fs) = cf7c49437a2e74cef7d07e5ecefe26f9
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot4.fs) = 611b759a6b95830057cea83517f8065fa131d328
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot4.fs) = 8d0229d04d365efe365a1dc84a5d05090290d684fda96cb637fd8989e162a6cd90c9a9409a80740356cdbe39cb81dcf498874db475b4c2aa443ec3087675611c
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot4.fs) = f7fda0f8502ab8255fc63de3de54c92d05ce6a17
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot4.fs) = 4e1c8e49e8592e5e7a13e4118df3a13c
-SHA1 (NetBSD-6.0/amd64/installation/floppy/boot5.fs) = 671ad9865cf186c69739279463e408504e89c072
-SHA512 (NetBSD-6.0/amd64/installation/floppy/boot5.fs) = 1a4329afefd19b3dbf37a12cb287aa771dfabdeeaf6b0302158eae0cde68d970a94a9643b4b18798654473c6eb577c8e555188a7c7776e6cccc05241a7b47c7f
-RMD160 (NetBSD-6.0/amd64/installation/floppy/boot5.fs) = 9e7000ef7b4a971936e74eb1858b0f74816d42f3
-MD5 (NetBSD-6.0/amd64/installation/floppy/boot5.fs) = 52824ec1c65bc87f196fe4fcd1887cb2
-SHA1 (NetBSD-6.0/amd64/installation/miniroot/miniroot.kmod) = dabc250e1cead594f5dea847da52d9ba2933b310
-SHA512 (NetBSD-6.0/amd64/installation/miniroot/miniroot.kmod) = a4dd87defdb602de2329e7397c503b075c1c373af8a0547e843040029aaf34595e117f11f9e184a69765386ed66283f3a9c994d2159e473792b4f49d45991cdb
-RMD160 (NetBSD-6.0/amd64/installation/miniroot/miniroot.kmod) = 92d16ace79c31254694e0b401abb19e659f7879f
-MD5 (NetBSD-6.0/amd64/installation/miniroot/miniroot.kmod) = df6ec580ac9753bd17f1e9aaada0be34
-SHA1 (NetBSD-6.0/amd64/installation/misc/pxeboot_ia32.bin) = 96287819b198b35ceaf13400e6852a472b0e86e1
-SHA512 (NetBSD-6.0/amd64/installation/misc/pxeboot_ia32.bin) = cad69e2c71ec9879adbcec03468172aa1c2b7dd2ae4d4b5315a7013a39a24667faa8610ab663d96d5d8229e74f8150a0afda03d3e308a54e67fb555bffba821e
-RMD160 (NetBSD-6.0/amd64/installation/misc/pxeboot_ia32.bin) = e226d78864e488c284063c1eeca1431babd8934e
-MD5 (NetBSD-6.0/amd64/installation/misc/pxeboot_ia32.bin) = a6cf18820ed6a4d823ae117148272279
-SHA1 (NetBSD-6.0/amd64/INSTALL.html) = 2ba66a1c4d70a9376ae64ba56e97acf97cb14064
-SHA512 (NetBSD-6.0/amd64/INSTALL.html) = 6fbece25fed2ab136a77f592975808e919260963a9be83b2d4ddbee6b9b24319fb08c6316f262fe208aba81e50d1156db6ad8e36974fecd6955608d807da4667
-RMD160 (NetBSD-6.0/amd64/INSTALL.html) = e4976765905456206ba0906f3d7aee383e80b5dd
-MD5 (NetBSD-6.0/amd64/INSTALL.html) = 9a1d1f0005ff232d9501ebe159d122b7
-SHA1 (NetBSD-6.0/amd64/INSTALL.more) = d1da705f0adc32b67801928824379ea45ddb70fd
-SHA512 (NetBSD-6.0/amd64/INSTALL.more) = f5e6d604726edc5759dcc63e32c046fc0f952b9e4357e331b3864d1074954db46f0a7295b63f6f3a2c5ecda4ad3fcfc568a6dfc7dc91db5559a768ad2f6fd6dd
-RMD160 (NetBSD-6.0/amd64/INSTALL.more) = 4b06e7cde85cdd8fef618f254e8a9136ff25e766
-MD5 (NetBSD-6.0/amd64/INSTALL.more) = c1d511b8ec407155635d1df1d3698af9
-SHA1 (NetBSD-6.0/amd64/INSTALL.ps) = dc0b32b40a813365cab508de06d4280a4ebe8496
-SHA512 (NetBSD-6.0/amd64/INSTALL.ps) = 62ad1a41b0101222de2a4aea45c32ed7a02a4b06d1fd86b1c4d35f6ac5605a3562ca21b815db8e27d67e4584a5e155bbf8d5dda842e165379f4efd962c19a4a8
-RMD160 (NetBSD-6.0/amd64/INSTALL.ps) = fc6b89c1155481439b4a4a66357b925227720d97
-MD5 (NetBSD-6.0/amd64/INSTALL.ps) = 833ee159c8aeb1456ad514df2b4da716
-SHA1 (NetBSD-6.0/amd64/INSTALL.txt) = fd054d29f49e793dec119508a0466e243d54d05d
-SHA512 (NetBSD-6.0/amd64/INSTALL.txt) = c5e9a67c9bcd990c16a13390db60ff432f4640434234dc69a412d2ebd57fd333ace7ea59dc5b3acc815ceef9077cd76cb26dc5d6fcc5ebaa5fc95a511928bd21
-RMD160 (NetBSD-6.0/amd64/INSTALL.txt) = 271a2919d0ff6fddc1bb771716e67a7319795f7c
-MD5 (NetBSD-6.0/amd64/INSTALL.txt) = 2de264a9a927f1f3513674ec16ac4d45
-SHA1 (NetBSD-6.0/amiga/binary/kernel/netbsd-GENERIC.gz) = ad3ce973bb574d84022cbc071997dca9377e1be7
-SHA512 (NetBSD-6.0/amiga/binary/kernel/netbsd-GENERIC.gz) = 23e227becd8364657d767347b251ca8f47efe9397b9a0cadec90aeb9e90372dc49f143026ca678d933acde69c9be780b50a589ce0cf164f61af8d4eb641f5c64
-RMD160 (NetBSD-6.0/amiga/binary/kernel/netbsd-GENERIC.gz) = 65ccd49cd01c0981f4b4a65914d59731492a9876
-MD5 (NetBSD-6.0/amiga/binary/kernel/netbsd-GENERIC.gz) = acb579f6a97b9a5909bebf16f2742b0a
-SHA1 (NetBSD-6.0/amiga/binary/kernel/netbsd-INSTALL.gz) = c3904eede4df412ea9a7db90f34009cdaee611dc
-SHA512 (NetBSD-6.0/amiga/binary/kernel/netbsd-INSTALL.gz) = 6087a06debbf2f6820f5c450495680b0f5356d2e5036e1a7787b02f9cd5c8c43da24069ac0cb14bf5b09ca5ff122905d0c26c044c361c27202b4aa9a561cfeba
-RMD160 (NetBSD-6.0/amiga/binary/kernel/netbsd-INSTALL.gz) = 8dcb009d9495e2c1f768e7900b28a263cafb1610
-MD5 (NetBSD-6.0/amiga/binary/kernel/netbsd-INSTALL.gz) = 635f24c98bd4bd94f42bf3daa9090b1c
-SHA1 (NetBSD-6.0/amiga/binary/kernel/netbsd-ISDN.gz) = c91b1e76e6f8d7b327728eb7110995968e56cb80
-SHA512 (NetBSD-6.0/amiga/binary/kernel/netbsd-ISDN.gz) = d1ba0cda42d6eaf9815f39a52429767c00769d671faaf7144c830f1d06dc5571c39e0e823a7764fbdfaad10a1f516385ed1d3d54c4053a913e8399e3a1d37084
-RMD160 (NetBSD-6.0/amiga/binary/kernel/netbsd-ISDN.gz) = 32dfb7318589e9e2445f781c1344f7b418b1b9e3
-MD5 (NetBSD-6.0/amiga/binary/kernel/netbsd-ISDN.gz) = efdc155fef394563fed3a0c32d90a291
-SHA1 (NetBSD-6.0/amiga/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/amiga/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/amiga/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/amiga/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/amiga/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/amiga/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/amiga/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/amiga/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/amiga/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/amiga/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/amiga/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/amiga/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/amiga/binary/sets/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/amiga/binary/sets/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/amiga/binary/sets/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/amiga/binary/sets/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/amiga/binary/sets/xetc.tgz) = d2ca34bd668e108cbbfd4b45720823663339f8bd
-SHA512 (NetBSD-6.0/amiga/binary/sets/xetc.tgz) = 431ca465f300e7eb5d4dbd44c43e412a296fb4d3129217e752f86a720e8a8bdf736c9add05a45518a4f3e6cffa32381ef61e9186d360b68a5f8c64d87e385fb5
-RMD160 (NetBSD-6.0/amiga/binary/sets/xetc.tgz) = 4c5d664679856b02b694534cd6afdf20597e6d53
-MD5 (NetBSD-6.0/amiga/binary/sets/xetc.tgz) = 72bd67556ac14ea0ce147374af0ba624
-SHA1 (NetBSD-6.0/amiga/binary/sets/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/amiga/binary/sets/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/amiga/binary/sets/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/amiga/binary/sets/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/amiga/binary/sets/kern-GENERIC.tgz) = 295ba9f28d2b11af8b7ea93c0b4cec03e40002a7
-SHA512 (NetBSD-6.0/amiga/binary/sets/kern-GENERIC.tgz) = b762b6592db8439df6c8d7cfd26f509425c779dcb3d27face8aea6c50dec314c15124b6623152969d5a0998c6991050c5c18a4f547ff5027c8ef56e4d4b5baf3
-RMD160 (NetBSD-6.0/amiga/binary/sets/kern-GENERIC.tgz) = 566f5c6520f253fbd5c7043931b275811853e289
-MD5 (NetBSD-6.0/amiga/binary/sets/kern-GENERIC.tgz) = 3ef7c2157fd42c60a0c1c4c898855219
-SHA1 (NetBSD-6.0/amiga/binary/sets/base.tgz) = 863379dd24489824d8140df08e3f5ca5bb63c35a
-SHA512 (NetBSD-6.0/amiga/binary/sets/base.tgz) = 845fec5935b19d810896af3451bff4f2eb6b3b02b285e8e7651c3be32c60d2abacbbb614e3c11b96cf33497fbe6505458f9a292bb0393c54a764449b9b5dff65
-RMD160 (NetBSD-6.0/amiga/binary/sets/base.tgz) = 5c87d3799986d70963b0e02416ff7648602d31de
-MD5 (NetBSD-6.0/amiga/binary/sets/base.tgz) = c8b7075f670666c9492a46c44e4632de
-SHA1 (NetBSD-6.0/amiga/binary/sets/comp.tgz) = fad62d4d7c47d956a450773b817a838f30497212
-SHA512 (NetBSD-6.0/amiga/binary/sets/comp.tgz) = c8c85b7a59df5930e8cde1715b03c2ae7646d40902e2c402292308f8eba81132a155120215c763a68dd7f37ef489d786ee73911849b69cc9c9e3ba1e86de1bb9
-RMD160 (NetBSD-6.0/amiga/binary/sets/comp.tgz) = 46162e89fb8c66089ccf0523e3b3483834284284
-MD5 (NetBSD-6.0/amiga/binary/sets/comp.tgz) = f107b1d62d1535a4dc1052752837aecd
-SHA1 (NetBSD-6.0/amiga/binary/sets/etc.tgz) = 7a2e1bc8aa53aeea37bb71ae598886da762888c4
-SHA512 (NetBSD-6.0/amiga/binary/sets/etc.tgz) = 80d275882cc7df12a3ba35a9e101e1f4597c3cd16864026013be90f0a8e8ef2ab405b5b29dc39ed3e114fac9986dc05efb661cc4361cf4d05d4e6cb25462ae45
-RMD160 (NetBSD-6.0/amiga/binary/sets/etc.tgz) = 3b71a2cfee1368a862a75f44d249b85059f34bc6
-MD5 (NetBSD-6.0/amiga/binary/sets/etc.tgz) = e8fba82eea6cdabed070234fde1acf2b
-SHA1 (NetBSD-6.0/amiga/binary/sets/modules.tgz) = 412c02a1fe2bc42ffaa13e3b5cfe30ab89ca8066
-SHA512 (NetBSD-6.0/amiga/binary/sets/modules.tgz) = 0fcda39f953bfbeaae0480d14a4e36724296ff88185985aec0863d5730048da38dd37f5f609e4b085a4776fbf139e8ca3acd693e7a5827f5fa7f51b2006b1447
-RMD160 (NetBSD-6.0/amiga/binary/sets/modules.tgz) = 44f4e35271aa128a88c14913b82edc82f93ffb57
-MD5 (NetBSD-6.0/amiga/binary/sets/modules.tgz) = c0a7fed3fc40edbb00bc24975c10c011
-SHA1 (NetBSD-6.0/amiga/binary/sets/tests.tgz) = 3d5677828808ee833c1c65cf5ff5d1cf1f66611f
-SHA512 (NetBSD-6.0/amiga/binary/sets/tests.tgz) = 4d868f712f2e0e3e9b56e6f346934b71eb174d97ff197883f3e3d4923c3dabda651bb3fa3d172fcd32ee5d07b659e7639cff6d9c9450e605174d8a09a6ac730a
-RMD160 (NetBSD-6.0/amiga/binary/sets/tests.tgz) = 662e3dcc455114628676304b277a852a49597104
-MD5 (NetBSD-6.0/amiga/binary/sets/tests.tgz) = 84a17f9c5c7bb88e34f42e3a7cbdc490
-SHA1 (NetBSD-6.0/amiga/binary/sets/text.tgz) = 8153acee4263203531a66cdf71215db94d745bd9
-SHA512 (NetBSD-6.0/amiga/binary/sets/text.tgz) = 3ca801f17e44f701543140841123196e132f920d7ac5859dc2a5133da08b73f4d730cbfc62fee5ba9bac6b0d96cf4985b951aad33cf59d5470d7b99cadaf51dd
-RMD160 (NetBSD-6.0/amiga/binary/sets/text.tgz) = 5820be807d773054a2c25d0c0009141ddf4a3d5c
-MD5 (NetBSD-6.0/amiga/binary/sets/text.tgz) = 6640874a003b751e38fe8ecd14f001d7
-SHA1 (NetBSD-6.0/amiga/binary/sets/xbase.tgz) = c2df6e9a1c3bdae97964577118ae358efe3e3f38
-SHA512 (NetBSD-6.0/amiga/binary/sets/xbase.tgz) = 4751bb14d6a5da31d95ab7e5cef52fcba99b8e13b8379f7fcff8aafe8116c4a036553adf4e6e9bed1642cf39b8e3de6a4e29a37ea48d1363dad853ef3d198604
-RMD160 (NetBSD-6.0/amiga/binary/sets/xbase.tgz) = cbeb269f4126adf0e3e9894888047f70a42f1d6d
-MD5 (NetBSD-6.0/amiga/binary/sets/xbase.tgz) = 03727cb263b9f50dfec22ac09d5d0543
-SHA1 (NetBSD-6.0/amiga/binary/sets/xserver.tgz) = 3e746f532be1a2ea1d5d38894bf0be416021412a
-SHA512 (NetBSD-6.0/amiga/binary/sets/xserver.tgz) = b90fcec5aea23879b3c39aa516e1c658064d35e8dc8172fac9f722b9c08f71a73f3a33d84dc618c88bf368156e9e4bf220f3cbd110f66bd213838fef73af50f3
-RMD160 (NetBSD-6.0/amiga/binary/sets/xserver.tgz) = c50619861d88fbc22413aca3bad38cb33065b590
-MD5 (NetBSD-6.0/amiga/binary/sets/xserver.tgz) = 5ac22d2440ed272bbebec827a0134acc
-SHA1 (NetBSD-6.0/amiga/installation/miniroot/miniroot.fs.gz) = d83dc1458c18c0625f767f00066eff80547ee71f
-SHA512 (NetBSD-6.0/amiga/installation/miniroot/miniroot.fs.gz) = 415b4c824c4efdd1c8fd597c6c8222c26d77e56f6f36bcb65d9e7eb3882c20f3c452f05b4541a0832590e53a67b12423d21196626fcc7c1cad4992648a98e136
-RMD160 (NetBSD-6.0/amiga/installation/miniroot/miniroot.fs.gz) = 4cf219c14c3c367d95ff4aa4cf04dba379ee16c7
-MD5 (NetBSD-6.0/amiga/installation/miniroot/miniroot.fs.gz) = 1bb2a3735737d2af8155407157cb2120
-SHA1 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.14) = 32e902d420c2ba8498854bd26387369b09efabb6
-SHA512 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.14) = 3fe58857d83d88f1fc7f6e29e8ee079be25326abad3a25ba5f64e3429f22f08ef102551e15c4275fe973d5536a5d459edea384fdd2293f68fe6d293801fba85c
-RMD160 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.14) = 17a84971cee95ff8bf1b64d5071bd1fdbdbc5a99
-MD5 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.14) = 1f841716409b236df90d9c5d63332edf
-SHA1 (NetBSD-6.0/amiga/installation/misc/loadbsd) = 2c8e314ee812e159ea479bacf09c47a2a4911e17
-SHA512 (NetBSD-6.0/amiga/installation/misc/loadbsd) = 881d3187366e2736e65e22bae93f24afd0b34b841b733898d3d172d98084f1729b19a6277445601da35471e3583e98b86008262b1a77dbb8bcc37e0c03d07b32
-RMD160 (NetBSD-6.0/amiga/installation/misc/loadbsd) = 00249c76e9a57ed5e58efbdc1001f782595c3918
-MD5 (NetBSD-6.0/amiga/installation/misc/loadbsd) = c1cc983600053a7de29feb09d703754d
-SHA1 (NetBSD-6.0/amiga/installation/misc/device-streams.tar.gz) = 5b96fab4bbb49a985481dc5c1e2830e994bd88ec
-SHA512 (NetBSD-6.0/amiga/installation/misc/device-streams.tar.gz) = 88e35b476d60dd988e8056263fc4f86893c5a7c2c3125934db8d728e3b679554b229b2adc3babf8c2ff21af46530eea1ff30e4b6af550b331ad22bd29e18434f
-RMD160 (NetBSD-6.0/amiga/installation/misc/device-streams.tar.gz) = d0444d1e967a624fde15e4526f9c7f673566492d
-MD5 (NetBSD-6.0/amiga/installation/misc/device-streams.tar.gz) = 6a3eed6278587660ed543c7449ee571e
-SHA1 (NetBSD-6.0/amiga/installation/misc/runbootblock.README) = 2d62005b98533a4fffd7d0445ac8cb7c5ac11c59
-SHA512 (NetBSD-6.0/amiga/installation/misc/runbootblock.README) = 9f071ff7ac0d2eabc77d43faeee48cba3a1883c957b046fad4d7d3237f41d2752a1e010a5d9f5324f90b81bc9968afe425d320e6742ac8f5e081056d5e133baf
-RMD160 (NetBSD-6.0/amiga/installation/misc/runbootblock.README) = 872a2169c248b016d6782a6b9c4208c67a346d12
-MD5 (NetBSD-6.0/amiga/installation/misc/runbootblock.README) = c60fe181cd9b255e294bfeb4be411181
-SHA1 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.16) = eb660b987186a4e3a4eccb740dbb9e061a4b7216
-SHA512 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.16) = 0f4565e2de70eaaf1d973da2b4a988e794b4608b2b0fa9c84dd05c82ade92fc4b75339e94e4a593e051ab3a364611fd7dbc2b48dccd4906f7b42fb665f7d711c
-RMD160 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.16) = a071897afbdd11655a21df5a89c6e49b6e8a3574
-MD5 (NetBSD-6.0/amiga/installation/misc/loadbsd-2.16) = 8e67fb434887e942fe63cf308195b18f
-SHA1 (NetBSD-6.0/amiga/installation/misc/rdbinfo) = e413a8a5631dfedb4b1634c709836d1f92d9b08c
-SHA512 (NetBSD-6.0/amiga/installation/misc/rdbinfo) = 912ddb9bd1ba1af07e1072fee9a09f22124792abfc8f4f178a5df66dad17c39211c52d2a581111338a523f17a0dd58315d798659e901f14084d62a8c890e0a44
-RMD160 (NetBSD-6.0/amiga/installation/misc/rdbinfo) = 8fb8b41e39f6c2d48b6b46be0433dfc45c353621
-MD5 (NetBSD-6.0/amiga/installation/misc/rdbinfo) = 027c4bfce639d3cb88d617b0e85c0c4c
-SHA1 (NetBSD-6.0/amiga/installation/misc/runbootblock) = 598d688badd592a838dc260ce36b84c7835e72c0
-SHA512 (NetBSD-6.0/amiga/installation/misc/runbootblock) = d4cf9fe94244f1a832a6e474ff777ae7b901e86e0aabbbceb356c42f533dadb370686080b8e64993b9e07502310a4140fd393db5ddbdcd7a9e44c86b20f4c0a2
-RMD160 (NetBSD-6.0/amiga/installation/misc/runbootblock) = 2457b64f16ee58d22bacdf407ef35a1e9d244e1f
-MD5 (NetBSD-6.0/amiga/installation/misc/runbootblock) = d4d059566ad067e4d60259b389a5a9c3
-SHA1 (NetBSD-6.0/amiga/installation/misc/xstreamtodev) = eaf846a0d81754fb778b070926c495720cecffac
-SHA512 (NetBSD-6.0/amiga/installation/misc/xstreamtodev) = 873e7ffa5686a69b4a0ad68626f5e32176c03fc6231072531b36af3d0c0c055ced63e6c7f5cb0f3c6568f47720f31b76140aeede3f3dd9ddc8b639c6b3bdd5bf
-RMD160 (NetBSD-6.0/amiga/installation/misc/xstreamtodev) = 16910f7f243ca8ae74b8ff90d89163edbd4c3fbf
-MD5 (NetBSD-6.0/amiga/installation/misc/xstreamtodev) = a9e2e97f7945cf34da63aef17bed0f3f
-SHA1 (NetBSD-6.0/amiga/INSTALL.html) = 42ae087edd4c644275cb6a351bfc0801a23f7b41
-SHA512 (NetBSD-6.0/amiga/INSTALL.html) = e3f4389bff567192811d94c90b1df6d35d379774173ee935b2ebacf6ebc04edee9d270a71cf1e312bb52cfdfdf3ea7fa50f3cc6058bef88051f6da2953faefe0
-RMD160 (NetBSD-6.0/amiga/INSTALL.html) = 941e3e7501290a6a596c10bb9e9dce71fd68f01f
-MD5 (NetBSD-6.0/amiga/INSTALL.html) = ca5a2dcf7c5a927f0f89edabd084d59f
-SHA1 (NetBSD-6.0/amiga/INSTALL.more) = 2ef7c56d3b3789f858d82b96f8b955801feb402a
-SHA512 (NetBSD-6.0/amiga/INSTALL.more) = e1f87c081f267bb5bda5f1f07467e4081b3289cc1b5eead1ce26e954acf6704ad86ac95fb8958130f0a5b198eca80b967c7089cdc35ba4399cc79ab822df2ec2
-RMD160 (NetBSD-6.0/amiga/INSTALL.more) = 55a90159f299abe126ea37f0becea2f692fb1595
-MD5 (NetBSD-6.0/amiga/INSTALL.more) = 1357d2cc09f7d5429c5790dd32592032
-SHA1 (NetBSD-6.0/amiga/INSTALL.ps) = b4a7420ef6502bd98009c6f7b79053a076881f28
-SHA512 (NetBSD-6.0/amiga/INSTALL.ps) = 295f43cd3ba4b64deec0652bab61802cc37a7c3e75cab305cd0e12a682822a137abcd0915115709e1147e952b87bbb128e53251625288ba58068a52e491dd0da
-RMD160 (NetBSD-6.0/amiga/INSTALL.ps) = 07a4ea8478343a0f6a1e935eca5133ab116b5779
-MD5 (NetBSD-6.0/amiga/INSTALL.ps) = f07315266b0fd45fe58f107dda2177f8
-SHA1 (NetBSD-6.0/amiga/INSTALL.txt) = 6f5c90d805c69d5c75efb96b3b579d49bb123a6b
-SHA512 (NetBSD-6.0/amiga/INSTALL.txt) = 2fba02db405672d44df143421547a2291272a56f6d6e37b5da1f0396739ac55c695178c2e115a5af8574d6c323c8adc2747073e799b59d4e886191ce1baeb5cd
-RMD160 (NetBSD-6.0/amiga/INSTALL.txt) = 18db9a1a6e4af5935ed15d37c218b0309309c95c
-MD5 (NetBSD-6.0/amiga/INSTALL.txt) = 23deef4d8fd55d404915f004ba0fde9b
-SHA1 (NetBSD-6.0/amigappc/binary/kernel/netbsd-GENERIC.gz) = 1fb8ac599ecb67083a0505f7767600b5a00e6164
-SHA512 (NetBSD-6.0/amigappc/binary/kernel/netbsd-GENERIC.gz) = a41b53fecaa5077d80a2a6191073785c87ef703a4cd17e45ea1064e64c923fbf9d97edcc1c4e58ed205ea85f070f80a992198943a9384f4af473a11058c56d4f
-RMD160 (NetBSD-6.0/amigappc/binary/kernel/netbsd-GENERIC.gz) = b9f459e21e09ac314b2a02a2ec1a5ef0841af3d0
-MD5 (NetBSD-6.0/amigappc/binary/kernel/netbsd-GENERIC.gz) = 8c59d3085078659f9fd319d69ea1bc0a
-SHA1 (NetBSD-6.0/amigappc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/amigappc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/amigappc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/amigappc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/amigappc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/amigappc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/amigappc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/amigappc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/amigappc/binary/sets/kern-GENERIC.tgz) = 8cfda7d67d00c0344fc8b7e15c14367c9dd3c0d0
-SHA512 (NetBSD-6.0/amigappc/binary/sets/kern-GENERIC.tgz) = 00ecdc9511f389035fdd0d5786ec5b16ea52722cf390b75b11c0d0c5504d96bdfbaf6b19237e752aba9d530ed80cdaeadf18a7d0079c22a1560644fa8fb2ffc9
-RMD160 (NetBSD-6.0/amigappc/binary/sets/kern-GENERIC.tgz) = 0508773016c4dcf8b88d238235c66fc61785c0fe
-MD5 (NetBSD-6.0/amigappc/binary/sets/kern-GENERIC.tgz) = ada4ef952407ea1d320765955f626aed
-SHA1 (NetBSD-6.0/amigappc/binary/sets/base.tgz) = 69692adf17c4631804d6e78e96868bf22a0f80e4
-SHA512 (NetBSD-6.0/amigappc/binary/sets/base.tgz) = bc3f89b3201c184f38bed2dcd3e74ce01a8c9b5cdba1065bfe5bc0eadf0ed71fd73bcb9d0add77ab7d2cfc4848f40c482b0e2cbf50771577716f8a344eda5a6b
-RMD160 (NetBSD-6.0/amigappc/binary/sets/base.tgz) = 3cb20928324c3bf484a05a04d47afa4f587d5d52
-MD5 (NetBSD-6.0/amigappc/binary/sets/base.tgz) = 00d35c074b0f69e81494f42cd43ccecd
-SHA1 (NetBSD-6.0/amigappc/binary/sets/comp.tgz) = db98cb19c33216dafdd0ab26cbfa2a4f0cc685e7
-SHA512 (NetBSD-6.0/amigappc/binary/sets/comp.tgz) = 7dc6b1ed24deecd9f29aae5867bd2d89c9df3f443d522315f541eae77fde420d15b63233694043595a0f12491af5e24699598acc45ed05d9622911869f79ceb9
-RMD160 (NetBSD-6.0/amigappc/binary/sets/comp.tgz) = 776b79b7b476cc3b4caee7712070864d35779f66
-MD5 (NetBSD-6.0/amigappc/binary/sets/comp.tgz) = 385fe9939b6bb28a37cdf9cc3958dba8
-SHA1 (NetBSD-6.0/amigappc/binary/sets/etc.tgz) = f424a289be42a94c875757d9f83756d7e9286f20
-SHA512 (NetBSD-6.0/amigappc/binary/sets/etc.tgz) = b736da20bee72bb1962acce7cb8cd51e851f541ec79766d2258f1322ae843b0879208a6f69d6dda9ecc74a4bf7739fed626b8205432dd63f630b04803418307c
-RMD160 (NetBSD-6.0/amigappc/binary/sets/etc.tgz) = 0f163aa3a9450f45b40760786373089e52dae0bd
-MD5 (NetBSD-6.0/amigappc/binary/sets/etc.tgz) = c2cb43cbeb231d24b3864c7882da8edb
-SHA1 (NetBSD-6.0/amigappc/binary/sets/games.tgz) = d10c319a009f9859de37a5d5bb994d29669dce16
-SHA512 (NetBSD-6.0/amigappc/binary/sets/games.tgz) = 59e00cdf1b42e285db9cd29ab195b693f1989cd1480e644787307ea722a1a695e70708ad8fa6d0afbbb51de4ca8a4b81b550e2f1745d0140a47e1b6a7002a236
-RMD160 (NetBSD-6.0/amigappc/binary/sets/games.tgz) = 0baf65f6198b6f1c40960b30424a3ad44c1eca2f
-MD5 (NetBSD-6.0/amigappc/binary/sets/games.tgz) = 304dc86d68c23c7f30c30e4f092b6982
-SHA1 (NetBSD-6.0/amigappc/binary/sets/modules.tgz) = 2a05a8cf525b6b0323f54840bb42e069a36f1988
-SHA512 (NetBSD-6.0/amigappc/binary/sets/modules.tgz) = fc33e9c609d38775e7004d2715158178d08508f8a890831270191b7f32fae8a2d2b56e74e59d4f5d37574827cf85eda28e15f88ac1544a1ceec008105107dcb5
-RMD160 (NetBSD-6.0/amigappc/binary/sets/modules.tgz) = 931d81973e92a161da6468aeeb0b7a486fc96511
-MD5 (NetBSD-6.0/amigappc/binary/sets/modules.tgz) = 13f7ee97c852a71b51c91dd8f659b202
-SHA1 (NetBSD-6.0/amigappc/binary/sets/tests.tgz) = eee320cd38b5396a305b912cd43ad4f40dcb0e98
-SHA512 (NetBSD-6.0/amigappc/binary/sets/tests.tgz) = 3c2377b75fb69924c646904f67e3762bddbd5fe40214df319d205f412e7377e7695d5b648545f22e9b42696cb3fd3ddb9bde4ed7b3ad1d48ea32fbbf13356354
-RMD160 (NetBSD-6.0/amigappc/binary/sets/tests.tgz) = dd0ea2b9c6f23f409ced129c5dc847c582b572fe
-MD5 (NetBSD-6.0/amigappc/binary/sets/tests.tgz) = 2f0dc32c95f23026c06b50c946dce965
-SHA1 (NetBSD-6.0/amigappc/binary/sets/text.tgz) = 7b28a25a69ba9d2870c31c302be38d0c12b11486
-SHA512 (NetBSD-6.0/amigappc/binary/sets/text.tgz) = 77dcaa1c134ac4f346bf782c5c20ea4304b42a15a60a1321e944e59665946d1b3ddfcd9eba919f6ea4ca947dd8df63a9162adfea363e01758ffa5bf8e7f49e12
-RMD160 (NetBSD-6.0/amigappc/binary/sets/text.tgz) = 438d720340cbd19f86ac8449dd705d125958cdbf
-MD5 (NetBSD-6.0/amigappc/binary/sets/text.tgz) = 3fc18e1ff4fc50d561b478b39fe7f855
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xbase.tgz) = 11ec98aff57d5a8f8cabcc0a41eb7e41c2cd750e
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xbase.tgz) = c9c39d05fa60bc2a0e1a4aed89ecfafa47c203652f23b971fa9b3d23df291fbeb4735dd4621a81a46eff276c80410ee36492162e5282bf19bc9df4bf889d4fb8
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xbase.tgz) = 4d1a32acb55c107327f1605a6a7d3379e3e3fbc1
-MD5 (NetBSD-6.0/amigappc/binary/sets/xbase.tgz) = 0a959da0b8e03e2686da275c8311addf
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xcomp.tgz) = 5a450d9cb090214e14b45d59ee87d7786da4afcd
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xcomp.tgz) = 2478cf90ce45e16d8854bfc2aad28d102aafb53f9b2fd39756bff0970c0546f52a3d31be85e581ae78e982b06f17a8de77eea776d7d8e0770e00a0e198c06bbe
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xcomp.tgz) = 82323c0e4b56e79891087934eed15d1472646bec
-MD5 (NetBSD-6.0/amigappc/binary/sets/xcomp.tgz) = 096eaba339adb8b492dc1ce5de1dada0
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xetc.tgz) = 98fd5a6cb8eab73e8453afe8626198945e0cd1e4
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xetc.tgz) = 13b0c70af019c1e2bf14c8df794f497c317cc94e23012f61b88e7386327cd43c6a7b00a04ed4d65975849db9978fa63b401a2d1a49f0d476e17e4d5123d66e8b
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xetc.tgz) = ce7639ef1eebd525f0f6631e4aa80a5d44a9ba5e
-MD5 (NetBSD-6.0/amigappc/binary/sets/xetc.tgz) = 2bdf6c00be2e1b9420a8d6fd6ab9e285
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xfont.tgz) = f87acd8ea1747d825ad1038f8984bfd9cc5ed3c8
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xfont.tgz) = bd4c6c5913572cfaff4c3cdd66d2e745605d4f8c70f46e25951c109700c4a05a4b8d1202beb90b7b0cb5ba7b37bdcb3bc31a5ddba8737b7133fa3c2239312f62
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xfont.tgz) = 6ff6daa8eff23cd8f49f60ac7adf82afaf029a02
-MD5 (NetBSD-6.0/amigappc/binary/sets/xfont.tgz) = e9eb507d880069bb39bca1e12ca61f05
-SHA1 (NetBSD-6.0/amigappc/binary/sets/xserver.tgz) = 5dca2b2f9ebbdd6d659e06bdb69987fe02278968
-SHA512 (NetBSD-6.0/amigappc/binary/sets/xserver.tgz) = e2e87ac352cbadc9e0590b7ddc402de6dc4ee3fb26a504265aa1a706ef53135fb80d0d3e149e94825485fd121add254d68a88ead521949f55da7d9e252192575
-RMD160 (NetBSD-6.0/amigappc/binary/sets/xserver.tgz) = 94ab84cf7ee91393ef0630b7b3110a4846940dfa
-MD5 (NetBSD-6.0/amigappc/binary/sets/xserver.tgz) = 6ca7773bb022c8842ce6a0a4a0f23c80
-SHA1 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz) = f4e479e3fec7462469600527ae1b9aecd1c86bcd
-SHA512 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz) = 8cd3e3d089a53b56fdd47ab4cda09b42bf12c92074699a3764f4fdbb23c58425d68f0ee8e862987386d9c8107e0e115daf39bd35058b4e51d93c4dc7d5756d04
-RMD160 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz) = 79dd220dcba4f30fd629e744993e3d8617d2c3ac
-MD5 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.symbols.gz) = 2ffba67d5ec969424a75c71e5f04c77f
-SHA1 (NetBSD-6.0/arc/binary/kernel/netbsd-GENERIC.gz) = c34a668c8d951cd778d973a0066223bd4ea98133
-SHA512 (NetBSD-6.0/arc/binary/kernel/netbsd-GENERIC.gz) = 47685372141fd6fae114fcbcc57016c6896f96705be116020802c6e6a7493cbea9ecf62dbbfc89c49f0f90d42aee1f06b9d6ed3eb679b0b1e3e2705c3ff0ec1c
-RMD160 (NetBSD-6.0/arc/binary/kernel/netbsd-GENERIC.gz) = d46270739b1bc29e7e361805d4f23a28ced95975
-MD5 (NetBSD-6.0/arc/binary/kernel/netbsd-GENERIC.gz) = 046973b3c11b35cb476d07db96419743
-SHA1 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.gz) = 01c3eb7eabe2423ff73da425627b361ff99bbe21
-SHA512 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.gz) = ae090ee3642160ed2ab38f6cc1487b545cce31320c8561bb4af5501dc757f24997798a7556a2048cd7f7e0da9ad3415e458273245317bcacafa0d9b76f4326a8
-RMD160 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.gz) = 9bd6a441f8fbbf01f78b536d75bb8cfdaa56f8cd
-MD5 (NetBSD-6.0/arc/binary/kernel/netbsd-RAMDISK.gz) = 6103f4c89298eab52773ed2a6fa59de6
-SHA1 (NetBSD-6.0/arc/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/arc/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/arc/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/arc/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/arc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/arc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/arc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/arc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/arc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/arc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/arc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/arc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/arc/binary/sets/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/arc/binary/sets/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/arc/binary/sets/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/arc/binary/sets/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/arc/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/arc/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/arc/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/arc/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/arc/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/arc/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/arc/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/arc/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/arc/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/arc/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/arc/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/arc/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/arc/binary/sets/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/arc/binary/sets/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/arc/binary/sets/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/arc/binary/sets/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/arc/binary/sets/kern-GENERIC.tgz) = a49dc5701671d377df81d0dc82ebca225e8aff4a
-SHA512 (NetBSD-6.0/arc/binary/sets/kern-GENERIC.tgz) = 75bf73c2b22aac1948b5c0fd6ca0a0d240fc398baf7dfe4bbb155f44c8e3bf47d618fb5ee97215728baa471c25dddc285643064acbfed88fcc33f463ec36162a
-RMD160 (NetBSD-6.0/arc/binary/sets/kern-GENERIC.tgz) = 49075dea0d02de7d508afb65fa4c4591f7ab1b0a
-MD5 (NetBSD-6.0/arc/binary/sets/kern-GENERIC.tgz) = 3dd1b55b9d8aaa84ce5630c649d6d17e
-SHA1 (NetBSD-6.0/arc/binary/sets/base.tgz) = 5c25c736260c32dc5e61db84d779f979421417c4
-SHA512 (NetBSD-6.0/arc/binary/sets/base.tgz) = 7bccf72e05a792158f7aa8617b270d860221b935c3c092da8961b35277931500f5e6e8a572536b7371e66dbe7368b17f62512783240dce9aa2990af50c60fc1e
-RMD160 (NetBSD-6.0/arc/binary/sets/base.tgz) = c36e7a0c39a18646de9363196aa56dd0c4a6ea6b
-MD5 (NetBSD-6.0/arc/binary/sets/base.tgz) = 97e2836870812371a84cf44790cf6f16
-SHA1 (NetBSD-6.0/arc/binary/sets/comp.tgz) = 52ac953130a36ae6bba2139c7892d6ccbab0f0cf
-SHA512 (NetBSD-6.0/arc/binary/sets/comp.tgz) = a09590c181019592ffb4341620eeaaae1f25e971ee975ac337c96cdc5dc6ceb2074dcba6a5dcc723c30e5db3d32148146eb6c1eb38390d0162aff4d5071434c6
-RMD160 (NetBSD-6.0/arc/binary/sets/comp.tgz) = e9c5ae0abd43a2ac743f62a498ad8bb0dde61ed2
-MD5 (NetBSD-6.0/arc/binary/sets/comp.tgz) = 2eebbc2b1b8bbe21166a0d860bea9dd5
-SHA1 (NetBSD-6.0/arc/binary/sets/etc.tgz) = cfa766b3b33eeae2aa28312e0ca6e434e2573487
-SHA512 (NetBSD-6.0/arc/binary/sets/etc.tgz) = ef3806802fa813b1bb60674c032f31e5a140b89953aabe715d050e7c820413ae991de791e96d8aecaa1aea8989f6f0268726ad5dc62e42ef06ca6670fb6744ba
-RMD160 (NetBSD-6.0/arc/binary/sets/etc.tgz) = 395630144133efd05b0fbe596773c5ea4218aa8c
-MD5 (NetBSD-6.0/arc/binary/sets/etc.tgz) = af810d6fb839f2953bba9844501cdcab
-SHA1 (NetBSD-6.0/arc/binary/sets/modules.tgz) = cfd582b6f65203d1916ed6655d02f5aa6ad5ba88
-SHA512 (NetBSD-6.0/arc/binary/sets/modules.tgz) = 86be394fe232856d0de502fb1569fd03de91a81ad782389414ed75618d63d97d8abebc14fd44843414d865071f51940c248d076a57524e8ef91c791ee98620c9
-RMD160 (NetBSD-6.0/arc/binary/sets/modules.tgz) = c63e9a0caaf005f8c03275c8faf582d95b3c6700
-MD5 (NetBSD-6.0/arc/binary/sets/modules.tgz) = cd4a56dcabef37fbf7a3fb7ee95ea738
-SHA1 (NetBSD-6.0/arc/binary/sets/tests.tgz) = 25fca6e0ee3c0c05615fb5753d78584e0c3fd5ca
-SHA512 (NetBSD-6.0/arc/binary/sets/tests.tgz) = 54fd09bdf390959e4a795af7efa34cf463f0d41676a87bceae7e8278f97693549bea10d7de099c0f3af34f58ea76820ecd357894d9c7e5bccc65d2fa9736dd40
-RMD160 (NetBSD-6.0/arc/binary/sets/tests.tgz) = baf5b98a820547d80922493f59c48028345306da
-MD5 (NetBSD-6.0/arc/binary/sets/tests.tgz) = 601e2f0d37d00e07a671ed2cb823e68e
-SHA1 (NetBSD-6.0/arc/binary/sets/text.tgz) = fe43613098e27d16d74e9c21e0b18cc5e932e673
-SHA512 (NetBSD-6.0/arc/binary/sets/text.tgz) = 4935e883c8328121eb941726a41487dc9048a9d3265460e9730465a3d1b8283e4bd01ad2c220607848f898f178dac0738c6bb6402243bcc338e5f933a6c99f06
-RMD160 (NetBSD-6.0/arc/binary/sets/text.tgz) = b57da314266be1fdf31856f5ad5a52703016b61e
-MD5 (NetBSD-6.0/arc/binary/sets/text.tgz) = 9236a9d595f3a96234ba9156ed3437e2
-SHA1 (NetBSD-6.0/arc/installation/boot) = 889f35138bde05f74032980aa2ca7c17442c4324
-SHA512 (NetBSD-6.0/arc/installation/boot) = 9a1ccabb379ab44784c481e749f633cf4235c03e22c24f2a837e6fcbe28b23f7bde8a7ed596dde93996bdc5efbf639ed6a073fd848eef2b0d80e932ba360c9e5
-RMD160 (NetBSD-6.0/arc/installation/boot) = 369fb440abfca5f2f4340740265f61a9d2ca8df7
-MD5 (NetBSD-6.0/arc/installation/boot) = 36b7e6f86ddc8aede5c9ea0160939cb2
-SHA1 (NetBSD-6.0/arc/INSTALL.html) = 0cf4b01d7175a1eb6dd2734e412c3bed0fb0967d
-SHA512 (NetBSD-6.0/arc/INSTALL.html) = 68a51695f6fbe96610354b253741efcd7f52bd543351a3f3b734398264f7b75c03e72ee731be917b2e34a0041c621107177efb57ba9abe6158456e19526845db
-RMD160 (NetBSD-6.0/arc/INSTALL.html) = e174f77ca32ded5ae5363e88ca33ec17df6b95ae
-MD5 (NetBSD-6.0/arc/INSTALL.html) = 94eb6340dc1e3d6ae7b539e3ca3744a4
-SHA1 (NetBSD-6.0/arc/INSTALL.more) = 6146391a310edb4727d4b5a61793d535c0983c0d
-SHA512 (NetBSD-6.0/arc/INSTALL.more) = 12e1ebc08bd3fb259caafd6b75e1120daba07fb4ad201f513459e5e36ad96790a26076cf154b34332a54192cbda13bf0b85847478a2443114522225f1adbf95d
-RMD160 (NetBSD-6.0/arc/INSTALL.more) = 52a7433c4a3fbb3fa6ca52117f9f902a96748dee
-MD5 (NetBSD-6.0/arc/INSTALL.more) = 9a6a3c4c52c723151ac81fc40567f625
-SHA1 (NetBSD-6.0/arc/INSTALL.ps) = ed6ce1da53cd979819a5080666fef04c62c3cf60
-SHA512 (NetBSD-6.0/arc/INSTALL.ps) = 8ea3bef19288069a145d6873030895c960811c8dbcff956101f425a9ce0a57701f0f0579c925248b5ecc9f7ac110ddcb18b8041ed74ffd69c22b598ce8d89788
-RMD160 (NetBSD-6.0/arc/INSTALL.ps) = e1c8d2d8ef5b2d170f659f14bf124063d8d34c22
-MD5 (NetBSD-6.0/arc/INSTALL.ps) = f97b10a669be7ec3f9603d5f936fe9fe
-SHA1 (NetBSD-6.0/arc/INSTALL.txt) = 799c2e5d3f8a8d4c93e0ba1e0e738dffbec98504
-SHA512 (NetBSD-6.0/arc/INSTALL.txt) = ed89213d84a4ce5ca43b8b7ed35b6e2e731c77205518b8c48258b18567ecc6e2150e81c2d2a4ca0b3c2bbf8059218d0cf918b168c2f55b305815f89ce3cb45c7
-RMD160 (NetBSD-6.0/arc/INSTALL.txt) = d9be36fb053f75805f95439723d18875e6d0cd5c
-MD5 (NetBSD-6.0/arc/INSTALL.txt) = 56f07f0f3cd11f592b56f5978d23c533
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-ISAIDE.gz) = abe68fd4d9212fee55be19e05105bed9ee51687b
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-ISAIDE.gz) = 759476c2983250d38267853ca369a432b968e9d8187ae8476d5e2931667518abc63fadef50c6bcf55299866c019d74790e8268b58f433c6413c03cfe1460d8a0
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-ISAIDE.gz) = defe3e00a5198a97320f53a1460eb7601f2d5a9d
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-ISAIDE.gz) = fadc1a2fcec83bae67e6e70f1ee8d4c6
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-ATARITT.gz) = 9d2e04ce73a5a24cfb10801c0ccf659242602dd3
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-ATARITT.gz) = 27b28318b371707290e3b8482dc0e98e32c6d5b7fb4d38e3bddda7bc5e1b953ae0651b680cf7ea9a296018b5a0ac883cb59d4da3c02db1baa67e151da783f6ed
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-ATARITT.gz) = 77d47ef664e710823cef2633c92bde054a970552
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-ATARITT.gz) = f99c55c64e84c84de3991fa4f21897c5
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-FALCON.gz) = 9c0e5bc223f81e24108dde3428ee8833e557d891
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-FALCON.gz) = 6147ba07227f85a3ba2ee1e78449aa2c4e0ad708e9cc000f456a74a69f6443f099e200f2dd3602ceb453dffe7b41c90c32f45ff63d44d59cd0ce24ba68f3ffa1
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-FALCON.gz) = b2c8d8f4742da6ccf1e0ec3811160d9ce9606baf
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-FALCON.gz) = 2189a16e1ee3e1586f691490fe6bfc9a
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-HADES.gz) = c4f3101449a14e294394b13eacff10053078ad4d
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-HADES.gz) = bef4589fa86a33df94fdb36038e93528984629682c2827ed4dad582ae17cfea37b9841608dacc95fd8a55c57c40a81b8d24d7afd253dd46d7af970e0927518bc
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-HADES.gz) = 821bc772711ece35be32f1fadac8fa31a10041ac
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-HADES.gz) = 82b69e45fbf4740774a338f62c987dec
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-PCIIDE.gz) = 4e056fe210771d7d97ad303cc4d92fed64d883f2
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-PCIIDE.gz) = 2c303e9421be0eae122cf55c2b5205b4c2129e6bf3033372f8fca93ad410f92137db6463ad9b75db53526dccb2b9c8a3da23d04357a6a3663aa58972c39184ad
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-PCIIDE.gz) = 878a29fec55b0429c47f0932facf25139721c88d
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-MILAN-PCIIDE.gz) = b2e52ec52845325caf8fce89fcf5b034
-SHA1 (NetBSD-6.0/atari/binary/kernel/netbsd-SMALL030.gz) = e6b4dad71f39674e21a0baa6cd5bbc61872786e1
-SHA512 (NetBSD-6.0/atari/binary/kernel/netbsd-SMALL030.gz) = 856e3435c5ae454b145bb16a679da93cc966cd7ee75ab8cce77f216d4070b9e3f1a0d2bf15ae9eda28f48a0eaeeae590559888eef477ab4c72badcaed7b7484e
-RMD160 (NetBSD-6.0/atari/binary/kernel/netbsd-SMALL030.gz) = 449713cd4e5c43656648e76a59b0228cbf51de82
-MD5 (NetBSD-6.0/atari/binary/kernel/netbsd-SMALL030.gz) = d38e0f0b5090a8d0d6552092c241e105
-SHA1 (NetBSD-6.0/atari/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/atari/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/atari/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/atari/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/atari/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/atari/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/atari/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/atari/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/atari/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/atari/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/atari/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/atari/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/atari/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/atari/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/atari/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/atari/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-ATARITT.tgz) = 589b0e48516d961e8961847f441bf7dbcbb67700
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-ATARITT.tgz) = 00ad9fefd5c3fb87f45b20612582b818def61c0f08483f923622a19e94090feb7ba1e39dc8d3b4b7d57e70c60aacaaeee966e1a6a788aff9fbbedc6848e52cd4
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-ATARITT.tgz) = 510465a0b2f0e19a4873fa87fa66d7c47ec8226e
-MD5 (NetBSD-6.0/atari/binary/sets/kern-ATARITT.tgz) = cea983b428fc041a9ad553b25e6de431
-SHA1 (NetBSD-6.0/atari/binary/sets/base.tgz) = 948b83244fe16e439af84cee9dd48f555ff2c479
-SHA512 (NetBSD-6.0/atari/binary/sets/base.tgz) = ee2c41fa904f75740c358f85bc97c36537d6a0f252bfb4ca3ec60098109ca07b8be38e8474ea7355e557793fe726160e1f0d10de2769720432a8cb0896bdcf7f
-RMD160 (NetBSD-6.0/atari/binary/sets/base.tgz) = d08e1a2d3eb8629aafe49fe89e9c00c65c97967b
-MD5 (NetBSD-6.0/atari/binary/sets/base.tgz) = 07d14a63f5591f86d0cb7728174ad6b1
-SHA1 (NetBSD-6.0/atari/binary/sets/comp.tgz) = 081806be5308d18e9910a9f3394bb15fec7111bb
-SHA512 (NetBSD-6.0/atari/binary/sets/comp.tgz) = 17e0a84c5ccefcbee5807012b93f413fa90d6fdb55bc91020cc5265528eb4331a4e2d5f951ac457b0fbf24ce2a97f7dde29a2cfda946edc5db2bf7c574289a75
-RMD160 (NetBSD-6.0/atari/binary/sets/comp.tgz) = e2f1fbee6aa542a8b2d80cb2eb4b593fa13a4dae
-MD5 (NetBSD-6.0/atari/binary/sets/comp.tgz) = 46cdf183c47138a86c07a43cc4c365d7
-SHA1 (NetBSD-6.0/atari/binary/sets/etc.tgz) = 7e13a9c53246d90a86a0db1a3e38ade70705402d
-SHA512 (NetBSD-6.0/atari/binary/sets/etc.tgz) = d751e14266428861f1ef067f02c8e4f79047e3c482f9b89ca44e880ea71ef66de3792d03f4b3704fc98bd8c9ff17cbdb42fa4c4cf3dccff9a94e88662a9035bb
-RMD160 (NetBSD-6.0/atari/binary/sets/etc.tgz) = f09fa0ba9766e3cbaf7eb0f59f32dac370d37f14
-MD5 (NetBSD-6.0/atari/binary/sets/etc.tgz) = 42096354bae512677af5f6d5c9a8484c
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-MILAN-ISAIDE.tgz) = c623eff071500b740c875a6984194d2826ab66c1
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-MILAN-ISAIDE.tgz) = 25f68ad0b3a910cad6f8d8a7cc232a3e6e71ea381fa8cefd342ff3c18c869abdcdfa517984c54ffcdf72e7393b79aeff78467137d6729447042233a55297bfe7
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-MILAN-ISAIDE.tgz) = 16cc868818532530f4441eed778a26b98ba06190
-MD5 (NetBSD-6.0/atari/binary/sets/kern-MILAN-ISAIDE.tgz) = cc65ece6a5e66a5c1f0aa67a24bb1726
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-FALCON.tgz) = 4e7e28bad7354a7bb7fdde4f608340c4907b4453
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-FALCON.tgz) = 24d5df6a74be2fa65016ab03eb11bcd6dbab11ebc33b0ab936685345ff54fe518b6b87171c93c4afab54b0374fb9d5ffa29390a34dd218b400e985dfeae8d147
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-FALCON.tgz) = 82c44f12a090c11dd2b7de11b8b9ae95fa74ed08
-MD5 (NetBSD-6.0/atari/binary/sets/kern-FALCON.tgz) = fea878ea06b74eef20f60e192539f033
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-HADES.tgz) = 24a828836e47ffe647f8a16b1fd0469a9ee62f03
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-HADES.tgz) = 8bbc2397d01594b89515abea27fa58e9ce7dbda5d2f9468b5bc46576d858395c11e4e1d6a9c25dd9b7d5ddb7ac2c2fd2208d95274f9ce7519fb470cbf08da2ae
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-HADES.tgz) = ae93fdba82eecea06486ad88927f25fe1013803d
-MD5 (NetBSD-6.0/atari/binary/sets/kern-HADES.tgz) = 244b09181178cc0b51c79ad7568f4d9e
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-MILAN-PCIIDE.tgz) = 0269a5f553ad95565fb5092460fbefb4567afa27
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-MILAN-PCIIDE.tgz) = cd74cbc52c0357b9af3290dd02362e5561202c14d58bad0d65b96c84361be2e774c9c58b5e38ca9523a7e796d778330cf257f8e2482bf8153e7a43c167e7c392
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-MILAN-PCIIDE.tgz) = 87ac890b25b9bacc28ce600476add0d6fd8aba03
-MD5 (NetBSD-6.0/atari/binary/sets/kern-MILAN-PCIIDE.tgz) = f18391129e4495470783e0a1d8467a81
-SHA1 (NetBSD-6.0/atari/binary/sets/kern-SMALL030.tgz) = fff933858b1ef2c086ce99631195c2e89714b540
-SHA512 (NetBSD-6.0/atari/binary/sets/kern-SMALL030.tgz) = 40458f1b8455fcd8fb3d01dc52815294705ab3752a5952ce93de01c5b7fb553d5aa0aaff4d9124d46e43d318ed6289c336e0a73470d7471fe4989877cae347a7
-RMD160 (NetBSD-6.0/atari/binary/sets/kern-SMALL030.tgz) = 08e49adb3414a2c4490b143865dcf2f0ab3ff337
-MD5 (NetBSD-6.0/atari/binary/sets/kern-SMALL030.tgz) = f0aee544f1a3c894e71ff07e1ab135a7
-SHA1 (NetBSD-6.0/atari/binary/sets/modules.tgz) = 8ea8801011d50b52e637ee0cb1b94fdbf79b9de4
-SHA512 (NetBSD-6.0/atari/binary/sets/modules.tgz) = 6f002bf0695f00d06ce7f43f3087d6c06949b5df8e33baf0b8b30ac18e72700445dcfeb74b51c16fab32e63e537c10bf696bfdb31ab8b08d25c9189075cd3673
-RMD160 (NetBSD-6.0/atari/binary/sets/modules.tgz) = 2bf65897ea1432bac2666df1b221821a5a0642a5
-MD5 (NetBSD-6.0/atari/binary/sets/modules.tgz) = 4dda2688a56fa0774342c63c367c8ec6
-SHA1 (NetBSD-6.0/atari/binary/sets/tests.tgz) = 88a32113d4d6d34b29a94e69c0e4510b51e7e059
-SHA512 (NetBSD-6.0/atari/binary/sets/tests.tgz) = 53fa49988eca04a409dad693f26d5445cdafa9ff69ac918583849d9c6726278b9f0d2fd0da23c05e73d23453970eaadb7b233d951b430c1b7b3ca1b05bab5a24
-RMD160 (NetBSD-6.0/atari/binary/sets/tests.tgz) = ab9f0395fd5d0d1a732000d07e71efe3860f9a32
-MD5 (NetBSD-6.0/atari/binary/sets/tests.tgz) = 213a94d65400a854c2260e98f6150df5
-SHA1 (NetBSD-6.0/atari/binary/sets/text.tgz) = de8e33381d0714b33aab422c2aa5841352941712
-SHA512 (NetBSD-6.0/atari/binary/sets/text.tgz) = bf15a081319d8ce62cc14f465bce3b204bc9a5f57f7ed9d163cf71a9422eeec5ff0e84de7c43d0fc503e9422283e2f99e1e48ee5ccb9224effdc2e3ba70f31db
-RMD160 (NetBSD-6.0/atari/binary/sets/text.tgz) = 387ade3ddcc90bd7b6174deeb24bd8cc6a818e46
-MD5 (NetBSD-6.0/atari/binary/sets/text.tgz) = 937c56219d0ec6a96aef98533e10b569
-SHA1 (NetBSD-6.0/atari/binary/sets/xbase.tgz) = 07c1478cf8a0e4b7ee4b5e49841966fe17f3d797
-SHA512 (NetBSD-6.0/atari/binary/sets/xbase.tgz) = 54d845bc341dc68debf004659d2dcd753604de16e896bceabe6587bfa2934bd5b81b19936c3635cb61dbdee4b4d571603659cd6ae8206ccdaa345f3779e4a83c
-RMD160 (NetBSD-6.0/atari/binary/sets/xbase.tgz) = 6a3aba94b4acef9e311f61c1acc96b33c8707ea8
-MD5 (NetBSD-6.0/atari/binary/sets/xbase.tgz) = e02f145dcfd9f7d1c7be166b28559094
-SHA1 (NetBSD-6.0/atari/binary/sets/xcomp.tgz) = cea8de3b7820897ee8270ae3b591fb602e0028d9
-SHA512 (NetBSD-6.0/atari/binary/sets/xcomp.tgz) = 9e6344200d3ba54e29db576b9f7c0c1d2465cbda8b8a05d015596e2b162c207453cfe0ddc7f9d55bd8463bf2c200c2dd43b4ec34c30635fc0923a0d31c2a8ff8
-RMD160 (NetBSD-6.0/atari/binary/sets/xcomp.tgz) = e64e955294f627c722087a4d1e62a6d646028a37
-MD5 (NetBSD-6.0/atari/binary/sets/xcomp.tgz) = 870efcab1ee55d57351c55ac3c412dda
-SHA1 (NetBSD-6.0/atari/binary/sets/xetc.tgz) = 64dca98d1263e3d78ef7e240c9975e9077356ce0
-SHA512 (NetBSD-6.0/atari/binary/sets/xetc.tgz) = 1e76598c460681b43f2c5b19f2f4af9efeed6ce16aa8bb4d34f99083ee46cf6c5c31c0aeab974a723a3338c3a9ab1a50ad273061f9f02870d9741ec8809ce0cb
-RMD160 (NetBSD-6.0/atari/binary/sets/xetc.tgz) = f147db5da2954155dbc754963d02f309ab41e923
-MD5 (NetBSD-6.0/atari/binary/sets/xetc.tgz) = d23248d3d92350124d8e9e869b28a5f7
-SHA1 (NetBSD-6.0/atari/binary/sets/xfont.tgz) = ad9fb5958debad82e953bc2b1e7e53292d70463b
-SHA512 (NetBSD-6.0/atari/binary/sets/xfont.tgz) = 789529bdf38abda3b00e1db3cffc12272af8ec7f7a52855e0ef5af09ac7cea8639b407265ee6082809127b3bd1b673d686d967c987be6ac12be3825f9531933e
-RMD160 (NetBSD-6.0/atari/binary/sets/xfont.tgz) = f060722e795db40bec2c283ecbb5f7bdbb688ce0
-MD5 (NetBSD-6.0/atari/binary/sets/xfont.tgz) = 1b83f33dd3e43db09d0b55502a7b347a
-SHA1 (NetBSD-6.0/atari/installation/miniroot/prepare.fs.gz) = c4e92cdcb08838b9fa5dc32fb1bd923dd2b97291
-SHA512 (NetBSD-6.0/atari/installation/miniroot/prepare.fs.gz) = 4c25bd0fa0c584b09c2b0a2f9a4a67e942d9a16d9646f1364c71b8bf24326902fae74dce17ee60c81261777ac27e69c2ce4988779ac604a6ac6ebbd4636698d6
-RMD160 (NetBSD-6.0/atari/installation/miniroot/prepare.fs.gz) = 247f6e13edeb6272ceeed462d8729d5e27db000b
-MD5 (NetBSD-6.0/atari/installation/miniroot/prepare.fs.gz) = e99c7d5da695d99c717db4585cac009c
-SHA1 (NetBSD-6.0/atari/installation/miniroot/sysinst.fs.gz) = 353039d699408734197b1a5ecc2490310269e23f
-SHA512 (NetBSD-6.0/atari/installation/miniroot/sysinst.fs.gz) = bd8f6ce4115a98b026fc906c1259ce8ea91d51b97ac44190362a03154ad12c05419d848daf27749a17f0e255b9cb01d2ccae81e75f634825865b95032e5e634f
-RMD160 (NetBSD-6.0/atari/installation/miniroot/sysinst.fs.gz) = 3f866900d10efc89f1f22e8ab6099f26d79cb5f4
-MD5 (NetBSD-6.0/atari/installation/miniroot/sysinst.fs.gz) = 4fabfb561929af7e667fdf39a64e58dd
-SHA1 (NetBSD-6.0/atari/installation/misc/file2swp.ttp) = 9aabfba1673d710445ce4a151e070cd00a364795
-SHA512 (NetBSD-6.0/atari/installation/misc/file2swp.ttp) = d522703bab622aad1f125bf076fa58ea8a309c34425d188df8130298f5af0ccf8d0b0980ddbb90bff86e73cf11d082081f5d0cbe5e8dba68fdc87c9fbdbe2da4
-RMD160 (NetBSD-6.0/atari/installation/misc/file2swp.ttp) = 5bc12b2214b90eefc315f50321b072f3359443eb
-MD5 (NetBSD-6.0/atari/installation/misc/file2swp.ttp) = b2e39863389322ab0834a30a58fbe553
-SHA1 (NetBSD-6.0/atari/installation/misc/aptck.ttp) = 9a1b1b99bd6b50281cb1a1416f854b1d1e0909c4
-SHA512 (NetBSD-6.0/atari/installation/misc/aptck.ttp) = 90fedb40ba1ada8a28b228c0ad34ce9e400b3f9985d69b52345df1e29c7b9b2fd0ceafe1ae91cab0095f3f24ec8bbb274e2f514e351b39eeb8591d3c5ec46d03
-RMD160 (NetBSD-6.0/atari/installation/misc/aptck.ttp) = e399308e499e2e859eba1fc190208537421e407a
-MD5 (NetBSD-6.0/atari/installation/misc/aptck.ttp) = 5061a34d4cd283af586c5f382b546a82
-SHA1 (NetBSD-6.0/atari/installation/misc/chg_pid.ttp) = a989a7318087ebccdb92ea9c84e81a8fcb1d2bd3
-SHA512 (NetBSD-6.0/atari/installation/misc/chg_pid.ttp) = 15dca31b0555023ba6e2b04e6bca504adddcc56177f6224a2757d8784ded4a53fd5cf68b3dd5e794b46bcfba69d199dd430aa9379ed565a7aff4c360855cc4cd
-RMD160 (NetBSD-6.0/atari/installation/misc/chg_pid.ttp) = fef62601213fdafa60099375eaed9ea23163e165
-MD5 (NetBSD-6.0/atari/installation/misc/chg_pid.ttp) = c414114be1b45d1b8abcd41091fb0c6d
-SHA1 (NetBSD-6.0/atari/installation/misc/rawwrite.ttp) = 18c663ff37bf90130bc6eeefd3aabfcd632c654c
-SHA512 (NetBSD-6.0/atari/installation/misc/rawwrite.ttp) = 259903e1e3439b3a3d128a18a597ccb6ccec507bc6b1c449445e7e00c4e0d37e436ba2be0cdb71a7a756c30c2a6406cffd3bef0631b2083a2f0402ab322dbf96
-RMD160 (NetBSD-6.0/atari/installation/misc/rawwrite.ttp) = 3b66c3e7f84325e3be39c15e2a597d2bbd233a79
-MD5 (NetBSD-6.0/atari/installation/misc/rawwrite.ttp) = 20458ba9d4f2fae37607648aeb92bf71
-SHA1 (NetBSD-6.0/atari/installation/misc/gzip.ttp) = 2f3c87cac323a1641622ed960d7ca3df6d8e92ce
-SHA512 (NetBSD-6.0/atari/installation/misc/gzip.ttp) = 37be09560542fd55afebe8f3a07a76d4121a49c5d8771107a6065dbe55c3d8e33ca25326ffdecb38ceaba0e5b6af33f78f92ecf2600169779b5d7282f74335a2
-RMD160 (NetBSD-6.0/atari/installation/misc/gzip.ttp) = 8e9dbdb381f2b7ebaf01597bca73ba920e18427f
-MD5 (NetBSD-6.0/atari/installation/misc/gzip.ttp) = e27e5b3c585ad0a96daaaa810b56f5ef
-SHA1 (NetBSD-6.0/atari/installation/misc/loadbsd.ttp) = c7f08ef85b1b3120061b3b651456cd23f8937c16
-SHA512 (NetBSD-6.0/atari/installation/misc/loadbsd.ttp) = 2b645062a84fe5892c3d424d181dd6ad11f134c4a6728b4ca9a67f1912642daabdfaecdf7af985b4d4907d93adc1b72ed86a5cf9b57de42e9213582ec89a8723
-RMD160 (NetBSD-6.0/atari/installation/misc/loadbsd.ttp) = 802c240f7069d79c0432b28dead7884bc4a06d38
-MD5 (NetBSD-6.0/atari/installation/misc/loadbsd.ttp) = e5e92b220890c5ca942d0c878fd090ca
-SHA1 (NetBSD-6.0/atari/INSTALL.html) = f71f76494a6bf37c8aefe74e698838c1a03b14c0
-SHA512 (NetBSD-6.0/atari/INSTALL.html) = a12b9739f7918dd22bb0434c3d1c41c5031454fd6dbcb53df4eca669b9b4bc918c1f8df379bcac46204664dc521a049b5c39b4151f207a4a22b19b436917fd35
-RMD160 (NetBSD-6.0/atari/INSTALL.html) = f634ad4adfaa1002f352d703118aba204cbe4f60
-MD5 (NetBSD-6.0/atari/INSTALL.html) = 7eac9b0603de1d7d718b994c92b7a229
-SHA1 (NetBSD-6.0/atari/INSTALL.more) = 6ba2460611e6f92531b9ae9d28f4c68d302b9dc5
-SHA512 (NetBSD-6.0/atari/INSTALL.more) = 718766711a583a0539790a3fa7046f845a15f53dd1cd1f0ddadea939158256b3fbf5dced1a88ea592ded2685f0fda81984d6cb137f26f7b543aded6c7c1ca6a8
-RMD160 (NetBSD-6.0/atari/INSTALL.more) = 8bdd7c42fa93913bd14d5ab80457394e289f8c03
-MD5 (NetBSD-6.0/atari/INSTALL.more) = 19adcdce47ce4b9070326b433afe5a3a
-SHA1 (NetBSD-6.0/atari/INSTALL.ps) = 2d9874be06bf612885e3f19fc37635b0c421f52e
-SHA512 (NetBSD-6.0/atari/INSTALL.ps) = 0dd3a09f0a91403f412aa3650847c3512db2ac3d36d0133ac924db74d07b59607c9f57df7fd0df4a3652adbba4842f6b6afa01c07cc4a06c36623ad9c60a9ca3
-RMD160 (NetBSD-6.0/atari/INSTALL.ps) = 83f619a939ef01654f3e3bce7f7ddea0b88828bc
-MD5 (NetBSD-6.0/atari/INSTALL.ps) = 73fd3b04168f78f2de31b91190851ba9
-SHA1 (NetBSD-6.0/atari/INSTALL.txt) = 711ce58ce059429925a6e08ad178569c5e00a00d
-SHA512 (NetBSD-6.0/atari/INSTALL.txt) = b837d76a7e0d754c09fff90845906ec6a1dc5ed77832b91442d5a9ec3608f5e6785782ff1debe3b145f23ba382c5472abec75f49055859bc715caf713941cf41
-RMD160 (NetBSD-6.0/atari/INSTALL.txt) = ecd373463a1cfd5b5399cb3ca0204362ddb22be2
-MD5 (NetBSD-6.0/atari/INSTALL.txt) = f6b564115bd3ae1a28f79dd879fe8ce6
-SHA1 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.symbols.gz) = bdb282bf1fce2a0c48cf661a68b16fb7663859df
-SHA512 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.symbols.gz) = c476616f879c94a8135889c4691ca927896c74950c16543039a74e4befd918619845f31e519cb452bd215d8ca4fa1acd697f9867810f4961d517f7803f7e2c33
-RMD160 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.symbols.gz) = dbb18f3fb59483723599306093a562a45f23392b
-MD5 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.symbols.gz) = 582ae8bf879f7bc42d24bf114a5d6a5a
-SHA1 (NetBSD-6.0/bebox/binary/kernel/netbsd-GENERIC.gz) = ecfa395d442d86acbc8bbd080c04a8137012138c
-SHA512 (NetBSD-6.0/bebox/binary/kernel/netbsd-GENERIC.gz) = b48b213c4ffd06180d1272a65e27ec0ed539e731e07aea29d31f6c939fef99e1a965c42e2fdd99daad1e8ee543c99a02c420fbcf6531d47e961e7b295150fdb9
-RMD160 (NetBSD-6.0/bebox/binary/kernel/netbsd-GENERIC.gz) = 0b01e797fe821429603d9252035e7425f388046e
-MD5 (NetBSD-6.0/bebox/binary/kernel/netbsd-GENERIC.gz) = 22289b3d7d60df27fd0ed86731ab77bf
-SHA1 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.gz) = 8721973ccd6399bf563bdb266d9e5316e1ef98ed
-SHA512 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.gz) = 5390ebe49a1d50d2ba42e529c8fb2c23606e4650cd3225783809ee4dee6013f60cf7dbb347fabf48f3d7ce98ededef37cfc8d5de5c07ad7462dacc668243f429
-RMD160 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.gz) = 8228a5df5239737e7ba039b84303c4cd491e26f6
-MD5 (NetBSD-6.0/bebox/binary/kernel/netbsd-INSTALL.gz) = 9165b1f4313cc543868d7ab7f6eff5ad
-SHA1 (NetBSD-6.0/bebox/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/bebox/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/bebox/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/bebox/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/bebox/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/bebox/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/bebox/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/bebox/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/bebox/binary/sets/kern-GENERIC.tgz) = d4e8dde09eeb9886e1d84573d136ea92db147201
-SHA512 (NetBSD-6.0/bebox/binary/sets/kern-GENERIC.tgz) = bb375fbcd379a02ccb0f770ae22aeb02f90fda95be2864f085bd46ad58c670e5fda2792b9af8acb5972398a4056ef4ca8d95367f20f57e1258401d1b02d29abd
-RMD160 (NetBSD-6.0/bebox/binary/sets/kern-GENERIC.tgz) = 2726cf7d2e1fa0278bb78a1f1d21e3a6846bec27
-MD5 (NetBSD-6.0/bebox/binary/sets/kern-GENERIC.tgz) = 17e1bdb7465cc8aff08f41a81a37913e
-SHA1 (NetBSD-6.0/bebox/binary/sets/base.tgz) = cb3438d686bc37c67ef3506e7b5f14af708d0f69
-SHA512 (NetBSD-6.0/bebox/binary/sets/base.tgz) = caaf5501269c91599fe8a6315a14bd33776549df0d82d34e516b846df3ace79c1b3a77ef745da87fca1bcc822201765366a373c2d9e29195b4f76bc954f6903e
-RMD160 (NetBSD-6.0/bebox/binary/sets/base.tgz) = 9eaed756de31f7ef1f390895400ff57d90b6936f
-MD5 (NetBSD-6.0/bebox/binary/sets/base.tgz) = 844ca078de04b6965afc9d6840712a87
-SHA1 (NetBSD-6.0/bebox/binary/sets/comp.tgz) = fa35a56729cf7a8957a24482e5855629b63da9ca
-SHA512 (NetBSD-6.0/bebox/binary/sets/comp.tgz) = dae46ff9a1b0ec32444bf93501e5ce5a003556ec6e057c1a85ef63d6f18fab00370fb5c8c6dda14da7222032f26aded43ff2ba4619df58f13d773f3c55a3203a
-RMD160 (NetBSD-6.0/bebox/binary/sets/comp.tgz) = e23f0ffdecc624bd584b1bdafcc1919c0a6b4bee
-MD5 (NetBSD-6.0/bebox/binary/sets/comp.tgz) = e24aedf775e35faa7b0be771def8e964
-SHA1 (NetBSD-6.0/bebox/binary/sets/etc.tgz) = 7955187dd8c102acefc90e649d70bf87334b8c15
-SHA512 (NetBSD-6.0/bebox/binary/sets/etc.tgz) = 3dbc921b6f58296fecb96ac7a0497f4de1f84179128afa3fe2f0a9260399934f659c53346ab55dbf387f19e348e4cf441506b2b92a72f0a2de71d59701289e34
-RMD160 (NetBSD-6.0/bebox/binary/sets/etc.tgz) = 7426566e042dd69397282ea85d9999952d57fde4
-MD5 (NetBSD-6.0/bebox/binary/sets/etc.tgz) = 8980eb4fe0883bbcf7d2001bc9d705a4
-SHA1 (NetBSD-6.0/bebox/binary/sets/games.tgz) = 780b002a35471789a68ee7be17362c60e96fa5fd
-SHA512 (NetBSD-6.0/bebox/binary/sets/games.tgz) = 954365033c924762b524f0f1e4732216b4c661697336b0947943f05a1d1e0ecc12c1679c1c5d7572e1a15a7296bd7b14d31749917ef03a2b097b94bfa0f16837
-RMD160 (NetBSD-6.0/bebox/binary/sets/games.tgz) = 9b237eefee5dc43fb3fffca5a2aa390fb2c3031f
-MD5 (NetBSD-6.0/bebox/binary/sets/games.tgz) = 337e6739c192296cac92b610d0ad6945
-SHA1 (NetBSD-6.0/bebox/binary/sets/modules.tgz) = 14ad320114a249b1ed676832524f773dae772798
-SHA512 (NetBSD-6.0/bebox/binary/sets/modules.tgz) = 1aa3a619fdff5824c904495352248fe990130b9ce9d9a3cd443afd2f088acf7048150de54f1cc304ccf08587fd91f7614521a0b9be96fc7768c06e0a80ed72ac
-RMD160 (NetBSD-6.0/bebox/binary/sets/modules.tgz) = d1df79e00026a19f724c6115055c611c07d592cb
-MD5 (NetBSD-6.0/bebox/binary/sets/modules.tgz) = 8dc1d2dbc89e5e6aa3e04b0033cc4a22
-SHA1 (NetBSD-6.0/bebox/binary/sets/tests.tgz) = 979d26c8e2e5283c416a2e4f4b603acdb43756a0
-SHA512 (NetBSD-6.0/bebox/binary/sets/tests.tgz) = e726187887b9429ce3bd39fb51e7703792f288c47eb9c0f20b85e1a2be4f6448bc3e73919c5d28c28f400ada5b0b024b647079a3670f0a2153aff9b7f5738f13
-RMD160 (NetBSD-6.0/bebox/binary/sets/tests.tgz) = 5cd1c8a42ae7a6ef706de0fcae5292db026efa9c
-MD5 (NetBSD-6.0/bebox/binary/sets/tests.tgz) = 122dc0ea7ebc7ca924301e406ef6e002
-SHA1 (NetBSD-6.0/bebox/binary/sets/text.tgz) = 30f7a17a6d9b03c7ce09bce6341895ac27c2f7b4
-SHA512 (NetBSD-6.0/bebox/binary/sets/text.tgz) = e258a9a741918d6bd8de1e10cff771541b1f1191af776101ff38c722fb037d44d51879d45a5a90342c7e2c21d36cbf5a9a6f5f1a047e61bb18609385381fc3ae
-RMD160 (NetBSD-6.0/bebox/binary/sets/text.tgz) = 6dee36ded12f84c00d7c82912da8755b0d04d497
-MD5 (NetBSD-6.0/bebox/binary/sets/text.tgz) = e1e3ed8f872b4dd51b555e9100ed6173
-SHA1 (NetBSD-6.0/bebox/binary/sets/xbase.tgz) = 03f73933d3719ef967af4a003282e1d56453e3f5
-SHA512 (NetBSD-6.0/bebox/binary/sets/xbase.tgz) = d90e373c143773a93e430058628bc65161e6c25c725fcb279ac0765edcee8e9cab4ff55fa1d99ea66ccb6ca06133145eaaa77f2c26a082c27a53e2e10a19cfdb
-RMD160 (NetBSD-6.0/bebox/binary/sets/xbase.tgz) = 0fe0422c310a56e55e2d5e4b85e8d8a41daaaf4e
-MD5 (NetBSD-6.0/bebox/binary/sets/xbase.tgz) = 7120010c15d5f84927963c780c9197e9
-SHA1 (NetBSD-6.0/bebox/binary/sets/xcomp.tgz) = 1c7522ec79f661a84912a5213ed835d400e108f7
-SHA512 (NetBSD-6.0/bebox/binary/sets/xcomp.tgz) = bfc0d388d18e14cfe99e6bcbda22e4b11e5082b0acf5b314c6f0275823138c35d1a16c3ab3e3fc27e5a04228d6380ef3c2f45dc807715db2c1de689e5674a397
-RMD160 (NetBSD-6.0/bebox/binary/sets/xcomp.tgz) = 23c8e8bb0e2f0708d2bd464468196f4d74359302
-MD5 (NetBSD-6.0/bebox/binary/sets/xcomp.tgz) = b6fb09a621ed2138ed674838c72ec64a
-SHA1 (NetBSD-6.0/bebox/binary/sets/xetc.tgz) = a14b23868bf88e59f5a845bd86cf4af61522f482
-SHA512 (NetBSD-6.0/bebox/binary/sets/xetc.tgz) = a2aee6ee11a89b3fe3b5834502dfd1a50aec7bdcc0f424b3e9d19400370b922258d77a979dae0bd87f8e55df8da9b98f8bf88a73792b1ca6a8915e5cd08777aa
-RMD160 (NetBSD-6.0/bebox/binary/sets/xetc.tgz) = bf37bf09d79777922f344d6b52f69d50c708b64c
-MD5 (NetBSD-6.0/bebox/binary/sets/xetc.tgz) = 837bbc31ba2a81d2610adf225551a61a
-SHA1 (NetBSD-6.0/bebox/binary/sets/xfont.tgz) = e44a6f29bfb3a947ca7d916c7556386a900cb3ee
-SHA512 (NetBSD-6.0/bebox/binary/sets/xfont.tgz) = 9ca97fbe1d40c26938f5a84f09bf273f132b40a82f3ef548295901840155ca45c68ce0d0d980f7fe63bd8acb57be487fcc5f81e61ae4f9765151333a84636a43
-RMD160 (NetBSD-6.0/bebox/binary/sets/xfont.tgz) = e9e153af690a96523a3b7af0a314e1104fa694af
-MD5 (NetBSD-6.0/bebox/binary/sets/xfont.tgz) = 1323ead1d7e9f69f6790c1eb836ec117
-SHA1 (NetBSD-6.0/bebox/binary/sets/xserver.tgz) = 05c93b9d2b3774b6cb71b9d829f5d21860f549ae
-SHA512 (NetBSD-6.0/bebox/binary/sets/xserver.tgz) = 28c97ffdd74c9a2d1d060ce356fd6951d377b61b7fa691c01a150472b082dd027b2be909508ee3370ec59d89bd9c5e12914b3f34feccc6c7904a9ce49869d7d8
-RMD160 (NetBSD-6.0/bebox/binary/sets/xserver.tgz) = 52564d70781876abda7f16a678791c8b3753f53b
-MD5 (NetBSD-6.0/bebox/binary/sets/xserver.tgz) = aeca26a6ae798bcf849e7bd4df423614
-SHA1 (NetBSD-6.0/bebox/installation/floppy/boot_com0.fs) = 1fc015fd100d0518a57e3e7a30e336be1000c098
-SHA512 (NetBSD-6.0/bebox/installation/floppy/boot_com0.fs) = 674ae651d28163eae5f02f78e427d7291e4b977fff90036b1d6870f572e63b1963ef83453ff9da1d49ebb707ff918c0f64889bc0f7d17072690aadd65837e14a
-RMD160 (NetBSD-6.0/bebox/installation/floppy/boot_com0.fs) = 1f59e43c9e6b08ccd63506a5179fdd2a365151b8
-MD5 (NetBSD-6.0/bebox/installation/floppy/boot_com0.fs) = 300dd58c4641cf1fda257074b674937c
-SHA1 (NetBSD-6.0/bebox/installation/floppy/boot.fs) = 8a5770fb10efc7d7c453138ca866b93e2287607a
-SHA512 (NetBSD-6.0/bebox/installation/floppy/boot.fs) = ffbb187efcdeaaf5018827b619abe00ee42aedabab188a443b494c3a5ab94d21fea4761409d9eb23b5a37d5daee602baa838b1d052e1f66b5380a09ed446fb89
-RMD160 (NetBSD-6.0/bebox/installation/floppy/boot.fs) = 58430893606678b17f132c3f3559dd4d30a7246d
-MD5 (NetBSD-6.0/bebox/installation/floppy/boot.fs) = f807ed8a7b25aa9fc9c08637a5188dbf
-SHA1 (NetBSD-6.0/bebox/installation/floppy/boot_vga.fs) = a922c42dd39babfb12443b7d122526f207969577
-SHA512 (NetBSD-6.0/bebox/installation/floppy/boot_vga.fs) = 4f547ce92d72d826253aafab92f9df42b5dba05031ab4d8537fcd40291a703b06eb2e972729c8e703f4e4e0f75d2a0ee2e2f69e8f5d66735f2932089bf1ec7fc
-RMD160 (NetBSD-6.0/bebox/installation/floppy/boot_vga.fs) = c999c7705d258c4b294f0905ba519ec86b7f34f3
-MD5 (NetBSD-6.0/bebox/installation/floppy/boot_vga.fs) = 343aba7dd2584f3945d1fb539a72dc82
-SHA1 (NetBSD-6.0/bebox/installation/floppy/kernel1.fs) = 8af8e65d2919686db6121c68347b8541991e373a
-SHA512 (NetBSD-6.0/bebox/installation/floppy/kernel1.fs) = 91e8df83298ea05c0bec3920d491ff2277d2342a803f84b7393a160ae4a108b84b7d21a0fbf2875d9248287bf047d075e4d33c582a6083ad276e974139635172
-RMD160 (NetBSD-6.0/bebox/installation/floppy/kernel1.fs) = 169667f00c760604c7302d9299448769c8e07b9f
-MD5 (NetBSD-6.0/bebox/installation/floppy/kernel1.fs) = 84f875ee3ca1633777ae9db0acd4e8ae
-SHA1 (NetBSD-6.0/bebox/installation/floppy/kernel2.fs) = 12e804736be0c389da64cd888c3ebfeeec2a1078
-SHA512 (NetBSD-6.0/bebox/installation/floppy/kernel2.fs) = 151b541d723ea1c09bc93cd2cc6abc6a04d0adff1b20c24f53c5b0a8b72462614e64912c6b21dfc9bf4676e2a60a03cab40b44fa23f7dd70183116b4b55f6725
-RMD160 (NetBSD-6.0/bebox/installation/floppy/kernel2.fs) = 159915fd391a03f34782322760d31e1966669b50
-MD5 (NetBSD-6.0/bebox/installation/floppy/kernel2.fs) = 229b4ef55392a3b8c25b6b53691b5fbb
-SHA1 (NetBSD-6.0/bebox/INSTALL.html) = 836f306d6806f97de5e27bce454acd5882b63090
-SHA512 (NetBSD-6.0/bebox/INSTALL.html) = f903a8d35baabfc1ecf5107a6b321930a4b6966d25e8064c6a14d19ddcf67906fbfe5f227487e4120a876dfdad3ebf4664d3f22a14bed7d970bf3f29ffd2c7b2
-RMD160 (NetBSD-6.0/bebox/INSTALL.html) = 4ad2f27fa58d87d0a1b22c6282894af983f4e89a
-MD5 (NetBSD-6.0/bebox/INSTALL.html) = 8015ad9791e90ca1c944d1ecaab10a88
-SHA1 (NetBSD-6.0/bebox/INSTALL.more) = f00ff910b68e2f4f98bfe3b08c6713a5d27c308c
-SHA512 (NetBSD-6.0/bebox/INSTALL.more) = 2ab02d1a9d69c28d6b0248fd75c3395b5bc6fdefd099c1c8f199c083fc87383478818a152842f749bab553a6420df0c1427820c2b893a47cce693a65db91d175
-RMD160 (NetBSD-6.0/bebox/INSTALL.more) = 357216417da8c0e9fa268285ae401c9b289f56a0
-MD5 (NetBSD-6.0/bebox/INSTALL.more) = 55e950718919e06393d4eec6eeb33feb
-SHA1 (NetBSD-6.0/bebox/INSTALL.ps) = 76f8926725f4b4b2c67518ba8a08c7804d8455a1
-SHA512 (NetBSD-6.0/bebox/INSTALL.ps) = b730f63d8d471706dfb44484b7adb22374a51ca8e506f9b848ff7936149bf3f7b1b335b3e061b4c89904f53556bdd9bffba99a9275a5c78299705600adad6eee
-RMD160 (NetBSD-6.0/bebox/INSTALL.ps) = 4edf6341d842d3626be2f6e51b9fb1e8e2e2331b
-MD5 (NetBSD-6.0/bebox/INSTALL.ps) = 09cc4abbf4039ab00e41994c0e274550
-SHA1 (NetBSD-6.0/bebox/INSTALL.txt) = f826c7a4f2f3500f258f40bb89fd5d996527e6a6
-SHA512 (NetBSD-6.0/bebox/INSTALL.txt) = c8cc1e6e07c502ec0d6d807a67de6ffc943d260e2538d512d4322199e49e70fdcf01cb389455ea6d48655c4a246fa31dedf6c18ec58ef58c6f9b17de068b3944
-RMD160 (NetBSD-6.0/bebox/INSTALL.txt) = 17fb9bcbdd888e110926df401169d8ead0aa1dca
-MD5 (NetBSD-6.0/bebox/INSTALL.txt) = f256d74bbee88c7bb349992fd11f975d
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.symbols.gz) = 6e64a8b0dec1e052750bd03c3e240e2e4678a0d7
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.symbols.gz) = bcbaa47e0c29054669a3fccdade1fd64b75934f33cf34ce59675190fd62074920973675f85dc4a6a4973898df0c41b71bab47cde0bd438db97c56a13e3e5fe14
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.symbols.gz) = 18c790be97dc94277543ab409b0c46a186fc8ded
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.symbols.gz) = fd246c1c2231766dfcd5307328d6791f
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.ABLE.gz) = 837fee4fd025b1b6302e59feb9d0996a5a69069d
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.ABLE.gz) = 8a24960901173b604e26992c2dc3b401eb20787952f6b6c0fa070b10c0d3b5a188241b9353c4ef405c4e9864cf200bf97edf692c45e2eede38b858a890fe7b47
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.ABLE.gz) = 68c9d5f9f4278bbcd6431b34d62a4971e953767a
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.ABLE.gz) = 2f4ae7ec3badbee7e9739207599e1edf
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.aout.gz) = 572497febedc95796b46a3bc0aecad740db1da14
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.aout.gz) = 549c46b80cec59bc05d9c06f03fea4cfe1789c0ca51f2a95ab6f37df7b2dd6450f056e8bd60499ae8d96547c36f2ddb3367910d52b397d2ed5188e25424fe174
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.aout.gz) = cbd8947668d7cf78e2074436ef9d0a046a919870
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.aout.gz) = 82285aa28d3e972d574d369dc25b5f50
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.gz) = 54e76627b1fd3ee4c32046f4105f5809408f881f
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.gz) = ef934d136eccb13da91a086e43c915a52f8206f8fda3237034f9bc03d73fa0147466efd58e231217be5179a8c1e6bc288c55b0c56bc47adb0f7bd45aa89be64d
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.gz) = 39d74bb0008f44f71e73ae7deabaa0795b331564
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-GENERIC.gz) = 11fb2ce363dc7e39ca3a62b11d2aa62f
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.gz) = c55e66950e096d68620ed1fc3296f1d557ed45eb
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.gz) = 32253268b69d201a700dea2a855e966bf9860321e94b99507960b5e6bf870f18f856e4a7e425a236752e48bbf5875ceae38627d2d49e9a63faf0377f75c002c1
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.gz) = 7f7bbdcb761251ba78d769e045a53a73e67c2788
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.ABLE.gz) = 93e3ff78c78c67a40de296421d949551
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.symbols.gz) = 56742c573641715c2ad92e38a0f3206e4b6b3629
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.symbols.gz) = 41ec7eef2073b8f6fd9e34fbe9670cdaafd65b1712397db855eb44212b17a96addcd31ae62479fac09ff73cb650fa9859aab905c727305f28a6841c30c7df54c
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.symbols.gz) = c52d4eb8b33f9562c241dc296f9d9c06ee685e58
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.symbols.gz) = c51c51101225f4f260e1ec92aa64f689
-SHA1 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.gz) = 58e8d3c14ca2714bbb91003f533ae5f967f524b4
-SHA512 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.gz) = e2c5f771f02b6d7896841bf5a25efc16b34830ff375e9be1f3911225313c664b7f3a0ac023e5928c2d5fb7ab584f9bde029480b84ce67bd67ee862673cf45705
-RMD160 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.gz) = 4282d861ac62fa542e4496cbfaca087476d60597
-MD5 (NetBSD-6.0/cats/binary/kernel/netbsd-INSTALL.aout.gz) = e64438671861843fdc0fd4c9f324f04a
-SHA1 (NetBSD-6.0/cats/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/cats/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/cats/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/cats/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/cats/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/cats/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/cats/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/cats/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/cats/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/cats/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/cats/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/cats/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.tgz) = 5ca14afa2e8a62cb54d2ae62e3516ffc10b4568b
-SHA512 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.tgz) = e0189ff9d057ac445ef5ea45155f0a7045b876f7ddbd912b45fb3ee7f2c8bf83a46d167d9a916214d6cc1de9b825dcf91f35384bd3690f885acb44be5356c625
-RMD160 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.tgz) = 5324b2a4cfd27b7aeee8c2bc2cbb6041669e0bff
-MD5 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.tgz) = 6825664fe2f18e25fe7cb307b8f2923f
-SHA1 (NetBSD-6.0/cats/binary/sets/base.tgz) = c458481bd58c1d1dca0329bc28de71409c1e4aba
-SHA512 (NetBSD-6.0/cats/binary/sets/base.tgz) = 52550865b944057be1c4de1f30cb1ef8bf1b126258a0ef2ff7d2108b562b211149cc05b8397fb7c6142a5276e2636192c54cffbf8d424d528c0bce462f155d49
-RMD160 (NetBSD-6.0/cats/binary/sets/base.tgz) = 7977e28aedfcc3e97ad9e748c6d3c7abd4aa831c
-MD5 (NetBSD-6.0/cats/binary/sets/base.tgz) = 2a41824b43d9f6cfee26ea6fe3a04368
-SHA1 (NetBSD-6.0/cats/binary/sets/comp.tgz) = b725c4d09fc5f7ee54c5d800e4c2e12b3af6f669
-SHA512 (NetBSD-6.0/cats/binary/sets/comp.tgz) = e36e73f377ca33d2a76ca25973464ee54c70bafc05fea574fa2edc2060ad93be714a9ee6cb7173b52a75a77b47b49e50dd5b7803fd84afbd6be19b858147d551
-RMD160 (NetBSD-6.0/cats/binary/sets/comp.tgz) = fcc12fec265d939130a40cd2b2d73bc5a97ab1fa
-MD5 (NetBSD-6.0/cats/binary/sets/comp.tgz) = 33321cea969922b1a6ec122d03546470
-SHA1 (NetBSD-6.0/cats/binary/sets/etc.tgz) = 89dc5b13c09b5325742e8e4ca8a22857b29a2bcf
-SHA512 (NetBSD-6.0/cats/binary/sets/etc.tgz) = f18e1f34fd7b909422e431fa16738b047afa451ea9e7e77bbbcf4fc465835ad4b3b5b145efd2a609130d057e5adab868e544806ad7584947dfb82440e976c6f0
-RMD160 (NetBSD-6.0/cats/binary/sets/etc.tgz) = 81e6058380507732dcc4157e10c849d896fc51aa
-MD5 (NetBSD-6.0/cats/binary/sets/etc.tgz) = da8349c012e9f029cef0f909cc466973
-SHA1 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.ABLE.tgz) = c9adc81c86dda4d994d79fd37b7622475310fda5
-SHA512 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.ABLE.tgz) = 5a2c270a700ae0f433afba336f4270c1a9f0646ddc0839318638946f38f23b150775d9f6e2cb91d08ce327f4c2057377e5c27e525277f5c001d1c03fad852ce8
-RMD160 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.ABLE.tgz) = 7c83c750bff69191dc40b6bf34d801cc082f4970
-MD5 (NetBSD-6.0/cats/binary/sets/kern-GENERIC.ABLE.tgz) = 18c1f0b06270fb64a47ffdb95edb7f0e
-SHA1 (NetBSD-6.0/cats/binary/sets/modules.tgz) = fd876e3d182e55ff19b6121b07b8e69fa1d0df29
-SHA512 (NetBSD-6.0/cats/binary/sets/modules.tgz) = a9a55cb34e467094be7e72a443b8a449078efaab3adc8a9b1496e45ea6c9fc7d5b3cc7523b30fade9263cb2f90fe9e18825bc6d5acd415a3fbea1c444ec0ed5d
-RMD160 (NetBSD-6.0/cats/binary/sets/modules.tgz) = 8c6829a3b9d46c091203f11ae7809fe1087e8fbc
-MD5 (NetBSD-6.0/cats/binary/sets/modules.tgz) = fec5cad3f45abd455761405b2b352a1a
-SHA1 (NetBSD-6.0/cats/binary/sets/tests.tgz) = bdfb9591316f5c17b8acfff63b0ab895cb9fe3e8
-SHA512 (NetBSD-6.0/cats/binary/sets/tests.tgz) = aaf8d4b6e428dbd0a162cf09d5bbb3273450b4ddacd6cdcb9ba2175cde5276fc30173466a1e394ca2fadb3e92ee7637d9e8fdfdc7f6e59436b9178efc1806b4c
-RMD160 (NetBSD-6.0/cats/binary/sets/tests.tgz) = cf4cb18da6b8c46c0648d6c33556dca95035b024
-MD5 (NetBSD-6.0/cats/binary/sets/tests.tgz) = 5f83acde92619b5eb23f3b21c3bdfbed
-SHA1 (NetBSD-6.0/cats/binary/sets/text.tgz) = 4434e6febe84969a66d92fdfa147aec4a6f18549
-SHA512 (NetBSD-6.0/cats/binary/sets/text.tgz) = 41206832dff7217dc0f61fa8ed39c7b824bd7f781318317520aaf3b190cf5d8588b5c06a8252fa8318ded7df84a104b9718dbbc4e6d2e3c62c822d79b9be4d3f
-RMD160 (NetBSD-6.0/cats/binary/sets/text.tgz) = d7a3c7498b28f79cb6044f4483f6b4970c2d265d
-MD5 (NetBSD-6.0/cats/binary/sets/text.tgz) = dbd9391020e7272a288c0c30002cad8a
-SHA1 (NetBSD-6.0/cats/binary/sets/xbase.tgz) = ae3b8c01b219ca930ad23427b88601c98fce9ae9
-SHA512 (NetBSD-6.0/cats/binary/sets/xbase.tgz) = a06f8a61a8c61df4aa2f9e0efdaede96e56765552d642ab3f048afeeada1716fbb5a0a5b3f2d511e7a146fa7d173ad0b59d5707a7c9b29216c014ec3911d3d37
-RMD160 (NetBSD-6.0/cats/binary/sets/xbase.tgz) = 032ae59bb4c894f973b3fba09b9c72762f4be5f2
-MD5 (NetBSD-6.0/cats/binary/sets/xbase.tgz) = d021cc89a93acc430e5cad14758b1ef3
-SHA1 (NetBSD-6.0/cats/binary/sets/xcomp.tgz) = 2daa1f374f82e66d62900af2252f72a06f366ebc
-SHA512 (NetBSD-6.0/cats/binary/sets/xcomp.tgz) = 803d5501dfcda968a4f098378989cc8186bda8f9dc28af6b9bc591301edfd0dd194922a0d661c75f3ced1fcdbb700e61eeb7bbf5b95ee6ec1111cb8bb9eec933
-RMD160 (NetBSD-6.0/cats/binary/sets/xcomp.tgz) = 4bf6721bd75641fef50dce9cc5781b6991acd0fa
-MD5 (NetBSD-6.0/cats/binary/sets/xcomp.tgz) = c78fd7987bf26697dcb6447c6818c8f5
-SHA1 (NetBSD-6.0/cats/binary/sets/xetc.tgz) = 081116c5590415004358c063c13f77a32c0fa5ba
-SHA512 (NetBSD-6.0/cats/binary/sets/xetc.tgz) = 129cc55a79bee0d1d821c137fa27ae1fdaa82d71cecbbecd555e7d8ab649dfccbb1c2086575e97ff66bd40a50a34ab5b45233ceb15bc9770044bc776c646d86b
-RMD160 (NetBSD-6.0/cats/binary/sets/xetc.tgz) = eb721c7066e0088a6be10b2214fa7227d2b95043
-MD5 (NetBSD-6.0/cats/binary/sets/xetc.tgz) = 7904920faa3acddfb9b635b88789a440
-SHA1 (NetBSD-6.0/cats/binary/sets/xfont.tgz) = f6547d11ac8302fda8b2b992e99f5d8c03ef9f0b
-SHA512 (NetBSD-6.0/cats/binary/sets/xfont.tgz) = c38be1439bd2a0b9a10978e1833a5ad243f3d3ed557bb05033aa6c76d1320851663e8819987b4a77c8f4f123820d82cfa950e8e486986686030aa9a40b7577ae
-RMD160 (NetBSD-6.0/cats/binary/sets/xfont.tgz) = 401d3e9883c381410c7e45ee3cb1ab72e9fd54a7
-MD5 (NetBSD-6.0/cats/binary/sets/xfont.tgz) = d154b32a82c67ebba30762daad5a37e9
-SHA1 (NetBSD-6.0/cats/binary/sets/xserver.tgz) = 941b1622f43738a9a31860ad6464f2fff35e9f1b
-SHA512 (NetBSD-6.0/cats/binary/sets/xserver.tgz) = dbbd41022a86bfd59958a96f821256bec29793952b4adfff10e3974d437e1317b8312662359a27a961d76f4c0ac7e7af9482603d6ab918668174818f9b1c1008
-RMD160 (NetBSD-6.0/cats/binary/sets/xserver.tgz) = 4fb11053b3a0ad7775efdb502bbf8e1198dc0348
-MD5 (NetBSD-6.0/cats/binary/sets/xserver.tgz) = 20c811752f066b472b1f578431f25d42
-SHA1 (NetBSD-6.0/cats/INSTALL.html) = cbe385200e2572a8325f1559ff0b00914b6892f8
-SHA512 (NetBSD-6.0/cats/INSTALL.html) = a62d6cbd6f300d4287f899e76526282ac04a538aedd201754876f8ea906eb3c486e8580b7d373eb6436ffb6c6b0d47273a3999ebfb852b1cecd7d9714931b7af
-RMD160 (NetBSD-6.0/cats/INSTALL.html) = 8fd593263624ff1e7a45b7102956094a71f16576
-MD5 (NetBSD-6.0/cats/INSTALL.html) = 50947ae742e64480da9f0f3964789ee0
-SHA1 (NetBSD-6.0/cats/INSTALL.more) = 8343db2afce040778ea31ae38be9700674dc5f02
-SHA512 (NetBSD-6.0/cats/INSTALL.more) = d40356dbe2c728dc51d6cd0efe3857a27ec9b39e2a03a01efe67733debda54b58e768218eba79dd20f97614e4a8c1138362c65acdef1aec922e157bb638f2a18
-RMD160 (NetBSD-6.0/cats/INSTALL.more) = 76588eb4c081058584fc7bd3d350f896177bec31
-MD5 (NetBSD-6.0/cats/INSTALL.more) = a912e620c4899d40ffaf15a00b033920
-SHA1 (NetBSD-6.0/cats/INSTALL.ps) = 06fff86ec204f92418e0050417a548da63a2ddad
-SHA512 (NetBSD-6.0/cats/INSTALL.ps) = 31a7ca304e80c80942d5c3b1f055251194981e7e98096fbca7c1d56f6617e5aae082a44702fcbda9cec006823d093973bdf24f1af369c532d72706b5c44243f2
-RMD160 (NetBSD-6.0/cats/INSTALL.ps) = 80c4749fc0e3d9144cae101e3e83709b509eb541
-MD5 (NetBSD-6.0/cats/INSTALL.ps) = aa6a7a310a23fcf771ab49fcec71a77d
-SHA1 (NetBSD-6.0/cats/INSTALL.txt) = 59e12295d3e1819f7ff76701baeb4541e637ef88
-SHA512 (NetBSD-6.0/cats/INSTALL.txt) = a710c598d300605c2d2f373f12f8b9b2366dd28f6cf84ccedc3c6ac3efa410e2c0a3e454489824c4a65467b0947231a6f280a4ea2cb3582bdd3d532ed994e63e
-RMD160 (NetBSD-6.0/cats/INSTALL.txt) = 5f0042bf269b86bb159915585707077a98a5f06d
-MD5 (NetBSD-6.0/cats/INSTALL.txt) = 8cb2eb0a3f5249382607fb963ca82313
-SHA1 (NetBSD-6.0/cesfic/binary/kernel/netbsd-GENERIC.gz) = 5d2bcce895dd7d88e0d5600b6ca55a4b216bd368
-SHA512 (NetBSD-6.0/cesfic/binary/kernel/netbsd-GENERIC.gz) = 85e01da3fe9ebb93fb7ae3f028297972bf4538117430185bf0885b46352f68df08fe025d91569ee0da2e17e8b83a4de99e1f3d56d2c5cb31ede3beb366afa157
-RMD160 (NetBSD-6.0/cesfic/binary/kernel/netbsd-GENERIC.gz) = 7c946881e8b671248896e5e620f8125426911450
-MD5 (NetBSD-6.0/cesfic/binary/kernel/netbsd-GENERIC.gz) = 39a8c5037a6266d0bb6df8fdb5c14c7d
-SHA1 (NetBSD-6.0/cesfic/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/cesfic/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/cesfic/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/cesfic/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/cesfic/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/cesfic/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/cesfic/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/cesfic/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/cesfic/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/cesfic/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/cesfic/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/cesfic/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/cesfic/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/cesfic/binary/sets/kern-GENERIC.tgz) = 682508a28054a48a7242a494917ac4889bc67992
-SHA512 (NetBSD-6.0/cesfic/binary/sets/kern-GENERIC.tgz) = 0225b3aa055ad8d4c5b3029cea2459cc27e5670cd4aa50529c3490f93692273fabf6fb1d47336ca82e7b9b97c9cd6eaa6da29f1c71076c36664952cd2e8f92cb
-RMD160 (NetBSD-6.0/cesfic/binary/sets/kern-GENERIC.tgz) = 39e19612b53e389e4da7ab24ad463d19da13f296
-MD5 (NetBSD-6.0/cesfic/binary/sets/kern-GENERIC.tgz) = ae69c0b436f251484d22512f3207263f
-SHA1 (NetBSD-6.0/cesfic/binary/sets/base.tgz) = df22763e9478973636b3651d21f5cc5c5b065515
-SHA512 (NetBSD-6.0/cesfic/binary/sets/base.tgz) = bfdab8e7b9dcbd14d7e6321edbfbf06c45eafc0c85dcace6879ff485d45262706dd29a165c9d89a041618244977763af4c0f0c93d48ac39c96c5a4446122d2b9
-RMD160 (NetBSD-6.0/cesfic/binary/sets/base.tgz) = 1359d35509d93695dd0cfda9adead93875618ddd
-MD5 (NetBSD-6.0/cesfic/binary/sets/base.tgz) = 232f3d5ccd51c66577dc50e25c149476
-SHA1 (NetBSD-6.0/cesfic/binary/sets/comp.tgz) = dbd27c5388fd2ccfa90ceaf819f5fb3b86bac78e
-SHA512 (NetBSD-6.0/cesfic/binary/sets/comp.tgz) = 0657745dfedf6283919628d26665d30374807c78e049cdf5d9ce3d3dca54275ccaa992b5c21ef5c850decd1def118cb14c1e89a2bbdbe55b905e0f8100e259ef
-RMD160 (NetBSD-6.0/cesfic/binary/sets/comp.tgz) = b0bdc0fd2ca77bdadb6d03a465333bd9dca2a016
-MD5 (NetBSD-6.0/cesfic/binary/sets/comp.tgz) = 8ff8a532ccd1d24e93b4ca53a41d1efa
-SHA1 (NetBSD-6.0/cesfic/binary/sets/etc.tgz) = 20b9dc0339ed74a93dc82fc1b60f9b3fbf6b4b8d
-SHA512 (NetBSD-6.0/cesfic/binary/sets/etc.tgz) = 593ef36e7f37c6153b8068a2f8b433a6bbe821a2bfcad7ea6ce4e30bf5611172aa94e82b7aca57c141d84381c597306779e5023cab4ff28fa415b6b6bac69e3d
-RMD160 (NetBSD-6.0/cesfic/binary/sets/etc.tgz) = cd6bcc3d96f38f8e9a00cfedbeb4463a27708d9d
-MD5 (NetBSD-6.0/cesfic/binary/sets/etc.tgz) = 343a0c8c930807f71f37e7116bf8f391
-SHA1 (NetBSD-6.0/cesfic/binary/sets/modules.tgz) = d5191e8899d7345c88bae6f65c1fd249b02a0063
-SHA512 (NetBSD-6.0/cesfic/binary/sets/modules.tgz) = 22e74e63cdc763effdcb58c7d549c0811dedee37953a9669dca09010dde364c6ba7440a29ad1e1e634a7c44b69cbca65afe006b9f564bd10bc4f0852cb55dc75
-RMD160 (NetBSD-6.0/cesfic/binary/sets/modules.tgz) = 5ad1d1c039de7da6dd1183ea6f4e9c319931dc86
-MD5 (NetBSD-6.0/cesfic/binary/sets/modules.tgz) = c0dda9a6803a213f3bca675728056dfd
-SHA1 (NetBSD-6.0/cesfic/binary/sets/tests.tgz) = fdf867451cd371c25672448a1dbc7c204e8534b7
-SHA512 (NetBSD-6.0/cesfic/binary/sets/tests.tgz) = 9f137af1458c138a40dd2cf293e58deaa93a7145457127ddddabad1c23f380e36950d21cc6051bc5a4b101a632b9610a74cc3fc4bf6129e29e57ee8fd9d2da6b
-RMD160 (NetBSD-6.0/cesfic/binary/sets/tests.tgz) = 0c27b80fb02f5ca0dfea6854d0df2818df52b9e1
-MD5 (NetBSD-6.0/cesfic/binary/sets/tests.tgz) = 2cb77946d9b305a0e03a6ac5fed04ff7
-SHA1 (NetBSD-6.0/cesfic/binary/sets/text.tgz) = d9f8aaf67b6ffd9828d447b5a6b208ea5bffcbd3
-SHA512 (NetBSD-6.0/cesfic/binary/sets/text.tgz) = 931dc3aec206ff95df08c36ed09a01caa2b10bdff34affc723e7ea0c6d2cdfc493d02b9875568ec9276c2d35a74cc782ec8c8cee10ad62879831b1d728cd3d62
-RMD160 (NetBSD-6.0/cesfic/binary/sets/text.tgz) = cec72f88379d8c6b30730568eb653de4a07f8c8d
-MD5 (NetBSD-6.0/cesfic/binary/sets/text.tgz) = 1daceefaf9afa99dfb01cde29485cfe2
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xbase.tgz) = d052985aaeadbeaad2aab5aab60ef68f5527a9eb
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xbase.tgz) = 83089a0b043d1413d865ea766cf1c50da9d1c12165e05bfc72f26b4d4513549119cc716ffebda1fd82b20ff1766c579aa000b7c10b4f29fcca49f0ff9f05177b
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xbase.tgz) = 3a8239f2ecb4e13e2352e3b09c3496f51dd12fb4
-MD5 (NetBSD-6.0/cesfic/binary/sets/xbase.tgz) = 61c565148bfbdd631981e7d42845c147
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xcomp.tgz) = f3eda836d68a0b648fec7072373ae0b7267ab7d4
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xcomp.tgz) = c448fa8a9665c6cd19aa05eae8456a06e0301fed427eff4d20f4a337e398c4346b285bea3c46924eada81d2bd1c34bcfa91cfd36d15eeb8ca6e9f7606514f131
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xcomp.tgz) = 68333053bfff6afe3fa5e7555e58039ca42b679e
-MD5 (NetBSD-6.0/cesfic/binary/sets/xcomp.tgz) = c318f3138aabcb6453f77a6dfa4778c7
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xetc.tgz) = 5965357819e9e3e64a9cf0963595a5870699cd82
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xetc.tgz) = da1f214b6de2a4a1ef227c608b741a076a7d4ba491131fadd33ebbf0782fd6c0d1ade406b4aa92c973c9f87ee70b2dff20d3a710df08201aac3c1a9ad339fe31
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xetc.tgz) = 7151d3746cae1d748a566356431ca8ba4a5b51f3
-MD5 (NetBSD-6.0/cesfic/binary/sets/xetc.tgz) = 616f7da77033039c3b6972c33223215f
-SHA1 (NetBSD-6.0/cesfic/binary/sets/xfont.tgz) = 46a06412b08381288aeb30ddc5b5a30d09530fcf
-SHA512 (NetBSD-6.0/cesfic/binary/sets/xfont.tgz) = b5c5c517924de3ae3bc0fd094c0be19501668f4ad25feae8768c5c17065ff90b9b60760afa47ee93909fb92c4c12a818a95f0744e988a04e20be51f0d5dd4d66
-RMD160 (NetBSD-6.0/cesfic/binary/sets/xfont.tgz) = b58231d11d9ea95811dd0a6f548b6bdb18eae61e
-MD5 (NetBSD-6.0/cesfic/binary/sets/xfont.tgz) = e52bf6c25b8e5fcef899329b68856e5e
-SHA1 (NetBSD-6.0/cobalt/binary/kernel/netbsd-GENERIC.gz) = c9618dcb53044599e6397eac6bfd5dbd6f106cf0
-SHA512 (NetBSD-6.0/cobalt/binary/kernel/netbsd-GENERIC.gz) = f46c57b34ffc0f0140094384a10ea7c3d0140f315fceed6b02a1ec4770d6114eb1e995020fd056e03af71185f0448fde86829f5921b961a903bf0c275ff730e3
-RMD160 (NetBSD-6.0/cobalt/binary/kernel/netbsd-GENERIC.gz) = 4f69bb230b7c20fc591af0ff0e788e0f9a6dfff7
-MD5 (NetBSD-6.0/cobalt/binary/kernel/netbsd-GENERIC.gz) = 4ef49f4e446b38c2dcecf61dbca8fa25
-SHA1 (NetBSD-6.0/cobalt/binary/kernel/netbsd-INSTALL.gz) = 8c6edfcb94e9c0bfe670a78e6599dbba4787ef6b
-SHA512 (NetBSD-6.0/cobalt/binary/kernel/netbsd-INSTALL.gz) = aa2dd1067f3fe253b43eb3a1ec0c8119a717c43236f1df4d72a4ac5667de310ac904bbca89588b9438a3aacdee5bb3d569e170dab17487ec5c6d9c148086085f
-RMD160 (NetBSD-6.0/cobalt/binary/kernel/netbsd-INSTALL.gz) = 54a79af6fbce4c15b3415137f67a35e0d5e34daa
-MD5 (NetBSD-6.0/cobalt/binary/kernel/netbsd-INSTALL.gz) = 112e15f9d41a31dbe6eb6864d62633ef
-SHA1 (NetBSD-6.0/cobalt/binary/kernel/netbsd-RAMDISK.gz) = 4075b370e08ffe708669556c584e79073a9280b0
-SHA512 (NetBSD-6.0/cobalt/binary/kernel/netbsd-RAMDISK.gz) = ae5eb10935acf635e7a3abf985b86fbe9a57a071dea8ef7fe08ff5fd887901331d603e61d1bfeba330489534c4accae61e8c63fcc0cbb4a248e8fffa53d59fec
-RMD160 (NetBSD-6.0/cobalt/binary/kernel/netbsd-RAMDISK.gz) = 9537810097f1bfe7c0cb7a4154639c8374a17c63
-MD5 (NetBSD-6.0/cobalt/binary/kernel/netbsd-RAMDISK.gz) = 0a477e1b678ab3c2906eef7d9082d2a5
-SHA1 (NetBSD-6.0/cobalt/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/cobalt/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/cobalt/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/cobalt/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/cobalt/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/cobalt/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/cobalt/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/cobalt/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/cobalt/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/cobalt/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/cobalt/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/cobalt/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/cobalt/binary/sets/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/cobalt/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/cobalt/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/cobalt/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/cobalt/binary/sets/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/cobalt/binary/sets/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/cobalt/binary/sets/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/cobalt/binary/sets/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/cobalt/binary/sets/kern-GENERIC.tgz) = d085ff7c5cd7f260cc1aaca4c2e54c26c948d893
-SHA512 (NetBSD-6.0/cobalt/binary/sets/kern-GENERIC.tgz) = 0c1ad1014af64d059a5ce8261e46534e0eaed8702440b93f5109c19ed9fb0b2dbf37a23cc28f1a688ca45f9e721dd0f4a1ee6771990a835a459cd633ff0f4887
-RMD160 (NetBSD-6.0/cobalt/binary/sets/kern-GENERIC.tgz) = cfecc943b0e501f53558c87be282a948469c57fe
-MD5 (NetBSD-6.0/cobalt/binary/sets/kern-GENERIC.tgz) = 630b91f62d422855f30b33590119e9d7
-SHA1 (NetBSD-6.0/cobalt/binary/sets/base.tgz) = 90870f3189063cb2c4a2aa81d1c68d835e48ee25
-SHA512 (NetBSD-6.0/cobalt/binary/sets/base.tgz) = 9a962443ad380ef6d4dce623bb41e6b1aecd452b0adfc6e51d1c17610829f17a1b02cf5be2e539eeafcc7ff47ae79f8f7a367eebd74ea6cb70e0fc57eebbf27b
-RMD160 (NetBSD-6.0/cobalt/binary/sets/base.tgz) = 12111c0c67c4f8fbb3c54c2c3480e73caee6f33c
-MD5 (NetBSD-6.0/cobalt/binary/sets/base.tgz) = d7aba51f2552fb2e19af9adbd673dff9
-SHA1 (NetBSD-6.0/cobalt/binary/sets/comp.tgz) = f22b026d0b9c1e7725e4db4b9abbda1160a9c80a
-SHA512 (NetBSD-6.0/cobalt/binary/sets/comp.tgz) = a0a6f6185d30e28c4db98189134bcb5e2dc9820c748911e36483b84fb598c5b122c10863ccff82a2f2556734004fab2c9ac59cbc1530ec79ec535e4e426d4e5c
-RMD160 (NetBSD-6.0/cobalt/binary/sets/comp.tgz) = ed9d28519a8cc55a2806d6c1df0953c535075b1d
-MD5 (NetBSD-6.0/cobalt/binary/sets/comp.tgz) = 44112b73f63f4cddda4ac8ab8f5ba1f5
-SHA1 (NetBSD-6.0/cobalt/binary/sets/etc.tgz) = 7109941b0df321286aaf226ee48222fbc7ad692f
-SHA512 (NetBSD-6.0/cobalt/binary/sets/etc.tgz) = 1d18f21beb41dd07c5744b127209b5de8f5fd2fbbd109c3c65dbe73126e2a987e1e1d08a68668f597ecce1d0e9875fe349bf89d74d3add850a3c4554808cda07
-RMD160 (NetBSD-6.0/cobalt/binary/sets/etc.tgz) = 1687c63ca2d75377354754bb425c02bd6907c445
-MD5 (NetBSD-6.0/cobalt/binary/sets/etc.tgz) = 3b36b16b387597ceb2233eaa72d3bea6
-SHA1 (NetBSD-6.0/cobalt/binary/sets/kern-INSTALL.tgz) = cfefd1fef2db13b66730678c9df067ab208158ad
-SHA512 (NetBSD-6.0/cobalt/binary/sets/kern-INSTALL.tgz) = 2a62524f994a5034d60f679b1d30eafe60dafb35216458055ad9e25f3c7053f4556f1edd233754e0e4eb4a79373fb814c28e832b67d9de69035513b819d5080f
-RMD160 (NetBSD-6.0/cobalt/binary/sets/kern-INSTALL.tgz) = 894035c7e551dfee7ae53cd1e7b358876fef240f
-MD5 (NetBSD-6.0/cobalt/binary/sets/kern-INSTALL.tgz) = c6f35e3463064c86be5b3229fdf23ce1
-SHA1 (NetBSD-6.0/cobalt/binary/sets/modules.tgz) = eda182e3418c72ab2d0bb33efa014d77be461b73
-SHA512 (NetBSD-6.0/cobalt/binary/sets/modules.tgz) = 52a988323ace3452cdd3c8db6d03e26f15b3d9570314c8e8efd80169676d36209a8dee6736d4a1aed53beb3ad3ecd6fe8ea9d4b3b0a85417a6540cc4f6ca2154
-RMD160 (NetBSD-6.0/cobalt/binary/sets/modules.tgz) = 0610022e6cce6e576d3bbc6f3bca284d36eff821
-MD5 (NetBSD-6.0/cobalt/binary/sets/modules.tgz) = 2850ca4ea69cbac5274f2307a48394f1
-SHA1 (NetBSD-6.0/cobalt/binary/sets/tests.tgz) = ae62656c92b1883296087eec3534d7542356c79e
-SHA512 (NetBSD-6.0/cobalt/binary/sets/tests.tgz) = 35a22f1ede3db17eaa2c29645c5675fe5a2c4fd6deefc5d372cbdf1ac61c592fe7acf65486a8c576d3ee8651ddb3afa33e39e644de18d2831d25c89aa74c734b
-RMD160 (NetBSD-6.0/cobalt/binary/sets/tests.tgz) = fba7399b23a918470dcd108a422bb4f998a94a42
-MD5 (NetBSD-6.0/cobalt/binary/sets/tests.tgz) = 21dee182d4f02df926ce52688347af72
-SHA1 (NetBSD-6.0/cobalt/binary/sets/text.tgz) = 58049b832c3722ddb05f8eca622f77ff8e4e8a4f
-SHA512 (NetBSD-6.0/cobalt/binary/sets/text.tgz) = 4eb3919068d26f193fcca2a30e27152421be198b313fa9700612a0d9d094d67d329b2e72e70b02c4789c1430378269f35f0758042faf60c26a18e293947c7db9
-RMD160 (NetBSD-6.0/cobalt/binary/sets/text.tgz) = a2eaa36b8c306e0cd6a9e17218aad574d4fc3508
-MD5 (NetBSD-6.0/cobalt/binary/sets/text.tgz) = e0f6aa8df8d17719f265922d2aebc787
-SHA1 (NetBSD-6.0/cobalt/installation/boot.gz) = 59e1785a9e2ea35df01f4726b62f6fbbc74c56df
-SHA512 (NetBSD-6.0/cobalt/installation/boot.gz) = ad2baef23c54d600d49e7777b924c7d79c8e7e3f74107e9fcd939b16811b31979391ce8f3ebeb4b31810fef2cec13df063d31e4b3a5b5c57b550156b796a4410
-RMD160 (NetBSD-6.0/cobalt/installation/boot.gz) = 9ac9dbfb3932a92e2b4e03664bdb8dbed4fc0e71
-MD5 (NetBSD-6.0/cobalt/installation/boot.gz) = f4b10cb6244d765eb7a9a6a3ef1d09ba
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.bin.gz) = 971d8de48c6c6be81f723ada4b7c509dd152b86c
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.bin.gz) = ac63feaca53a1abad181877bec95098e06e89343cd783f309ed3d223a80005d49fd5b3420a36c8e2894389373a9a8d4a023f134e1ff847f240864b8f529adfbd
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.bin.gz) = 5abfe7b82ce9b81c69818cbb533a9d7e69f01081
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.bin.gz) = 6ed9526e1fc60db1cdab3dfedb2a4ffe
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.bin.gz) = 7950c0154a603614e8aaa75da019ffe266fe36de
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.bin.gz) = 2421894a9dda95a17a30b6a4d87e350f7bd17f467362255eb22c8a56e0ac1e54592136d0b0d218c16a14afb8684bb8eaf11442217af1c217ea4588d6290c761e
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.bin.gz) = 326f220c689b47fb30e91d483a009246993da43e
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.bin.gz) = acaf2f6174037777dc0dfc175da86403
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.gz) = 85e46b6fa4ab45b810f6c3f4b3268cba0f895cb4
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.gz) = d3f2e7306c8b8ea0969bb68e5888ba16436632479a6555a4fffe2479c4cea1dce048c2d18b6653fe1946b9a9bd2d2df1da172d71df45c6eca59a1c91e81f51a9
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.gz) = 31820c3a9b7305792ca4246aaa0d8e5474c2a8ba
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC.gz) = b48de4452de2d94b74d617ba30b529f8
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = 83040bbf6395952a68fbfde410db2729c8d814c9
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = c48a2bb6dc2bac588b3e9690dbeed3b85361439e40e3410220c0b9fcb70e2e6a2bdffd24ddb428f740895ef34c3e56955f2877509441be0c158e97407656da24
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = a6f75d1e098e0bebb9da8f6149114de13416b210
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = d72d4a1170c9f40c41c951eb2f40dd9c
-SHA1 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.gz) = 98765e3c532799a669420e9b6a89b22033059d66
-SHA512 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.gz) = 34a64fc5eb79bec00adf55f9788139730c5f35bb8e05f0b00899776836aa0dc7c372482ed5cb9341fa7354d5f8c76ed6b879ac516210d89e33794efbccf40127
-RMD160 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.gz) = 5a4349f94c8afe0d7ad4c6ca4b02d766ddfc63b3
-MD5 (NetBSD-6.0/dreamcast/binary/kernel/netbsd-GENERIC_MD.gz) = 7c4659ca64c7f31b205e8d1ce4166597
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/games.tgz) = 2040b4af557a62f2ade5fc9fcfe4cab3df88c7e2
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/games.tgz) = 8b5071337dc844042537c24c75660e61c9709cd10cbbeab059a84da6d482260b73365ff3870f85060c130a291b6f02be174d288127ca62ce4d291a6982192317
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/games.tgz) = 28acfa5a131d52df7c157e2edca1dd0f20e774dc
-MD5 (NetBSD-6.0/dreamcast/binary/sets/games.tgz) = d82c46dbc0021fd4694e464042936052
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/dreamcast/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/dreamcast/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xcomp.tgz) = 53aa1e2a910e8eed09dc07f8b724804f53fe5e2f
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xcomp.tgz) = 24645da85419528015cdaefd0c835741fa801392e795b363bdfc39558e75e7f384511c0668d12e2440114b7c543c7532aaec438048f08d35c54c9c7a748f20c0
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xcomp.tgz) = 60a461ffc1f1562274110d65c72a541ee131cd21
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xcomp.tgz) = f1d2650a8d7a4ecd60fda8e1aaf8c09b
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xetc.tgz) = 1636a6fe3e01f6d8a07a19cd204a6807c8caa4c7
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xetc.tgz) = 9cea4ba4af287dd57e591d4269f2f2582010250316f323746ac56b12cefcf2590b93fbb0197c665f61b1df41dcca62d17fb6ad80d4b1feb8ac8265e91e15074f
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xetc.tgz) = 5f68e3f96f7bb9ae07fccdb1d058e4b1307b4b29
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xetc.tgz) = da84d97230787283e215a4ee1c4053ad
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xfont.tgz) = 97439ccf6840b18b1e9885f5504a401bf1a93650
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xfont.tgz) = 3d15541f7d7ae2128f44355bf110415adfa4e5182829259d2c6f7a4217feff99e236d13c5bb7bbeb724ff1a09ac1f58f02bdd6eef528bc416ec3118db6fc7d45
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xfont.tgz) = cdc9fcdb5fd5032803d5bba18db58f3ea6d62c85
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xfont.tgz) = a8466a0477c6c443eafe99e9d1c61131
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/kern-GENERIC.tgz) = 8f11a046a1e6277a5f90f44142735f39375f949c
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/kern-GENERIC.tgz) = 12786eb317effcd2f7f108a139a95b99c6026e75370853d3761292d431063859dfff26ab4a2bdf5c8bfcfbda4deaed9025583b30367e00074dc875d759f1cf76
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/kern-GENERIC.tgz) = 464ed36bd11cfa0b181632d2b1c54f34a511fd14
-MD5 (NetBSD-6.0/dreamcast/binary/sets/kern-GENERIC.tgz) = 1cd64692f608f13541288f3ff263fa82
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/base.tgz) = ce23182c9b35fcba35fce0e3f12578a988a8ecc7
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/base.tgz) = 20dc7d634449bb7e57ae55458aa0f2d53c5f03f92df3df5a6429c1f3192871ed2fb8ec64700a045591d308a31baa3212c8a7ee6f3bfcccc05974557bc2e1ebad
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/base.tgz) = 7fbdce2370f91ad3aa3abec889333b59755b0f4b
-MD5 (NetBSD-6.0/dreamcast/binary/sets/base.tgz) = 3aee642fc36860e63bf85392888ab2a2
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/comp.tgz) = c288c3890b514eb00673399571a6d22d4abf7608
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/comp.tgz) = cfbe2ddaf47453f9b20a74890e3585fd82a23d25489378b41276848019971f1e740e00203418db16e1832777b96d3b16eeeae1a4fcdf9551b93582395c5a3838
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/comp.tgz) = b79a42001602eb84e650fe34a25ac20e5773703e
-MD5 (NetBSD-6.0/dreamcast/binary/sets/comp.tgz) = 57451cb40d16c7d6dfb960eb4848754e
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/etc.tgz) = df82ad0e59f00bfa96ca079e1dac2b0f772a6b1b
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/etc.tgz) = 87d552690ee356eb3a82c763ddf3f44ed57a5d0d8616974570ba21a2901371e6ee6e54d0b25cb5607466f01cbabca86fe096572f395c74aa6dd98be45e4c7ee8
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/etc.tgz) = bbc9f48831c1483ffe9c9aab353995e162a5a385
-MD5 (NetBSD-6.0/dreamcast/binary/sets/etc.tgz) = f0881f75efa980e58cea0c0d60f55656
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/modules.tgz) = 243ab8d8f5d3375fbd17efb668c1abe45d0d1487
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/modules.tgz) = 193c158f2d2f64c3b571c6e10d97bdbca141faf5ee1a970e3c1e194970e2723e74d8372e0110b52d11e210e860102ebf24012a2267a0f98dedeceb0cc60429f8
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/modules.tgz) = 788e45cc0d8a03191c14f3fe0d429ae331d96895
-MD5 (NetBSD-6.0/dreamcast/binary/sets/modules.tgz) = 83acdebfad50fc820d420b4e74c87762
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/tests.tgz) = 263b82b9d13d080e46cd27e4a6e5df9d43e6f74e
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/tests.tgz) = ffc4a4348c68f8b06f1387d60e1d5b1bcc1b42ec6d255cd267dea08aef4874591dfc95f69ce416333679cdbc124540cb9b92e58ad9f522e6f34eafa2f6dd9ef2
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/tests.tgz) = 2518cdf17a8f82dcf39525e2928ef52e46e32325
-MD5 (NetBSD-6.0/dreamcast/binary/sets/tests.tgz) = 2f0af9ef7e65f9afb0185e305a206183
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/text.tgz) = 577c45d37aefc65d2787bd989002bd3748440b56
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/text.tgz) = f1a7e6beac2f881e8b9d356491e4b09d7b92b0a0ed33462575db59ce8effae6ca2a1989e4fa9b78fc5d012b118b2f99a2e2fcd7505a0ca80eb61684d5bceb096
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/text.tgz) = 2688ae8578acf1b6b8937abf4d05cb09e7e2ce8d
-MD5 (NetBSD-6.0/dreamcast/binary/sets/text.tgz) = 0cc81795b0f4ddd432f3dfa01eb2a530
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xbase.tgz) = 7305b994f65ffa7d67a9f99d0146e705f81ec723
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xbase.tgz) = 904f0c21201d51b58c366a984eb20191c620287b77b12b520003d48fb0ce1a3ae10fa871c3514598a74071ce0cc1321ff781b96195a13e81c75d35cdc7958030
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xbase.tgz) = faa8760bbee9d3b2a21e3b62fddb641faf939ee9
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xbase.tgz) = 655c33ebf6f37bd90b1921b220dff2ac
-SHA1 (NetBSD-6.0/dreamcast/binary/sets/xserver.tgz) = df506c92cf396d2d59ee212c03a10f44129f51a3
-SHA512 (NetBSD-6.0/dreamcast/binary/sets/xserver.tgz) = ee8b15abf9e8115ffc50deeb372e9c7dfe9412f8e94d65b3ed78f78fba63e9282b668c8fc2fb2a22437f950adafd1dedf2e9baf395fa945d04eeb50db0d1f5cd
-RMD160 (NetBSD-6.0/dreamcast/binary/sets/xserver.tgz) = 73bcaffdf98d0a5c4d5c22c97c5476c1b5901eec
-MD5 (NetBSD-6.0/dreamcast/binary/sets/xserver.tgz) = c5e16ae2cf663c0373fbb82f64f4f48b
-SHA1 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.symbols.gz) = 7ffd5f42e92a4ae32ca78766815db12dbfd4c4f6
-SHA512 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.symbols.gz) = f7a50a9ee148ac9566dbc3722b14d904c02a3cbf285ea8efb10a24b8a93db514abbf825dbde48a8c494da6b02f48408b9414a6d8a45ed61f334afd2dd148aa71
-RMD160 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.symbols.gz) = e03b53e71c192a3de6d720b0502e0597f2ab0aee
-MD5 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.symbols.gz) = 014979ca9f7b5feb3664479cd34dd2d3
-SHA1 (NetBSD-6.0/emips/binary/kernel/netbsd-GENERIC.gz) = 663be1ef5f9177715d8a299d3e610b21a942dc16
-SHA512 (NetBSD-6.0/emips/binary/kernel/netbsd-GENERIC.gz) = 006a5189536650946aeddb6763997bab1cafe82b578777674f75df8346d6bd01467d532de7be3c5ed0664d9b85e4da90a90871f6e15fa5166af29f1e87d9d7ea
-RMD160 (NetBSD-6.0/emips/binary/kernel/netbsd-GENERIC.gz) = 15cbdb609c3925081aac2e84ebc104775601fad5
-MD5 (NetBSD-6.0/emips/binary/kernel/netbsd-GENERIC.gz) = 71af44cf65da1b8ecdadbbf037f07ec5
-SHA1 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.gz) = 4f40fd5aa8028bd956dfc51a5e61be77ca742adc
-SHA512 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.gz) = 9fb9cfe8aa5d8ea350b24ad80a207d9439141914bd4e3371297b9971969c96ca6899b45f099e1e02ed4c8ffbea75d421b22af7d09b5b91c2f435df176229b4c8
-RMD160 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.gz) = b269d2a87391b9640988493e3493edd114e7e8b2
-MD5 (NetBSD-6.0/emips/binary/kernel/netbsd-INSTALL.gz) = 59724cb6c92366dc47fa0b4ecf2fe22f
-SHA1 (NetBSD-6.0/emips/binary/kernel/nfsnetbsd-GENERIC.gz) = 5dc90ad559e682bd427b6165f760bb09ba676e7d
-SHA512 (NetBSD-6.0/emips/binary/kernel/nfsnetbsd-GENERIC.gz) = 4992a1e1bd6cc1dc21821a6151aa3561fda5e369ab6057575cd70d63503a98a8d9da257956486f2f58996b0aaabf20266c16033c1f069e3dcc21f582f74006f8
-RMD160 (NetBSD-6.0/emips/binary/kernel/nfsnetbsd-GENERIC.gz) = e7f4efd86d048e9f9857bb3cbf136a3e461b9463
-MD5 (NetBSD-6.0/emips/binary/kernel/nfsnetbsd-GENERIC.gz) = 66abd685dbc87ed5282e1b55a6b7bfbd
-SHA1 (NetBSD-6.0/emips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/emips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/emips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/emips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/emips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/emips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/emips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/emips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/emips/binary/sets/kern-GENERIC.tgz) = ed3903192d38367303cf5210725c33ba123c216d
-SHA512 (NetBSD-6.0/emips/binary/sets/kern-GENERIC.tgz) = 62687e8a1af317454e30a65dafd1b54eb444db9a27abf987ba17bfaf4b9796623f279011c2102500563c9a862fa983c5e48a9c94afdedeee15414840dcd328fb
-RMD160 (NetBSD-6.0/emips/binary/sets/kern-GENERIC.tgz) = 070bb8b5cab57c375fad13304165f8825e6647d5
-MD5 (NetBSD-6.0/emips/binary/sets/kern-GENERIC.tgz) = 732ac8530d63fe2f3eea6e2def05ab4b
-SHA1 (NetBSD-6.0/emips/binary/sets/base.tgz) = d058920475032b263b2020af3230894da8ded663
-SHA512 (NetBSD-6.0/emips/binary/sets/base.tgz) = 606b27579e80fca77e82a385dfda2e03bac6d8563186ccc98d993cd532bc79da93883cf71f850380cafb31107efb424585a4aa5946f54bbc36aae5d9d9495a44
-RMD160 (NetBSD-6.0/emips/binary/sets/base.tgz) = 2663d48750530861b5e9514902b9cc44e8a4162a
-MD5 (NetBSD-6.0/emips/binary/sets/base.tgz) = 22ff23e09d0502d77de5fb289ad53427
-SHA1 (NetBSD-6.0/emips/binary/sets/comp.tgz) = 5c25affcdce77ce7a77755c866316a9db89272a1
-SHA512 (NetBSD-6.0/emips/binary/sets/comp.tgz) = d2b09aa5b72624ad3f25fa1438a8feef1e02b8f9ff064dd1d05a621f29a9790b0029baf652ab5c0ae2c3811532208235288c6614f62c378bc6b1b4a5494fd06d
-RMD160 (NetBSD-6.0/emips/binary/sets/comp.tgz) = 2fd5cfc13841a1188580c6584f78bf8262752da9
-MD5 (NetBSD-6.0/emips/binary/sets/comp.tgz) = dc12cdcce6751fd44291a95a06cf97aa
-SHA1 (NetBSD-6.0/emips/binary/sets/etc.tgz) = 6bf20c929df89dfe6764df1f4ab15b6aeb45d4cb
-SHA512 (NetBSD-6.0/emips/binary/sets/etc.tgz) = 4ee6668a884bb4b4c3ccc4370a7ac70ed14f32b7856219fa375f200ad259087400e93fe144bad4650318cbe9af4133e8d8d8f79cd0d91aeb24df117117ac54bd
-RMD160 (NetBSD-6.0/emips/binary/sets/etc.tgz) = 9081112a95ee958fce83e79f687b97ef847587b4
-MD5 (NetBSD-6.0/emips/binary/sets/etc.tgz) = 912ab9bd3949946dc2af9522581118fe
-SHA1 (NetBSD-6.0/emips/binary/sets/games.tgz) = ec034031c6b1ea012c36910f2e901b032b0aaebe
-SHA512 (NetBSD-6.0/emips/binary/sets/games.tgz) = e9bd506e1f6a6c17c0505db90f7da49795dc63905c9962e01a69224a1cf22312d9e4c68d815e9c487f21fd0791bac3a65a5e5f7bce46198694f673522b057d96
-RMD160 (NetBSD-6.0/emips/binary/sets/games.tgz) = 393d511e3432d93932f2b3d2308d6a16b7cce764
-MD5 (NetBSD-6.0/emips/binary/sets/games.tgz) = 71d23c31e025ff3b1eece7b3cb170abe
-SHA1 (NetBSD-6.0/emips/binary/sets/modules.tgz) = f9aef1ecd6e2ee16d7ddfdad51da034bbdcd8aa6
-SHA512 (NetBSD-6.0/emips/binary/sets/modules.tgz) = abaa6c62593d85131f691a3125e055970a8c3fdd7d8103db6e501dc2d2379c9dd16f9a819e14ac20959011d8946c40a8dc59ee0b7ead8a8f25c20a6475696bc6
-RMD160 (NetBSD-6.0/emips/binary/sets/modules.tgz) = bca8a2cdb2ced4804cc2e0543981b1db671732e1
-MD5 (NetBSD-6.0/emips/binary/sets/modules.tgz) = c98d2b8fab6184f74545c6fa54897a35
-SHA1 (NetBSD-6.0/emips/binary/sets/tests.tgz) = 05a68659aec8758adb269e6f898607e1fc3f9089
-SHA512 (NetBSD-6.0/emips/binary/sets/tests.tgz) = 1434cd321d5f37e6482645a11ce4f203ea3406fcea550103e1881bc68b1e8760697e5e6207ad01d4dba2d1b71c2ed0488bbb0c01dec2b28a6a74e3529ab81a8a
-RMD160 (NetBSD-6.0/emips/binary/sets/tests.tgz) = dc76faefeb42e73abb5727e46bdb46ce7a737be3
-MD5 (NetBSD-6.0/emips/binary/sets/tests.tgz) = 1ef426de07b570c1d9affeb44e452225
-SHA1 (NetBSD-6.0/emips/binary/sets/text.tgz) = 96fc1b82a283a2bf4cdd76168ee3cefa73191be8
-SHA512 (NetBSD-6.0/emips/binary/sets/text.tgz) = 7cfdb8107f4d0bfe28bf41c15b2fe7f9c0aa0d075cdb7fdb0b4566ed512da3123eff94410bf563c6a37aa498d83ed9cc7b9e16d54c8bf33605fc60bf1357c4c4
-RMD160 (NetBSD-6.0/emips/binary/sets/text.tgz) = 1e1ad1dd678eb777938e2320522e275a5751475c
-MD5 (NetBSD-6.0/emips/binary/sets/text.tgz) = 11f296781f98a8ae6aac39f40cb45805
-SHA1 (NetBSD-6.0/emips/binary/sets/xbase.tgz) = 535b4c29666ef2de43bb6017102e9181576255ea
-SHA512 (NetBSD-6.0/emips/binary/sets/xbase.tgz) = 31656ac187e0adf03eff3f896876510bb7624bb18789094abf22a59008e9d7b8d848cc1703e15b799fa2b4cd9e108f1d29c5625f1ae9f012edf8cf35912e4590
-RMD160 (NetBSD-6.0/emips/binary/sets/xbase.tgz) = c8b8ebfb26aaecc931b8d8a17625eb91f904fcfb
-MD5 (NetBSD-6.0/emips/binary/sets/xbase.tgz) = 46641b24d37899b78ef7a83559bfc3b0
-SHA1 (NetBSD-6.0/emips/binary/sets/xcomp.tgz) = 6cddeb4f503fb424f9a06645ef46701288799401
-SHA512 (NetBSD-6.0/emips/binary/sets/xcomp.tgz) = 45f779894389850776fdd4785165f6bf07dfcd46d408199eb352492536b254fa229b9d4e99a716657f210c4772feea966814329f3f2aaa729112c9b8f9d4e50a
-RMD160 (NetBSD-6.0/emips/binary/sets/xcomp.tgz) = 9203f95dc810dbbd873aa54234dada2961a6d309
-MD5 (NetBSD-6.0/emips/binary/sets/xcomp.tgz) = cbb4c61d832ebb4aa97c99484e9109b5
-SHA1 (NetBSD-6.0/emips/binary/sets/xetc.tgz) = 7db74837c8e702a831451e4660c1f8670e674003
-SHA512 (NetBSD-6.0/emips/binary/sets/xetc.tgz) = d68c233f0e4dcf5961bfc214fa10188d5fcb954e103ad610b76964c8e832e5758283bb28ef3eba448cde496d610b488f7958fb391371e1230a7b6127c267dcc5
-RMD160 (NetBSD-6.0/emips/binary/sets/xetc.tgz) = 2d5fd67c9ef6ddef6c3f5fdc845ea23f2b0e3b57
-MD5 (NetBSD-6.0/emips/binary/sets/xetc.tgz) = 98767dc7c3a45e641592807be04f1a64
-SHA1 (NetBSD-6.0/emips/binary/sets/xfont.tgz) = 6f8acfd3feb8f6421cfea08d8cfe514ad7bc7acc
-SHA512 (NetBSD-6.0/emips/binary/sets/xfont.tgz) = 2b4d59176fdef5055b0c5d8ef7677d6a1ae823d86d5955a2c33be046ba7bd8bfad85ae21e8acb11a50cba250d21bf0f2bb8c43aaa5d7d0767998dfbbfa54d014
-RMD160 (NetBSD-6.0/emips/binary/sets/xfont.tgz) = 34878c9b7c1380c42f57eadea7369b687d0e45bc
-MD5 (NetBSD-6.0/emips/binary/sets/xfont.tgz) = 540f04b4c6acb6e1b6364303388f82ed
-SHA1 (NetBSD-6.0/emips/binary/sets/xserver.tgz) = a85da9c68ded22e61f2234e696b0bd61739f4a08
-SHA512 (NetBSD-6.0/emips/binary/sets/xserver.tgz) = fd1bf84b2f34befbae2dc34e3fc5af3048c93c185d8cf5e8afe91e324bba7005d14d9cd73db5e09bee783116b9a09b01b650a9097df07a335fc81a2bc569c2b1
-RMD160 (NetBSD-6.0/emips/binary/sets/xserver.tgz) = f066886778a33191aaed1a30ac8494b6deb152c5
-MD5 (NetBSD-6.0/emips/binary/sets/xserver.tgz) = fc4fa9292f46a325f74c4abc922fd215
-SHA1 (NetBSD-6.0/emips/installation/diskimage/diskimage.gz) = 9c4d0f6ee9e3251ef720acdb06e20683c55a3db7
-SHA512 (NetBSD-6.0/emips/installation/diskimage/diskimage.gz) = 5b9c5d72e5e4bfcae27bf51c2ec9fa849b019b475d6677be8c49c31f18eaff6e559d80790ba6d5e606169215e46e04322c4d12ed0386e76635fdebe380cadd28
-RMD160 (NetBSD-6.0/emips/installation/diskimage/diskimage.gz) = e7373c5f20e4728fef9951dfc1beffb70390f651
-MD5 (NetBSD-6.0/emips/installation/diskimage/diskimage.gz) = 4f2e15b3d203006588a75670b4d3e75c
-SHA1 (NetBSD-6.0/emips/installation/miniroot/miniroot.fs.gz) = 4075299a2ef6a4368234ed1e378c2931b0df6376
-SHA512 (NetBSD-6.0/emips/installation/miniroot/miniroot.fs.gz) = cee815c8a985125fd2c1a9a4811542371ade25fa7f35b4cc4da1783186146d4620d1910a24b92beb02d1cf836e9cfc2921ff9d8c81ecb4babf585b1ec3601496
-RMD160 (NetBSD-6.0/emips/installation/miniroot/miniroot.fs.gz) = 1701f681ccb15b5232abc07550de79d3380af96c
-MD5 (NetBSD-6.0/emips/installation/miniroot/miniroot.fs.gz) = 5cb7df17380c5bd1d56b28d6061332f8
-SHA1 (NetBSD-6.0/emips/installation/netboot/diskimage.tgz) = 04f571f04a2227b98df91f97023e860af233d2c8
-SHA512 (NetBSD-6.0/emips/installation/netboot/diskimage.tgz) = e5c7354014f23996e0e5c331103b9936387b9c6402491041727b69353f6af08b57cf429b51ee0c28e76e3f4506479b0559dac18b05a009a3afca76ad2edbd29d
-RMD160 (NetBSD-6.0/emips/installation/netboot/diskimage.tgz) = c57777b29a2c589549a906fd0f425c56366a7075
-MD5 (NetBSD-6.0/emips/installation/netboot/diskimage.tgz) = 9d1bfe38f9ec7d4ed86173bb157abf52
-SHA1 (NetBSD-6.0/emips/INSTALL.html) = bad639d8582318241d268e529e8e024159dc5997
-SHA512 (NetBSD-6.0/emips/INSTALL.html) = 94627da8cf355e0f7b3a597e2e22be0b151a9c4e40301c7c0b67c1877c34abff57476a5c177035c032cfc1d9b8f9d38aa919c27f1f3c15d3edb3403d18e71b44
-RMD160 (NetBSD-6.0/emips/INSTALL.html) = f2b00377e6a6d060e9027d78d2278445ff6b4d75
-MD5 (NetBSD-6.0/emips/INSTALL.html) = 825b11bed2394322021f65e43627a391
-SHA1 (NetBSD-6.0/emips/INSTALL.more) = 9906d8f0c74d8538aa2e7d1361800cbbc2db2d29
-SHA512 (NetBSD-6.0/emips/INSTALL.more) = e8419f85e6beef4bf18f6bc916141ae9bca52eb6f56e2ae7133fc771ca1033cf2172a644e4415be0019868004278605f0e93c42f8f4f60d1e2fecf8c06a51a90
-RMD160 (NetBSD-6.0/emips/INSTALL.more) = 70fa5e023134732afc81b3622480328ae9f5d449
-MD5 (NetBSD-6.0/emips/INSTALL.more) = 0cff06f0f5c3bac3eaf4bf4336494217
-SHA1 (NetBSD-6.0/emips/INSTALL.ps) = 5783005eb38711a9ffb248fb5bdf2987912f26fc
-SHA512 (NetBSD-6.0/emips/INSTALL.ps) = a27d36ced381f22565ac6ee290d4ef43de834977ca8be3d96bf758005a6fe0875aa03f703da08b7dfd5fdbd48c19c77ef5263f8571d0f5f983ff7c1d08088873
-RMD160 (NetBSD-6.0/emips/INSTALL.ps) = b8e28009dd02ff9c1f98d5fadadc6455c262238e
-MD5 (NetBSD-6.0/emips/INSTALL.ps) = c16b7dcef0674aaf0dd240381961eaa5
-SHA1 (NetBSD-6.0/emips/INSTALL.txt) = 0d166d27be7166a76ad58779f1272a1a1542e952
-SHA512 (NetBSD-6.0/emips/INSTALL.txt) = ba74f2486c3bee1b30fc39edae6ad38b0abcd9610afdad172a49590aa0c1fd8a2256d185a699baf6bea9e40d9fec7d1e56c17d77858d9ebde027419cc044b8dd
-RMD160 (NetBSD-6.0/emips/INSTALL.txt) = 729887c61690c966497811da66852780d0d3eec5
-MD5 (NetBSD-6.0/emips/INSTALL.txt) = 8a28948bd5d45a30ca79556be75dbd69
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TEAMASA_NPWR_sd0_flash_0x00080000.gz) = e8620ef3bbba89642fcce48ed01e16f0783e889e
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TEAMASA_NPWR_sd0_flash_0x00080000.gz) = 055cdfd0872737d68054fa4c2125d131e6ee3f60135be817da7fe111adb2290c4ad8d968b4cbefc67658c3e9f3dfdf99caaec320f572a00a790604c93fa73408
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TEAMASA_NPWR_sd0_flash_0x00080000.gz) = db49ed4cceac70d18a8a6b335f20923d07c8ad8f
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TEAMASA_NPWR_sd0_flash_0x00080000.gz) = 12617c0444b2a570637a45339937c77f
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_sd0_flash_0x00140000.gz) = 3160f03e833b96020804361b1d98c0cffd8c5345
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_sd0_flash_0x00140000.gz) = e5d7ceae7a4b4446002170c84a44dcd65cdbb2458c889582ff3070a20580ff31d2f497b07c320217b55f75e6b343f689b9312d172dd3880bd82808e6cdb995c9
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_sd0_flash_0x00140000.gz) = 41f31d747ec5265903490d300bce1e6c34ef32ca
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_sd0_flash_0x00140000.gz) = efec631edb7870b4cc3ab1cec8d98810
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_wd0_flash_0x00140000.gz) = e1c927a0718d63609fe15d9dc9c265ab0172ddc5
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_wd0_flash_0x00140000.gz) = 5418c2ebffd11c30028d867561e26dc5857167698c88f5d9eb30af3944fdab4950ec2f6953999689c03cf684aaada038d6f7f07494988dba9467a814fcfe1d3f
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_wd0_flash_0x00140000.gz) = 05680bce8a448c3fec2149d6c89dced13166f34e
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_ADI_BRH_wd0_flash_0x00140000.gz) = 36d8336012f5603e1b30565061fd8c3a
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_sd0_flash_0xf0080000.gz) = 9419b71634e5ff228357a37651061a1c4c2c2ebe
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_sd0_flash_0xf0080000.gz) = b17b66b1b62c16d6a0add67d55f82a6943557abbbcb8001b328770dcd2191b1b55881dca2919d7f76381aceb1ed53ae81ff002317e99d02fbfc2817d9b366661
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_sd0_flash_0xf0080000.gz) = dcf913149707315fda181d6dd6967b68fe61fd22
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_sd0_flash_0xf0080000.gz) = 4f81965829024ad764d293456cd96fbd
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_wd0_flash_0xf0080000.gz) = 748d01d1b8796881f853c31ce98e0dbf473bcf8e
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_wd0_flash_0xf0080000.gz) = 898de3034e164cbef89c0f09c76decf48c4291c7c0d077134ba1695cf0c9287d658e61c82cb2d3d46dce986014d2e52d84f0600dab0f99db996623eed7ad93ea
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_wd0_flash_0xf0080000.gz) = 452633be8258bf3df07d6e9461785a8f3ac09f98
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_CP3100_wd0_flash_0xf0080000.gz) = f6644ec6b9e7cbeb624d57e00e764b5e
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_GEMINI_flash_0x01600000.gz) = 2dece6cc86980856d901df11995ecb0a5524451b
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_GEMINI_flash_0x01600000.gz) = 270b8d528bed206bfee4cfc63ae9a04f69c282d52b2beae8cbc8298872d2ff0e50e00d849c6e435d472845a0f6b8601b94a0fe52e63c61e7b5c534b9d830d252
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_GEMINI_flash_0x01600000.gz) = fbd959fffd37010a92a76026469affec9bbe95da
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_GEMINI_flash_0x01600000.gz) = adaae55226bd3fc806962ae70e9281dd
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_sd0_flash_0x00080000.gz) = 97ec6f4a472d0b73f1d3b8d284f57debab190c78
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_sd0_flash_0x00080000.gz) = c52a596cd2ffb52c1321b2e8006a590186dddde671f4325067e546338eac4d405c7d5fe559ba6d187a1c26eba4c45d233505a434a98ee11b88b315db0a42d63d
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_sd0_flash_0x00080000.gz) = 3305a23227d275c25307ab7b999f5e0c0560195b
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_sd0_flash_0x00080000.gz) = fd76ab094a19b1f66c9d21df4cb69700
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_wd0_flash_0x00080000.gz) = 0ed362fdba88789a5d26d00e0e8285f75587f5c2
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_wd0_flash_0x00080000.gz) = 78110414c2dc51bc378c3a1d44914b4f5dffd6b1d6d0a749576e2d7d5474e7856a2235641fe310fb87b3789bbf495b16459f9c773bdab19161e65af671ae6bec
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_wd0_flash_0x00080000.gz) = 4d958d9f772b214efbf9932a00970375a6fa7e57
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80310_wd0_flash_0x00080000.gz) = ec5386e862bee8da4d46a124584e2cee
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_sd0_flash_0xf0080000.gz) = 037aa337f876321d75654dfd576dbc0c4c301e0e
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_sd0_flash_0xf0080000.gz) = e033668a417f453ca35b2b43633a7eb9160765eb42ba1b86ea61d5fd4cb5136123a69194d58b3bddc51fd7e319bae1d70028e1215a1e8f4e98270bf0b4eabfa2
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_sd0_flash_0xf0080000.gz) = a8e8d6ea67cf26c422d638794675626e7261b3ea
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_sd0_flash_0xf0080000.gz) = 2b3bb43bdb7fcd4999377eaa3b994c48
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_wd0_flash_0xf0080000.gz) = 6d8870ad00ed9f496738dd5cf7f670b5b43d2f34
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_wd0_flash_0xf0080000.gz) = 414a11de38ff565307fbe599b87b0f59ddf91db1882b5e246774ac23f6af49411ae33de4145a0d8e10755d6e78d85c930ecd0705804a25ad10e3957765e565c1
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_wd0_flash_0xf0080000.gz) = 27959615599b74b946e9e8483c2284aa3f80ffa7
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_IQ80321_wd0_flash_0xf0080000.gz) = cc0f0b0621d6d931f6dec494c7bb2305
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_SMDK2800_flash_0x00000000.gz) = 09617a28f2da331a17efe6cbdd4df7367f8ff98a
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_SMDK2800_flash_0x00000000.gz) = 9324e9fe0d4756cac25b33f8b6592f2a1a25d12b0f3752447cf660c21a3b2e93eaeb3e41a15d91c2edd827e2f5318a241c58129cff998d8f0a0a7a6a6bbc598f
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_SMDK2800_flash_0x00000000.gz) = c2e0b7b74df9090350d1afc52a15465b77eea3b9
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_SMDK2800_flash_0x00000000.gz) = ee28fbd00b44705a33d6ca6e6982507f
-SHA1 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TS7200_wd0_flash_0x60660000.gz) = 3036d8f2318c69d791b710a06d2e94c5c563fcac
-SHA512 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TS7200_wd0_flash_0x60660000.gz) = e8f2cab3b75e3f4ecfd2ed85b624c8c643eab3cd32a8d0398148f49923622df598071fbb2fef6b5687c8273762d197992a03b1d8465d96630202b78592199a1f
-RMD160 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TS7200_wd0_flash_0x60660000.gz) = ead79fd1f78230bd30f851b78dd13b670a791863
-MD5 (NetBSD-6.0/evbarm/binary/gzimg/gzimg_TS7200_wd0_flash_0x60660000.gz) = 1e25872ad616b30406dab15aa8c20b22
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.bin.gz) = e673789f88d60407c85c744a64382c102b91e983
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.bin.gz) = 43aa01312bac8975f2f66cfc47e9cbdcbfe37eb37f2076c221e5c118521e987f18c1b14bf2d94b390942820e5f6218cfa1eba67a1818f8723481d434f9fea00c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.bin.gz) = 7c45cf94c28c04db6df14decfede69e83bc0cf4c
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.bin.gz) = 49da3170f0fe2fb304e1131bf77d4c3d
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.bin.gz) = 8f057cc764ab0cc64689c2df8652f9db24e20004
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.bin.gz) = 537b67fb3baf1f5363dec0079a7bf64c0ed7d5ec9b2a383362ca04ce3f746011798d12fe10ff6e4a77ccde35aa66e8cb06e689dcd7f19b5233999ffd7a2f817b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.bin.gz) = 3119fe0017084fdb8a97ba14a7f6258450c6b938
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.bin.gz) = 755aa54a7e8e2091f3f3e7c37f34f45c
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.gz) = f133ab0dedf14635b824f7a0a7d55451933e23be
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.gz) = 56d8d397af893debd28cf4283759213f8c3171647fb4df80b570991792d2addf4473d5ac0ac8a4e4dc4a668035ee37d3331cc3b6d5e029876760d4a6e0aab459
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.gz) = 59b03c3a53d5b54cef8240612a803d1ea61486f9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.gz) = 9e800486bef03915eec15ca90ea163fe
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.srec.gz) = 18f4bd985378baf25a9e28ffeaf95423b4bf85c7
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.srec.gz) = 9a535fc733582c7e8b59784c117f6714a96a1be2e9f65be2074731532511458a97b344359992de681bd7d7980c63dcbe98e7cef4bd58cd4cd3a313cefe822814
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.srec.gz) = 0e3554f0de32a39d19c1e674084e6b42f7ddfde8
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ADI_BRH.srec.gz) = 22db840fa81c95919f08d2cb7ef81450
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.bin.gz) = 5e3cd42ec6e6af1203ea8921eb1979183164c8b4
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.bin.gz) = 21cc95b8e28d50eab2b20e5eda315781ba95c34a4e4f8d1c5907ddd81ed4b236dd100b3bdb957456e3a713211f5de11a0f55cc6516a58dab3d7212b23de95120
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.bin.gz) = 5a1f1e22d7a29bf8205c1a3550fd78d2cdbe1d38
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.bin.gz) = 61edb94110b4be5c9d8bc9ee660dbd41
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.gz) = 19c96d4bf28919a4f30e55838b0859e197d0759f
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.gz) = 823dd6b45920bae6c2817091c106af7d7fd4ffc965f64c68da520fcdd70b8bd341765d33f1adf06574baaa79395a501b58aa64b8b83628209f3a08560b90c0d5
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.gz) = 30566487cbea824734bd4d9061f5a9df30875b07
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.gz) = b35c13395ed69e7931eefff8e42f1198
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.srec.gz) = a7d4841b78d684f17658819d150d7d16b135786c
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.srec.gz) = e196c13406146baa4b8d923b4406d8e3b2a451a7cfb174a4c652b8a702b0d619d30705bc998acbe8a037fca1c8f2fda53aee9ce8d4a52722cb11c40bf1288f75
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.srec.gz) = 78cd23cb694a0062858e5e3bb2959d794176c2db
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-CP3100.srec.gz) = b4e62ffbd5091a667a7fb61c31ff578e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.bin.gz) = 6f6bf5de9d82b058100eb089aca61b9bd59aaf61
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.bin.gz) = f91cf6eada8a84ce9c0036a4c0b22e550d71bf20fcb67d6b409d252e7db2c707aa104ae68a998cf87e98e8a47e3cda2cfa67f19c6792d3cf4f32bee59f3e2c48
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.bin.gz) = b7ec88f6f6604e897b2450223e791758e1c278d9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.bin.gz) = fb61d11fbdd49a4d826896bc45bad653
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.gz) = d44a7af68b2dffe73d6a28a742a15a64ad1c7f17
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.gz) = 244d5a9e1b36b7a18f77a1689d444375f733e4abe0a13047300b815633fe76af3bf595544078f89b1de302619e10f6d19245adeabd177fafeba93b7889dd34d8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.gz) = cad1e137c7d8bdb92221cb76679bee0ecb78f7a7
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GEMINI.gz) = d5a82888cc0477c064dc3ae9dfb29110
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.bin.gz) = af321ff02cea6f05295ed48d63145f2557065034
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.bin.gz) = 103b4e272b4ffd89e2705edcde9ecdff2d1b11bb4e4f6c46a2cfed6ea8bae9386bb357dda1fb04ca558f30d201171f2ec2aaae84b39b792715f142ab83772988
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.bin.gz) = 69a190021189d71376d88493fbe9bceb5c1bb50a
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.bin.gz) = cddd2da663644297ba2737081b26fab8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.gz) = b7ec166d07220620ec458e776df34ce0f954a861
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.gz) = 8b38c79a2e2533d85733cc5dd176f808036e3d04f91134fab57110aa2c827f26487cbee563fe85cfb0facd6a463c7069d5d22aafe90c1803a8f0b7df2fe526fe
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.gz) = d71b9dc8f5d59f8b126ce83dc06df5f97a009195
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-GUMSTIX.gz) = a8fe08eb1fd48f4870f1f736c4a72cb0
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.bin.gz) = 33e9946d8fc4834f9c74647b322a79425d3d6c52
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.bin.gz) = 354db08b656e913a0803051b861cc77d90c3c7e170362488c9940c3d0dae047e7a9d92fec348f92d951ea4093196b9f0b210d9d0cf04b9d842494c45b6feda5f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.bin.gz) = 393631ffd8b30a1e3dd5ecccbf950bb1a75759a3
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.bin.gz) = e650bd0cf7ad90361db3a5cd788553e9
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.gz) = eeccc5e10b4cc5b8900e9dca97222f0329c5ee67
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.gz) = 3ef842acc43f885398224dfb7c696d2334aecce84aecf7ea11d9464332e62fb796b45b302a097fd3a1ec4fe48ea92a029a8301f9d97899a51cea19c3524e39cb
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.gz) = b402a5e445815908643d27c5b69b7e055f2487ed
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-HDL_G.gz) = a74d0d8c03f2d840e118654bada47b03
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.gz) = 9380dcaafde1fc16b90858e04d0804b159a18b6a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.gz) = 20e027261b82d2188342fc3e10bdf1c2531c9012b4c0a5fea9d480c70bf00f118f0a0487646f541a63422d1acddf4abaabb34ea0a9161bb8f429708fedd18e63
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.gz) = 23e93e206ce3d710bdb9f4e57c342aaac073ff70
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.gz) = 2101cfda9d3ee129a2768bab982c7d4d
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-RPI.gz) = 1558752bbd6b362decdd3caef1d05b8c80dcf43b
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-RPI.gz) = 15dedb25bd8759aa736fd0ce444c4c782a65ec6cdd64e3fe424e1665d3e937df88b375dae773dda973a66264b90e10d0aa89e03cc217a8afbf4d79a23cce635e
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-RPI.gz) = e64628b2e9cc699bb0a48172cc4422e9e50a624b
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-RPI.gz) = 2224734e36d6bc4a139efdad6cc86978
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.gz) = 2c4862e6fdd14328dee5191b7e007fd7f2e626e3
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.gz) = 259b9964b3d10a4b49a413ad6355c16960a538b02f19bf4c0e07fcfc51699ba9df0a0b6342e6f67b9366302026bade0bf46a53356dfe42342e06f6fcbaf64dcb
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.gz) = afcc94417f4da4b84269420db2b0952565bbee93
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.gz) = 6010c0404590c4264ff824a9a57c0e04
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.srec.gz) = 0226f405675defd77c9dcdda8916e5b372cd206d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.srec.gz) = 0213a4b6784f018154bc11a148fcd6eec14ab26bc7b714d087c845db361776a6d37ff11aab7b1c1218e7a143e7fb12a85fff77f93d97832fa12d4ac39764691c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.srec.gz) = c5132bac29060129efd95b4d9beb4eee87e0b6a8
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-INTEGRATOR.srec.gz) = d176d5afd6c40c0cbfd4f64a19e39a25
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.bin.gz) = d105689d85a45fc834acd60c920d1420782e47ed
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.bin.gz) = bbe9fdeebed0c150622bd216013971c27646a4496f4ba64a8dcb0748e91c402a03441a0ee7b78341107f4d92f81771f41299b52d4142c6fd93e345f46a9319d8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.bin.gz) = ee05e9b64e9039aaee667dfdd71934a2b029b22a
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.bin.gz) = 993d3e5e2595d0da326ec142a45b2750
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.gz) = 7bacc9ecbca2a680a72fa9d71d0f622302fd94ec
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.gz) = f12ed4db4fae72630b905b3edd5f6eaa87f84db7a13d908559f7c1bab054054440dedf6806b8ae6ce873bb09bf2a4cf69d89529f21abbc476ac50274d9a71741
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.gz) = 360190a9de654cf05c1aa9a6edc908079fa2c237
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.gz) = 73b8043c242bb9739d216f3f8da7d3a5
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.srec.gz) = 2c976175ede9683b8a8ec5b8c3711df84001300b
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.srec.gz) = c683332d8fb46e88dd0dc5d9b56a4fa942fe9cc7cb79a005ce59609caa9d357d7dc5126feae3b181f63009980a9bf1700130d086b7b7103a8ac199c2a25090dc
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.srec.gz) = a1cde3a2841db820d89ffaa32232ce83fd5f44f9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80310.srec.gz) = 811e47b38fb8e8c1c7f228f0bbab9a74
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.bin.gz) = 862eb1a7ee9de8e3b3525e7d7d26d2cc5ba9bc59
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.bin.gz) = 884b2229b6a78748f61fdba23fe88a623a05c974d71e711821d902fea63e258fea523b9d9c1044ce5afd1d941a2e73d09649a6abc6d38ba0c263bbb4700dcfc1
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.bin.gz) = f3c4d5b5ec632c62410643b9e12960a40b2074ab
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.bin.gz) = 31e7f8b3e40c22ade7cc22d01d95b532
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.gz) = a60ac00d16384a828eef8a837fb21e00b53a8a4a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.gz) = 54bceeae1a8b27e59a3767284017552f717cefafc71e68b6c74a40429131709ecfd79726737d2dbaefc30e70d09fdab893e4651d125c85f10d9017b1c9e1db7d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.gz) = f5ce2ac5312c8fecbd072965df9bc2eb0c340d5b
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.gz) = dc8d921c26170e31f92bf29b1ce1a183
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.srec.gz) = 6fc69281083cfff4fa9fe78ab260619b92972167
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.srec.gz) = aaacf4b2b3f5ac015eddf58f6e5757c061b94ad57b8dc850cd5285fa4e111aaacfa2dbc0c9cc3b4e7a866a2fe2b55b900a33fed48e8587b50c6dede0dc66cd9f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.srec.gz) = d63585bed43debdbb05df1eb44130fc50e2edfb9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IQ80321.srec.gz) = db12176962530274584befedc2794d71
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IXM1200.gz) = cbf69533e9704756eed91dc42ab880300452cbf2
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IXM1200.gz) = 104cbab6498100ebf4e91b89055568f8e770f33abf331787d061ad000c506caf54ca9cd9afe2d6c16b6874502e10e3b20c0fdb97607f18d2ffb59718b2df62c8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IXM1200.gz) = 24af829fe0a4c696a78dc11eeb9a6830c1faded6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-IXM1200.gz) = e3634e55cff56a10538e3139c4eaf83a
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.bin.gz) = 3921a70d245903a0c95e4944b835f8b05326278d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.bin.gz) = 49bf1c9de5e10f21603f8eb6a45b7ae29bda1fa9ba8fd4b0c2a07e498af6bfc818be5d59e384ae3afbe6a0aa8000ea494f2a431067d5f32e553d09c4346b488a
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.bin.gz) = 506b209365f4650bf205b3c989504665e6a464da
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.bin.gz) = 4d00574f0fccd038ce96a75e40119f54
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.gz) = ac288980ec3e5615d33d18bbb5b20b863b64d4e5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.gz) = c96f2aac73d0e62c35d76c6a467f5b3b4ecd8461504a0ebbba456868f5ac1a42b6ff7c80aa2717bdeea242d79b940cd3584184da0fe8a07a79e2ac2f7bdc96bc
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.gz) = 02fd101de84eb4c6aa40bfa7cc477305246a7610
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.gz) = d4f8e1de25f4050d4b357cc9222799a6
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.srec.gz) = 10bb46c7b4e78af1cf9978c76759694a10f5b2b5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.srec.gz) = 75b010e6766552928518ebda6daca8a979dd9a2168e932621c63271607c48ced148b11ed29cb14a11a1905f4a30a3613a63a41a5743b5857b346501b5516c3b0
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.srec.gz) = c18f791fe071f039783b42800302d62d407245fe
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MINI2440.srec.gz) = a749256c48d3b8ac02d6ddca5fc669bc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.bin.gz) = 5f240a5493136d85a3b3ce856856a5781873834a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.bin.gz) = 19b95311ee9fe25d64d8eff569a02b68672348a1c7372bb99f9f07421e390ccaa0e1a3c65b6d8a67baae1b34859b5ae2ae0d1471c4c1bce0f249765ee085dd03
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.bin.gz) = b0536ea2075ddf15ba68cd3597aca512d25404c5
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.bin.gz) = 0174a07da16cafc0426a75dd4c9affbc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.gz) = f59146a75e366ba624eaf77f9582cd7200f56530
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.gz) = d68a8a5c29cbcab54673232481a17bb901d64d15de7df630c1657494cb70494436a0763a38ab31b12e3f273c8e8404f8515d29f2f290c99d25372d46763ab6ec
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.gz) = 2cf27b32a9bfd684b5f4013c9d25b8837aab0a08
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-MV2120.gz) = f623986c6286c02be5144d832c0fd3c2
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.bin.gz) = dc5760fca180affcb51da10f190dffbfd1b56cd1
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.bin.gz) = 56d1f1d5cf1faecbd845eb2a4a8fb88ac6d54808c87a6b39c70249231a532c7b7d858d5d89981f5feb726d93bfab384c6e5b8697a020e1c7ab495c13a5580e6f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.bin.gz) = 9be387154227f881c0ed38529c7a7a6916a59433
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.bin.gz) = 338ce4a5cb70414c375f3ef8cc9385d6
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.bin.gz) = 9d9cab4789700632fb90b593893a81015b51f619
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.bin.gz) = b1632b6bf5b3e6ebe3b8f311d8de3218e42e40bfabeabb2ddfd99285b31a0451e4ee4267d0dfbae1618c023b52bbeea5b76aea7162d4bf108f74538b5aa535b3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.bin.gz) = b6861bc0a0266cf68f5d91e6e3fb8c7da61690c5
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SHEEVAPLUG.bin.gz) = 9da615e9589e8b82d9a7e30c680d87d1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.bin.gz) = c7ed735255266257fb135c4abc2187199970ad3c
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.bin.gz) = fac2299142fe0f8b45f7a433b756d1e48e66940155cf5dd53bfd6bd2827d66fbf43c08306a0cf5d69e25ece03253ce5f806498cc925786d55973f95bc6079c7f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.bin.gz) = c3a03ab1bcd188d70b889c6384417025abe0f459
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.bin.gz) = bc3474cddb53421b463c1172621fd278
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.gz) = 0b08bd196892dff6fc1997afb9110e3f756f3124
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.gz) = 77b0d553364442904b9b08a3db76c70a7306b23b1b9f71a495eac9b294165da023d9ded9f8ee86f6e0ef336b514d83461cefc63885f754d4f6e03ea208842326
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.gz) = c0be26eb32c1d60435e1fea7521fee95660772fb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.gz) = 79e74c16602e752a034f0d93be2ca62b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.srec.gz) = ecffff46a8c528208595aa47d6739be05f4be815
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.srec.gz) = 532657ee54b385c79c7ef9768044d4d4012f16f54eb0fba2b743cadd66bc8288b00fac818503faf00db6f28a54f2bf51c7bc7f6ae8d5562e84a60149af119e63
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.srec.gz) = 749c2ad2c37bc095893a6ae9bf2b614af1effeb6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2410.srec.gz) = bfebb327393531018e6b9f6e66738805
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.bin.gz) = cbc1ebd6e56937148dae2c2d968add4d8b3df600
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.bin.gz) = 463210825ff997e4cb1a7dcb36ed0d0f352ce8ab72ce55fdadfdb03f38d18fd524452fc2129942cf78d2911bf7be4875df238a03f8108ce2708944ed8a9682f9
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.bin.gz) = de526c5e982f7173406cd0b2fffcea1dd4fc9a7e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.bin.gz) = 9c8cdb5067ff1bee4fe4705cc1cfebad
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.gz) = feeb3ef6e66284fa727a9feb4f3d7c45fedd0ca6
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.gz) = 9ec41f1cbabe0c960134267ec18fe6f1c5d8062489735a85bd3b1b8d9ee2acbbbe5f32c8e8e416ba3bdd55e563dc25c8224500702bbc5038e7bc5f91be5fed05
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.gz) = d03357b46454c1ffef1b1e3524c8b56a61336a06
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.gz) = 39dfa81264cd40fa3e0baf2db3f2fb8f
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.srec.gz) = e7908babcfe4f8e9400a83351028545d87c111d1
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.srec.gz) = 3e13a586fde15f0fff6be7719975eb9f2fb1c4778de5a19b30b208b050e2b8549de137c5820b0c233af3bb32d4b0dcbcb7d50d4012c6418146c78358f11ad194
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.srec.gz) = d8a910ca9c3b14abb626d94cce73ffee1d951258
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-SMDK2800.srec.gz) = 43252ffe4ce1a12b526af0b37aa7a2c2
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.bin.gz) = 1eaa16791cd37e16ece1fd2a3f84a9f1b744de4a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.bin.gz) = c12fe5137c903af5a4291fa06d95408e1a554ff70834036766a971693edb8164dbfecd8783ced92f548a42eb354da31e658e6ea3b347cb41d7551a85ff14b441
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.bin.gz) = a630baa7e17c1dd8e67f5d925fcfa782301efd09
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.bin.gz) = 8bf004134779adbfd47e710810cd541d
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.gz) = 8f750421edb291b7231b9ebb2df970f5da937ba5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.gz) = fbd4cc574e78cbbdd68754790777507f8b6b6288e05cb5261423f21545ff0825c9be03bc1ec663bf6a5552ac6686cff980ed1f2e4716a4690132058107a6fcf3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.gz) = dc315d5e0fb0cadb02954e75fb78670244ad1878
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.gz) = a0a2a1a1e5fa5e566b076fd1925f5a0b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.srec.gz) = 27a486313bf959dbdc89279b8da39ecb7ebf7e6d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.srec.gz) = 4dca299d4f9a90a2bffe3ffea6b5262e6cd248b9abae0fbd838e6bd83502fd573428952180f2dbd77284907fd7b1ffd1ef0c7524897dce49ab05c8c3aeec3aa3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.srec.gz) = e06dcfeb9376bb44f0444e71afd03c51754ad533
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TEAMASA_NPWR.srec.gz) = 0478aad2e41f791604d7d9e33efc16c1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.bin.gz) = a9c56c83c032a539bf23ac6250412bdd71a996a8
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.bin.gz) = d61d6f3e0a937039f13182d03ef1bbce0ff4f04a0b59e60096fbffd34f810d8e254d8e42b456a2be03bd84ce127cbe40e12c7864c85e4bf963ec9761ae322b9c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.bin.gz) = fdcb7c9bf1b49107c95e7c0731a6ca97922dfceb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.bin.gz) = 23acbd88065f394218ead9a00dbc6daa
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.gz) = 2d4f5baf51625ecb75fc4d043d248ea326c13102
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.gz) = 2bb556b33c74bc49b82693a4b66437498f7630709923aa54ae0cfbb0af50f5d28db62d062eb234e6c5b33bfb081490e9cbd687a899fece106756c79abe325a85
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.gz) = 84c7b73fd2c20914727a86e8aeeecba0e3b54ce9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TISDP2420.gz) = c1ef3736981fd98a6f6636a8785066ed
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.bin.gz) = 80dea7855e77c34fa5a6df8fb657f23b02777a71
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.bin.gz) = 673533b24668f44c09364ddb22f1fe3e058b5aacb2c544b0fe2c70eba9823e8aefcddcd02f6df8fabd74b5283e585b30ae33501e02b7edb7bc05cadcf8deaf07
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.bin.gz) = ba834fcc21f7b5210f10388a209172e2a1554944
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.bin.gz) = 6228219fac300e28fee657b3d640d2cb
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.gz) = 5d321821199ef390140e42f5de3aadbef178ec7d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.gz) = e5c98ca85a4a926860f11a84abbfeadbfdf2ded1f7ba8fe4f852e48188c16878016f66bd79585eef8d8cf1afa28be748ca144cddb742029c27b97051224fd41c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.gz) = ce45d65a2eeb0e8b3af0ce02b09a1dfeeea56d3e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TS7200.gz) = 9b77d5ea8b37b0550d4610e53bcce56b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.bin.gz) = cc608ec28ab6439d45fdcaceb2608d00b20f5739
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.bin.gz) = 18d2c25112a185bf5b7e23a7c30ebd183a29f16cbc79e11327fb086efd8f04faaa1fdee8ecfda8de6e437eea0ef79f788ee89d4388aa37fbc88331ba3a8cfd4b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.bin.gz) = 85e82f3918141510d0f3b9741fb10e15616d38c8
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.bin.gz) = 62e6180d8bc9b2ed8ffd209115083506
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.gz) = 784f311793c86ea06397c5e35f93833f1711c92e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.gz) = 3d481b051578603414849bf1e43bc84cca28049991640d3c41af3bf1f223623e46200c872cb29e3f98ad2bfcad5c377c1b489f074ac390f4ac9a04b4260e8c77
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.gz) = 17e6e1253799aac23cb810aa24e81c060115d311
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-TWINTAIL.gz) = 823ed2d54f115836527299f9542b1531
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.bin.gz) = 0d27b6fb7baf68c25f5e37005c6864cb82e075e2
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.bin.gz) = 70d04bcb2896f6e27c0278189d57549f9c3a286e43a827a704255487095123fb61b00b155750fd007491e42f5498d4fb207e9ff40d32354d1bb8b4adea67db1b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.bin.gz) = e2850dff5c5d6a2dcb975ed69d9cdc3dab59304f
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.bin.gz) = 1b5cd32ef196ccff17b3a3bfc3a790f1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.gz) = 2778315d331ffc62b829685c27668514472f3e19
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.gz) = 1fb7e68c7599c6174abce47d01c5376bd37e966342c5b377e0375e050200737f507c34e76653377a787bd9ea11ce526c0e52fa01009d10ccb4e124b77f59ac33
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.gz) = 08efa696270c86ab0b2ccecec2f65fd0f6ed07e4
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-epe0-TS7200.gz) = 103a3dadd04cf056386a2b7bbd0d666e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.bin.gz) = 11f132f4c6e60f09f84e8cc536c38d125336373e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.bin.gz) = 0a6442acb206b96f9450a80a1a02f5420fea62d96464695490a5efdd63b11c30ab38e2ba270fbb4125386a5b3bf452ae44427f75fb5dd675202e862301cf28ca
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.bin.gz) = 14a2ee2c2477084bd47369e3ab5bff9ec5163a2a
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.bin.gz) = 13646782aa47578a9ad12f7c07907633
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.gz) = 41474e92c5c2634a3ea25bba4510dffc8d2e399d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.gz) = 269cfa9fdab9f28e0931d20e6ff68284ef6e578d11c1c2b23fb272d9e82b12b19fddec101e24032b479c15ce8042efd2265678cf7a3e951e6b2429deb2de2b11
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.gz) = b080ed55c674ec69554713838ef050eba2a195a9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.gz) = 37ec6bc374177e34ac79e774e15cc679
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.srec.gz) = 98d97a466e67c472d2b778cabb6ff6196b379079
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.srec.gz) = 8ea14e0483850adef7d6bc614527739e9f3d1880a03522ca6d7c3df1e38222200983ff4fca413b9aa2c2e6d90efd5170aa7b43be8ea68eb9c8cb8f024c9954f4
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.srec.gz) = b88e4587b48064fc6719bf3e776bc3163efad390
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-ADI_BRH.srec.gz) = 5b59dd3b2796db425638472b47970280
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.srec.gz) = 77140597384a41679467c0cb3814f4524f5a7fbf
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.srec.gz) = 104d1a827d7a622c77139c4a5f6f36a205d708ffa3f3b438ba139981aaca00342288fca6adc82f00603d0210e05e9187fd4fabe3a79b3ab0baa5899a72ce6253
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.srec.gz) = 3c1e9ccfe1c9df8c07976c82348191273a09024e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.srec.gz) = 4a503d1c30776dc77a7dc3ba3e160f37
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.gz) = f74be1c541128bf2c1bc8992058df64b48d1fb97
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.gz) = cf97c8ab92e45baf4fe64c2d5722391cc35569c035143371cdb746c9a3704954a06fc336c50af51f9f0b198a5e05d6e7e3a3e5b5257ed214489fc124525b8104
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.gz) = fd503fa3df024d8aa2397a060e986074453d8ed4
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-INTEGRATOR.gz) = 240f52b880f6c81b4e67314404fc5a97
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.gz) = 55a7ccaf693a8f72322bd4e898b4ecae4a8e0c80
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.gz) = fd40bcb076b661407034b45baf50731dfcdd9ff9f78b4768b0c300fc6e0187204fba1e9491c8ced8a12e77070a3f599608d7c2c649222a142efd0b799e414499
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.gz) = 6e69674afd923ffa4e320a7c1cdde0224959b3ad
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.gz) = f783d0328ed41dac449058e80fa81dde
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.bin.gz) = cd7ca6c6ba8134af29a1cb3c4db19e80753b5cda
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.bin.gz) = f1b0bcc810fa29ddd4102477ea422457aca2e037964a284f1eab1b2e31c4c408c5d495eb489c7b4b5c2c578998a9643f68e8577670b9b04e177b5147dc6b17dc
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.bin.gz) = 2e7c3d70ad38408b2e24ef3a6e3a5c22c8724706
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.bin.gz) = 693dfec6cb311df0ba890e55c610121e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.gz) = a5ed3ef72be67e59c81f1701c630e420c19df6c1
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.gz) = b9b4dfb8d4aaabaf3346d5af652fb4d79b15c8ea43eba94bf3ee3b0a9f05bd129a050ede2b4c127f14c3df1149f7a9f965499d09a55640eae83151c42f054dcc
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.gz) = 12ea272d03d51081eee0ab7858e05bd77c21a86d
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.gz) = 114b5ae7efcf519aa2f969e827ef03a8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.srec.gz) = 01d52551442d858c9e8b9404311a0c3e421083a5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.srec.gz) = f74951ab8e5b2445643c046bee3d34c67310399a84db9b0c2e1c3fb7f460eb1d863f520c6703f51f270d6cd1bdd8ed0569bd32fda709e6f62a4ec9a8088418be
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.srec.gz) = 9baca8969db5db172716ad6b6e9154c42c0816ec
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-fxp0-IQ80310.srec.gz) = 60528f9ba917f0412d4c9026c58dba5e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.bin.gz) = 1d0c2b24a143a451f4ea9e11f4580e45ecab2237
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.bin.gz) = 367845db7dac4bb80eab23acb6d40c193ac2c53239deca54acca2adc5c1161240755bc9dbf9ea4082b48b83eea70f4b01909c46f26f4221df8af74cf64524cd5
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.bin.gz) = 5bb353dba0b6a32a0916359fdaa5b06a260de51c
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.bin.gz) = 56c549b0fe6d221922b59b7ae00c6ca6
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.gz) = 72017ac40eb0de30cee8ffc340e9bb7f33cc40bc
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.gz) = 836362bfbeb34fc0040b9a3492012e1dbea1cf8c1b7bc6afa45c59e784caa1d07be1b829d10e807d1701d71d6350a3d1a5e63ff71d85cb3c37fe8b9b4f65c47f
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.gz) = d74682aaee589c7ca089a49bbaa6029175d13c3c
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-mvgbe0-MV2120.gz) = 6712477894ae747784d281b4ea595131
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.bin.gz) = 0044ec7b51299209fe8a15443aace1984350d1c3
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.bin.gz) = becc7276686635e6b10b03d8374f1a24526066692cdfcc72d556ce07a0a06ac44144ed011451b4542105211d9a9d0b24f408d193a932bf161a52cebcb49a6e06
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.bin.gz) = 35e63f0805242303ded144ee50f429ed6b165797
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.bin.gz) = 56670b2148acf612495ae5a30662bedb
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.gz) = 3e68e8b0d100356489f0a5b027c19139ef9e97ea
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.gz) = 6e87c01ae9a15702a15b2d6eb36a7a4ddaccd3ae0ff9188b3aca9f3c48207443829e2b57cbdbbb01b958cec1f8416e326547380928c928d0fe67a66adff9d2d9
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.gz) = 50496c450bc32fd7da2e16674eff08df7e3ffbc9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-ne0-TWINTAIL.gz) = 2d40cabe8960a91cb7b995cac28c016c
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.bin.gz) = 4fce330a36c78eb1de452bc0df57a84b5df02ddd
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.bin.gz) = d021074a1083f3cdf55ac1a1ef9a1e93268b418e36c01bc3a401d52d418f8402c19cba1c06a380c86c0b9f5f552cdf7cafeea19b2f03dfd46aad733ac7095479
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.bin.gz) = b573e7bcafe3e1d1fc25aa34177b9c5d845095f9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.bin.gz) = 5035eae6a7bdbf82b39960661bbc1548
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.gz) = 3e5e3eaa9d205254d39746b8cc9c4291fc1a8aae
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.gz) = c454baa740a1e8e7e16c027ca4da512731a8cee8d265bd7ca7110fecb1019cff0e5b0db423aface71e0228639c4a7465108bf3fe69b9d711bd5f5113c4a0a6b3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.gz) = 1aa0d312767044b044041a1d9431b7d4b4841bef
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.gz) = ccc8b7e6d1627a24e5ee493d3d769681
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.srec.gz) = 9e3be145e73c346fc467de425aa5ae84c8e86dcb
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.srec.gz) = c7f1566fa1665b6f81a36e0c4f7e00f1ccb08af73698d5d938fc26770c65f5485da4c106cde8aa8518fc312208c58182e4a9e6bd92f2cf6c3b7ffd0c822e8fe8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.srec.gz) = 5446c67277640bac0811d35a413b2c9747d2f1f6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-ADI_BRH.srec.gz) = 9072dfcce2a2736faeff274a61d6b378
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.bin.gz) = a8aa9bf7afaf2468e38fd8f9f3e2fbf1957c47e6
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.bin.gz) = c40af33b0a32888b18dc3e05cb747269ccdeb38f7fea3457be91688e44ee256754d8b31489b9cb6495af63bdfc6a6ea16a6f800b70f5f567d85130ca50ead974
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.bin.gz) = b0b41be5da00dd6a4c84277bfe39975a4cfe31a0
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.bin.gz) = b63766732a4710924581351a1778f71f
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.gz) = 6a53fe270036359318eb84b30bfd04f089cc6e6e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.gz) = 8c61a2d1a08ae6c889304a8a1335d0b40d092f4f7a1ebc0a14fb721efe1d56fa7c3c3a43c65249754f0bd1baacae5f16a6ff497c6146c6c1fb805aeb14d07f65
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.gz) = 1de7507b9869a86de2468c9200d728f6a379148d
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.gz) = d878c13f9a7706e55848df3b09563620
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.srec.gz) = 4a762c7e63648a321e727cff47e99a01570ed1ee
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.srec.gz) = 19e1b9284fe2a46a5952c379400bb1d74117b3b8d2aea91e6820c1356f4e6761add87d462ec0a14a545534d1e17f211e505f539ff681f39eafa10b0893b13038
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.srec.gz) = f4b31cb80b5da3de1ab654f7287e544ca9e761cf
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-CP3100.srec.gz) = aa4640c78d3499c1bd1b6ade6b5564df
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.bin.gz) = d297e9f63876e259acadf43d735d26c70648cfea
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.bin.gz) = bba032dbe3a47aa40f45e232a06c38edf352515983e9896b56a28510fc031edb12a3b462ea799bcbe5e3dd2ca7585729c40e8203a02347aaf27f367ebc027cf8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.bin.gz) = 3c2d8df7cda72b357e291b47454859098d5a71b5
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.bin.gz) = 2cb06ddf778f331df715f39fe0443219
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.gz) = 0ed7595924e6d03491d2bd7d32d42d00f96a3834
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.gz) = 0e33713d7943731f3430b74e4a72cb98ace2878790ad7dc2d185f0e8a825c2a9db9c3194418bf91ebb30c4f87659d1de36706b57349a38d85e584456071d2d84
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.gz) = fef4dbb06bdf1299ffd2719ef5c147f51704ae0d
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.gz) = 142bf1b95c4e72d91063e29379b858a5
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.srec.gz) = 4a12c83305d58e03cd8c49f05cc6b32660939700
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.srec.gz) = c7e132403f37ca9514a8bcd8c8a94de04fb63a2319b1510db5ce9f14d60ff45778228e4c6d9ca5b042bd16ea26396e035a31f948908bbff152a7bf9529b3854a
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.srec.gz) = 306ccfdb478dae1136303199e84f54f1e65a63f9
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-INTEGRATOR.srec.gz) = 4805ccd3adcb1ff438b7c4d900416284
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.bin.gz) = f3f8c21960efb2c67418c29fef978e98b472a813
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.bin.gz) = 7b37f0c129e92372d4f170ab4106c2bcbdce9628c03a22ee1a265ee73263e78e3befbb712ea1f241b2e2b0e0b54bca3a9b3f7628927a18ee28551e867e526bf0
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.bin.gz) = 237204cf97f62dbb37ec28d9a12158f3d7ec01ef
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.bin.gz) = ed5f31fe08e40a01da35e68a8ce24da5
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.gz) = 2aee3ee787581f73d3e667aaa72e5211a316db75
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.gz) = 6a131f56fb801174037294c32a30244a500fa4bcacfccc65b2e1904b63450cd0ef0656dfadb4eaf1db651b8378070b97a93ab2df053641324c345766b4b043ae
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.gz) = f4a9d9ec37f3a9bb98055681735399a914673fb4
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.gz) = 25bbb323800e83e721976fcf4b5d42c1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.srec.gz) = 766410442e0892a471e2dd4420209f6974ef16ca
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.srec.gz) = ce977a4a9c87431fc57805ee22efe908bb79a344c6a1d2f3c75b974db3b54626908fd25e524a4ed3f55327877c97f78e9496515fd6c4677fd98b3c273ccf1c2e
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.srec.gz) = 093855469bff467f4744c3bf678d55d9eb08b951
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80310.srec.gz) = fead543e57b7c2f2a458d451b6c59f08
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.bin.gz) = 257ee7c14d678bfbe2511fbd47d72f6c8c461752
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.bin.gz) = db6a78dd47b3298d8f66fedb46e00b6c269e3ea389aa276480c947f606690002c95e7cc2306fe7f243117da3894ca7f7ce9b3bbc12e2cbed4d17b0ece02dddec
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.bin.gz) = 542ae9874a3223e014f50d542c9a677d0a0efdf1
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.bin.gz) = a70cbdb6278eab864d1bf3b288c3392b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.srec.gz) = 697561a2e82361d2d92775821ea4cd03e163c217
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.srec.gz) = c1959211704f091e865ee26560496424974c0dc3ad3085df21fe51b21c95a56d7f024f833728f9748b02f4ef409a24454ae731d071764921b0fe57df38a3ed3d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.srec.gz) = 7d95cff40a30f44d91013c8bf2e13a540470e5cd
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-IQ80321.srec.gz) = 7cb2d5067df40372c016211fee729a1c
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.bin.gz) = dc0f06b24ab21f8188a4e3f0321246acf541854c
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.bin.gz) = 13a84014dbb366e32bd715279e46c67a00f09cd40eacdc0fa91cd0e8a7e3e4862110161ca56be8024d3a0cd14f2a17c539111b366e91a27c65c5c47a741dc4e2
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.bin.gz) = 79967e4ee6c3b5038007f8deb9b6ec9172bcd4dd
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.bin.gz) = c5caa593ac363dd9dbf8f44de4c06099
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.gz) = 6f5c0d944bdcf0b3dfa76f60e6b5035dedc94c00
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.gz) = cd56585b5fd7a8d4c15453966942d48c538004a142daf8b0f30d26637e82e0483dba20680a303bd561341b0c35aa4a537f6a24764bd96ca8102fb018d57b22c4
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.gz) = f0c30e5955068a64ce24eb6d96793fd4cabebba5
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.gz) = de797d7956e6fd360b2f4028d05e7608
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.srec.gz) = 0689f7b9a0ff0140a28fdcce4d8cd206d566c680
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.srec.gz) = eafe6cf5e618cf43054145f925f154d99acaffc7eff8d4be2bb801de61c27193debb983412b45c4b14b5dc834633452f89c170a895078ccd31f00a5a0685661e
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.srec.gz) = b07d921cd736ac79d88e8f0e041db636c198faad
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sd0-TEAMASA_NPWR.srec.gz) = 146f7101d810d5b401dc3b320a2f89bc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.bin.gz) = 393c30bf2cdc7bd75e749dd8b2537bd77dc91a65
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.bin.gz) = 44d1609a6be448f0df6d7f733a9fa544fdc673da11e0b64b66174a9889b4bd6c069c69a312853954c0c631eb036f37ce56beac486e347e600be01de6c9c3a73d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.bin.gz) = b7b4482aa76347a87722d9eb34662af96fe94e00
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.bin.gz) = 6bc478629045ffcd392adc0f5c9d133a
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.gz) = 1ae50b9a6c3554474481cfe3c37dc88bc29cc436
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.gz) = c1827ec89039136799b21418e0df33992f4ee4c166c130c34865f22cab0601fde056078892a76075714bb3ff09dd1edc54f33464c0dd8854f303398b6357b09d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.gz) = 823391035b738182fdee19bfc807eb2f09573f1d
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-sm0-GUMSTIX.gz) = 46159d039abfeb7e9dc00177ba1f9271
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.bin.gz) = c7bb680f57a438d65351ba2e665b0c98b979fb80
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.bin.gz) = c8cc5ec9d35ef1c8bb0db010e358f331335fc69db09f67110a92eea46eb275950f2ea5cb4e9f88ea2ed80561a5e31d88ae6f76e5582c448f3df265dc6141be9a
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.bin.gz) = cfa0506e9de7a97955bf05bb9d89275ae65bd77e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.bin.gz) = ed0673b11f604500c60263dd3dca3991
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.gz) = 6a22b3a0b0baeb17201a15a1e46b6a1bc22345f5
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.gz) = 1a44e1fc731b0099fc726ba2362c5967f0073ada7d036656d5f60df865217349b5304bf05c7699662f582ac2519f2db64ee774bfe58c1780824ad04c8ddc8390
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.gz) = e5872e39e97e9a9e1d72da6d35d5a8013e168b59
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-smsh0-GUMSTIX.gz) = 2d76c6a78af5dbc9a1e5200819e53511
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.bin.gz) = 298b05e33ef85a4b937c2a5e84a48022e388d0f7
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.bin.gz) = 3d709cc48eee7fad9cd986542430e23a4b81c84e549d2f0f9210df57a38a9d36eb3abe1bc2ccf2c66d9ec84575bdc9c1b55981f3686de5ff857b55f86d9ab661
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.bin.gz) = c2d4ab46b1b90b55bc40c74d31f287487f781142
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.bin.gz) = 91e2b298632e8fa0ebebad32ef0df715
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.gz) = a63011e3f96507e9585442178de4c0e41338cf87
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.gz) = 76b99b424e4f8cc4f47b0ba7ed8b4679a5d49ea3a022a84d2cd74be396bc497f481fb3fa16e23deac876d5dcbfc9a29f745bb1672d2844fce15252db989c7677
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.gz) = 8cddff412a5b879ce5b17a5a22b09603ae9f9324
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.gz) = 85c7096f583e4f9f3841d7f663de4999
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.srec.gz) = 83cec666fdaa7fd2d5fb6de32461615839932cc6
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.srec.gz) = ec118ec8fba3c15ba1b6725a1b9778d14c4b4fc6f624d7979c281d6195271df3bbcc6668eaf0bb25b6089243c5d7b05e43ca6247e3d72a548abfff0f31f14f10
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.srec.gz) = 6741604d5336591c02e6a9fce7cd093f7e0703fb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-ADI_BRH.srec.gz) = e98cf8ea7ce8704d98880ca519bde38f
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.bin.gz) = faaa399c0796bde9609425f73ebf4b7436516a09
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.bin.gz) = c61821bf159dca3ef32e69aff1f935a9de0228e5e0568afc74dfaa5e91902fdb0b13589e70af2871b3c7afbe2cc3777be64e9bf52798534addd6338ef6fb2095
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.bin.gz) = 081460e1657d3f542615c9b63d2bd8638d4f64bb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.bin.gz) = f79d3833d46191e99e7617029c981cf8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.gz) = e56e0fbbbe556a6741af58398b3d7d116f3ce469
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.gz) = ebdbee8f4ffed5e2ffbb7890a8e693299e441aa70aa5a7249f1b468373970bc29d2284d82bf638cbbc258ee8b500ba5b3244b83fedcff1e1465218d9fc76575c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.gz) = 881461289bc9ee95132cd5997c19c3838aaa6c39
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.gz) = c5d42e48168ba69e065be3f44d2e2e09
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.srec.gz) = 1fb817599a91b10187301c3f2333dc6484451556
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.srec.gz) = 19f6d85d50d1fdd5fbabe1f60b67992acaa80e0afa44ab7d94f31e095592b7852f2c8f42227bd9d90de9698211085a69aa86d4076100711f96e59bd446317164
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.srec.gz) = bd13c2dec6d22ca3e1d245159b0e765ff03301bb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-CP3100.srec.gz) = 916df9db9485676f33a5bfd017e4cd2a
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.bin.gz) = 2c81eb3878a53e36a554b1f4e91c5011ce4ba507
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.bin.gz) = 2aa85113e7bf69371c8027929857e4c35623f07a16db83bf1cd3824053776e0daf33ab8ddd2e954b938fc33424ea044101c6f9c6bd500a32b030f28ffe40049e
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.bin.gz) = 1e1187fd6a831f7e9dfc546280681b924c03b36e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.bin.gz) = a767b383bfbe980c1da78e744144dbd3
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.gz) = e60bf72e33a1948bfdf1d84a209b1ab6e4ec6522
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.gz) = 9459f4a7532ac2d2890c538a3325c217d1ba468db8e8d4c7d2fae8e7a4ba256e0b0453e5757e1e2ecfffa5f1382d843289279d471562911d56215f2f3ee73eac
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.gz) = 95de4a223120d3c34a7862edb781345652904ffc
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.gz) = b7113d5899d418131a2d376711e32379
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.srec.gz) = cc193aac830dabd4793f1fb6722cadc6fed0bdd4
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.srec.gz) = 05a81920bb52518267ce4046aa79824a763dca9643146646bc6746d16dab1854140d28dabb5f7ba1ce9cfa1cea3a2e9d76df3bdcf227da89ea883011c464a579
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.srec.gz) = d458f2b8a4afddecde3bad093576b0b6a17b2f3f
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80310.srec.gz) = 9d205882f4befbe25707f009910f95b2
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.bin.gz) = 78884cf87f77551ec0e47bf3d629b41ca5a4420e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.bin.gz) = 094252727a03ca3dce207c5c92959ba21a888bddf502d5a9ee9709bfbdf9eba5d60dae5793ca6ab5dacf720d475499710d70b36622b97c1449badc5ba85e82e1
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.bin.gz) = 4d7b190601413c8c89ed39d8dee44abbd388d8ad
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.bin.gz) = 6aed071b41867489457065cc3bddb0bb
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.gz) = 771add734839295eaeb51bb341d43cdeb64733b9
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.gz) = 1ad26279054ef65ab4c4c37ed2443087a04d530641cd005b7d02dba395bad6770270b6f4e5d9ee522fde9ffcf3e4842e704b4fac2896eff2e73db39cd4c7e96d
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.gz) = 578a063f106ea04a6e8133cfa3c0eb94b0decac3
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.gz) = bc6fd4df95278bf2e327a3b85a5528eb
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.srec.gz) = 1b77033ac9b0bba5b829868fc3a826cc2b8bfc3e
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.srec.gz) = f14f41fd0600a3502383ffcedc902975372ee3ac03ff8e5ff156e93230eb8572798b00a6049a1cbe6c09d53002a07d6242064068b030a8e588355c0c67508e4c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.srec.gz) = 5360066de4b445f57064f767cd41c16d2104da1a
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-IQ80321.srec.gz) = c4197fe93de106e7b927570baa374dbc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.bin.gz) = 70a3d642aa8ea8d1a3e9df143a9e453aa1f6284b
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.bin.gz) = 391ac58855b9c24a8dbf8baaab4e9b4efd956eddf343a0bdea8351e1469187798e36ea875d6f4d91b5ba2be0eba5b9b02f33a6eded8fe6d727d3703950d554d8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.bin.gz) = 7f860a8346d99c80a3cd48694244040d976283ef
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.bin.gz) = 379072e809792e50b4015b9577360574
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.gz) = 0616f7ca1f3ef9c60e4c34aa459b40fb72277025
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.gz) = 8530ac25385210421ab23391925fee75ffd81e369c6b9773034e850519577ec69ba74493a22b08835ff847251ed16bbadc5e86c7956ae88c48e5bd2fff61417c
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.gz) = 18dd6a88210d336fb61e3dcd0826fe50c8d13f94
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0-TS7200.gz) = 10be5c2ffaf39f29b3948473e78ea1a8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.bin.gz) = 3ca17c6882a1519488a77a45207f3ed8ea19fa23
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.bin.gz) = bd41dc8a2e268be47c2900ee5564bbbcd2ad6635f7ab99ff059efb71c27c277cb9da8ebfc34eff5d17839f345867ab9d478d0d027e7980fff4fc3e7494b1ad4b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.bin.gz) = daeda9ae3e3cbbf3f5a7a7c6381d13a30070ccaa
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.bin.gz) = 6eccdeef46d96a5ed0267484262bdee2
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.gz) = 219f483fe3afb49cdefa8b1865cbbc69730090de
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.gz) = 937fb99f921b629c1fbecbd60a4de24fe1c55ea70211b03ac15d2b20ae925122a6e3d3b43e34cc8ca6fa9b1d8a1f500ef29ea55f72b1a80a8f52ad43ed6fe1e1
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.gz) = 437b6861a5f1288ea6553790feb1de02293ed3b4
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0e-MV2120.gz) = 4d05c9e5325526185f0db4a6a11edc92
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.bin.gz) = a2d678ea1b57438872bb33f8e3f5ab311680ba55
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.bin.gz) = adc42e2e13bdef6fc24f27cc4cff4363e0287350ba2afd7681e8f3f027865cd7f58e3e5d4fe59131870b34e8e6a8721a935adfb4930957525a24c02cd4c2ceb3
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.bin.gz) = bc32af49bdcc8ae9226c97ae03f4306efb1b646e
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.bin.gz) = 344ed7e1145103dd1f747176fa09a993
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.gz) = 98a9af8c3b74a45940b587383545587a300274cf
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.gz) = ef6b06092f0a9ada2774b3b172ed405d82f9fb3ea0c3c53c7da7d493f9c4fdd92124970af972342e3134852d9575a80c05f0ab22fcff70b52dfa4007b31c5a10
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.gz) = 1558754fb8015e4564b65823fa61d74e7ee2758f
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0f-MV2120.gz) = 4c2d594388f5d5ada250a5e9137a2dd1
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.bin.gz) = 655147b472960f9a2f0addaec681344d62344d52
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.bin.gz) = 91448fa3831d263781cc4a54b9103ef3fe99f7f71d1b4d5f25ffdc049ad34e9ab84fd38e7703ec55f1875278dc94e808b984b6d6610a0a310b9cb633205a864b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.bin.gz) = d985973ac1155c6506fd2dc36208da2c89c1c010
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.bin.gz) = def424287a7d6e0c9dc9878cb6af8d9b
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.gz) = ecd70279e4ba36c40e8aa14b9d2705942e48e0de
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.gz) = 1f4fad54a9a843e66fca15c0ab3de33388b5c94006a051eea03cb3078fce4a671aae802eeb94b410a47b4ea291c7bdac0100359fdd5405fdcc2b0d8db3aad9df
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.gz) = 16f2789c94f147c86ee94427a2bb0cee353d91bf
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0g-MV2120.gz) = 9df82b31b91bceb714ebd8a7036eec8f
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.gz) = 7f65f7ce1167b8b0bea66a821a28f8a328f960bc
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.gz) = 7d98ecd33f11bfcdc1e89d02df391b5c7fb4d66bd66af2713913b9ad8a6de264fb18f64020f009e21f7fe7fadf6cfeadcf72b195be731c5365745d2119a22c08
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.gz) = d84424851ce6a0cefd0881650870f5c902a50e37
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.gz) = 2b7ec0cac876ff4758fdb4cfe7e32d7d
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.bin.gz) = 92236b446b36023cd70765c10fa61fbe3bd2414f
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.bin.gz) = 2882f6b905d11bd0019d4657586412e93c566abf48d10702af36ccac9f688886fbad3d8ef62c3342bb7ddbfaf72f2cf7510d6635f9388187bd7932c814aea288
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.bin.gz) = 7bb29d6cd1f68788fdf3a98d198ca7d98e264c7b
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wd0h-MV2120.bin.gz) = a1d749d80636959956efface64861885
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.bin.gz) = b3937345ad5103a5331f8f3d9217f6c73b7a2e28
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.bin.gz) = 1ddce72f72e631cd8af38d326ff826ac52005cda9974dcf87c33370adf04f90e7a9025177948ef2ddf2f78e259c535bdd5ce2d9da2541f4ca4cc8d57a927afa6
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.bin.gz) = adeb55b34d1468ac0fa1ac03ddeb6d86749a4994
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.bin.gz) = c10dbd3dd8b711e0e431146585d862c8
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.gz) = cf1dad35f06a51619d75518386fb7f0f60330734
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.gz) = 085729350310674f285fe2ca0fb41f63701eb1f8f38da50329483d2dd1e4644a84c20815f94cecadf686d925a808eac57a986338aac762e4fe9080b2ad5adf99
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.gz) = c51e997b08e72d5e9a1a4953dfca874d4d86d4f6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.gz) = aa4e8b576991e29425d66131a6737800
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.srec.gz) = 6823aedd0b5469af8bdc05b9fde2fa1bd5133e48
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.srec.gz) = 1b372e4d5cc54171ae399d5d55558e8cc99234c08172c7cd2c83185ec2de4a326aac04a800a050be1d1ef42b60dcc4b20ae25b5fd1f08f707a09926268207031
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.srec.gz) = e072eb111fb0bb71c30fc8ad457e1d2711591887
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-CP3100.srec.gz) = db7f9d23f27d533266eda56715e2adfc
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.bin.gz) = fd211bf40ed4f68e9f05bb5f6da85eeeb92e35d3
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.bin.gz) = 1f8dcdc7f7d06a42111745ac2754644cc5796552417f7a0a6d80fb4a7ffa667c6ab577e76f84e2f497d367b244f578b5a1c1d882c558929b12470d02026a3b3b
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.bin.gz) = e853cff382e03161c0354f83f100c67779ecc7bb
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.bin.gz) = 75e9772c889f60ae2baf766aff24f997
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.gz) = 03973311d8dc84c5522524968506a70f3e69e93d
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.gz) = 0582b69eaa266f9874ad02fb21fb7e70fbebe3952d8d2826bc6d58f23cd4d043ff3971775ecd1a12b0a828ff7266677f40c495bf394a2f33c41d372fa1ef7668
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.gz) = 8e8b7d0e5619ca58a50f6ad1f15b2764f9a3570b
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.gz) = ccfc004433b54dc119d556d198e611d6
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.srec.gz) = 72b16c8dea4c9391cb9282e2c1f91e3ba30d9522
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.srec.gz) = 94d123f6a62639d3849b60441d19e49359a922881b8818c11a41cf43ffaccea3e30b5a001e6b96ffea0f6863ca5ed6465d4ae6ea9ec6e91f95c9e498deb44105
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.srec.gz) = 4c94b472797fe5fdfc6bfc8427abe598f7ffbe21
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-IQ80321.srec.gz) = 3c722e71ccd200b5d113f3d5d3b177d0
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.bin.gz) = fc8ab0bc9eb0d8956ade1baa5651d278852ee08a
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.bin.gz) = 00c22223dd564fb484a1a477efca1a4af97bd910a88b722cd3ef05a55f4c56dc90ca0eebb6563ef73106bbe1e3ff1e9c2f51e14ac1ad5277035a1beed8250651
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.bin.gz) = 081ee767155378a6cefb29064e13c46e4de45508
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.bin.gz) = 7c1846c7207b9760e716581a07a5d366
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.gz) = 72d1968438f4d0b4c063d5b85009669416b39892
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.gz) = cfccacff88e457bf30f0336db8882c63e03fa8ac8eb7d2ae87b7a6bd0eb36b5708eaa512aba0df46ebcd0a89cd7732a0ccadeab0776a54eb4e61ed32bec40df8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.gz) = 3fdc54921cf7a3e81ae3be6854847d0026720467
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.gz) = 74ef3b97327e4591d8a3d6acb59c6c3e
-SHA1 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.srec.gz) = 26020265778b152f20cd35c43dd0a8e8be644f74
-SHA512 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.srec.gz) = 672d1ca404b4dabe7791bbe1506b47e64445c047f92c3eac1810b8deb25e23e6a1e554acc88a307e4f85850df967e521f36c7ffb90da7325f7a3d76aba3494b8
-RMD160 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.srec.gz) = 2e0466a32e150882f148c40d8096b53849a7bfc6
-MD5 (NetBSD-6.0/evbarm/binary/kernel/netbsd-wm0-TEAMASA_NPWR.srec.gz) = 9b35a2416410acc9d4fac08926ffa38c
-SHA1 (NetBSD-6.0/evbarm/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/evbarm/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/evbarm/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/evbarm/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/evbarm/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbarm/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbarm/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbarm/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbarm/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbarm/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbarm/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbarm/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xbase.tgz) = 875fd641f969ec00f854ca1334d084947450c740
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xbase.tgz) = 75d0c9e9685b6b7bb706df7427c8b52f59c4fc4d0e725b02ee18024f75a546dc41de5f1a5d8552a8d2c84bdf87856e5857b0f12914801ca7b36b69536d617b4e
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xbase.tgz) = 1a4d099d59b2bd882e99f1b2df1c7bf22b890d48
-MD5 (NetBSD-6.0/evbarm/binary/sets/xbase.tgz) = 5eb9c573c5a0c96701f268a3470a58b9
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/evbarm/binary/sets/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/evbarm/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/evbarm/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/evbarm/binary/sets/xserver.tgz) = 4ccfef1d49179603286042088bec0218c6b2031d
-SHA512 (NetBSD-6.0/evbarm/binary/sets/xserver.tgz) = 809fc0a9065c1b9e7cd17aeb0d41cfd3158efd6c585556af01c4a3c93f0df3646a2ff77c6994449a703a408c0988fc1aa68cf34c7e297a3056d73ded57034c12
-RMD160 (NetBSD-6.0/evbarm/binary/sets/xserver.tgz) = 403604404261764c74f10fab774c4653fd20cc9b
-MD5 (NetBSD-6.0/evbarm/binary/sets/xserver.tgz) = 914f909b6878cef16a92765a8cbb52ca
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-ADI_BRH.tgz) = d9cf46427b7ceed2cbe9e6bb2b62a5d461799474
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-ADI_BRH.tgz) = f2beff9ed4d712db8eb3bf1d9e8f60942e3fab2a834b73fed76ac79bd012fccbbb6698e04edd7ce7dba7802852386bdd2996dadc2c8a04a409fae303dace1104
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-ADI_BRH.tgz) = 443b7c69a5f5abeaa3dedd3b6213486af56eeaef
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-ADI_BRH.tgz) = 6e3e8b794a16eb8a079342ec0b1af212
-SHA1 (NetBSD-6.0/evbarm/binary/sets/base.tgz) = 74a00851a474a252991743274528e6272f50dd57
-SHA512 (NetBSD-6.0/evbarm/binary/sets/base.tgz) = 154a8230676785921f3d6819d25a2900fe860291ebc2e4891fe94b039871e1515199a4c0e6fe3bb5aba4f9ee802a977e985f87206a1688e4d7e0ad24e1069eee
-RMD160 (NetBSD-6.0/evbarm/binary/sets/base.tgz) = c6d3c3b83b8a2a56870929a9d616393e6d19e9fc
-MD5 (NetBSD-6.0/evbarm/binary/sets/base.tgz) = 2e26124352843379db4fcc7ab680ec5f
-SHA1 (NetBSD-6.0/evbarm/binary/sets/comp.tgz) = 4004f24b5f208575da97b542db46731015cb7573
-SHA512 (NetBSD-6.0/evbarm/binary/sets/comp.tgz) = a0950dab5cbb258ee2f29f2d35173e00a5cfd79ef30b27605782b9f22b8564e05d9633ca6886178c1b1b0cdd6a8112d3a9f663211804e554ac63ac691ff3f9f7
-RMD160 (NetBSD-6.0/evbarm/binary/sets/comp.tgz) = e8a618972f78271ba8a957f4f626b632d1b03ae1
-MD5 (NetBSD-6.0/evbarm/binary/sets/comp.tgz) = ae2425114d29b9fd2136342ce730baf0
-SHA1 (NetBSD-6.0/evbarm/binary/sets/etc.tgz) = e3f3386182b99812eb3fe35daec274b0da1aaa1c
-SHA512 (NetBSD-6.0/evbarm/binary/sets/etc.tgz) = 46337fca0954acb3b4e0e6af3b6ecd473002d2f482468ac98c62ee7ff7bd84d90ec9c2bb13d29c5ae608e625f3075471af1da22f8a4254d4e8efc9ab8dcff21d
-RMD160 (NetBSD-6.0/evbarm/binary/sets/etc.tgz) = 098b5563540c880d69e0ba9aa793ec9ba6f33a10
-MD5 (NetBSD-6.0/evbarm/binary/sets/etc.tgz) = d3f4709b5264a9a8bd820648330a9653
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-GUMSTIX.tgz) = 8a21525ca51f643747145c529add5e1de487f0fc
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-GUMSTIX.tgz) = f0f9d6e4d8f34b446e511db5a0df6b3d81b20334169caa79790cbbf34a8eaaae0f9da332559b3cb78a00fa05b807b9e3a118474146c69e75d1519c46420003c1
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-GUMSTIX.tgz) = 47002447a76cd76c4a2687923682dff473ec25dc
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-GUMSTIX.tgz) = 1ad356834d9467703647793950ccd9a5
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-CP3100.tgz) = 4baaacdf8b2ae99e945eabb70c425fd5952eca48
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-CP3100.tgz) = 467818af6caa1068437b691fdbc77e11617808fa44e2b3caf3634f7cc8bec1cca7f3a46325825d9427cbfd113eba01a8d3a4d78da832290ff40aa60964c4b42c
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-CP3100.tgz) = b2a46e69e6b4ce2264eb78a2151274796b224dba
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-CP3100.tgz) = 1528b53a9a8a622972ed1e6891535619
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-GEMINI.tgz) = 38ac63a06193c3ad7814b39a11d911da20db6ca4
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-GEMINI.tgz) = c05553408f0fde7a1a428faac350de7f969396f9e8caef6e83a269875743472e52435d6bcb1ad5531f9622c1289aebd419cdb02ad83c92d4797e1b4b952e7fdf
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-GEMINI.tgz) = 5f8d006417864f9609d691652fc03f37f1d12769
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-GEMINI.tgz) = 0767217ae126cf86a65cb17bdbeb884f
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-INTEGRATOR.tgz) = a18100b11fa96e4cd1eb1e36831f14c3d17da04c
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-INTEGRATOR.tgz) = d8bb0260e9e2b687bce84053cb3c88ef6ca3eaf12b79337746e62be94555233c8a1302dc104359b2aa6eb64eac8d633d0640d533688af4c4971a8ea095b96940
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-INTEGRATOR.tgz) = b8b57516a6d2c5e62d57dd9437fde58485989d09
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-INTEGRATOR.tgz) = 7f80ec30a784dddfe53492ecdf78646d
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-HDL_G.tgz) = 6e95c2e313c04d228a65da51f252791fd1476827
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-HDL_G.tgz) = 380861d0bafe812937f004ed00054b6fbcc1dc581fbddf3f745101ec39a57759dbc0a33f0f1e8429a9630febd7ae69e1fc88c75d39c196234260bda58641edd3
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-HDL_G.tgz) = 5262674ba10ad272c62440d4f61034dad9be072d
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-HDL_G.tgz) = 1af966fc2df6c623f4147d3cc648d22d
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-TEAMASA_NPWR.tgz) = 239e37769ab837541fc445e7a74a9bc02c74f0d3
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-TEAMASA_NPWR.tgz) = c3d61466da0066d0a61d1fa3052e54f10c19f2f20fe8342c64f0dc6365d95602e47c1e1722d242219e698c824cb4c6dd823b54915eb98f9c6af8a6119920fd6c
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-TEAMASA_NPWR.tgz) = a4be2875ed76751028c167d6a0c2efecdf3b79d3
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-TEAMASA_NPWR.tgz) = 72220c0d721aae18cf77bc235bb03cfb
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80310.tgz) = dda069ed4e7ad7df46bc23e51a6ef2013af45dc4
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80310.tgz) = 91bd0716398c20a01510a6fe340891d1712da51882e2019bcb7e5852c5b3ac706aa36cc0ebe3f1c1db4b4318624f767118b9ab549a38f253c477b4b25acb84fa
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80310.tgz) = bf180d150abaedea9aad9265bb4965197a587490
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80310.tgz) = c00c7a69803c130c2f7d34fb3d91610e
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80321.tgz) = 2d3162d5072ec3659964ff812b3595ff82830fbb
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80321.tgz) = 199bd6e9a8ee5547f4b589c2172400dc1d8204ff2c75ac021004aecc816f5840b04f3e8408e43d64722e829acf654069a161750b733af045648ab5647071a113
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80321.tgz) = 22d77cc3665909c23cbbd57dda56f412c683b75a
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-IQ80321.tgz) = 2bc4f1eb1a0355fdc0dc886c13c895ab
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-IXM1200.tgz) = eaedad32158dd867e95063f5bb56c66ac8a8f3c3
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-IXM1200.tgz) = a8c1730348c3b3aac15b11c2cb598f6a667b9528748e4361baa33ee7a899aadc43366cab3ac0d6a4305e605287952a8ba6db210f4a15fb3158bded3da4071a67
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-IXM1200.tgz) = 206d96f4304bb755159fb72884977e53bd608c34
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-IXM1200.tgz) = 2e6747257e639f5fe31d23d1834ee9c6
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-MINI2440.tgz) = bf2d80624e97f1964673908ef28ded8091568b21
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-MINI2440.tgz) = 1669f39e3caab537018880d4e93d6010860689f37e60f9d17ceb0a7209442053b1f461b683b6ba201dfd1f0c8641b8650d1561985e8fd47fb80aa3c71d2ee938
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-MINI2440.tgz) = be7274304c9c2bb18fe71bbeb9368719ca155cbb
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-MINI2440.tgz) = 1c1547b85d29dae79c76f4d7ee727b31
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-MV2120.tgz) = 363e695b0fd04709143647a1f07b22a8029c24b6
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-MV2120.tgz) = 99cbcf9b5969385787e852546f3e5685e721c7ff5fb2f898e4d9f29e2bb7640bd08e38cf38eba4cfbfc5d2c1ba3fabcc074328b5ec9bcd13faee233e9a5c10f5
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-MV2120.tgz) = 7dcee51999f376d080942e2f46cb936dc32385b9
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-MV2120.tgz) = 82c6e07c9bb44d8c06d4d4ef7228fc1f
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-RPI.tgz) = d01b81e07470d09296ca9e2e07eff84ef739865d
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-RPI.tgz) = df740174545dd2a34f6692b7a15b329c93bf1496b32b70270e339f91cbd6e9c980d92a4da0ea5a8e825eb39cf6b4514ade0d2c78846128ee424fba595e175748
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-RPI.tgz) = fb98d2b03e66057f4e002505e26af67d23da171b
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-RPI.tgz) = a07be9e2696fa18bae91363005cd09b0
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-SHEEVAPLUG.tgz) = 0f11f8084b40c9f41ef77dc6ae2ec257e819f5c4
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-SHEEVAPLUG.tgz) = 8444ff6b4f85c4a8569d51147c83583b37a1dee134c01bb1991666f02d1fd674d80899ac9d11dbe0457a6a1246028a2898444ef0070367edf66dcdde5118d6e8
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-SHEEVAPLUG.tgz) = 0f00bd92326287b2db8c825f6e7a93c34e8d7c63
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-SHEEVAPLUG.tgz) = 3221d316f1518d5bc0680bf7b1179a4f
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2410.tgz) = 93da07d5884e0c20544d001c5f9fb49893f5055f
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2410.tgz) = 69d65444df4a31c129ac2b2f216d6c0c27e84243f3c1870d0e7f133afe6c95e419f1e907b4a4f0ce05162be24ac149616da16d0f840700b39393bf090e1421f1
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2410.tgz) = 0e515ec91a4186de8cae2243fb079348e91acaab
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2410.tgz) = 6a86551a8997ef91ea427022568a658a
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2800.tgz) = 2cdcb47ec0f5173ef5b2dd3ba319dfe10dad37e9
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2800.tgz) = 106b6c4241c7d4d51f77f2dba13c4977fbf09e8c3b2c4762d9b4de224d04c94a94bd192b89bb3e10a5a52c27141518a0429d09fa39023c9bb59569de7bcc897b
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2800.tgz) = 84e4387b95d8731489c37d13bfd9eb68f323b19b
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-SMDK2800.tgz) = 00ed7a1a639ecc17b6f627bc5e7b2862
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-TISDP2420.tgz) = 11e7dfd918fa822c19633b2c0d7139fe3e5b4cbc
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-TISDP2420.tgz) = f5e0b25240b828e657de6818580bfb5dd47c3d1da978a44f60cbd0fdd86ac824f09922f4ab8ac8af8eb63c32ceb726ce2835498f649828fdae867fca4991a412
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-TISDP2420.tgz) = defb0cc263198d9ab3f0fc3e2702d6a2405de15e
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-TISDP2420.tgz) = 00fd1b9a1cc66dc3eff9fe90f85aca6b
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-TS7200.tgz) = 6e0547db5e16621220bb45150a22b25123022be1
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-TS7200.tgz) = e507e5475501cf9b96d1a7f88d5fd8783f089c756a36c6975bdfa0a33ecec441d1c15c06b8387ad5a0cda0a7ce2e18ab731365f8efef4fe8d615da1dd8f8cf52
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-TS7200.tgz) = 9b9bc14c01328090ec8b855f30690202a2e3e639
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-TS7200.tgz) = 1086e9efedf641d90a2fdef271d69944
-SHA1 (NetBSD-6.0/evbarm/binary/sets/kern-TWINTAIL.tgz) = 6587a6dbfe1479c459d670942e9abed58c2077b8
-SHA512 (NetBSD-6.0/evbarm/binary/sets/kern-TWINTAIL.tgz) = 4f2978dada20c19a2b2a35dcee406fdbced5caad7c46b6c733c2c24b2952202d872f666d2ac139baf5b0ff98092a5509594eb8fb70627a25a268fdefa36f1162
-RMD160 (NetBSD-6.0/evbarm/binary/sets/kern-TWINTAIL.tgz) = 49bee3aea5f5b88b79344836c779d428fcd0d19f
-MD5 (NetBSD-6.0/evbarm/binary/sets/kern-TWINTAIL.tgz) = c70d7c187e58dd8415522bce16bb12de
-SHA1 (NetBSD-6.0/evbarm/binary/sets/modules.tgz) = f9a8894103100366dbd4343aecc6452a35c2fae0
-SHA512 (NetBSD-6.0/evbarm/binary/sets/modules.tgz) = ac2fdf8cc9bff05a5f66749e4dd96a2f0ed4d143acd490e6f8b3826a9b9538918a8fec0045d40f6f418aab80372b23729410997fd81a05f9d9aad27c2dc3589a
-RMD160 (NetBSD-6.0/evbarm/binary/sets/modules.tgz) = 35204da96f307f853b28c487b0b78c478cbe99c6
-MD5 (NetBSD-6.0/evbarm/binary/sets/modules.tgz) = b6886a6197725ed21d53bae4a089fc1d
-SHA1 (NetBSD-6.0/evbarm/binary/sets/tests.tgz) = 971ffc9e0521617dc678b9e9923371af2e9fca64
-SHA512 (NetBSD-6.0/evbarm/binary/sets/tests.tgz) = 55013634b7d0e607d847ef69ea6a72b7f939830caf8e08dc55c78b04a27897490210377bf1c5b1216778d4ffca44145a0fabddd8ffc449acc93f40877a71daea
-RMD160 (NetBSD-6.0/evbarm/binary/sets/tests.tgz) = c9be008f99e4d72d0260139d3ece0db37454d842
-MD5 (NetBSD-6.0/evbarm/binary/sets/tests.tgz) = e1bbc8e25aabbda881eb290efc4b25e2
-SHA1 (NetBSD-6.0/evbarm/binary/sets/text.tgz) = 08a253fdb7a0118ada516bcfd1293100728240c8
-SHA512 (NetBSD-6.0/evbarm/binary/sets/text.tgz) = 41eb29b2f82b18d916d1fa2e858d45fff23f613120c53256c7f7f3dcf7e31ddede9f954a143d9d8c3ec95cd967f46861a1385382634028d61eb0883bebb294b2
-RMD160 (NetBSD-6.0/evbarm/binary/sets/text.tgz) = b2cd2ecb39f44039e90a2465047b5510d0de2eb2
-MD5 (NetBSD-6.0/evbarm/binary/sets/text.tgz) = b5a8566f96d102342467dde0a2ffeeb7
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.symbols.gz) = ea2b03a807cb44578f36e3f34d58a0435434f421
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.symbols.gz) = f8d97b757b0d0d82f5e4ff14afa6abd1d41ed35e3c97684ade36a0dbb277cfcb55a6f9ef656b1983507247b07f164ecb407d0973d57d1533b2a1e1364ccd51ce
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.symbols.gz) = 33c2edc444787b5477a459d6426d80ec2ac8c9c1
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.symbols.gz) = b06f95b94e9fc3ff03d7c02485d9226e
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.bin.gz) = 72839e1353d343d2ba5e449273aea745a980cb50
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.bin.gz) = 9f8019273ef9b3f46a70e6faa97a580e6ae1d0d820974de24033c55a729fff2d2780d5096964673f97e26b3af86835c5087fd0b09a345e15c29403bc1f467c3d
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.bin.gz) = 81b228fe339897de8d47c2cf5555c39eb891193a
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.bin.gz) = 662f1773c969157b42f70b72bd72c9f8
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.gz) = 257f98f33f8429d27486ea526b045f31cc4b9ab0
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.gz) = b2b2aff23b6be4c84ef07f1c3ac698f9554a13a54c8fd49ee12b0e175d09da2f116799260083e6a87a8b4e761a4a66ad8d3f02fb6fcec9f3f4b928271cea12a2
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.gz) = 0f5a2cdc5951921440a7147912e722a481c1360d
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.gz) = 117ff4be0dd35bb5cfaff3414c27a3f1
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.srec.gz) = 1fa80c74c4b2f44a9db4f1d5e0be62a7fd6f68e3
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.srec.gz) = 9d291a02fc808baaa9ffe3b259239d64758aa394b6fd782b4220ab47eec1106a33e9972d06ac07fbc1632923b12a9dee9574bfacf5a2dcc096490aedebaa7309
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.srec.gz) = cf28c82c673429f391bcfc37493f07489ab8e260
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-ADI_BRH_INSTALL.srec.gz) = 6a743321a49a841146309dd71a2b7782
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.symbols.gz) = 1d15f8fd20b400aac41fda396b615742593f14c2
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.symbols.gz) = 8a2ef21088d568841b740d0c316f513a98ac3f45f1c0d994dc199b4e2529836da832b8409368295b4b326de2f4defdef34f1829e3e4fb7217b39c858ab0eb09b
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.symbols.gz) = 2202821e57d5506b266456b70f18ff6a1506487e
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.symbols.gz) = 026ab51e016618bcc9f1f1bf363492ce
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.bin.gz) = feeb79b4d6334a0f6a87ca2c63d195e7039caae7
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.bin.gz) = f76735623ac3295690df2eabeefeb39c8cd3e5d85fd09833f9e58b8aa1bbec65f462e8a1edd683a75e5ac2188a50e3ef9f574b00dcbe6f7ffb0c02c4aaaafe26
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.bin.gz) = 5344ba62b8815bff63195fb12c5804194c5b74f7
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.bin.gz) = 1bf8ae796a35caa01e0332fb0c193e2c
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.gz) = d1d88ea80333147d4b73f6c20d5f0cf9af362acf
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.gz) = e525b3d43fe6ff0d7ffe83e546b80cdc1892140e3dad8cc409312a544f9ea111869e085fdfb736a1dde3d029d39e84443f06f0175d28a5b21a1a2967c82d904b
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.gz) = bae57fad021b76fc1a9e9c796b9b6df84b3a8814
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.gz) = eb56d7e3dbbfffd56cdd5b995690e1d8
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.srec.gz) = b0b4f43f1f4f8bcd5ca1a9a0d2877fdce3397998
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.srec.gz) = 50c8e9381dfff94d56c7330b217ab079fd3daaa77935dea557d321eca5e5ca59866e59b59b9ac498b0b4a71410dd776c8068f9ee2ee3ed646a39029ba1d6e9da
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.srec.gz) = 9c88faf5c7de521d9fa0be09a4d9b3b9206a2dcf
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-CP3100_INSTALL.srec.gz) = 558c67513391c3825047d26f08d48997
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.bin.gz) = 7e8c3f055b239755fecc8aa462e54b8b89a9e8c9
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.bin.gz) = 6977a4d96f1b1cb16ccfe4b15678b40b6627b01385fe6961487817f7ebf84d470277fad37c53ea7bb48e7c19e7b37dd8be3152a6e0274e6f8d6bee69bbb7feab
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.bin.gz) = 28fee55b727cc25187df3981d6fbe2bfa64b9e4c
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.bin.gz) = ecb5118258da0bdb24ec8ab9ac6faa0c
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.gz) = 0af690fd4f7fa383ddca7ee5f63bdc698d6ec5a3
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.gz) = 7be43506576a17872997db65441e436b51f1fe3bcc9c42eeea4fd19809f8d3f61d2cb9027ad6cc7e2a26fa3261482b9ff1b7e00878b5bc18ba4e7130919e8dc9
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.gz) = 46c65905cec0fc54bacb408d57af312598bf8502
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.gz) = 28ef106d2bffe72fe879c19ef7f25741
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.srec.gz) = f3646a6435283a79f0580692798694d31d8b672b
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.srec.gz) = 4b85ad5c44a4076715d43f51aa94e33ddf7f1e6645c7dbbd490ec8d8b305766f3e6a6facdc5c87a20be3865a827e531810e288eeab2184155d83cbc062a0e14a
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.srec.gz) = 7f87fafe296706dae3a75441b4f6fe26f52cace7
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.srec.gz) = b81ffbbeb626dde373c9c54e4cb15b03
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.symbols.gz) = 0ac81f8038480354e6fafbfba5da86ab333f85e7
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.symbols.gz) = 116b9be7c9e3135d1d1847e084a10e5bb2dc2a95b4810a2e268fee9e6e5b3a5f157b2f34b94a2e03256d959b2bb10d01760347398dc81bda5d6ce64aeac1c2a1
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.symbols.gz) = 4cd6b326352d9398035a2c7eb157c34604da6709
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.symbols.gz) = 938ba4475e1668e7fa02cd727e237339
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.symbols.gz) = 9634080097f581271b2e0aa1bc2f87b10c7c57f1
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.symbols.gz) = fb85279a670488e7e8b83c91188bf075363ab8278335c1d3a06411effe829cd8a47cfd269aed5e9a598414fbeb56165eb0ad27550f6f6838d2c9ae9847525e99
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.symbols.gz) = 81c648d753322e87068041c7bdc30dea925ec2ce
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GEMINI_INSTALL.symbols.gz) = e4b9a0b3e230fb2cb6a6e2ad3162b1f7
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.bin.gz) = 5c60fde2ead5db357827530b6b899e3236fbf814
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.bin.gz) = 953fda76c9d47d8af51e578049e98a5f169cf141a057ff1933bccec43ce89b419182f533fd105462af3c09a0a843e8e766f96d2ebcce4cf404166d80ab6b1f08
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.bin.gz) = 34e148a900e77f07aa63f0fbbf181bcbc79e2026
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.bin.gz) = 60aed2122f98e633e78e0f19a3724881
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.gz) = d94e8dcfc14fd6928b3d2c784cb38f0f55b009c3
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.gz) = 9ef172a0aabcffae7abe5312415da7d407975905484f69ffe73dda2389f0230a39ab2d03e9ca42005db662ca2f6060a4a6ed0db4b5cbf23676a35af38d23a416
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.gz) = bd13d39ee7366ba6ab2a1ee1b6094322a5b894fa
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.gz) = 9c16afcb3ce11d9923247d310c23875b
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.srec.gz) = 380390e6eba24b258a8eed603561f05e2a1cdfd6
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.srec.gz) = 519683b9ee12d3dcce26182bd8a46c27d9f6285debe96df2b88d46d0eff372deb2342a1823216da2dd0c28f90732858e7e8a4d9d6305d5e0b82b5345dce92112
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.srec.gz) = ad5c85bb6d641596e2b0ae7dbdb6f235b758546f
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.srec.gz) = e2612b861cab60aa64008ab686f570bd
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.symbols.gz) = 91f9c530da00c48d4b22b7fd98916ba4528f77a8
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.symbols.gz) = cefcbae785c5fb72ef5548c16a8ae083a5be19fd27f386c1eaa723c7cd296dbf4c4e774150bf3017a5ae52eecff0aef125f7ebce87f73fd930a019759e0ce7a8
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.symbols.gz) = e91be60bcee907ee6259c16e54ce1e3e79f7937b
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-GUMSTIX_INSTALL.symbols.gz) = 088c9eeabf75406c634a15511972829e
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.bin.gz) = 3fb32f0f8c981cf7d0012870d9c5019f06b844b9
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.bin.gz) = 7b7ecc024c36ffe8d57ffb7f53f25e9a3aaa203605ef955c3d94b47627bdf63cb0ac49a8ab230f5f7d5c07c4a56aca94787e861b381af4c84acf48c8b6040b4e
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.bin.gz) = f0faa1b8b1d48e6c736959211a1581221e92de24
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.bin.gz) = 66e3c14d2f927cd248e0b07882892fdf
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.gz) = 90ef61bc7a306fae7f41e20a6c615e37b7d51bb1
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.gz) = 98bcba4e6a5ea6260f42e44b78010bf5b02475a12c198c5898a6e4342bdbfb0207a5b7ee17ebb7cda0859057abe0e5442a41e7fed2c9b78b566e67c7897c21c1
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.gz) = a0fb23b82b04fcd0817a38d5b1b2da620bf23ccf
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.gz) = 546a0231797a48e08fcba615fbb5dc5c
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.srec.gz) = d234b22bf784c64b812dcf9afeba9f106c969e08
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.srec.gz) = f7f78ffeb87a42943c8271cc0bb7d9a3805569fe0cc75f62359ea827cd44ae48f425bdecae341f1a947a10f35df32ce12155105f333b97c765d48db2b1f4c0f7
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.srec.gz) = 218875a0a61876726f5790366ba2748acaf63996
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-INTEGRATOR_INSTALL.srec.gz) = 63e3b095ce7b3512ab0fcdc562cff952
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.bin.gz) = 9b24a0420c1b2b406fd2b6d8fc7f25a3dca984ca
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.bin.gz) = 5a46d91f646c354c5bf39ae4c15cf45b2ea205328f859a3006bfef815a40b71109b748e6efe91b85ce692663db36c2b6f08e6a43b4ee843c5d1dbb2eb095a7ac
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.bin.gz) = 4a6cb6eb7612c34d1b3c68ab7cb56fe32e45b7f4
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.bin.gz) = 86823cc4ac5a09992501014bf88c877b
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.gz) = a4c5e90d5a9fc6c4b127fd2ba479b27228b64f98
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.gz) = 98f9d8a9bb4c6b29be7002dc4aba375b89a7e98d23fe77634c26efcf4bfec3bec46917718f4c245a9ad8a480db0205224bf0946962ad5b748e04f2b170645344
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.gz) = c9756d9b19051c3f34a748eeca4fc283784f205c
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.gz) = edc01ffccbf9a6db1d1b40878927b492
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.srec.gz) = 1d2d7369ea182d3cbe36b6cf0929bd26e48e7799
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.srec.gz) = 2164f0f36fbdf41d2fb37ca8a19beffcfdbcfee8a5629350e28a94a105e9b9707fa44b99cf122c102e073084d09905a75a69a8da2f263882e89e9192d66c232b
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.srec.gz) = 91147de829c8e594800eb713e55330fb2160c062
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.srec.gz) = 1ac108b4534ab6529420b5e6eb4596ee
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.symbols.gz) = a594571814d5fd54f060a324f961c8728207414c
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.symbols.gz) = 6a55dbba559e4675123270036ef2b05d877463c0101628e50d6f84d12035784a76e010e469840b46cf56291e5d27fa5569457cf83fe7d5a5f128ef6777d4b0fa
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.symbols.gz) = 54553929ec55ca2d3e1a34163f79019ce8d21f68
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80310_INSTALL.symbols.gz) = 796f55a92c0f4a29a920251d51a90d9d
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.bin.gz) = 8667913b1247f23e940f945fc1d3c6d7b42e3bc1
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.bin.gz) = 30df01772cc961320c0600225caad50145a9f84b9fa5689ed61c59b136c4489e4f6ce3f1075e53c46335f955ed2dd94e662ba2674c56a0171f33e3ace70af2c8
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.bin.gz) = b6c98b6c38bfb10e36bf119c49749cd5c6be20b0
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.bin.gz) = 9a3b14a1e64592301beaa6c7581e5f3f
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.gz) = e619f80715bb394b1fe67cc05f45cf0e076fc3d5
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.gz) = b131081790eb4e2a82ac2cbd9726b8239f8ec91e25567606411bbcb4c9cb0676f8f15d1daca89623e29d6045fb4e6b6edc40ec7bff4d0646cd06313c8a827672
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.gz) = f791654aa8cf1ee8d9d71aef03ac0f904345465f
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.gz) = 42b4d81e7d76bf98705e97927f1a6fed
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.srec.gz) = 418c6e4fdae62a9dffc0cc52300b3308d4c39726
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.srec.gz) = c6025b5ca7555b4870026cf2a9b23a000bf3f3bdac4a20347593f431062ccfa8b43c29dd1caf17f95787ef685066509e409164c302fcbb40cc18307fec372442
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.srec.gz) = fcaa8176ac524a456a5e75dfcffadbeafc133187
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.srec.gz) = 0674c1b44f421bd847dddac9e87e1221
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.symbols.gz) = 579e6ecfc351e91ba0bcf36918bd3fb781b7c1e7
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.symbols.gz) = 34074f57b8eeca79deb3f2a070ea824be2fddae7e8b5a2d8bedab2b4dd4796f2eb1baab06cdf95b53da4b43cbd8e8fa873dc0986325282dea9902ffe9fe521da
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.symbols.gz) = 139e713201e03fa17e31803834d898d1ef636bb6
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-IQ80321_INSTALL.symbols.gz) = d08f0319e5ccb9d142f20f81a1a4d0f9
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.bin.gz) = eb490e7ec36f92c871934f2cd7c1fcb2339ad2a7
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.bin.gz) = 7be26fc8e01142f873d0e2ca89a414bb4d2dd332dabfec1f7cd126ba2eaf0d803abde4f62c627b583fe2a57b93bd1669fc669666185ce1d5cdbeb47b88690ca6
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.bin.gz) = a93d35c0251e92ac7562cc6138419fefb6fca84b
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.bin.gz) = dc54e455b762156bdfd6a0fb2d14fe2f
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.gz) = 2567dce09ac1764f78ec074e4f5644a87ac83c8c
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.gz) = 6beb220906314c4ac93a058a4994104ec2dccefcca4e8c2a0be6d3399536b4765e49294b275dacfe20e39c7cccd81b88c9521b2b273835001cc6b131237b20d2
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.gz) = bc87bf5b540e6847689016b2301ad48aa637a3eb
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.gz) = c96abcd45f88d52e5826c9419e895e49
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.srec.gz) = 82575c4f3f6344ff9fcd848f30364fd1b65eed82
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.srec.gz) = f1c6e41724db95eefe005e2a4f3defa81b7d8319521ad2897fb976cc8fd31af9f9399bb0df03e8b910d72baf25384112efad9699a111c6a0ebc2e8d79dc63f72
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.srec.gz) = 82c356d5a3916d82b941cfca334f55586b30805b
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.srec.gz) = 16ff2a11bc97e2bddfa4ecda023be897
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.symbols.gz) = a8cf19b83ab6b0aa48e6486a2ef5717c14025933
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.symbols.gz) = 3c9919130d4470ff778d77119b4f17132002de6229a1d0f4f2024e1bbe8e68de7cfe93a4da18835c111dad1de50bbc4e5e0e50a89e71757acc2da888afcf944a
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.symbols.gz) = 53339f2e886137c722353c7e4641fb79fb4160c9
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-MINI2440_INSTALL.symbols.gz) = 2125d332a50f2382dc9ea2fa1c76fff6
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.bin.gz) = 7f7533adb7f744376eda30bed953e0c24925a7ac
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.bin.gz) = 6df01180c26dea9f40e427414375f872d65be05f1541d887fedf8d98f22e3f98354ca15aa058c1cba0d0e4d30974b37787855c1a9ee36f7b702ad42c31ef69ab
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.bin.gz) = 1c6192b2841123a6a7b34f46530a49cf731fe8b0
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.bin.gz) = 7080e515fcdbe3d4d976da0bd0db1356
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.gz) = 009c609c69eb87be8129cb8cca61732493771053
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.gz) = 1aef3bb8e1f66280e2478e207618ef125b02fee796f1d31bc9c8ab5e28f132bd5aa5c6e78cf1dd2e63a72cfe814264db394c74a2c1f04ae139dbd3d592bca8ce
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.gz) = 6b7f00ce3de221960905acde44c93679d12318b0
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.gz) = cb78419cf4b8862517c4cdb83f09edcb
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.srec.gz) = 5405155f29eab526e4b489e156a3a6a84b694c04
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.srec.gz) = e4ddb650bed5716c2a6070a88104ead0119e3e41a6ad61d0a1ab944966fd5e29d3c17b83061940c81788583d833b3b90e2b3fca30a2291bb7e99be7acfc52eb4
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.srec.gz) = d28c777e9f79b74d39d9cebeb55582bf6554bdf4
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.srec.gz) = e33527c137440f91dc481372e55b5153
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.symbols.gz) = 0adc4d2b9af7fed43f2cb2a6d461b0b67dca64ff
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.symbols.gz) = fac69e001c5383808c41901f250e53267cee4df0738cf2fda17675057f397d33fd2be817b4235ba4ff47c3ad4c667388fe94e935372702729e38a39d95932bf1
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.symbols.gz) = 08cb50f087ee2c1edcb6bb8b0a10fd9436ee5291
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TEAMASA_NPWR_INSTALL.symbols.gz) = 303fa88bab1f84ce1e5e7392b63d335f
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.bin.gz) = 6d96ba7627a743040710559958052fe5ad516e07
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.bin.gz) = c8980e5a5fcbf6d16a94b273537d0b7e684d46621d46cb52b1c2672e67c864bc4651a09fed96356e441d209f57c5eba10696d9d82a3aba7bca24781ef6e6d570
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.bin.gz) = 8faf196aecee5eab9fe5a256daf1bdeee5f485e0
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.bin.gz) = fa021fd649cc68d99ed50414c562937e
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.gz) = 7084ab7948465cd7fb832a191991166d460bcbe9
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.gz) = a6e2dd918a3965573e3417e24984ff5d4c546a9bade8d7b68a930e695a76243aa4acb89eaede1ad8ea07280a836fbdc3200b7cade29486e1a1783734ad3164aa
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.gz) = eb9e46f17f5a0d0d296fcf3983fc7cac086d139d
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.gz) = ad30409880e74a4c9aa9be2f0cd67ba4
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.srec.gz) = 5dce945d53df7aa098712e966a08d8c4a11d5615
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.srec.gz) = 13270d86a94b74829fdd691cd97b8afbebf397fd68d9e8ecc8dcce611b3eca79666e5da303d75ad0af56f762b65d3d487ef1317685538b6962ff5b482e57c954
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.srec.gz) = dbb6b76ac38227dc2b5e0dcf35dbbc187a0f9cec
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.srec.gz) = 573eddbddcc0e213758ee25fd7f3d6e0
-SHA1 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.symbols.gz) = 7a5bcaaa2847b816c0568f28647ee07a18650c38
-SHA512 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.symbols.gz) = e7fa9c30cef40ab421ed36421f9c92bac2fb21c88077d4dd176a55b3b82cb94ff1e912b35d6504e5d37ca737378da3eae0f64e7721a023e7af596a037f0970a0
-RMD160 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.symbols.gz) = dbe42d8b278149bae03d553e4d8a2676544b53ba
-MD5 (NetBSD-6.0/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.symbols.gz) = 28d969c46d89d77b04fdc532621a9c5b
-SHA1 (NetBSD-6.0/evbarm/installation/bootmini2440) = 322711938832b81edf3a30de085fe84c118fffdd
-SHA512 (NetBSD-6.0/evbarm/installation/bootmini2440) = f985790660b66ab4843a2e938e67bb7b1856e6acfee877e00bcadaf945cae7f85dd5f5ea2557f331d142c2f79ff129ac505a9f8ac276650ed49ae86b202cdd1f
-RMD160 (NetBSD-6.0/evbarm/installation/bootmini2440) = 6549e1c02eec982d3bfbd42317bc0c49bd7a3fcc
-MD5 (NetBSD-6.0/evbarm/installation/bootmini2440) = ab71c605b7165325bc2efffbf8366e01
-SHA1 (NetBSD-6.0/evbarm/INSTALL.html) = 364e208c39e0aa0c1a873702629363049749555b
-SHA512 (NetBSD-6.0/evbarm/INSTALL.html) = 0d23a02d74624eceee1b8908f49ca677ab4c260725798614faf67cfcf396aa0862aaf5296ab68315b3a1b110a998cd9fc08f36630aa3202ffb18db915e6bc5cf
-RMD160 (NetBSD-6.0/evbarm/INSTALL.html) = 5e46ad234a6311ea55f157da0978fd0ca4543ee1
-MD5 (NetBSD-6.0/evbarm/INSTALL.html) = 4ddc104e853a1b0a9ff34bdeffdb849a
-SHA1 (NetBSD-6.0/evbarm/INSTALL.more) = 49005be72eacdfd5e58240ea40c272362f1794ca
-SHA512 (NetBSD-6.0/evbarm/INSTALL.more) = 29b0240cd5e8b957fd6f0cb26858f856f2ca1e5bc664d7617138519d38788f442bd0e2045f506eb49b6fb07200e3251694679c7e9079e152e022e4c36d69339c
-RMD160 (NetBSD-6.0/evbarm/INSTALL.more) = b2227c9abf8c42edad582429b388b46292b2b642
-MD5 (NetBSD-6.0/evbarm/INSTALL.more) = 8f7edc27634f260c5216ce2ac1c7ab20
-SHA1 (NetBSD-6.0/evbarm/INSTALL.ps) = be244573aa70f6ea8bd6afef50d3129e95ecb232
-SHA512 (NetBSD-6.0/evbarm/INSTALL.ps) = b4dcdf490b1e2fdfb72a21fbd00922eef14da81665f56e69d5fce4458222a3108c27fc793a1507e9f6f3b3555c236899f06863282b3a0dcf061ddd81451e0f82
-RMD160 (NetBSD-6.0/evbarm/INSTALL.ps) = 38340ef793c940f555c637fb63ed603e2813b6b0
-MD5 (NetBSD-6.0/evbarm/INSTALL.ps) = 0702cfb1c18290c2f6b3990ec2b9b838
-SHA1 (NetBSD-6.0/evbarm/INSTALL.txt) = 84d0cf406199e9e160201946ef76c5544f859094
-SHA512 (NetBSD-6.0/evbarm/INSTALL.txt) = 779245d5eac9f6aad487d0ef8c09ad8ed1ccd1ab6b315d5436d681422a1ca23376304d9f5f36e0010d38a26947c2d67b214f7fe06207b52ec4ca1d1abf996280
-RMD160 (NetBSD-6.0/evbarm/INSTALL.txt) = f21886bd1f37f1557a890ce294fc842a4a9322ba
-MD5 (NetBSD-6.0/evbarm/INSTALL.txt) = 4e8f849ebf04f5af7feb401bd8b828ac
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA32.gz) = 837f5c347644ad20116892b91a170bd9a177cf25
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA32.gz) = 83ef6ec1fea23841a6a03d5f91d0c00f8dae56d78276b04dc56f3be1121950c8b21cdc3b4f580929f85e0b7dca9f5635cbc248cd9bdf018bd019837953165796
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA32.gz) = da9f38ccb4f1a09ce9567d148115538eedddfd64
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA32.gz) = 94e33f6853b4a1d9253b01310a9d31e8
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA64.gz) = 1194bf50c6a2a1cccfd7017ec100e18840cab60a
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA64.gz) = 05939d55299eb8c98f89c0cced1f090fc47568c81be3c4aaf32325ce4a087b44b1c6945bb8b9a12384ae588e9dfb1ad0ca1c701e2f0603a672bf3ea1d2bad1d0
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA64.gz) = ceecace87ff5c72a8bf0551d03e7f24297c8210e
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-MALTA64.gz) = f70db6b8696d6db6538471a0389aba6a
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX32.gz) = 50baddbb54cecc95e5aacae73100b35b1a50808a
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX32.gz) = 937b7632d22c4e22bdacdad4bb473b1c4537cccb35f97d1bb08b80d64c6228a410f59310ba336d19e62e0bf38f3ccb9c5e1c27aed8d769ef66657de06070b273
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX32.gz) = 97d67324ca36d259e51a80f89b3ff8c32aeb0936
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX32.gz) = 2c17d4f86050689342b031332bae427b
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX64.gz) = 1e1c1a9cd9c7bedace03b3c25a736014d7053adf
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX64.gz) = dd0689962b451e442a48a35c35f426d4428aad93a22e6e2d33dd0033125eeb8e763ed31ee13410a6f7b7d337a46c351a736605adf49e301e09df14096fffbf41
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX64.gz) = c94021afffc7e21001cd3f045063b725fcbbdb96
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/kernel/netbsd-XLSATX64.gz) = 7ed50990347095eced85286bac3894ad
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA32.tgz) = 8aef48b2afd3a5c2daaf9298b1377e5fb48a4775
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA32.tgz) = 769777c570e41cef669cadd1caca734ca55f71382656b3d229bf32811e22fcac10c3258032e79ad190d9e34b4a4168269b0a44352209f9321d3b3d18e1d920ef
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA32.tgz) = 27fd132ecb4aef492c8194a598641b0d57df788f
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA32.tgz) = 547ed14fd7607348ac12d50d6e142625
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/base.tgz) = 321d0a48e96415413f6c76fe94cfae0b763c0ab4
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/base.tgz) = e3306d01022a478928ebf33894603aa4788983b58b73beb1cdd1592cc5d545bb3eefcc07ef381f7be24099bf5100914d65f5575c9ccc43279332972d5e84c01c
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/base.tgz) = 822520b0721dbc6ff7402acf65a7078df4ee495b
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/base.tgz) = 838db1b3837f00c46b9b7f8e2ceddee5
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/comp.tgz) = 9e1125bb9734db8e861c085c3f4baeefed5bc5ca
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/comp.tgz) = 405ffdb54d1ad4f0cb56b07ade8ef1cf26235526e143f62622870e9733d9f860405519b355129bfad7ebe659c56358c73dcc941bf0554a89ef210a70e69c2855
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/comp.tgz) = 13b1ab9f477f0d22afd1dc11d7a0ce04ed87e247
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/comp.tgz) = 880a15da9d452aba11a9c3e4b8c32c44
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/etc.tgz) = 793af95b8423250427980e55e1b40e7d2d946dd7
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/etc.tgz) = 9c9dafc30b85ced01a296fa4464bed9c8bbed77b359307a637e236646880d93aa3b17c857423f26c286732686b00855131a359295fbb22c4f4d4271aaf21fd23
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/etc.tgz) = dc21febaa97b3f196ddf788541e93081919ac05d
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/etc.tgz) = affff84911016dc75d8dcc556ed1cd90
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/games.tgz) = 6a9922b70c13cccb7e2c3b2d2b4f63f4d6ba8b83
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/games.tgz) = e17192d20cebcb6583f76e3badf382c2734bdccb596b5a7c7104c28bd6d96419a59a642c4eac1e246d821d8cdf211e8b00aeb7043a439edfa6cf9e5554441007
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/games.tgz) = f93c4992616fc210ae24c58b64f8607ca6f3d1af
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/games.tgz) = 2186988f1072dc9be8a8e1ea77bc1906
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA64.tgz) = 6cff22a0f2e961617cd4eaf3bb571a7b7f4845a0
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA64.tgz) = 05b431e02e4e858f79103bc1950c4da7fc87d476d46479a8f0c2a9850b96391d8a55cedc0fa3b47da4857d7f91a9acacc08369e2121a7d47af3bda5712ad333f
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA64.tgz) = e1048547f5851837f476010b3c5866f527542465
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-MALTA64.tgz) = 3ccf1d8db71de9c182c81d99689aab8d
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX32.tgz) = 4400d1601558ff59a7d90028bd91e00c4b67e230
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX32.tgz) = a16e8b5d34e07c97fdda6b09e41a67d48fcf56b4276e9e52c2a2d8ce1eac5d21abb542afb67991f7b2bf87261c8134f8e522d59375ccd251f4e853d3ed877b71
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX32.tgz) = a7ea06c9ce95d00548c7dc9a3403f873d3f42749
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX32.tgz) = a6c542f79813324f5ddaf80a9a12a531
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX64.tgz) = 47cc48be2b1edf22d48fb3d45c2ebcf1e6b84655
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX64.tgz) = ce9378b66f327c84e004d075e0033e195c1e649acc7f668d154b5608fa71070cfed74b1eedea404cead8c92a9f9f332fb5f2407a14d80175d4f2e7f3115962d7
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX64.tgz) = 64602c29c9cad9767bdc771464f766d4c4bc7a14
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/kern-XLSATX64.tgz) = f55ccc413a2546e5db4c66b38095dfb2
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/modules.tgz) = 150d99ebadd4c626bf48d9dd772584df18d0f161
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/modules.tgz) = eb3e15f4dd50d6eb59ffec96245ca440abdc2427f7cd14f6405ce979f9ee13b5d40ed30d0fc544cd92e5c8dd49b2cd033cafa44f32baef8c434734665c7b35d2
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/modules.tgz) = 74a564f4270f8b8df9c0f207512ccbf02cd4436e
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/modules.tgz) = 6f2c6d66540b3994a5400f1b3a7c0e06
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/tests.tgz) = 607a8a23fb7447a1bd6363feb446cdfc7110ac7f
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/tests.tgz) = babcea43b781105dea81af3797bce6f77bbf2766a28104c45aa7f43952d0a0a7e3c981927d4b2745ed46b290ff4db7d43b5a2620b82d7185a55e06156604432f
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/tests.tgz) = 90dc0855b2b85584cc08f07d55645bd98f04b40b
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/tests.tgz) = c0dc4879f5bf2e13462fe11f1afb9755
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/text.tgz) = a38aef75824fe9c86579b8a320ec645e1079224d
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/text.tgz) = 39f42cbd084867ba177e3f3c7eda0ae19040eac2ee4dca991caa172211ba499081f720f16511b967fe6e4529f78e446cf9cf8ab89b595bca41aff3e7017b2028
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/text.tgz) = af58fb15683143196193ee0ad443a9fc94b6f8b7
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/text.tgz) = 8716d1b4d2cb02c015e20e87650021ed
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xbase.tgz) = f22a560c757bc506a118ce9803f68e148fbcf5f8
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xbase.tgz) = 5ee7c1db10aaf6a67fe6e9026057266340e901a2a4042d126862bb3ebc1b26dc824a3d47febaf2c38738b10e563feb903c1020ef98dd34a34ed6ab1811e1dd0a
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xbase.tgz) = 4dd1d30eed29fad5ad00d08f8655850ba2966beb
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xbase.tgz) = 83fe206984459147b084ce31f5712ac5
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xcomp.tgz) = 6a62de4e61ca7fb51120a2d949f0c6a76728c795
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xcomp.tgz) = 1a4d6159f2afb79ea54d7b50515d33585ac70a41da0dce13790d9acc1bc83636eedf83284aa76c4b9be2d51e25000fcb000842d4491edc1f0032e6e68f591359
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xcomp.tgz) = b5d253b8ed963d2aa4542c177199f8bf56a7413f
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xcomp.tgz) = 9ab19bfd18fe8afea9ec8b987eb3f745
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xetc.tgz) = b3ca1c7e85d0832091fc391717c914889f745a13
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xetc.tgz) = e386fa04d66afe2b4817c6e77d6ae351e7a10265099395285e15ff5fb8c41d169de511b3bdc71d9b8fd144a0153262b068b6b837b846310e255bfea1a06ac5e6
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xetc.tgz) = d7cd1c13d547ec0fe4ad59ee92be9499cbeb53ed
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xetc.tgz) = 8165fb3d8f4f335f32f391d6f6ba414c
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xfont.tgz) = c3b40e7a439d60c27022fc1cea5e58fff68f2da3
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xfont.tgz) = 5a7e564dc9cc41d3704722a461ffe7ada8011510e3db08c2a209afc462a69986261ec02d41e792f1e1a305300f4d23216cb07c231c461df5edb2fb54916d2438
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xfont.tgz) = 03066eeaa22fac20cb69be43939f870a313519d2
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xfont.tgz) = 46e16e5288c250f4f2394bf709df039b
-SHA1 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xserver.tgz) = 13d61af721933a9484ea722fcf5a151900b07d55
-SHA512 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xserver.tgz) = 1372c13478ca7da2c5ba2b3d56f2f09f2bd764f2c345a9e4b8c2fa81fd101d557d53b16637b7644676431cc57b481d22d7f702c1a24d7c6456c04b75422f9485
-RMD160 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xserver.tgz) = 3cc8603545553cf13c0e41525d4f71df2f04a243
-MD5 (NetBSD-6.0/evbmips-mips64eb/binary/sets/xserver.tgz) = 599284f9e42a94928802db5b36d6c8db
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.srec.gz) = f94948277528ab8356fbcb1f447ea3f88da0dbff
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.srec.gz) = 37025250657daad79c15d79ade2f1e815b551bb9541d852e0e0b208b6964b2e7bcff4eab477ff9dc8c62b23a061681c6076684f41d50ffac2b9ca1c9b85eb657
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.srec.gz) = e0f5ead94d76d0131e9b6351a1b32066c0e37004
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.srec.gz) = f07bb28b2742e51e8a130a1633813342
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.gz) = ce135463449caf04fe5915edf2689e53f7d34450
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.gz) = e30a6963cdee29fc634232bad314c1093df462a1fc2751908ff1f6118165b1f4cbc7fa3fb780c7483b26dbed2339f562d75618ed355388ca4a7ea8da182f5718
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.gz) = 726d74693693f22e261de851efc11f489af83d5e
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.gz) = cf0519b0dc9ab365ee268ee0cf667cd3
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 7d61c5ea450b2348bbf829f17801d1444142030a
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.symbols.gz) = be8fadc2f971b5ceae719fe76f121a1d394826c0509d0052eb681ec3398e8944a8866c45ed213bc1a07ccc0306ede8ec3c28c1415a26bfc92721fe8a90ec8c86
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 8be481d57e200549bddd24d27e640fc192758aa8
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 23dc546c19890b5bfe2981a4be93cf61
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.gz) = 774d5ac21ea9f3b0d356a7de041c89afedd85cb4
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.gz) = 228797b395c498e531f359c59d8a79f336138923e95881c1506c9b1a772865b6a7df96be8a05e62a8f3a3b791e208173e35bc6ac1ad29d8c62b388620d3bb828
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.gz) = d84a8c78f5f81c897066771fabb70dd447d423ab
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.gz) = 9392b5ff6a21a0f043f4ba6e9ff14a00
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.srec.gz) = 028bf1fb8a8e7f1733eecb45b7016b387660558c
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.srec.gz) = c7d3178f2dc591e1d39e8e04aaae780cdd38c190d850d0b71a0c69eca7a8dc29b8adb300e106a236e9fbd7ea9e85dc070bc5ae6baf6bc742aff4dbafca91c00e
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.srec.gz) = b4f76a19a3119f6b35830db195d0db3b40b962d7
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.srec.gz) = 6f1c87fa36192f6cce9fe900576de781
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 05ebd0d64d73f452fbc31f9a7945fc1503bfa23d
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 839eafde2ed98b6be776ad75e591c23a295aae726a2d384fa1c2f9e52333f1d5ba14c21473ad5d7c51098608d04b055cc163e743485556ac30c75a5a913f0422
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 6f1dbafcaf7ca5df8c47a61b5f6d8805a209d7eb
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_MALTA64.symbols.gz) = cebaa3e1af8c79ccb42a92f25140c653
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.gz) = 039e0a1c46bd768a34bd4522d2523018429e6987
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.gz) = 4914b5675a4b3858c3feee1eed653a75f0708b84c12d80a82715502fc9e2761eef8d23735ccdff6c596a93fa3e01ee69dcdc39cd44b5e3876722134ee90ef31b
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.gz) = c0cb5df60249fca57ac322b2cb8fcc6f90645698
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.gz) = ee03b9d28419f05275ee663b8b9d0ac9
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.srec.gz) = e831083d34e0200ed793aee4a890a80f518e1ab1
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.srec.gz) = 7cd35c5f5ed1ee14dbabfa9c7d89a6ed592e37b66676c1a523422d24830a28507afea99d6408dbe436d59233703257684a9cc765370c98dc23de78f3931b50c3
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.srec.gz) = e6de2239f84cf7cacf8ae6b1bb62326483a1c62e
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.srec.gz) = d7de63125741840ff89a6dff9fda38c8
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 5aa1511398191686462abbd5e20ab6e6b56fb325
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = bd4c5f4b969c6c5bbb5d424c21430a3c1cbdc1f6d40a60842402ffe2d812393e0556ef6b7fade839a117a0ec601359127fd2957d35bf7468217c9adcaca53e70
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 6a2fd527f96c49423f58f6f8363e0582e2b894e9
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = d0654f9677e051fc34fed0d81a27e528
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.gz) = 39ea7d6f681981f11fbdd9e63473e4dd69cc2f9c
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.gz) = 41378a129484896d4598dcfd29b1f65cc462c5746d4793e973b7912ad10cf3f1e487701f4d3267ba7615bb6fbe9390a356f1d89146e8f90d7bc8aa57ae575dec
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.gz) = cd77d4e08b77ede06fdcacf53cac8360b115b11d
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.gz) = d736cdad40ba2ae3beba484dd5a5ce05
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.srec.gz) = a2fd46154978cde95b379f110407c52ae0c688e1
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.srec.gz) = c778ee1c88dc9aed20d7113233f43660258d1f7616e611d8e8df413b9db1e73039fe422a9ddc8c02039baea5bf5434f660fed57148f13ee641e339f9277f2c51
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.srec.gz) = e98d08b85f6aae19176ad570f061f4ac14c42629
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.srec.gz) = c2de85181edf54b18fbe495d65faf32a
-SHA1 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 2808091cbd1d32e9f38e7c38e7f2a0aa8c66e617
-SHA512 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 7c4157a809dec6f292fafd1fa21744932e8b0add59d2f3ea62c4536d31e14c6b8a24633354cb4918dd38fc88695d373d356dda7e93dfb77f83c6a6fcf6e70b54
-RMD160 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = a31fb2125afada861428f3b416218cef7a641caf
-MD5 (NetBSD-6.0/evbmips-mips64eb/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = d727b2cd38e49bed46bba3a1d33f9b97
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-GDIUM64.gz) = 938493a6f165b0a66e87d0ced332116b3e5fa1e7
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-GDIUM64.gz) = 05906bce297394f48bddff8ea2a92f527ca5a673c1ddad6ee776eaeeb5298c562e01b533288add57bf39239c9cb02e6e8f3569c4430b658bf99b0bac61245aaf
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-GDIUM64.gz) = a2d803c0597759fcaebb669d3f4ccb7d008d2e9b
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-GDIUM64.gz) = e1f26f59ce4ff562a5c8e6f8bd511a0b
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-LOONGSON.gz) = b717b1950f7e2ee2745b74e32c9f6cfc7d7ca15a
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-LOONGSON.gz) = 47916c7dc402df96876307fe31e21de43b5dcd6a57425d2454ba44593c03b0852b6dc1c5822880590a14a91717e7478314e6ac0a099004596f4d256ba3427e4b
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-LOONGSON.gz) = a1c0e2c2ea412fa4a49fce8cc1a366d9d373a5d0
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-LOONGSON.gz) = 7da6b1ffa558b1b211fe3702c5837e54
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA32.gz) = 7c79ae79c6672c73ac03b88dab24103a01a86658
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA32.gz) = de76f96e25bb798dfc28c0e186676833392c47a47e9eaa9c0883f9ac43f89946addd61ebfd3c91a9556eee4bb218f483053513190242abe472ddc79131224081
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA32.gz) = 325db86c0e99e01418f70575d75c3285ad586bad
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA32.gz) = 67b5fcff9d18ad156d0c028ab16ba081
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA64.gz) = 8c7904ebdd030a94458f13ac7c11df832929cc86
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA64.gz) = a51547232434584769c0a8ea108bff1425e5e96f1989224b3420863ebeded4a3cb272b6873e3fe860aef3658982bcde844d86fcb46d79ce647b6969e6758c978
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA64.gz) = 656bc08ab196ab9e4638804a5ca840327a8a31a4
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-MALTA64.gz) = 8cad946d5e2a395f26d8f18eba137ada
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-P5064-64.gz) = a228a6982bb8c5cf468860e09fd9b17b4307f356
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-P5064-64.gz) = db4187479c550a71c23f9bde6cc8dc50d2eb758293b293c7444a786ab30becbae9e150c12ef3fd55a42df1b88efdb937a7fffc48457c20c5441b082e0c0e2745
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-P5064-64.gz) = 8d9bc3f9d1ea60e3322fac87a3c9ccd43a54055d
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-P5064-64.gz) = c318ae2623b38a290cce71191c6c6afd
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX32.gz) = 2ef72f56c819a2bc0fd4d48e463161ebef9551f2
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX32.gz) = 4b80ebf478d77d91205ab2d89d2459317c4b61bbae18646c2c201fb4ba1ee2978f5be3a87ad33c83d9b139d3ffa077a4bcb3e315c16fb68f116b802dd2217637
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX32.gz) = b5a20d970f5ad8c177c6244b1e527ea04c705cce
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX32.gz) = 34ceee3acf4435335a43c594dceff98e
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX64.gz) = 5bf585188ba90ab0231e99247967eacfff520cc8
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX64.gz) = 20e39f09067084fccb2587a05a3820e50816fb3f097e8e89cb07091c937fe97aa27593948fa3466f9a5d6835a8bd1bfe31268a2414c6c8694fb9fac156e68f98
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX64.gz) = 96ebcf3117c2a1f60b50ba1de3852898083393d4
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/kernel/netbsd-XLSATX64.gz) = 335908a4efd612fbc51487db37af3eb0
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-GDIUM64.tgz) = a09a36dad31ab7a766bcddea3fb08807d93819bd
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-GDIUM64.tgz) = e3876e7f4164e117ada834e6769fd3357d144fe36779a197573a8ea735821150fbc6c4b6c2b9ea917b14b23a795e4db7e069cb8e121ac3fe9ae5e0296400d065
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-GDIUM64.tgz) = 945ea08a5fdad4d8ac8504212712b40aa01d1443
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-GDIUM64.tgz) = 2fcaffaee00d469cb7f2756fdcfd2fa6
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/base.tgz) = e7550ddcf5edc7c3c27f53b7e6b4636f744108c7
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/base.tgz) = 0096eb300e8a71093cbe3e84830ff048af73e85cbbad1986390b8838c50ab6bd63cdc201062514aa63529c2043e1a2b2428cb2b50fa2bcb9dfd4ed11e42febdc
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/base.tgz) = a5509e8f5a4e5aadcf057710489fa4105dc4dcbc
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/base.tgz) = 76f45332e5fae1c999dba2da97f92834
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/comp.tgz) = 2475e5bc61cb7084e06f111d6e24e3ef4527ab0e
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/comp.tgz) = 5ca83f2b42cd3145d3fa5c88e72dec3509f52f63bd0e5ac26f752a18065473ea298bc0e88cb0b954a06d3d7eba5a9afdee3087feb06079e9c76cd5a0ae3a6759
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/comp.tgz) = 8bf71a3552e3e9388c85d5426530e58d2ff15f9f
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/comp.tgz) = e8dcb0d4b7b5acbf8f4603be69f4e9b1
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/etc.tgz) = 106b0102ae77486072a61db71016443e4a63af9e
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/etc.tgz) = 386948f2aa4dd140bf17c9aa0a8bd0b41096603497dbb9792454fa3772724312a3a2ddd3e69a7b1a710e6339f799b5174b16f8f91ef123ebde548eb47aee4e90
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/etc.tgz) = c704f1a292af8fbfe37a9a61654f8e8873b6cf49
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/etc.tgz) = ea16b2ab565706b8038b459e0519936e
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/games.tgz) = fbb547d701d95fa7c9fedb8ce1616fa73dc0a962
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/games.tgz) = 9b0c4338c3227f974305624f0ba8756836f156f3d3f9bbb1ec3188ca9ec2de344d5ff3f8b9969180e2c871cc0b09b12b9e6311e33ca548d59f4596a04224f14e
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/games.tgz) = ae8ec9dca5729ee4203ff86e10ebb16379ccf5f5
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/games.tgz) = 18b0244267ae2ea671632562ebf493c2
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-LOONGSON.tgz) = 8da37bef5b86301e6e5741969aaab713752c2866
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-LOONGSON.tgz) = be868f49e960bdee048cc1a717d17563c081afdf2a258007312f306f14470159943877ef29d0c3c783b32682074c299aeb2b48a7623bdc4af2adaf82ee9b52e1
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-LOONGSON.tgz) = 10f65602b7dab9305df83c26e670221efe1b452c
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-LOONGSON.tgz) = caffb25555770c6474b23e6cd028e82e
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA32.tgz) = 7e5d386cee62920ecd932af45ff4a854234edc8a
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA32.tgz) = f5e9bb4886260c3eb0b18e29999047b1f39692be5cd5cbeb58638604efae408f167cbccb81d2fc6c601f20515955b48035113cc2cb2e6d30088cd9750fa64465
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA32.tgz) = e0a36f2148ed78c4eda1c26e5ef0045ff6b97e22
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA32.tgz) = 3ccd62f53f80b0eabb9baa2a29a691ac
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA64.tgz) = 225382c44befe15c46b05f2f052718bd80dd9a7d
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA64.tgz) = 1c1a13c0b73098d14468cf12d7744f79696773698adf94e622afd95e436560fc4934d3b02390187647a9d97effbed9162542149fbe06628cf38aff197faaafd6
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA64.tgz) = e5ae37af03461f04dc6550141e4c2301dce51ff2
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-MALTA64.tgz) = 672129c4f8f0315c9b374ac5651f82cc
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-P5064-64.tgz) = a41b86f2235180b688882c8eb2959edcb48c81ca
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-P5064-64.tgz) = 9db6c584144a249006a671894e010fa0674e62e6abc60d43441462d1f1478bf4b1f9c6d9b46f14a1e9ffc3f7641bc206f5ed95c90b405e57f3f40e54d74aec92
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-P5064-64.tgz) = a7f59b498f286aeffe614b4ae43461d8a859f758
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-P5064-64.tgz) = 5dc76b6c8b5b49b757dd4a5dfa370420
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX32.tgz) = 9cdf4993097b04929dbad4b76c5bbf0cd6796c7d
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX32.tgz) = 171bcfbb92a1c1ca96dc14707604998eb4c5760179e9781da9b0ad18ad9695ea44d49c5cdd9ac9250a7a60e08b336daefa9a6efc2f172c9a70d10417e4643b0d
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX32.tgz) = a1a517153943866b07fb5850644d1079721fd131
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX32.tgz) = f68253bb53367876e463884c2a8eaabf
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX64.tgz) = 73dcbbb4ffbd263a8ab68a5144b16cda35e14272
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX64.tgz) = bee28f3a052cad0a8624729675f28d42847b7545234f98e141c180e851a3f2052236606c512f1a7515c7ba115417eb8e8a9ceba2224a1c5915ea44f25cd99abb
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX64.tgz) = ba17bd15f5e3b131ed77687817b58f8a1730232c
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/kern-XLSATX64.tgz) = 0a2ea3efdd4858019a64cf67994cbc36
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/modules.tgz) = 4ce7dd5ecba275042042fc283bf93453fc57b2fa
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/modules.tgz) = b90e1c87a5ad7981bf51e9fd33b2614d6d092c10c6d67a242ebd814276dd116ac660d9801ad02a5b9b09ce58e3c2aca802322c97ea73c9e270f88d1162e7ae24
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/modules.tgz) = 73d91a2e36f2ec78fc3aa1f2c2af0d2a2d9174a8
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/modules.tgz) = ead882dfd50f9421b51a5fc5deb0151e
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/tests.tgz) = 441100d5b3275b38c206eeb86a9153084f37e613
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/tests.tgz) = e3f33662a577ad2ec975b432424b5d2c2b3b2b742d5e2ce37043cb1820ba225b185638c5c88a34fe05af9fa0083db918074cbb8f091354c35e8f2fd121f93dea
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/tests.tgz) = 64e119a7b1ed5eec0151ebe0ac8c6d2f362e8dc0
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/tests.tgz) = 0d6eedfa2f9aae4c8f0055ca1a358c66
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/text.tgz) = b7f32924a9d2c54824fb19b1bb3158b2996a16d1
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/text.tgz) = 00b6a2831c439c9a5bb07023fecbd7ac99285b2f08a2eb2ba00ace828eaa4cb5fdbd12c339170b9235713d9936683837214389ebfeb52c9bc4be07bcc0df0e15
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/text.tgz) = 6f72bbbef2e15bc63b99ae7419a6a68f3a82b7e5
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/text.tgz) = ec982ff4007c1082127af777e978bc85
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xbase.tgz) = 2e87de8a350d32c3529222c0195e8b89a03f1192
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xbase.tgz) = 65ba278254dcef89f1cc464487921995413a5400cf0a3388eb987416486f96f510c91569b6c3145d687e05eedc93be79bf54374c67fb33ffc57eb2b89902d096
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xbase.tgz) = 7acd24fa398777d99977da6d6080c89ab8a75ef3
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xbase.tgz) = 5535460ce0de58bbbd1aa49741edc463
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xcomp.tgz) = 70a07fcea399d1032660b185c2d9ac6486da8fbc
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xcomp.tgz) = a803322c59fef449066d1d2e42beec42587e40f6134f5c62d475440a01fbf93a91aa9bfae96b89eb6394e2f20d925fb85dc23754bf8600feb40cc98a9beb844e
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xcomp.tgz) = 12a13cd5fa3a63ddc24e4f4bfc6d35ce99dad31d
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xcomp.tgz) = 0b455b3722b1429e0a134317b8dbdea2
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xetc.tgz) = a95c9eb9995be3639417ed3098f7ef36baa0d729
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xetc.tgz) = be4544652b01b9161ba2f27461ed723378712d0b34058ba5a16de3cc366a5b551f0e8e7b740404eebbee7ae656e7745281b7d329068bb1aedf8f757ed06e9f98
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xetc.tgz) = b7e1bac15f5d4dda393d5e07e2b26d3c3877a01d
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xetc.tgz) = ee2771391cc229fb9bea94f455e841e4
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xfont.tgz) = b985c741b487ae0e65ca36e318c558c147d1eca5
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xfont.tgz) = 3da2aa9b1cb7906f515d0c02d67a8aa994a0022189dab11428a28040f57f5ae3cfb758cc7676837aca3479bfcc1e1551afe592417b59ad79b80a6392d6f34929
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xfont.tgz) = bccdaaa5821219a03bd67a57320311b265a19e94
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xfont.tgz) = 60eaa14a01f682577ab5b1774fefd7b8
-SHA1 (NetBSD-6.0/evbmips-mips64el/binary/sets/xserver.tgz) = 30134e060bc2ad1df81dfb637ec9d7e35bbc4932
-SHA512 (NetBSD-6.0/evbmips-mips64el/binary/sets/xserver.tgz) = 94e7986f96ec8b41653db1b4c05d0237c614678b43f1a52ab3b40c5627ffea2c7e91ae3e154391b964dc36edbd60aaed767427bd50eae5306beb0fead97c0346
-RMD160 (NetBSD-6.0/evbmips-mips64el/binary/sets/xserver.tgz) = 2423334e389526cac76e76fa0fa38fd671e0d3c2
-MD5 (NetBSD-6.0/evbmips-mips64el/binary/sets/xserver.tgz) = 508453785f0150d7115610f4ab1f0ae9
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.srec.gz) = 3d7cbad15200cb0e18ed529e8d65768503bd0a96
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.srec.gz) = c549dc552ae2b10bd3d8b6b716d6a107e5ef6988a49b2ae1292b40608d217cafa8bbb77974c3e8fe9291820bd534b0713c1136a09c173c282384f2805cabad1c
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.srec.gz) = eb53ea3f18593ad0a8d23ab92b8d78e590709cae
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.srec.gz) = 6c0fbfaa9cafb5799820bf14e057a5fe
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.gz) = 5f370ee3290556f0df9346c1c279b4cd239815bd
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.gz) = 8a7770a9dca3bd6bb59525c7f5340c9347d7c315e6f54c719d5f46312e0ff25d1fd6ba0e31d881ee680d904534a71f7258c49c16e706a46cb6ff0ada537630fc
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.gz) = ed1b7878ae50846b27db943ff3f82d0be2e4bd05
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.gz) = d935eea2ed1da5225fd8af96482ecc08
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.symbols.gz) = 0f65b3f9550c07786d711dfa98c426f3601e0f01
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.symbols.gz) = b37c854b5a20cd45da6e1fb4132a0fc8bf1234ff08294168249a3a38e8463a9c52fc9863af80787c10ae62e1bb17be087cab605478f5fb29dd615f8168ea9180
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.symbols.gz) = 1365f99730e4ab317d1d35e73f2eb5592680ece6
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_LOONGSON.symbols.gz) = af18fc0829c787d47e6cdc7e6146413f
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.gz) = 24b04245cb3bb8808c2643f6efa74677e18425c9
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.gz) = 4d76662f4aaa9fbdb3bc3e807eb716804f4ac070e8b0e6def5e9c4c816ed456894bad40a3b51ff8f68a21b05bee08de02e7fb1ee1ece8e625884dbb2bccd9109
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.gz) = cdff1dcb0aecc09f926915055769081acab42201
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.gz) = 06cca864f41f90c5f0bd6d95a57ecc5c
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.srec.gz) = 5a432e451fb73617b8377b4f479a6eaf611bac29
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.srec.gz) = 3f92a16819d8452f7d105e19d803985832f89e1d6c09b067d6ffe4522c7e924707d9411535ccf838cdec3b7fd1fa17cd7cfbb6e2d3bd369690dcd9094f5e10f3
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.srec.gz) = 71a1e5b455df4458e1bb4ec9d45b4043bebc5788
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.srec.gz) = 98534235eaeb7626a485458779a0e6a8
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 2f3ed468ae1a3a4082bfd5412bc11ee8d8cb90f9
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.symbols.gz) = fc3b4ac13b3c951037e30132d9178dd79635cb78adea2b97046ef6d8a8486bf9b12e43d26897f32f7db967fddd048c177acbb5585b573bc2b9c80374b59c133d
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.symbols.gz) = 5e863f2e95a8623056dc32ea5ba0265876f102df
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA32.symbols.gz) = e84090937754b1d91357b759679a2ae4
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.gz) = 3e9f23c9e3f15de38a7e0908f0253d1f23e49a43
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.gz) = 57cf422b28f5442c105e23fae81119e993b543e3eb2c344ab5334e8edb1018c54f3b39245d1bc4091b8de4e28fe78e357dfef31bfa51de174342ba881ef9cf45
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.gz) = 9950fb85a0100463810fee9d0ab79d4297e94401
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.gz) = 571361834195d0048cfb4c2bb13faf10
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.srec.gz) = 03a6a6428275c9f01f514031f5c288739a081850
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.srec.gz) = 4165164e3830c5dd897107c64cd6dcbb27edc31e32bf6cf7305fe74024c467a81e703ed1be94071c62cf467eab89ecd66b3b72876fc1d8fece4792dbb8384255
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.srec.gz) = 68586dd9c3e823a26a5439907f088772a5939b88
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.srec.gz) = 37ec696958709fadbfe7e08fcac3bb57
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.symbols.gz) = bdc6c366da273e056df2ea2bd9d92813b61f5b36
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 574c80f478e5f87eae6602a8e8b6d52df19061199f2e78d05bc6e662daca5f9b6aef26dd4b543d24e557b78aa2d5f0a5e80aa9cdfca5fbcdfc8a4da7a84b95d0
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 4f8ba01f1ba53c8b8230a974d7c8aa45a9667915
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_MALTA64.symbols.gz) = 5e726ecc87a4406b10e5c11cbf745a7e
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.gz) = a21c899aa2389958474b94a057e7356da840589f
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.gz) = d092b4d17356ed34a9a7a79838b76a487c35d99b26671f1ddfadb85db810bda74b3db64f7734e30114429cd8fad87f13c04ca462c6d3bb56dc1f78855d7b9def
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.gz) = ae46da84fdb8a17e60c91ef88049989eed666a96
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.gz) = 1ec7762cd142ac3eacfad76ebd7f018d
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.srec.gz) = b76ec124d80dbda9a425bd14737ff88105d4c053
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.srec.gz) = eb446974d31976ddac9313a0a45ffc084dea1bfff75d18e6544f16cab3333dcaf6e62cff59b0cf88070985c1ab7a4c0285cdd0b54eb75d73f538d45a80be9256
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.srec.gz) = 1eae8b53f9ad020c3a39d67502e74888059125f1
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.srec.gz) = 3c2a22221dab7153f7eb41daec3a4de3
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 0be09076adaccfe13864e71c9f1ed8085a515401
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 7bd72d9d584872ca346e2ee6eeebc8e8fd06a7e655acf621ad1b849b440ff66a33bf71650738a074732845c2bde24acb08e1b457e08abde3234d2972da370773
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = cfc81eef00d46e0c1deea04c9364f64e87d637db
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX32.symbols.gz) = 11e04b25355c8c60ba97c142c21ba8f3
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.gz) = a68f5f892312208526869378614a6c38f0ce7ac1
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.gz) = 7b298f7fe80f77e2283c407af4736c643e3b0d0710d43bbe809dda43660344caa948ebb07727ec80cf19065eb1a30ef24c68d0249d2cbc9598833c14f36a04fb
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.gz) = 431a3a8bf7ea9aa86b7c82075a2c6272ea9f4938
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.gz) = d1cfbf1aea636ec7f9b36760eea32d08
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.srec.gz) = e766bb842b698937ab7252c0bf6f325f1ec2c7b6
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.srec.gz) = 832e277c2366f3379f104fe68aa927b3c7358c40df62f393419ae9f2fe30a989a532f4d4cac8dd821ea07c5707246329990e64ded734cad1c4e755a59cb59402
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.srec.gz) = 44af060baa21f3c09fa3e283cde72a7171f6e6f2
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.srec.gz) = 058b4dc450b1e2e5fc14136e4ccf3743
-SHA1 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 5130e72edc460e5bc620f9101c6b260db4417ef3
-SHA512 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 53360173909b40e40ac018fa0f5211a74970d3429c85c182f59a6ee4ce782f54d707f2d6205d9bb5f4fd5b100b074babec12bbaf178f74b867cfba5964aa2ec2
-RMD160 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = db94d2cc9bfc2eb2fd44e87d47be4b273aa7533e
-MD5 (NetBSD-6.0/evbmips-mips64el/installation/netbsd-INSTALL_XLSATX64.symbols.gz) = 37e4e9464364847ad2327d6352019047
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = c8b43df25bfc2e9171d6ddaa73b436f63a9c7085
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = 73d80744cb6154342f5c3d36f8849c2a9686c1318fea913b840eb97e3177f1b225f4cb9178a9e15b4cadae35579c2258b38d180d1aedfb0e9ffa00543b1cd8e6
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = c8e8dd4c41e4e88fd7bc0c34420df32a00a941b6
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = 53e030127285e17b67640e9fd98af1a6
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-ALCHEMY.gz) = 9f738766737db8cb0f2404c4952bb75cbf407669
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-ALCHEMY.gz) = 1298e944b4d8495905e6649476cb8e1bf49719abf2d2fb3ae55f5e1416a2af3234310047926fc261264bb12b8c40d09159a42cd978297cd6ee4197249a34561e
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-ALCHEMY.gz) = 53f5c1646d7811b99d2a6bade48712647802264e
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-ALCHEMY.gz) = 7315ee909933e50ada51ab5652ad0d2f
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DB120.gz) = ff83b1a41048bcef21a723c356d5e762d1ae697f
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DB120.gz) = 400430bfab26962e450f73640ca169fdf4f748ff34c63dac1edaab893f58a3494a81ecefa807bd80cdf846213d004dcedeeb0b57e785436488c26a66c06ed685
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DB120.gz) = aa36f1124c77777325cf30badccc02f2353e9065
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DB120.gz) = 8e6dfcd4eaa37591d2648cfbead5b650
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1500.gz) = 5e4747aafb2621b40c0adb250613225090d8f219
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1500.gz) = a24d3164c5f9eac497b338e99fd04881e9fb3ea1e25844c4d9927383f306b9d0fe16e26f61e33ca7fcc47be9e6b1a04b2cc6b397f51187e49c5683714ee4880f
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1500.gz) = c90b133fd12b1327cbf8cd0229df26d3b71774dd
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1500.gz) = b691ce9b6e0e31b0945fb7ff041e336d
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1550.gz) = 62ac90542124d3b65582b7c5667e545fbd7b1145
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1550.gz) = 29622cc0d471a80ab095fda13f2d06ac32d4757d2a2ce4c4c7a54b490b6445ee86c702007de54ac9fe81515566d7eca3805f2d1c4d842a49d8c752df4d09099c
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1550.gz) = b624724146136eaf312d9be3cead0eb8f55445bc
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-DBAU1550.gz) = 0d30e656a06c9c5ab86c9097e08b2ca8
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz) = 83ac7456a68f04283e651f472160025d9af2b256
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz) = 1c36d9ef350ae385688a4300af725d1b2ccc94ca3f6eded04d54ca2dcfceb40d5ef8db88610428051598e7a1504340ab86bfda25d96bfc3b454aa74f0f35ece7
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz) = 59acc8c3c660bf2256966b58cce5df78cc6a4da3
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-MALTA.gz) = a64c723ecc8ff566fc859d155bf288a5
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-RB433UAH.gz) = 8af25f51ed2e87eaa234c4bf43a0c8adefa3c267
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-RB433UAH.gz) = ecfff13379b5e6a657670f69aec3ce471a593505e0f6284f80c0b4f3c4c903bc9bb7d9cf0c9385e0b0f5288cc141bf5c21e56250ae17107f53ca38152fc59a13
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-RB433UAH.gz) = 38d8fcad12171bb0209eaef94e137483d6d3f5e5
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/kernel/netbsd-RB433UAH.gz) = da92ce6119755ebd89fe27c24f452aea
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xcomp.tgz) = c8f5ff5ea9f9bbe231f92d8b7f3bfcbd2897069f
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xcomp.tgz) = c7590075195019078b68ec5f87e36479ae2e7b7749c523df4ef21c9d881c343cda9f5c2bba897dd313329a76fe5c18e920d92827878d98ce08a7dc776352cd02
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xcomp.tgz) = bc60e267cb6e11b4a7305f8b7074084e179e0ff5
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xcomp.tgz) = 8e58ee51667def3bd015f79769c0d932
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xfont.tgz) = c551bd13179b9508c2e3a7e19cec323e8ba21844
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xfont.tgz) = 764527f2f3f4686759fcae3fd093f4e00f34e1249994126221a6f9afe73d4cf8ddfbe8b8311798da2ed38c52466a44bb26ea08ad5aab1c08eebcc9019b4223f7
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xfont.tgz) = b3a365bedf8b4a20f3920d0e33b9a42fce288953
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xfont.tgz) = adac8939da213a0195cc1d351f979199
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-ALCHEMY.tgz) = 0adc8f742c596217127185e8f9e4db43896d9299
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-ALCHEMY.tgz) = 35865aa4e39ecbf9c8f4e48ac85b804b571b1488de729cbbc5663deec75bdbf90a229ce99473975ea46715d502442497a596fa35ed89e5d3602c3b1221db6676
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-ALCHEMY.tgz) = 8a4fea3817d615408966528475869669efc69701
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-ALCHEMY.tgz) = 94e9d6a99aa8ad762dfd71d5c2c5a410
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/base.tgz) = 152709728189dfceee8db96c9b793229d80514ca
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/base.tgz) = fab7d3d262ebc5bff7c6edd891b967dc10f4c274b33da21a874ef874ccd1f1917afef30cccc27efce5869296e9bcec95584fd6109a48abd94b958b231a5e2fbe
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/base.tgz) = e52f8333537d524fd1580d0b07c9c63414fe680b
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/base.tgz) = b2dae13bf91a2929948ee84429598111
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/comp.tgz) = b04647e2ea51827ceff965350bff9290cb4e1da7
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/comp.tgz) = 15b6bda11ff6d85a0e1696a2fbd174d1b060e606f52e7447d6c25a48de41f03e99e8601f098c6604608e3a056096c8b17ea6865802db353a018860a3c563d387
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/comp.tgz) = 0ca46bc47c48ba36c8e56b9131abd9d61d5c7ae6
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/comp.tgz) = 5917382e90e63ec66e687546760a8532
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/etc.tgz) = e55b4d17ca25e42c4a0652a40106d64eda9f8096
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/etc.tgz) = e6286e75f5ec6591a53162c332be61b976e4e0386d429aa675cce295ed8fdb90d62287b244eecd0e0341235a637bbd593f50164dc8f589ac4f969991d2a3f0f9
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/etc.tgz) = b45e18e794d732b11dc8eb3ef733c2dfdbd0155a
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/etc.tgz) = 2a4d24ad39ee26ad3bf2a6c9d86381a2
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1500.tgz) = d6c5b3f1074c70e13e1388d68a1932cc11b6a3ff
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1500.tgz) = 6ed5b668ff52a75aeadbf11b1096822b97f01af47d8b6b171343feab7e10258cc02b04e151f37995bc85cf6a7c562c4404181c8484a3aa3d593ba9a2c934cd04
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1500.tgz) = 3f5750e9b576ed3e05624052d5f69103eb32c61d
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1500.tgz) = a4513305f6d3e69cc52c47047d89de2a
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DB120.tgz) = 2f08fca9d13f265f4d560740a55bebf8b115dc37
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DB120.tgz) = a4a2c6e1711da7562520ee189131e499aa65ec114f713cccd7ccb94f55d9e845a253607ec2219284df1422ba5492a0f24004b8088601dc807aaa2a925e14bcab
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DB120.tgz) = 018c1be32ee04724b86fa2ea173adbe460f63e50
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DB120.tgz) = d89deab24227d2179a680db2c9477357
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1550.tgz) = efd95e1f98f8ebc28f7621e5696b7ac148091aa4
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1550.tgz) = c67276ab70bdfef9c8a9b9ace43ae950a686aa630f0bd11fb06c533cc463faf41ad1bb89d5a6f2cd6d4d04914ada697da20ec19924720aeeb4d5d1282393cad6
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1550.tgz) = d91cfd72640e117cf952ea3978af6ad106fbed88
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-DBAU1550.tgz) = 1e914a5acbbc55fdab0a70d059171d99
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-MALTA.tgz) = a5da116a64f3b9e840cd568391f7f755a1ca3f14
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-MALTA.tgz) = aef284a501e6b2cd16293a5689c5c798dc6bfdc0879fe2cf212b43a4f9d33e9f7dc863f7020c6eda08c8958e713412e5b531e0af799c4695d327c4b66206030e
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-MALTA.tgz) = ed3afb30019e8ac95a9a7348c9099827de561edc
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-MALTA.tgz) = c85bd4c68c3458f9581c45a240f5e1ab
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-RB433UAH.tgz) = 64f38dca64142a0a8426e216cb8edd0884551603
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-RB433UAH.tgz) = b0904e89e80ee6b16f9a97a36974ac5e8a4a7ca8dda9e5f4b27de218fd824d9515ad446574337139aab25fb290c6a93a177f4ddbae7b7a92c8daf5586c87f727
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-RB433UAH.tgz) = b5e20de5b71f3f0880f714b49e0c39a54d19736e
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/kern-RB433UAH.tgz) = 687ac6220a984373b976c5e73cf23240
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/modules.tgz) = f46c0e5db2b77d898161bf6e3ebac55b05413047
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/modules.tgz) = 04dfd0379e10923c47b740c5ceed84f69beecf5a72f581885e5c4dddcf9d241499578e6b7a435a119ef8be74909878620fdb700e6638ae119da59c635883aae7
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/modules.tgz) = 1b674a6cc66d8c1362d66acc69f99f1e0fd70bd9
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/modules.tgz) = a3500877590cea3b09db38130581d10d
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/tests.tgz) = c0a06d6671f0141559bfc80c076fe6f0b2d87003
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/tests.tgz) = 114f7f7e299614296fe2b272a172b9c1d77da42dfe09064c6d9fe9a6450322a38a3c1fc403348aa536d2039884899200591b59d653a3a7d89d22ea22b1750b29
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/tests.tgz) = 4833a7fb848401385159dd129da45d96a9a7b180
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/tests.tgz) = fb54298f8aa3423bcf7bc43b3fea488e
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/text.tgz) = 91921b0be07535e75e97288e49ee2bc0b3c9949b
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/text.tgz) = 336ae450c79b99cf2f2c64a9b378125904c2b7f2d2b6de8eb0f8cd5a2b735cc7a55fe69b599daed3e3e8ef9c51bc6044d994e6dcda85adba659204b92724b814
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/text.tgz) = 3e1e8f989f25749485c0ce9471dedc141cb73726
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/text.tgz) = ff542bf96a0884faa5df5e30d2ac2ff5
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xbase.tgz) = 6c4272f0ef26a4f32eb393bb479f62b2b7142bc5
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xbase.tgz) = 568a69f2077f011b98792eb1f71a8b7bf11251f42ca8a082559fd3d836a6afcb7eb05e77331b1cd8b996731c4fddd4ddc8abc6b82cc3c4d9460827e52dde424b
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xbase.tgz) = 4bcb45e19d2da3ccb065977c5cbdf640144afb8f
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xbase.tgz) = f7cc64d9cdf50d1c85923eb835bc6dcd
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xetc.tgz) = 19444f8d1799d782bc72d2684588b1479ee5976b
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xetc.tgz) = 0075efc99fa5c63bfce8806d5bc083e3e68bb6e9dc885b382353dff0bf55b85a27608318deeeb504833cc5abcedd5bacb45b943bc3beba42e202d08ed368962d
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xetc.tgz) = 32b296247a2f343a49473e7d54987c6d87229a38
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xetc.tgz) = 7d63fd2d8fdbb123792d61e4fa3ece2f
-SHA1 (NetBSD-6.0/evbmips-mipseb/binary/sets/xserver.tgz) = 2f38506d78bb7be30d5cd8719f3c137dc28b7f92
-SHA512 (NetBSD-6.0/evbmips-mipseb/binary/sets/xserver.tgz) = 3364dfa7db892eb0c1c92ff50c1e321687300a2cb572da25e55ff501d958201fc3f2d916681778de0879ea20cb31ccf30766038863e0b97e4ca52365b5dcbf51
-RMD160 (NetBSD-6.0/evbmips-mipseb/binary/sets/xserver.tgz) = 9a26ea480f7ff2ce07a648e0004dcabcadb8432e
-MD5 (NetBSD-6.0/evbmips-mipseb/binary/sets/xserver.tgz) = 00b808e0f27ff7924b22f2c74b1f7121
-SHA1 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.srec.gz) = a05b722b902910be1bda3a582d3ebc850048ced1
-SHA512 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.srec.gz) = fcde1c3163e2973f213350595dd38d202524e4f125f14ff48b68f9d569f10788c8796123e051ae72e64b786452f60ac7079ae59390333b63252a8991ee1a1786
-RMD160 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.srec.gz) = 2d4a3c604fec21934e0bf2c4e987c8978aa8bce3
-MD5 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.srec.gz) = ecd58d8ad5bf459ed7022e72580b9942
-SHA1 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.gz) = fde4c37b9543ae150854af55c5c34243e1316c05
-SHA512 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.gz) = b72c9f6516e3ff03e64c6598e153893d6beb5c64997488571bf3aa4547f2f251b78721fb4a23892470c8b352b0ba3a6c95f2e0c8e450918533ed1b9cbebf90ef
-RMD160 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.gz) = c37277dcb3eff20bf03c9319d4a6766d1f869225
-MD5 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.gz) = d6f55d866675b4e51178d7c7daeb7b6c
-SHA1 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.symbols.gz) = baff18cdf467ce42a54eb77e9774c524c9ba347d
-SHA512 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.symbols.gz) = 530df115006eef8bf3f3ea78c1bc1b8a37e90dc460fc8c3cfbeb70422bcb0a9ef52fd116b5b9ae3a9eec83fe60cd3a32fa0933ac0589e2c68c831978e7e988b7
-RMD160 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.symbols.gz) = e4ed20740fecd9b75d635d99567d3b67f5ae5cf6
-MD5 (NetBSD-6.0/evbmips-mipseb/installation/netbsd-INSTALL_MALTA.symbols.gz) = 6c54f00839d4980e95252520ce7a3814
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = 134fb77bafabb2f5cdc53713cedd145c6695b5c2
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = f21c2b6185b6ddfcca9f1873239ca3855165898d537f4ceb6fec7818ae157ac95b143f559c77be261d4fa3c427e0579d5ecdcdd6047944d0faa94681b8375c16
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = 003133387cb76ab3a8afcb59683cd6d117e4dd0a
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-aumac0-ALCHEMY.gz) = c99637f4bab91983011482c5cd8f84e7
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-ALCHEMY.gz) = 87f20bbd047d0c7b793c4ad98ecb01128565e2c6
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-ALCHEMY.gz) = 25a0f40f69c8fa908265a4e757cb64c074f47442b3f9e4d6051e7024042d2685b4e01bf3b0081d603bd633523b8f28c3570b93f5886a4021986b03131175854c
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-ALCHEMY.gz) = 4f0ded0dec635ab37d6e43e5198a3eebb9d5432f
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-ALCHEMY.gz) = 886795f8573d66ada3b5bf8f8443cbc4
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-CPMBR1400.gz) = f90b68d7d1fb37b69896657f4060f0dc1c196951
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-CPMBR1400.gz) = a639799a0431ab22cc468f7168358416ff6095a6015cfd783406b24a6e62f1dc38a978c2c4875cef999654c3f0fa2f8cdadaed5d0283fa05bc56db9ff89d4c68
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-CPMBR1400.gz) = 5265e5e99e360048b07d997d3bf0f73b806f905c
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-CPMBR1400.gz) = 5447c227f2147295b74c3cd9a62efa60
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1500.gz) = c298c37feb22bee4f641ede6c29b82f55a15fb43
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1500.gz) = 9ac3727e8f9777042fe7aab1613e910da72d07fd5b8277349f2b538f620f6ac34cfe5972fa72a91275cf99ce0e98e062bd559b169eab6cf9700d0065262d2d98
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1500.gz) = 45fbbb985b1bd77331e018f10df8d95d17c12af1
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1500.gz) = 3391b8ea4799c856e260069f7a4a0761
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1550.gz) = 2a32d5bda59467bf957d1dba8f4c716c553436bc
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1550.gz) = f5b499dd62317cda4483cc70f65e56d7a8a6be0095dfa1a3836158b6615066237ecc13b3ca66a11545a47a938ec2f2c54c27c8613d16f931ba0b3a8bdbabd2dd
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1550.gz) = 52319f5ea1ba91f0e3d762df4580873ae8015f3f
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-DBAU1550.gz) = e55c5185cd7d35ddf3a8aaca93be4598
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-GDIUM.gz) = cd1ba889150b543a42b1abc72bed2da50a4705ee
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-GDIUM.gz) = ba267fc4d44531b95167b3321c4b6f2885902a8a19332c647ea325ba2ab37e7d48a1753d2ebe3991dde1ea286455b1062e56242b0d7804b9db51bd906fc6fa46
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-GDIUM.gz) = c4fc7d36e9e1b9d22f04c85db96894267551ce4a
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-GDIUM.gz) = 53fbc4ff1eabc437ff5546fa12df92df
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MALTA.gz) = 18cb97fb9b5fa551a4230460d66174bec28a7017
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MALTA.gz) = 5887e65233675d5584c5f8b9d14ab70b0368ad9c9d6e085470f63f3a37a82d5adfab7306866fa55303cb73668ab8b836082609da77eb5ebb5fb7b05fcf36ad03
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MALTA.gz) = 326fb5286d584548044d264ce8650cf9b13e3901
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MALTA.gz) = 06f4d46d9d802dac0954390934246fa3
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MTX-1.gz) = 95b45facdc9fa0b69709e7e5505e3849eb3c318d
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MTX-1.gz) = abf3ee530bf7a515fb2f4d93ff50d5ead425232171eaf33ecd9fdc56fb0ee37e976aa918fb3a153b0c8d8b7b51cf288bca1acf7a9a61402d149818e83ff70296
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MTX-1.gz) = eeb4eac3e382e41631e8f3f8806e2c3f10355a4e
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-MTX-1.gz) = 36da2e3383b17e5bf06844c414dc239a
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-OMSAL400.gz) = 44841ceb6f1af159ff6056ef89884da1f3c7cb3a
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-OMSAL400.gz) = 7ed282421374238ff02c9ca3e413165be0d0b16e1011cdab9d4af9f9b3b868b05d5832a8f24ea396222035ebf46ea3b02b2eb49cf378f93f26d807192a5b6458
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-OMSAL400.gz) = 7b039a86fd581c56153a113366efd278414f9921
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-OMSAL400.gz) = a8bcd078458637f91753faae2c99c8ac
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P4032.gz) = e14fd9558a2cf7405398aec0f3df97f846ccbbdd
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P4032.gz) = 4640b39a386e0223ff255ddb9796820a249e34e25eb2f550cae3ca36d2a3af7eeb2f0133d084323b964b8aa3db93db462db2bd3debdd78388e71eedcce37a48d
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P4032.gz) = 845c8595b29846b3ad87272048e0d5ea18413c2a
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P4032.gz) = c2e071d630599cb393bc13e4db60a187
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P5064.gz) = 11fecb91f2c90740271dcc51a7fe5f78cfd35281
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P5064.gz) = 076c38f8684254a744cb14d592b5f0404d5a7944cbd486b2b6da4c4a1057057029f5f1949f007ad5255d97466ca5ea1b5af047566823526b7e7804280b0206f9
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P5064.gz) = c2e78b4d2da205e8af4b8bffe97e71b78649917c
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P5064.gz) = ae9f3bd2236f924b501fc6d0ae0b42c0
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P6032.gz) = cd8af99e05c16d79b574f176d0229bc363c3f094
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P6032.gz) = f1375dd13b2950afed3a0b3c9217a0630da47ce52fe467140217a2b29706e68354018d2e5c4b0ab7b16a9af119a66b6430cdca1298275dfd1d9b22eb65cd9ea3
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P6032.gz) = 0af7124d320813134c90c509027396730e0bb758
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-P6032.gz) = 277e59364f2ed7160337ec3d20060a9b
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-reth0-CPMBR1400.gz) = 55565c142f55fac5076d21a61b0a5ac8cad002ee
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-reth0-CPMBR1400.gz) = 8db0765cc0d2affa6cf5490d766f577f202c89d6694fb8e57f81c076257242ad47439fa9e3d46c738d2e1dc1bc306f951fff54211f48c4bcf3c27ce672db67bd
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-reth0-CPMBR1400.gz) = 015a00aebbe3f9ff27bbc38e50863794829c34a5
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-reth0-CPMBR1400.gz) = 994571e2665c04bfc5ed50709b09d74e
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-sd0a-CPMBR1400.gz) = 7c23499487a89cd84aa8b4a429b097e8ace4c0bb
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-sd0a-CPMBR1400.gz) = 1a517e528904e379b39f740f0335c93de12e1b9398fa0564ebfd702fa064b75dab85bcbbd44f2f5baca767dcc61cd79bc7415648ed346e2e4d15ff3c2c278bb8
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-sd0a-CPMBR1400.gz) = 95ca7bbed50714a1aa9694362565c4219305a9a8
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/kernel/netbsd-sd0a-CPMBR1400.gz) = df9de39483767ed081aeb4bfe5d87f23
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-ALCHEMY.tgz) = 5835e5112e44bae1346420ffc0f3e09a2e4f6117
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-ALCHEMY.tgz) = c3b2ad6f9678403cb3a6e0b8dbd05b6717aceac5472eac0c2bad86dbeb30b509f7a8b865daa499279bd524a10b075da08f6fa9736994cdc4633b0f67b0ac22b6
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-ALCHEMY.tgz) = 3b7c2006143846db5c3eab27c2f881dc22ef5e05
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-ALCHEMY.tgz) = da923fa9431ec9e4349f58d50bea5adc
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/base.tgz) = f0e2ba7bc4f19f19c71a28de51c4359ac56a6a44
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/base.tgz) = fbf1b00664f9a8530afad453e1af05ff39741d87187d25e3e5242c06fa013e6f6027d40944ef82fbc12c0ced24e90824a135bdff8ecfd69b04f2ffd03aa8d065
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/base.tgz) = 581b658d659de51923f79c189fb4dc75201aff64
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/base.tgz) = 185928a3ba27f23a06356b0b0df0ff4a
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/comp.tgz) = 66f0609c617456757b6563e94e2feaa2f788d2df
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/comp.tgz) = 83bc3d7127bbf0bb9d86f015d4cded042e1c0cdb75efdab00fd7941a7d96e8b54893b54a36b489d221dcbc17348473ba73287708f031b2ef37e0288074201400
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/comp.tgz) = d8d32c55c767525effee5ea75186373d6c253873
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/comp.tgz) = e56af26f877a19649c558c9d3ced6e6c
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/etc.tgz) = df85d74c9f2767c9be3de45d693f13547ff9e3da
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/etc.tgz) = e06ac6ef086e5951de773f02fe83c16ca1804611dda15b1dfcc0a44e81c3e6e6acf06b94480b0f643ef63e1a90c8eea81b2af4302e82801c033705418201e66a
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/etc.tgz) = 16cb173c32cd73373937f89eab796e5bc987ec96
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/etc.tgz) = 81f8caccfb4f464cf105f293393f6c78
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-CPMBR1400.tgz) = 1da339adf6e178fd648cf87cc4d2b5e1ad0bcc2a
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-CPMBR1400.tgz) = eb2c935de15c5622d5752c949b86965ec587b5c36c5f51ae2b801a9e20482772d1d728563aa70b299ec0316bc71f7754a0c4fb2e9795c01effcafa9123bf2029
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-CPMBR1400.tgz) = 3dd811b1a249023ffa47e31969f4086b9e156a15
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-CPMBR1400.tgz) = bd1349e129ae6367bf0e3532935c2317
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1500.tgz) = 3f3199d94860f1a97269132ec110acb983133723
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1500.tgz) = 1a1ed387d0902cad78598dba5c0a088e231594d16b4f49ac73c082f5c05f972b1a8e5ab5f28b97b23d696297cc9f334f1c8bff2daeb8a386aebf1930e3587007
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1500.tgz) = d7f81fc610d0f09a26d14a082c9a143283d8594f
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1500.tgz) = 54e6afe80b72e44b94d994d2465d63f1
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1550.tgz) = 22c9cf65d89b9042f2b47316b99368dc0cad4d45
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1550.tgz) = 3d2e737026c76a192d4461234be70622682563a14584ba8da5272be018a711dd108fc71f93d8251f8851246f8998c768f4a2f6e81b7985482dccf1fc166b5138
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1550.tgz) = bde90234bc61e0105d5b7d1b23c23cae81461f84
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-DBAU1550.tgz) = 2905ebd9467c3a2ca17f776044ac9b80
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-GDIUM.tgz) = d7085296fbaf3357d9b3bdfc107c0632b7855d24
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-GDIUM.tgz) = 8841e72b1c725be15c37489f42254fc84feecfc2bc90050a4360ffc248ec14dce16dfe41ed8950f198c6a13fe78f287ed53d5545a9c0de775161de52994c1c21
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-GDIUM.tgz) = 49552df226923fde73b20818fcc3b88859095252
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-GDIUM.tgz) = e24f2b056cbf42955f24fc45075f2836
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MALTA.tgz) = bbd9390fc5aee7d91c0fe0651503360f32fa6498
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MALTA.tgz) = c09a032170d82e55a1c32fc468e6656509c99e9ee2a661255ed92d663c0605e1836afa2a098b40cbb9f6ca16854973733f6aacafafd129ca752c3ef569434f76
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MALTA.tgz) = ff39a003e6a67114cbf0cac19c38f958cd07cc14
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MALTA.tgz) = f9b7bf0cc95c4da411d9342dd2ebe8b8
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MTX-1.tgz) = 5d4fb7abbffb58499873b02451e2d87e3818cd3f
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MTX-1.tgz) = 2801b511740ce3310fb21ed8d1d1bba46ec2565721bbea394e1e1683c05984a88b2346b6949e90dcc737929e2919fb752661582984b27ea4c726ca6c70fdcff7
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MTX-1.tgz) = 5b55476b98c8b0610bb7b03b15a457640b03df95
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-MTX-1.tgz) = f185c47ceea774af477cdc675e5da827
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-OMSAL400.tgz) = 854aac9898f3c0552fb0b4491d45dae21dc084b3
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-OMSAL400.tgz) = eb6aa82deeb2fa15ea59198d3ba10275eb73b85a902af353442138df9b66307ac2a595a61824301e56bdcf3fddea03414fd7c312564d039fb8d75fd9159cde58
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-OMSAL400.tgz) = 0fc4d0bf3a667e4fae2f60a504a4032751a5bb84
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-OMSAL400.tgz) = 53a48a5e4731a1160347ad6c655ccf5b
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P4032.tgz) = 9e8cb0ee684033f08ba0b4bda5a4eb16eac71fb6
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P4032.tgz) = 100f84c1ca2763695d90d8b65822c0ce4156c5c51236be33e395dcb7e68c806f979f7afc50c3c76457c82f225df32c44b7cf42c9c8a183469ead0b512a5880f2
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P4032.tgz) = bdda2cb2f34b84c0d46a8dfb7ef72bb6f3562018
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P4032.tgz) = 36f64c61f21f88c7d6067d2e9b1476ab
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P5064.tgz) = 8d6f635c7b19fe4b4ae3f81b8e55782ff929a275
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P5064.tgz) = 4382b4df12950d3ee601efd85e13a0b3aa4e41ec9ab7f1bb5024d1b198ee8c588592c2b50099354f1164aedb585ffd7e9dd123516f32f1f30c32cf78e77fc70f
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P5064.tgz) = b0bccd6abe423b957c452d1d42f40796f42533d4
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P5064.tgz) = b9659cc8f1fba16994a78e42ba17d9ed
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P6032.tgz) = 86427980342dd947c57c838152ae64d15cff5142
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P6032.tgz) = c86734213f246621075f8b35f51997d4abfc722502a4b8a3006d8224b1808871fb9103e539ab7ebf730dbb94377c3f75cd1596a3f7d3fda2505cca879c4608b8
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P6032.tgz) = 75aa0da6324608e7055e923ba1004f5427c88770
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/kern-P6032.tgz) = abcfe72de3e084c79528616c061d70ad
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/modules.tgz) = 66831501dc768e732c9b93cd102bd84f078ea1a6
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/modules.tgz) = 6b50ee54d67e9f57f125ac1eb0f1cf849f566a2ca4055032f708d8bda121b8ba96274c5fca21deec4753a3bbd64e18ffa66fc0548b363f95b5c0d0d4f2690dcd
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/modules.tgz) = 1db5ef74be63618d39d44716face7ca5cbafb86f
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/modules.tgz) = 47d708c50d3fbb3f170883f337a84a3c
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/tests.tgz) = b87c52edef5dae8c13e4982f742d107c6bde617a
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/tests.tgz) = a227c03925059ca58390063e75c934e9bebda7f2944478302ffca4f53a48bf991314c4bf837c4e833aa700424e154cc62526f76c53f23ac7281457606e975c20
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/tests.tgz) = ea25f7257b61f3530435a9dc66123831d59e6c43
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/tests.tgz) = 42da5bef4121a88ef7ba8e89bbd065d6
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/text.tgz) = 38e7f089801576d8a7370546c8f6dfee8938c54d
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/text.tgz) = 4694ab32a63c7a00b2da8921e278d14ac83dd114beec338716a98cfbdbe7c06ed07abe0d6a10b317b50a9deeff4f4049c487458bfa9cef043b92905e9f4828e7
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/text.tgz) = 6b4ed0dc8220b79963b2cbabfcbe1ae449cb4509
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/text.tgz) = bfbab9eee77986403da3513d836616bf
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xbase.tgz) = 71f5a25bb86649bdbeab0146bb32c76329afa9c6
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xbase.tgz) = 70afd5fdc176eda270259b113d7f28cc92fe2037d7bc84cc69a2bb32ea05b23bf26c10f834fa9d59be9900a2ef780b55e5e181d6b1a88ff51ccf35488d28fa22
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xbase.tgz) = 95a5dcc67edbe81dccf5f90e0125e84a6f267cfe
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xbase.tgz) = b0a603b80fceb0f5f0c02786d87542cc
-SHA1 (NetBSD-6.0/evbmips-mipsel/binary/sets/xserver.tgz) = 9be61698fe883646972e3441d1ea02e16fa351d2
-SHA512 (NetBSD-6.0/evbmips-mipsel/binary/sets/xserver.tgz) = 17d9d25171859208b00a7e64dc74eeaf4a2533cb86d7be138227aa731a09654c007bc4245817177dc2308d693c1792ad247bc0692de79e3b0dd8e5d2257c7246
-RMD160 (NetBSD-6.0/evbmips-mipsel/binary/sets/xserver.tgz) = 168f6c36213258b1f7f3019bc47434a58cf68a54
-MD5 (NetBSD-6.0/evbmips-mipsel/binary/sets/xserver.tgz) = fdf224dd21749c1a2eb06f6ebde96338
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.srec.gz) = 1148ef0c3e4745f529e78b33e048e77a2357b107
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.srec.gz) = 127eac81b94185bea670ef1766abe38506310147c058be948614bb472cd97444402c65eef69375c39d6bad518b617a2fcfae314095c94c9263b322e061ffda0b
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.srec.gz) = 88a878858ddcfbdcc82d30efe6db396e12324245
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.srec.gz) = e0fd06b18d51bbed126e558fa66a0124
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.gz) = 388abbcf174f34d8615308f4d9387534d0dd4973
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.gz) = 6aa9bcccacbb410b5f0fc8fc905e78bde3af777913ea3c2035cc6f9a6e4a436fefb7a3afa987403d16a6f1e7151cec117391ba0d146679e7c0c4c9ab1f9727dd
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.gz) = de9ce82a62f7f24c1c78b0bde362f0e4e1d66293
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.gz) = b90209535b8a3e40f5d020a99bba9813
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.symbols.gz) = b1199797080df5d8669b35bcde9172d628bee188
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.symbols.gz) = 3b4d915b17ba81bfe9b4f9768841c8a140359ea07121d88b2016f0712f42de965f5cf37dca483ba718d47743da6c300b38499ab5c93ff1978d10622e203f84db
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.symbols.gz) = cdb363ed9995287373ce565c3a6a0a4c0441e9cd
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.symbols.gz) = 16a4265a582c47946a7bb8ad40f93856
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.symbols.gz) = 067b86e211cec25f5b7b826139195679a7b13ad8
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.symbols.gz) = 7d4006e0da241ee8b44572a510dcdc33d14cd543d46022faa855b1a554832309d0ca756702a0c7eb551d0d2b77643bf1905153c59cfabd9879e8057d4d9ba89d
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.symbols.gz) = 432610d592a1e11d09d2c6de9bcfa6eb8021e2cf
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_MALTA.symbols.gz) = 4c03720d979460cbb6b5311c54214642
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.gz) = bf85a74b3aba2ec80e8aa7b595e34ed729b9beba
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.gz) = efe3a15153df52551b5542dcceb8c41c9ac74a56cb9e5e4fb2d531d0d933d6ea3f8555831e8e9b707d724ae15cc27b79c790232fa9c5ad142f71b6a15ec61e1d
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.gz) = 4299849406f323f0f65a40f74734a1cd34206bb8
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.gz) = 54ed1ba8d8009ba512e9019f905c0368
-SHA1 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.srec.gz) = 2f72f6fe9f6a716994fc2dd68ae51c6401c7389e
-SHA512 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.srec.gz) = 4d8d6a4eebdda98b6a8074ea33ee54f729bff3e8e1f8c5c47699819a3cd29d329853bf0083024f9ba3a8893a2255651fe00232408433de8654308d27ba72560d
-RMD160 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.srec.gz) = b05f15e41052f8ab490d7cc00367eb5ce2430bde
-MD5 (NetBSD-6.0/evbmips-mipsel/installation/netbsd-INSTALL_OMSAL400.srec.gz) = 1b2e3da6a2b2dfea79a9669561f04413
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.img.gz) = 963fb1dfd634ec77183e0e19e63add5d6f515a46
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.img.gz) = 670195305b6eba8bc6cd2b5a05bcae746dffd3a9bcac873d61bc659893de97f35dca7707d073d9fd2e55058f99f83102364bcaa64d0fa9954aba2bd42eaf297a
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.img.gz) = 4ff261bfda6f964c67273e2c6cad05577ff39cc8
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.img.gz) = b3cbc16d9f2d3870fb9c137fa21b7625
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.gz) = f74b0a7d7afc324d7b463780fc6cbcee71030e28
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.gz) = 894aa697fd0f0968e534db42528be520c74adec169dcbd2d3603cc262d33e23092253494b072f7239f1542b6237128d8c5069616e28e51422dc69d0bca117d1b
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.gz) = 7d00ed85fbb611948f16e513072f2a307fa46d83
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EV64260.gz) = fce468eda12d673785cf7b16c7f4355c
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.img.gz) = 0dcdbfd5853cd5ee3649e1bcdfe16e3133128dce
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.img.gz) = 0654c6b68a52bdee61715fb8b2b1af775f4c7b4a034d11ad7d4cf9f31cae4b8fb327a78dbabfaefcf6d68352ef8be2b4e71d053c97c0c59a24250358fbf47589
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.img.gz) = e307e29dbdc57b0843e54caf02092c38dcb11cae
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.img.gz) = 444e406bfe16f2653bf60273db88dc3a
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.gz) = 54c5de8e61a39b7114fab8a4a28036ae9d44090e
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.gz) = 092f45dab2ddc2cfb79b1c1d649f3a86f169a380c01b7016737bff28b4404a47871546c33e89fe43a6db0255556a2a1cfb2bf8cfd725a852af2c19dea35462bb
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.gz) = 30903e7cf5db4e4f57334f71240da21f6e0fbad2
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-EXPLORA451.gz) = 229f310637a0c65b47a078f2a6f0df82
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.img.gz) = 5046cdf7029475b3c2d6f8fb0eb9ac766d55d568
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.img.gz) = db6f4a419ea019f46205cbb75f76bb8a35bc9d6cee83f9da3b776abb3f83334a60fcad2ef6de4041c0ed3b0689cc259789ca2517dca0e101fd46ede807846d20
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.img.gz) = 42f2c254a99df74b42ae21c1a89d42ca1d8dc105
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.img.gz) = c7b61fa28cd76c1c694fad7becf124c5
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.gz) = caf9b0a77c6adfa8d6cf1effad83b107ea9c5976
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.gz) = 14db94aae558e9e3311e667343468625f309cb71dafc7610f029e6b6e27267ad6169ce21320d6fc512bef2cba49c3f1919d396fbaccbeebe49e8e53dcab865b0
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.gz) = 3a12875aed7924a33df8290b73576ecfbc8dd752
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.gz) = 20580d5bd36fc097ce824bf9915fae05
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8536DS.gz) = 54b88ef9d752b74a27f85affe9d162bcb43009b2
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8536DS.gz) = 42903a0d5f74e45d00cb48a4cca92c164e26097791048f2cc1c2b7a1d8b243cebe9f64a3daba9542c12b077017e59c1d0d6c8a8c11ea120855f0f40cc7ff8fb0
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8536DS.gz) = fd7ac6dae359227cb757ae1eadf39b1fe08e43d3
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8536DS.gz) = 505ede4a04c4726a1121a17a531a74d4
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.symbols.gz) = 9c6ab2ce83f2ca09cc8789a9431638f7fccdd64a
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.symbols.gz) = 8ffdfde54ed60c89f642b91c6e434fb4ed4de6ed91009df3bd70556e73f6eb5cc28b7bb3090823cd8671e052c5d52bb15eaf8409e779cbbbf4ee6776580b67e7
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.symbols.gz) = d52adf8dfa375abc8e4d0cfd7a414afc7b44aef9
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_OPENBLOCKS266.symbols.gz) = 6bf07ac6f2c54f9b46171b57492b6c4d
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.gz) = c4999c62d6e7c7c8351dba57c34ed0213d2d374e
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.gz) = 2acf7209a186bb3c52c54e49660c76629fdc8e80e73e1b77beb23e6b56c7acd1d985c958f152c8692303c41d3a4bdcb753ba00c232a772919ce106b1c439d697
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.gz) = 9a5d70bdff7b5208eb2f7f6bc2df3b72ce770588
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.gz) = 777ada452ccd51471ab700f4a6f9e652
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.img.gz) = 2a5de49c3e1b5a2f4455ea780f85d185b26845fb
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.img.gz) = f1f740403f47dc84dd3935611f4e1f71d860c202baeb8b53c23c4c4c6543f9b903cfd559465f7a5c3e1e59a8604f0194af556ebbc7000592cd532c7895b25287
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.img.gz) = e974201a8d50e1c9a77bc34a4df289e94a58e966
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.img.gz) = f710c52befd5c32ae49e90b7f74f8e77
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.symbols.gz) = 89c1b110f3a260ae41093f65323a11028f37826b
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.symbols.gz) = 30c988a3a2b647a1c93a95ab3bc7fcf0428f89dcce44152f81c2a58af49f5e6c95817650f5affca8a83ea0318d913a0ba20c28dfb6b7cb3027dce2c5561ece52
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.symbols.gz) = 4838d9d57fdcd79da40dbf3fdbbf09e77118ff2d
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-INSTALL_WALNUT.symbols.gz) = 5b9c0173413ff799fe5140db7ab9c13b
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8548CDS.gz) = fa0461c820b70c326f5f2867ff081cc88d357aa4
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8548CDS.gz) = 436d573a0b468d6794a9fc16955bca56a7b726c3e0e306f05e6965bcbd109ebf71fff060b8afcda9782043bd5389e961f1bb191d9b9dd209b385e64e448eb63f
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8548CDS.gz) = 01ccef4bca33dfd5dbc63d901d9b006a930858ed
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-MPC8548CDS.gz) = 9c552da04cd50465e8451c12ce98ac4c
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.gz) = d8431c30e8c1e34eb2b721d51f10e2429b542cf9
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.gz) = 1d111341a7439e63ec210bc09c168cd613b114222241cba494f19e6bf582a0085a8894e1a6a8842b7b1c6f8ee5f2c8b39238b9dd714727a053637cbb59a1f77e
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.gz) = 47a3f7ebc1980ce1817112520f13396d6efa2d44
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.gz) = 4875531aefe44295429c200a8dbbf3d6
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.img.gz) = e7e23c8fbe61ca6ef52822a4fb9336be7168abba
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.img.gz) = 6c78a517557651386736d048efb9953b4df3350b411291fae3029074ad0dd961f128ebcac4e6f14dd56e53d43465994972ca29572fbcdcd8793f713df74a3e5c
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.img.gz) = 04ea401821e981bff21fd61d8503608fde540bb8
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS200.img.gz) = 3e5f6b82afebe7b1ab5de3fca0bd75f0
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.gz) = 22aed20110feacb4634479f3080db81e3a511e30
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.gz) = e0934031d3b963fe5edbb5944b92a57c8f4ba4b496d8c5ab6aed555012a53f73bfcaba7eebcc1669bd6a308603360804242b7c37e92c022872c524c159c92f54
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.gz) = ad1b890f8ef6418a1ed2858dadafc7e99729b6bd
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.gz) = e935df1037b38d1a903359f63aca6df4
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.img.gz) = a3b023c3bf29f930fc5ff0e0c074e54e23141963
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.img.gz) = 3d1c0b86676c2bdd861f7e8e4e20d6a34d1a04079d908b6d2ef5404b1d00ec1f394a8b13fe5d4b4906c996d1912777e0f52ec367ad6e1c9db64cbd22931347c0
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.img.gz) = abdf86f9c182d23740543843d59e4dfcb05e59cb
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-OPENBLOCKS266.img.gz) = 84ce6f797d900ad639313c55e64178b2
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020DS.gz) = 8cc216c33fcb3f59904067c3e9294f0369d6f1e9
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020DS.gz) = 6bb4dd7dba52e6a6f4dcb76aa5218ab893deb64d57a87048ed5dbf882c13e92646ca89a037ebcba5211407363a9365d2bc9296397322dac95374e3f03bd88e51
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020DS.gz) = d8f03ff91019223b562ee52da049a4f71facf379
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020DS.gz) = 958385f31a4f6b1a234652faa95c6c95
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020RDB.gz) = 9140563a57548b77f93eee35e2615f4a377612d3
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020RDB.gz) = 1fbddd9a55f6669c1f2f48dd96b7147cae93a2d5642b262a81669fa4a2670d465cd09347a6f9b7751baa338935114bc2ba2e67622e2f524d9793628274f92625
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020RDB.gz) = 3ad3d010c5c0f34a69d7b49c7c1d639f7c5c3618
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-P2020RDB.gz) = 094787fd9d22021a1b63422895976203
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-PMPPC.gz) = 8f72cbe7df21613d6b796b579ced2911efbe66e3
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-PMPPC.gz) = f4f11445454376ec9f83f9e3072421a8ccb7bee9b1aaf01aee70a6c044e0de1156a5fbe28b1243e8efb334adeb70621e8eab875c44f590fd0276114a26d8db15
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-PMPPC.gz) = ff1f745891b1c4a02836982de15575afe78c16eb
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-PMPPC.gz) = 87d0847ec4707e24c58146eb0475d1aa
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-RB800.gz) = 139b9c2b87b112ab2d6498e726360504d0adedd1
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-RB800.gz) = 8ffc6ac565bf37ee69f8736d7c86738dd69ab7873b77ec062a12a442851559e4c94c903f76e649a21984efd4b98ccaa97333177be635807e6dec8a17bd421880
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-RB800.gz) = b6724d690aef60f63c4b1339eb6ce514e0886151
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-RB800.gz) = 2df5233415f6f20f2af441b4b54379b5
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.gz) = d5e489629cc8d1b2903e541b944a123cfc0937bb
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.gz) = 77d3eda4223f4cf9120a7e84e8c61917749462734c5adc70d95e3108a1b151e0ab7518092d37ddceead9e9047297ef47f4712de7eb0dc05f4190ab60e775d313
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.gz) = 15568ccc03d6a06ebdaf407b6d2b4ac07985a0f1
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.gz) = 11d3fcb67c3ec63c5c43ab5bfe06c0b1
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.img.gz) = f001160c675e3d0f73978743c88bf61561a7b10a
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.img.gz) = a85072ff3b1a1d8b9e35b40b1bb49f5065bad003f603add8330de38a71c19028ed54e377534e4e901281ad5eb65dcf73e8657a39bffac9645e6fee6bce7ac391
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.img.gz) = 31480f15986b52f445cefa8aa4e056b6fcb74f1b
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-WALNUT.img.gz) = a0719a86fd17f9ddfa5131e58f77622d
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-esata-P2020DS.gz) = 50b925468b1ace37856fbfbd4fe5363ed187b4e6
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-esata-P2020DS.gz) = f8cde43dbaf1744d7dec3437beb43be1b73178fb95038771a52315b5b54f4ae369c9261c35b710be563b0bc9be07e4801100e012c8313c564f3bf66845082c31
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-esata-P2020DS.gz) = cff81475ea7ebe293bbefc4088d5dcb76906108d
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-esata-P2020DS.gz) = d79a18ae8aa921fbd0df460cd5e550a3
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020DS.gz) = 1c75ca32cb0267f982916a5fb2740483e5aa9f7b
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020DS.gz) = 99d1b928ee2674f7dd22a10ea6c3cb7b24f5bdd4961a5315ad310e2189cf4508bde00d9b752cf3eb6843c3a461f748deeda4f395206a4973be55165f6f17c9ff
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020DS.gz) = 24d2b7dab4018de8de5feb65f23cda0e8b4c1502
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020DS.gz) = 6fc3a2ba5e17d4ecef5cb52b482761ff
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020RDB.gz) = 342dcb5cc506d3272737f3b2c0fd16b7221ef429
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020RDB.gz) = c74ccc79f91ac3780093676aa88cb544da9cd17abaee1c1d2692acef50c5f13c4ff1e6ea4c334c43242f20460ca6f08406c1514f4b84cb7206900192699b2e09
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020RDB.gz) = db206fd4eaec146d07e71794320de0e680bed506
-MD5 (NetBSD-6.0/evbppc/binary/kernel/netbsd-sd0a-P2020RDB.gz) = 6a7ec6e8e8a7a2f75e60073154234efa
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8536DS.gz) = 3c9abf574a3c5dd2c38ef5af3433ce2123a30192
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8536DS.gz) = e58dd95eadafef8b242ce0894ec809b1d73063f7142cb0d6ce42dd03f5a71032ef3d31ef09e19f9cd6594b5bf65806473f560e17f0d505f5491c3651d6f9e930
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8536DS.gz) = a419d3af2732cc85c1fe0ca06322e0996a7946cb
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8536DS.gz) = c900656ec6ae14a67385ea265639a500
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8548CDS.gz) = 14a02ead1d8e5963e96ddd3a5b3b2625202d0011
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8548CDS.gz) = c51940733928beb1f9beb280ecc642dd867317be5d0ca36ed9e0e01b1c8b2a1d788658bdb822e4b7be358fca34fce4620a9e2afb10a265007824efb965dfeaf6
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8548CDS.gz) = fbf09f5e31f3b61a3cb4f1cde889a2c91635cfd3
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-MPC8548CDS.gz) = a4094ff843bdcfcd143957a0fd15a01e
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020DS.gz) = d5125242574b57126e0a9ed0b2c9e18ba47ba7dd
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020DS.gz) = af9b230b2940352e71cba43854b29418e2d1c6a51cfbac7cfcc801a4c1ecbc0605d055fe673fae7f244a421058073f921f1cbc8ce55b3131017138396f2071ac
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020DS.gz) = 7e25cb6632e7d744f60572c578fe34ea1acecae8
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020DS.gz) = 3659db43dbb405a80a675b7f2840c7df
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020RDB.gz) = 9a55d38b7e6f8c5b274ab45f20794feab61a6264
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020RDB.gz) = 15ee2dfc4c476a54f0483facb66aec9b2b743775df471353ca1e443522119af238bebf7a986413d6cfac237aec8242180499b23fa85b85017d20179561025ab8
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020RDB.gz) = dceb778c7ea33542379775b8481122d7e55f9e98
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-P2020RDB.gz) = 39f5865216f1e2e37984109a0cf2c708
-SHA1 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-RB800.gz) = ea5d21d649ce2a6c3502b58446cbe747433dcf12
-SHA512 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-RB800.gz) = 8748659a4a7e79a6b4b00dcb90ed2cf8213c138d4df7f93e6e53bee63f0c8f6c9a837f9522c9dba0580226eaa756473640226d1f4edb688a5b04807cb588730c
-RMD160 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-RB800.gz) = 9fe62c16553ca3e5955d12ca7e59cd0336bba55d
-MD5 (NetBSD-6.0/evbppc/binary/kernel/nfsnetbsd-RB800.gz) = b4a5d575b02cf078c5c31542e5b4954f
-SHA1 (NetBSD-6.0/evbppc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbppc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbppc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbppc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbppc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbppc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbppc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbppc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/evbppc/binary/sets/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/evbppc/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/evbppc/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/evbppc/binary/sets/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-EV64260.tgz) = f49583bb3bdb33b9eb3b0b4136668772da20f45b
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-EV64260.tgz) = ba5c1437d9a233dc818880e72de7746dced45081a2fe998ca922c51eaf404bce9f42f7f763a611485bb518e50c1e4da5a6906d0b28d01b9cd3c9f1be4d8c2761
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-EV64260.tgz) = f477b6948cae222002fa140de299929d9d9807c5
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-EV64260.tgz) = 168a599ee54d18f0eab734e5717b2984
-SHA1 (NetBSD-6.0/evbppc/binary/sets/base.tgz) = 660713e719fb1be5824c7b5f573730b9d1408922
-SHA512 (NetBSD-6.0/evbppc/binary/sets/base.tgz) = 366e7065fad6b8e8a7e593fa5790eaaba11a8ad49006730fc01fba2f1d7908a6ac1ebfc88a4cf7731b1d31b3e21dd5d0aa5c5433cd4f01ce95254735da15c772
-RMD160 (NetBSD-6.0/evbppc/binary/sets/base.tgz) = a460662933495846dc34b422fbf2f2f3b7141068
-MD5 (NetBSD-6.0/evbppc/binary/sets/base.tgz) = f527c4156acc659412d01a00756d57f3
-SHA1 (NetBSD-6.0/evbppc/binary/sets/comp.tgz) = c9caa7ece23746ea1423f1cb05924d7aafb69081
-SHA512 (NetBSD-6.0/evbppc/binary/sets/comp.tgz) = d60f9bbefcaa3331646da3e9bd2738cf11e357807ce64619cd48db62cd3c72469f39113b04883771c610c63f74e574941add1d83ee2cce2a7b13e85e844b9eaf
-RMD160 (NetBSD-6.0/evbppc/binary/sets/comp.tgz) = 2db97b320a8befeb352b84a44e32b3844648b85a
-MD5 (NetBSD-6.0/evbppc/binary/sets/comp.tgz) = ab787a55ed8b6765619f75f613914955
-SHA1 (NetBSD-6.0/evbppc/binary/sets/etc.tgz) = 01f15943e5ac9e3d4885c4391f332b3367a96483
-SHA512 (NetBSD-6.0/evbppc/binary/sets/etc.tgz) = 3d69692f01bf9b9dd36e719af4f2e99d7c9aac0b92925e2751b0ff8ff7651e37f948d18765fda1d1841fe8d97a7869674d584423594ad1ca48da8b4c35e0a3ec
-RMD160 (NetBSD-6.0/evbppc/binary/sets/etc.tgz) = 6422793912a3843dafb20baa3c9ecdc10305262a
-MD5 (NetBSD-6.0/evbppc/binary/sets/etc.tgz) = 789c56228f05a0cf67d1917ae04862f5
-SHA1 (NetBSD-6.0/evbppc/binary/sets/games.tgz) = e7bde1f51127db8c3a7d15ec931c915806661f0b
-SHA512 (NetBSD-6.0/evbppc/binary/sets/games.tgz) = f39fcc09a9b81a604a29c968dc74264a42c46ccc122c9ac01030e6ca01c28967fb7e20d8fa182f2ba07ade376a14a802c2abd06154c754f907a9879b7e7ab52e
-RMD160 (NetBSD-6.0/evbppc/binary/sets/games.tgz) = a09ee1c7811eaa0ed3aa1ca0f85e1279b096fc46
-MD5 (NetBSD-6.0/evbppc/binary/sets/games.tgz) = 81e8837aedbfcea8d6957f192e54545f
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS200.tgz) = 561ca3ad31c44deca4b197207d2a2e6a92ed4bd4
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS200.tgz) = b47b23e9b6c3efdc389ce3b47218eea8da190734075985e7ad009a10addcba48e565efabbc3b11c32e220d6059fe5114ae77351bc72549e8b8f37be98dcba27b
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS200.tgz) = b2058d6a4e4fe11ebb19f429347a6ed69a1b014a
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS200.tgz) = b2ea5966c8110677fd107fd4029242f1
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-EXPLORA451.tgz) = 7a6fe1de68c0fffedc5918ffabeb87ee71ad3da1
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-EXPLORA451.tgz) = 2e30f89fc77fd9bcd9310c4d12379245a18aed68b661c037593870c86ea806edb62f32a433f46e4f4c205c2eddfd86c353c3ca970a887a324b4d9eaf952b537d
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-EXPLORA451.tgz) = d68c12c132889e9cb48e003811e9c2de7fe41aa3
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-EXPLORA451.tgz) = b5ba93f49378f17fa86d91832a97d63b
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8536DS.tgz) = cb9e2b4befa9231d5c6bcf52460189d6ad18fe85
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8536DS.tgz) = 937bdfd98369d438c25a0839e50cac22602b3766db5f359d31825445c156fbe94de24956584b0668bf5c1b09565733c5dc4e9dec8fb5c034f5764edbf8241bff
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8536DS.tgz) = 63389f49fc87afc7227318374fa8fbb130c1f076
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8536DS.tgz) = b4ccb088690ba31893f554c22874c25c
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8548CDS.tgz) = f17cacf88747cab418fed98c8f2d4341d883c45c
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8548CDS.tgz) = 13adbfaa5c03713aba913d4bb08f6c8f654b3af210164d111d4c5825bd49ebc7ea8b0b4e5dabecfe685cc9ea9bbdbd0c41cbbe3e3a4bf9d497186c0cc15ed3b7
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8548CDS.tgz) = 5e2198d8b2c62f629a2e41ff422f50f0d90b2ca2
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-MPC8548CDS.tgz) = efdf3c8e143e54c672ba669c5b2211c7
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS266.tgz) = 3dff6cb4cc77e770b17e56dc132fbb3ecafa65f1
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS266.tgz) = 6309b5240c155074f7f0ad04684043e26886283d81369faa2c5d5ae202a82c5fad980c1101cb5f03fbf50e61b78fa87cf5ce633ab354b90ae0f267c4fc03dd92
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS266.tgz) = 22a0af77fbc2dc62e11aabc36b92701e12a23624
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-OPENBLOCKS266.tgz) = 776cb54622eca1a207cef956b8fe9a2f
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-P2020DS.tgz) = 6ce50d8dc26e08d660edc8daf9b4c35e2a03b005
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-P2020DS.tgz) = b04c1630a1bcf4ac4855e4242c5cd12b82c846b371b6257abb99ba4b28026c546ae914d68ed31ecfc02d952aef81bd8fa50879c698735d453bb0a8ed72131fd0
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-P2020DS.tgz) = 16938708031722094448b4a613dce8e2acbf8c63
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-P2020DS.tgz) = 94ba27899a9ee3756ec7084e362ca968
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-P2020RDB.tgz) = b0bbfe5b10d1596af93eec4960120ebb23d00411
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-P2020RDB.tgz) = 536a382b932643d9e4a65dca9f4601edce766799da3e291484e9460291ce4168b5cfc59a39bb1169e69065bb65d1ff8f56caa98651d643bad9f33ef35b219d0f
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-P2020RDB.tgz) = ea8619e5c65fa02151fb23136e03ee8889f68ab4
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-P2020RDB.tgz) = b14ef5c3eff1d4c89afb1e9d883aa3d4
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-PMPPC.tgz) = 56e8d8a4c533163eaf18a2b9cb988e0a61be8174
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-PMPPC.tgz) = 87f5c77334788e59662c95dd073e3fa8a680f840ccab27e839fb405cc942941d5c2459cfa4d93a02179ab27fc6e75f8d3c957c3c95e5e271a404f64ec08a0b19
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-PMPPC.tgz) = 7160a35f527dc620a2e67e17a22e8cbdffd8fdfe
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-PMPPC.tgz) = d0459860eae7ad936e2b318a2cbfd7ac
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-RB800.tgz) = 79b942c2076a9219525ec9da7b25da3a21488675
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-RB800.tgz) = 0c9462c4519ed0fc1b378a7abb23c3a89768d6fe128c726e2847c6daf576757492438d4cab244e32f1bd7601f1a3e808d79f874b3480e22abff4a45b9cc5a8fb
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-RB800.tgz) = 6c7309b72d5a61879c3151d2065cb70361ad5c70
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-RB800.tgz) = 9951a8e7708ca609ec9abfb3b313f03b
-SHA1 (NetBSD-6.0/evbppc/binary/sets/kern-WALNUT.tgz) = 0a60e6f9a6fbaa8477b05baae64d4b405c9c252d
-SHA512 (NetBSD-6.0/evbppc/binary/sets/kern-WALNUT.tgz) = cf5e16c71fbe6366c41503578254a5be9bacf01cab691f3667c6b3b5ec3413cfd30f3dd00152a7c0dea73effa0f46fde1070df5aa29db02c021bc60a83d2ebc9
-RMD160 (NetBSD-6.0/evbppc/binary/sets/kern-WALNUT.tgz) = 54ade37dbefe29a6de73720d7900ce68b7dff1f3
-MD5 (NetBSD-6.0/evbppc/binary/sets/kern-WALNUT.tgz) = 4f92053a06ab8e494ae5068657a449ee
-SHA1 (NetBSD-6.0/evbppc/binary/sets/modules.tgz) = 3297a716bfbfdb870519304912c1f0ba834ef318
-SHA512 (NetBSD-6.0/evbppc/binary/sets/modules.tgz) = 586c1502a8fcb99323ba75ca343fbb8204fb80a00de8b09aa6722bc4d7bb142dd35bf023f11ef981f5ede707dec673dc1040578677216cb0aab2e1d9d871263d
-RMD160 (NetBSD-6.0/evbppc/binary/sets/modules.tgz) = bb87c0bfbb41190443d888876e2f6329f8c5a0c6
-MD5 (NetBSD-6.0/evbppc/binary/sets/modules.tgz) = be483e96c1f3eb3a155b17fe7097d398
-SHA1 (NetBSD-6.0/evbppc/binary/sets/tests.tgz) = a9c5bab23ec89b45bc96550385064ca681c1aaf7
-SHA512 (NetBSD-6.0/evbppc/binary/sets/tests.tgz) = a629539a7f807f4cf5651329769924fbd42102b4e9f96b4aaef254d1237e0ff4b6a55a9a1968bd6aaecf5f4e4db667fe59b8e2afa8232b80af4372fc436eed18
-RMD160 (NetBSD-6.0/evbppc/binary/sets/tests.tgz) = 8f786bbb44342927ecaee51314d2492b228ca507
-MD5 (NetBSD-6.0/evbppc/binary/sets/tests.tgz) = 6d2a4b03364dadacd276c5e908c6053d
-SHA1 (NetBSD-6.0/evbppc/binary/sets/text.tgz) = 9b944538cc5e87133cecd712523216a783ba97d7
-SHA512 (NetBSD-6.0/evbppc/binary/sets/text.tgz) = 7d87e8bfe246ce56e93257beac1808fd00160911acc22b5abcfc4de9125182d982e69709ff8e7f5dabd2454024cbf2969d836cfec0bc8b314f09143654648e99
-RMD160 (NetBSD-6.0/evbppc/binary/sets/text.tgz) = cf2dc7ca65a246453309df0e94e804c5a04b0719
-MD5 (NetBSD-6.0/evbppc/binary/sets/text.tgz) = e8220cff6b33bd3cb4e91d50573b43ff
-SHA1 (NetBSD-6.0/evbppc/binary/sets/xetc.tgz) = b6aafacecaf76d99a4c3c428e33a23633419f52d
-SHA512 (NetBSD-6.0/evbppc/binary/sets/xetc.tgz) = 9257fc58e039f2afc1ae7f46a7ed2ecdd1a13e67a76960490e89efb8fb12b44100a465270469058071249e0864346ff4dca825786552a4a8ddc804cc7a90dd33
-RMD160 (NetBSD-6.0/evbppc/binary/sets/xetc.tgz) = 6c17517837ddebee9482883db92d1542a89835b4
-MD5 (NetBSD-6.0/evbppc/binary/sets/xetc.tgz) = 77d81348f7721a447c8548aac150659b
-SHA1 (NetBSD-6.0/evbppc/INSTALL.html) = d106438243f94987f5d126102e6324f6c1ad274c
-SHA512 (NetBSD-6.0/evbppc/INSTALL.html) = d83cf719d3601674fe54b1fff57a8916d342ca9924dd38eaf3f6be43a3d109b85213d4217a5ede1f54734644d1e062437a63f428063cc3bf66166c6131860cc8
-RMD160 (NetBSD-6.0/evbppc/INSTALL.html) = 991e52340a15583f9b28560cacf1d10a5e8a6617
-MD5 (NetBSD-6.0/evbppc/INSTALL.html) = ab505dcacfa6b669a830b026c43d929d
-SHA1 (NetBSD-6.0/evbppc/INSTALL.more) = 375545e5f7e921c1635e3538cfa3f615f58ba82a
-SHA512 (NetBSD-6.0/evbppc/INSTALL.more) = d2c28cbf4417afcfcb33f363f3c234403f60c3899cee910767c9dcb7c8f39ef2f1dcc84779e67c5ad386a162ba886c37dfc64d4c7e8a70a3b0fcba1286a5a059
-RMD160 (NetBSD-6.0/evbppc/INSTALL.more) = af295999442791298fff266b84d6ab1a92c3cbe1
-MD5 (NetBSD-6.0/evbppc/INSTALL.more) = b21374e21e9e0599b62595c1aca77cce
-SHA1 (NetBSD-6.0/evbppc/INSTALL.ps) = ec4c228a542dd84139f5eb00ff550be759020a10
-SHA512 (NetBSD-6.0/evbppc/INSTALL.ps) = f784251812449ee49a2a2f69b54e20aaad818e0c07c220553da4d1c34676f843c7f60472c750a3dbe952725aad68e5abdf5dc19bb4d3b90cb742d8fcacf1334a
-RMD160 (NetBSD-6.0/evbppc/INSTALL.ps) = 525b9a28bed1478b2c2ff4a94da78aaae125bcc7
-MD5 (NetBSD-6.0/evbppc/INSTALL.ps) = cfa9f4c9a173353430edc81cfe8a37af
-SHA1 (NetBSD-6.0/evbppc/INSTALL.txt) = fc26b26f28fb8eeeb5bb990fc72d9c3d57067350
-SHA512 (NetBSD-6.0/evbppc/INSTALL.txt) = 1bd1da4343b0ab19075682a1ea38e33c7a0e11aa2253bae18a19dfb82c99c2b21b7e74e28f0952cbe6c3499a00bf412e998309b52c0c6fffafc868fd5a370e43
-RMD160 (NetBSD-6.0/evbppc/INSTALL.txt) = 9d44c454ba9249c02ac948603f1305342bedf9a5
-MD5 (NetBSD-6.0/evbppc/INSTALL.txt) = 44b21d90e58f137302ac1c96f78914ef
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEX7750.gz) = 99907a8b29592f20a683481b351d6c3b629ae74d
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEX7750.gz) = d25c300a0bef7432042f22856f899b60993f739522f62d7c1450da81c6774d01769d54f83b1039ed7b97af8ea4cabd954f8017b77b35d0d1a09c47baa09f0cae
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEX7750.gz) = cca19d946d47159fc455f36067dbd3cfee7f0f5f
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEX7750.gz) = 2556834458fa65b30784812d6defbce0
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEXEVB.gz) = b4fcb725319fdf75cb8fbfe3cc385f0546536032
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEXEVB.gz) = 3ae3fa47d5e760564ba5309b5bcbd4ca32ec52bf80ede5764811779acf73c206643cdfa9b0020b300ee70d75af820aa28ba798663ea962b16af935df79c9e4df
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEXEVB.gz) = 697977f6961f8dc0b2204532edc875fc23dd309b
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-COMPUTEXEVB.gz) = a163b83287053245cd74d74a2c66a13b
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-CQREEKSH3.gz) = 3bc3953e940f68f2edadd93f79c8ef7c841c4000
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-CQREEKSH3.gz) = 532a1d96716c85a6b77ebcbeb19560f2e402cbf68a50feafa6452117b477285ca05a0c86dd073bf9c237b6156fa59b42c05fa5c4029739b4fdb277a0c5238e09
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-CQREEKSH3.gz) = dad35f588cb96a63d46bad58b6f4e565402ecc3e
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-CQREEKSH3.gz) = dfdbab13faaee507abaa31e6b1819e30
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-KZSH401.gz) = 6bc4eb9bc72f6ab2412a0f4db523f849955d12e6
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-KZSH401.gz) = 80208e8df1f7c9fdc60ba1558c6f7182d65d6f96f7d57afc3d41887908dfee3598db6e82e827d2a9f14106ec262c4428fcf1a2046dc847c7993cabd9e6e668e6
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-KZSH401.gz) = e16349b9d4c834165922b78175d291af77caa0d9
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/kernel/netbsd-KZSH401.gz) = f95e0f3c93cff1ad0ea5667fdaba435b
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/games.tgz) = 37e15b0950aaaf1af36427ae5dd5866c1879b6b3
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/games.tgz) = e674abb1b1966acbc581a8f8b3e37841f48656e66f3302077cbb2de443487912b99521336ec5dc096fa3c7769b2d7623e1d1720a079407ec1861d32159a72ebc
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/games.tgz) = 36070071e8315d2352be1b3e563ce7ef7625d184
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/games.tgz) = 0016145b46957b95dd158b4441dfb010
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xbase.tgz) = 564bce6dd7c37b5e941e41d50f363c133fdf8f97
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xbase.tgz) = 23b3306254c789331542e63974f9d7cdc54d99ba2cd67cf6a1c97f09afa4f6cf6aa8798e37b7c38f4a55afd1572154f291fa1bf2e2a1fc87165fd6bd7f89fb80
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xbase.tgz) = 476fbd8301bec0795a01552728ada44204d2dbe6
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xbase.tgz) = 9fbbbdb3acfa4ccd9f0b309ea0ed0700
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xcomp.tgz) = 526a278a13833073e6231e879abdec85400ca888
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xcomp.tgz) = d2081a7536e3d7fa27a363afd8f6eb5fc3de4606f11b4857be2f1df59934da9d3d16e0df3a6edf4cdf52c8f579e0e4c06f07de0959b5213c21be1a8fdc2ee134
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xcomp.tgz) = 4a767ff08e9bcf98f886849cabebd1300397256f
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xcomp.tgz) = a23a2d8be9298497b4b6d39fda330bf4
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xetc.tgz) = 93a5cfbbfdc641f91ab363d4b65d1158d71c0cfc
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xetc.tgz) = 85a67734801e81e129a37b73ae62211459fb16d4e52a945ef21a4bb908dd7d1d775233956086dd3d59af45bcea24fbd6f54a2a9175756d242b57e07d10767548
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xetc.tgz) = 6fb055d0e1b6264bf1ec396236d903218832377a
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xetc.tgz) = af954b56e624948145b91aa451d77392
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xfont.tgz) = 6139c05273b6feeecdfcd11cbe0da91256d12a11
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xfont.tgz) = bb849454ede88d39ca60d6c513c833c2b29ea548adedb9f76870839174a3daa838d38a6ad701c78bfc164e690c5ebda9c9d00d4c23ad816df9f1962313afdbf2
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xfont.tgz) = ea8f123f9f78b429b77ff15c924803da1da2068d
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xfont.tgz) = a87cb6769c37ae20dbf0dd70cef93d11
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xserver.tgz) = 6cd4fdb0ff00ef5d89b47e68e538c86e395b2054
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xserver.tgz) = e3b575cab95e297a05a26a03eeff0cf843d665ebdfd103846ad544bef1d04f93aa20ceab09b1dfaae8f59d89ebb1cbef400b7521bdb41f7542f23156540aa4c0
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xserver.tgz) = 7e52b98276b4d097f7babe918e6768ae9d7945db
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/xserver.tgz) = a505ab4ce0801aabe21fe6038b63809f
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-CQREEKSH3.tgz) = 126932a5bc72bd20874c71d76047894c6a7fedb4
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-CQREEKSH3.tgz) = 89727c156d25912c17f801e7cab55d487eff7abc0a9168f490f77313d38eed5a37bde3c0ffbad4db49cc70c335b1147df1408ded59c4b5aeec9a0557a47e7b8f
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-CQREEKSH3.tgz) = 427056f8e924c6346b86a52b73dc8f0e9a98e44b
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-CQREEKSH3.tgz) = 07b32973dbbb2d0a7bf8f397349c032e
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/base.tgz) = 3dc230ebfc3669475edb5f69a61191cf0310b438
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/base.tgz) = e60bf3c63a76db118e7646ddc582150558df14cfde8cb8a6fa74f06bdfcb1f920e6015091ef4763be13072da77e2243b69a8e2739cc8945ec388b8f7fdb2fe50
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/base.tgz) = 5b347ce9da19b214d2069c8dc029cd0448af298d
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/base.tgz) = 79849fe1cbe830a98d8bc0a7db8f4e62
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/comp.tgz) = 882b629fd6de1ec706834199fb45736bb599bbd9
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/comp.tgz) = 700640c27a7453cb2ca1b5c29a2e0558a9cce8f21e4c44e17659bff25c4727aa578f85d3bdbf6da6173c80cac33955ec1731288160b1870fbf92a5df0ed258c1
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/comp.tgz) = 0c3da5c9c5ad1e9d8835040b230e89192f8cc98f
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/comp.tgz) = ae57e406883549f546048ff2480c5707
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/etc.tgz) = 5ef345b014742f576164cd85dc6744b87a4da775
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/etc.tgz) = 998a737bb0964b9bb61798310ae4f979c9e8518f90c482817bcaff1251036e51bdefb39a6b9595f2e313c0df79d44b387c960878582d7721c551882f2a3aba14
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/etc.tgz) = 64d587adda384831dccfee1548c9c09ed5c36f44
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/etc.tgz) = 495f4d62d00649132f218565bddeb50b
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEX7750.tgz) = 364b983f7368d62a6f35a63945026cd8c19c3bf6
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEX7750.tgz) = 8341464294654062caf3c3cfdc1ece9bff1cb6642b9873cebc4520e4ff9a0ed27e5e0106a488ee323d41d77b0bed99d7ad450c35d9d2f805ab18b3e3a941ea71
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEX7750.tgz) = c84e2532d3efe0b47b0db0c7471f9f78b0fd6dde
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEX7750.tgz) = bf341bdb90b335be676be766b8949217
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEXEVB.tgz) = fd664ded3626416bfbabf99bc73dac4a2bac909e
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEXEVB.tgz) = 3adcebf6f3acda9c84666cc1ce39a75302776e0f640cc02024d1ae2a7fb4ef7df14bfbb32e808f4a30fb482fdf181670c87327c0d5ded1145ee0f6bda268e369
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEXEVB.tgz) = f21c49e3f0a4a5fe70070da938296750a222e0f4
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-COMPUTEXEVB.tgz) = 39ababb0c8156e51b2c9b3854286a72f
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-KZSH401.tgz) = 58b48cb56251a87dfc59abd0ae25e8cb0e0ec7bb
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-KZSH401.tgz) = 4c3c9efd94bf1b9080d7355143d40f2796841448a92bf25c6f8b49772dec595915c8d7aa091afffab8df6f2eec40685c5a008ea65abe3ab32f2da6a7000de523
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-KZSH401.tgz) = 5931d576a61a240dacf5dfdaaeab6ac8a435b17e
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/kern-KZSH401.tgz) = d4dfbdffb2514e61fbfb4d7d39962091
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/modules.tgz) = e5078cfd24cfc29249d14a6a6f84de8d27bf1153
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/modules.tgz) = bc00fa4158aa2606925bd8f71698e543a5628739dcaa953ae99c0218fb8d3d1b70c78134cc5554353c612ec7be6fb4efe2f57b28a91a54c87266a9f7450eb38d
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/modules.tgz) = d35c1aa762a049440ce3095ae19f14cece89102f
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/modules.tgz) = 09a7af7e7ec408df3bd4541aa159ee66
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/tests.tgz) = bc89ec5fa64ca7df4c9b4a748cdf2ea437bbbf11
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/tests.tgz) = 011d3773e6363fccfb41d424a51d455d5508cdfb8da226a3a08670c0f5f96a613f0fa5b9818b634d750ab728a8e1546b3c8823b37c91317eb1d0b1cbd85cb0e6
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/tests.tgz) = b5534365eea74dcca99a5d5568c41b3ce79109c2
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/tests.tgz) = 324430decd8312ba548bff34d8197b5a
-SHA1 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/text.tgz) = 8cbc530ce508c246c6bfca4abc898f139da4cb39
-SHA512 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/text.tgz) = 6cb69d7b7019a82cc1db4326cff681916eee736081c55e08d8a7ff163db75deb91ce2b6feed78fd5775224d3aa24d74d0ca594535447826c03f6613792c9871b
-RMD160 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/text.tgz) = 85f073b017e79c9f8069912fe27ac96b7ad84cc8
-MD5 (NetBSD-6.0/evbsh3-sh3eb/binary/sets/text.tgz) = 72ac1c599c8f41bbe40cad9c17afb550
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.bin.gz) = 156a43383fb461877ca595a24fe433c41bb53505
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.bin.gz) = 74da9a5e48ac2fcc998176c4a8ae90f6d82e4269b071af2922210d23075c5c8b9b41ee63e9a4a7eddf5edb98a7b1ff32d07ea78a3b1ca95f533bc69a108ecb4b
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.bin.gz) = bb94e484f2bfba2253bc36a6724491e54d94739c
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.bin.gz) = 02ffe820f66f7d380b2a35522ea3d438
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.gz) = 0056d5cf3c88e73792a091ea2aea6ccdfa8ae908
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.gz) = 678c13171474bc55453f9a69467b8d85365e6a61e371e212e6e03a75193170bbd033575a46450b11c31724e56eeae77991a225aca564f1e1ca27e625f0dca191
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.gz) = 5303158d3acafe0290bbbbff80db24fb2ca0ec28
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-AP_MS104_SH4.gz) = 30c622231e6b9daac8ed290bdeebd164
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.bin.gz) = 16ae6982b9df3f6eb4a035477fd951edb3d300af
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.bin.gz) = c1ca446d125f788e8a155d7069247c3d63daf8ac9c99da2ad9f3b7d56e11b4491444f0ff0fdb2f4ff3722834d9e811f38621d4aa22d2f15434beb2d7033a0355
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.bin.gz) = 032c5396f55b50ad489e595c91c08b680d045154
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.bin.gz) = 47885af19837e332b23aea912dd25c3c
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.gz) = fbe844ab7e33356c35da0a05e841a4e01e4adfa0
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.gz) = abd3144c85d886bf6ed4be0315fe8a6f027d7c31be94d4252fc005c243abe8ac92de6fbb6a5459c0ead867de119ec83caaf6a078c6a6544dfc8c0a98661ed11a
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.gz) = a2e21620fb48f5eac2314187bbafd65cfd80cbcc
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LAN.gz) = c3681279fd8bb4637c6552ba2be82ea6
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.bin.gz) = 3abb9efd6ce8a3dc1fe36eda3e3544d40b8fadaa
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.bin.gz) = 881ed27f7a5b433a6189fa71445db10f9525396c230b1c28a6bdaca291ac658ea15b479cb0bea31a9f1e97ce3d348ec10fbb590c46543a3beb0284b3b12cacfb
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.bin.gz) = fae500b91381408aa48f2cbbd2f10ff4f7f10744
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.bin.gz) = 5b3c31bbb5f5ef0a547728d1d38fe0ad
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.gz) = e108054983abed92e290fb262e94a13afa9d9863
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.gz) = d7c0232734a6cca9d6e077da1b287dc2dbea5c195efd838de60a90121f3625b56978327fd28630d04249faf4f780a54a9154fdab5bf52226a1e7744d417d9d91
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.gz) = c1f2c381a07c03b405656f033475ca9faede3ba2
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/kernel/netbsd-T_SH7706LSR.gz) = 8c1c70f2f1a89d30184699d3a72d690f
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/games.tgz) = 2040b4af557a62f2ade5fc9fcfe4cab3df88c7e2
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/games.tgz) = 8b5071337dc844042537c24c75660e61c9709cd10cbbeab059a84da6d482260b73365ff3870f85060c130a291b6f02be174d288127ca62ce4d291a6982192317
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/games.tgz) = 28acfa5a131d52df7c157e2edca1dd0f20e774dc
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/games.tgz) = d82c46dbc0021fd4694e464042936052
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xcomp.tgz) = 53aa1e2a910e8eed09dc07f8b724804f53fe5e2f
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xcomp.tgz) = 24645da85419528015cdaefd0c835741fa801392e795b363bdfc39558e75e7f384511c0668d12e2440114b7c543c7532aaec438048f08d35c54c9c7a748f20c0
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xcomp.tgz) = 60a461ffc1f1562274110d65c72a541ee131cd21
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xcomp.tgz) = f1d2650a8d7a4ecd60fda8e1aaf8c09b
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xetc.tgz) = 1636a6fe3e01f6d8a07a19cd204a6807c8caa4c7
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xetc.tgz) = 9cea4ba4af287dd57e591d4269f2f2582010250316f323746ac56b12cefcf2590b93fbb0197c665f61b1df41dcca62d17fb6ad80d4b1feb8ac8265e91e15074f
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xetc.tgz) = 5f68e3f96f7bb9ae07fccdb1d058e4b1307b4b29
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xetc.tgz) = da84d97230787283e215a4ee1c4053ad
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xfont.tgz) = 97439ccf6840b18b1e9885f5504a401bf1a93650
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xfont.tgz) = 3d15541f7d7ae2128f44355bf110415adfa4e5182829259d2c6f7a4217feff99e236d13c5bb7bbeb724ff1a09ac1f58f02bdd6eef528bc416ec3118db6fc7d45
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xfont.tgz) = cdc9fcdb5fd5032803d5bba18db58f3ea6d62c85
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xfont.tgz) = a8466a0477c6c443eafe99e9d1c61131
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/base.tgz) = 125d939841f4c0d2d66af02a7cafcb788e62f49e
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/base.tgz) = 768d8f497c4f735be3799406807852393df11f432b5cc9b1ec69ebe56953f1592a48794629c6cf556eb7bbfed2fd8c0c308b91ca9349256d28ce475a75c44ffb
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/base.tgz) = 94a40312cf09aa8867a6dedb8cdb8b3fbdc00f76
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/base.tgz) = 2f9a062d6116d6c89893fc2d0568521c
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/comp.tgz) = b1c32d11d282303c29854fa152b78be77361dfcb
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/comp.tgz) = 715ed5bd87827f3a84d78b28e855c28ea91944b02c1020551d1fa171239547c7b131f11149fae355ae75aae3059c1cbdbaefaa8a22e6daecf26dd045193bd424
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/comp.tgz) = 25c1503f1c807c8edb6521d85a26c45130b066e1
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/comp.tgz) = 5b355abbc1cd023a56a5d91b06b00883
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/etc.tgz) = 9e2708dd9d1dfabdb39ed6979adb744ab09c72af
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/etc.tgz) = c13a2812104b2f36cf94129d638cdffdd62bb86928eb1478306e205745ea5dc56038e40051da26a94cf56a25a6acd46c86cec2e4e04680715089dc8591d84e0c
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/etc.tgz) = 741003e38321059470fcb7bd727ee4c05add965c
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/etc.tgz) = 474217b3b8eb1c86fba55ed465eb0bff
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/modules.tgz) = a6704d748c69ac31bfc6277d625ba6ecce318deb
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/modules.tgz) = ccccacf090cf2a8dcef8df2c43b99f188d6a8898d30546d2f69341819e9feac6f2fd92e0f14086c45e9afcd462a6e4320ef3fc13bde002f3c697094d2d98144e
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/modules.tgz) = 68a529c0d25d89b79bc283b265fb5fd355328d2f
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/modules.tgz) = d7d56e99bb5ba43313e55abf65901ef0
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/tests.tgz) = 68b5f95807399dc8a592abdd911d015938152e1f
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/tests.tgz) = 2798d89e86057ced5d3e12c7771db2e94a96bd6c09fb49ec5803a56d0c484ea0614a1ea6a8a8647ec4427ee34fc191968e9a4025ca1257d072adcd536bc7c3f2
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/tests.tgz) = 6a3f335d038da0dcb81227f0b909399ddecdb0c3
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/tests.tgz) = 7de6b24e3df249a77cdc4c002259ef30
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-AP_MS104_SH4.tgz) = 74f70ee0502eab199c5d1a5855698772627c4ac7
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-AP_MS104_SH4.tgz) = 76656c9b809e842a7db95daa3a5210f845dbc1a6cc2c05dfcd2d31b4404178ab6c3f9dce8705c4c1f1841ee6d75121fec557ffe25660fa24b492e4ee3f4dde4d
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-AP_MS104_SH4.tgz) = d4e2fc853980b624a04b6a4f895a65ea99c3fa6f
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-AP_MS104_SH4.tgz) = cbf232a6d90bbb23a2ff524dc95d0765
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LAN.tgz) = bd3d26a06d12126b4bcfd594ec43b5b1b2b141ad
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LAN.tgz) = 7eaeccc298861c058298a99c1f77c4bdc201a4dd11704fa3033177412893e3934f4f6018ba26604c0da00d1544f610af3e606d40b647d25f4d758ebd3803e3f0
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LAN.tgz) = 802229436fd22dd4213b8ee964c06d0e264032cc
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LAN.tgz) = d0f7d8401f8a43421267722847806897
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LSR.tgz) = 07c0d72f0d893ce0812faf6c6a5c98d7b3b58035
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LSR.tgz) = 8c724d951a2492d879318720c6e768b86094ffbb935c6107ec0bc42fd225e45ec2ac301bd6bad4e2d8df1b59fdf10f0c68df542369ef57c2e2b4ab537b39efe4
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LSR.tgz) = ce3c2734ca7c81d61f7794add983ac3d40d6c0f1
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/kern-T_SH7706LSR.tgz) = 9efdd97f65905080d86975228272f5ad
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/text.tgz) = ec93765a5c45be2526dd74721c706cf2349cbcad
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/text.tgz) = ca1d8ae749a5cae5b06f568bd4d6cfb9b0af76848cac05b3d6bd6e1bbecbf84a76213064de51cd4ffff3062b5ee039fb7a99b8336474b39110d298dde616a51f
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/text.tgz) = 55c63f02b460a593dcca374f26d03b9595b6a20a
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/text.tgz) = a7d639318aac350f9f955f97035a8fd4
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xbase.tgz) = 4cb422608de78100a7b3bb2113f334951a6d8602
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xbase.tgz) = acbe1e8859d013a1756d97db9bb194d7ead04db13102f45437f1e3054308471ca2c2498cc0c60c4ac8f6431e58ccf7ad4bae62a9d8e2b9857689af4c0f637de2
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xbase.tgz) = 94f03b6f83e22818d2c98c726a4065680049385a
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xbase.tgz) = 7e4b59a51385b2d05aa15b0d98179e7c
-SHA1 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xserver.tgz) = 1423504dda963a794f5710462bd0e3b0ad2a23ba
-SHA512 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xserver.tgz) = 36e50002ccd00c6e945a3e9f49f3f210a3bdd5c493aad4932cb81d30ffcc22ab1d11403bfa04859153148bec4a1c57d6f8d2206dc8ee37dfb2ccb23914144c8c
-RMD160 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xserver.tgz) = 23d438695d917fcf7ece054eeea841fe02bf268c
-MD5 (NetBSD-6.0/evbsh3-sh3el/binary/sets/xserver.tgz) = b526fe22ecba0abf60efad839e21f4d7
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.symbols.gz) = 1a3978b4d00f62cb2ff6277dcdbf79fa3f9bf2eb
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.symbols.gz) = b504aaa9957cb2b08b5656c1c38e35697d38b3fb8f7fe2dcd2942bc0dcbf7d7fd6cfa1ebd79f536a8cb8e86eb1b69a3676afb3c01f9cdd50c2a61a8fa7f6fcb6
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.symbols.gz) = 48c1c3a15270f558fe3b30cbf745a790e51acff6
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.symbols.gz) = e2e15163e4bae081865da32d01514e6f
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.bin.gz) = 873515f4532952c89f5a9f6d91a3f7fa7f948490
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.bin.gz) = c19c7a649d4723f255d79005c6da3caa022857e7a7dfee1afdcaf7db9138d777eebec9a2715032e461ec10129403bbdbb25a5bde1eb84efc2a1e7dc044921149
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.bin.gz) = 18f832108e5af4f1db1314b3d619950f22660c32
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.bin.gz) = 5c15217d997a48ae98f97ef5bc1d9f37
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.gz) = 86b21fd531bdc7e87b16064ae739b5dcb3c92e81
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.gz) = 4e2413b98a091922a7b468169345e4c5090b87264b7232105b0684c2511c78d44a0b0b72f9a8c4ed37bdfb1f24826f87347f883074225fcdd715cadbbf6e8b2b
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.gz) = 882aff308401e9ef5a895233e0759a69840da2f7
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-AP_MS104_SH4_INSTALL.gz) = fa60323505d7a47e47b73dc44e394e47
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.symbols.gz) = 349e56359f7f6dec8f0ae526b3a789516a9e4f88
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.symbols.gz) = c1c075a4ac229add650e83aa77c6d7efe562793645fe7ca868234f53bd79a112f2198905255f0f03e8bdf7a2e44904146907aaf67da9e41652faa7014686ba08
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.symbols.gz) = 6c87f32161c4c2d529cb6a8026cc481dd1d42139
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.symbols.gz) = b64153e036a04f448159999e4f96b863
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.bin.gz) = 23b1af2b9b450007d33c9c68946d6650f8121077
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.bin.gz) = 51a3cb3daaba5d099524325af6a4f32ed164bff6118e88c1e4a5f33ff8a69df456833e5a041396179660af053bd0d1c6a43b5f72ad524be4e61ae9e833222c99
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.bin.gz) = e5bcd565add34239cf0c2083fad873dd12f4e13d
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.bin.gz) = 54fde28b5da7660812ff14933dabc902
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.gz) = 26f7c3703bac98f6350f5a2423f5d9df4a46bbb3
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.gz) = a0a4afa1c58fe9ae74fc03a3780ce16d10f6f00ed6db84e713e2fa51d3b6fb697e281f412eed74d30206edf624ed3bb585b7706252cee2ea37b85de9ed7fe2e4
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.gz) = 6e9be1eba2d6db27781fbcc035d794758b4dd444
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LAN_INSTALL.gz) = d2d661e75be21be7987c548ee785236a
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.bin.gz) = 9f3fabe29ffe68e56430d35f894893491a16c169
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.bin.gz) = 8ca978143e29fed1916beccb35493521ad70772cc7d4093dd2d2d0bee973e06275abd8167a072db9d79f28d2cba1394d7fd940baaf8d55c84622db60ecce735b
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.bin.gz) = 3ecea6d66ed1fc3adb83b5e68d7b5d03ee2ab8ca
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.bin.gz) = 853aef3ffec3749a8e387c0b8cf9c183
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.gz) = 5ea3158a1ddb01af1b0ad97d2788d1e70341faa6
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.gz) = 9d2e7c9da144cc79317b2e40f737b09f5320b90c920d7927db332ed3638c68b5cfbdda3f8dbefcb74330e98bcd9163d9003666b842ef74aada7b2b609de25b1a
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.gz) = 1f2d464e7b2c50a3c33b0a7d2076ff44627e476d
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.gz) = 79f028dbbb91d2c182523ef5d1a26b1e
-SHA1 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.symbols.gz) = e1393c12d538858fc67c3dbb850099d363802af8
-SHA512 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.symbols.gz) = 1a2d80f70a65e38f036a652bcad7774bbc11df1ef51d96868c988dadd25e07c96c2c19d29095b8cebadc6460b2ed5fd141254313d8e3c3f968098cfc136a1b95
-RMD160 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.symbols.gz) = 50d94667fa3c0d7f63e9a6e202967ca006f2f00d
-MD5 (NetBSD-6.0/evbsh3-sh3el/installation/instkernel/netbsd-T_SH7706LSR_INSTALL.symbols.gz) = bd8daee983f82ce040f96f6f929f273d
-SHA1 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.symbols.gz) = 25a30d5745b993e2102a3786fe1a6f39f470ce45
-SHA512 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.symbols.gz) = 2c6541b1f613443ffd5f7b331a19ec7e8426783232e3fa9241e621ed96ced5e030fcde14e27c1127e336d74f60e21908f2ff4240285df516a5315c37d5e39943
-RMD160 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.symbols.gz) = 5736b4fd760d469af93d177f831ea83e63fcee43
-MD5 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.symbols.gz) = f9ae07f7f20a790a2bba49ed48e9f50b
-SHA1 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-GENERIC.gz) = 4c6d1486cc99844354d97e2b1b2ebd6fe061ecc6
-SHA512 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-GENERIC.gz) = 6f5e544688a50385b3c519e4929508d663e646457c832cd715d0e05ef5f1ef38a40206c90e95356e17cdef5eede141f10371abab306b534087afca9b65536061
-RMD160 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-GENERIC.gz) = 81246f09144ee348e548fa9b7cee0d410ec98f38
-MD5 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-GENERIC.gz) = c861b19c9c0ac6c97350564aebddbe77
-SHA1 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.gz) = 95a9a9ba6a613ba5be0afdd1457f7243f01d7efd
-SHA512 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.gz) = 8a36cc3704bc474e9ca4542c8cedcf59dfb93b71a2a5ad44d4c605f059cc515742921eb6de4b64382735a09ae9a72c1fc14e08107480a5090f4319d196a304c3
-RMD160 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.gz) = 5577d47f6a4429aef2e64789a3ea604718275d7c
-MD5 (NetBSD-6.0/ews4800mips/binary/kernel/netbsd-RAMDISK.gz) = cc1a04eff2275ed68971e5799b9d8af9
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/kern-GENERIC.tgz) = 81a3b610f413d0a6be35c6de2b7047dc4dd1cbf3
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/kern-GENERIC.tgz) = c9716b08912af531dc5304baac333f34ddc0899bca52dc53185bc48d22217613c03533bed4d70faa01423f0a253d2d03ecc6e1c1704430b28eedaec74110cbab
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/kern-GENERIC.tgz) = 5cd01bbebf5245014d265995f6f96e699dd4bad8
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/kern-GENERIC.tgz) = 5a01f783440f099de1bd80cc3abeb52b
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/base.tgz) = 7b4b71623002896a52c0a7c9efe856a0c95de7b1
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/base.tgz) = 97361d892e6c9618569c1022f7b2c2e3485cdf3f1db8b3da1fadd8051a9241dd8baae01c89ffc4b2209651df13be64e8121fa34e1e9373b877add6a4c497e72e
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/base.tgz) = 93372c7049c0a931f1f408d764c3a25600944d7f
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/base.tgz) = 0ba9f6bb4c14ce56fb8b4c24d28c5b54
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/comp.tgz) = fb67d7d7410b3489167d90ac9eab8739d5981b69
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/comp.tgz) = 123e4214744b4b319f93de9443465a1185a755ad34053ef82ed74b5b859ab2ba08655528b98110f7b90973c2f6fe6cc4567d83117e215078819d5558e4795829
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/comp.tgz) = 2949a78034cb32eaf732d7127b21990ef697247e
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/comp.tgz) = 1eaf1d6e18c59de98043f4e477aef4d2
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/etc.tgz) = 9112e98e3b0e6214758b386e4d49dddff2c53fa8
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/etc.tgz) = f6e54b49bd6585c117474ca5a04c9efecebb63f9c074b5e81fc73bb8c4508d21695f8b6689aa518b0a156c1d0fc3653c5d7487e7f373c5eec679bd7d5b80bbc0
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/etc.tgz) = d797fc90bbdef32b5b9d024d4363acec2abbf787
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/etc.tgz) = eb8800ef4e55b63b58066f1f85001efc
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/games.tgz) = e4e2e655f93f3594f4db543839016077023fd1ab
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/games.tgz) = 377f737cae00cc7d9ccc2eae825e68d08a9f6d09474f39294406699ff7d9ca5a0a4347004759b6da9e3a4fb46f3e7ea14c90183bd0ee983cd3625bafb1712e23
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/games.tgz) = 96e4da250eec674b1f3a795026593364798b6a7f
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/games.tgz) = cefe2cbb2de8304de93b3fdb34c664ec
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/modules.tgz) = 5179ba1557042dd0edf4b0dcb43feeb51a51fd9c
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/modules.tgz) = c1f026f1e1ef0dfb74347a9f846971ec05d9c9cd27d9480b4dca4105d7f87c39678c8c76557a8bec407b985087c2371f47856cb81912ccf0e8e219d8f2b1ba4f
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/modules.tgz) = 8cacd504f4fce3b4547758a812d28fc41f1c29a4
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/modules.tgz) = 17f5259f27b6b9e35e05d38e32a47bc7
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/tests.tgz) = 05f79c3300425fa9c41fb0f6d4b67bbd22143c43
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/tests.tgz) = 5202c4bf6086643686bf4fef3927bedb17262acba8c62bfad92db632d6b545a9ffba8eafbb237f8076beba9da3f496f2da068031745bbad9c042d84b954d7bc2
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/tests.tgz) = 7dceaf484da2d9856cbea453914309af8f75faff
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/tests.tgz) = 379a301eaec46b70599b92ff3d69e568
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/text.tgz) = 591abf75de4e52fa3c188ff87fe5fbf28f541766
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/text.tgz) = 0fa9434b5447025c84b3fccbf175b25fe975e88fe711126a9b0625fa070bcfc05c6c962dc59a57ecec38e97e85455911bdc59c411cb6ea9ba2232256191fea4b
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/text.tgz) = 8ccae27fd5067d3e60148abc0751ed5cfb1fb10a
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/text.tgz) = 93c20890d37a4c4b7aacb3cdd534070c
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xbase.tgz) = 5516e5fd661a6aa8886689fbeab06f0d6ef315bc
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xbase.tgz) = 16f7b97341977b5b7d1629598d8cc250b0fd361f01b2b65afff93dcc97fcd81e3df2b20b42ef37902b64a20fa5a96c48407eac6f0faa8f6467bddfdfa6dcc975
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xbase.tgz) = 55c47dd7eed35b436fb033ce22281a13d3c016fb
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xbase.tgz) = 949eb603afb4e09b5c53facf3ffcba03
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xcomp.tgz) = c20568ce72c1ab65b9b2b7d6063d4b330c67e0dd
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xcomp.tgz) = 5ce8a9f1749abed8c536fabd262ca65297d851a26dd108bf917171ae38dc82dda3ecc4315b5d532e8a393778ed566394c3b7a0cd4d8140f4e9ad275371360504
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xcomp.tgz) = 138ba52cf36085ea08c8f9022fce482e2b119b1e
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xcomp.tgz) = 9267462e8d885667f784d3e444574bab
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xetc.tgz) = 0b6040849347e71dc6694909b064c46858ef7267
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xetc.tgz) = 94cf5fe5f971595d5e17d182aa5fd5cae717fb030336783ec18b34bc054da2b183c184e948b75dda13b1b31468bdadf228682c586e2c1687f4acca2c3545da04
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xetc.tgz) = f90d3564bda34f368372300e7e0f1dbc716f0761
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xetc.tgz) = 08fbdb1532ed26f606faba4a71052f15
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xfont.tgz) = 1c83cc716a88a16e480948fb712c55617dac4840
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xfont.tgz) = b1913d99dc60c680f2fc82aa8d2ff0970cc7c5a712ca412445334cc2b6136993b6fc58c27aecf12d24455bd8ed5e434e4b6e7067b87f8df73960c5b090f4e624
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xfont.tgz) = a079720a15cdc7659a8efc5a3ef574814993f517
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xfont.tgz) = 1ceec721c52139d9b94d42631fb45b5b
-SHA1 (NetBSD-6.0/ews4800mips/binary/sets/xserver.tgz) = 5acda874d4e98472f3bde4d22ee5c76f8e63753d
-SHA512 (NetBSD-6.0/ews4800mips/binary/sets/xserver.tgz) = 044bc28fb73dff4c2c50482adc2b69ec1b0b880b40ca25ea528be078b8f1d84e9e797b5238ea5ce0103aed54f5b32d0ff96ab67661156e28e9969aebe33a548b
-RMD160 (NetBSD-6.0/ews4800mips/binary/sets/xserver.tgz) = df7ea47ab25dbe8529abb8f5dc1d49cd996d6cdc
-MD5 (NetBSD-6.0/ews4800mips/binary/sets/xserver.tgz) = 20191a4f5c5a6cca80c760bfd8836183
-SHA1 (NetBSD-6.0/ews4800mips/installation/boot/boot-RAMDISK.gz) = c0d874d928968bc07c4378652d9df32f5ea0367b
-SHA512 (NetBSD-6.0/ews4800mips/installation/boot/boot-RAMDISK.gz) = 2cfedab16bbb540c131f2518ed74ee2692d96d8a11d008a11279d4c4b95cdf52fb76baf81823e49d3037f1f5230c1194a473f9e0fd37b36025a14988f6e49de3
-RMD160 (NetBSD-6.0/ews4800mips/installation/boot/boot-RAMDISK.gz) = ee3f845cb765fca243be9bb84f17162c7a865304
-MD5 (NetBSD-6.0/ews4800mips/installation/boot/boot-RAMDISK.gz) = 42ccd2d2f905ccadd7497ccd4ff91996
-SHA1 (NetBSD-6.0/ews4800mips/installation/boot/boot) = df1c0cdcdea86e38dface2a89e2fe26dc7df108f
-SHA512 (NetBSD-6.0/ews4800mips/installation/boot/boot) = 6007e2ed816488fc00fca543ab2541f5db95f7a6ad44d4dbde05f4a397fcbf667a41290f7fab5249d6a2f80870a6c04a6bf061d8a25c91b496cbb02d5699b29e
-RMD160 (NetBSD-6.0/ews4800mips/installation/boot/boot) = d321a217c04aafeb530f5d3eb29954eda9fb5838
-MD5 (NetBSD-6.0/ews4800mips/installation/boot/boot) = f39fbdcdde61cea48a1e10e426480550
-SHA1 (NetBSD-6.0/ews4800mips/installation/boot/boot.coff) = e0b297b3888ffdfd4077e67124efa2444194cdc7
-SHA512 (NetBSD-6.0/ews4800mips/installation/boot/boot.coff) = 2c465d178b1c8b4688249410c55b6224b06436dc0b42f09028bd1ce7352c2542749a9e3b685b92f670d3401d6b3b207dfbbf549e19ba38bfe3522f09e08f9429
-RMD160 (NetBSD-6.0/ews4800mips/installation/boot/boot.coff) = 7e7161d03b7f04a55c35dfd8c34a2a5debed56c7
-MD5 (NetBSD-6.0/ews4800mips/installation/boot/boot.coff) = 6bc92c0ddea36ee0816580d8cce6167d
-SHA1 (NetBSD-6.0/ews4800mips/installation/floppy/boot1.fs) = e706f91cc1733ab264473d3f1a887285ca79f013
-SHA512 (NetBSD-6.0/ews4800mips/installation/floppy/boot1.fs) = b946e58e4d1318d5be27e7bfc943b464309c02c63b936f3d11f57a519988d8847b172f30e2d61dad13bd672325dd2dc9ad502ddc5ed0dd49ca5583c1c51c1fed
-RMD160 (NetBSD-6.0/ews4800mips/installation/floppy/boot1.fs) = 16d59bb5fd830cf9551e4184bc338b7395bef5f7
-MD5 (NetBSD-6.0/ews4800mips/installation/floppy/boot1.fs) = 1a09cfb0f06ab364b4a5b55754474310
-SHA1 (NetBSD-6.0/ews4800mips/installation/floppy/boot2.fs) = 73d13ad2676d8db24c4c53e59be5cd53a70e7dee
-SHA512 (NetBSD-6.0/ews4800mips/installation/floppy/boot2.fs) = 4841e1aeb787ece67e3d172c2a614655746beab89f2b09a7566d36979b57d5793d0a308122182e1ca4e052257501f460d0e3d692ef701a1c869041b95e452c14
-RMD160 (NetBSD-6.0/ews4800mips/installation/floppy/boot2.fs) = 3fac30b411e6650a18a85afdca71695e7ecf2d4b
-MD5 (NetBSD-6.0/ews4800mips/installation/floppy/boot2.fs) = 4f501c25c15a582ed08e3e211c040506
-SHA1 (NetBSD-6.0/ews4800mips/installation/floppy/boot3.fs) = 32e2072f8bcef77633e24ec29215c45d2a448c5e
-SHA512 (NetBSD-6.0/ews4800mips/installation/floppy/boot3.fs) = 31f812f795fcecef8d5acf1511e0ccf8a498a51a199cef9384e4f197ecb28409fe9dfa7ccc66ea88fdcdfb7c11bbf2a908f3afda7aba16d4adbce172c48a291c
-RMD160 (NetBSD-6.0/ews4800mips/installation/floppy/boot3.fs) = baa412f7b18b72d89a2f7468b5d10bf76aa1a437
-MD5 (NetBSD-6.0/ews4800mips/installation/floppy/boot3.fs) = e0a8da5b5ed80730a3c4ff8ec316f22b
-SHA1 (NetBSD-6.0/ews4800mips/INSTALL.html) = a2b19549f5348d2f1d52980adce6b6dd1c5fa58c
-SHA512 (NetBSD-6.0/ews4800mips/INSTALL.html) = f70a62de3ff88606a2193b8bf01036b6770079bc8e5c7912c82e223d81671f8e2bc6dddbcd1022fce4352bccee3a1c19c90a2b1fa72bd12bf7edcf4dd42fb101
-RMD160 (NetBSD-6.0/ews4800mips/INSTALL.html) = 500263b32d3fd4f6459496b7e9d250d0d048c79c
-MD5 (NetBSD-6.0/ews4800mips/INSTALL.html) = a341d2e552eea54e2887ab795e752d24
-SHA1 (NetBSD-6.0/ews4800mips/INSTALL.more) = 112fc313673a7ec94f1c6a7ab3ba79d232e0b866
-SHA512 (NetBSD-6.0/ews4800mips/INSTALL.more) = 61df394591fc7b7554c82ced0edec2bd62e7a7e98e0203cc908c6fa48f961062a42148b856f2046f9a3d5262de7d7cc392c15e346b0bea8ec5ef2717760dc30f
-RMD160 (NetBSD-6.0/ews4800mips/INSTALL.more) = e92e60dd50dfc2ed354ed18f01cd412f62257367
-MD5 (NetBSD-6.0/ews4800mips/INSTALL.more) = f6ff574342525c12f5e039e524ab23cf
-SHA1 (NetBSD-6.0/ews4800mips/INSTALL.ps) = a5e622805b2d9d7f96b2aae0b819b7607335d8fc
-SHA512 (NetBSD-6.0/ews4800mips/INSTALL.ps) = c8cfeb73d5c4f033877795597dc9edd1dab7902a9753b09127bd9e1875d55ead42746d06b3b31b6ddecc19d876495201736b9ef6c242c357d0bca6d74aac9dc3
-RMD160 (NetBSD-6.0/ews4800mips/INSTALL.ps) = 07d50c1fde4cd58f0db754495c39509f69e1dbbe
-MD5 (NetBSD-6.0/ews4800mips/INSTALL.ps) = 831c1f71243c24726c508a45dfa97dbc
-SHA1 (NetBSD-6.0/ews4800mips/INSTALL.txt) = 6528e1b0d61bf2daab21a1ad8b36dfaf56ef8289
-SHA512 (NetBSD-6.0/ews4800mips/INSTALL.txt) = f2f1d34cc0d64c9764604de75197554e49095f305042d0d729da16a0a8edfa4792ce647d3321072af4c1980367270b7097275b32bcacf841409ba4eaa6e97edd
-RMD160 (NetBSD-6.0/ews4800mips/INSTALL.txt) = 5311f44e35a9074f47aec723c579e2c04e9928ea
-MD5 (NetBSD-6.0/ews4800mips/INSTALL.txt) = 1e6dfee2b6a42e87aa56dbf9f345174c
-SHA1 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.symbols.gz) = 3e4f61e16b7b76ffbda7ab2b2826ed6e47f55cac
-SHA512 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.symbols.gz) = 7c0389792e3d8722cd6187619978b413194ec8aebc17fab04ea75f37207c1c74bcf6f44a70beb5ca6712382b745d37d6e1ea3c87e1e93cf03c5891b583f5b513
-RMD160 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.symbols.gz) = 94f4e2e55d48069e13e05c43ee7688999a9d8488
-MD5 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.symbols.gz) = a1f4d88bc66a8924f563b00b4c194823
-SHA1 (NetBSD-6.0/hp300/binary/kernel/netbsd-GENERIC.gz) = 70a5a051fb4b94008c3598cf7432e40048ac15b5
-SHA512 (NetBSD-6.0/hp300/binary/kernel/netbsd-GENERIC.gz) = 342651536f367f4adcae4435afd623af0818e56362ba8f8c9376b49a0f2c57af2ca568edd32954744792904aa1fdf98392d398d75b5c8cc4f30ac456fdedb62d
-RMD160 (NetBSD-6.0/hp300/binary/kernel/netbsd-GENERIC.gz) = ce09eea6cbeaf12e2fcd4aabcdb2047e48c686ac
-MD5 (NetBSD-6.0/hp300/binary/kernel/netbsd-GENERIC.gz) = d1b8cd8ebde9c0bf97177f7cc8615bbf
-SHA1 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.gz) = 653c4beb8dc20a0c8d66e9cee85225fc221b5e8e
-SHA512 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.gz) = 62259ecdcaf08723230e0fcd0c9738fa3b4e42954e114146a7bfc11ab775adf2c36a7924fc9532ffeb5b50da52c9789162b56fd991511922a074f109edf22212
-RMD160 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.gz) = 634dcaef5fd936621863005e583978fff3f4638c
-MD5 (NetBSD-6.0/hp300/binary/kernel/netbsd-RAMDISK.gz) = b4cfe5ee1d9fcffa55595ceceb2cf7dd
-SHA1 (NetBSD-6.0/hp300/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/hp300/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/hp300/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/hp300/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/hp300/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hp300/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hp300/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hp300/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hp300/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hp300/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hp300/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hp300/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hp300/binary/sets/xbase.tgz) = ffc6dc889560371042dd12a5486a9a2c499b86a9
-SHA512 (NetBSD-6.0/hp300/binary/sets/xbase.tgz) = 9aa2ba4d703a13020acf8543d1efcde76b6f0f4b411be20f804709b3802e537be1e651eba469830c4fd4777a379ea9936200a3a3eb4b1a702c04bb81aafcc723
-RMD160 (NetBSD-6.0/hp300/binary/sets/xbase.tgz) = 3ecf53e7414ef859a47fe5afc108cf3bfa82fb1d
-MD5 (NetBSD-6.0/hp300/binary/sets/xbase.tgz) = a6af002ce158cf72eb5c6a7cde2c0989
-SHA1 (NetBSD-6.0/hp300/binary/sets/kern-GENERIC.tgz) = 7ab2f7be438f52926aee3c94e07951b7eb288775
-SHA512 (NetBSD-6.0/hp300/binary/sets/kern-GENERIC.tgz) = a4fdc0d2604b8f00790d8a3766bca90391cde8f0f564b7409738f151355f2bc1bc512a25629ee45ba7321a8791f983dda206124a7280ab082f7b255d50b57df2
-RMD160 (NetBSD-6.0/hp300/binary/sets/kern-GENERIC.tgz) = 85283b11855a8e69be87b21678328f4a675ca02e
-MD5 (NetBSD-6.0/hp300/binary/sets/kern-GENERIC.tgz) = 64374db1afce82099588ba9afc920440
-SHA1 (NetBSD-6.0/hp300/binary/sets/base.tgz) = 06b4b615865b0d72c01ca5676c7755af13eaec39
-SHA512 (NetBSD-6.0/hp300/binary/sets/base.tgz) = 326b28bb808cfc55a3f25766ba747483c7b1ec585b56ef8deaabbb62e3a6adbee3af61eeadf34ea1b6ff41a379e267bfea7516ee2bd80684e3228913c11f771f
-RMD160 (NetBSD-6.0/hp300/binary/sets/base.tgz) = e1bffbda1eb605d10b7eb6e607971d53ba6bf26a
-MD5 (NetBSD-6.0/hp300/binary/sets/base.tgz) = 23ecb1b54aa4c4f5d8a3217a1ef01ca0
-SHA1 (NetBSD-6.0/hp300/binary/sets/comp.tgz) = 3031c0b6b9903720a6b1fe865c366faf35e35af9
-SHA512 (NetBSD-6.0/hp300/binary/sets/comp.tgz) = 37ec2ee919d9d087dd0690cfce76d6be60abc618c3939ab32941ee6c0990c9d5de75f0035f56d2c501d0c5f6e016098bacd502eeaf0849c091dff2ec1ec52cb4
-RMD160 (NetBSD-6.0/hp300/binary/sets/comp.tgz) = 2b934c679fb8e8c0f79a2dcec65e9ffb1ee3477f
-MD5 (NetBSD-6.0/hp300/binary/sets/comp.tgz) = 5db470910b6991bd50d1003122e50bec
-SHA1 (NetBSD-6.0/hp300/binary/sets/etc.tgz) = 6f8edda4999c8a4343fc2bc279241b9550ea490c
-SHA512 (NetBSD-6.0/hp300/binary/sets/etc.tgz) = 562d88456cedf5e071d8fa1d93a8dce22f687ffdac77354129d67db4f701cae1af8108a27d9bbd3fae6035f29cea3438d08954e4e784e0a4a103bbc97362179d
-RMD160 (NetBSD-6.0/hp300/binary/sets/etc.tgz) = 924ef5e6623a78f068d2be3eb41d7acd6dc767d4
-MD5 (NetBSD-6.0/hp300/binary/sets/etc.tgz) = 21fd073754ac797a337928786b03c811
-SHA1 (NetBSD-6.0/hp300/binary/sets/modules.tgz) = 83594fc109e081cdb189cc607f9f0e2bdbd17149
-SHA512 (NetBSD-6.0/hp300/binary/sets/modules.tgz) = 0741d29e6d7a9ab7bdcd0f7d24cfdce277787bb4e4677035222b34a66570a245279b257b1adb1a0e174af3009ba8f54db7801238b754365efee73af0c1aedef7
-RMD160 (NetBSD-6.0/hp300/binary/sets/modules.tgz) = bdf66666ad75847756c3fc123fdcc44ce959e1af
-MD5 (NetBSD-6.0/hp300/binary/sets/modules.tgz) = 28892a09bb10b455457f5f581f57f2f0
-SHA1 (NetBSD-6.0/hp300/binary/sets/tests.tgz) = a5ef542440872976bdd13a62aefa0d14d61c26c0
-SHA512 (NetBSD-6.0/hp300/binary/sets/tests.tgz) = c3f7eec4bdf7dee4746ce7c6f234fb0fd98b97cf4d8eaf6b3ac2f90c3e9ca5cb8cdf35427310135ff7e90f81f584ac3e42c5e7ccfdf2de03c07bca5b5768e078
-RMD160 (NetBSD-6.0/hp300/binary/sets/tests.tgz) = 1088670cc9cf63a9232b07ead39467b939007ec5
-MD5 (NetBSD-6.0/hp300/binary/sets/tests.tgz) = afa98cf6d10be6bd60a4122ad26f69b6
-SHA1 (NetBSD-6.0/hp300/binary/sets/text.tgz) = 34cbcecdf88d3b20397c210adaef51a7aeebdbf1
-SHA512 (NetBSD-6.0/hp300/binary/sets/text.tgz) = 9718fde476237be7d04c9e3bc0fef0ac97fe275d6c98cc58f42e4266a7501b8a95e0edf8b46e1a33b4aef67222731978be2fe427d52993a0fc8ea30185411c5c
-RMD160 (NetBSD-6.0/hp300/binary/sets/text.tgz) = c96e584c3615a0f4e9eb12a8542b0fa8e60e1f1f
-MD5 (NetBSD-6.0/hp300/binary/sets/text.tgz) = 3dc6892231a62bff94ab46648015667f
-SHA1 (NetBSD-6.0/hp300/binary/sets/xcomp.tgz) = 55de1ba9512bb95b3678c1569840e740e6f5b556
-SHA512 (NetBSD-6.0/hp300/binary/sets/xcomp.tgz) = 83011012f7ce5cd11e58e12f068cfbb5ee4987d40aeae1026503899cdb9d5cf4d4edd6497b2ef0a3e75894d6bcf962fc3492572b51a505fae38ce9d12e4dc36b
-RMD160 (NetBSD-6.0/hp300/binary/sets/xcomp.tgz) = d696a85c3da7325eb570111f63f9d3517d47572f
-MD5 (NetBSD-6.0/hp300/binary/sets/xcomp.tgz) = 5729b37859a9265fbbfe184d66daaa9b
-SHA1 (NetBSD-6.0/hp300/binary/sets/xetc.tgz) = 64f0dab5e32092b4ea7dc9352efd06fd648f5f4b
-SHA512 (NetBSD-6.0/hp300/binary/sets/xetc.tgz) = 6fdac8545bf826d9a263cef4354914842986159aae07cd49ffbdda2cefeff6906f3f369141e0f54a213f4530b34160ac420c91c0fa9638354f244c1a625c8ffe
-RMD160 (NetBSD-6.0/hp300/binary/sets/xetc.tgz) = b1167b7794746ee9e9828f6b5d3a34efee1e0fe4
-MD5 (NetBSD-6.0/hp300/binary/sets/xetc.tgz) = fd2d95f88081017c690d585af9cb52fa
-SHA1 (NetBSD-6.0/hp300/binary/sets/xfont.tgz) = 7ff182435282d7ae2377257437bf5f2ead69bf6a
-SHA512 (NetBSD-6.0/hp300/binary/sets/xfont.tgz) = aec8b80b466469fd5ab3d851f46cdeccb90b708401d15bd97301001640888b1d6cb50d4b5df95e95516e74e2b644e9b940be085ecd174a7b165ec6557b15fd40
-RMD160 (NetBSD-6.0/hp300/binary/sets/xfont.tgz) = 1de0aef2c305fd7dd1ed69d5c14ada0f1b709bc7
-MD5 (NetBSD-6.0/hp300/binary/sets/xfont.tgz) = cc29580d8a56cca694e732c04ec99480
-SHA1 (NetBSD-6.0/hp300/binary/sets/xserver.tgz) = 2c9dda0fd8c1e7212d505f36e5c89ad2468efe52
-SHA512 (NetBSD-6.0/hp300/binary/sets/xserver.tgz) = 412e82089215b7a52c4fd12ad4df99d3c2a0ed39207e41b102163ae7a627fd765f6b3b93cf0d197d2122d50a2196f17ff1bcfbdcc99c44f03e4b4cc80ee95455
-RMD160 (NetBSD-6.0/hp300/binary/sets/xserver.tgz) = 133cec24a054a44d8137770ae19faeae2d454a43
-MD5 (NetBSD-6.0/hp300/binary/sets/xserver.tgz) = 5f4ca5d0340f3616df2a4514e9bee2e3
-SHA1 (NetBSD-6.0/hp300/installation/miniroot/miniroot.fs.gz) = 2bffdc8e8f2ad0c26c428349eb4e04adcaaaf0da
-SHA512 (NetBSD-6.0/hp300/installation/miniroot/miniroot.fs.gz) = 6a9135af4681c6b56877b2beff8a5e3e5bd2ae07283f1c78ad2b52d7c56db82779daf57c8c1939aba1dbab03be129372a2d1255f7c23692f548d684bcab2825f
-RMD160 (NetBSD-6.0/hp300/installation/miniroot/miniroot.fs.gz) = f81c0d294b7e481ea7f881e4ee89dfe9090e30bd
-MD5 (NetBSD-6.0/hp300/installation/miniroot/miniroot.fs.gz) = 6e487378f7e4b0cff281e3d2270e0a80
-SHA1 (NetBSD-6.0/hp300/installation/misc/HP-IB.geometry) = 1f0f75de1ee7d8e3181a5d6aa66773677755a884
-SHA512 (NetBSD-6.0/hp300/installation/misc/HP-IB.geometry) = 92d43dab00d4075e373ef3bb391cbfc404778b79b12da342eecc67a3c1a6cd1bcdf6da79ce48dc7262fe8b7d58f62317d4c2175ae67e3b7c69bdab6708509e50
-RMD160 (NetBSD-6.0/hp300/installation/misc/HP-IB.geometry) = c98d08dbec0a38097b07350201358ce795207abb
-MD5 (NetBSD-6.0/hp300/installation/misc/HP-IB.geometry) = 5d37ef7fbd5c7cf0fc9be6ca42e13766
-SHA1 (NetBSD-6.0/hp300/installation/misc/SYS_INST) = a49379b1d8420e60551f6255fef597495bfa6ed1
-SHA512 (NetBSD-6.0/hp300/installation/misc/SYS_INST) = 6c56496dbd3c76c120c9b4acec61a2e91bce64c9c640cc7d2d1aeb7865f57aff311b71526e82eae87b92d5938ce56264d427dfa02b434ce1859ff179e64cfb6f
-RMD160 (NetBSD-6.0/hp300/installation/misc/SYS_INST) = 827a7056af385da9b3d3adaea74d39e819dc0041
-MD5 (NetBSD-6.0/hp300/installation/misc/SYS_INST) = f396854e44d13f00a55e32217d907781
-SHA1 (NetBSD-6.0/hp300/installation/misc/SYS_UBOOT) = 2939db5d57267e58c09ce33be7a91e4842cd8152
-SHA512 (NetBSD-6.0/hp300/installation/misc/SYS_UBOOT) = d609c8e747839742255b0826d0024adb2c9fd6b454e4ab6af71f371c2e437fea20f74eaeec52446d1eeff113edb7a4335a435bd9493d4356f2c6fdabfff6a99b
-RMD160 (NetBSD-6.0/hp300/installation/misc/SYS_UBOOT) = 94935b4c88578641336c28fca15951e613869a4d
-MD5 (NetBSD-6.0/hp300/installation/misc/SYS_UBOOT) = ca853b39c14fb1cf61fb9a8291e86c0f
-SHA1 (NetBSD-6.0/hp300/INSTALL.html) = 8e1c3fbcbc18743ea7a5e551efdb53f84615c5f6
-SHA512 (NetBSD-6.0/hp300/INSTALL.html) = 03450311591c740dd9a59f7d59c82d347f216141a7d297b2aceec341ba73afaa39fe7a97c7d929e93e48db1a38d3e8e82fd5df6036ca1387a9fdcb67e5f1860e
-RMD160 (NetBSD-6.0/hp300/INSTALL.html) = 74b4c33c7bdf6739b4fab6d95811c4a6e705f441
-MD5 (NetBSD-6.0/hp300/INSTALL.html) = b432699922bc91b44886f23df7cf19f3
-SHA1 (NetBSD-6.0/hp300/INSTALL.more) = 1cf75d206beed7a64d40e96fbe895f74a70d1f16
-SHA512 (NetBSD-6.0/hp300/INSTALL.more) = d4ba1700ff39cce32ce327e810d4e87d40d942209a323beee44697e44e541acb0fe44e66d16277a0cda05cbebd0051e6c7573269868b1e7574e6645c678449ff
-RMD160 (NetBSD-6.0/hp300/INSTALL.more) = 89b542e3ef218607f3e65413c3965b7f2333187f
-MD5 (NetBSD-6.0/hp300/INSTALL.more) = 624bd59da093361cdaaab5c1de5cecba
-SHA1 (NetBSD-6.0/hp300/INSTALL.ps) = 382b1bee832f5d64618348011bbafa088821422f
-SHA512 (NetBSD-6.0/hp300/INSTALL.ps) = d986b290afd180501692aca87592c0c71f4a79a2ab774b4b5f28a2fec714547732964125e11ac047afdabbe5f2aec9c44c40d4abbe064716368d012c88a696e6
-RMD160 (NetBSD-6.0/hp300/INSTALL.ps) = 484e2cd1d11eccb452fe023cf442225f60381c75
-MD5 (NetBSD-6.0/hp300/INSTALL.ps) = 532f28fb7f53079a80b851a5ada9cdf5
-SHA1 (NetBSD-6.0/hp300/INSTALL.txt) = 5f6a19f1fcbe957565baf1fae076513a127af37c
-SHA512 (NetBSD-6.0/hp300/INSTALL.txt) = 39744f1a32fa5869dac98bdf458d4c43b55857ea7881f3f66e437c496840707fe2a587be8c38bf1d61593c7d3603d231df56f8110be97a65f6a551d4aa75c1f0
-RMD160 (NetBSD-6.0/hp300/INSTALL.txt) = 026e4872a0fc52ba4d08907a6907cc72a814c577
-MD5 (NetBSD-6.0/hp300/INSTALL.txt) = 025fee7db55908a9ba7a358d3598a074
-SHA1 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.symbols.gz) = 3b574a0a7fa12dccfe7ec7a74f3c6d44b3de73d8
-SHA512 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.symbols.gz) = 3de19c62127f98cc12b223d296bf8c69c262c7cc79e4eb4975eb313c96882f4df8d8bc0ff64a7c57b7e7d30896b49935c5475203a369a8f2e134622dcc29d3cd
-RMD160 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.symbols.gz) = 9c58c704e1a31f946467144840d8eeb207137fbb
-MD5 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.symbols.gz) = de4a876f7ef0c5aa9c566e4f976723c5
-SHA1 (NetBSD-6.0/hp700/binary/kernel/netbsd-GENERIC.gz) = b9b1dddb8855998b36022d03cc9c49ce5e6ed212
-SHA512 (NetBSD-6.0/hp700/binary/kernel/netbsd-GENERIC.gz) = 39bcd475712ece695379203c3ec20e2bada75f8b6b6c6f8f80a8826c65ff112a6e2cc8e8c18a5547fa4fa2e2bb7704d6f5b303b2c600f05cadd9dff1da997904
-RMD160 (NetBSD-6.0/hp700/binary/kernel/netbsd-GENERIC.gz) = 0b67d5990ab7491b64a591e99053470eadcb13a6
-MD5 (NetBSD-6.0/hp700/binary/kernel/netbsd-GENERIC.gz) = 2090d459fd5d513c070c401d72b3ca74
-SHA1 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.gz) = 38bb542016466c8e1a7c8535520729cc5b9726b8
-SHA512 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.gz) = 49d747023260ee1b61b59e0a14ff413c97b1daaf5cc20ae916b42d83b99f7438465afed77185c7ef0154ac762edfa93acc8733574fed66e68b58db11c34ce72f
-RMD160 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.gz) = 268e5e4322fb04246e0a1f8df5788e8530cb88c7
-MD5 (NetBSD-6.0/hp700/binary/kernel/netbsd-RAMDISK.gz) = 4175ca432943eb0d4cae87e5eafd3316
-SHA1 (NetBSD-6.0/hp700/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hp700/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hp700/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hp700/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hp700/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hp700/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hp700/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hp700/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hp700/binary/sets/kern-GENERIC.tgz) = a7b11dacf977418c4a57b400530c123c99447a66
-SHA512 (NetBSD-6.0/hp700/binary/sets/kern-GENERIC.tgz) = 071f2e512f843bd91f68e757682e5414600220833b8269be06956d29e61f0383a5f187bdf9a9414a8d64edc6ed9808c8df468fabca174f9079954991c6582300
-RMD160 (NetBSD-6.0/hp700/binary/sets/kern-GENERIC.tgz) = be81b5bc0509f3c9a10888b8f7fac2982871320a
-MD5 (NetBSD-6.0/hp700/binary/sets/kern-GENERIC.tgz) = 313aa8cbee11f72da2bb608cb35f7a29
-SHA1 (NetBSD-6.0/hp700/binary/sets/base.tgz) = 4cc8adc7171679140335cc44ecc8f4f338f47ba5
-SHA512 (NetBSD-6.0/hp700/binary/sets/base.tgz) = 48e68c7d28cbc15733f8677d7d139897350c389f7032e78e06d6cbb8b9debc09bde2aa52e7226ef58660da81c238e960e5794689a3f3e19f5eca40f532117542
-RMD160 (NetBSD-6.0/hp700/binary/sets/base.tgz) = 3582b7f0c2852854cccad70a2e8f372a7acf0369
-MD5 (NetBSD-6.0/hp700/binary/sets/base.tgz) = f8166ed58eec05489e3857d9e09469ad
-SHA1 (NetBSD-6.0/hp700/binary/sets/comp.tgz) = d9f4674db21772a521c5eb24e5fbe4ae2656c5d6
-SHA512 (NetBSD-6.0/hp700/binary/sets/comp.tgz) = caa488b17380cc2cc8f35ed9703bcac5c778fd597f8f607b26328c58b6b64dec7a784b22335a5c144f31fddf6d03a67d0f2c473ed7498e4f1ada17570f2893aa
-RMD160 (NetBSD-6.0/hp700/binary/sets/comp.tgz) = b625cf9eaa395a2844cea44b1904ce9358c862b8
-MD5 (NetBSD-6.0/hp700/binary/sets/comp.tgz) = 07a825a8852f558425856a06e5677bfd
-SHA1 (NetBSD-6.0/hp700/binary/sets/etc.tgz) = 0576313db33f67f3208c996a1819d19b5f0bd2e3
-SHA512 (NetBSD-6.0/hp700/binary/sets/etc.tgz) = 4d1eb5b04fd24f34112c49829b68ea0b7c841fc8b465e363ed4e79d58cd448ddcc6a493bae49cc9a4a4e9bb92314ddc032c5ed060f48b6de60e5045e981809af
-RMD160 (NetBSD-6.0/hp700/binary/sets/etc.tgz) = eedfb6a8724ef33f4bc3ef4e08c1ec6f868d548b
-MD5 (NetBSD-6.0/hp700/binary/sets/etc.tgz) = 8c95ad14875e9a87428ac7f6cf3a944e
-SHA1 (NetBSD-6.0/hp700/binary/sets/games.tgz) = 1be2d6b3d863032e376b31b2b4489a65acd09d94
-SHA512 (NetBSD-6.0/hp700/binary/sets/games.tgz) = 322569b0060cc67b16d15a79b8c813e548ea4908ec18fdb91472a4ac5b03bc8abcbba2e5bfed3ed400cbc84ecc82a5edf087f54c06bc682c276a15b516f4dacd
-RMD160 (NetBSD-6.0/hp700/binary/sets/games.tgz) = b4d4f8cbddbca828beadbd87ef4f20f1b23d7421
-MD5 (NetBSD-6.0/hp700/binary/sets/games.tgz) = 235dc6818c1a24a788301264c292ca2a
-SHA1 (NetBSD-6.0/hp700/binary/sets/modules.tgz) = 1b4ecd74bda33a325888994e03e67327a959a381
-SHA512 (NetBSD-6.0/hp700/binary/sets/modules.tgz) = 7f77163eb7973139a1e6a2c4aaf3147b94e5f1f977ee642c08b1ad912861d810d953c71ac9db5c5b74c9f9b691a48faeccb4192b099f6ba3cc7fb41093f55533
-RMD160 (NetBSD-6.0/hp700/binary/sets/modules.tgz) = e6f669845fcac20f9921602a26bfed3d83c0b453
-MD5 (NetBSD-6.0/hp700/binary/sets/modules.tgz) = d5fdd2b3f62edab0ea9e9652c2274b01
-SHA1 (NetBSD-6.0/hp700/binary/sets/tests.tgz) = 4a3701895f22ba6d97662a345fa9c14bda977335
-SHA512 (NetBSD-6.0/hp700/binary/sets/tests.tgz) = 9ec93c9ec1b2732690f2a3d07cce15569b5ff57a2cabe9489ad28e7b52ccbc0382795267abb6d30a7db9b38f3b7b6a0c6016ea175b1d91f24b50922e3098cc4a
-RMD160 (NetBSD-6.0/hp700/binary/sets/tests.tgz) = f62f1798af8d3df9d9653487c543be4411fb2037
-MD5 (NetBSD-6.0/hp700/binary/sets/tests.tgz) = 764d8df608cc1e9c23923eb7292f1962
-SHA1 (NetBSD-6.0/hp700/binary/sets/text.tgz) = 12fe20e8ab174d0f6bcd8ec6be600ed0e0cca782
-SHA512 (NetBSD-6.0/hp700/binary/sets/text.tgz) = b56b29228d79ba548c3ad908f9c81cf7e427bc72e607820438c6154e256f5bb4bd102aab7c31e86b241ecc42f824420aa7969e6ac418250c344eeffd1280abdc
-RMD160 (NetBSD-6.0/hp700/binary/sets/text.tgz) = 1e16f9ea1efaee41bc10b045105a1d0dc4f0d17c
-MD5 (NetBSD-6.0/hp700/binary/sets/text.tgz) = 09610caef8a531f7c490920d43a7c3d0
-SHA1 (NetBSD-6.0/hp700/binary/sets/xbase.tgz) = 0c5e93ea81c0f09063e5c30f42c9d652aa9b68cc
-SHA512 (NetBSD-6.0/hp700/binary/sets/xbase.tgz) = 03f48b4ef5dc3f869866f00214d7d5482f03d2d838ceb05e0003484d8835f05b484d998debf24d801721dbb155aa5632a9a1e6d3a830d6faddc552c4500ac3e7
-RMD160 (NetBSD-6.0/hp700/binary/sets/xbase.tgz) = 8661bbe49a27e86810bee528b84947926e0a2e65
-MD5 (NetBSD-6.0/hp700/binary/sets/xbase.tgz) = 21b4506d3d4f407c33d8c152ca8ef304
-SHA1 (NetBSD-6.0/hp700/binary/sets/xcomp.tgz) = a70481db9baba9f60cf23c52e72dac446888df2d
-SHA512 (NetBSD-6.0/hp700/binary/sets/xcomp.tgz) = 07c5ba6aa0ce0da2c5c2a3987c7c20226e4ee3158578a7ff70609bbfafc83becdd6a6185fd2c0b4a441f7d92c2cf5be3c767252c11f8fae07068f3ddeb48382e
-RMD160 (NetBSD-6.0/hp700/binary/sets/xcomp.tgz) = 2d0179f816fb0a90c931f0733cbfad6dfe3f4d17
-MD5 (NetBSD-6.0/hp700/binary/sets/xcomp.tgz) = 84ddb46d08c60fab91553d60f848e21d
-SHA1 (NetBSD-6.0/hp700/binary/sets/xetc.tgz) = 0ba461866c920a4fb82c50eede51ec242527a428
-SHA512 (NetBSD-6.0/hp700/binary/sets/xetc.tgz) = 1e84618c1e253df70f3801c93b1276ab63df818b231afb21a6c34089fd53cc95c9314a8ff14270d622a231c7fb963473e152f013e1cc2f338e7f231eabf524af
-RMD160 (NetBSD-6.0/hp700/binary/sets/xetc.tgz) = a98382606c9775e89131fc737d791b9c4c8334d6
-MD5 (NetBSD-6.0/hp700/binary/sets/xetc.tgz) = 626d88e448091f14845bf3a565d330ec
-SHA1 (NetBSD-6.0/hp700/binary/sets/xfont.tgz) = b70a4c27223f81cf49a62a85c3addc59b52f4b48
-SHA512 (NetBSD-6.0/hp700/binary/sets/xfont.tgz) = 82d94e80e98de78d71d5bae5af20b2755cadbaca48d548b2575fba4a52b2f35e09b71efb4fc8f0f1eadb5282e449807745feeb1d121275e9457eebe93722deb1
-RMD160 (NetBSD-6.0/hp700/binary/sets/xfont.tgz) = ec9a08a3c3e1563d8c4bd9a86d0e7fa38dcfa944
-MD5 (NetBSD-6.0/hp700/binary/sets/xfont.tgz) = 0bd2c8bc1760f957a2dec6126148ccb3
-SHA1 (NetBSD-6.0/hp700/binary/sets/xserver.tgz) = 892de89d8c46c05b44affea346312132bdc9d7b8
-SHA512 (NetBSD-6.0/hp700/binary/sets/xserver.tgz) = 18f1705c9e448b34e240f0f215fd618f62af2c1efa59fc9456a28df4fd477a6da26af82f7a99c359edd312abfedfc7b3058f651472a17d339f672db872ade390
-RMD160 (NetBSD-6.0/hp700/binary/sets/xserver.tgz) = dadd7b1915e43f92a618b65f739d91fc47cb17f4
-MD5 (NetBSD-6.0/hp700/binary/sets/xserver.tgz) = d0ce54a0227edeea0ed0572c32f7382e
-SHA1 (NetBSD-6.0/hp700/installation/netinstall.lif) = e4f530ba8005c2a02ab8cc5f6f2f9bc266ed7d27
-SHA512 (NetBSD-6.0/hp700/installation/netinstall.lif) = 9cb62f32608d400472276a255cc25c872406cd9a2113a787dd9735759a3d05a1de97c2b53daeeb35b4ab07e3e016aaea0bcc2da165c3c07633ac716900383354
-RMD160 (NetBSD-6.0/hp700/installation/netinstall.lif) = 00807d44c30717d4b524a94e209ae8881d9894b8
-MD5 (NetBSD-6.0/hp700/installation/netinstall.lif) = 070bcd9b95c8c1f02cb3e233bbfd997d
-SHA1 (NetBSD-6.0/hp700/installation/SYSNBSD) = 0458f52af240895100db4e2c15e685a9a8af00da
-SHA512 (NetBSD-6.0/hp700/installation/SYSNBSD) = 6acc8321830dbb38cbbbe88bba88c6f0bbdfcfe60380f11fbe92724b0defcb8dbf3ea9207e7522fb90b95a0a401114a751cdef01ddcd5d354cb7ec058c83f98a
-RMD160 (NetBSD-6.0/hp700/installation/SYSNBSD) = 2c9d5b050abe290f785eaf9fd1fb746ec0c2d310
-MD5 (NetBSD-6.0/hp700/installation/SYSNBSD) = d6cb9aa32688c2b571b6b62f7141d23d
-SHA1 (NetBSD-6.0/hp700/INSTALL.html) = caa84e344b51c67646142496becf7b3580bdd769
-SHA512 (NetBSD-6.0/hp700/INSTALL.html) = 87e4eaa6077a464832397ddf9eb59ca95949c655d9897fb630899274176ded45b22f4da21ebbfad688515b7cb63a7aca9e5fa8b003d4c81208c0c514ddaa9d3f
-RMD160 (NetBSD-6.0/hp700/INSTALL.html) = e46593839ae31aa17259f36ae4f71ee9cf56d317
-MD5 (NetBSD-6.0/hp700/INSTALL.html) = 5b63b1d8b0e76a1626ced50e760b6a24
-SHA1 (NetBSD-6.0/hp700/INSTALL.more) = bec1e3da9f724159b4a5b52e7bde3948e92573a4
-SHA512 (NetBSD-6.0/hp700/INSTALL.more) = 14a618c17e946dfc8c537f48b3f8c225ccf0484acdd1311555c7273a720a867f57b0f72786bf1c5ce874c0a8dc122d6452e476f6b3b5cfd2fdcf3e7b90c20b0a
-RMD160 (NetBSD-6.0/hp700/INSTALL.more) = 3cf2ba4b0c27b4e83b2275ffe8b0736c536b40b0
-MD5 (NetBSD-6.0/hp700/INSTALL.more) = 211474596cbc940278e9edfbf8ab7d23
-SHA1 (NetBSD-6.0/hp700/INSTALL.ps) = 31767f9d14e0018f59f4bf89233f3a546d53234b
-SHA512 (NetBSD-6.0/hp700/INSTALL.ps) = 7f1ef8344a35e0aacf8246212f9ef07fe7727048de0a7b24030fdf7698e736152623e6d5d02c32bffbceb3c0337aeac719c523711f838118f0d31316d46c6fb1
-RMD160 (NetBSD-6.0/hp700/INSTALL.ps) = bca575e3df8abf0c7f8ff70e614fe52a9c39f645
-MD5 (NetBSD-6.0/hp700/INSTALL.ps) = 644eaeb94d45f3183b9cae5f0b39d974
-SHA1 (NetBSD-6.0/hp700/INSTALL.txt) = 546cea2f82e5c548de6f6978f569d3dcf65476ce
-SHA512 (NetBSD-6.0/hp700/INSTALL.txt) = 4d0d5e6363680e11da17d445fe7156b709e11d28f3226d1374e3612e68ba9c445bd2ec01e4422b523ea2d4197fc8a8b465da0c75401b9560ced43f217931b558
-RMD160 (NetBSD-6.0/hp700/INSTALL.txt) = b7536cf8d4f664d03d213978619724a94a16b1d5
-MD5 (NetBSD-6.0/hp700/INSTALL.txt) = 241f27fd87ec0932db94a067465d30b0
-SHA1 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-JORNADA720.gz) = 7a39f220d6af810e25b4799685aab25a226b9b91
-SHA512 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-JORNADA720.gz) = 4b2d4125cf737229264e73bd830c4def0ee33dba71cc5f68abf3e8e936dc89fb02f48a0d821754d2427fe1f72595dd266cd9cfc369c778f50f48573fb2c0bbe1
-RMD160 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-JORNADA720.gz) = 129136e4544bb8fcee75e1addd1fee16c522e416
-MD5 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-JORNADA720.gz) = 6ed126d914383f7ca0c3269960e885db
-SHA1 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-IPAQ.gz) = 7750f05c52fc8460f3ad8b271ae2d9e723c24ebe
-SHA512 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-IPAQ.gz) = 485f621f65f80fa02b8fbc08a876aa135d3e4c541ccc6d13ebb3bf119b0628dc5a540ba168a6e908b84422450829dd5a98915a145d629e893930ed40d9e3dfde
-RMD160 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-IPAQ.gz) = ee2d243a0fd633e6dac497b28b420b4a8157879f
-MD5 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-IPAQ.gz) = 563942f00d685c8618fb5bfa2a6a893b
-SHA1 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-WZERO3.gz) = e6f2cede1c69a3f41582f1a8f2a5187948512248
-SHA512 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-WZERO3.gz) = 8cc9f93b55a9a64341b266f7d3b8c6d1051f84a36f8aa398b24404d8aa57a16e883b1e7215b7cd235764b4507e04259525333f28369aa95efa39713e17bef07b
-RMD160 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-WZERO3.gz) = 536bc6153a0c83339c95e38b87a87bc98e738cb5
-MD5 (NetBSD-6.0/hpcarm/binary/kernel/netbsd-WZERO3.gz) = c4092d8e84f02fa75ea88436d404f1b1
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/hpcarm/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hpcarm/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hpcarm/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/kern-IPAQ.tgz) = c2bc2e5d8606cbd122fc825031025e2946f06e40
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/kern-IPAQ.tgz) = 52e8c28012dca6e4cc1bab2cce4443a6600a9cd42b3e1e027e715792e794f34baab32300da9ad58fbc23ecb2a22e7787a1d181577317a0dc6fd457ba66f11fc6
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/kern-IPAQ.tgz) = 7be149eb7b493fd76dfe0dfc533315458fb0bfea
-MD5 (NetBSD-6.0/hpcarm/binary/sets/kern-IPAQ.tgz) = 0d6a168f2d92d06962b581d06f807d46
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/base.tgz) = 080c8331106fce332cc5092a8332c2ad603e2596
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/base.tgz) = e22024be4e644ae872d6cf538a1210f8ec2aefeadfb47f6497e3892de2b617109a082650e1c1b16006cb84312c1550d3e98610ca63a36a083a073c55a08a3ab2
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/base.tgz) = dc0f2bef3b562a81901faf28d738e34168c3b812
-MD5 (NetBSD-6.0/hpcarm/binary/sets/base.tgz) = 0e05338048fb790920168e820e0f5771
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/comp.tgz) = 8ae72e40483c13b3ea15aebb3efbcb5cedcf921e
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/comp.tgz) = 3ee22dfba60196fe19897537c3139dff0b50d1aa6f6c27a024dcdbdc810a9dccd2c32480f73c0ffb0e4dcc4261e03ca6c565a875e291c963011467bc119f292c
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/comp.tgz) = 8bbf9baef503fd64c7676821abad991027f42ccf
-MD5 (NetBSD-6.0/hpcarm/binary/sets/comp.tgz) = 84a5d47bbb69b46673a2b2a53ffe3854
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/etc.tgz) = cbd3aeb7eee9da4d67693adee922e65835ad8908
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/etc.tgz) = 96f02aae1ff4fe6096261449dabe1c749ddf179e809b936393bd3b1aea3d708b878ea9c6fcededf0820216bc3f5a4862da04cd9ad5cd4991094bfc309421dc4f
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/etc.tgz) = b3f5dbf2f1a092a0fed4f7ff661635387bdfb7cc
-MD5 (NetBSD-6.0/hpcarm/binary/sets/etc.tgz) = 940a5d84fd6546eb8ef1fc0fc2af9f12
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/kern-JORNADA720.tgz) = fbe60c24963e700dbcded7ed9d6a006fce937c4d
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/kern-JORNADA720.tgz) = 0ff4a883f983d768355dab3a124bb1ccc3418d7a61bd8dbfc571089b934153eda2b9bcedf4d655e61c680c60b50772a40322804f86accb96acbd11dbd0159aab
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/kern-JORNADA720.tgz) = 010eea6fd1f9645480ed8d96e67a7a87766e6097
-MD5 (NetBSD-6.0/hpcarm/binary/sets/kern-JORNADA720.tgz) = 8a1eb406cc9cb944a0dc11ade6d139d9
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/kern-WZERO3.tgz) = 5a30317da0f7f2c6f1998a8c53350da39a390bff
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/kern-WZERO3.tgz) = 6908dea8428f52a08f481105b602fd2b93318207b5142ccec5104a897a9ad5b10ec25db1a5849074c179e064c7c418cebccbc529609873b031dde5ef1659ec6e
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/kern-WZERO3.tgz) = db2ec740804a2c22b4d9d5f05f7b20748206fcca
-MD5 (NetBSD-6.0/hpcarm/binary/sets/kern-WZERO3.tgz) = b745687a92452be38b0d2cdb625175e8
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/modules.tgz) = cd6c4ccc2c87d573cdb5a92a8806292c5063bd28
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/modules.tgz) = 66efd8e33cb118fcb7e6094a55dce87db0b38f03398688e19eaa29a88a61075ca4456cfbcf262e4ad372d1a85d31f1a230e79a09a60d9d0315ee2691f836f408
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/modules.tgz) = 1a4f4a21d35c183594080c4c2c6aeb63d0f07ec0
-MD5 (NetBSD-6.0/hpcarm/binary/sets/modules.tgz) = 0d07dc5c45004e2442e6da94a40e2082
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/tests.tgz) = d77efdefa2b3df022767062ce3e5b37ee33aca9f
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/tests.tgz) = b2827bef6684fe45b1ca7dc690a30787a0033b46013281c0d12dc182939a32287579ea0ed6dfdda5ac357cb69a1bfccffcce2cbc991a3b47f0cf714df45f511c
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/tests.tgz) = c51c78a413d9b8d240db9965edd6732158319bec
-MD5 (NetBSD-6.0/hpcarm/binary/sets/tests.tgz) = a157cb333c867f1efce0c0009db0c596
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/text.tgz) = 5e276b4e097bd1ab37a48ba8ac4591d784311152
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/text.tgz) = f7d62b4ac928028f37cc0ad711a12e4f5d4a2b77d2e108ce8716194052e6796bf5fb54ce77fa148aa257165f3d71f2e30d562d3dc809052020b85daaa5ba9fcb
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/text.tgz) = 806a5e59b90062c827a23ca33be22cda14a2e0c6
-MD5 (NetBSD-6.0/hpcarm/binary/sets/text.tgz) = e4ed04614c1a767e663fc73d647f5b7a
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xbase.tgz) = 56daf552141d6161e0b08d5918e351f9cf5f783b
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xbase.tgz) = ccc570735b9636dad693a87964efa1c6d5b14a15e8e9ea28b0ebbcf97db04a671a771d6163a62f78d9979357f7fb0d5543591ac584781cfb47778228a268d723
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xbase.tgz) = 134800ce03d324aa4090e1ce235cc5a6e5ba9f2b
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xbase.tgz) = e3afaa495833b5492470b03d432bc773
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xcomp.tgz) = 380508f5e8d94d66e301a6f8fddbddddaf2eb15d
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xcomp.tgz) = 4860c2274b0d4d3b1188d915c90b7e183672527e6734023c78694df3f507d2e920e5af9374353f7581c8f0e22462e8af30aff7e989146de61c0c7b9de7cff93c
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xcomp.tgz) = 2f0f86a40b6887699ea5949b994007a9bb6ad876
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xcomp.tgz) = 8f917121a2bbc2df46c6ab3db5f7c276
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xetc.tgz) = 4109069bd859ebc949dede730589472e53e9e73a
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xetc.tgz) = 260ee8565cb3b0fc496ff20856cc718585d36d380a85a5793c0e6502e57b683e132a3904ddb5990ce670ad9069eb999c2a41e427d5bb4ce96dd7f526427dfecf
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xetc.tgz) = 24731afa16c748e4129111adbc446931859ac8b5
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xetc.tgz) = c5aa4d6e7bda3c04ff21c49fa7a88349
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xfont.tgz) = 93475dc493faa6b2df35bede901aa170b6f9e9af
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xfont.tgz) = 182e2f9f19c09b4a10c5591d2d9a85a151263ed9773ecc581fd4ab155f5342b364b2fd15c3ce7e82ba9b760ef567f0ccaa8fd51fa4ad3e70dbc63a429ec544b4
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xfont.tgz) = ea5190cce3fb48693746b233b2173595263d0b64
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xfont.tgz) = e866b30099f57e267e8be054446c259b
-SHA1 (NetBSD-6.0/hpcarm/binary/sets/xserver.tgz) = 33ea7cf47464441ccaa2779544df524406479446
-SHA512 (NetBSD-6.0/hpcarm/binary/sets/xserver.tgz) = 718cb878630d6a3d8e2a4c8c0ca427e36f6772017810df557ff9bb0a688445af10f4087662e91631ec07a0a83e3007fa016c485950b3753c50bfdd3cc219ccd1
-RMD160 (NetBSD-6.0/hpcarm/binary/sets/xserver.tgz) = 09ce10d8e2254deac07ece3f8625d6c3bf2c4513
-MD5 (NetBSD-6.0/hpcarm/binary/sets/xserver.tgz) = a36d535d398b0d6e6e66da91d03ddb6a
-SHA1 (NetBSD-6.0/hpcarm/installation/miniroot/miniroot.fs.gz) = add38fbef1c9a42872427fc3ae856cc490dba491
-SHA512 (NetBSD-6.0/hpcarm/installation/miniroot/miniroot.fs.gz) = 1ac653efe632dd53dc6bf8f1abda479a4bdecf57b4aadce9b289381a8608601e7444404bac4b4187ea5eb87a8e56affafb06b30c5f27264797b8811b4b4a61ce
-RMD160 (NetBSD-6.0/hpcarm/installation/miniroot/miniroot.fs.gz) = d36e893b023bc07b2ae23e65891cd8edd74ae60c
-MD5 (NetBSD-6.0/hpcarm/installation/miniroot/miniroot.fs.gz) = d790021f968d07d34a34acb3fdc18a3c
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.gz) = 640e6d70fa752f3f1e6b415d79bfa26eb524d49f
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.gz) = 0266c16c91cd0edf3fad56c8806d8736edcb70138486a8596afd2ad58a89846ed319973d4383c6dc240e894a23658effd390012c6bb55d768a3980c5cb9bfa34
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.gz) = 8b57f335f3ce186509ff88c07bc85c27716b542d
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.gz) = 4963aae14a8da8a218ec0f43110e4329
-SHA1 (NetBSD-6.0/hpcarm/installation/hpcboot.exe) = f62f1b2bbf14dd5ee1159d987365122bbfa061d4
-SHA512 (NetBSD-6.0/hpcarm/installation/hpcboot.exe) = b1ad5471eec903659a2fe6ff79e631ea40d940e447126a6d8d6b46166dadd7cbbbea4285927968134d2ff493fe66a698d97374febf991ee9ecd4d295f06c92b8
-RMD160 (NetBSD-6.0/hpcarm/installation/hpcboot.exe) = fefa32b139995cd0b71c59d09cfb225fce08dbc8
-MD5 (NetBSD-6.0/hpcarm/installation/hpcboot.exe) = e8da90c935c719d600bed4f07046950f
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.symbols.gz) = 04eac0a968c96a038388c18816b735fd0fda5c2e
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.symbols.gz) = 61357b623b75c75df8f2c5318c82f3300183de81003900fb10a1caa566cd9cbc90563277a5d0738b0a7ed52934cfb40d08b4c7af428b06bca90dd907b89673ad
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.symbols.gz) = 43b52d529a62cbfeacdae60b54d9e0fece7a1ab0
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.symbols.gz) = acfc91c707d81e9c84b3fb7f6626f9e5
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.symbols.gz) = 48c1a0db5c6a2e7d69b1bcf77763e88adadf6373
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.symbols.gz) = de5ef76b391472a2c18637f36f58a904d693085bfd9108676a1c0476712ab94b72ac41628a65a9c0bfcd5f33c9e141540906f63cfa5614ab8ea2f3f6867b9b1d
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.symbols.gz) = 383e05d6255afda312b4b81fdaffe4e4a9c83dbf
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-IPAQ.symbols.gz) = 4b4a3474459c93e727e4f20559139464
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.gz) = 70818132f816688fa6d74e13544e9e6f07faaddb
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.gz) = 0b9b7718b30b88b81fb66cdc32ddee57ac7fd6c90c1ecb6a422f84513df70d594b48badb8b71f00b3ef8d90f544c01439bef4942a51eace3d1fc5dbca1461ced
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.gz) = bd193cf9815e6f8a60ca9df77eb1537913c2daa0
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-JORNADA720.gz) = 39c8584c95a8c2197165b102a1548a5c
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.symbols.gz) = 2afaf89d89ef9c6538960f64b36802beb3e74472
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.symbols.gz) = 53c9ddac6c56fa5e1c77323483b129b0b1ebe88b558f0e50346d17d54477db1187831c6c8e0e2a231b9473dfcf8d285672f69cbca8197e6fa889f8285836b38f
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.symbols.gz) = 9dfb61526eb859fd999c8c05b257d436a6d209f3
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.symbols.gz) = c8aa20ace8e4938a05386d8c02f1cb6c
-SHA1 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.gz) = ded59dfdb078cd978a9a74670d43899ef5186b39
-SHA512 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.gz) = f93d2e0c80f5b9f8d2f1d851515b2b50f8f518caf7e0b8b71dfdb002a2f97c1da80f7a7d7263228a0d5400267d0be91ee649b558eb4fea8dac4fe07f23b24138
-RMD160 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.gz) = 99920bf26d5c1697ed030c151c630b125e3b6cf1
-MD5 (NetBSD-6.0/hpcarm/installation/netbsd-WZERO3.gz) = c958ba2807a0e03d47f98fa66fcbccef
-SHA1 (NetBSD-6.0/hpcarm/INSTALL.html) = 90f13483a6a7cefd8261806546700202df5e89ee
-SHA512 (NetBSD-6.0/hpcarm/INSTALL.html) = f7b3a19235b72a4a19c27380e6e22f89e4ce58864a8ef3b492b05aff47cd017a0157adf96bf1d04ef4d6c9b1f4f24980afad91f2644e74fccac06274a35bc75b
-RMD160 (NetBSD-6.0/hpcarm/INSTALL.html) = 6228411bb6d6018e59a1fd74f2887aefed5ae8fe
-MD5 (NetBSD-6.0/hpcarm/INSTALL.html) = 3d21d24e5a8b5a1ed45afd2f0e7c25e0
-SHA1 (NetBSD-6.0/hpcarm/INSTALL.more) = bab711c6d2c3ef110b778fa3bb18a690e3350071
-SHA512 (NetBSD-6.0/hpcarm/INSTALL.more) = 85c117ec4b92633391497f62723320999e714a68f0a9b008508fd1b884f77729235859c2ed0ff9539af6615eb452cd87a9bf9f10456ae53fc057b5a3d665dbb5
-RMD160 (NetBSD-6.0/hpcarm/INSTALL.more) = 5283c45bcd291d03e3d2f579eaccdc78708a2dc6
-MD5 (NetBSD-6.0/hpcarm/INSTALL.more) = fd547cbcd59d803d4f5ef38f619fca0c
-SHA1 (NetBSD-6.0/hpcarm/INSTALL.ps) = 6ce0b3584e4b45bbed722cb8bddb66e3deedc88a
-SHA512 (NetBSD-6.0/hpcarm/INSTALL.ps) = 3d766bafb31be6edb83b4ada23bd1eec923f7297f6b4cf51adc247a160749c5488a99282ce7e4380b4c27025581901c6f5d7d774c799fdb23f8410c43c8e4b0b
-RMD160 (NetBSD-6.0/hpcarm/INSTALL.ps) = e8c042d83705b3b63bcb793d856307b95ed31521
-MD5 (NetBSD-6.0/hpcarm/INSTALL.ps) = 1a50f108a265984cdd0f0206c83daa35
-SHA1 (NetBSD-6.0/hpcarm/INSTALL.txt) = 06a8b26e2de81570eaaa71593a67b1e4c517590a
-SHA512 (NetBSD-6.0/hpcarm/INSTALL.txt) = 4fa7355a943c7e48925ab6db1c281ee9cc7e674095c7eea355d270d15afbb73d45891ce07a4b6104b1fcb0dfaceb3af48db6cb134070077fa4f1bcab453e83eb
-RMD160 (NetBSD-6.0/hpcarm/INSTALL.txt) = 3bb0f03d782104ec4792423f3d640e8e7adc29b8
-MD5 (NetBSD-6.0/hpcarm/INSTALL.txt) = 68c0576d6d8b54ebfbb0728b7a73438b
-SHA1 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-GENERIC.gz) = b038fa721af9faeddea84add1762439db98cf908
-SHA512 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-GENERIC.gz) = 6d550d0b1797734c7340d8632930c78be193f397591767e2eed674423ad469dda333206a8f539adfba9d0d81ee70cda7c01de58cfcc4e3ca0440cd6615ba8167
-RMD160 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-GENERIC.gz) = a4627fac6aad12dd9a2f04c3aa90fc8c61699d4f
-MD5 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-GENERIC.gz) = 6b0e8c6ff949fbea7ff99cbbed4df778
-SHA1 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-TX3912.gz) = be377f94448f7026050fbd885d0eeb2ed6a1e84f
-SHA512 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-TX3912.gz) = 3855f4e59d507281b41d8363e8d39ea229bd41fd1cc6090704727dcd97bb75f3c265f68a0cfe84a10292e55c7d58a266f4d27705a1fb9218d34e1727210692f0
-RMD160 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-TX3912.gz) = 686c703228a5ace7ddb3dcbb232bdb4ece47b6f1
-MD5 (NetBSD-6.0/hpcmips/binary/kernel/netbsd-TX3912.gz) = e462f4f6a2cbc6d8eb20e49cbcfed56f
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/hpcmips/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hpcmips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hpcmips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/kern-GENERIC.tgz) = 5a49a4163b7d841104dd4082113ba253ca95f946
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/kern-GENERIC.tgz) = 3856b27c3d200e162fb88b7e094e38d843a91f67dadb56b31bd66c18daddd2c0aed58dbea87d43a3d530d3ece68bac562c20d623b613bdd4855fb86bc4794463
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/kern-GENERIC.tgz) = cbd699ebfe796b39eee403ac3831765f5871e789
-MD5 (NetBSD-6.0/hpcmips/binary/sets/kern-GENERIC.tgz) = 22031cc2c2f3a4a6002fe20cff53264c
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/base.tgz) = ff9051176546bd2cacea52fee85fcef472e0fc39
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/base.tgz) = 2a770bede2e0f7af3a0d8c2a1f3871bd72c1f67dbe5aed9f6d1cf12b78c8676c819dfd99d3c7cbfc1794c993e8cf059f9e72b764f8d25a5f1ad3406c42169d6d
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/base.tgz) = c0d7aa660957624cda33c738d6026870f14fb823
-MD5 (NetBSD-6.0/hpcmips/binary/sets/base.tgz) = b79936c5e1c4ff6a86270da2931b1c54
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/comp.tgz) = 32515af667967de5ad8dbca2ad993c62c9794b80
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/comp.tgz) = 5604e8af6fe737b81128a976cd53cc5f5b287f04de2b21fdbc8bfffa1b521ceae4f7244ad8b98580ca77af7c43b75623e2e9ab8772bd23e8e3c7d297b6c54bfa
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/comp.tgz) = b9a5cf74d2c16f7870081a27a3862459c101b690
-MD5 (NetBSD-6.0/hpcmips/binary/sets/comp.tgz) = 4265c60c89150dc4c7de32c0c3f4aeac
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/etc.tgz) = 68b265bdfcdf09e792bcdfe69656516b44d37b66
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/etc.tgz) = af2d02e2aa9a03df02dd8f0a8840e7d185e18b57e8086f0eeb5b7a1349e02433bd7ef1c83f77d5962f90350b71fb4610932e29d723f1cf4488c930048ab43dd1
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/etc.tgz) = 3a5d433571b7a9c44fa0ffca6efd6df514101b15
-MD5 (NetBSD-6.0/hpcmips/binary/sets/etc.tgz) = 295c108b6f0e7a9dd8f7cc142e87dbd9
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/kern-TX3912.tgz) = e1ff4c2bdcfe12d8c26b87801f28970661e5e109
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/kern-TX3912.tgz) = 42d069cd3e055b33ffd04b0e99f3db75a45c80cf8cfffb0a4cc08fd3fafb9e9e8c8c6205cf827689a91080c75250c9e753c5c4f1657427287bd567244e29891a
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/kern-TX3912.tgz) = d5d7c8d6ab8d3cec287bd0ede9c658f5e196471d
-MD5 (NetBSD-6.0/hpcmips/binary/sets/kern-TX3912.tgz) = d9aa987b53c079063b97e947c2b561ed
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/modules.tgz) = fd655bd27b90d1cd9ebb2f64a2b744e5f57178bc
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/modules.tgz) = c7b1ba107094c528d6edc3c3fa68962882af4fa207bb6b323e6230ebd09f0d7555abc34a4f76bc7f6c7fbf393258089a3a11d9ed7284edd0a9deb44bd8b6b1a7
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/modules.tgz) = 13356c7a4e3f09123b31fbd42bcef53ebb10ed61
-MD5 (NetBSD-6.0/hpcmips/binary/sets/modules.tgz) = b820dfc2e2d9420fa72bd887eb9ab505
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/tests.tgz) = 12c5aab5f1f4ab6124d3cb5e8598359b5f893652
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/tests.tgz) = e7656a5f8bb8104576f8218fcbc48c5fdf4d4cfdf407c6805421f1101471c95ac6e1f83444c13ffd1cd82d3b51d4da0d8fc726795b0765363b700d5054cfd553
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/tests.tgz) = 8abc82efc30f6bde5b48bd7778a3774fcd993ae4
-MD5 (NetBSD-6.0/hpcmips/binary/sets/tests.tgz) = d1cd20123adb795808586fef4825bc29
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/text.tgz) = 66f261af8763d48f3c6e62511b0660801b89115a
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/text.tgz) = f7428c73f23bfaec5ddad225487c3e569479c537231c2c7ce46869c6debe07a0bf2f139cecd1622230337871a706d6da3891759bd75166d1ae700e85c014dcca
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/text.tgz) = 8735b6f7b4e4f04f0db4736cce5cced1b12a4cfb
-MD5 (NetBSD-6.0/hpcmips/binary/sets/text.tgz) = 69d9e8e32932f359964186ee95b11c42
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xbase.tgz) = 0299ef346075a8066e40486b3de09de5148940a3
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xbase.tgz) = 077e6b5023eeb6ccbbdd3ebe6b4f677d8a2ac2e76ff235951fe3cfba327f87149e9dd46abedf0963ef465fa829589a802cd0b1ad76a49b983f1766a881c648c4
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xbase.tgz) = 3c7a528dfb109df9525b7f41dd3c1a0ef7ce8bda
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xbase.tgz) = 24312b9cd85e739ec15b4b53ad6955f6
-SHA1 (NetBSD-6.0/hpcmips/binary/sets/xserver.tgz) = 9faebdfa18d6846a47ee49174a2b510265cf26c0
-SHA512 (NetBSD-6.0/hpcmips/binary/sets/xserver.tgz) = 367f12b49e0ab6793075bed49a4830d8d4ca08eca3d93489c90e55201a4e5d7c1454aaea447684309552c5ca3a695abb800fe9da35ec129f1fc11f80f3d904bd
-RMD160 (NetBSD-6.0/hpcmips/binary/sets/xserver.tgz) = ece37a2b4b5096401d6add543d13dc136cabe85d
-MD5 (NetBSD-6.0/hpcmips/binary/sets/xserver.tgz) = 3c0b67d9f4dc00af6b197724b41b572e
-SHA1 (NetBSD-6.0/hpcmips/installation/miniroot/miniroot.fs.gz) = 1e1ce1cba7ab9b704105a3d52f7c5b17773e9ba5
-SHA512 (NetBSD-6.0/hpcmips/installation/miniroot/miniroot.fs.gz) = f1746402d265c51ed693fd30961d3dd7da011a30ad47ccdc709a2a9a5dd665dd884f91de6d56ecab947d8c958bb572a4a19b8c446ec6644fd2f3b3096b14e615
-RMD160 (NetBSD-6.0/hpcmips/installation/miniroot/miniroot.fs.gz) = 15102213a728cb35bcac2a49f93b496b8f9aa838
-MD5 (NetBSD-6.0/hpcmips/installation/miniroot/miniroot.fs.gz) = d910bba08c66b4454242edd78b73cebc
-SHA1 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.gz) = b1cb178b2c1edd93e4d03ab3205c07c701c1a7ce
-SHA512 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.gz) = b982379b9ed3f09895be90c2dcaff7c041e249102bbf72f6ff41bd9100e28990095563db8de6c6dbd40accf3b11f9e0848c2b1bff5dcf0ab9688e65d5229d39a
-RMD160 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.gz) = 6923c07471d3beb90bdb466c1cb76f03ac65ad00
-MD5 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.gz) = 8860562df651f9ca3adf61dd62718dba
-SHA1 (NetBSD-6.0/hpcmips/installation/hpcboot.exe) = 70e5234558257f49964fcb28a19f544670791c47
-SHA512 (NetBSD-6.0/hpcmips/installation/hpcboot.exe) = bcde10547db4de0623863c93a733706edc1096e2535ff6a7574e86ccab25144c0c653d80ccfb1989eaf685e0b0710eab41f34cc2c45a7bbdc10bb9f845326102
-RMD160 (NetBSD-6.0/hpcmips/installation/hpcboot.exe) = ec4e5dfcbb787ba57de55209e12cbbf891c29f7d
-MD5 (NetBSD-6.0/hpcmips/installation/hpcboot.exe) = 9c4073db4cb8cc5a534f709731e271bf
-SHA1 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.symbols.gz) = 6aea661d601c817cef6d1283efe84a23e98bfef8
-SHA512 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.symbols.gz) = 0ae88640bdd00cfd0f1d908bab889b72f71173a376d26159e5bd9221e4241a867f4050bb9c349bf4225ecc4b82ae558002b3303e7c03e98dff7f72f57b08a9fc
-RMD160 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.symbols.gz) = 1ddaff9ebe6775a9b1f98e3d592c9e38f944a5f3
-MD5 (NetBSD-6.0/hpcmips/installation/netbsd-TX3912.symbols.gz) = ccf4219237474d2c8e2fa02fe33f2e9b
-SHA1 (NetBSD-6.0/hpcmips/installation/netbsd.gz) = 75ecc93d0f321a819aca2fafbf58a92651c2ef8e
-SHA512 (NetBSD-6.0/hpcmips/installation/netbsd.gz) = 94ef6d49c91ac5ffba39ada8854d3a7be535bdcc7a5121a4941255a30a8c9d68acaebcb1e99ad804360910a45562e3c17b307819ed4f97c1f9a4900c765ac06c
-RMD160 (NetBSD-6.0/hpcmips/installation/netbsd.gz) = 10470fb18a31416543c016667bcbcaab1b454297
-MD5 (NetBSD-6.0/hpcmips/installation/netbsd.gz) = 1acf8ad6849c07fb17c0646acf7e76c2
-SHA1 (NetBSD-6.0/hpcmips/installation/netbsd.symbols.gz) = 8a2bfae03f350dc2c9d83709c8255b8ee4eb9e15
-SHA512 (NetBSD-6.0/hpcmips/installation/netbsd.symbols.gz) = c4917814e14d1163139be52927a5a59d422304289239eae15e91495a9964a16e005865f231b3647964bdfed2658d955ef983fccda7775616df92487e10f36b53
-RMD160 (NetBSD-6.0/hpcmips/installation/netbsd.symbols.gz) = b353f7752d20b78218082d129e4ed5b6702ee2a2
-MD5 (NetBSD-6.0/hpcmips/installation/netbsd.symbols.gz) = 453e0c8ae44500b483151a83e1689a2f
-SHA1 (NetBSD-6.0/hpcmips/installation/pbsdboot.exe) = 3b0a8ac9c0d4c6e7fef95970e81f1ae42462f405
-SHA512 (NetBSD-6.0/hpcmips/installation/pbsdboot.exe) = 28b6b8b3ac983d5fa9ae9dd28127981367720c3754a88fd0b08e404093c657df3df93bceae63835fdaf021fd608002464411818ef3e9becf100e0e7ffd94fcbc
-RMD160 (NetBSD-6.0/hpcmips/installation/pbsdboot.exe) = d713fda3478b92d9dc71347122a1fd7bac6cab9b
-MD5 (NetBSD-6.0/hpcmips/installation/pbsdboot.exe) = 5c184fc062316a94d8408adf0884bee2
-SHA1 (NetBSD-6.0/hpcmips/installation/pbsdboot1.exe) = e937c9bf2759e58c32523ff19c45feeb5e90fe77
-SHA512 (NetBSD-6.0/hpcmips/installation/pbsdboot1.exe) = 65e044958194d15fd58b222dba5470343068ffbe968d43819b11744c711bf75083d1e61df0e433ac846629d8d0ccd14ccd0388b58424a123d4018f9731b6415d
-RMD160 (NetBSD-6.0/hpcmips/installation/pbsdboot1.exe) = 9e072b9c080bcfa4213b36fe9d85ac684de46f06
-MD5 (NetBSD-6.0/hpcmips/installation/pbsdboot1.exe) = 4d6c719c61a98aae297369c41e3991a8
-SHA1 (NetBSD-6.0/hpcmips/INSTALL.html) = 34d4a448b23da2e50007d37ba33938d78baf8b03
-SHA512 (NetBSD-6.0/hpcmips/INSTALL.html) = 508dd90bf6b4543b31108ec82b96a8ef765ffd29d2fcfbb463e380bd8cff6909fcad9673a8c7307b8a524347c20c117a94220dc743813028785520f1739b8d89
-RMD160 (NetBSD-6.0/hpcmips/INSTALL.html) = 3e111666257f4bcbc22fba2a542559733ab56f28
-MD5 (NetBSD-6.0/hpcmips/INSTALL.html) = cea8b96d283b5ddec4b1be43b327a986
-SHA1 (NetBSD-6.0/hpcmips/INSTALL.more) = d4dc5bdab669d3e4a97c6e07e3a4e6634a171103
-SHA512 (NetBSD-6.0/hpcmips/INSTALL.more) = 90924423731cdaeca599d151e56ef996a4a217432ffe1791b3bf7ad2ea3e025ae031d9e237377d1cd7fbab33a6e8e666909a77bb4867be3aac99340e4292d140
-RMD160 (NetBSD-6.0/hpcmips/INSTALL.more) = d8517223e07059e28737972d4cc4ebee900a308f
-MD5 (NetBSD-6.0/hpcmips/INSTALL.more) = 6b918c9fc18e093fdae5e4c61fe2fe3e
-SHA1 (NetBSD-6.0/hpcmips/INSTALL.ps) = eb7befb368fa0e792db5c250f1cf7cfa9d21d529
-SHA512 (NetBSD-6.0/hpcmips/INSTALL.ps) = 42f376e89f871f1a1f223d12816ffa887891818897a591d7b6ac0495c088559eac383449569dda24bfae563991e775c89b55dbec27aac2449ce5363c02581ec9
-RMD160 (NetBSD-6.0/hpcmips/INSTALL.ps) = 718659993cfe1a81d63fcb9b7717e551c7213944
-MD5 (NetBSD-6.0/hpcmips/INSTALL.ps) = 660ff8cf43dcbeacb63a10a2ac4442cd
-SHA1 (NetBSD-6.0/hpcmips/INSTALL.txt) = 93686fc2958437cddbb8e0ab34efa7a153b16939
-SHA512 (NetBSD-6.0/hpcmips/INSTALL.txt) = f71addf8728978547ec7d560a4590e392cfb55bd2d06b9987def48a08373fa27fdc7d2d1bfd241d6c9d8b22297b180b434043ffbbe86281b56edb9d4b714a567
-RMD160 (NetBSD-6.0/hpcmips/INSTALL.txt) = 0da553b2c528d6766776dfae2005bd6ff531e905
-MD5 (NetBSD-6.0/hpcmips/INSTALL.txt) = 3c60451e18599c7e2d8bc6a79c6fc8e9
-SHA1 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-GENERIC.gz) = 0a43926fc91b70cb80d51c78394a2fa54fd98ae1
-SHA512 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-GENERIC.gz) = 42ba58126c60285a642156c27dfa9d89009b41739a832898f876abe6387edac7c36f08e71028c326ef617a29020e525d779def3e583381645b5a1fc6ba6413b3
-RMD160 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-GENERIC.gz) = 0d01f666a4b6fd2df148381e442ee85aa8afc635
-MD5 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-GENERIC.gz) = de0c019c15358bd1673689f590e64529
-SHA1 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-HPW650PA.gz) = c0359ab834228b4b0af9fd92ec0870cfa424fcab
-SHA512 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-HPW650PA.gz) = 6e2d1f10d4eda5725c7293c179162091fb9f04630f14bf37506e49700178b1baee5594ccf70fa3ede42ef702bb512016d9edef3a23cd0777fd40f961a43ba021
-RMD160 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-HPW650PA.gz) = f6b944beeaf6fda516165b2196b429db28741e96
-MD5 (NetBSD-6.0/hpcsh/binary/kernel/netbsd-HPW650PA.gz) = 7dc95c93d4b9b5a94e566c9f5565bd74
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/games.tgz) = 2040b4af557a62f2ade5fc9fcfe4cab3df88c7e2
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/games.tgz) = 8b5071337dc844042537c24c75660e61c9709cd10cbbeab059a84da6d482260b73365ff3870f85060c130a291b6f02be174d288127ca62ce4d291a6982192317
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/games.tgz) = 28acfa5a131d52df7c157e2edca1dd0f20e774dc
-MD5 (NetBSD-6.0/hpcsh/binary/sets/games.tgz) = d82c46dbc0021fd4694e464042936052
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/hpcsh/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/hpcsh/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xcomp.tgz) = 53aa1e2a910e8eed09dc07f8b724804f53fe5e2f
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xcomp.tgz) = 24645da85419528015cdaefd0c835741fa801392e795b363bdfc39558e75e7f384511c0668d12e2440114b7c543c7532aaec438048f08d35c54c9c7a748f20c0
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xcomp.tgz) = 60a461ffc1f1562274110d65c72a541ee131cd21
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xcomp.tgz) = f1d2650a8d7a4ecd60fda8e1aaf8c09b
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xetc.tgz) = 1636a6fe3e01f6d8a07a19cd204a6807c8caa4c7
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xetc.tgz) = 9cea4ba4af287dd57e591d4269f2f2582010250316f323746ac56b12cefcf2590b93fbb0197c665f61b1df41dcca62d17fb6ad80d4b1feb8ac8265e91e15074f
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xetc.tgz) = 5f68e3f96f7bb9ae07fccdb1d058e4b1307b4b29
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xetc.tgz) = da84d97230787283e215a4ee1c4053ad
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xfont.tgz) = 97439ccf6840b18b1e9885f5504a401bf1a93650
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xfont.tgz) = 3d15541f7d7ae2128f44355bf110415adfa4e5182829259d2c6f7a4217feff99e236d13c5bb7bbeb724ff1a09ac1f58f02bdd6eef528bc416ec3118db6fc7d45
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xfont.tgz) = cdc9fcdb5fd5032803d5bba18db58f3ea6d62c85
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xfont.tgz) = a8466a0477c6c443eafe99e9d1c61131
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/kern-GENERIC.tgz) = 567f596fd760416c4805a60ccdc39634394b368a
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/kern-GENERIC.tgz) = 517a450a02d80e4ae14463b5abcbb4e887d404ac5fd97a2d70092d9d53b6117af874171db26e1b43712b81f6f5f7c23d34ef4d6ee60a911c1288f07ed86675ba
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/kern-GENERIC.tgz) = 9f9a50ba10b38fd0a92e4671a61dc968ed206c49
-MD5 (NetBSD-6.0/hpcsh/binary/sets/kern-GENERIC.tgz) = 43c86c80541870470199c27117d78bdd
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/base.tgz) = 09469ee791c205b746f290108fb4e0fd2d2e157c
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/base.tgz) = b4f946a01df921d1b6b83db51e4da06934be1c23d5bd8602d357c4716524a944abd24f9053c130121a05a0a73b06124b1fb8d2e433b461e7122a6f7994b70d4f
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/base.tgz) = 9ba69deac2b406c07e38117048bc439865eb8061
-MD5 (NetBSD-6.0/hpcsh/binary/sets/base.tgz) = 7a62d7baa2d993d1de3d579d7076fdb2
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/comp.tgz) = 2487c8289908b3f46b47dfe16a78d041d159e4a9
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/comp.tgz) = 9e89c2f701cd69fc74aeb6ab03304f4bb51d73b6ff6c75b93906d2b05e42639e1da36dbce39a37519070a991bf5efe9ae93b29b6ae20da42fe2b01e951a51cf1
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/comp.tgz) = 3843c49d31f966f8d41b2b07407d5952eb788d18
-MD5 (NetBSD-6.0/hpcsh/binary/sets/comp.tgz) = 313b69abf3e1a78923f1a7c5c6f171b4
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/etc.tgz) = 0ede2593731365cb6501ca69865e1fdcfa72717c
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/etc.tgz) = 612da4fc764826c7f374c846d7712c4142d1cd041eb13944c578054fec342a2cb435c8815f9c477afc70a5655e35e9fb9eb1d01ee6c57218c944c6e11f18ffd7
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/etc.tgz) = e226671156547333000c60e32b9b24376cc63885
-MD5 (NetBSD-6.0/hpcsh/binary/sets/etc.tgz) = 420c5afbc0c1dd6c1d7a085979bab643
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/kern-HPW650PA.tgz) = 5534a47bdec7e7e6ce7d5474d3b159ffebe72cd1
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/kern-HPW650PA.tgz) = a7d789cafbe113131a7a93700ec06da4256ab5f93513d2ce96e0ed715a7dd99e866a89a907336a761ff53e53c20ca325b4a569198b75ca806e810395638a0ebd
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/kern-HPW650PA.tgz) = 2dcb3e3e54ce471cd2185469e4f788aeef5c6539
-MD5 (NetBSD-6.0/hpcsh/binary/sets/kern-HPW650PA.tgz) = e146321b865991498743de2b41a3c034
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/modules.tgz) = 36ccb3afb83508f713aa2aabd8c66990a7bee974
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/modules.tgz) = a9cc7bdcc7e3cb7aab35d329095b0b67cb46b13850f9897433539ce2836b96d38ba69ec95515ae8988a80864f865546dbb619352261f8e413ac21580c78a7be4
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/modules.tgz) = 29b45abec58e7be9e801cf6a2be74bcc56df595e
-MD5 (NetBSD-6.0/hpcsh/binary/sets/modules.tgz) = 82ca10605dffe603d39ad994e305b53e
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/tests.tgz) = d7eb3b59410ff4f341e9dd65c9995e160684fada
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/tests.tgz) = 443ff8b932876a515b75ac9b4eb1e225d2d09bd7dfc531f6e19f812e659de4644d0aac96ca74e73aa877bffbaddf13d308905f28cfe23d48a6cef1decf9b820b
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/tests.tgz) = 7030e2b09ddbe4bd952524d58f0916b2079a4bb1
-MD5 (NetBSD-6.0/hpcsh/binary/sets/tests.tgz) = 9a95f9e73414b2c3ad7acbb2241178fe
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/text.tgz) = 028f0e33f75acdbab625786cec067f630aa63e4a
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/text.tgz) = 434ec2e2627f4068e75db33cf4ad353ae1c7437c21d4aa0e861f06fb5eb1d85bae5ca15f7c1091017f76adb8b517a6e7860c5a406d157cf4485c1e6acfedfdda
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/text.tgz) = 37213e71f1fe2e1d8222d4b64ea6cbbbd2e40a4f
-MD5 (NetBSD-6.0/hpcsh/binary/sets/text.tgz) = da797fc1c503a808baea4b873b4575eb
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xbase.tgz) = 3c17cc530069599ced85ef999be6012422973217
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xbase.tgz) = 3dd6421f3248867b6015fcc420b29dcdbe82506c75b7bdd9698dc55b1a93e54d078cc93a68015ccf4bae00dcc96695702acde53f0a47f521116081f44255e205
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xbase.tgz) = f3a5a0df1ced2758ac1016c970034a8a7e9f16c2
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xbase.tgz) = fef3052b786c27898ebfcab88012729d
-SHA1 (NetBSD-6.0/hpcsh/binary/sets/xserver.tgz) = e518391c0fa08ecefd59c19049aa8b6e05427683
-SHA512 (NetBSD-6.0/hpcsh/binary/sets/xserver.tgz) = 85fe307f64bf7b5eb0300293426a377ddde46de15d7cdc7365eea65651d5b952cee395107dc6d73c55b19d43b19c47bac3bdc253d251c5f98858cd2d0aee8cad
-RMD160 (NetBSD-6.0/hpcsh/binary/sets/xserver.tgz) = 04274aa41e6f003c492c4d27e8a7182694a98386
-MD5 (NetBSD-6.0/hpcsh/binary/sets/xserver.tgz) = 3fb668ea3e2d13574cd78b5a59cc40df
-SHA1 (NetBSD-6.0/hpcsh/installation/miniroot/miniroot.fs.gz) = d65c961e5411c64f1110f55036f20c59b3a4ef75
-SHA512 (NetBSD-6.0/hpcsh/installation/miniroot/miniroot.fs.gz) = 95a54cd59939533feb467c23085569f35f2ac246a205825acb84ad8c144ae0c6cda888844270f74d452c5bbf4bd7056e9ae62e56f22c598f21a2cb92dcd8499b
-RMD160 (NetBSD-6.0/hpcsh/installation/miniroot/miniroot.fs.gz) = 10cd9e01b234129588477829523bed1ea19164f2
-MD5 (NetBSD-6.0/hpcsh/installation/miniroot/miniroot.fs.gz) = f5098b166d3da210356a284e484315e5
-SHA1 (NetBSD-6.0/hpcsh/installation/netbsd.symbols.gz) = 1a92b94312e5e4cdf5c088342d52040948fefc6c
-SHA512 (NetBSD-6.0/hpcsh/installation/netbsd.symbols.gz) = c0ca68315dee6c402bcd7a0180808d4a1c9fab799466d76a8fb460ae110c22fee7ceae5dbac451cb7a0d7ddb59d3af49f3965de88201778c7b14513f2ba1e61a
-RMD160 (NetBSD-6.0/hpcsh/installation/netbsd.symbols.gz) = d9c41a7a101b96727c040c0fdd992ba57999fc89
-MD5 (NetBSD-6.0/hpcsh/installation/netbsd.symbols.gz) = 67c48072e6d7c01c9c35c60071d1e371
-SHA1 (NetBSD-6.0/hpcsh/installation/hpcboot-sh3.exe) = 567ca586f3c3604143e61ee4b644faed466cf60c
-SHA512 (NetBSD-6.0/hpcsh/installation/hpcboot-sh3.exe) = bbbda6cb7c671816e07ac1ba9a05f57632f501019f9e7e2b3a373aa2b55bd56d600f7a6353fe433201284b0ff43908bc988f12568d95b251e8b89d5d5656b244
-RMD160 (NetBSD-6.0/hpcsh/installation/hpcboot-sh3.exe) = cac5d9056182928594f5c15b2c5d8a6bb54e6654
-MD5 (NetBSD-6.0/hpcsh/installation/hpcboot-sh3.exe) = af41643f4b488f837514418c34d06eee
-SHA1 (NetBSD-6.0/hpcsh/installation/hpcboot-sh4.exe) = 3b04443ede94fb5345be01440dfac5c600e46683
-SHA512 (NetBSD-6.0/hpcsh/installation/hpcboot-sh4.exe) = 60ae23af771f81a472d5ea84b5df140f9b2c2678753ca1878d51157366c9d04253a41b19a6bb5ef08ce755ec82b9fa67f82209fa6a0e49eb507e4ba8118dbc3e
-RMD160 (NetBSD-6.0/hpcsh/installation/hpcboot-sh4.exe) = 69a4509e0e173a94a2720f1469a00dd424e19ee4
-MD5 (NetBSD-6.0/hpcsh/installation/hpcboot-sh4.exe) = d259e7fcc3c329c95448f96b7fda6920
-SHA1 (NetBSD-6.0/hpcsh/installation/netbsd.gz) = 77bc4656ee9ce29522e56beeedf26cdec6df77ef
-SHA512 (NetBSD-6.0/hpcsh/installation/netbsd.gz) = 98ba42e9f3d8be016785ef5a807d009f6f8cf46a7c9c4abd8ad860fca5db37bbae22bdfe54bcd8b5963b1d0aa8610fca21402817ceac6b6e59a2c8cf7e986f21
-RMD160 (NetBSD-6.0/hpcsh/installation/netbsd.gz) = 705cf57dfbf1a1ee4e3629d1d82a60b8aa8cd6b6
-MD5 (NetBSD-6.0/hpcsh/installation/netbsd.gz) = 75c72e83a03c4d9f316f28e81c428c2b
-SHA1 (NetBSD-6.0/hpcsh/INSTALL.html) = 8ab73c33b0ecde2e0b0beea372a7996e866553ef
-SHA512 (NetBSD-6.0/hpcsh/INSTALL.html) = 7d7f628cd37890c8db79d76dcc9d87984b6ded522ccb2cb5670aa4a40114b1b323cb78b1b7274bb4bd27daefa25c3ee1dd0c6611736222ee546d0dd895cd6e52
-RMD160 (NetBSD-6.0/hpcsh/INSTALL.html) = 1e3edb91c943f9e1aa17315a592f5c68e7d66487
-MD5 (NetBSD-6.0/hpcsh/INSTALL.html) = 7b6883d6de2349156019286bbf61d14f
-SHA1 (NetBSD-6.0/hpcsh/INSTALL.more) = 29137bc092201f10bb2f2725d72299b5e5475b5b
-SHA512 (NetBSD-6.0/hpcsh/INSTALL.more) = 6a8737896c43bed9befbd131f8b13fc6070008f13bf9a9e798cc5bcb2210271f92c8b4138b20e716b5f48aeb478bc7ca9be66347d8636fdecd7bebb013b35ebc
-RMD160 (NetBSD-6.0/hpcsh/INSTALL.more) = b50c579d04464e3781f5bf7dcb4b69327d79a9a9
-MD5 (NetBSD-6.0/hpcsh/INSTALL.more) = 4f08e258b707193fea1797d2915df90f
-SHA1 (NetBSD-6.0/hpcsh/INSTALL.ps) = bc5b3e51e6a6f8a09ccac7db7f1ac85366921911
-SHA512 (NetBSD-6.0/hpcsh/INSTALL.ps) = 3945a024ba07da3ff29847c33f4061c8395113eaadf053b603b1391c3b994ee23c271442d90b8e9cfe104aee458348422068b5e704f8c89f2cd248e248414f36
-RMD160 (NetBSD-6.0/hpcsh/INSTALL.ps) = fadfccdee249158cab774c1bae128f6889f9bbd1
-MD5 (NetBSD-6.0/hpcsh/INSTALL.ps) = 01cdb6201ba834eb25dd70d0cd7dd827
-SHA1 (NetBSD-6.0/hpcsh/INSTALL.txt) = b291d1be7635867dda1fe5ffb3f24d41b43107ff
-SHA512 (NetBSD-6.0/hpcsh/INSTALL.txt) = 7a5ecbef64ad55680dcaa3e58319a5019096e1fef9ff24de2a8401c29b4006520dc724ff740c14f8bf56cc4fca1bf26a5525040c63d0de3559cfdc7f34710e2c
-RMD160 (NetBSD-6.0/hpcsh/INSTALL.txt) = a2e4347c690cb982b5097800f74a3729dc6c2628
-MD5 (NetBSD-6.0/hpcsh/INSTALL.txt) = 39020135702f1291d2691258a598ef52
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.symbols.gz) = 747df3225196d826d632a750770850510c725c3d
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.symbols.gz) = bf7546bf878dc86c2579e4660adfe0dfc2e7aa06416526ba2ce70425fee806f92bd7e61d2211aa8f302e167f77dd5e61674a1144274be7a3b9a14c13f2a758f0
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.symbols.gz) = e2aef01c044902e8685f72d3f0bba4b0ed6857ce
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.symbols.gz) = 71aca09f9e5bd22fd42144fbadabcda5
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.gz) = d680282ec53e51ed2f2df312764748ef2dbce31f
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.gz) = b9c3bf1bd9a442e5a7e7f515561771436b4c43e44cf454db37c94070de292aa6c00ab0a95957f80f71ffaa517a60dc1651bcb4452853f35fd541cbca2df87139
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.gz) = 60783b17fa32bdef611c8c8c793248f2494f8b4f
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-GENERIC.gz) = 780873f1a06cad1f8e2644f2827e6b8b
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.symbols.gz) = 986e2b589d49d58105c82c1a3bf8d4292f5ec1c0
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.symbols.gz) = 0919e2e21da9aace7144d82119ecf8097548ad7179b5f8b495b72b6ad75544c72d462526d7625a2b42fbf9c68a436b2d233ca7e06367f5ddf5be3386d67659ac
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.symbols.gz) = 4abf1e4dd5c1df9578a256eb7fc9bfc6de174f60
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.symbols.gz) = acd73bddb752df740099d651da32881d
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.gz) = 88fdedc8bea8f6e139947e6e4a8922324a2073a2
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.gz) = 0f13507f05a4dc76faa937fbb9dc8c5107b55e2a7dbcd97a6fd2dede7c2dff1f16ff0b908433b826125a2e1f5c4b9d14b9a809e920b92acd88968588b8129f1a
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.gz) = 0b7be220f16b74210af24ce8bbb42402909ad847
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL.gz) = 85d626d678c978ad387238dfc76e20a9
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3PAE_DOMU.gz) = 82987dd8d3d035c3741ec54e567c797aa527b85e
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3PAE_DOMU.gz) = 43c9d6c594b997834e1bfadf63a20fe0735947419a1e86e9e06bc97a7953738219eba2072f9a7b1fa6b23870287be413650145234d2c58166138bb00bd0136a2
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3PAE_DOMU.gz) = c0c2edf5e75878f0a07a2d7f971d020a16bd33dc
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3PAE_DOMU.gz) = a6a8ef4a7c0da213a9821e7f2d0e18c8
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = 67b61d551fd822e4578b9a8d54bc4a08a39f8b34
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = bfdb3e7ab7a5456434117156bd187d1f111eeedbc7a2d568266fecfeab33bf847fcc4b72e6edffe8015841b87aa04645c1c0442ce521c8965cd7007326b38e78
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = c5378820ecdb9baf20fabded1f5caa4a1d6a3021
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz) = a09e8070066fb225a26b0904422e1704
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-MONOLITHIC.gz) = 205b7f5a5c457a2db4c997c75c02d1f55a0692e7
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-MONOLITHIC.gz) = 68953183a437b13d94af72acbc231553e6aa57f4e3acbe432e710ad452317b974509a9ae83ea0f350d24164de4d1ae6a3d8d4a221e31c61734b67df026b93b03
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-MONOLITHIC.gz) = 11fd88405a800b36b7b030991e632d17992f5e15
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-MONOLITHIC.gz) = f746f0b2fcebfb329cdd45181f2acb74
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOM0.gz) = 6c7943423d026377f0d9308e8aac75d52f08907c
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOM0.gz) = a2fea33cd4aaebb2c2e69d8790ea40b0c2f00e8be3a823ca93274e534a751fe04efdc9d5ed7fc15897c42c9cc7d987ee645f50897cf6ef55383c448885a324f5
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOM0.gz) = 948c072d5d1424578e2ff5bc3bc7bca39364f8e0
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOM0.gz) = 1d4aafba1a470802f7f2c7e10e98ca52
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOMU.gz) = 2ae71d2f1c2b512d124e2d92d431ab5b2c1f05a7
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOMU.gz) = 9b553c5b145d2b29b9032416bc01f5c43bbad80f2c6feb1e96c881e4d1dd77c02740413cefbbd4fb6cd247cb75fd24959d5a60d3210020548236e3a14a82a65a
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOMU.gz) = 2b884a96bb6cdc3059448104c7ddafc31be7c188
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3PAE_DOMU.gz) = dba74b4cb61cf1606556492f6f1b213c
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOM0.gz) = 7b21a86bc29b1573539105b83e6f847124afee15
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOM0.gz) = 9f0a07816ba899e5d003750e1320c6f83c66bee70b71b1356980e64019a4eeff2ee105eea33dc31822c614609782e3143c6575afa7cd9dbfdf05c119ab2cb92c
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOM0.gz) = e976db5aa9e2e5e1109f804913e5a8f075708f85
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOM0.gz) = b8ec7670143458921b7dd71f05251257
-SHA1 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOMU.gz) = f528d474640a5bda692eb50859c208f2277ca61f
-SHA512 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOMU.gz) = 24f2b7317b51e12e15084d1aad1177a63d37be3ecc3777de4f7b2b93076e4c980a4667c7013db8bdb500e033e745adb665c45aa842d4422494d67beb3f2f4442
-RMD160 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOMU.gz) = 373525999967fd37d620cea1b0b38692ea102d64
-MD5 (NetBSD-6.0/i386/binary/kernel/netbsd-XEN3_DOMU.gz) = f76afc8d70580acebe22d4daba31df3b
-SHA1 (NetBSD-6.0/i386/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/i386/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/i386/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/i386/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-GENERIC.tgz) = dfbdb16d93f42cafac4314e173c3698abb2b2249
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-GENERIC.tgz) = 572284b4e2daab363f9f89f6bb9b80428f6d048fbb70120541b7cff881ed7fd8145b2a5dcafb63160a4292d286e57a3191154267167cedb7641f1ee3098072fc
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-GENERIC.tgz) = e663f76167f352828f007b3271408d0c4d1f6735
-MD5 (NetBSD-6.0/i386/binary/sets/kern-GENERIC.tgz) = 43a3993a20de2d5c58aa9a1aa90dc667
-SHA1 (NetBSD-6.0/i386/binary/sets/base.tgz) = 5847817e7b75483373fe51fb6b465404cb74e1ad
-SHA512 (NetBSD-6.0/i386/binary/sets/base.tgz) = 927acc412e1372e2205d4c90fe017b2812bbd6036823b6a18bfcc33513279bdf9f02731b874ad73f614da46194bdacd525a8bf9e301c5842f3f6475fa27507be
-RMD160 (NetBSD-6.0/i386/binary/sets/base.tgz) = b36be3ba67b7b2209c5baf2fe314ddc2a7254054
-MD5 (NetBSD-6.0/i386/binary/sets/base.tgz) = c643ea74ea234056b1f741a561790c1f
-SHA1 (NetBSD-6.0/i386/binary/sets/comp.tgz) = 0f22e69dce5b6678e1ab117b875c7b28f2a1224a
-SHA512 (NetBSD-6.0/i386/binary/sets/comp.tgz) = 99a73445be3ac1354a3ec94c7b4d231d3fe72bc2bc7cc020c9dd4c74d5fa06f1a7e681f48a2dbf3e90f0d8e611d51e6524883a1a4edf1494607259bc1c49a99b
-RMD160 (NetBSD-6.0/i386/binary/sets/comp.tgz) = 1bae0e183624d0dc957e24eb52041e2b3e42492c
-MD5 (NetBSD-6.0/i386/binary/sets/comp.tgz) = 5cff8ef6491c3b9270310558ca8360db
-SHA1 (NetBSD-6.0/i386/binary/sets/etc.tgz) = 00df7a05fddcdbbf9e0ee430c634fd1e1da2a2db
-SHA512 (NetBSD-6.0/i386/binary/sets/etc.tgz) = 0100afa02f2c0f09bcbe513b282b7e23124b94d5d77816f88c7b927e0625bedde3020b0c34e03f26da5d53941cdb0aac1398d2e15c9b4bc6cbb4e46e4bf8786a
-RMD160 (NetBSD-6.0/i386/binary/sets/etc.tgz) = 978efa1d91dea561eaa148f4da679a88e1730c7e
-MD5 (NetBSD-6.0/i386/binary/sets/etc.tgz) = 3f174862437df05c82293f93a42a52f3
-SHA1 (NetBSD-6.0/i386/binary/sets/games.tgz) = eb79bb969242401a2573c8cb861e399f374ffdce
-SHA512 (NetBSD-6.0/i386/binary/sets/games.tgz) = 537eaab987a71933b63673477c276cf3b558f4dd46331ea224f5c0f2b0ac387fb591a7880b1055225746b9c46fcb4ff0f8b72382a629abc6af6315ee038c0d0d
-RMD160 (NetBSD-6.0/i386/binary/sets/games.tgz) = cfbc8842fcc975fdff71c6fc472396d533d8aa5c
-MD5 (NetBSD-6.0/i386/binary/sets/games.tgz) = df096416d676f1a44710711d7c895329
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOM0.tgz) = 714c9b6c0a41973c06ea62a97babb7000ea1245e
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOM0.tgz) = 97529a4c90a36ad65bec57dca59bc80f724981c4358d32195e3b4e614761fae96a79cab552fe0388e7c8e57da581a2b07a84a44d12d32f23e6ce45c771493ccc
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOM0.tgz) = 0171b60434e21cf6d29d38300c05988d19ad1783
-MD5 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOM0.tgz) = 6baad66e20421f3fb0af25e4b95f8a6d
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-MONOLITHIC.tgz) = 52d1f2b561194201e67abf1ba2c1726d72e97984
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-MONOLITHIC.tgz) = 19aa162f30e144882f2924be4b864821e109991ca16027c4016d54baf812945c8231f423d141091f08ecf8dc9310a74fcbae43b6ea18578afd1bef3346772cf6
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-MONOLITHIC.tgz) = ca3d3b0cb59e5d5ba2089b6cf250c62c079b6855
-MD5 (NetBSD-6.0/i386/binary/sets/kern-MONOLITHIC.tgz) = 56528935806a8a2ec9f48c6dbfd9c175
-SHA1 (NetBSD-6.0/i386/binary/sets/modules.tgz) = a6d22e796d8b1f344b43bcf38fbb79e53ffdce13
-SHA512 (NetBSD-6.0/i386/binary/sets/modules.tgz) = 9bbf31b0e1c1192e9ff0ff38f0978c4c2972a82638e63f5f023bd7263ff9386d36cfd666e55e62a6bf3bf3e8c47571252b3508e485ec86830caaa89c66c19fe7
-RMD160 (NetBSD-6.0/i386/binary/sets/modules.tgz) = e3dcc86e04adaa6f347d51801422854b35fcedfb
-MD5 (NetBSD-6.0/i386/binary/sets/modules.tgz) = 71908d43cbba617e2ff14e3fffa3dae0
-SHA1 (NetBSD-6.0/i386/binary/sets/man.tgz) = f526dfe015359f1181af9cf3dc6061960289451f
-SHA512 (NetBSD-6.0/i386/binary/sets/man.tgz) = 75dc7781f8531f09bee6f1696561d036b12f08a66a44c4e56b11986e6d91df213ca8b4c6e59da9a2168038c94322c6cfdcdeb52125f5fb03c5b84cdb9522bd7a
-RMD160 (NetBSD-6.0/i386/binary/sets/man.tgz) = 1f8551b79ca0342aaf8df0c6f2a77e7337cb7672
-MD5 (NetBSD-6.0/i386/binary/sets/man.tgz) = 6114b3fadf0a5e3bf8fde0e7bf0101fc
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOMU.tgz) = 4e24d5f9641c69962f0e9124a3a0082074db7117
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOMU.tgz) = cbbd3c74d74bcd20c8fe2dfa5052b6886a5d25bf8c7aa595638655af790072bd3067e8555201849c2f3d0ec67465f41721c4a8aa14fb060231683de850fd6e99
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOMU.tgz) = 56610e7d2c9e2844ce0516255bbf76b330d23f80
-MD5 (NetBSD-6.0/i386/binary/sets/kern-XEN3PAE_DOMU.tgz) = e79dd5d5ca1fc640045efccb106e6a01
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOM0.tgz) = 9c8c6c75aec356a4b6591bd5ce5fcf0e76536c41
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOM0.tgz) = 2acd400b61f87b32e41daf0cb89b512d887f222310cab9be25f2b030480b720042c86abb68ae81ba73875a2c70dfc01184e1e771ad671e98383ce9c8357b4e8e
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOM0.tgz) = ac64d2c3ff6ff7352d43f4f275cfc07a509e40de
-MD5 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOM0.tgz) = 5541acebbb837f4882be868d86bc2b22
-SHA1 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOMU.tgz) = 01432bab26f65297c0739bc3eb4740bd984d67ab
-SHA512 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOMU.tgz) = bd7221f127923ebbd3099589b5bfd332cadbdcf2ad29870b9eee66b8241d1ad50c4d9481647d41d9ceba1e7071735538acd19d458d78e666d2b8ae1b097f993b
-RMD160 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOMU.tgz) = f9c5fd62ac6b11f4cb1ab8eb648f4ee51209ff17
-MD5 (NetBSD-6.0/i386/binary/sets/kern-XEN3_DOMU.tgz) = fead463ca4403cdf358b55114421e53e
-SHA1 (NetBSD-6.0/i386/binary/sets/tests.tgz) = 65e60f978857f50c36bf4066ad82acee0ef06af4
-SHA512 (NetBSD-6.0/i386/binary/sets/tests.tgz) = 714220aecacd2640160768ae00089cb25b5d3b5cf29f715e32257889159699566fe8d9b3bbcfa7bb6e2864ee1945dbfc61b48a66e20463025774616d91cc5392
-RMD160 (NetBSD-6.0/i386/binary/sets/tests.tgz) = 83c54132cfa9e7b0b5352466070bba098576ff86
-MD5 (NetBSD-6.0/i386/binary/sets/tests.tgz) = 1cf15f457ca67156d7dad0f7723ed259
-SHA1 (NetBSD-6.0/i386/binary/sets/text.tgz) = 0e426ee26f13d2523798fa8c09e934725087dc5e
-SHA512 (NetBSD-6.0/i386/binary/sets/text.tgz) = 2809f127e3baa3e6ebdb181c31620b68d01e90208bd191db99aa9657c91db9a97b061cdfdc2d7a39fbedf2288067f2ed885d6515fdcf8e5b5a68dc754e9b3e30
-RMD160 (NetBSD-6.0/i386/binary/sets/text.tgz) = b30ff1dd8f2cfe414939980d4be3b61f39c04353
-MD5 (NetBSD-6.0/i386/binary/sets/text.tgz) = 2667947b26dffe05f3de7d1e2c8906d7
-SHA1 (NetBSD-6.0/i386/binary/sets/xbase.tgz) = 934f64b717d722045717691a55fb9d295f83b4e3
-SHA512 (NetBSD-6.0/i386/binary/sets/xbase.tgz) = 385cf3a944f4a6ef7271220f0367f12d123d9a2b84ebd3ca46181279f7cf5d544a946df3e10ea52f1e07638c5bc5d0b766fd63bed4e08b468f6ea5b0a75e17de
-RMD160 (NetBSD-6.0/i386/binary/sets/xbase.tgz) = 04203a7b8bb5cd1a41aeeb2b92697677cfe58e98
-MD5 (NetBSD-6.0/i386/binary/sets/xbase.tgz) = ec9f6a167fd05c459f1fdf8cc889785d
-SHA1 (NetBSD-6.0/i386/binary/sets/xcomp.tgz) = 7bc2f4e10afaa599959832c62f024d9f2f45bc10
-SHA512 (NetBSD-6.0/i386/binary/sets/xcomp.tgz) = 148bfb83357133e5377aeee82fdae29e0b90913ba59b1f51264108ca70010d55bd4adc4ce0ba7611a83b5f3f13307f196f724f3cb3a170d7f2caef801b79cc38
-RMD160 (NetBSD-6.0/i386/binary/sets/xcomp.tgz) = be8c61b5890936fc93dfb88c02c5f17f79f3cc73
-MD5 (NetBSD-6.0/i386/binary/sets/xcomp.tgz) = 9c25f1bf64f97c778e3c87b6e0e72871
-SHA1 (NetBSD-6.0/i386/binary/sets/xetc.tgz) = ea4db636b3919906a00e7b161b2c5f62fe7b4fa6
-SHA512 (NetBSD-6.0/i386/binary/sets/xetc.tgz) = a59442b3ab58c33774197f9bb28a96836b4c519c750270bd880d166250523f8119a68a9de6b6861f76cdf713da9682772e754075c965c56aa260b52ed837943e
-RMD160 (NetBSD-6.0/i386/binary/sets/xetc.tgz) = 28e3ce094b557af508e1ec82ef46ebb01eb68509
-MD5 (NetBSD-6.0/i386/binary/sets/xetc.tgz) = 2a521f73ba4bd630070b01f24c8647d6
-SHA1 (NetBSD-6.0/i386/binary/sets/xfont.tgz) = a7a41c82046568a695ba0afeb81d11bf92e67950
-SHA512 (NetBSD-6.0/i386/binary/sets/xfont.tgz) = f46f4c6b4c61bbcbde85333cc714654902263c92e70035545caba3f3e2d5029cb074c8e427c85ea83b8478b19f32b93c4735a7adf64cc75609a4acd1118d0416
-RMD160 (NetBSD-6.0/i386/binary/sets/xfont.tgz) = 8863108bc2cc456cd1298b5317f519c5c6b3147a
-MD5 (NetBSD-6.0/i386/binary/sets/xfont.tgz) = 36e968072dae462efddd6014f9f44272
-SHA1 (NetBSD-6.0/i386/binary/sets/xserver.tgz) = 27fd7ca36d5a3ca94b66eb5fd81ceeaed1648fe0
-SHA512 (NetBSD-6.0/i386/binary/sets/xserver.tgz) = 6a0d364672e4513dbf4c76c1cada80f84e774efa85c3e1fe4865ab26333765fab1db8ce3b590682a3e2c63895165e0d694c3e6717789b2f0ec87defa608930dd
-RMD160 (NetBSD-6.0/i386/binary/sets/xserver.tgz) = 7521930788a2410a2842767b9c2886af83fccad7
-MD5 (NetBSD-6.0/i386/binary/sets/xserver.tgz) = ce3565a1b5e8af09e54ef8488edb14df
-SHA1 (NetBSD-6.0/i386/installation/cdrom/boot-com.iso) = bcfbd8c6288248e55d78704802dfdbbd1d20519a
-SHA512 (NetBSD-6.0/i386/installation/cdrom/boot-com.iso) = 9531877436cf8853db4dbd96672cb13a0784a1eef2a90ab43aeaae421f70bb6bdab7d5c10095f186b733d04ee1184087ff7b5d26ec7ef77d0783ee0f5c0d21f3
-RMD160 (NetBSD-6.0/i386/installation/cdrom/boot-com.iso) = 46205ca4d924c43e85b01b7750274f31fa2ad170
-MD5 (NetBSD-6.0/i386/installation/cdrom/boot-com.iso) = da3da9b120520e631bc5c17dfb70bd27
-SHA1 (NetBSD-6.0/i386/installation/cdrom/boot.iso) = 146e96103568f2ab3e98c1a0c7b98f89a93ac474
-SHA512 (NetBSD-6.0/i386/installation/cdrom/boot.iso) = 5073e008276c0fe9a4c3231bea37b2534e40d20b17d32a5bb30e9811a0578feae08a810a808201f44f74ab7258a58c5c1dfa1cc59ad0d4d41eff02f6772dade5
-RMD160 (NetBSD-6.0/i386/installation/cdrom/boot.iso) = 54ff36aedaa5266fb788b1b3f74dee0799c432f7
-MD5 (NetBSD-6.0/i386/installation/cdrom/boot.iso) = 6d1fae4935084e853fa152e09b472be5
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com1.fs) = d4891595c9155d7598f1718cce43ed2fde9d4aa8
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com1.fs) = 89d2af1f41e20deba16c1abfdc4709f353021710ae33ff40f9f4f20dd4c875db855f2bddf9af444f49dfb2d1d1caf0a2f3eab7bced113c45708da590092c9b04
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com1.fs) = f2d8d259d8abaed540079cb0301fd111462bc0ba
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com1.fs) = 320d7fcd247eee78495d4bc56205ba9f
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com2.fs) = 25012df4758eca3d307004fe1b448bfd1002b6ba
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com2.fs) = 3ad3778e665bbb8a0ea8e39d9c6a9144a79fc158aeef0af4bac90ee98561beb460b2f3993c929f27a1f26170be53d153faa0ec523e402bb1143d9cec5a54ac91
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com2.fs) = e76b6f6a667e4548f8efdce8fded360a9ab7ce00
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com2.fs) = 1c731748f3af6300b39311051870dd5d
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com3.fs) = 00f812e968818ac87e2f0217b9aa2f67cf1826b2
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com3.fs) = ac293ed38646e83851e74e70451893b301fe935fd4ee91fbe2f66d4a49583763ce3a5a123f05e38d0806e6b51c6db01dce467908f7ac49447b872e1a06364e74
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com3.fs) = cd261aa83970e5699763ec792aebbc4bcedae712
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com3.fs) = a9073f83732b763206b32fd46c166fab
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com4.fs) = 6d9f052a4ba66b7a8d818418c7548a96b358189c
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com4.fs) = 86909e41525fe7744c3e10f523b7bd2651a80a000906e7040bae8fadeed8f2ee00e6d39998aab110a4aedbe9af95aa15eff7a8fd5781b6d979545c7751c54aea
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com4.fs) = 64980af391f001e6b67d6b603fd67e3d424a48a4
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com4.fs) = 9868c40fe2e4e26b0db5eb1a24d4b84b
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot-com5.fs) = e138754c8978462f24c07a3e61be0085592ab1be
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot-com5.fs) = 785ae7b940e77d108d20f4c8f9625db138334144e740ccf15949e4434572115fdcafecce25c3ea9c0e0d260e7d4c526a860bacda09ab8b2823d5d48a3a220b1a
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot-com5.fs) = 9eae2380cd42784b68dba1da19eb8e7a2f37940e
-MD5 (NetBSD-6.0/i386/installation/floppy/boot-com5.fs) = 6f1b2546ecddd49db5fae090706ced45
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot1.fs) = 955c193dc080b69fe111652972bb1a4a5fb88b70
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot1.fs) = bea5bb410069dc463f5d670ca33a8040c6bc741ee30e90c93492ce5110334f0e87cc519571f35f2962bc18de0352c3f50002ceb8346f4aed84069b60c61740a8
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot1.fs) = 3828a790e9743011d6b2f257f79deecee3686c4b
-MD5 (NetBSD-6.0/i386/installation/floppy/boot1.fs) = 83997622af685d71b47e687ee0226d5c
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot2.fs) = 25012df4758eca3d307004fe1b448bfd1002b6ba
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot2.fs) = 3ad3778e665bbb8a0ea8e39d9c6a9144a79fc158aeef0af4bac90ee98561beb460b2f3993c929f27a1f26170be53d153faa0ec523e402bb1143d9cec5a54ac91
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot2.fs) = e76b6f6a667e4548f8efdce8fded360a9ab7ce00
-MD5 (NetBSD-6.0/i386/installation/floppy/boot2.fs) = 1c731748f3af6300b39311051870dd5d
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot3.fs) = 00f812e968818ac87e2f0217b9aa2f67cf1826b2
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot3.fs) = ac293ed38646e83851e74e70451893b301fe935fd4ee91fbe2f66d4a49583763ce3a5a123f05e38d0806e6b51c6db01dce467908f7ac49447b872e1a06364e74
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot3.fs) = cd261aa83970e5699763ec792aebbc4bcedae712
-MD5 (NetBSD-6.0/i386/installation/floppy/boot3.fs) = a9073f83732b763206b32fd46c166fab
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot4.fs) = 6d9f052a4ba66b7a8d818418c7548a96b358189c
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot4.fs) = 86909e41525fe7744c3e10f523b7bd2651a80a000906e7040bae8fadeed8f2ee00e6d39998aab110a4aedbe9af95aa15eff7a8fd5781b6d979545c7751c54aea
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot4.fs) = 64980af391f001e6b67d6b603fd67e3d424a48a4
-MD5 (NetBSD-6.0/i386/installation/floppy/boot4.fs) = 9868c40fe2e4e26b0db5eb1a24d4b84b
-SHA1 (NetBSD-6.0/i386/installation/floppy/boot5.fs) = e138754c8978462f24c07a3e61be0085592ab1be
-SHA512 (NetBSD-6.0/i386/installation/floppy/boot5.fs) = 785ae7b940e77d108d20f4c8f9625db138334144e740ccf15949e4434572115fdcafecce25c3ea9c0e0d260e7d4c526a860bacda09ab8b2823d5d48a3a220b1a
-RMD160 (NetBSD-6.0/i386/installation/floppy/boot5.fs) = 9eae2380cd42784b68dba1da19eb8e7a2f37940e
-MD5 (NetBSD-6.0/i386/installation/floppy/boot5.fs) = 6f1b2546ecddd49db5fae090706ced45
-SHA1 (NetBSD-6.0/i386/installation/miniroot/miniroot.kmod) = 3949ed3ca0384f45c40b59eef585566e947fc150
-SHA512 (NetBSD-6.0/i386/installation/miniroot/miniroot.kmod) = e91e8d4aa8ef1f81945c495df4b43f8bcc669fa1f0183c5d0092d526889d985432d6f318418a42910596f1f44cc0d235d32a0b5e3aa1572198182ff1d90188c1
-RMD160 (NetBSD-6.0/i386/installation/miniroot/miniroot.kmod) = 2d67e98155d79210ae2349fb13937724f79cef47
-MD5 (NetBSD-6.0/i386/installation/miniroot/miniroot.kmod) = 2fbac91d26cec04141c2c79a18aa839e
-SHA1 (NetBSD-6.0/i386/installation/misc/pfdisktc.zip) = e3dedc5211120fdb8259075541a6bf4fdb5a0c5b
-SHA512 (NetBSD-6.0/i386/installation/misc/pfdisktc.zip) = 2f4daa1b52b4f40be868ee04faf9b55f17df64ca03ed0b6577f2f1680692226b68d84c0a9f59fd0b08085219555c25e52e447053a6e03589957718b954aadeaf
-RMD160 (NetBSD-6.0/i386/installation/misc/pfdisktc.zip) = 29ed32ef8b4390bd1545f9337f16994a154c20e6
-MD5 (NetBSD-6.0/i386/installation/misc/pfdisktc.zip) = 33c938480de81999f82a3ba3fca0b233
-SHA1 (NetBSD-6.0/i386/installation/misc/dosboot.com) = 0c89f2a01913cbd69002b821273fe196ff835f89
-SHA512 (NetBSD-6.0/i386/installation/misc/dosboot.com) = 661bb1a057d23a8dbd8f33216e590439e83b8cbc1ee7988980de68890148c8d86b9e58254be366afdc92b8238cf1d304ce972b518e4656ed9a378fa5eb7e03e6
-RMD160 (NetBSD-6.0/i386/installation/misc/dosboot.com) = 11182a8c2c18dc561e9b07f84895e21f81d42aeb
-MD5 (NetBSD-6.0/i386/installation/misc/dosboot.com) = 8d32a69f5a7c200404b5e6747eb38397
-SHA1 (NetBSD-6.0/i386/installation/misc/pfdisk.doc) = 9886ea575769f46c49251fe1b096c860457e996b
-SHA512 (NetBSD-6.0/i386/installation/misc/pfdisk.doc) = a34e971ec8a0d1eb5107ddfa2a5a6c7eb028ec58235983658ccee2e3b42bd2e40e2ff4504a2b6aa16668a918e17f0d1866ca4ef904df114f30674dd9f8e32c17
-RMD160 (NetBSD-6.0/i386/installation/misc/pfdisk.doc) = 9e6ddcbeab7d6894f3173efbc9b1067d40d79409
-MD5 (NetBSD-6.0/i386/installation/misc/pfdisk.doc) = 7c9091037c42ecd0d1fb67275af0650a
-SHA1 (NetBSD-6.0/i386/installation/misc/pfdisk.exe) = e780cbcd893d446cc9d07950e9b9462d9a02e439
-SHA512 (NetBSD-6.0/i386/installation/misc/pfdisk.exe) = 798a00ddfd76ffcae1dd427ebcd9eac6ef4fc54bb0eeeba36ecca3903b9de785ff6113e3ee0960ca695d9a8196dbdd3f7434530e50dd0208d5b872e989038c3b
-RMD160 (NetBSD-6.0/i386/installation/misc/pfdisk.exe) = 4569b5259fb5d13606e521a4d85a0748afa92670
-MD5 (NetBSD-6.0/i386/installation/misc/pfdisk.exe) = 6e470b18a39a3b7bf7c8fe7c34241da7
-SHA1 (NetBSD-6.0/i386/installation/misc/pxeboot_ia32.bin) = a1c0c4f7137ad0c4131aec154c3cdc7fd62c4ad6
-SHA512 (NetBSD-6.0/i386/installation/misc/pxeboot_ia32.bin) = 4ef5af523ac4d164885c4ce7ea8286303ce1a60d6225730d98b14f6b96c56c1227bf8bbd4d4ee77ff30645e5f0375aea1f879fc1f61de1263bc5f68e470abe28
-RMD160 (NetBSD-6.0/i386/installation/misc/pxeboot_ia32.bin) = 732aa68a238219b0fa20ac73fed5cdd59ba4b775
-MD5 (NetBSD-6.0/i386/installation/misc/pxeboot_ia32.bin) = d56818a2c96b381e6b907ef7ee5c146d
-SHA1 (NetBSD-6.0/i386/installation/misc/rawr32.exe) = b43acce43bab52a4d7a5cca69b5c448700c3084c
-SHA512 (NetBSD-6.0/i386/installation/misc/rawr32.exe) = c8e466f2a57083a0cd577720f31ec6d84096680e89c824b633f168ccde962be28cc3ec8019cf136a12437b3df92b872a3600266857c4e5c43f12c6989ce3490c
-RMD160 (NetBSD-6.0/i386/installation/misc/rawr32.exe) = b0cafd5f6dab34b71cbd5885821188bb8479bdc8
-MD5 (NetBSD-6.0/i386/installation/misc/rawr32.exe) = a38e68ebd955604d1b4e137c8eb63dbc
-SHA1 (NetBSD-6.0/i386/installation/misc/rawrite.c) = 45e127dcd24e3a5666d1d4fff54349ca9bf5c077
-SHA512 (NetBSD-6.0/i386/installation/misc/rawrite.c) = 05315a055d1b95bb409c986e3a4faa0ffaf407a239ca32638b8df05757af480cd409abf141cc9b695bf2f61ececbb0de07737a9a927e8c9d9e9f78c39a54c9a1
-RMD160 (NetBSD-6.0/i386/installation/misc/rawrite.c) = 424511ff8fe6118c147cda137803fbc3bdea34a0
-MD5 (NetBSD-6.0/i386/installation/misc/rawrite.c) = 606e8042f2343028bbe2fbb7db391c53
-SHA1 (NetBSD-6.0/i386/installation/misc/rawrite.doc) = a5d3f4916c427ec4ec93d3b1e044f8141ed83dd8
-SHA512 (NetBSD-6.0/i386/installation/misc/rawrite.doc) = ccc3a2b7daadd7527e048de382bdf37580fc8069f5ad2e9f5f8feec5e50374ad2c8a8cbd293f38fffddb08a84573f13ed1152695f64a9c4b745c6e6dae793401
-RMD160 (NetBSD-6.0/i386/installation/misc/rawrite.doc) = 892d37aa0401f9d42effec57944c007e7a6d530d
-MD5 (NetBSD-6.0/i386/installation/misc/rawrite.doc) = 0006cfba390f738eb0d4f6c2fcafb7c6
-SHA1 (NetBSD-6.0/i386/installation/misc/rawrite.exe) = 81152a9688b5fdce26ba09c1685ffa842e31c83d
-SHA512 (NetBSD-6.0/i386/installation/misc/rawrite.exe) = 76ca20eca1b087c8d583b23c52734ef6db49f15d5bbbc4da0eef301b2b46fad5b86c063e4d868bf3db41c625e022c4604759e1a1bc50c9caff2665eaecf11920
-RMD160 (NetBSD-6.0/i386/installation/misc/rawrite.exe) = 2b5707df5c5a7a84b8e80fafb03442fd29ca3eac
-MD5 (NetBSD-6.0/i386/installation/misc/rawrite.exe) = 7dac6ea496014d32dbce6c50feb254ca
-SHA1 (NetBSD-6.0/i386/INSTALL.html) = 6b92ae0724869e0b33123151562db113ff87310d
-SHA512 (NetBSD-6.0/i386/INSTALL.html) = a3541d32c0c954af91d5af22c7b1d134096a4d87f61baa9e76d192aed5461f5a44bca260dfabc3cf1979b9736958ea2d4467a5f98023bf816ea9915c6ad81786
-RMD160 (NetBSD-6.0/i386/INSTALL.html) = beba55314f919265ffba84528a2ed7b2ebc2ef7d
-MD5 (NetBSD-6.0/i386/INSTALL.html) = 5597002f70f1f3e1905becc1a21b5046
-SHA1 (NetBSD-6.0/i386/INSTALL.more) = fd226e8ade97b7071048c7f3a71d68b8f2fbc440
-SHA512 (NetBSD-6.0/i386/INSTALL.more) = df5bfc36c307a943d5def074292619b8b9452b7d8ad612feb6e3aed63534c5698701fa0008e007f6b08a742141643b2d9d82d3386a1194421c556a499e12b1b6
-RMD160 (NetBSD-6.0/i386/INSTALL.more) = 811bda03f587e977180da84b2ee3a1715e059a68
-MD5 (NetBSD-6.0/i386/INSTALL.more) = a080d66a0f33055ae14ac59dd13b6c11
-SHA1 (NetBSD-6.0/i386/INSTALL.ps) = 81b57f86901189d2f513553abf30858d95ce11d0
-SHA512 (NetBSD-6.0/i386/INSTALL.ps) = b2fcab6677f9949755c9aa702719c0572c7a7198c926e8d50103e513f2c44ec92b11147488eea8a1f0e5f04c3e024480cde2c47e538137b99f80df27f9deab91
-RMD160 (NetBSD-6.0/i386/INSTALL.ps) = f7e87587ad8249b5f71b89988802cbff68e645cf
-MD5 (NetBSD-6.0/i386/INSTALL.ps) = 134248944ca4bca697eeb3aaa49c1dc6
-SHA1 (NetBSD-6.0/i386/INSTALL.txt) = a1072904f9c7baa1f3b9136a12e7b8fe7821f757
-SHA512 (NetBSD-6.0/i386/INSTALL.txt) = 4229cbe31deb065a67fd10b737e4acb0784f9a8b31546e4c9d8b41fd002e81a9d48acf08a455dfa488669358d19cc1daa5c329cd3ccad5bfa1471432656fc70f
-RMD160 (NetBSD-6.0/i386/INSTALL.txt) = 2dee238856637d6990f33f3aac177f34478c6ff1
-MD5 (NetBSD-6.0/i386/INSTALL.txt) = 92702556c5a08e156b8eae602d975fdf
-SHA1 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.symbols.gz) = c4b53dcc495fbb67f30084776444088c6fa69af6
-SHA512 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.symbols.gz) = 08dc9f41dbc5f88e4e4d718880f8ac072ee9386daf727cd717b7276c88443dbe194781b062cd29409a964737cb8b27f0b158dfefbcb1b4226f9bc40deedd1f19
-RMD160 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.symbols.gz) = 5d66efd39a08359a525748ecd06b42705c53028f
-MD5 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.symbols.gz) = e819b2d7af2bddcf3d4cf935724695f0
-SHA1 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.gz) = 0494a909caf1ca5dec73b1f5aada6ef099653a7d
-SHA512 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.gz) = 5ca8f4fec7a5b89369934e081f7316c4e482ef7090ed8904f0985e941e20bf42fae8396d7da4151b78234568b0a735667b56f7b480fa37d1bba36b594d3d71f6
-RMD160 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.gz) = 2ff1c7a5c604f56f85ff3ade294e3cb55c053ac3
-MD5 (NetBSD-6.0/ibmnws/binary/kernel/netbsd-GENERIC.gz) = d4f4dfb62bac44f16e9bd16c7df8a501
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/ibmnws/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/ibmnws/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/ibmnws/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/kern-GENERIC.tgz) = c9804814e9b76392c467295e0700798f7305d9ea
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/kern-GENERIC.tgz) = dbe66f41c0023cf48726763c0accca7d17146888cef03f6bcd8356f48bca2a5685e60224e3369fcf4ebc524843a9e3a2df558199a4b2b1a43cc7b22931c52c5b
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/kern-GENERIC.tgz) = e054c430a723e57798b9f13d852d6be6895a6b18
-MD5 (NetBSD-6.0/ibmnws/binary/sets/kern-GENERIC.tgz) = 9bb6d0f70b522f8bdfe0da0855fe12b2
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/base.tgz) = 150b9b1ed403c611d17b3bf258f7bf064f3f76c6
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/base.tgz) = 7c9eb4dbb9e770395ea516b27dc37c86a34d10437bfbc59bd6b55ebd9a3565e470ee7553a238e69012c7eb19f1fafe3bb94d750c642c179190566d0b97ba79f7
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/base.tgz) = 6f959eb6b88fa607c19c9ab5e0b82d172960676e
-MD5 (NetBSD-6.0/ibmnws/binary/sets/base.tgz) = 1d2ccb914175ffb1a6e90e787914e08d
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/comp.tgz) = 449a6e0ccfaa3b9105912d05d4204242bab79635
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/comp.tgz) = 5ceb6d751f429f466ae15f98244e82f32461f7f0bf546c982a1e35bcfc4c6c845a121ecf07b387189fa4173d672e0291a0d396010f5c6ab9130f3264ef26f36d
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/comp.tgz) = 6d544592799a77914a724215f8514f0d22bae2b2
-MD5 (NetBSD-6.0/ibmnws/binary/sets/comp.tgz) = 84f35afba48084d9eed192a484616382
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/etc.tgz) = 4ec9d5606ead158c85791c298c829a030aaa6acd
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/etc.tgz) = 2786ad3a1aca388352f2c4fa1da7da624d9762c4d8c7deec54441bd3ce95c79cb2ccd6fd15619a224987f9726c66d5a88b825e57b69b68aac7033ce80c96af3e
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/etc.tgz) = 25c6401fec22c9ec3f2bc6c3d33127b9222def9b
-MD5 (NetBSD-6.0/ibmnws/binary/sets/etc.tgz) = 9f83cc04c872ec0e355e2528387cdcac
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/modules.tgz) = fef0894685186ef94fc691e71a8a366fe7bb66e0
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/modules.tgz) = 0051ecab124fbe7a4a8005ae4fddc9b4be520e6be5c34cd1811f6c280e35f10d79914756f5106a840177b7cc33f39db337c3f461f00669c1838a6ac0c2204ee5
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/modules.tgz) = fce29d3683f7e0eec8e0b45c94bba924bad6b5d7
-MD5 (NetBSD-6.0/ibmnws/binary/sets/modules.tgz) = a47b110fc0e721d6849bb6fa4d3a7ab3
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/tests.tgz) = 3eb8ca45b13b0c43f1d9e10322b8b8469859ffac
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/tests.tgz) = d9d2bc61ad2f5ba8ca9bd4b53c348b01fc4f7dc7417d14fe7c6c3f68b2a0ff32221bda546b9ca26a0b998ee72a393e3231de17c94bd1e72a0bc6365dba42ea5f
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/tests.tgz) = 8348b43e8543ad7ab8ba46978930fd7bef910c6d
-MD5 (NetBSD-6.0/ibmnws/binary/sets/tests.tgz) = 5cb30f9ed33e774f3c1bc14cea070f34
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/text.tgz) = 38ca726175c32d5ef01309254f51584001f2888b
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/text.tgz) = 78102b1494c3e0d92ee40eaed00cdf6a4cd9e6d5dcfe2f523442fdce7f46d9de2e63c9ee5e0ba90fbae71509518ed2d212a0eab357f0a235ad8b4339b8f74bc6
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/text.tgz) = 9532b62eed56ed6308d0b564552a77239ddcc406
-MD5 (NetBSD-6.0/ibmnws/binary/sets/text.tgz) = 25b993723182c6c3fc4c4c7d5544a7c0
-SHA1 (NetBSD-6.0/ibmnws/binary/sets/xetc.tgz) = 6068a07bd5602c1e57dcce29ce0a58ab8d6fc63f
-SHA512 (NetBSD-6.0/ibmnws/binary/sets/xetc.tgz) = 2bc55ed596339c00a303d972145c4621db7f5781f7f4bf7bd8cd6ca634cd397f8b603c83b2f607f9a65c73cc237b16db0fa3ac30f28ed898d555224355741f4f
-RMD160 (NetBSD-6.0/ibmnws/binary/sets/xetc.tgz) = f5b7f09b378d534eb6436d76a135192dae3cae0a
-MD5 (NetBSD-6.0/ibmnws/binary/sets/xetc.tgz) = 1c3134612470159dcad9c60e9e0664d9
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-amd64-install.img.gz) = 0fb40298c03dc94850911ccf296f74b4daee6ab1
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-amd64-install.img.gz) = e0cf82777d65c1f8fa2776a154f297f8cadcca5c8ea8064adf0ac87b51f5999af8208fe284e95478d87f45d68ece4c63e82611d624514b96a9e236bfbe2aa56d
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-amd64-install.img.gz) = 0f38bf9ac003bdc7b7a73a1321af35f77e498de4
-MD5 (NetBSD-6.0/images/NetBSD-6.0-amd64-install.img.gz) = 05aa2e9948e5f613ac8942f04f5703b3
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-acorn26.iso) = 3d532f8e1c0d8c70ac0204a0e30352946d5b4cf8
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-acorn26.iso) = faac85c94da6ff71b98f6ee934aee21d972c52b4ecf1a1bd39609b31ac80956fed51442fa34e423c432fe6a2957768df5db91585c0edd385cbd4e13f067eedfe
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-acorn26.iso) = db40e23e1cd76af703d18f9e9fadfb7bad0bdbc0
-MD5 (NetBSD-6.0/images/NetBSD-6.0-acorn26.iso) = c3adc16971c37d3319e62fe83dbc6fe9
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-acorn32.iso) = 1b8406a3ddc779f865e4edca16d6e5cbb0b33728
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-acorn32.iso) = 8c15a060921d1339eb814456955753badacc1db25f84f471ae66106f78f3ebc22f017ec1ff9af71cf1c59ad9a669943210967105e2669ba9093596e6b2009020
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-acorn32.iso) = 58b72463d91d486398514eac65f3cebb2bbcb0db
-MD5 (NetBSD-6.0/images/NetBSD-6.0-acorn32.iso) = eef67583eee51a578d4f6ce69864fd25
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-alpha.iso) = ff793eb5257ba6f7c3ca97049cab973dafc70785
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-alpha.iso) = e2fcfb789c6c0bf801cb02b1a4f9d133902a9d78be3458b19e12b8050c0686cfae37d2ad4a5661ffc3cddb089e7079d0bfe5b0c7fddbc0ad7c43abc250f21db4
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-alpha.iso) = 50a4b3f98483a0ff94e2c6c4d93615069d2c4953
-MD5 (NetBSD-6.0/images/NetBSD-6.0-alpha.iso) = eacfcb881765bac2c8fc45e1650091a1
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-dreamcast.iso) = dd89f98a8bcd0d8bdc9861682227cd1e48031db3
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-dreamcast.iso) = f18e432d93110b9cafe06c1a5bb13a27b028a5a773bc9ddfc59685737b2939f4ebf30de6e8e7fc5d6bca2f16b576af48cd2aa62ebd791b28d499b008cb5f11db
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-dreamcast.iso) = 763baa9e578be882dd458c8879f42745cf6ff2f2
-MD5 (NetBSD-6.0/images/NetBSD-6.0-dreamcast.iso) = 19d1400e0b92a906c4f01cae132e5d22
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-amd64.iso) = 78d8ca5aa25eef0bdab5c794550e7c43637169a5
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-amd64.iso) = f4900e8effcb1f5b5767873976dbb231a07346f48df20f56a8441942a91ecca0b6ea1309e01ea6a67b0513e61ebe3b8501b436063676558f119735f6d35592b6
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-amd64.iso) = 76a6c030ca86c7d5abdfe91568a543d3bad04ffa
-MD5 (NetBSD-6.0/images/NetBSD-6.0-amd64.iso) = 9155899df5ebc1a69c7f13ef004677a0
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-amiga.iso) = 7a81516c832299ddcfa8b364422e82a63b3869df
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-amiga.iso) = 6695416ad0dbe2bf03bb75df8b40b04cec9179d2f60aec0b1a5e8f56ad12995911158251cb78c67d62d60324e8708c85c02b84ba0fcffd3fcf73a69aaa497b0b
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-amiga.iso) = 72c96741b1fad68368043e16d21ff533490b8275
-MD5 (NetBSD-6.0/images/NetBSD-6.0-amiga.iso) = 6b214d3da92f2d84210ac00c4eb9650b
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-arc.iso) = 09dd2c85bf2772333ec299e45dec5c016dc22d7e
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-arc.iso) = 6eaab9510f8ea92a175115377924dfb7806be38c78d12920a86e6284bc59bf0711adbb5b46809eb48fa8c299d8c9683b777ad16fe78c3e4760adc6ff605941e6
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-arc.iso) = d4f2d0301da83d93a18cce50be4a878cb5955202
-MD5 (NetBSD-6.0/images/NetBSD-6.0-arc.iso) = a4c2332dc064e7d8cbccb921af5c2022
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-atari.iso) = 9976598eb68ec6bb90329161c3ffad985e2b3c35
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-atari.iso) = ac4951dcf3f148925c19db7bc7027db69549ac90e57db25994c7de5959943476eff7eeb0c490ca7b3df4b6f7bc0604fb5515c337e776a384d5b6a8169e92bf47
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-atari.iso) = 35d389ebb1ea02751e819cd76750a1116d472b1f
-MD5 (NetBSD-6.0/images/NetBSD-6.0-atari.iso) = 44c8de8283cccb8a576242adcad878fc
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-cats.iso) = a1f0554b7193949055ee9cb35eae529893bfc8a8
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-cats.iso) = 7a38bfe0e1ff3948579dbcceed822634e3352e690911052dcf25f9b8746f457f1acb80830b6ca22637c559948eb8fb1eab8c9434225f13c000204879b9edc16c
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-cats.iso) = 2116103ecfe4c450432b7c1bad8787aaa6149a51
-MD5 (NetBSD-6.0/images/NetBSD-6.0-cats.iso) = ebcfe064bb40fc87487654d7f8ccc15a
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-cobalt.iso) = d5e6a8be8cfcef7362542c2ecbfe7e0173845061
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-cobalt.iso) = 28181b68559432a4c566bcc9f71a5ed2b00a5d7118073d114ce4085f39d2139ce50e6b843beb46a59ab4e55aab4ead1e2fb952610f633fb77ae87edb5d2c3d76
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-cobalt.iso) = ddcff88c659b8f0190e66ed2df4014395bf819e7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-cobalt.iso) = 5975ccac715d36432aa101e6c1c745e4
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-emips.iso) = 0c9a09ee73ef6d90af39aca9513b539a79e7c505
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-emips.iso) = a0ec2048ab0c44ac69722b79b56308781e9f298fc3366bd628d4cfeebd8891e08091e8d86a576be50ccb12b1ae48263f86c8f0bf42d743d040a2407fb21039de
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-emips.iso) = 2d0e11edc64ceb8af1fc7239a9390868e1febfae
-MD5 (NetBSD-6.0/images/NetBSD-6.0-emips.iso) = d5dbd826114f5e530d171761462718c6
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbarm.iso) = 95e132f2d72a36eadf98b59d6883cac167d22887
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbarm.iso) = 5c3a43f9609687ac5e5f5d5f21cdc798dd75f0d89bfe3a4d46ee151f60e13a90e2059d9906efcc5831f5e7ef0c267c3615737da03cb781eeff39dcff518b4114
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbarm.iso) = 99c9115a98e45e96730163fde4fc90f37ef11e26
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbarm.iso) = 1bb998b53e8a82a28fdefecd4c2d559b
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64eb.iso) = 0ffea2aa4fb1fc1d58b87259e56080caa9fd6996
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64eb.iso) = 2d3a7807156a465c9b2d8ee5d23951f5415984c2bc0cd8a7e06102399ac4b89d247380542efe1148d5bf71bb945c4de005fc64df7ecf2cdc9ce63481a2f10d07
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64eb.iso) = 1de400a05e285d41af9eb1fcb4164932ecee0888
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64eb.iso) = 62143f6b35eee23d62a01b9cd05e17bf
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64el.iso) = 5b0f9688d925754bd79d28226f29dc0057c634b0
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64el.iso) = d4dda568787efe15faa1c00b604c9c262c579ae86f4abd07dcdb796112fa9ca41122efc9c3beedf2281ab1859e11e2ede536d3a7d679a31590021acca4b32324
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64el.iso) = 9cb45c46d6ce9d9cabcee0f660fc1a646f849190
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mips64el.iso) = 320f53af1cf67bf37bf6d962a49aa688
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipseb.iso) = c9894866972a80c2ff9032d21339e3ca59c8d0dd
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipseb.iso) = 04a89998d1cd8e70b045479265ce82b3733aa630d536c349e12b4d12e3aae123bd29cc0a7a6930fe07dc121a89e0327d14c2b78987542f064b67287268300830
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipseb.iso) = 13cc4119e07eb9a8a26666cbf6ae983001cbf39c
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipseb.iso) = a5af80295a5bce15ae2cb3c585891d7e
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipsel.iso) = 09155023a46f527048b17f00f554d64b73fb1d40
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipsel.iso) = 21108a854d7f8ee48d18f8d1fc74886350d1d95ca2eef044f5314570619f108f471c768f93b99b917b887fca4a1d5bfb9f858929c88672faf505ccc6493eef61
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipsel.iso) = c6c4eddd0acb7b311e6bc40a9ef7acea4c8792d9
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbmips-mipsel.iso) = 37b00a36438893f30b98de7327628d48
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbppc.iso) = bba761cfabb03d27837a21a61e681c0a39b82b50
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbppc.iso) = 615d5ba030e1d19c56aaf9152640e652c6aa3ab3609d357b859df61a874125c551ae912f01179f861bae6fa0b09cbb899e9ad689dd62ec7edcd1caec3157d5ca
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbppc.iso) = 4cba6606c2fc9febb684665512c89ff8106790bd
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbppc.iso) = 45b10af76ae7128c4619864237e703fc
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3eb.iso) = 51da3d8f99c84a9e12bab81442a0249624550532
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3eb.iso) = c804c8f1457178bffa1e5b7989a5818381f4911a8fe18a2c75ef9c02b866a9f53be17926faaa4a9460852e482d7a304a13424b8fd6b8013cae15696ebcc24bea
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3eb.iso) = 05f04f2d8e64a4508034424bbd9f6adf795675a5
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3eb.iso) = c9358e63b62edc277bb8e630627fa49d
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3el.iso) = 89dd396a870a8d08bb1ab2a09f9e8b24bb55bb53
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3el.iso) = d9d2018111fc190ab0602e87572e210572bebf2185df101265f29d4ac8bfed8ca671038131eefe125ffacef63924e1274c34fa248b88d01764d138144e768b2b
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3el.iso) = ccc5e6f669147c71f9272cae12d63bb270407748
-MD5 (NetBSD-6.0/images/NetBSD-6.0-evbsh3-sh3el.iso) = d33272ecf641d0c4ced897c2fb4d0ae1
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-ews4800mips.iso) = 029c1d1910dd234ad3b33f8a53557a56779dde86
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-ews4800mips.iso) = 09e0dec1e67c44a29cea4eae8c2e7840906c8cc6881331b720905c71dfd0f8050210568d2e5ad6a325a827a08e1e440d84980cb4b515d76501616c7e3f104cf2
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-ews4800mips.iso) = bd7da2f0e68a488d351eab9cda26f11ca2ddaa35
-MD5 (NetBSD-6.0/images/NetBSD-6.0-ews4800mips.iso) = 1286a5646c2f93fc128c8fabb2244bd1
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hp300.iso) = 3b62c2c6037a1009b5d417e6f09dfdda2781f12a
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hp300.iso) = 2a3d668fde1b5098933d0fbd9fe9100092043a81389f6f7b457a3425dfca5cca52382a29434309baae791c908855b1aed99d32f290723172c62f439f68e4fe5d
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hp300.iso) = 8314b4f992aff06157d9dae5951cce3d6083e6cf
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hp300.iso) = 144eb416cc2563df1330cecf26c19f2c
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hp700.iso) = d2840fa102cff8b3d5825304818c98ba2ffdcbe5
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hp700.iso) = 322461efc0e1648c8e4e16c93421831d14937b5ca93f2a6f25405882c2de40482315ee9e4c914a2e9206cc25eade89687a2a248bc60ea1145626272067fdecba
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hp700.iso) = 11dad584942591d9c719eab0248dba8f71ba8ec8
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hp700.iso) = 93522e82b2562f1f889f74153deccf30
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hpcarm.iso) = 5afcc737502c47e2a4efcf6a897ecbdee400d3aa
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hpcarm.iso) = 32bd828c5ef1b50b6a9cdac2a419ef80522625bedd2bbb9f60b8076b7f9bef969af19fe28da9b56b6f552e008700b9fa586e1159706aa6eb4c998b2dcf89384f
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hpcarm.iso) = 9a609fb57d4c4a2f8fd9aecee475eddaf7e26da7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hpcarm.iso) = 7b8bbdc89300d63043e233de6d56584b
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hpcmips.iso) = 203b9953e02574d71e49277b847dfd4b253199cb
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hpcmips.iso) = 72a2e1eb4f9398c3779a64226c8e442e9628edcc0601b9e0c835af9e2ac31d77217b731c831d8d9bbb2c9322ef28b61194281beb0074e39aaa747610fa065ca1
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hpcmips.iso) = b384e1bd9b5e0644e1d98f68270a82b47e1e0103
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hpcmips.iso) = fc5caa7af29622771e2451debd59f75a
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-hpcsh.iso) = 1b3ad4689058b56f012dcdf2ec78d046c7469d0c
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-hpcsh.iso) = f2d4686d5560a5ebadbd0f235033bb18db4b291ac9080635e67a8b42328108f0944c69e81ff9daaf28820f0ee98d32c0faba0ba3d397053670f4b2312ba7fdf2
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-hpcsh.iso) = a39e04b9cdcfb2d21fe9ee262756b05f122893b7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-hpcsh.iso) = ca44003562262d681f9eb5e6e3c1f25f
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-i386-install.img.gz) = 43e6d3f9d0ae352b8eaec597e3ab48590a8dd62c
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-i386-install.img.gz) = 2911ec984eb0b74ffc89dea948d2f0ec6570cf0a13790be8ce31bfe7d90cbcf132d9b7fa27bc3202d16426cf15c192c3543db7d108455f375aebd291e5162827
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-i386-install.img.gz) = 7da2b6c329c7e19a96d7473bed4fed2847a9e7dd
-MD5 (NetBSD-6.0/images/NetBSD-6.0-i386-install.img.gz) = 9db5437e777175f3d9fee3370070cca1
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-i386.iso) = ccc8c4d50aaa0e43724df3b3c3afa0e130164053
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-i386.iso) = e71e4dc1ab41720e04f34ae8f5daccd5441f58efe983683574578b4f6c3019b53060e25e4e4880792f3012e47acfeb7eb0f571d01910435db6a4ac541ede8fef
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-i386.iso) = 4aefd7279ff09f228506f66ac5e91195c081e31c
-MD5 (NetBSD-6.0/images/NetBSD-6.0-i386.iso) = 9b7aca4464fdd5dbeea6d6d85c5ba64f
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-ibmnws.iso) = 766ffac66f62d90b017d02b9f571b27ee002eb30
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-ibmnws.iso) = ba2e04ac3173b765d98a72796f643f2c7fe2fbc9eae9f7a85402e65d731c3a089df5a685ad98603e6e44c72956507bd77939d855f4820bcf0aaa1e705be68ec4
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-ibmnws.iso) = f6c480b79e05eb34818b5f018750c4dbfceb7b38
-MD5 (NetBSD-6.0/images/NetBSD-6.0-ibmnws.iso) = 8cbc5b4e8fd0cd9d6cbf6d77f1285f3f
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-luna68k.iso) = fb688537b94273c74c52027a5bd0e9f0f1d96381
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-luna68k.iso) = 62911e352841866cdadd4f9ebf909cfe496a03ac4f4452f83ed7a96890448a527a0afc3ab199bcc13a12760bbf287b5b367b96ac340d148d522e759db20a7c5c
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-luna68k.iso) = ad5c1f6747d72a83816e13c37eb97cc4b6b0bbfb
-MD5 (NetBSD-6.0/images/NetBSD-6.0-luna68k.iso) = 5373e0ffd08922c1e8e5a1f66908d2b7
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-mac68k.iso) = 2216006dda929d7b66bb2c92549378362f772b52
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-mac68k.iso) = 26d539ab284db402e00b48bddcdd726e7869bd28f717771d45cb6e5934fb069ec98f789a2baab8b7fd76aa35db5f9992f58094b9e3e936c83901e277a4bbe6b8
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-mac68k.iso) = b8cf8d1c1ccbb739ce29c01896a4aa55ad66469c
-MD5 (NetBSD-6.0/images/NetBSD-6.0-mac68k.iso) = 4e06fdc52d82cc401d3b02c4d0232733
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-macppc.iso) = a8697c11dbd8b3811f1fcc8562a9d11a35f4431b
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-macppc.iso) = ba31ab8d00ac0038dc6509661eb39b41d7cafc268b17e9ff75809aac3fc4978fe338b2ee4c2ff59991ae93c11c32cfe019e7309fc507562f9c276172e63492e4
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-macppc.iso) = 36f6b8b12eba9cb39f412ce2cba71ab88a4445fe
-MD5 (NetBSD-6.0/images/NetBSD-6.0-macppc.iso) = ca246495fb1465b57eb93c826063a20d
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-mipsco.iso) = 5f3a351f960e81c829d7bb8f6924b0b912006c05
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-mipsco.iso) = e04111c293c6a3a6df5433aaa8d7883c7f88bf03c868ddccb05ae7c243d9a880e54329d4d995cc5bfc6539fdb7120207463f54c3a4a5c0a317bd12173e0fac18
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-mipsco.iso) = 85552cf47b7eab35619385444e0d76ce8c6ed887
-MD5 (NetBSD-6.0/images/NetBSD-6.0-mipsco.iso) = 7e684c533513710039e0fa96ba70b51c
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-mvme68k.iso) = 48ed08c58863636dcf49ad5728812def96cf82eb
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-mvme68k.iso) = ded376941ef8437fcf37f7ca801f4e9996b4adcd97d9ccc7a16d30c8045880d4e7a894ab5cd44000bb3895950c007669207bfd58bdbde3a11b2a123e5b747c47
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-mvme68k.iso) = cfb7ee4fc9422ebf6dc0c7d73b59dc2b161d58ef
-MD5 (NetBSD-6.0/images/NetBSD-6.0-mvme68k.iso) = 9ee62757053b2cb7f7a1d6ab82db929d
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-mvmeppc.iso) = 5b74dd3e1d76f697d089ad1a769ef8aba17330ba
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-mvmeppc.iso) = a007559063e269c4f27597f27c3bf6dda97f34a33d7e750c2a6fb36bacc0a64b12a0011b0570ae71b5977735de5f1d58de553e5a89ea4f61b6c09fc34e3989ea
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-mvmeppc.iso) = 9d26c663310b2555b8dc544e9b286a7ab80e8bd3
-MD5 (NetBSD-6.0/images/NetBSD-6.0-mvmeppc.iso) = 3c8ab738e662b3b7f1b481a4712c4525
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-news68k.iso) = b40de418e4f4140f31895100674dc69e1b3c2f80
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-news68k.iso) = bfca4085850abfe577482870397af0c964574cb7b426903c5634a747026e1db835fe6db0dde4d8a320438b1f136dc7aa2dd0bd1e05d664c92ddd307b3ad718e9
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-news68k.iso) = 00df7a8b50bb5b4f45b56107db94a559b1571458
-MD5 (NetBSD-6.0/images/NetBSD-6.0-news68k.iso) = a9a9524f9d696a5104d2b9f157f8a416
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-newsmips.iso) = 91c6ba0265d2ab04f60358dbf8fcb388c81e674f
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-newsmips.iso) = 182904027a2e24e0869e0c177915c2d99be87ea8994298f7106940bfde95feacb1ab07e17f0535adaea35d63eb6ec014378bb2777b0a3dc4e15f362038050460
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-newsmips.iso) = 93bedba32f25a7d6f658e396de5b7eb98ec7654a
-MD5 (NetBSD-6.0/images/NetBSD-6.0-newsmips.iso) = c6a0377dfb49f663d7bf657589a68c48
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-ofppc.iso) = 1b0927effa1f68779ec787536f67447574f50674
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-ofppc.iso) = 7cfa755bab97c165f5ed60063d4fde79d90fa4a786cf13d32617f324759719175b909806aac34df32b39a5a443348f020787bce43f4d7600ba9bc65ec00e111a
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-ofppc.iso) = aab50e82812ffe6b4216d9c9a44787d9f0f667b8
-MD5 (NetBSD-6.0/images/NetBSD-6.0-ofppc.iso) = 97772de08fb8020d661192e622e3cf21
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-pmax.iso) = 5293cfe1a34eced76bd825d7eeef7ee55af98299
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-pmax.iso) = 681eb46ded55a111f6ac2f5baa9ebe4f3f6c252ecd20270377b466305402a97f6be47db192e5a05920a17ecbf03c03bb169161bcb75b4813af5a2e10b1becd53
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-pmax.iso) = b61b7ee3525e26f990f4276d689d23469b4639a1
-MD5 (NetBSD-6.0/images/NetBSD-6.0-pmax.iso) = 4211afdc8ed6225b395f65a089347ebb
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-prep.iso) = e1702b470594f9b5955bba78d9179eec12176e9d
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-prep.iso) = 552a43f2a255b844a0a39db0e352dcf04b7df73cbe6eb4851a2bbfd1f5bcdf12d4742ef9f596052fd678ff4adae4c92a1eda71acccaa53c8bf310cf5900dbaa2
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-prep.iso) = 382ff5006df921cb66fc8ab2bf78544c1dc501ae
-MD5 (NetBSD-6.0/images/NetBSD-6.0-prep.iso) = 2cacc13c35c1e406dfe0aec549f97eee
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sandpoint.iso) = 6d866b095f838011b6132d443b602d4b97a644e0
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sandpoint.iso) = 6e6a0eaa9de07b142c43a749bc6257a410f9c7f801c450cfec17fa30c0f7b0f5a925d1c73705a4d2d567451fe5c88304c6e85c4f1ba1c0127b07f9bd0ed452c5
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sandpoint.iso) = a2d052a86ed3bc1a751de334b737cdd1e1661f8b
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sandpoint.iso) = 8a137ad061aba60a2bcffa8b9c9fa370
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sgimips.iso) = eee6aecc9d478d101b20756b5438e858d43f2700
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sgimips.iso) = 3979fa422cd562e6dcfa83eefc072d66380ce1ec10f5534c394c08bebcc977d58d5c27f0f41efe1555570be9eb93e33143df0c1fb1cec47b29f3f8961853132e
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sgimips.iso) = b20388701c9428de38cf7cd5afa7464bb0d5a07c
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sgimips.iso) = 73c4e4f6723ef82859be32abb34b9367
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-shark.iso) = d331eaa8be85d8a112c277ac018d9d0cc88d8b39
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-shark.iso) = 91aacdd54e4ae41cbf71d4a91533bf66ef9dacaf7d71ffa81f0fabec5e98f3f5685f62b75ceac6db51a3da160a4c3e92fe3a5469165fa92c23d76d4e9aebe9a2
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-shark.iso) = 88a248ed7456f4c08fa9581026c555df29c05daf
-MD5 (NetBSD-6.0/images/NetBSD-6.0-shark.iso) = ea424a950e7168c79a2b80152504fe61
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-source.iso) = 09749966ddaadad296254adec70d4f4c01f20fdf
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-source.iso) = d45abaf7551b96232228024a7f08d19943a8912a2383c456a66aff8bde1dc4ec60a3dc084ea4801c6c4691d714e257672f87436d7070a939fbf0fb5b2119854e
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-source.iso) = 002f87e50d6113c7a2820a4888b8484c1848bfa7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-source.iso) = 4d63a05600813e5588720da5328967ac
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sparc.iso) = c60cdabd739d287e3424f8a6e2b671b7b41a944a
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sparc.iso) = 1dd5305519efa2c90341088e26b66b38426ce5e42a066277605abaa0e85322a9af2031ada8faf1e303e7f10f8b29e8765673de14a5a04c4e5f2f6001b7c52241
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sparc.iso) = ba9dc6b22a648f9b0af3c44eed518401b20e50ab
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sparc.iso) = ec7578864447eb816413264ad512b017
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sparc64.iso) = a6a5475eeb3e88d520a5bbed7d62f0067c5fe65d
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sparc64.iso) = 50f36f089ee8c27190512d16ec50661db4136c257c947439d670893fe610a9b07d577a7ab8b9f4d9cd6766e9daa8b619aa3a0f6f95e3abe43a4955dbf9d2d401
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sparc64.iso) = b8dd4236c01dbe061cc0e0e20e71b805aee8b998
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sparc64.iso) = dd2dd0625585e969262fd0c99751c64e
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sun2.iso) = 1c0755c7c8a094769b4c1b50566fa05e4848e113
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sun2.iso) = d37ddcca3ac60bba6e8547c8bdd2029d5ee39517eff1b90534dd02eacb5e5e36b3be9a06b86386d451ee89c2408c151fb55f0427d3ba682b4076dc3f5c8925a8
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sun2.iso) = 4a20723c243cd7dd43c8eb4272971072d21a2efc
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sun2.iso) = c2f9f999646eef2bcf2c9bdb6d2e860d
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-sun3.iso) = db35e360979a3c38984afb91309387fa9a415bf0
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-sun3.iso) = c4a8fde6c486ee8b23a485d6b2947a1620a2f7582df13a255dc8f6fd2860dd93b0e1c2dc3b56387adad49b935999c70cdb293f25f87c2f227af35e158fe6a7b5
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-sun3.iso) = 0ff6f3798f945c797b2ccae534cbece05e3a4d34
-MD5 (NetBSD-6.0/images/NetBSD-6.0-sun3.iso) = 042f8191d0aa3b4ee986408c1bcce04a
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-vax.iso) = 8f43de5ed15d0178faa9b79763c7564d479711c8
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-vax.iso) = afa099641b4684f021c3a94f3a8624c3aad92a8083555ad3bf78028fcb530d08b9b778d96635bbe098c88e6e08be2733d01c4dfca8933d4120e7571dbc715a88
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-vax.iso) = 09800ce94b2007f7c51850e9db87270e0123e9f7
-MD5 (NetBSD-6.0/images/NetBSD-6.0-vax.iso) = 0830c9dc45aa84e08cf97580708cc60e
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-x68k.iso) = 022558b77ecb7c5b6a35aa0e79c6aaab56031d16
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-x68k.iso) = 0cf2986fa2477df206a46bc19f566c6cbe8712ad14fbf40d9d4c20aa104a65eaeb93d73c86ac101125d0c5b5619f53a7296d032f56c15930baf496853b604902
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-x68k.iso) = 5becbb0b0c10a69dfaf131910da0c72a208beeb3
-MD5 (NetBSD-6.0/images/NetBSD-6.0-x68k.iso) = 6f7c0d6afb962d18f61cfafc78f38b12
-SHA1 (NetBSD-6.0/images/NetBSD-6.0-zaurus.iso) = 5c78cce50c6f26c64456228695ff51b12b8cd44f
-SHA512 (NetBSD-6.0/images/NetBSD-6.0-zaurus.iso) = 8a0849c505a0db1ed89fb066f6814f32e9998017cfd684ac38b9027d94ba4a2ebec496ba1ee194e0f98d176820077ea50c5a45cb85b6f24a1d1a2b14e9a0dd1a
-RMD160 (NetBSD-6.0/images/NetBSD-6.0-zaurus.iso) = f505c50d0049b053abd5fce076e0e67dcd13c2aa
-MD5 (NetBSD-6.0/images/NetBSD-6.0-zaurus.iso) = 5e3a023090f8b8df40a7372dc1749b81
-SHA1 (NetBSD-6.0/iyonix/binary/kernel/netbsd-GENERIC.gz) = 235873272a098d18934590d26ab5c636859262ad
-SHA512 (NetBSD-6.0/iyonix/binary/kernel/netbsd-GENERIC.gz) = 0a4f296210a18785815dc51d191c97aa069403e2e0460038f6dc59a65a97f39d9345abf0e793a12dc562068a7eb0d825881030969ea43a48775704958700ee86
-RMD160 (NetBSD-6.0/iyonix/binary/kernel/netbsd-GENERIC.gz) = 1c5a2e39c1876ee7b46a9ee9751da1d418c2a607
-MD5 (NetBSD-6.0/iyonix/binary/kernel/netbsd-GENERIC.gz) = 5f2302d30d7dcfa644d62c656eeb33e3
-SHA1 (NetBSD-6.0/iyonix/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/iyonix/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/iyonix/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/iyonix/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/iyonix/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/iyonix/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/iyonix/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/iyonix/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/iyonix/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/iyonix/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/iyonix/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/iyonix/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xbase.tgz) = 875fd641f969ec00f854ca1334d084947450c740
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xbase.tgz) = 75d0c9e9685b6b7bb706df7427c8b52f59c4fc4d0e725b02ee18024f75a546dc41de5f1a5d8552a8d2c84bdf87856e5857b0f12914801ca7b36b69536d617b4e
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xbase.tgz) = 1a4d099d59b2bd882e99f1b2df1c7bf22b890d48
-MD5 (NetBSD-6.0/iyonix/binary/sets/xbase.tgz) = 5eb9c573c5a0c96701f268a3470a58b9
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/iyonix/binary/sets/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/iyonix/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/iyonix/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/iyonix/binary/sets/xserver.tgz) = 4ccfef1d49179603286042088bec0218c6b2031d
-SHA512 (NetBSD-6.0/iyonix/binary/sets/xserver.tgz) = 809fc0a9065c1b9e7cd17aeb0d41cfd3158efd6c585556af01c4a3c93f0df3646a2ff77c6994449a703a408c0988fc1aa68cf34c7e297a3056d73ded57034c12
-RMD160 (NetBSD-6.0/iyonix/binary/sets/xserver.tgz) = 403604404261764c74f10fab774c4653fd20cc9b
-MD5 (NetBSD-6.0/iyonix/binary/sets/xserver.tgz) = 914f909b6878cef16a92765a8cbb52ca
-SHA1 (NetBSD-6.0/iyonix/binary/sets/kern-GENERIC.tgz) = 13354b2863a67ec38b91a8b8cab2ae5081cf68cf
-SHA512 (NetBSD-6.0/iyonix/binary/sets/kern-GENERIC.tgz) = 02ad11423d70de2c4b1e937bfdb6348af4025c026513f4f05768f2344997a4414896f10b72af056410dcc62d8760449c2dd47ff2bd37d0e4011d45a1fe0e98b1
-RMD160 (NetBSD-6.0/iyonix/binary/sets/kern-GENERIC.tgz) = 4a98f89230f9faaf839d5b607097d7612aa6741e
-MD5 (NetBSD-6.0/iyonix/binary/sets/kern-GENERIC.tgz) = ecfbf309ba59a5ed39e46ed54b8173e4
-SHA1 (NetBSD-6.0/iyonix/binary/sets/base.tgz) = 697554f5182bff135cb94ba8c99b29d719aeefc1
-SHA512 (NetBSD-6.0/iyonix/binary/sets/base.tgz) = 52b73ea3de1d96f706a48b02e7cc6234576d5bad72828ef34e61929c460ea839f6051e3a650880307a86757f35265c2a33780bbe4640d301f70a4ebae06c7e8b
-RMD160 (NetBSD-6.0/iyonix/binary/sets/base.tgz) = 7e7a5a24095a326e8998ba95c291c5380a89600f
-MD5 (NetBSD-6.0/iyonix/binary/sets/base.tgz) = 74682becd88ad5b73b5434940f1e8436
-SHA1 (NetBSD-6.0/iyonix/binary/sets/comp.tgz) = ab05d7d706899d1a555b6ec101f6d13d7f13ad97
-SHA512 (NetBSD-6.0/iyonix/binary/sets/comp.tgz) = 246d589d8d3c37375496ddd3e15da6a5bb101bc1405c13ba2751818555eaad37c403e27437326bac2ff3c20763c95a49df0bfdb324faf3110c7ec01d7676b78e
-RMD160 (NetBSD-6.0/iyonix/binary/sets/comp.tgz) = a5835f803a5c74d6484e7171085460b803705e22
-MD5 (NetBSD-6.0/iyonix/binary/sets/comp.tgz) = 53c3ef4ec81bc6b1f89e15081ad4bb48
-SHA1 (NetBSD-6.0/iyonix/binary/sets/etc.tgz) = 7294ce630333a9bea7392c5083118cc68bcb5732
-SHA512 (NetBSD-6.0/iyonix/binary/sets/etc.tgz) = f1699017e37109605eecfb44174327a974f1a7a741e16f67f387170ddd1b2c661c58bd9b6dc0795153e828ef52d16cc45b37743cb86be98623da38736938061b
-RMD160 (NetBSD-6.0/iyonix/binary/sets/etc.tgz) = 1a9cdec0a39de8c3d0b2ec63b7c674bd597e67e0
-MD5 (NetBSD-6.0/iyonix/binary/sets/etc.tgz) = d655e4ef20778005efe66b02cdd5f471
-SHA1 (NetBSD-6.0/iyonix/binary/sets/modules.tgz) = 2689f2acb9a977df7801394cd49f6f84d93fab8a
-SHA512 (NetBSD-6.0/iyonix/binary/sets/modules.tgz) = 853553a5ae0acde4b24a80372c1fa71777ede655a76c60f1d2bc835df50fc2ff03270a5edca72c492fe07a3208a8680a10277b83fab4e7a3f064ded4c91cd151
-RMD160 (NetBSD-6.0/iyonix/binary/sets/modules.tgz) = 4d2d0ba3492b751accda0a03daef7cba859f223f
-MD5 (NetBSD-6.0/iyonix/binary/sets/modules.tgz) = 129dd8d6331eacc63934568b1467edc9
-SHA1 (NetBSD-6.0/iyonix/binary/sets/tests.tgz) = b54fb7a814d7bebe4a40a00c17253d0bc6ca4544
-SHA512 (NetBSD-6.0/iyonix/binary/sets/tests.tgz) = c99e6c4b80fc2d6a0f236f324f844a562db128876a5b89ced62097a732b273fb6d9af8fde55f3e949768882cb31fab2918cd731f1259b67a1b2548030417c2de
-RMD160 (NetBSD-6.0/iyonix/binary/sets/tests.tgz) = 61ee29ddcfd0268fb7ef37829aeb75e3152b76d8
-MD5 (NetBSD-6.0/iyonix/binary/sets/tests.tgz) = ce8b49fc2bfd31965b5b989de17d5cd1
-SHA1 (NetBSD-6.0/iyonix/binary/sets/text.tgz) = 6f119b3eb99d94a4aa41b5bde28856b3daa83d84
-SHA512 (NetBSD-6.0/iyonix/binary/sets/text.tgz) = 03a29fcc5ba8ce7d6ab590d61bc0a3f4dbb9bbce89d4e8cefc00cf398fa92e2363f3e3fa5da4cc17d3bd9195434c5a951550c6091b1168614a6a0b2831f3f881
-RMD160 (NetBSD-6.0/iyonix/binary/sets/text.tgz) = 2a1331121dc41105accbf9b491bcd4aaa3589907
-MD5 (NetBSD-6.0/iyonix/binary/sets/text.tgz) = 9bd5612ff2228f1bfee64c0f6a872fe4
-SHA1 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.symbols.gz) = d9440af1a917beaff6598eec266db86853625b08
-SHA512 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.symbols.gz) = 982b13dc871a9e562e191ff6d156f202cef18174b66e18adac8e77037fd4edbd29848dfbfec15f94744375b7967bdbd0c5bac0414eac22b78c5ea1fae91f0ed6
-RMD160 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.symbols.gz) = 6320116f0640f069a52a4c52196ba45a306b594f
-MD5 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.symbols.gz) = b6d766477c4b69e1e3003d68a28d742a
-SHA1 (NetBSD-6.0/landisk/binary/kernel/netbsd-GENERIC.gz) = 2f1a4b4a1b4b88ab919ce3addcf2310da10c1c12
-SHA512 (NetBSD-6.0/landisk/binary/kernel/netbsd-GENERIC.gz) = 21fe1b84d9c5c85f3c9d963ce9497d6b8250a3c5789dcf387612089aea424a728503c9adc5e047d8887959be84a8cbbdf397b7f2685fbef2d0fab448238279fb
-RMD160 (NetBSD-6.0/landisk/binary/kernel/netbsd-GENERIC.gz) = e35fb6d1b917230c4b622ea52276a47e2a711d33
-MD5 (NetBSD-6.0/landisk/binary/kernel/netbsd-GENERIC.gz) = b6c0c1333ca3b1a45d3a828f7d18d918
-SHA1 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.gz) = 3348d95ce13a6217331a1992064194aec1775db4
-SHA512 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.gz) = bfa4fa3ab82db17aef5f5b4b818cb8fb5d9101d6709752bd88231042ce3c2c731a452a1360fdcd77d8eb3c0cd7368de7aa359b65b7d35d4f78d8182670de4a72
-RMD160 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.gz) = 95d2efee62025110beb81c829712563b4495633b
-MD5 (NetBSD-6.0/landisk/binary/kernel/netbsd-INSTALL.gz) = 143697e4aa570e39175812011fca30f1
-SHA1 (NetBSD-6.0/landisk/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/landisk/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/landisk/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/landisk/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/landisk/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/landisk/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/landisk/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/landisk/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/landisk/binary/sets/kern-GENERIC.tgz) = 4ed0c44b9ce3362aa10429a75e3dcd4a01963055
-SHA512 (NetBSD-6.0/landisk/binary/sets/kern-GENERIC.tgz) = 1764a9d7ef8a4fc9cc321cecd486f767096a6bc34eb83b3bf3fd24c0383a3df139200560a7846d23bebdc4e02feffe7252a26689b2971964b9240a26abf4acd7
-RMD160 (NetBSD-6.0/landisk/binary/sets/kern-GENERIC.tgz) = 75e8fa6b9c66cec999c28d9242379df0142d0bdc
-MD5 (NetBSD-6.0/landisk/binary/sets/kern-GENERIC.tgz) = 7226e2efa45822998b444dfbce3affe8
-SHA1 (NetBSD-6.0/landisk/binary/sets/base.tgz) = 7cef6d1878fea6a5448eb32456056155477dbb47
-SHA512 (NetBSD-6.0/landisk/binary/sets/base.tgz) = fd16dca9619d1e1a3770486594935e091bc7219b24db8bf91ec0cc8b064f2a201d13dca61b50885e1a2428512bbf510ea7f69a9b8174ac82f511f66c6a8cb70b
-RMD160 (NetBSD-6.0/landisk/binary/sets/base.tgz) = 97e06530ed9a98f0d48746c33db25e2ee0460360
-MD5 (NetBSD-6.0/landisk/binary/sets/base.tgz) = d0e0468ef015bcada5e688057a53efc2
-SHA1 (NetBSD-6.0/landisk/binary/sets/comp.tgz) = fb19c5e935ea83f6c5679796cc9527fa3e435508
-SHA512 (NetBSD-6.0/landisk/binary/sets/comp.tgz) = 0636a207ee4126ef209fee7b5fdbee6eea677cd8b640798aeab5138803fbe8754de69aeff925e3298783409009e6cf8658f9983a213425d397e90f76a93e3f7e
-RMD160 (NetBSD-6.0/landisk/binary/sets/comp.tgz) = 0f4190b6173c8618f7609ba726e73cb041ac75e6
-MD5 (NetBSD-6.0/landisk/binary/sets/comp.tgz) = 7317e108ba56869a21b9d7137605eaf5
-SHA1 (NetBSD-6.0/landisk/binary/sets/etc.tgz) = 25f6f82b594c5d383d45e6c7ee3e0720afe0cb32
-SHA512 (NetBSD-6.0/landisk/binary/sets/etc.tgz) = f2f77e86753a1193cc4c37372a303a88e6c51fd0d3d2e6ffa1927a697aab915c9fd5f1f7ac81137e9182388a6a60912b0b2d6d6975abe0029cf9206367b7454d
-RMD160 (NetBSD-6.0/landisk/binary/sets/etc.tgz) = a5db723013194035deb0e61dc04f6985fcc4a51f
-MD5 (NetBSD-6.0/landisk/binary/sets/etc.tgz) = 92d41bd9cd00823be1afb0d3846e10e2
-SHA1 (NetBSD-6.0/landisk/binary/sets/games.tgz) = 65ef265cc562c21af9cea790c1eb0f7d1ee4ac50
-SHA512 (NetBSD-6.0/landisk/binary/sets/games.tgz) = f55cb863e6bd20e52f04d643199317ffeb673d8ad7a1b1506ccb6d798d6b511766d8188b1a567ab148ad38ab8dfb4516eb624044827880a0c1f289631e9d7f88
-RMD160 (NetBSD-6.0/landisk/binary/sets/games.tgz) = 9a0cfcc234841f9b3086c8e6479686a9e486fe27
-MD5 (NetBSD-6.0/landisk/binary/sets/games.tgz) = 9f57cb59ad62f29327c1f1daf6d8e130
-SHA1 (NetBSD-6.0/landisk/binary/sets/modules.tgz) = 0755c390f758947aaa8fa5942c3600a9c1da0155
-SHA512 (NetBSD-6.0/landisk/binary/sets/modules.tgz) = d20bbd1969460b825f413f06e28280bfc549d74e82287ec6f8b7eb70db2dc8680fcb5f1b42e96e48feda3c377eda9ef4890bcb03aeb2401dc45cc79353826a5a
-RMD160 (NetBSD-6.0/landisk/binary/sets/modules.tgz) = b43dea943dd41ece88282f1a858926afba42f061
-MD5 (NetBSD-6.0/landisk/binary/sets/modules.tgz) = 77fe2185916c4e1df174079291a33e61
-SHA1 (NetBSD-6.0/landisk/binary/sets/tests.tgz) = d5cafffe5049a81843f684c81ff1909669e6e8a4
-SHA512 (NetBSD-6.0/landisk/binary/sets/tests.tgz) = b01eccf78b1fac7ca92a10e6440a80ccccbcbc90dcafc44692d149a0b719c9058de6e1a28207f06fa7db29403552df527c200a27ffda708cf49ae2f2c7033886
-RMD160 (NetBSD-6.0/landisk/binary/sets/tests.tgz) = 0a2d702412e9add961586f2cd87eb2895889cdef
-MD5 (NetBSD-6.0/landisk/binary/sets/tests.tgz) = 7fa1f86aabba0e9ff906164c5046418f
-SHA1 (NetBSD-6.0/landisk/binary/sets/text.tgz) = 753e3063d3a42b43208bfb9ee44cadfbf777b02b
-SHA512 (NetBSD-6.0/landisk/binary/sets/text.tgz) = 63c337c80b7fb440d813803b06c0b34d1a484c1e5a18f1bcf6fe90f3880bde3269c8ed7fb0485405bd9ba618069fbe680163be2b4c53c6d81ff8e263777fd51c
-RMD160 (NetBSD-6.0/landisk/binary/sets/text.tgz) = 83afeda6e537627561023c5570ca05aaa2d3027c
-MD5 (NetBSD-6.0/landisk/binary/sets/text.tgz) = fae31d47dbe89c926a95c602012bcd36
-SHA1 (NetBSD-6.0/landisk/binary/sets/xbase.tgz) = 240739fa38b2f6bf5ff63504fc02b5e006d404fa
-SHA512 (NetBSD-6.0/landisk/binary/sets/xbase.tgz) = 93ace6b1ec640cb33e586a2e3b4b53c46b34efa1c3cb40ac7bde2531a6b253a42fa92564ba203f7f5b725b9673017766ba5a7636ac32e6722a3787559be916be
-RMD160 (NetBSD-6.0/landisk/binary/sets/xbase.tgz) = e76eddb131991fd9641a77469b782e1672370644
-MD5 (NetBSD-6.0/landisk/binary/sets/xbase.tgz) = f0502dec4137d4ba757447285b98f09e
-SHA1 (NetBSD-6.0/landisk/binary/sets/xcomp.tgz) = 06e8daf72bf753e226e3d5df7b47ef8344470c27
-SHA512 (NetBSD-6.0/landisk/binary/sets/xcomp.tgz) = 101b0c365ad2209e8b4520f586a9cd60595b0dfa414c061cf24cfbf18a9455ab6a786f968d3a5eb5f06db57cd9cde4262d5031aaf6d5cdde152ac92c91a31c09
-RMD160 (NetBSD-6.0/landisk/binary/sets/xcomp.tgz) = 3bfd31356e625cbb25f035db41d44d3a4523fb25
-MD5 (NetBSD-6.0/landisk/binary/sets/xcomp.tgz) = 2d4a2c3e4a93d2b1e56e7641bfa730d9
-SHA1 (NetBSD-6.0/landisk/binary/sets/xetc.tgz) = 06a24e45e73bf98cb87b951fe3bfe4a81a1d0793
-SHA512 (NetBSD-6.0/landisk/binary/sets/xetc.tgz) = 72d35ff20eec9cb6674031e31c382ff63fea51f6cb10290a540cb83de5639145faff66119fe7f176ba97bb389b9edf4aae3838f008df9f1b111699fb8555f4ee
-RMD160 (NetBSD-6.0/landisk/binary/sets/xetc.tgz) = e63035911479f2a87f20fe5f030ef31b3bee1878
-MD5 (NetBSD-6.0/landisk/binary/sets/xetc.tgz) = 309875d5ca3be7fb66f2ec0ab6e2e18b
-SHA1 (NetBSD-6.0/landisk/binary/sets/xfont.tgz) = 06922d4fa8af9ec61283885a5040552442f1a0dd
-SHA512 (NetBSD-6.0/landisk/binary/sets/xfont.tgz) = 48790c97453934379e37f2826498b64480554cad16ee807d44e83eed4c53b324659df0cc8aa954ec6f5f5a16ae03209a0c03dcf45db3bd807011d6d16d66654a
-RMD160 (NetBSD-6.0/landisk/binary/sets/xfont.tgz) = 5f1a4142f95c2fbf064d94e11afb0660d17c384f
-MD5 (NetBSD-6.0/landisk/binary/sets/xfont.tgz) = 0a8a39b6c5e1ae9be657196b82c16717
-SHA1 (NetBSD-6.0/landisk/binary/sets/xserver.tgz) = fc311910c92490d19bb81ff540f65370a01cfa9d
-SHA512 (NetBSD-6.0/landisk/binary/sets/xserver.tgz) = 8f8f392ab9696e20149e94dc85061be26982179e63fbfaac269dcb13509d4e9ec44c8188b6f333cad0b2139703c78e1f0919b71394ac6ac2526ce7935ec2329d
-RMD160 (NetBSD-6.0/landisk/binary/sets/xserver.tgz) = 86ec983a4047e7a0c146cfab94df6331f0363e89
-MD5 (NetBSD-6.0/landisk/binary/sets/xserver.tgz) = 2befe5df4dce2ccb1770ac2019da8ec6
-SHA1 (NetBSD-6.0/landisk/installation/misc/boot.fs) = b8bbc9b7108311040a9a3e1bad714efccbdeab21
-SHA512 (NetBSD-6.0/landisk/installation/misc/boot.fs) = 8fbf69cfcb9e7e104c244a8cc2c11d0bc2e2f006eb8a5b8e97267604519fb0e415a9da6bc81a0e75fd30e2ce8fb40a4026a97cbd413de71c05caa1e5f16871fa
-RMD160 (NetBSD-6.0/landisk/installation/misc/boot.fs) = 333044e352899852a8fbb7308a6009c1b5a69bcb
-MD5 (NetBSD-6.0/landisk/installation/misc/boot.fs) = 47ea13afac308dfe956f2d5c16a3a285
-SHA1 (NetBSD-6.0/landisk/installation/netboot) = ca38444ab6911f5b12f0797a6198f082030ba9b3
-SHA512 (NetBSD-6.0/landisk/installation/netboot) = 064115997cd9a49abeb68a811406fad102a2ad325dd1e3ddac075f19e86d04d660bc4f6640483f825310e51d7cfdd90de4997c52dabc883e64f7d984444ef276
-RMD160 (NetBSD-6.0/landisk/installation/netboot) = dad8b6e8b216ef75971c7805baf4b4f86ecfad60
-MD5 (NetBSD-6.0/landisk/installation/netboot) = d29e773e58700dde6b5384464b517785
-SHA1 (NetBSD-6.0/landisk/INSTALL.html) = 5222270ac1c6fa408d5ef0bb7e901d99e916be72
-SHA512 (NetBSD-6.0/landisk/INSTALL.html) = 4011e42ffc09b225893c360690d01099ef76445c496e10c2434e50f8c97755d15038206bd2bc9bb4ee773c24e7b5bb64bf969a1e4ac4e07f4ec84c0beb21bf8d
-RMD160 (NetBSD-6.0/landisk/INSTALL.html) = 48a1b2c374b38629c87e1c04e661e36182caab0a
-MD5 (NetBSD-6.0/landisk/INSTALL.html) = dfa8413fc180b897d13c0964362e7b3f
-SHA1 (NetBSD-6.0/landisk/INSTALL.more) = add61a5d904d34e380a4fcd69cb7fffd24143a42
-SHA512 (NetBSD-6.0/landisk/INSTALL.more) = 4165166b8cc79bd589c80490352c0741edc2087e7560658ea0da993347301f94b3685babd2c40e8927fdd8ca9a58350232dad0cc1ec0c247890a283f1ca191b2
-RMD160 (NetBSD-6.0/landisk/INSTALL.more) = 7416e0e529dcbd99dca03cb901e7038cc60731a5
-MD5 (NetBSD-6.0/landisk/INSTALL.more) = 871f600baa29f1db802884fc26783526
-SHA1 (NetBSD-6.0/landisk/INSTALL.ps) = 734d5c64f3e69a68dd0b987492851f7f915692a9
-SHA512 (NetBSD-6.0/landisk/INSTALL.ps) = a34a07c314fe9a7e4f9dfc296f9e05116675f722ad0aaab757d76c31246a9182398bca5906c3882ff1b14fda9480bb674f12daa90274df9968f2c374d7a2d356
-RMD160 (NetBSD-6.0/landisk/INSTALL.ps) = 88c78a031426844ab1afca9dec3ba7289e994dd3
-MD5 (NetBSD-6.0/landisk/INSTALL.ps) = 446d71c39365e90bf6491895a781a4e7
-SHA1 (NetBSD-6.0/landisk/INSTALL.txt) = f4d9af9565019dda406298ac72875959cdcb1b72
-SHA512 (NetBSD-6.0/landisk/INSTALL.txt) = fe20c04bf5c15d95d5bcf8cafc9efd9ffb07e37ed6234c7abe8a2ff01fae1cb7aca2c4eb28a7d032212a31cae34331d0ce9fad7a3f7a01bb0a9b66e40352f5ec
-RMD160 (NetBSD-6.0/landisk/INSTALL.txt) = 3739b2ac5572c87aa6e8a86c6b33023db1c5e6f1
-MD5 (NetBSD-6.0/landisk/INSTALL.txt) = 7e1c46e08b5773bcd5ecc0717834c25a
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 6d24a14ed0376a5672de20c9c3b64137fcfe3b90
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 5b4957606a4a575aa8c0fea6dbb10df17ef4ac7afa8624c456cc625a0e0e2d1d86c2ca9a4fcf770949933af22cda99479bfab55d383878d0acd8f0c0a260820f
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.symbols.gz) = bd90a974d6697d2921362ed308fef5df89a6a7f5
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.symbols.gz) = b5fa03bb653ae6c758c1374109969d01
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.aout.gz) = 1a6b46426c3e93110e9138dc56dbf4e15391c7c4
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.aout.gz) = fe4cf575cd9e08ccf01adec28e38311c7fda42dfd2de5d17f98be37fbac8023b9fa4225c58b5d46728af2f3885825f34068acb82f600447ed60ec54ccc5753ad
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.aout.gz) = d1e8da51257a921f3d3c0ecec9f5a06712018302
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.aout.gz) = 1d29443ff1170766ece9a482e2468f73
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.gz) = d36634bfc138c395323135e9c60824b7f987b588
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.gz) = b7cdfcd815eea67d65ea003a2e56fd0a83ddfa1695749a5316566f9e59ef69dd9d78e80c54e99c9aa2db57d8e0ee9a3af43580ed40b45086b357362428e4faf1
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.gz) = 2d36be27f36008788fee498a9c18dbe7a3d66c08
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-GENERIC.gz) = ca10cc06f8e60b045230888b523f71ad
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.aout.gz) = e081ce3c03ff74c60f2a0ba80540e5b398aac926
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.aout.gz) = a02d1a6974fe702be5e51419440ebdf00bd333b0c4b88cf1289a992bfc21be4f731edb386bdb5e559b5f1fac064e392b97a800431538bd21e76ebb2f6f1c24a6
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.aout.gz) = 0db65548da46e8d651e8b2b9d4ee3b1f95086f61
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.aout.gz) = 22e3b4a434ae0bf2e200bd4f6f223ff9
-SHA1 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.gz) = 43172b3e8115db8f41cff2170f4b5d47dd1da8e5
-SHA512 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.gz) = e7e217acc802aff14a3ea852a1dd0f62088dea15ecadc3cc9b335259ecabf352028dfa5929ff139f31f5b299311a5e42e944c0979be0299501caed3592e1d86e
-RMD160 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.gz) = c53f3f5d7e4150eb768b377877d8a8d71f22d156
-MD5 (NetBSD-6.0/luna68k/binary/kernel/netbsd-INSTALL.gz) = 5d3869dcf1301987a12ffa512b626d19
-SHA1 (NetBSD-6.0/luna68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/luna68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/luna68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/luna68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/luna68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/luna68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/luna68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/luna68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/luna68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/luna68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/luna68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/luna68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xbase.tgz) = ffc6dc889560371042dd12a5486a9a2c499b86a9
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xbase.tgz) = 9aa2ba4d703a13020acf8543d1efcde76b6f0f4b411be20f804709b3802e537be1e651eba469830c4fd4777a379ea9936200a3a3eb4b1a702c04bb81aafcc723
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xbase.tgz) = 3ecf53e7414ef859a47fe5afc108cf3bfa82fb1d
-MD5 (NetBSD-6.0/luna68k/binary/sets/xbase.tgz) = a6af002ce158cf72eb5c6a7cde2c0989
-SHA1 (NetBSD-6.0/luna68k/binary/sets/kern-GENERIC.tgz) = dca3d0e2fc1d884287bd283e81bc797ceeb13195
-SHA512 (NetBSD-6.0/luna68k/binary/sets/kern-GENERIC.tgz) = 58388c5d51f6f09f0884904ba8b18ae63374f807312177898080267382141c631e6aa0698a55b427e5673b34fa995cb3d8cd7e77dc1036c9812fe8356f976dc7
-RMD160 (NetBSD-6.0/luna68k/binary/sets/kern-GENERIC.tgz) = d9c5321bc472e64656a250e3e3bd6d72119435ce
-MD5 (NetBSD-6.0/luna68k/binary/sets/kern-GENERIC.tgz) = 374856b19bd6eb0c072c4b25933f5f8d
-SHA1 (NetBSD-6.0/luna68k/binary/sets/base.tgz) = bc10452b7a7a1a24dec1813d74ff78d1d82ae750
-SHA512 (NetBSD-6.0/luna68k/binary/sets/base.tgz) = 5525e21ff9566b0c7ce169e2a087094e41cd3e60d4f67d8ae026c4169cc5b606cb88f600e4410570053dd9ea8202b0da0fd7293fc8c6531c722bb4109accc605
-RMD160 (NetBSD-6.0/luna68k/binary/sets/base.tgz) = d763e9b40ced7122fa0ccb461386a7b7ff1dce1a
-MD5 (NetBSD-6.0/luna68k/binary/sets/base.tgz) = 665d860c4af2fd73227eda7bbfbf124f
-SHA1 (NetBSD-6.0/luna68k/binary/sets/comp.tgz) = c69dde9c6ef3a0ed4457ced09c7016465b0e82df
-SHA512 (NetBSD-6.0/luna68k/binary/sets/comp.tgz) = bbb46b665a23fb728945c51cc19ae85da4e33da19d91ce15ed24d7832258c0cb53f75351c869aa46704cf09245403b9b28fb55624e0b8e28c2e509b653d459ba
-RMD160 (NetBSD-6.0/luna68k/binary/sets/comp.tgz) = c622dbd3522567457fd890414386ebbebf6204e9
-MD5 (NetBSD-6.0/luna68k/binary/sets/comp.tgz) = c0c2030d7bd68b455be0b4094a1e949a
-SHA1 (NetBSD-6.0/luna68k/binary/sets/etc.tgz) = 7d1db50a753d92b90ee1eaf6b4a4f02cab03d981
-SHA512 (NetBSD-6.0/luna68k/binary/sets/etc.tgz) = 86c1904b4007d3a1f4a91f30140a3c6d53af8b90c38c01fee75b679484096079d357e7a71c027464a5d48d4789d9c4a04f3f2545df907953c739a22877ae130e
-RMD160 (NetBSD-6.0/luna68k/binary/sets/etc.tgz) = 52873f9a82119f52ef847e3e27e00ab4e10c68cf
-MD5 (NetBSD-6.0/luna68k/binary/sets/etc.tgz) = cef84e15f32a2bf92f3657f981235991
-SHA1 (NetBSD-6.0/luna68k/binary/sets/modules.tgz) = 9428e74da3601eab14416d01bc4880dcfe21a6f7
-SHA512 (NetBSD-6.0/luna68k/binary/sets/modules.tgz) = ec64bcf7ebed5af30e85708133fcac6f0946aa0ba7175906b1f9ed06c300c23028ba0ba1957c1e4fe6d4c7a99877e7ed104b1439cec728db79fe9f3cad3eccb1
-RMD160 (NetBSD-6.0/luna68k/binary/sets/modules.tgz) = 8060c8587dfadee593f84db43c0e63acfc259e06
-MD5 (NetBSD-6.0/luna68k/binary/sets/modules.tgz) = 1477ab794d1c6494bb5a9628820c4c08
-SHA1 (NetBSD-6.0/luna68k/binary/sets/tests.tgz) = 8380e48719aca55a72f3f91629e52a774eb7e4d7
-SHA512 (NetBSD-6.0/luna68k/binary/sets/tests.tgz) = eced534537094e8ee83154a5319f89f4cf8e46bf8715ff6329a01f8824e231bdf726ea6f6cd4ad940d0a0a45b5b99c27eb5083e69ae915f56b2beaa7d8b63d89
-RMD160 (NetBSD-6.0/luna68k/binary/sets/tests.tgz) = 05c755294af5ff529c495865595c8bfe7f5d91fb
-MD5 (NetBSD-6.0/luna68k/binary/sets/tests.tgz) = 4e8df8ec4228f385e7eb7d097904a8fc
-SHA1 (NetBSD-6.0/luna68k/binary/sets/text.tgz) = 19f8fb95eef7c6162c661a5262f5f41fd92f6078
-SHA512 (NetBSD-6.0/luna68k/binary/sets/text.tgz) = f2a4f42b05526d21fffc8d4783885b155bdcd8183b194058e9554bb34eb47a6b0ba2d6a9779c12f17844a6bb2fc07530a7a1d7dcacbec44b437fbc08796b65bf
-RMD160 (NetBSD-6.0/luna68k/binary/sets/text.tgz) = f01ee7d5dd88c612e8c8b3aae25ca93e1c70df0b
-MD5 (NetBSD-6.0/luna68k/binary/sets/text.tgz) = c55b5fb2f398aaebe749d7d2a6fc8570
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xcomp.tgz) = 01bdf2494bf84313fb000f36606161f17cbc0114
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xcomp.tgz) = d4fb1fb22011bf3b178593e1a2be51626563c6ccb35f3c2db922374d9dc1dc1fdd7830df24f1f699a89c46d5a7044c221372015134682aba5a2010d5f44ef77f
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xcomp.tgz) = 03191d2a871d99076fe73355da23bfaf537294bf
-MD5 (NetBSD-6.0/luna68k/binary/sets/xcomp.tgz) = c30eac2a665f533444de26dafbbdd77f
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xetc.tgz) = 3d78331b298a38fb6bd231bff59cccdedceaf71a
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xetc.tgz) = ecaaaaa343d9abb3d24d147826956ad64fe96338d38511b5226d3cf2cc564eb8cc39aa833c7e0875fc4378aa6b8c2f3a7ad17c8906f8c68e5adc16c3cec5b715
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xetc.tgz) = 7734dfa9521226f76e23b91d237109bf30855cbf
-MD5 (NetBSD-6.0/luna68k/binary/sets/xetc.tgz) = 0e5ef946483a93d487b70b526477efb0
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xfont.tgz) = dca18181278f672451b3902ebdbf3d79ccfdedb4
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xfont.tgz) = 3979a9cc4b1731c8b31f44cabbe74920cb03d7e7d551743eee78442e0ba67a6faa854cdc674cd0338422aa09119ae653f2fdbd2c78dc6811c49661e812ce7fc1
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xfont.tgz) = 9b946721f534b2fd651e742f9061ef5d648efd3a
-MD5 (NetBSD-6.0/luna68k/binary/sets/xfont.tgz) = a3b4aad9b96343e5565a441b3376f454
-SHA1 (NetBSD-6.0/luna68k/binary/sets/xserver.tgz) = 859f7b47396c427f5d6c3570f6f68227131b2b34
-SHA512 (NetBSD-6.0/luna68k/binary/sets/xserver.tgz) = e1eee654564f67397c0324d8f89e62b0fcb40857b423ad2fb47c04d3bca7fa833a04adef639baf3c48bc27400f4d8a548d55efc7e29dfac74a82794e5182ce2a
-RMD160 (NetBSD-6.0/luna68k/binary/sets/xserver.tgz) = 1f75e4523b978323e96a0c986edbd700ae351846
-MD5 (NetBSD-6.0/luna68k/binary/sets/xserver.tgz) = e50f795889ea9f0cfc49fcc6d8991ec4
-SHA1 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERICSBC.gz) = 33453c6105617ec6e41c81d71be7b04b68f26e24
-SHA512 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERICSBC.gz) = 9ea5036462094ff9ff7696cc13f9b76166f4c6058ee8e79547898866c27e96b5e31e4e27228fc7bddc69b0f11ca242113778b2ab8c6c458d16fd08e7b5148557
-RMD160 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERICSBC.gz) = aa85610097d3144646f7bdcbdfd1cd55fd248280
-MD5 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERICSBC.gz) = 4b4ce73206f5d0203aedf08b4e9e73e4
-SHA1 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERIC.gz) = 644b65114d6ffc9bef291f18e3935ca539ed29e5
-SHA512 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERIC.gz) = 8e590640af3dfd78202b83a4bc6afec869ee37b467a10b3221c08e54c3a66bddc1726cca88d09fa98598f77d8bbc6dd36c136c685bab7e75198a9b6fa89e11da
-RMD160 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERIC.gz) = 2bccecd72133b03055457567ea8eca57acc56ac6
-MD5 (NetBSD-6.0/mac68k/binary/kernel/netbsd-GENERIC.gz) = ece356c2c95629fc502bb2e9382f9b4c
-SHA1 (NetBSD-6.0/mac68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/mac68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/mac68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/mac68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/mac68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mac68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mac68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mac68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mac68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mac68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mac68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mac68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/mac68k/binary/sets/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xetc.tgz) = d2ca34bd668e108cbbfd4b45720823663339f8bd
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xetc.tgz) = 431ca465f300e7eb5d4dbd44c43e412a296fb4d3129217e752f86a720e8a8bdf736c9add05a45518a4f3e6cffa32381ef61e9186d360b68a5f8c64d87e385fb5
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xetc.tgz) = 4c5d664679856b02b694534cd6afdf20597e6d53
-MD5 (NetBSD-6.0/mac68k/binary/sets/xetc.tgz) = 72bd67556ac14ea0ce147374af0ba624
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/mac68k/binary/sets/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/mac68k/binary/sets/kern-GENERIC.tgz) = f8cc845ee4bb3a6eaba937a9aa9ef56ee7df39a1
-SHA512 (NetBSD-6.0/mac68k/binary/sets/kern-GENERIC.tgz) = 173879f5b2cee758aaec0d6baa6adfe208aa0817ce70edb8a4d821189de5e6a64dd5a4f0cd1da4b166579427f416383bc068d7e49677999e075cbe3ed40c99d8
-RMD160 (NetBSD-6.0/mac68k/binary/sets/kern-GENERIC.tgz) = 2e10430ed05682c3d2e2c9496d847535a68988a8
-MD5 (NetBSD-6.0/mac68k/binary/sets/kern-GENERIC.tgz) = 4c60130363f2cf09731d6dd9b98fbcb3
-SHA1 (NetBSD-6.0/mac68k/binary/sets/base.tgz) = 702a0468018c02cc7ce229811a3905477da4f722
-SHA512 (NetBSD-6.0/mac68k/binary/sets/base.tgz) = 871ff91422cfc76ef2e1fdf7a2052cbceaba0b7afacbf5856f2b440e834f1f4cc3759322f99bf85c4effff2a657f03a68978479d495985cf3ecf1cc3d0db4d88
-RMD160 (NetBSD-6.0/mac68k/binary/sets/base.tgz) = 184263ea29fe40e2def660f30c049a1f7c80d42d
-MD5 (NetBSD-6.0/mac68k/binary/sets/base.tgz) = ee8a6af6800f2a8ad6b9d6bb099bdf1d
-SHA1 (NetBSD-6.0/mac68k/binary/sets/comp.tgz) = c355ad494accbc2a9cc99011c6a7f1030027b4cd
-SHA512 (NetBSD-6.0/mac68k/binary/sets/comp.tgz) = 084828af876a61b296f6d34258462165cd23bdcb43ff5ac7f30d2b1ca43be31716c98de636e708ff193d8f97671eff2535d09710a66e4aa67151f326e423052c
-RMD160 (NetBSD-6.0/mac68k/binary/sets/comp.tgz) = 3119965a0c66603ebb2b62b7ca53838f2a468e0b
-MD5 (NetBSD-6.0/mac68k/binary/sets/comp.tgz) = 777aac0001fb61b70b6f5da36c73e8ea
-SHA1 (NetBSD-6.0/mac68k/binary/sets/etc.tgz) = a279de07a8d912b05e056c846bc616c084edeab9
-SHA512 (NetBSD-6.0/mac68k/binary/sets/etc.tgz) = 833a3c74e048bf2cc9f148b14a81eeb526071a1226fbafc3b501409922f4bb67b69d68cdd59cc8b83fe8fccb0afd1135e64b16683e8f42230530efab0e3ed115
-RMD160 (NetBSD-6.0/mac68k/binary/sets/etc.tgz) = 11fed26b10f5d68485667c9b0eb0673b4fb17390
-MD5 (NetBSD-6.0/mac68k/binary/sets/etc.tgz) = c6e0534c4470b66908a3f6e194723ffe
-SHA1 (NetBSD-6.0/mac68k/binary/sets/kern-GENERICSBC.tgz) = 851fd53f568f2c855c934f975d322954de4c6b07
-SHA512 (NetBSD-6.0/mac68k/binary/sets/kern-GENERICSBC.tgz) = 869f6b8f6eb4408a4f2950e8b9e10d020d14c0b829dd951d9746a9a778dbf142d53cb263cd797ec862b34a1aa367dfdbef5a633bd1181e442cce9fc0da2c8de7
-RMD160 (NetBSD-6.0/mac68k/binary/sets/kern-GENERICSBC.tgz) = ff894994dc6fe3773893eae064bbd95aca6077ab
-MD5 (NetBSD-6.0/mac68k/binary/sets/kern-GENERICSBC.tgz) = 0f2df7a929df022d55d5a73fe75e47a4
-SHA1 (NetBSD-6.0/mac68k/binary/sets/modules.tgz) = aefbcaa2fb397cb690e38e3be240caabf9282947
-SHA512 (NetBSD-6.0/mac68k/binary/sets/modules.tgz) = 83c696fccc6143c9c03e4efdf8ec65363dad51bbc48b434dc21a9949424f12db413de66abfa328b6d45f4097c59ee0324797ccc4ee7e462451170ce9ed7a81f9
-RMD160 (NetBSD-6.0/mac68k/binary/sets/modules.tgz) = 44606993e2ae655bdafaf93a92cee5a85efb9e2a
-MD5 (NetBSD-6.0/mac68k/binary/sets/modules.tgz) = 03bdab5790fdf19db36149fc33857b4f
-SHA1 (NetBSD-6.0/mac68k/binary/sets/tests.tgz) = 56b5e85ef88683b81048d2e6136aa949e690d92a
-SHA512 (NetBSD-6.0/mac68k/binary/sets/tests.tgz) = d4290b5069cb2290aac992145bcd69ff6e34b98ae2661e5cc16dd5b70362c1036c079dad7c96288f473c600e9cd1870c079268ffd08acb418ecc21708e3399ae
-RMD160 (NetBSD-6.0/mac68k/binary/sets/tests.tgz) = 7d46086a6a53cd19439f6967849dd294bb27b631
-MD5 (NetBSD-6.0/mac68k/binary/sets/tests.tgz) = 746ea69e63fb5af15f526f2f950ea449
-SHA1 (NetBSD-6.0/mac68k/binary/sets/text.tgz) = db35814cfb2c8ecce27765b3257b885d2e6debde
-SHA512 (NetBSD-6.0/mac68k/binary/sets/text.tgz) = 4110c6d47405005eafdb9fb205505f2cc40c6a2ace5b611312f4ef15ae5207a9ef5c4a42ca3b53164ec6f00a80efa5aa6d669a79a9e89da6f73fadd2dc5e437d
-RMD160 (NetBSD-6.0/mac68k/binary/sets/text.tgz) = 38345e956e8a7be25706d4809bfa83ac626a3e96
-MD5 (NetBSD-6.0/mac68k/binary/sets/text.tgz) = 90b4f37e590530f361f5ba22882f6184
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xbase.tgz) = a9988db70cf4a221f20fa81d7f2525575eff6161
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xbase.tgz) = 996a52c0e2a69be7ffbad4fca9e79e03cd72533d3c5059660b2bc5ebb3e982e010f53a870583d9eba702f143365508f5a8ab307d9806fda3df1f48021a3dcf4e
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xbase.tgz) = 10e9d44638eab39da8b579a32ebf1ae283901401
-MD5 (NetBSD-6.0/mac68k/binary/sets/xbase.tgz) = 649bdf23aca348bbb0d7d3741154cbcd
-SHA1 (NetBSD-6.0/mac68k/binary/sets/xserver.tgz) = 2139abe77fda0708a14f6cf7cb3787ede3369f35
-SHA512 (NetBSD-6.0/mac68k/binary/sets/xserver.tgz) = db558b4f6be34da37cc971183c3a67d8d51ea26f3852b9ae53844ca5bc3fc0be405b6c30b6409d1e0d653178f4f6dc46645f37526ddd7d74be735a38beeaab09
-RMD160 (NetBSD-6.0/mac68k/binary/sets/xserver.tgz) = 32d160c3aab16c5a3ed819c9c020c8189e735c9f
-MD5 (NetBSD-6.0/mac68k/binary/sets/xserver.tgz) = c17de992b6f02ad51a720faaf0ac04d5
-SHA1 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.symbols.gz) = 7ab45cb4b64d15f930d7b275acf62d70015c7d9c
-SHA512 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.symbols.gz) = 107b76145d7484485984483a8b793bbd3fd56f0eccafc619f9b5cb119bdbd0f87ca5918257554a9623c535416368eb4dac4df8fcdfdd12ac279459b775827e56
-RMD160 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.symbols.gz) = 2f2e4239577f923664edb12730c51e15106079a2
-MD5 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.symbols.gz) = d53fc2a484e0add618fcdd9b236ffdd3
-SHA1 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.gz) = 6f94e9d416e73a7019fd05338369616e459db5a3
-SHA512 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.gz) = 8fc1096815fdcc6e987e0c69b991553ff094e226127a10bcd9510ffa0dcc746fb7416896e54ea32f18e80c5782937b8af34d20c55d8758c750ff7810ec69c203
-RMD160 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.gz) = 6ddc97fcb3cf13544c3190956c37f34897cf35f7
-MD5 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALL.gz) = 3d4a8d946ed122290abac6375a9ef863
-SHA1 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.symbols.gz) = 2672525b1b4997e3793edea3ee8b30c23cffb102
-SHA512 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.symbols.gz) = 003877e10fb0dad0b7190bbf559f190f3de2c0e1068caa5601a0a938706225e2cb7b141f8e4e767da7ed1ff15350f42792ee9a7de5e1d7149dfc233d6dbb4da9
-RMD160 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.symbols.gz) = 8f7b7ddfd1b96f5ca34f4a074cf27adf7701ceca
-MD5 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.symbols.gz) = 2aba4f14a7812f2d935c5ddd84634529
-SHA1 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.gz) = c91cbdc339088c1c32868779c918f746d4b5f4f7
-SHA512 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.gz) = 11eff94f2d5aaef7decbf6447a91f692c605a5d36acbea876e6a2501dddc681a60a89d3084ed1413c80ba3d8b23c90abfc567dc99254a9d810353992757d6284
-RMD160 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.gz) = f26b7b6f484d727ff6aa460985f23af89f72c8f7
-MD5 (NetBSD-6.0/mac68k/installation/instkernel/netbsd-INSTALLSBC.gz) = 2dffa66829a868235a11ab636e793d52
-SHA1 (NetBSD-6.0/mac68k/installation/miniroot/miniroot.fs.gz) = dc091b6ed92bd1269a8f76c427d606345a8f49fa
-SHA512 (NetBSD-6.0/mac68k/installation/miniroot/miniroot.fs.gz) = ba5b9a96d964da2b2c0c5640a4669840352057ea799013ceae75d3d9a7782d6a4096cbc591b287b663edd27a3db54ff5a5b62a81099c2f97d21c3919b0bc7b59
-RMD160 (NetBSD-6.0/mac68k/installation/miniroot/miniroot.fs.gz) = dc09fba5a4fe6ead5f59da6026018a63065ee414
-MD5 (NetBSD-6.0/mac68k/installation/miniroot/miniroot.fs.gz) = ab49b728c7a2ef8c273a3ad07b5e3e6b
-SHA1 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1g.src.sea.hqx) = 5ae75a6179968ac955f38b60f57e3811a1e4a3de
-SHA512 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1g.src.sea.hqx) = 0017e59c1c000d154df2f9e868a85df1897b8a7918471dd6d468a4527b092ae2d069bbd686487b0b05ed4d61abfffaa7eb6584f5ee03b320469386e2b64c89cf
-RMD160 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1g.src.sea.hqx) = d29a9600c614d00c7af518b2f75f1d1ebebf4b6d
-MD5 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1g.src.sea.hqx) = 5d00aedc5729c2e2ffcea77e666a4adc
-SHA1 (NetBSD-6.0/mac68k/installation/misc/src/Booter2.0.0-src.sea) = 5a4598fcbd39bfed29d58f9d712ed8d3408ae5c1
-SHA512 (NetBSD-6.0/mac68k/installation/misc/src/Booter2.0.0-src.sea) = 4828cb2efb9b40753be27ecd1cbe235e3842b9b2b024070eb6135f10716dfae1ab7cd6d45db862c64eb5b2267b40c6660af53986d3b5fcfab03600a75c0b08f3
-RMD160 (NetBSD-6.0/mac68k/installation/misc/src/Booter2.0.0-src.sea) = 9f284e11ef74ef0202d4a46ffcdafce282f3104f
-MD5 (NetBSD-6.0/mac68k/installation/misc/src/Booter2.0.0-src.sea) = d9185a15e8dbcefdc26e8dceea7eaa51
-SHA1 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1h.src.sea.hqx) = 3a4d1868a5f6c6e010dd6e3d0ff7ddb63a034c9e
-SHA512 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1h.src.sea.hqx) = cafa4aadc01ce3c515945359d67df14aefb9cf36cafab93d113cc5079e0cdc06360310173febca13cf7bc8fe66eb9161f6afed97a0810ddf025bca38d327e444
-RMD160 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1h.src.sea.hqx) = 90b7070035d00fe09ac95962c4d47e1ba2f565e2
-MD5 (NetBSD-6.0/mac68k/installation/misc/src/Installer_1.1h.src.sea.hqx) = 9f792b26b1a5691f13193a7e08cf6d18
-SHA1 (NetBSD-6.0/mac68k/installation/misc/src/Mkfs_1.47src.sea.hqx) = 76823266114b2ff531d35c646eef705677085907
-SHA512 (NetBSD-6.0/mac68k/installation/misc/src/Mkfs_1.47src.sea.hqx) = ceb5f5665acc0a9c8f273bf659e17a55dec3ffde647deb90cfa9001e43a82d5e1b4e8001175559b2f1d6327f2a80f86bfbf2798f27bbe6bbe52547a92de11d57
-RMD160 (NetBSD-6.0/mac68k/installation/misc/src/Mkfs_1.47src.sea.hqx) = af8327f6e2d66bbd8a04498d27ab3f5668556cce
-MD5 (NetBSD-6.0/mac68k/installation/misc/src/Mkfs_1.47src.sea.hqx) = 61facd7fdeb336f108d78feb8327555b
-SHA1 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin.uue) = 432b619e0eb127a5fd70fd3dc8f2988a93211a34
-SHA512 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin.uue) = ab3650cca71dc57f38f480bfa74f6bdffe2d0ccbf76072658503cd168b91f90a7fe5ba0ef4f51aa497a11684ee05d73376e059957c75773d92f894877042c0ab
-RMD160 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin.uue) = 61bdb1fc795bfe9242816682fc98cfdee036e0ef
-MD5 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin.uue) = aed2003c59f8e824dc30c44366439426
-SHA1 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin) = 8e940cccdfe4e645ddd01738477f7f58342788e0
-SHA512 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin) = 0d3e0d39aa811921b012a6fd07dbf97b63f61dd14800c61d2941f3c624db88cd0805478df900120cd20c3fcf6af11c5989c52400e5b4eefabd4bf5c62f9f2023
-RMD160 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin) = 49146172c77c05a522bdf118e879f0bd933bc99c
-MD5 (NetBSD-6.0/mac68k/installation/misc/BSD_Mac68k_Booter.bin) = 757b6ca3559185feafc36927ce9ab578
-SHA1 (NetBSD-6.0/mac68k/installation/misc/res-edit-and-others.hqx) = fe505f1ff77f1574ddec17dd4de93f0370fe236b
-SHA512 (NetBSD-6.0/mac68k/installation/misc/res-edit-and-others.hqx) = cf382e50ea9a8fd8c30c8bddfadf44b64b94216656dc623039a37c88bc642080b54002b9aca1cad25c251c719cda9fb3ad89bbf3ed645672c0040baf459e0ae9
-RMD160 (NetBSD-6.0/mac68k/installation/misc/res-edit-and-others.hqx) = 19be7f536eee28b7e30cffc4ef3e8a2f8c7fe88f
-MD5 (NetBSD-6.0/mac68k/installation/misc/res-edit-and-others.hqx) = 707c4953e155315abe519d5d48c54318
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Booter-HTML-manual-12.tar) = 94e2f09daeb119ece95abfe24b103f85f9c5d558
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Booter-HTML-manual-12.tar) = 3d9a743e71ee985134ab679608ffc31b197a638e302450c888f90d02fefae72b647622024b3ebb4263e57b6e58ce457890d6a0774c62a8e4a9f90d235d04c15a
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Booter-HTML-manual-12.tar) = ee32b1b55b0495b9b4723ff3cbc42123f5b360a2
-MD5 (NetBSD-6.0/mac68k/installation/misc/Booter-HTML-manual-12.tar) = 24120554ffbac39c8edd8e939706b7c5
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Booter2.0.0.sea) = d5178c25cc71514816986842e39c716e6cd5ab4c
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Booter2.0.0.sea) = fafbf6f153e9b9bf657aac3c74d569b44ff21c1e306f0cbc4a2fcab5fbe439bd46746ff0469113bc715b69990507994ae94934d8caf82321684326f4e8b4d146
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Booter2.0.0.sea) = 97798bf61397243efee8480c7f2f19e63fda7d00
-MD5 (NetBSD-6.0/mac68k/installation/misc/Booter2.0.0.sea) = 05b46210443c60ee28bcbe81f1ebc004
-SHA1 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin) = 2859ea6089df13333b6b521d8bc858079083251c
-SHA512 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin) = 1891f4c07bfb51de08fea8e3a5cd572e99897d20f6df748ae72af8da5e8191ca07d5f0dc836b39be12236286926677896e4a456a8f64b31517d09285bebed460
-RMD160 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin) = 37fe1a762925b8bb8ae71177bea992aad27ee03f
-MD5 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin) = fcc43fd81d5691559a5aa8ae15be8899
-SHA1 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin.uue) = beb0225c706b12fc8a241025c483133c1d5e6b86
-SHA512 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin.uue) = 7e98b555d7cf30da5948b115595f06a725c55cc0ef3e7a705423c600cafceca2e04966c65573805e6e553cf9f7a2faa05803ff2d6cd9deb714f4e98924e2a5d7
-RMD160 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin.uue) = ed9a5860dafd3484d380f1f3a91cec366b59be9d
-MD5 (NetBSD-6.0/mac68k/installation/misc/BooterManual.stxt.bin.uue) = cacb436bfbfc9a4b0995c789fee8342f
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer.sea.hqx) = c6a6c25ae1fcdfe4a0ba90616c3779068280b759
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer.sea.hqx) = 5ff75859fd5eb2fdcf75215ec6c045518ef111d0e8caecbe951dbf6f9f1129cac6948ab991949cbb3ee68d05ee8f398b07206acc9af53a5db1c4c6c7148a3a2a
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer.sea.hqx) = 36b141ff6722fd5e76fe293d1247587ae0efdd8a
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer.sea.hqx) = 01bc744d539b4f2f8e4fb2761d4c77e7
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.bin) = 8ef8265fa77478a6741bc65ceb6f64e790c7aac2
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.bin) = 45324e1231e7d53816640b8867eb117294373e90463297f05e6d187b1fe719b82bc1782b24dff8ad6a71e0383eddd0f47bd15d604f6cf3bb2bf3499df887eb48
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.bin) = 506451703e3f00ac0a26b450d33463fd2c1e4582
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.bin) = ea338e4327628024d670ae9eb64323db
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.hqx) = 8e28517a94b1b0b57a504938077aa740de7e3b80
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.hqx) = 6e07c3682a0bbb4f7d23c235f83f3d22d4a8813cade67ab9f76092c68f41767c00eccde01600283df36e4d222bddd2b7fec355db468d07d7db8dbf51adc9f5bb
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.hqx) = 4159e0226c6f58b480bd0cdc42f9d2d411521034
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1g.sea.hqx) = 2c214a1b2429702942436e92e2a408c3
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.bin) = 0bda2b9e6a95f1b10414823f048087ad6455e6ed
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.bin) = bb9ad3f95609c3f23d31a876055f2cae692d8abb853431d0945ee7e66e292fe7069dda82f5ee615ac5fe5893e0699323632de8d4c1c668d987a8172597d78386
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.bin) = bc7f88652ae4d51954c967dde99dc6c11494a7c8
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.bin) = 763ff66b2234fd52ffe4ad08de5f090f
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.hqx) = c6a6c25ae1fcdfe4a0ba90616c3779068280b759
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.hqx) = 5ff75859fd5eb2fdcf75215ec6c045518ef111d0e8caecbe951dbf6f9f1129cac6948ab991949cbb3ee68d05ee8f398b07206acc9af53a5db1c4c6c7148a3a2a
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.hqx) = 36b141ff6722fd5e76fe293d1247587ae0efdd8a
-MD5 (NetBSD-6.0/mac68k/installation/misc/Installer_1.1h.sea.hqx) = 01bc744d539b4f2f8e4fb2761d4c77e7
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.bin) = 9783f80336af95dfbf854278f58b577891a6442e
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.bin) = fb3d537f73cd7a5c05b4deeacfebe4805de1172071b97af545ef0c360c8093dd34007cdb498dad1b8fba4930e939c35429b314c575ab1e6d57fc208d72bee767
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.bin) = eb92d84b516d3c84a2c54fa501a1f585434639cb
-MD5 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.bin) = 0b6f626c1d8f578e01818cfc2a2e79b5
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Mkfs.sea.hqx) = e2286a389c29eebadaad19c9c3f3c9095b8bcb3d
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Mkfs.sea.hqx) = 5021b88d12bdc6545c681a3df24750375d63cac19b9e0f6a7148cb8592de6d0cc22f254b9755a96e1780541acbbdf54f0f6f9b62ff7cdab8dc94db0d247b2b87
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Mkfs.sea.hqx) = 14c18aceaab0593ca0f41bcce95499db3fc4f8f7
-MD5 (NetBSD-6.0/mac68k/installation/misc/Mkfs.sea.hqx) = a20825a32ee72f356880169993c3ac73
-SHA1 (NetBSD-6.0/mac68k/installation/misc/README) = 6f10f67afd988de6fa0a66f78ec46da15cc994f3
-SHA512 (NetBSD-6.0/mac68k/installation/misc/README) = e8f6d9c3217e7ad084ebc6758a07f14a664db9a34feb2b4dfb19fce8692ca1703f2b119eabcb13cb38f629a9588dea3279bfcf0cda65260acd585514d129701d
-RMD160 (NetBSD-6.0/mac68k/installation/misc/README) = 9d125cfe0be05fb26b9b5f52690b9280e282af44
-MD5 (NetBSD-6.0/mac68k/installation/misc/README) = 6081e0a4521b8f229bd3c09e094d4bc0
-SHA1 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.hqx) = e2286a389c29eebadaad19c9c3f3c9095b8bcb3d
-SHA512 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.hqx) = 5021b88d12bdc6545c681a3df24750375d63cac19b9e0f6a7148cb8592de6d0cc22f254b9755a96e1780541acbbdf54f0f6f9b62ff7cdab8dc94db0d247b2b87
-RMD160 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.hqx) = 14c18aceaab0593ca0f41bcce95499db3fc4f8f7
-MD5 (NetBSD-6.0/mac68k/installation/misc/Mkfs_1.47.sea.hqx) = a20825a32ee72f356880169993c3ac73
-SHA1 (NetBSD-6.0/mac68k/installation/misc/NetBSD_ROM.sit.hqx) = 009c5f376751cda897cdd5707932a42ed8c4c75f
-SHA512 (NetBSD-6.0/mac68k/installation/misc/NetBSD_ROM.sit.hqx) = a04d6873fe2e0d3b543a05d1c12893f2715479e5bbfeeb9657babd146610197e4eec045a428d51bce4a9f8fb90f23f81b31b35f672692de953d6df8379a7531c
-RMD160 (NetBSD-6.0/mac68k/installation/misc/NetBSD_ROM.sit.hqx) = 6dcd7e0f25e19d77d38b18c22af77ef0c80769e6
-MD5 (NetBSD-6.0/mac68k/installation/misc/NetBSD_ROM.sit.hqx) = 6d9984dacf90adcd3f5f4a906b72b436
-SHA1 (NetBSD-6.0/mac68k/installation/misc/README.Booter) = cb2fb0233a1f5444c5c1b9648a6c167a4ce09437
-SHA512 (NetBSD-6.0/mac68k/installation/misc/README.Booter) = b233f9b5f8e6b615ecbb117d1853c64a82b1ac78958a7d394133e6e5f777ca6075b1e65d74ce52d1bc9cc97257584cbc4c70a11b0865ef095e6376d2c4e46bf4
-RMD160 (NetBSD-6.0/mac68k/installation/misc/README.Booter) = 2bd403db763c410b968f85cb8da32d10a7520b59
-MD5 (NetBSD-6.0/mac68k/installation/misc/README.Booter) = ae0f90a35340fc51be774ebd33674a41
-SHA1 (NetBSD-6.0/mac68k/installation/misc/README.Installer) = e8e4011a516b40ea99e9f1b16708fc91878f88fb
-SHA512 (NetBSD-6.0/mac68k/installation/misc/README.Installer) = 791e8a5415bdfd0ac0412e964d0ed1dac9dbebfbe9d546fbd92d3aa3d9b82eececba55628ac6cbbd7dd843f62183d718e2a1ad98c10311fb76c24dd40c77af06
-RMD160 (NetBSD-6.0/mac68k/installation/misc/README.Installer) = fc1b834d11c4df6677ee4a40b1e3ba2015d5ad00
-MD5 (NetBSD-6.0/mac68k/installation/misc/README.Installer) = bd6be3091a274d7c68da789ad1db0eda
-SHA1 (NetBSD-6.0/mac68k/installation/misc/extensions.map) = 4a5fa646db0c73433f3538e17e7d18b38679284f
-SHA512 (NetBSD-6.0/mac68k/installation/misc/extensions.map) = 32db0ebf9c0e80e4856c963ef21d3626060e20ba33cd61301e4114b77a636cf248e705700444b42a4631d1c56ef09294981158e1f0b0527b795501b9cea1b8f6
-RMD160 (NetBSD-6.0/mac68k/installation/misc/extensions.map) = f6811f3b103ab5c902a204dce2578e8cba6e8e9a
-MD5 (NetBSD-6.0/mac68k/installation/misc/extensions.map) = 5007a814ca2442a9693969cb997b4905
-SHA1 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.bin) = 6eb3cb3b988e6295f7222016d241f53c61cf347e
-SHA512 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.bin) = 16f05d2792e03d3a9c9ccd9d435ca5556224bd73619d89b9d2f6ac3b282f6587b76745bbbc9383c20f11c2125b60dff138845dac4a269e459a5b76ee1d5e865c
-RMD160 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.bin) = be8fc56378e697fc1f6fe9da5e8e69c787dbc434
-MD5 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.bin) = 33ff34f5db2f0ba88c83ce85b1e51664
-SHA1 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.hqx) = f588fece9bb911749d1038da2ec31e5ea50b2b21
-SHA512 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.hqx) = 1d4a1b489419171022e120d7292f479ea0d47833b2868bccc47ea1d97c442ff1e18044f43783fbd920145a6e6aad094be796dc8db00d5d997235c8f9d8ecb7ab
-RMD160 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.hqx) = 6e0bd805b5595d6d8ee3a24a63290978bd8da8cc
-MD5 (NetBSD-6.0/mac68k/installation/misc/mode32-7.5.hqx) = cf14fb32d042ba270b527ec8b11f6d3e
-SHA1 (NetBSD-6.0/mac68k/installation/misc/pdisk.sea.hqx) = ac3641da27c3615456310ff795b2d684eb2661ef
-SHA512 (NetBSD-6.0/mac68k/installation/misc/pdisk.sea.hqx) = a5404597c2479adf6ad9a910771f8d9cff57dbc4066d73346bfde3f1380a59641855820658ff3a6c8c0fd97b242dcfd4c30e7ecde50047bbbc7a7d45e9d77e4e
-RMD160 (NetBSD-6.0/mac68k/installation/misc/pdisk.sea.hqx) = a5368be868266f37bdf3459067659ef0c4186dc6
-MD5 (NetBSD-6.0/mac68k/installation/misc/pdisk.sea.hqx) = 71be22598a33042751caa6dc6c0af834
-SHA1 (NetBSD-6.0/mac68k/INSTALL.html) = 85efa4b8402dccb52805752ff82e87eb1259e5cd
-SHA512 (NetBSD-6.0/mac68k/INSTALL.html) = dd8012db2cb801b02b808eadd473f529b58977b9d2088c878aeb7deafc214adb2e281aa3b2094e0988f23e1ede88a1528492634211f86fe73d4b6085a1a917fe
-RMD160 (NetBSD-6.0/mac68k/INSTALL.html) = 01614436a73df3cae2149a607abb6c59671dcb63
-MD5 (NetBSD-6.0/mac68k/INSTALL.html) = deaafd9baf0d73ad2fe1e731ca8d4391
-SHA1 (NetBSD-6.0/mac68k/INSTALL.more) = 02b0da5241dfb0e94347c45aa2b59230a4c4beaa
-SHA512 (NetBSD-6.0/mac68k/INSTALL.more) = e167052f3a76308dda76a45e7fe93622a3e40fb7905d2bfc3e6438007d5bee8cafa06f9bddf4fabd9801d82bc3de56fbec1892a4977d2b818ece0ee570bc7729
-RMD160 (NetBSD-6.0/mac68k/INSTALL.more) = 1602b574a726ead87163bea4a121dc4d5573c321
-MD5 (NetBSD-6.0/mac68k/INSTALL.more) = ab7ed66c5f64540dc7b9d036048fcfb1
-SHA1 (NetBSD-6.0/mac68k/INSTALL.ps) = 999ea4a94acf0cf256157ba3b447d866b0347bfa
-SHA512 (NetBSD-6.0/mac68k/INSTALL.ps) = dfaf48953a73ed32b722bc95d34a58866ea8ccbf0d9d79e1fd9769634920426826a1e5cc86b94cc2eaf39eb3365bd5977ae0ee4284af484f64bb3e92847567ce
-RMD160 (NetBSD-6.0/mac68k/INSTALL.ps) = 73548f30c2c139ae5e62e98dbc54a4a80d1398c5
-MD5 (NetBSD-6.0/mac68k/INSTALL.ps) = 43662b6328dcc148ea4b6121de934e7b
-SHA1 (NetBSD-6.0/mac68k/INSTALL.txt) = d198c59c8fb2bcb408013794ef3d8cadcb4ad448
-SHA512 (NetBSD-6.0/mac68k/INSTALL.txt) = efb0679da4c0f9b6b8f15f92579ecabb67a4e7451e156430f9a748368bf8815d563d83050c24784c80985d06d0c257d66f91a03c792ad9b65da17e408d2e732b
-RMD160 (NetBSD-6.0/mac68k/INSTALL.txt) = 3ea97712841cab74a13994769fbe4ff66705b6c0
-MD5 (NetBSD-6.0/mac68k/INSTALL.txt) = ed4f38a04160feaf88388c0970e6ed6e
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = ce9bd080acdc497dd570c416befca032a1e8d823
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = 39b5933f7f43c990c2478041d398e9764dce24bfbae9baba2f603fe574448370d9d5cef5e398613fa047648cc0120dc7e878f527bc12751c6a37fe8966cb9d2b
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = d23e372373d18f19b55bc87635bc45f3f730a91d
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.symbols.gz) = c0e545e698824468f2b0acefaf788bea
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.MP.gz) = 0a065a75b49d53c192d1a79e9d216a2d9382d570
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.MP.gz) = dc2a00bcdf70c08d7089b775b3328f1b828c5a5962ec077d95c8ea279586c6b65c48bcde34b9432c4f7a0a7cb4dc6e8f4887ae254038919de8b4f2d2a3d2e3c3
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.MP.gz) = 39e88535fff406327f536ecd319c2b5785898fbf
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.MP.gz) = 3410df9cc4df7b28a292ed3d150808ea
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.gz) = 597f394bd55facd236e90f6aa213a5eef4711f7c
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.gz) = f7cbec6767fd9ce1aa61065ebc360d4aa1d2fcb26c4457f38c409fb5465753b726c8fb37ab0448863efd69c21a8216dea27e8067cd1fa1f74299677985195181
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.gz) = 21e5329fc0c500af9e333fabef527385021bde0a
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC.gz) = 7da219cc304f59d1662eaf7f4dc1833f
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.gz) = e594f013594f13f586f6789005e49f13b9f3467f
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.gz) = bc68d5a6cf29cdc0c9ee8b9ca7610703025621f64a9b427f04b87cf53bf9e14e765785283a0a66aed1a15dd0abbe81e8fc2029c3310b715ef75cacc7eec93283
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.gz) = 7ce6740e080b6f9b5dc8d99c70c779b0486ad916
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-GENERIC_MD.gz) = 3f6f6c37b2c6f7b04c9595245c7224c4
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.symbols.gz) = de3656de1e94d49bb43e6f0b21fc21ee15f2170a
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.symbols.gz) = c90cb34afa99a7ceb8ba3742a0a4b7bd59da93ecb4aca1ff1a540d18d540947446467627e3df717bb880f1b0a567336316bc8a2d59026a7a8f6935eca93984ff
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.symbols.gz) = b617db2dfd9b44f855f06b777f4c69680115ed27
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.symbols.gz) = c90b9ecfb302f54de790366b2e17b625
-SHA1 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.gz) = 661d08043304e74da8232e5d14d1f4f748762510
-SHA512 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.gz) = e4dec9781eea446f078df552033c52e4b8df30231ecbc14131ece1f7312c8a0f98d47b06d9b66988c5c4c2ff45e8dd57e7f2715e165c431b391127f0e5c03565
-RMD160 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.gz) = 99e3fd9681bd7f400de2e2206163d501b6d23d41
-MD5 (NetBSD-6.0/macppc/binary/kernel/netbsd-INSTALL.gz) = 1f1b3e39dcde937788a32ef3a4f65c1b
-SHA1 (NetBSD-6.0/macppc/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/macppc/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/macppc/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/macppc/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/macppc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/macppc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/macppc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/macppc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/macppc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/macppc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/macppc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/macppc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.MP.tgz) = e11a4e1da81be3a4650be198c5f9fe7204991540
-SHA512 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.MP.tgz) = 924fc04dff6c7458196d0a19ec38a9a1114ef3cf5cd557aa68563c3d1d2dee67d9daf3ec72fec95c9bad8862ceb663c1f96cad61965e65c042c2723ffacfe43e
-RMD160 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.MP.tgz) = 585796f103490e30928aca2c4977a41acb990c84
-MD5 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.MP.tgz) = 5b9f58a612ad00b10d4812ce9e325204
-SHA1 (NetBSD-6.0/macppc/binary/sets/base.tgz) = a31efb13ffcb70f4f429ad018d0ca6f9bc9e1db5
-SHA512 (NetBSD-6.0/macppc/binary/sets/base.tgz) = 9746428cdb65b283fa668f63cd33cc2c0bff75e85f4357f460da4d7c0c874bbc0369170d813fa70a1f0933fc2240da6536fa1c2c2be59c6722ab3849d92a3dc0
-RMD160 (NetBSD-6.0/macppc/binary/sets/base.tgz) = c83a80159c7128c8d311c62c15776776dae0fd97
-MD5 (NetBSD-6.0/macppc/binary/sets/base.tgz) = 13ea19ca37828efa708cc77efe1a18f4
-SHA1 (NetBSD-6.0/macppc/binary/sets/comp.tgz) = 2608b27059b55a9d53c2e4fb0f6f3417aafa8293
-SHA512 (NetBSD-6.0/macppc/binary/sets/comp.tgz) = 2f6ec81a049c6c4688fc362a341d11c100ce057760eb5832fceb039ce810abde76d035a3f8e9a23fbb0f4ec3709a8729eba0e92c0f56aed9aed0779588b44bc0
-RMD160 (NetBSD-6.0/macppc/binary/sets/comp.tgz) = 566f37564d448641e6bdcbd70e87c7b9406ee78e
-MD5 (NetBSD-6.0/macppc/binary/sets/comp.tgz) = 0ab55dfc92d16a84368d2f1118b6385d
-SHA1 (NetBSD-6.0/macppc/binary/sets/etc.tgz) = 42a97230bebad52fff9236fe06f3ac0aab27f929
-SHA512 (NetBSD-6.0/macppc/binary/sets/etc.tgz) = b574a57a33d58eebac3a048823fa845d4a403e0503b21340c9cfb05ae9a743a213aa7222530c9e20d30fd90003b56366815ebcb28d085c2d9c998a73972ce602
-RMD160 (NetBSD-6.0/macppc/binary/sets/etc.tgz) = dfbd6641e45fed5e9fa425be5c8878462ff8c6fe
-MD5 (NetBSD-6.0/macppc/binary/sets/etc.tgz) = aa3881b4329b45b318e6d6f0d97ac24a
-SHA1 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.tgz) = 77f4b674c6ef5bf00c6d6173d2498ff7ebbc64f9
-SHA512 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.tgz) = f16e4dcf74059eafc235bbe7d7b59de1071b56ade3f77308bbb646fdd19e90362635125bff5f81ca92e51502c668106067ca6b377a8aec2bff708e589380977a
-RMD160 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.tgz) = 0906acf7e10f69ea769a5a58d0ffe2d1e060ba98
-MD5 (NetBSD-6.0/macppc/binary/sets/kern-GENERIC.tgz) = 50cf40ab93c7505da5fe7c9bd488abd2
-SHA1 (NetBSD-6.0/macppc/binary/sets/modules.tgz) = b2c51fb3ca33a8f70c00f9e7d49cd4b91fb79673
-SHA512 (NetBSD-6.0/macppc/binary/sets/modules.tgz) = 2cfd8f4f53c0561b8ab8aafac2c38363750be6484c21c8d670b7afb89390875893a9b549b2e28d08cdeeb81217f7e0e0fe437e09059871d4b063ffa0057bae97
-RMD160 (NetBSD-6.0/macppc/binary/sets/modules.tgz) = 9fb4d8eb95a719022a522b3e9a970cda1a416f15
-MD5 (NetBSD-6.0/macppc/binary/sets/modules.tgz) = 54914b3291b652b921239631c740dcea
-SHA1 (NetBSD-6.0/macppc/binary/sets/tests.tgz) = f87666428063cf6b980c1d284aab5894e2c3d2b3
-SHA512 (NetBSD-6.0/macppc/binary/sets/tests.tgz) = 94474f3ed0feff6b8c10299c4e190154bf4c6d579dd3edced5de901aec60c9413a921b282bc7ae0c2dd3ec49de8162204660a7fe80393102aa7ebd3318f4124e
-RMD160 (NetBSD-6.0/macppc/binary/sets/tests.tgz) = 7467da9599fb2cb270854e337b696568de24b205
-MD5 (NetBSD-6.0/macppc/binary/sets/tests.tgz) = 165d0d19f6c40d8249ddd46214a68e25
-SHA1 (NetBSD-6.0/macppc/binary/sets/text.tgz) = b3e0e6f977a3598fb6f8a377cf91a67aa21ff74f
-SHA512 (NetBSD-6.0/macppc/binary/sets/text.tgz) = 361c67a072fbfe6055fcf8436f3a84b10d92a0cc987c818a32a9f536466b285d47ef2ba39c8f04319ac0a93e7b2353eed589e6b72c3bd32f38c12aae82ff26ed
-RMD160 (NetBSD-6.0/macppc/binary/sets/text.tgz) = 3d0c5c4e3a84335431a0d6cc9b78315495e137d0
-MD5 (NetBSD-6.0/macppc/binary/sets/text.tgz) = d968d8f10bd69add51020decb7cd01bf
-SHA1 (NetBSD-6.0/macppc/binary/sets/xbase.tgz) = 63043b541de378d777f43d0a333d2112a98a4e8a
-SHA512 (NetBSD-6.0/macppc/binary/sets/xbase.tgz) = 189d8b05121b356d4fa587c46cd4bb50df1ff89a197c983dafed9ce93293ad16e82f77d14ae3ea2c8e9f01f8a5eab4d9841274d9caa7143f4d977d921d3e1a84
-RMD160 (NetBSD-6.0/macppc/binary/sets/xbase.tgz) = 3cccd55a4407632e7d7444a6919901aca686c9cb
-MD5 (NetBSD-6.0/macppc/binary/sets/xbase.tgz) = 1e9175f276efb45934e2e976787ec61b
-SHA1 (NetBSD-6.0/macppc/binary/sets/xcomp.tgz) = 9322a94973bf4e59542a1c3fe2d307f1dee362ff
-SHA512 (NetBSD-6.0/macppc/binary/sets/xcomp.tgz) = ca37cdedb39625b92d2068c8736c2d1bdadd132edbffb4bf6ea3a4b1a21ffcd5bfdd78e5aaad874be32cff4d1b98059e142c5a2192dc1f38ffb7a64e8e180a17
-RMD160 (NetBSD-6.0/macppc/binary/sets/xcomp.tgz) = 48ef59c053d4a964872a70f1350252f98423794b
-MD5 (NetBSD-6.0/macppc/binary/sets/xcomp.tgz) = fc0aa962b13c0e092657bfc3d6368284
-SHA1 (NetBSD-6.0/macppc/binary/sets/xetc.tgz) = 5ace04f9545e5ac27432bddcde0d42dd592540c1
-SHA512 (NetBSD-6.0/macppc/binary/sets/xetc.tgz) = ccdaeb27301167072fc0c98b78633c2d52b1eb4a5bf3ed5c606a646a420c7bd73e197b73d1a928c4aa17013fca5bbbd98f06fc4baa4ca97ada3a3e89490fdc06
-RMD160 (NetBSD-6.0/macppc/binary/sets/xetc.tgz) = 048fd168d184f88b2164c654594e68665dec62c4
-MD5 (NetBSD-6.0/macppc/binary/sets/xetc.tgz) = 1735140072351ccaa55f8b25cd002fd6
-SHA1 (NetBSD-6.0/macppc/binary/sets/xfont.tgz) = 2cea3fa057b220c72ba147f9821d33b18d8346d2
-SHA512 (NetBSD-6.0/macppc/binary/sets/xfont.tgz) = d76f6d6613f96475c85427792ad339576815f1423ae7e84018944d31cb66aa6ec14f2a8886f0912963745293326812a7efb8b1d2f08a6ee27da8fbf53c3223d7
-RMD160 (NetBSD-6.0/macppc/binary/sets/xfont.tgz) = 42190ebf50a1db179d8d7b1bdd1aa3e86082ac77
-MD5 (NetBSD-6.0/macppc/binary/sets/xfont.tgz) = 752888a1280d52af5e6b3c79287738e4
-SHA1 (NetBSD-6.0/macppc/binary/sets/xserver.tgz) = 4c9ca17aec65f27a569ee9e6ed4af95ad3b9cd21
-SHA512 (NetBSD-6.0/macppc/binary/sets/xserver.tgz) = 208d60880438a476ecacab3a4ab5872007c2728cafe16022cee9c0d781ce4dd8ef95d302ac9212a1a66b825869dc35c8df096d9f7c97a97054cf963ba58418fa
-RMD160 (NetBSD-6.0/macppc/binary/sets/xserver.tgz) = f0bd1020d51ed7036593840c49bfaee57e09e58c
-MD5 (NetBSD-6.0/macppc/binary/sets/xserver.tgz) = c241cf0caa30e6ae203fef4c95d2d74d
-SHA1 (NetBSD-6.0/macppc/installation/floppy/boot1.fs) = 053808f21cbc6acc50469ffa2a6c48471bfbf8fe
-SHA512 (NetBSD-6.0/macppc/installation/floppy/boot1.fs) = 82f844d8ee09d09a5cb06ad8cf8131826ad9e8c38a289e95757d6b9664b0aff4e30743ba750dd7ea780d556b4aa619388fbbef8727c52b302e314b08a6853306
-RMD160 (NetBSD-6.0/macppc/installation/floppy/boot1.fs) = 291a7e7bd8b98758f2dce412054abbb69c6cf4cb
-MD5 (NetBSD-6.0/macppc/installation/floppy/boot1.fs) = 369cf1bf5a69c9220d3ab6213c0a10d1
-SHA1 (NetBSD-6.0/macppc/installation/floppy/boot2.fs) = 46098cec194fe5de4ffc1b66508397916cabd968
-SHA512 (NetBSD-6.0/macppc/installation/floppy/boot2.fs) = 25ed41f6712ae333101fb168cdafbdb4c4dc677e4a0c701665d02758202af2238a2a53828e833b0917ac0547ea34a1a1c95f8b9018084ff9053bbba985814b91
-RMD160 (NetBSD-6.0/macppc/installation/floppy/boot2.fs) = 9e743d123b1f43953743e347218ad29f022822be
-MD5 (NetBSD-6.0/macppc/installation/floppy/boot2.fs) = 05843ccdeb93f326ddad69e810303fe5
-SHA1 (NetBSD-6.0/macppc/installation/ofwboot.elf) = a013bc2f2d4d39cf9e56b0d625b6c48d08bb455d
-SHA512 (NetBSD-6.0/macppc/installation/ofwboot.elf) = d28569738cfad70b6d5aef80b32e9d44f38dc5038f38143bf93f78eba708ff05e9a7955c03a682833ace2cd20daf4adb1a3c36956768e5f2b08fb59a44573854
-RMD160 (NetBSD-6.0/macppc/installation/ofwboot.elf) = 9a9f54b00b80d91a934e83cb17a68b15a9fe8c00
-MD5 (NetBSD-6.0/macppc/installation/ofwboot.elf) = 2d4598a059853f8f7e99541afcf6e31e
-SHA1 (NetBSD-6.0/macppc/installation/ofwboot.xcf) = a15eef375d155080b6809e2db46d0475baebd872
-SHA512 (NetBSD-6.0/macppc/installation/ofwboot.xcf) = 4756b6eeb05754185c16ff02e9d98642ae75c3545b385a67870e58b8211feda3ce265eaf020ca5252e9c47fab64922d9af8eead98b2cff798c58af9840fbd345
-RMD160 (NetBSD-6.0/macppc/installation/ofwboot.xcf) = 1654bc8a15f5d3c2bb248033cbfbc37ca23980a7
-MD5 (NetBSD-6.0/macppc/installation/ofwboot.xcf) = 84cc2385de486f3e72868ab7c75c8683
-SHA1 (NetBSD-6.0/macppc/INSTALL.html) = 9752ce3a0ae1964208f027404c5aa3b526efe08c
-SHA512 (NetBSD-6.0/macppc/INSTALL.html) = 71dbe4d992bcea022b1aac0dbdc3cf596a7538bf3fd2de390925094bfaa5cb1f71e332a2eb419cdfa1528cb7951c92491b3b3d7b88cd9e4c40f81af0a8ea34b2
-RMD160 (NetBSD-6.0/macppc/INSTALL.html) = b5e2c12fbcf7fcf56e6e9354b178188c88e772b2
-MD5 (NetBSD-6.0/macppc/INSTALL.html) = 31c92f0b3c87409d1d74b17912f05333
-SHA1 (NetBSD-6.0/macppc/INSTALL.more) = 7b4f4aa288bbbacca5a7f69f7fb1dde30b6a67e4
-SHA512 (NetBSD-6.0/macppc/INSTALL.more) = 7ab24e82eb0b779f11e16b10982fb82d6831058b0a51b57c2abbb0c91f09daa92a7a724c18f775d551b6bc4b8bff36eb91b6a823d2f9810a478180c50f9c676e
-RMD160 (NetBSD-6.0/macppc/INSTALL.more) = 7bc31a39cfc1017821c29032432a8765af7b240c
-MD5 (NetBSD-6.0/macppc/INSTALL.more) = 0a198a6d31ac02b702c103117400eafb
-SHA1 (NetBSD-6.0/macppc/INSTALL.ps) = 9a14912c8a58fc4e6d004dc2426c189b991d5e6a
-SHA512 (NetBSD-6.0/macppc/INSTALL.ps) = 94ffb000d582ea09c0f3d4e0b6e757f0bbbe50e6793d33e3e3ec29a0da26a0130f23c778e19e681892ceab4f440dc01d37b206272d24aa96c9ef3a9a6c49ed0e
-RMD160 (NetBSD-6.0/macppc/INSTALL.ps) = edde76230d345a53de93bb00af333be03971d0dc
-MD5 (NetBSD-6.0/macppc/INSTALL.ps) = f275f19c885be2a1ca922cff1561b5c8
-SHA1 (NetBSD-6.0/macppc/INSTALL.txt) = e7e55b4231206d5fc087d6ad0c4b8ef52a73e385
-SHA512 (NetBSD-6.0/macppc/INSTALL.txt) = 51f4462c903b0948ca5634bf27a9988924cfc3a8249310f1c5f2fc3c8372e9ab916cf106fa7bd9153ccc44454a1fc298024214575f43bf938a7e8a8a18163038
-RMD160 (NetBSD-6.0/macppc/INSTALL.txt) = 8213d05b6c035c0932159f098633921ab6d79247
-MD5 (NetBSD-6.0/macppc/INSTALL.txt) = 319bfbce37725d2bbafa032c7891529a
-SHA1 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.ecoff.gz) = c7357a28d27e6ba6fd9a1ca72b7f0d0d95c23089
-SHA512 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.ecoff.gz) = 3a0fbe1a79b886094cbb8a3613d3193d2731dbace050847c6d70ee8961b4d0e0dbf2f5d666e5f6c43e5ee2871ef9c59823b5fcadbf2dba16144f8c13e778c821
-RMD160 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.ecoff.gz) = 12b0c1cda3875379f2cd582b5eac8316d9fec2f4
-MD5 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.ecoff.gz) = c24f3d6e9a289d321c0ee250817cd348
-SHA1 (NetBSD-6.0/mipsco/binary/kernel/netbsd-GENERIC.gz) = 188a82d7aab86e27f7defbd0318c12deb06a5200
-SHA512 (NetBSD-6.0/mipsco/binary/kernel/netbsd-GENERIC.gz) = e6c278b3bc3e93137e2a0ccd894420671dc3d8f880b08aa673e51b758d88667fd416b317b90e1eaa72087a8b97322ce629f538f7daf2bc7746f0209d00e3d2f4
-RMD160 (NetBSD-6.0/mipsco/binary/kernel/netbsd-GENERIC.gz) = 19b32d196282fccad2907b3972d0bd8673b0b63b
-MD5 (NetBSD-6.0/mipsco/binary/kernel/netbsd-GENERIC.gz) = d91b37f1b364bf92609c4cd56e738873
-SHA1 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.symbols.gz) = cfae9b61b6577966f0bf0f99e4592ce788f2e047
-SHA512 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.symbols.gz) = e100ef50b40411ee3886ec6b0a77ac45459c4a50b1f5b6fee1961aecbef6ee4fcc5a4a1a215eeaefcf5a47407a3d907848e09fa0299be61acb7a93da813da77f
-RMD160 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.symbols.gz) = 1e65145861489b78275308a994aca38a4e60e3d6
-MD5 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.symbols.gz) = 5a441172f0a1659f405e7db91dcbdbc9
-SHA1 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.gz) = 517897ab45650448a730ae2d9df177e3858c7ecf
-SHA512 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.gz) = c8f2a2b0e243000b5c6a134b1c822e40cd454230039ed39a147320e049a8c4b8f540ba32613a1a189455d2f14f56b2291549b3cc40a16c65baf451e5e6005874
-RMD160 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.gz) = 7a428cf2e424233910e6941975b984f54639d581
-MD5 (NetBSD-6.0/mipsco/binary/kernel/netbsd-INSTALL.gz) = 989821fb043e7208eb7464b9cc3d6faf
-SHA1 (NetBSD-6.0/mipsco/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/mipsco/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/mipsco/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/mipsco/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/mipsco/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mipsco/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mipsco/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mipsco/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mipsco/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mipsco/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mipsco/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mipsco/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xbase.tgz) = d81c7fe75a90f1b2111a066e78f1f2b3e8edcd8c
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xbase.tgz) = c241391fcde4a685a0a2af6f843844ac2e918024c447a2b5ea2cf5300f69acc42fdadf53d3b0348f10723b786bcc0f420e68fe36228375bf3cb5140de41eb40f
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xbase.tgz) = 2fbf60b64c0b7ac2be72ebf998d9d7390fc40705
-MD5 (NetBSD-6.0/mipsco/binary/sets/xbase.tgz) = cd23ca0f6b359c4d695d4494a147d40f
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xcomp.tgz) = c8f5ff5ea9f9bbe231f92d8b7f3bfcbd2897069f
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xcomp.tgz) = c7590075195019078b68ec5f87e36479ae2e7b7749c523df4ef21c9d881c343cda9f5c2bba897dd313329a76fe5c18e920d92827878d98ce08a7dc776352cd02
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xcomp.tgz) = bc60e267cb6e11b4a7305f8b7074084e179e0ff5
-MD5 (NetBSD-6.0/mipsco/binary/sets/xcomp.tgz) = 8e58ee51667def3bd015f79769c0d932
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xfont.tgz) = c551bd13179b9508c2e3a7e19cec323e8ba21844
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xfont.tgz) = 764527f2f3f4686759fcae3fd093f4e00f34e1249994126221a6f9afe73d4cf8ddfbe8b8311798da2ed38c52466a44bb26ea08ad5aab1c08eebcc9019b4223f7
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xfont.tgz) = b3a365bedf8b4a20f3920d0e33b9a42fce288953
-MD5 (NetBSD-6.0/mipsco/binary/sets/xfont.tgz) = adac8939da213a0195cc1d351f979199
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xserver.tgz) = 686f6e6d722c9676351ab058736f7077b4ebd2f6
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xserver.tgz) = 5c818f22edbeac7325228af99d6da6e44b5eb659c7c9fcc6b332071e97a0a490081eda7f9e0f22d6a3f3a589ae34179b434751a6191db5c664683d7510aecedc
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xserver.tgz) = 0e9f066095b505c7f062bf877147189a7a2f0649
-MD5 (NetBSD-6.0/mipsco/binary/sets/xserver.tgz) = cdd2e5127838437df40af161e0c8398f
-SHA1 (NetBSD-6.0/mipsco/binary/sets/kern-GENERIC.tgz) = 814522219e9ef7544ff09e8a1aeec2544e62e456
-SHA512 (NetBSD-6.0/mipsco/binary/sets/kern-GENERIC.tgz) = 2e81957dd87b68e9f3b69b89d1eaf2f1cea45ea237558bc50e953d1d4987e86bd1fd7701f00971b252df35c8dfa8c006b1777c5941ee4385894680346aa3f286
-RMD160 (NetBSD-6.0/mipsco/binary/sets/kern-GENERIC.tgz) = 00a21ba72b46c7d743c2255d02a5fe462ac90774
-MD5 (NetBSD-6.0/mipsco/binary/sets/kern-GENERIC.tgz) = 85c821c524ccbfede1d34c6436de595e
-SHA1 (NetBSD-6.0/mipsco/binary/sets/base.tgz) = 1a989a4f1f5bd6aa082d2af9c9e339530994e710
-SHA512 (NetBSD-6.0/mipsco/binary/sets/base.tgz) = 0b0029d19eba066306c386aa7569a5af8ce9e2d4e12f73539cceabb3bf3eb9696f006b0fefda001cef488fe4db40a3b519928fa139fd025c8e95669a2b7fddec
-RMD160 (NetBSD-6.0/mipsco/binary/sets/base.tgz) = 30de7c1cda91944523275d184e5629beb3be54f8
-MD5 (NetBSD-6.0/mipsco/binary/sets/base.tgz) = dbf30b2affc7c471b1488c36fab8c383
-SHA1 (NetBSD-6.0/mipsco/binary/sets/comp.tgz) = eae1cdcf3ca993f6903f7c0315b3bded0cb19954
-SHA512 (NetBSD-6.0/mipsco/binary/sets/comp.tgz) = a777f285e5b72c5cd21eae29dc374956a80b738acd11f13d536513cb30a31273043c8c73554e4d227df99d4ef7d20f15bcc8fafc1af1c16718dbe6276c28f5b9
-RMD160 (NetBSD-6.0/mipsco/binary/sets/comp.tgz) = c4dcbd1a3ddec8bf1dddd2ec18d6d9de13dddcb8
-MD5 (NetBSD-6.0/mipsco/binary/sets/comp.tgz) = 2df422a2c23ad3357f41a02d305ca753
-SHA1 (NetBSD-6.0/mipsco/binary/sets/etc.tgz) = 4035cdd82aad7dd4b19ce7b4f18f93de45b4a35a
-SHA512 (NetBSD-6.0/mipsco/binary/sets/etc.tgz) = 8df26b3954bda34cd79ee7036056c166654d36d642c7abddd10caafb0f6692bd745a1f336047de01dcefc32060712559b82ea4381dbb1c3d90eb962a798e9ed0
-RMD160 (NetBSD-6.0/mipsco/binary/sets/etc.tgz) = cb67e9de5fb8560ab973dd6dd877f856582c0538
-MD5 (NetBSD-6.0/mipsco/binary/sets/etc.tgz) = 7cc0cebd7f9c62e5e2cd7fe61e041a2a
-SHA1 (NetBSD-6.0/mipsco/binary/sets/modules.tgz) = 17b0db51acea9fb430bf4f9ee65a3d10b7e01747
-SHA512 (NetBSD-6.0/mipsco/binary/sets/modules.tgz) = 4b60e6a7405c8cdda48f8c85723b4245f3af0f31c333090bc3833f203606d91cdf067a02a9a179956642b368d4f78d1da53cb48bb783a0abf24ac5a1c56681cd
-RMD160 (NetBSD-6.0/mipsco/binary/sets/modules.tgz) = 34019b1b1080db5d84607337765c6fb19c103651
-MD5 (NetBSD-6.0/mipsco/binary/sets/modules.tgz) = f53620978a24bc909f9555125ddc6416
-SHA1 (NetBSD-6.0/mipsco/binary/sets/tests.tgz) = 528b2898dfd85f9c51f382d31f357ff470fccbed
-SHA512 (NetBSD-6.0/mipsco/binary/sets/tests.tgz) = fb52dddb334a13e19dfd657aa165a2be4c9ed546e739d337141735927c74ed444c63a2ccfc7676ddc7301ade3bd9b713ac238a3cc37b8716705222856f26edde
-RMD160 (NetBSD-6.0/mipsco/binary/sets/tests.tgz) = 4bf30f676d0c7cdb6838ea7807c505de82372884
-MD5 (NetBSD-6.0/mipsco/binary/sets/tests.tgz) = a150e930291903d9751319a92ad116be
-SHA1 (NetBSD-6.0/mipsco/binary/sets/text.tgz) = 01174401e42d87684ed569f3001994142451fe29
-SHA512 (NetBSD-6.0/mipsco/binary/sets/text.tgz) = 8f2c57883df809889d5371730ff738429f147eb659895ef3bd25c23a1c78ed3baacee1e09d82630daa92b9dc5810167924537cdcb1234536acbc02269acbfd2f
-RMD160 (NetBSD-6.0/mipsco/binary/sets/text.tgz) = 690f4481c50ab0bcd2a2773e762f250b60a7d088
-MD5 (NetBSD-6.0/mipsco/binary/sets/text.tgz) = 0bb0dfa52358016da848c0783a4e9ccd
-SHA1 (NetBSD-6.0/mipsco/binary/sets/xetc.tgz) = 1824720386f5e1fca6135a77aad15444221ffd3f
-SHA512 (NetBSD-6.0/mipsco/binary/sets/xetc.tgz) = 1f752393b0913fa39f222eb8cff44c9c4b8045008459e2c2122748114a5c69c684153aed737aabceb9fde1cb4852527d6f4375be177b6f8e270aaef9a3360ab7
-RMD160 (NetBSD-6.0/mipsco/binary/sets/xetc.tgz) = 346eb417698387537bd483d12d70796c968c970a
-MD5 (NetBSD-6.0/mipsco/binary/sets/xetc.tgz) = d9822dfdedccbf5fbd3bf6ab9b178186
-SHA1 (NetBSD-6.0/mipsco/installation/diskimage/diskimage.gz) = 7f3836f8a683b1bc03880af9a5440ce0c43d45be
-SHA512 (NetBSD-6.0/mipsco/installation/diskimage/diskimage.gz) = 1c513851002df0e3d6d11e33b5b62df96547e75c300c22737be8f553613404d94dbddf036cb2a00707b8d23b00a14ab3b37fd2251fa0f04b05ab35fd13c241a8
-RMD160 (NetBSD-6.0/mipsco/installation/diskimage/diskimage.gz) = 8b22ef52868c3da50f224a8663683a990816d87e
-MD5 (NetBSD-6.0/mipsco/installation/diskimage/diskimage.gz) = 0264b27319b43fd4e9c8c74e0478dac4
-SHA1 (NetBSD-6.0/mipsco/installation/netboot/diskimage.tgz) = 62ce9d94cbc2d187ef03f9c4c22f0d865c482500
-SHA512 (NetBSD-6.0/mipsco/installation/netboot/diskimage.tgz) = 4b53601368b9a70e6391efab32547a038c5b05b39ac73c1677f8b1317ca0d0458d1178218aa5457d8e0d8545a1f2a20e65e200c3e8d8b04e395d11886e30c22c
-RMD160 (NetBSD-6.0/mipsco/installation/netboot/diskimage.tgz) = 8da2d5476ab14c8f44c732fc07202a234d5b4abc
-MD5 (NetBSD-6.0/mipsco/installation/netboot/diskimage.tgz) = b83ebc427977f9b30679b06765d6babe
-SHA1 (NetBSD-6.0/mmeye/binary/kernel/netbsd-GENERIC.gz) = 93157fd963d5e5967b626593297490082c21b426
-SHA512 (NetBSD-6.0/mmeye/binary/kernel/netbsd-GENERIC.gz) = 300868a582f1eaa960d0d211374ca563a7a5f8347239b178a368ad3c527ee8ef76ca54628fbacc01521903cda04309b666953e1136d1f1fa8ddd28a046d1182c
-RMD160 (NetBSD-6.0/mmeye/binary/kernel/netbsd-GENERIC.gz) = 7da72149fd4cbd471bf3abf076a4f33c8dc0a3a5
-MD5 (NetBSD-6.0/mmeye/binary/kernel/netbsd-GENERIC.gz) = 053862a7ced67c229e688793b99d2fa1
-SHA1 (NetBSD-6.0/mmeye/binary/sets/games.tgz) = 37e15b0950aaaf1af36427ae5dd5866c1879b6b3
-SHA512 (NetBSD-6.0/mmeye/binary/sets/games.tgz) = e674abb1b1966acbc581a8f8b3e37841f48656e66f3302077cbb2de443487912b99521336ec5dc096fa3c7769b2d7623e1d1720a079407ec1861d32159a72ebc
-RMD160 (NetBSD-6.0/mmeye/binary/sets/games.tgz) = 36070071e8315d2352be1b3e563ce7ef7625d184
-MD5 (NetBSD-6.0/mmeye/binary/sets/games.tgz) = 0016145b46957b95dd158b4441dfb010
-SHA1 (NetBSD-6.0/mmeye/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mmeye/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mmeye/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mmeye/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mmeye/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mmeye/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mmeye/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mmeye/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xbase.tgz) = 564bce6dd7c37b5e941e41d50f363c133fdf8f97
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xbase.tgz) = 23b3306254c789331542e63974f9d7cdc54d99ba2cd67cf6a1c97f09afa4f6cf6aa8798e37b7c38f4a55afd1572154f291fa1bf2e2a1fc87165fd6bd7f89fb80
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xbase.tgz) = 476fbd8301bec0795a01552728ada44204d2dbe6
-MD5 (NetBSD-6.0/mmeye/binary/sets/xbase.tgz) = 9fbbbdb3acfa4ccd9f0b309ea0ed0700
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xcomp.tgz) = 526a278a13833073e6231e879abdec85400ca888
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xcomp.tgz) = d2081a7536e3d7fa27a363afd8f6eb5fc3de4606f11b4857be2f1df59934da9d3d16e0df3a6edf4cdf52c8f579e0e4c06f07de0959b5213c21be1a8fdc2ee134
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xcomp.tgz) = 4a767ff08e9bcf98f886849cabebd1300397256f
-MD5 (NetBSD-6.0/mmeye/binary/sets/xcomp.tgz) = a23a2d8be9298497b4b6d39fda330bf4
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xetc.tgz) = 93a5cfbbfdc641f91ab363d4b65d1158d71c0cfc
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xetc.tgz) = 85a67734801e81e129a37b73ae62211459fb16d4e52a945ef21a4bb908dd7d1d775233956086dd3d59af45bcea24fbd6f54a2a9175756d242b57e07d10767548
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xetc.tgz) = 6fb055d0e1b6264bf1ec396236d903218832377a
-MD5 (NetBSD-6.0/mmeye/binary/sets/xetc.tgz) = af954b56e624948145b91aa451d77392
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xfont.tgz) = 6139c05273b6feeecdfcd11cbe0da91256d12a11
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xfont.tgz) = bb849454ede88d39ca60d6c513c833c2b29ea548adedb9f76870839174a3daa838d38a6ad701c78bfc164e690c5ebda9c9d00d4c23ad816df9f1962313afdbf2
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xfont.tgz) = ea8f123f9f78b429b77ff15c924803da1da2068d
-MD5 (NetBSD-6.0/mmeye/binary/sets/xfont.tgz) = a87cb6769c37ae20dbf0dd70cef93d11
-SHA1 (NetBSD-6.0/mmeye/binary/sets/xserver.tgz) = 6cd4fdb0ff00ef5d89b47e68e538c86e395b2054
-SHA512 (NetBSD-6.0/mmeye/binary/sets/xserver.tgz) = e3b575cab95e297a05a26a03eeff0cf843d665ebdfd103846ad544bef1d04f93aa20ceab09b1dfaae8f59d89ebb1cbef400b7521bdb41f7542f23156540aa4c0
-RMD160 (NetBSD-6.0/mmeye/binary/sets/xserver.tgz) = 7e52b98276b4d097f7babe918e6768ae9d7945db
-MD5 (NetBSD-6.0/mmeye/binary/sets/xserver.tgz) = a505ab4ce0801aabe21fe6038b63809f
-SHA1 (NetBSD-6.0/mmeye/binary/sets/kern-GENERIC.tgz) = e14c11631e2e88e3b57b7d20fc3c645faf18fe37
-SHA512 (NetBSD-6.0/mmeye/binary/sets/kern-GENERIC.tgz) = 29dfa7b68e616b6192620316e85972381e7c104070f2570a4222b22c738eddeebd3d8a49518f64adada548f3cbc31a2c501db6f186d7c2fb4178cd9187d7e289
-RMD160 (NetBSD-6.0/mmeye/binary/sets/kern-GENERIC.tgz) = b4289ab1966d34a7fc19d6736c374e98c969f2f0
-MD5 (NetBSD-6.0/mmeye/binary/sets/kern-GENERIC.tgz) = 6469d2d171a8a4bb99ec9a396d43c4b1
-SHA1 (NetBSD-6.0/mmeye/binary/sets/base.tgz) = f26be3019cb31f22bea52c431ec65026536117d8
-SHA512 (NetBSD-6.0/mmeye/binary/sets/base.tgz) = d595fa01b6176f11dd722a4c0416e83975fabb7669cfb018b364681a82c1fab6d456e35aee5c1e8f62d721708976da1ddea203ba31c782265d95dadc046080b8
-RMD160 (NetBSD-6.0/mmeye/binary/sets/base.tgz) = d08e45a281fa538ba47d5e01b7ca7d2c34d05847
-MD5 (NetBSD-6.0/mmeye/binary/sets/base.tgz) = 3a7f10d4e415aeeab19f10c6cd9683e6
-SHA1 (NetBSD-6.0/mmeye/binary/sets/comp.tgz) = 0e37635ed1c12873ba9443f765fa8ecd7441aa43
-SHA512 (NetBSD-6.0/mmeye/binary/sets/comp.tgz) = 2528bf14ced0b15c49452d705cb60cf9e33187fc759920e4e400fc7a2cbb140efb4e46a135a3c06b7c8b4ae9a2b06094e4f14b32372d3b744d0d898818ac0e4a
-RMD160 (NetBSD-6.0/mmeye/binary/sets/comp.tgz) = 51bee8a0d676f8f51918b76a816ddd417cc38a6b
-MD5 (NetBSD-6.0/mmeye/binary/sets/comp.tgz) = cb209fc3bf35ff197cec755c15879f27
-SHA1 (NetBSD-6.0/mmeye/binary/sets/etc.tgz) = 574390c9066c5a2867c217726a60c5b0fcd954c6
-SHA512 (NetBSD-6.0/mmeye/binary/sets/etc.tgz) = 29f0fdf264263ddca8a04e2a645999127bac3025daf2ee560647f4d15fbaec3d929c725256244fa561ee69d8eddf4c9439d81629894dcccba13d063ec1a0d70f
-RMD160 (NetBSD-6.0/mmeye/binary/sets/etc.tgz) = 5e68a1f6a88a56e63788525987bcbef81314cfd0
-MD5 (NetBSD-6.0/mmeye/binary/sets/etc.tgz) = bb1639782d6f4027a7b872732e0f819c
-SHA1 (NetBSD-6.0/mmeye/binary/sets/modules.tgz) = d687589906a811d0ecf22c89bf54248326aa0bef
-SHA512 (NetBSD-6.0/mmeye/binary/sets/modules.tgz) = fd536f114ba71d1ed7241a81f89af7d26a8b554b6fa12ccb16d2d4e6e23029be66fbf4d2cb4990c65102bf3206972ca00a329c6a6c8cb86ad283356aa38434bc
-RMD160 (NetBSD-6.0/mmeye/binary/sets/modules.tgz) = c2bde6622408d084a8ed7fbeafce2260220c5560
-MD5 (NetBSD-6.0/mmeye/binary/sets/modules.tgz) = d833b7a1b95c96a2fb4c526ddc7b6a62
-SHA1 (NetBSD-6.0/mmeye/binary/sets/tests.tgz) = 28c07cc4ab9c6688c615ecfae68cdd7afeaf627b
-SHA512 (NetBSD-6.0/mmeye/binary/sets/tests.tgz) = bdf6463ad028eef4bfb3feb78d43924c4c176b8195509d25d1f98cc772cd1d4edf1820497dfb1baee7dcc142d0e64e78d3203feab0636fe4d821a4cd64250459
-RMD160 (NetBSD-6.0/mmeye/binary/sets/tests.tgz) = f10cf5b11bb96eb0be1c08f698897cb2c609c2f8
-MD5 (NetBSD-6.0/mmeye/binary/sets/tests.tgz) = a0f6fcd15874d6439da5f852487e3539
-SHA1 (NetBSD-6.0/mmeye/binary/sets/text.tgz) = 59d1600b40b17a4c0459e6b3e0a0c2cff1194270
-SHA512 (NetBSD-6.0/mmeye/binary/sets/text.tgz) = 0c44d1c586ad834e2ecca5bf57e88d3315e19341deefb36e8f9584d22328fa255d9e7c26028091e8e0465aea5e68ead7fe343138f54cd219c69eaeb7facdf85f
-RMD160 (NetBSD-6.0/mmeye/binary/sets/text.tgz) = 258e107b924fc698dd9ac2933f4b040374cc9291
-MD5 (NetBSD-6.0/mmeye/binary/sets/text.tgz) = 241e3f6acd2a44f23f1368c4897ea43a
-SHA1 (NetBSD-6.0/mmeye/INSTALL.html) = 307db90e852c93274d4d475013aa29db682ad785
-SHA512 (NetBSD-6.0/mmeye/INSTALL.html) = 6a10441885d95313036134e897f41508c5823386532d4e57e33d693164d8a6a727f39aad44e3606b614cd037eed7096a2c88962b495f1915dd9db0f1165897dc
-RMD160 (NetBSD-6.0/mmeye/INSTALL.html) = efd26420ebc8e2bbca8e756d05a8978b3c8f6a21
-MD5 (NetBSD-6.0/mmeye/INSTALL.html) = 4074818595561d15e823f3fcf0e319ab
-SHA1 (NetBSD-6.0/mmeye/INSTALL.more) = 508b142e63e52558c975e9b9e8d3ddd5f392f47a
-SHA512 (NetBSD-6.0/mmeye/INSTALL.more) = da8142dcec08c7c1dd64b680e987abed58c6d8685c93c66fc4b1218f18cb64c626949d841b5ee379a09a0b8d1ae8af12a2690d8dbc4f768497f1c3e8e646f377
-RMD160 (NetBSD-6.0/mmeye/INSTALL.more) = 58a81c1cc83e5033ab3a527190e7ee1fae534d76
-MD5 (NetBSD-6.0/mmeye/INSTALL.more) = 248b67d9ac8e481bdfd7952cef78a14e
-SHA1 (NetBSD-6.0/mmeye/INSTALL.ps) = 4bf1609d1513b6e41cfc5cb480dee72432e5a416
-SHA512 (NetBSD-6.0/mmeye/INSTALL.ps) = 691a138a6af72a7e42cc03c71d6bcde5c210ec570507ee25333e1ef9702aa689be0c7d46009aea72dc1dbca93c52a46f1745c1dc985725fa5e63922c4f5927e2
-RMD160 (NetBSD-6.0/mmeye/INSTALL.ps) = 4387c8bab777418797ccf13a05abc4a085b28fab
-MD5 (NetBSD-6.0/mmeye/INSTALL.ps) = 98a48fdc04e24e9d6976363721d644aa
-SHA1 (NetBSD-6.0/mmeye/INSTALL.txt) = 75f5b090195d57c0542212c1b5eed5e5ccd3297e
-SHA512 (NetBSD-6.0/mmeye/INSTALL.txt) = 7c1310578154afee26aa66db4198dc5ba98b9f985f05c9e6a3847fe88e947e1161d541527dd1986ff3ca20ad92468483a2195013ccb8d16e89914006f1d0b566
-RMD160 (NetBSD-6.0/mmeye/INSTALL.txt) = e05dd82511b132d9047eddeee16043524246867b
-MD5 (NetBSD-6.0/mmeye/INSTALL.txt) = e3de50b8b8480113536fa86b62245902
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-GENERIC.gz) = a13aee658df1b52a7aaf3029d425e922ec26d4c1
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-GENERIC.gz) = 218d038a60dc542188f10c56e096434ebd26acddb4919ceb7ef4263ee85a3d25c60e9265683298fccfdcdb6b7d155138428f5029d37c11455d8f49077e0753cc
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-GENERIC.gz) = 5963381f5dff4d47bd58e488fdead7f9e4886d26
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-GENERIC.gz) = 86d45589986fb0bb05dc8c7dc77278a1
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME147.gz) = ea20eed9edbc71eca530c3280770e6f8b09fa270
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME147.gz) = 75a7255373b228b1932477a121111add15fa0ec8b03594794c6b6e3c45055f7ca2be29923b263ffab7ab51b3c9bebc9d8280ea701916b76f581dcc18bb510584
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME147.gz) = ea31d6a830019327b2c3435afdfd947d8464ef23
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME147.gz) = 15c5a42f970736283e7a6a0849bd86d4
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME162.gz) = 041755caacc323b08d0d4bc7d7d50fb178374f24
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME162.gz) = 0f9165f9574da412d25c74601c42f6678b78ae78c04b0eb0753dce9266289fb656071115c32425e79dbb88df2482971d3808095228ce56fa7124ba34a396b0d2
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME162.gz) = d93f72e9bf72b15a7f740977f51270620e17afe6
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME162.gz) = 0c35781afea5d9df108ffe2ff82563f9
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME167.gz) = 4ede6bb44a66a1ca0582e2bd6b38d94dc66e5c22
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME167.gz) = 33feb4ceaa5352e85ed445bb355d997181f69cfe2b08de57a631be7c93c85cb1f42d052bd6de489f6ac631c88c77192785d170e41c0ec6315b88fd429d88f3bf
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME167.gz) = 6768bab2219da0e3ef78324a701e0fb112c18153
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME167.gz) = 6e65873511ff8bb90d721f0c2e559bf4
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME172.gz) = 01ee771c809080dce253e2acbce1bcdfdd46b055
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME172.gz) = 65e0680d9ce92aed2ba08971a434f2a290ccf9f85ce3365327ec8185c5d57e1bdf08593c5ff18e3c0e6581c78ceadd570d25fb1e714edd7896fca09fae727695
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME172.gz) = 93136f2a9773f5e243622e756ea3969c3732403d
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME172.gz) = 08a73d99398505743b3de4f5394ffdd7
-SHA1 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME177.gz) = e884157c76ca076bd53f3c1752b4f95ade2eacea
-SHA512 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME177.gz) = 13a0a7e5c50848593ccbf5876cf27988b138582fff9d4f140cc3b63b9d768163ddea65752fd0676614ccbb85f64d0efdd3611ff2fce31837afb9acebcdb63657
-RMD160 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME177.gz) = 898154c89255fca36e0ec7051638b32cfb541dfd
-MD5 (NetBSD-6.0/mvme68k/binary/kernel/netbsd-VME177.gz) = 77d2383aa5faff6ecc139af1e7dc51fa
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/mvme68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mvme68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mvme68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-GENERIC.tgz) = b5f282108361e17368d9ca8615f3021473169abf
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-GENERIC.tgz) = 165bec66d47652cb43981780aa068960efd933f9538145f363a559d8cc58d16d78ae5d588d98bb39795cdde762f280b36750211da2ed3a5298b0d94edf2e0bb5
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-GENERIC.tgz) = 1ad2613634bf8c7654f87c4a54c9d3e6c0b1f349
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-GENERIC.tgz) = b4b8eee7f4f1854f8632928b5ee516de
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/base.tgz) = c3e2ce1f54481094d67ff2a87a6b5000d8130ad2
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/base.tgz) = 02c29cbe0171a6c5312fb1a468e68bb8a5a5258df936c0a31fccb7bc04c8e1293d41ce6f67de08ca5584c6208dd9050c70f99c1c3b8c35a499bf94a957808797
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/base.tgz) = 7920bf359b28e793c0410ce08a98025dd3ea6971
-MD5 (NetBSD-6.0/mvme68k/binary/sets/base.tgz) = c9893e324841703eed47b475c2d37607
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/comp.tgz) = 100d0663bb2c601df55d490315c9b36b7ea700f3
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/comp.tgz) = 70bf8fc817821c6c5061776bac0ee9ebf8567fd19a2d98c751d1073a706290eb9870627b2f1fea650d19a876e8a5215e5e52407437d6be977777013f5f59fa8a
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/comp.tgz) = 497fb5a993abc08f005e1f287b8520dbace84549
-MD5 (NetBSD-6.0/mvme68k/binary/sets/comp.tgz) = 24cf494b20e22c8630e6bbba17b96bc1
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/etc.tgz) = c6f1d70ad7bf234c79f4e15508b09c7b0c33f1d8
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/etc.tgz) = 13a8204695757c27b69ed52a02c55a1e2b2d6140a5dfffd8f9f24625a56c9f3bd1f5de868a99c265e5fc759cb80cb7239dbe965c44693fcce6e98e7691076d36
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/etc.tgz) = 7365dfc472b89a3b017cdcf41bf10f928dcf723e
-MD5 (NetBSD-6.0/mvme68k/binary/sets/etc.tgz) = 1e8812db12c38683ce12950d00ded70a
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME147.tgz) = 96374aa39856e13589e98f1552dd756b4f1911e9
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME147.tgz) = f31cc707ced4c96b2019d7d44169e203f6df2616d09e7a3f4e2a4f0e4c509e978ba324761bdd26d1ee443e4d72e90e00effc24e537644013d5a2de95f3812574
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME147.tgz) = 219ba053784c069875b7434631463f61293bab1c
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME147.tgz) = 5349b757ec12a84df1e102583674646d
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME162.tgz) = c56ed72a7c0da9fb44d19ece17801d1b7527e05a
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME162.tgz) = 12078cbbbd7b1093f956b6526643b446890b82c043b17fc97e61259f54fc81cdbd8ebc56a735eb5937bff004b63d7f291e7ea2cd0dad3bd5b07f089df2c83ab7
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME162.tgz) = cfddd4246205e867729907015fc6dd16da7fe6e5
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME162.tgz) = 432a04306d40c933f2e04e5a332800e2
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME167.tgz) = 90302a0bc14e084f2643de427e87bc5b04553ab0
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME167.tgz) = 62c19ad0fb282a427beb1bf2d0d1b9a1cfc2681bcd04e3fb51ade0e793f26b52d04b5eb28e4c25524244e8c6dad724fc07de7a6544438cbd2a503972999f23ea
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME167.tgz) = d84d45b735805261e014ae52746e279902ad7e9a
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME167.tgz) = 8d38010b19b455f324d0b08485482395
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME172.tgz) = 017724bf77e35e2021308dadafe5a90e59a32498
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME172.tgz) = c3ca75dd2287e6af935934a4dabba21f085889383c395c8c72636047d682541ee5669998dd5988e0127879d7b34df260dc9109c292a2c2663ca8cfbed9c03278
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME172.tgz) = d8676c3325db3b3f619599f9e7a33cf3b1eb5bf1
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME172.tgz) = b89cd9b71b5b68285bf36d958a3b8746
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/kern-VME177.tgz) = f9bdc8e89488ba91385adf9f0960633ba7dbf6da
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/kern-VME177.tgz) = 642825fa141d2de457a0d3eca1224cdb5b087383dca6ed4f36668be6f6fe9f9e30b942ec5eb177b4733aaad40f6a0eace0f744fba3777eb356dd75d8c113785f
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/kern-VME177.tgz) = ef6abd72e2a71a5995c628107f473ceabe2945e6
-MD5 (NetBSD-6.0/mvme68k/binary/sets/kern-VME177.tgz) = 42b79dd96c98e97639d1a9d698673996
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/modules.tgz) = 5479e9142d1f21bc8346cd34e9f00761e2e05f48
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/modules.tgz) = 094b2d20eb3dc973fc212085dcc4d110249fc71eb017ea390b7f9aeffd4d8d0aeb51d421b4c95add33a17ac5d7dae1e3c9fc654f8a4181d078dbe2bac95a96b6
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/modules.tgz) = 187b451690395a8e05f22294016a627e4db4539f
-MD5 (NetBSD-6.0/mvme68k/binary/sets/modules.tgz) = 5d3d2aa79488e5f8e90ff7b26f80fc97
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/tests.tgz) = b994ffc0b63206aa7a8ab6de392ec33189894764
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/tests.tgz) = 714ac7fe966021f842409c135711b7adfb03c4b6a095df9527d02d1b83b14db62f1ec1a7eaaaebc68e4f12588e52fab9318c21912f20b8380a7a8b8e30e8576d
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/tests.tgz) = ba3293225ace42d8c47037879ba0cecd8f883aaf
-MD5 (NetBSD-6.0/mvme68k/binary/sets/tests.tgz) = e32c51104c90b3b684d1d640ba79b46a
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/text.tgz) = 61b398a67c4c47f8633d393dda778ac5c1ed8698
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/text.tgz) = 29b9bb0c5aefb3d765eb6204967c3ff14f7a28b0987723c3685a2b34fa799947c876971bf524a8e43b146e9e91e37cbc89a0c4da87c47e9856bdf9d96a67f125
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/text.tgz) = a73c95546d018a1853c6d00f5924da860fe9e5d0
-MD5 (NetBSD-6.0/mvme68k/binary/sets/text.tgz) = b0dbc4ddc47ab74ab24bdc0bede769a2
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xbase.tgz) = a31e38ba081b5abb671cf5f7350799782a628712
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xbase.tgz) = fa78acfbace842e0995a7f181193220f80dcae731221bf1722ece1a5bef6de846089b919beebacd7921567105f8ddae9bdaaabe0b065b62a0f18d917f03b54d9
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xbase.tgz) = 1cb1d631feb356639d3b1362518ba5f09f084510
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xbase.tgz) = dae635ef3bd334e14be8b8b66a227353
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xcomp.tgz) = fbc80a68ccbef35cab4228a5ce96b22b383d9080
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xcomp.tgz) = 694780dd165f0831eac6b47ec6fd5c60589749a21e88700965a99154067b76fa374b8f7a55f26963cdba8caafe9548f66b222826cc265393e992addbf19dd468
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xcomp.tgz) = 7db19d8ccd7dbda6032d9c29a65d03bf9c71644d
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xcomp.tgz) = 913bbabb9e401d6a31cc09a3d259b132
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xetc.tgz) = 1aa27f8388f5bb0aa85eec00e225fc92736da214
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xetc.tgz) = 1b524f2137ea4cc5f816623a7b042b05b1303664d244b0172799b365cb16df34f0a8a47277077055baf266c7c92d5f112830ed357fa811bdf6bd713b2f90275e
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xetc.tgz) = b50ff4df41b13b9276393e871e976648d344ee7f
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xetc.tgz) = d7709463a7a8404b6ef93aeb60755f7f
-SHA1 (NetBSD-6.0/mvme68k/binary/sets/xfont.tgz) = 4f8d5c51bdd02bdff0dca66f54e5ebd25e4d6110
-SHA512 (NetBSD-6.0/mvme68k/binary/sets/xfont.tgz) = fbad852b3a697906a2ffb460f8fefe8f9aa9f2088f66423d838abc18941d497bf6f9491934de0e3359159d35c98f205b23bb9c328f832e7e62c99310067687e6
-RMD160 (NetBSD-6.0/mvme68k/binary/sets/xfont.tgz) = 41c3686ef9c2cc25eff4b9923ae3163aa9c28590
-MD5 (NetBSD-6.0/mvme68k/binary/sets/xfont.tgz) = 2ec6dafe4dbe645a90960ade3e86caed
-SHA1 (NetBSD-6.0/mvme68k/installation/miniroot/miniroot.fs.gz) = 12df0f0fef9a077c27d02d2960d04ea3a148fa76
-SHA512 (NetBSD-6.0/mvme68k/installation/miniroot/miniroot.fs.gz) = fa3eeb4f14b741311ef72000e6c283195f4513e81a35f9c0a1829dbf8795d0518355b0d54d35a17c56568ac8e6db5977c1a7d4bb902c20786f901efd9b35ec42
-RMD160 (NetBSD-6.0/mvme68k/installation/miniroot/miniroot.fs.gz) = aeeeee1a475c8ef1d595c5cdff5bb3cc765bbea1
-MD5 (NetBSD-6.0/mvme68k/installation/miniroot/miniroot.fs.gz) = 9bff82e8d2d57a3fad2e831272aee965
-SHA1 (NetBSD-6.0/mvme68k/installation/netboot/netboot) = 588e8808e6e24e0a570f529c0dde8f02bcb74edd
-SHA512 (NetBSD-6.0/mvme68k/installation/netboot/netboot) = 6e0b6bc3f5de5940811d0929dd0d5f65351402176ae9c8e44a0220b807b41e98c8363d4917b1f506a847c3510bfec3d78584eae8f9e1c337130b37da4d3c6f07
-RMD160 (NetBSD-6.0/mvme68k/installation/netboot/netboot) = f1239616c5743fba614065450b1aa9ca8f4057f5
-MD5 (NetBSD-6.0/mvme68k/installation/netboot/netboot) = ee5d8acc83e9f62ee902acd1da69b3d5
-SHA1 (NetBSD-6.0/mvme68k/installation/netboot/sboot) = 5f45e50e16e46d9ab20ad20d929d1a01e4d60ad5
-SHA512 (NetBSD-6.0/mvme68k/installation/netboot/sboot) = bcd667220dd50d44aa895c0d76b9ee906dd6e3ff72d9bb80167cf48ddb6456c5cb8c06829e66ee06cf69c99e50afa3005f23a6854fc56ea2a027b50315eace2c
-RMD160 (NetBSD-6.0/mvme68k/installation/netboot/sboot) = eee81405c2dd838804a4d13219b431e93120fdae
-MD5 (NetBSD-6.0/mvme68k/installation/netboot/sboot) = bd2f963054643f0ffa22af1ea8ecda92
-SHA1 (NetBSD-6.0/mvme68k/installation/tapeimage/bootst) = df842ee6dc97b75a8f8b8e20996f60fa5c0e6ff9
-SHA512 (NetBSD-6.0/mvme68k/installation/tapeimage/bootst) = 3a6900acfffe7118e262864abea6c325e1e69060f2b47556b8865f2f28458beb29e56d96a61a8b98520530ba3d6b5ee4e0d5499cc698497445e0d480d0b9466b
-RMD160 (NetBSD-6.0/mvme68k/installation/tapeimage/bootst) = 78ea882ed8fd3cadb3b25971c7d0ad2ef159918b
-MD5 (NetBSD-6.0/mvme68k/installation/tapeimage/bootst) = 720e708780805b3a7afa57bcdb9ee62b
-SHA1 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.symbols.gz) = 0c590bfc2ae0c74a96ac421e16e9f6aea312d63f
-SHA512 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.symbols.gz) = 1f91be15380c61c4b2eebc8e34fb6eba768dc06fe958ba03cd1a074ef76e77c490d63484834b458bef181f18a5dd84444dcb33b4ed1b35360f7df9ab727a5088
-RMD160 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.symbols.gz) = 49fe1be9202c415a147b25ca21b57c4e91f3d886
-MD5 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.symbols.gz) = 387b741997770fa953dd689bdc7c2dce
-SHA1 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.gz) = 071feb6189682ed7fde6e75790b17ed023512e15
-SHA512 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.gz) = 029ef207dc80563c3d28369d7f6b1a99dae4ca573dccae9983bf3d135cbef8aece9d69a8fafe0c989bf5fc851d5a31d61c77911f7680dc4584a9229f582359f5
-RMD160 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.gz) = 6ca56e2be45d06a300f533941a582caafcbe5623
-MD5 (NetBSD-6.0/mvme68k/installation/tapeimage/netbsd-RAMDISK.gz) = 16c9e88acf91351f83fcec78132304bd
-SHA1 (NetBSD-6.0/mvme68k/installation/tapeimage/stboot) = 652f8b35ed92540699c4a0b92d781bab584ff9ed
-SHA512 (NetBSD-6.0/mvme68k/installation/tapeimage/stboot) = 63627858e9ea5ddf22d56e9f5bbc94c53a5fa45eb877b7b540931eaee973bf82251afaf6acf6078456f9aec047eb60b7bd66e694bafaa2210b51b0e83e19fd21
-RMD160 (NetBSD-6.0/mvme68k/installation/tapeimage/stboot) = 1283f83860ab4f66692d5ef01d0cdeceb40668b8
-MD5 (NetBSD-6.0/mvme68k/installation/tapeimage/stboot) = a54cfad8cf02a1a31a004dbc5c0a037e
-SHA1 (NetBSD-6.0/mvme68k/INSTALL.html) = e3f98f5f338b9417a3f88ccc83fda9eb47696c0e
-SHA512 (NetBSD-6.0/mvme68k/INSTALL.html) = b1750f826b36c84a821126455bdba2e1116bd51cd3b404c7b0c0b80110130e81e19105cd5d04563d31824e996820e1992486827b818f3f9a01d87f2b2d4da46b
-RMD160 (NetBSD-6.0/mvme68k/INSTALL.html) = d6ab4cf012544dae8696f8f41208dd27ddc1ea7b
-MD5 (NetBSD-6.0/mvme68k/INSTALL.html) = cd685f3e5b2052919547bfd9c8d98d0e
-SHA1 (NetBSD-6.0/mvme68k/INSTALL.more) = 82746f9fb96a2db4cec433f8bad448fccaa98eef
-SHA512 (NetBSD-6.0/mvme68k/INSTALL.more) = 676952c9168c0dcaea1eef58271884f95e8ad80380e33a060e29be2da7e7b139a731369e6cc0a112779be95c412de4be19f716284a3724b41f93cc5075e93b9d
-RMD160 (NetBSD-6.0/mvme68k/INSTALL.more) = 79436013f39135308106f0d08b8a0fc951773a09
-MD5 (NetBSD-6.0/mvme68k/INSTALL.more) = 95f12215d3961d47f7cc70f786c331da
-SHA1 (NetBSD-6.0/mvme68k/INSTALL.ps) = b2c39b95dd800c754733c8986e8f279a5895b9f9
-SHA512 (NetBSD-6.0/mvme68k/INSTALL.ps) = 120009d7f5781b9c060f3852d92bc047590b3d86d6491aa700c61d935ce8bccec1ddcca64f60fe17ffffa66871ec9c9908d42b738f8e37def53c97ac3a339c6a
-RMD160 (NetBSD-6.0/mvme68k/INSTALL.ps) = 1cc7939281b187b32afa1a30955dfc3751d8dc4b
-MD5 (NetBSD-6.0/mvme68k/INSTALL.ps) = b0c09fe08cf758e2dea14a23111c0c2f
-SHA1 (NetBSD-6.0/mvme68k/INSTALL.txt) = d25191ccd7930c3335bacbc56dfcbfd7ab04091d
-SHA512 (NetBSD-6.0/mvme68k/INSTALL.txt) = 581736f1c9236b74a0321e060d27305911aa735244a5b2e54825617cd97fa5bc1523472b87b65057fb3bc0f08216c7b53e60dca0c8ead238d7ea3da16502f16a
-RMD160 (NetBSD-6.0/mvme68k/INSTALL.txt) = 05b193bfebc12030dcbe3c96273582360eb132e3
-MD5 (NetBSD-6.0/mvme68k/INSTALL.txt) = c895e463555bd32f7b61fa481b63213d
-SHA1 (NetBSD-6.0/mvmeppc/binary/kernel/netbsd-GENERIC.gz) = 418f7d15770b902578623141540daa7987ed2659
-SHA512 (NetBSD-6.0/mvmeppc/binary/kernel/netbsd-GENERIC.gz) = f8ad97d747d2ffc1de7408ae9360afe25fb82eb60f73fc62198432ecb059aa64dfdc7ed74fc0d63e70a815d12414c6c9f1d8e5a717d614bafa0c9c299548ab9a
-RMD160 (NetBSD-6.0/mvmeppc/binary/kernel/netbsd-GENERIC.gz) = e3603ef7455506046e4f789e2341020d81bfb46b
-MD5 (NetBSD-6.0/mvmeppc/binary/kernel/netbsd-GENERIC.gz) = 713e8e8d42cebf7dea0ae4e96670a52a
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/kern-GENERIC.tgz) = cb6794f87c6c90ffe561a49bb2b3b48a5dacb40a
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/kern-GENERIC.tgz) = 6ee4daa27b1f69c1df2bcfb09ba9efd43a3ffd07e7de964e8f6a59ab46e0f36681a410527be024a58dff6f2efcb8f7a5af5da857fc36cca6d6bb8b71a3fd7c4e
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/kern-GENERIC.tgz) = 809b466fff3437d0e9ef68e9380b08145900b9cb
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/kern-GENERIC.tgz) = 21a47714184c5a998e528ceac6d8acb3
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/base.tgz) = cd5e92a746545a809e765ded7acbaac7de15f633
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/base.tgz) = ae16a9e58ccadf19e57966b608b0230cdeb066f65997cf36749dd72597ad80741f9a5a8f6f9b49e7ff42fe071c07fbdcc237e076ffd7a9fc4cfe94e9aecae6ef
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/base.tgz) = e8ce9e46b09fea354214094c65f085f963f9fabb
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/base.tgz) = 3480b07c4c07ba28b82c27eb4e566b9b
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/comp.tgz) = f8a50dda9bf86a613d543daad62ea5aeb0455af8
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/comp.tgz) = 5a042383539c5fa72acca742a572cc185f28e2e82f9b0a05af00a57ba3ef220272f4221718cb05322b6010236af0a29254afb0e7716a7bc1543a72bdb7ab2990
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/comp.tgz) = e13123ebdbe098433cfe3c82ff350ccf23206004
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/comp.tgz) = 93a0b66d03af7b52d9e2394c7fcc93b4
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/etc.tgz) = 7295ed78597062a35a244940465c2148ba96ccb1
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/etc.tgz) = 28ab60b5de702a8c4369ef7a04fd88d92a33eb79c3537c7593f1e2c3b16aecfdfb03582daa36dc97d1ab147d0a217a0354906475dae397970b991e39d88905b1
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/etc.tgz) = 814c4c6297cc41c8961e92e042c1ceea8d0f7bf5
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/etc.tgz) = 9b00467e487f1dc4c8e6e520f531e48b
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/modules.tgz) = 07df9e6517dc7ab1f7b4d89e4c69a0f6ed5e2551
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/modules.tgz) = bdb4958d494d5cb163ab0c77759fcf2c7c826e4f026d25fd156a19c44dd337064b604d9e5fcfd2bf60140be482cdfce94ce6d382911b813291ba2bf5a0c424cc
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/modules.tgz) = 43473d4d0defd1cff47ee9f1874161538a4b82ac
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/modules.tgz) = b73307a25c9030b40171a0360293a564
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/tests.tgz) = 9b7fcd1db26e218ce61b5325966cbc8fdf647ec7
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/tests.tgz) = c18be2b0c91b327f620d40c6ee7890dbff28fb4a431f2fec6a870c7542e08a0545c256547371cb2039a8707ae5d5d0a5b876ab209f7ea4f2ec66e4d5f676f05b
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/tests.tgz) = 78c4ec64a4a643c239af74a89cc617bd5e959fa2
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/tests.tgz) = d6e2627f54fc989e87ba95e4243e933e
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/text.tgz) = 0ef97a5332a5c76de8329dd7dd9d97fe8528a83b
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/text.tgz) = b75d8259b2a0886380f796340d08c4f56ab60002e02c04b09665e87e14eed8cddd86ae483c12e236e7589291f579a516dd049be349fd3af7c63f245cd8ddc0a4
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/text.tgz) = eaad1bf719adc5b5e1645c5fc77be97c1c946ddf
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/text.tgz) = 22b500a7593d8b412fc9c000558444a3
-SHA1 (NetBSD-6.0/mvmeppc/binary/sets/xetc.tgz) = 98938e35cc38b7007b05b049e42e888ec0a93860
-SHA512 (NetBSD-6.0/mvmeppc/binary/sets/xetc.tgz) = 0e9027a638278b6102fab31d408f258e8798bfffc6400e99b434656b81bf13053605caa8c3e8d0744685d359261fd8576c267f5eeb987da4c3a054aaf17bb993
-RMD160 (NetBSD-6.0/mvmeppc/binary/sets/xetc.tgz) = f71d30b8062059ead3243e21c732ebca57eb117d
-MD5 (NetBSD-6.0/mvmeppc/binary/sets/xetc.tgz) = e09a8d3ed7015c6b274ef5a025041fa2
-SHA1 (NetBSD-6.0/netwinder/binary/kernel/netbsd-GENERIC.gz) = e5f0ce4b52ffef57f8ecc29a7c26ddb9181a5c59
-SHA512 (NetBSD-6.0/netwinder/binary/kernel/netbsd-GENERIC.gz) = e1d81a5be8964559be0b23b0d6a4ca22f95dac64abf4a1ebc7912cbab18f47ee31ab954d85155feb750926267b7b886c1eead88223b16a4c4a363f8286d5110a
-RMD160 (NetBSD-6.0/netwinder/binary/kernel/netbsd-GENERIC.gz) = e270203b95b8a0f7736779454b07957e20ccdbbf
-MD5 (NetBSD-6.0/netwinder/binary/kernel/netbsd-GENERIC.gz) = 18ec5abd22e842bdc99a66e283e07231
-SHA1 (NetBSD-6.0/netwinder/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/netwinder/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/netwinder/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/netwinder/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/netwinder/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/netwinder/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/netwinder/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/netwinder/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/netwinder/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/netwinder/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/netwinder/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/netwinder/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/netwinder/binary/sets/kern-GENERIC.tgz) = 3f337b136bc35343128f53eabc787cf5a5a5a6a4
-SHA512 (NetBSD-6.0/netwinder/binary/sets/kern-GENERIC.tgz) = 2243a1cbdf776e683d5cb32b411adddd35e137dec2bea0e9a2d9df17972a8ebea0302328171c8fdd06da240689991c623b07a953cb8e374ace3607c0bbb6c5f7
-RMD160 (NetBSD-6.0/netwinder/binary/sets/kern-GENERIC.tgz) = bb3ef1387ed7dcee67af89f3662f2eb39a23ee7b
-MD5 (NetBSD-6.0/netwinder/binary/sets/kern-GENERIC.tgz) = b370234d8f18c218bc78739602325c44
-SHA1 (NetBSD-6.0/netwinder/binary/sets/base.tgz) = feddaeaf51113aca08fb9dd5689745efcd3ea178
-SHA512 (NetBSD-6.0/netwinder/binary/sets/base.tgz) = 1fc5531cf2b47451e0eff63df4222a4e88f7f0112d4f0b2e43009b39dd98a0550f015833d22fb0d7c0ffa9b699944fb72283715f51e5bdae97d263e167b787b4
-RMD160 (NetBSD-6.0/netwinder/binary/sets/base.tgz) = 4e1e7dcd563d7e68d0cfa8824cfa25bffd17187b
-MD5 (NetBSD-6.0/netwinder/binary/sets/base.tgz) = b5f660d9a7fe6f6fa951a3a7c3c0f6a5
-SHA1 (NetBSD-6.0/netwinder/binary/sets/comp.tgz) = 06b1e34718e894be491327ee15f5464e91aaac32
-SHA512 (NetBSD-6.0/netwinder/binary/sets/comp.tgz) = 3f6ea371d7852951a374855e3ed4396b683b752aabe0d47e0e6b1d7243b9468023ec6893076a6d77861ccc6f8ff74957bdb4675adc878fcfa620dda04f13d02b
-RMD160 (NetBSD-6.0/netwinder/binary/sets/comp.tgz) = 21fb07ace630d66e088ca8fba7f3de545bf75b0c
-MD5 (NetBSD-6.0/netwinder/binary/sets/comp.tgz) = 0b21dce21957ca73da5de9ebbeb3a157
-SHA1 (NetBSD-6.0/netwinder/binary/sets/etc.tgz) = 6eb3f0d4ee4b86c87bd03cc4f93958a42e9079f3
-SHA512 (NetBSD-6.0/netwinder/binary/sets/etc.tgz) = 2de4303f21bd502d062486b8789198bbf3e7f5068888d62d4da08e5e51d58f42ede6ea13c8a83bfbc9d0cc64cc6e11d3f2e949a3c2ad800aa78680d4046aa7d1
-RMD160 (NetBSD-6.0/netwinder/binary/sets/etc.tgz) = 3a77fb3f3a4ea25db5b8b450274bade4192541c8
-MD5 (NetBSD-6.0/netwinder/binary/sets/etc.tgz) = f57f45618396a67a169ab7c0e74be2d5
-SHA1 (NetBSD-6.0/netwinder/binary/sets/modules.tgz) = 780745396f7dee2fcce36e4c401f9462ee620e55
-SHA512 (NetBSD-6.0/netwinder/binary/sets/modules.tgz) = 9e4ffad337fd2e30a157ec7ade8f868043addcc2e8020a950cfd8e515d17bccae185b04ff15dfccebce764c1e0a8f1f722bac33e385ae294700dac0b0c3a5792
-RMD160 (NetBSD-6.0/netwinder/binary/sets/modules.tgz) = af686e341bf03f36fc43b5bfa86015e3204803f9
-MD5 (NetBSD-6.0/netwinder/binary/sets/modules.tgz) = eb5745d3d6289ded145654a58bf4a9e0
-SHA1 (NetBSD-6.0/netwinder/binary/sets/tests.tgz) = 46a999d0afcee9103c765b57765971557cffb18d
-SHA512 (NetBSD-6.0/netwinder/binary/sets/tests.tgz) = 0937f49f33fd690da609dff62adf04978e1ca36e61e3357e360e3ca622e406758a12e5909fa0aa431f914eb145625cc7dc3dc1caf09bf2793feec7db45cba00a
-RMD160 (NetBSD-6.0/netwinder/binary/sets/tests.tgz) = 7d070858cc4bdbbee9bd6568acf73cc9b70147b0
-MD5 (NetBSD-6.0/netwinder/binary/sets/tests.tgz) = 879591282409cebe2b0c397f9c05f417
-SHA1 (NetBSD-6.0/netwinder/binary/sets/text.tgz) = bc73c2b37be55d902c10db2244412f884dcb2c49
-SHA512 (NetBSD-6.0/netwinder/binary/sets/text.tgz) = cbf470fcdd95eb9bf94d5296d7d728eb537a243ed03448e134e56c6714c6528968d217c69e3ac830045f2b8b5c8c4df451fd24ff2b5b176d37fcd84ca1f07f92
-RMD160 (NetBSD-6.0/netwinder/binary/sets/text.tgz) = 00aeff72db0b05b48fa40bf80b1e24c5a667fd0f
-MD5 (NetBSD-6.0/netwinder/binary/sets/text.tgz) = 42470e4348951037fd056476c26dbb77
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xbase.tgz) = 66d3e62a116c56bfaac8ee3257ba675a845b9ab3
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xbase.tgz) = bfc8c00cfc6bf2fcb3d26ff9abb9e6091c5389aeac5370ae475b3c74569e3ccf05494e363544d6c805820e2c7554a1fea936abab6e3212dd4710e2463625006a
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xbase.tgz) = 26ff99801c9a84190cca4292c137c17305bec08c
-MD5 (NetBSD-6.0/netwinder/binary/sets/xbase.tgz) = 532381165745c160613ef72bcd7e7848
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xcomp.tgz) = 0eed09b5c7a6e8d76c99ddaa31029f414a14d6bd
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xcomp.tgz) = b03064377958f9ca9252e83d2933574a5f0fedc89ac864641340f8e50a6d5fa1a074d45a80f0dcb1567ef7d23eb2bc4bec3de866c2d07912ab4122acaf062c35
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xcomp.tgz) = f7a208a7ac2137d4940ec2f78c0658e630ea329e
-MD5 (NetBSD-6.0/netwinder/binary/sets/xcomp.tgz) = fa248543b87b553473cc67fd45e385ae
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xetc.tgz) = 4e2fdc95511cd90317da41fb941f7ec6f622b84e
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xetc.tgz) = 57a60f983fadbdb0a0ef5720c2bda405d4052d460f67976e71a34ad016d25357cd04fbdf48e866c3641dcabc55194a683931a0b36c7f55549a7998c31e42ef88
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xetc.tgz) = fef501d07dce370292072f65ed25dd32df41bfcb
-MD5 (NetBSD-6.0/netwinder/binary/sets/xetc.tgz) = efdbfcb8e6fbf0c4cb2094e749c54b1a
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xfont.tgz) = b92ebefbcc4a96bdbba5540df3119bed0ee2efdf
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xfont.tgz) = 605e099b75b0133d811b12387461856bcf7ef7cc0dddc68490eb6ef51ba284ac2edafcc757feb0665618b119eacd2509c302f42736eb0d582ab7f17f5fdb1b23
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xfont.tgz) = 084a5e8e5f95debf53ba5be9e52230fe72dbb2d0
-MD5 (NetBSD-6.0/netwinder/binary/sets/xfont.tgz) = 02b5344f23cdb9eb4d9cbe8b30c7707e
-SHA1 (NetBSD-6.0/netwinder/binary/sets/xserver.tgz) = 570bbfb56fda998c07f8414731eaf79af5b01bd1
-SHA512 (NetBSD-6.0/netwinder/binary/sets/xserver.tgz) = b70eccc78ca3e290869502760fcc8a8378db3d49c402f075e2f12e1453a7fbb68911df18993c0966ce840b837225d577344ec7088d2aea5eac78130e9dcce0ec
-RMD160 (NetBSD-6.0/netwinder/binary/sets/xserver.tgz) = 5b7c5740805aebc0ea76f778b429803b25cf9128
-MD5 (NetBSD-6.0/netwinder/binary/sets/xserver.tgz) = d866ffe531725f8c18bd3f88129d09db
-SHA1 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC_TINY.gz) = c260c1b8e7017de3a9c7383ebad6833c172b745c
-SHA512 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC_TINY.gz) = da338bee7bcaf58401ea3fa629c91fc5732016581d869f2bb8897f252c90e296773eaf35dae48667a753e7119340ac376fff713f3f87e25802fb3874879fcc65
-RMD160 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC_TINY.gz) = 25e70f61645eea330feda79fa0e6302bedeecdc3
-MD5 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC_TINY.gz) = df5ca7bb950327f08e460757a4b03de4
-SHA1 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC.gz) = 96c08009db46bd9bf3e0b1b0b8ea6b96b7772396
-SHA512 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC.gz) = 635ef8e6ee4c767afba768a982f587d6040afeb15585be8a8fcfd44e75bcd9031f8965f1bef2b7fdb955b81b2e09f0dc6a51618b48827898763cd75310669a6b
-RMD160 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC.gz) = b9a864c14cc967d2336473c2c2c19eeeefa5b3ec
-MD5 (NetBSD-6.0/news68k/binary/kernel/netbsd-GENERIC.gz) = 76b1a1ad9865766e5d7b1ceb1d374f26
-SHA1 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 620ddb95366fb58c53d115681a205d73fb79bf02
-SHA512 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 4eb494f02f39ee17205b28f07993fd1c9bbb872f2617aacdb173f9b458603fe284dedcde279eb0b9ffe083b01f485dc04963ec09117c31927e3e97a9b5441f6f
-RMD160 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 3456f6c84edd59e0e1db531ec40b838fdd076d14
-MD5 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 0898606b528a29a5c2c754d365e1fb22
-SHA1 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.gz) = 76b25bf6b038d7c48a55bf1f1df350717707af3f
-SHA512 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.gz) = 7aadf02eb4862fc3cf8a0099673414092e8a113e59dfcfda713e430422cc8f03fd4a711ec767b10905ac5feeb6823054e372da6da4f19e15c595712a75dff046
-RMD160 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.gz) = 4e01f28fc0dd67b8a2b16ac61c27adf4ec83c7e7
-MD5 (NetBSD-6.0/news68k/binary/kernel/netbsd-INSTALL.gz) = 7ecaba69661efb53aea818bfc0df2870
-SHA1 (NetBSD-6.0/news68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/news68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/news68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/news68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/news68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/news68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/news68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/news68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/news68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/news68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/news68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/news68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/news68k/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/news68k/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/news68k/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/news68k/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC.tgz) = 6d14a82918f258c781499c87f7ef23fca3c85c68
-SHA512 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC.tgz) = ed399e3bab46335dc4d2bb1f2971692d8a1d8aa22c4196bb340e005c951a3941517d64de8be8c8047a60de791ae934197b38fe02706bcde080f4062a5ffbf431
-RMD160 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC.tgz) = 74c42f841cfb865522b4eda052f46a7b13e491d0
-MD5 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC.tgz) = 6ac0ec8267f457a0d94feba55a094773
-SHA1 (NetBSD-6.0/news68k/binary/sets/base.tgz) = 14763cf9124eb67c9440727bf0559d98d9aa4765
-SHA512 (NetBSD-6.0/news68k/binary/sets/base.tgz) = 24bf851943de08a6e5cb869a69d8d4350f6d6c64988741dbb8691afb927fa8ccb922a7e608da48ef52913796c0e6172c8302b22248c64ce576446d26f26add71
-RMD160 (NetBSD-6.0/news68k/binary/sets/base.tgz) = fc4ad357c41d200d8e12444d1f4e13956521a4d5
-MD5 (NetBSD-6.0/news68k/binary/sets/base.tgz) = 5401468976f41209a9a28889d85f52be
-SHA1 (NetBSD-6.0/news68k/binary/sets/comp.tgz) = 6b20fee4bcb085b5b09893416ce5eee6a96ca5bd
-SHA512 (NetBSD-6.0/news68k/binary/sets/comp.tgz) = 3550045bb700ea29604590e25cd9e6305459476a837f67b4d746e62ce0facc8218aca1d03f2dd570e2590802f32079e438ad4e977a96f9a8939dd986d725d898
-RMD160 (NetBSD-6.0/news68k/binary/sets/comp.tgz) = 85fb356111807dbc811b8fe2fb3d294e4544b358
-MD5 (NetBSD-6.0/news68k/binary/sets/comp.tgz) = 223302daf2a8f7f52863763374438b3e
-SHA1 (NetBSD-6.0/news68k/binary/sets/etc.tgz) = 575f76fc225f509cec73dbc1e6a213d4370c221f
-SHA512 (NetBSD-6.0/news68k/binary/sets/etc.tgz) = 4705c91993153a30b1bf6bab9f1d0b75d9bc29ccbd698d26c44ae70fadeb4a8390298eb1e0e590f0da62748d9429e8e5927558a31d2efe0ef068a9ca353681b4
-RMD160 (NetBSD-6.0/news68k/binary/sets/etc.tgz) = 7ce6e09c062f61b659f2c16138516b3629c010bf
-MD5 (NetBSD-6.0/news68k/binary/sets/etc.tgz) = 234be1ba6587866294eb09b75439840b
-SHA1 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC_TINY.tgz) = 119015b6a9a67300144e248352a3842857ba86e9
-SHA512 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC_TINY.tgz) = 2eecd5ff4fd2a1ca0edc61ff92c804f5202ffedc5b6e74c5c0be372f74cf533e4b4f1b6a69625a155a33661185e1a56943947ab1c98fa8b4dc3892526781950a
-RMD160 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC_TINY.tgz) = 5477d4127ff479fa19aa58a3de57bbd3a4cc0b90
-MD5 (NetBSD-6.0/news68k/binary/sets/kern-GENERIC_TINY.tgz) = fd4f85a1589e4907b314ae996b3aa08a
-SHA1 (NetBSD-6.0/news68k/binary/sets/modules.tgz) = 1885df3fb4ea56feab816bd8dc5e0dc08fae234b
-SHA512 (NetBSD-6.0/news68k/binary/sets/modules.tgz) = beeb1e94ef6f34b7525c0c2de9bfe9927aa443bfdc5be8c4a5546a27483c0ca45006d3f546d93bc0036f25804e7827ea1b8fd943e7642bc73c4b6c75710362ed
-RMD160 (NetBSD-6.0/news68k/binary/sets/modules.tgz) = e3ed23f75e48c70efbdf3b5ec9c28ec41886d878
-MD5 (NetBSD-6.0/news68k/binary/sets/modules.tgz) = e4db103ff1b7f68a57e8fe813b2b8d3c
-SHA1 (NetBSD-6.0/news68k/binary/sets/tests.tgz) = 984686c1f0ad93ff8200e810482527b87bad3de3
-SHA512 (NetBSD-6.0/news68k/binary/sets/tests.tgz) = 508704556a3bc66c9f5f88a6377d34d81edf9aaace78a4496c550021dd5a88c2ff85d5663ff2aa42c4e7a74721249b2dddabd50bf597572b016794c42d22a622
-RMD160 (NetBSD-6.0/news68k/binary/sets/tests.tgz) = 06cb486210f5e4ef2ec33d863cf995780caa24df
-MD5 (NetBSD-6.0/news68k/binary/sets/tests.tgz) = 60053afffd0ad1c95c2654ce6a991d21
-SHA1 (NetBSD-6.0/news68k/binary/sets/text.tgz) = edd7603519c0dbdddbe9b9c8d9ddf066d62ee617
-SHA512 (NetBSD-6.0/news68k/binary/sets/text.tgz) = b5c7ca241708d02df4df5a6bf43b6329cdb063a922bdf23955b3807cf813d10718cdd1a7a4c3167e0869d5f8f0a742ee275951a72fa2cbfbd32a0afa37d3e49e
-RMD160 (NetBSD-6.0/news68k/binary/sets/text.tgz) = c54012faa763171bbd263ba23d4d2495e7cf2762
-MD5 (NetBSD-6.0/news68k/binary/sets/text.tgz) = 2088a3dfd39fd763db42fe375a460a3e
-SHA1 (NetBSD-6.0/news68k/binary/sets/xbase.tgz) = 9b8940f65ca6a841b84406a22a13971665edc464
-SHA512 (NetBSD-6.0/news68k/binary/sets/xbase.tgz) = 4a7d78ad9cf1b84c183fc731bac2fce861f94bc26c7a1681ab1d62a9b761ba89538469688b24588f6c671503a1b66a1e521c2eeef2fd528d21dc0351272e56e8
-RMD160 (NetBSD-6.0/news68k/binary/sets/xbase.tgz) = 85735e089a6ac5293e7438a609dd11105cd4eb25
-MD5 (NetBSD-6.0/news68k/binary/sets/xbase.tgz) = b6f52c8fde2fb1a5372a12d2f321e9c5
-SHA1 (NetBSD-6.0/news68k/binary/sets/xcomp.tgz) = 63a79437c028936698509a386963708082356d29
-SHA512 (NetBSD-6.0/news68k/binary/sets/xcomp.tgz) = 25791832de667b9a44f341f7267f09aaa6b9a4216452ceaab8b56dc6ea5fca3be2da53868b624f47a275edf19ada59dfed40e355e2ff1f62ab96bb54448c1e00
-RMD160 (NetBSD-6.0/news68k/binary/sets/xcomp.tgz) = e681ae34bd83be8dbb6945cef3a129bc1538b66a
-MD5 (NetBSD-6.0/news68k/binary/sets/xcomp.tgz) = c87752020f2ad29a80262eae4bbeaece
-SHA1 (NetBSD-6.0/news68k/binary/sets/xetc.tgz) = 76661bc6d6851cb2ae57f3a7f25f816a33360a2b
-SHA512 (NetBSD-6.0/news68k/binary/sets/xetc.tgz) = a1994fbd97492275e9128c5fc764dc7cf5539bee26bb9d13d9f3fcc14429858e794ed8a10554570c4f70b87714f8b0ab23269ebbaf44d4fb95d0901dcc28fe81
-RMD160 (NetBSD-6.0/news68k/binary/sets/xetc.tgz) = f9f8fc83764439a533110c614e1ef19ffe98361a
-MD5 (NetBSD-6.0/news68k/binary/sets/xetc.tgz) = ab945fe1f43ea47433a047babda53a81
-SHA1 (NetBSD-6.0/news68k/binary/sets/xfont.tgz) = 4403bc158b92ded3d27646c6c0858aa6c117cb8d
-SHA512 (NetBSD-6.0/news68k/binary/sets/xfont.tgz) = 79e31eee0397803ec17a9413b50a5d501fbc3515e4080a0e9e053498c64557809cddfd5718f131d3c451a231c4a38ff4f40b50ef401af5c204a68b61df8f8ba7
-RMD160 (NetBSD-6.0/news68k/binary/sets/xfont.tgz) = b7e19b89a1f67382428aeaf248710dade3b0672e
-MD5 (NetBSD-6.0/news68k/binary/sets/xfont.tgz) = 8a1f532d7a481f797deb226b66d15ceb
-SHA1 (NetBSD-6.0/news68k/installation/floppy/boot.fs) = baea772f5bf7116b8c489a2e75f77c98e308ac5f
-SHA512 (NetBSD-6.0/news68k/installation/floppy/boot.fs) = be4dbd6dc24f56ac71f96d60b8ed0e6b4f725bae2b9d39ef1b9e5ea5fe71053f5fea04979676ff13a50685bcbce539bbc93631408c56d29a2924c79370ded347
-RMD160 (NetBSD-6.0/news68k/installation/floppy/boot.fs) = ff9f3a85babe4d597e2ccb4a864eb0c611a7894f
-MD5 (NetBSD-6.0/news68k/installation/floppy/boot.fs) = 98f566671f6dd720fb61e8c657bd93e8
-SHA1 (NetBSD-6.0/news68k/INSTALL.html) = 8d9ab316296bfbb751b0a05557f4648ff2990af0
-SHA512 (NetBSD-6.0/news68k/INSTALL.html) = 5916c04ef717b2e47ee36f93a1e3a43a27215b5c688b36520e0f160bda3816d6e4645e2e9e922d564260e8b8a60e46da67fbd3b443832032a66e76153596c4eb
-RMD160 (NetBSD-6.0/news68k/INSTALL.html) = a07fa866614d3f5ecfb5642eeb354b6b9c675318
-MD5 (NetBSD-6.0/news68k/INSTALL.html) = 89f43b16d907873c28b8b7b6ab8cb4a9
-SHA1 (NetBSD-6.0/news68k/INSTALL.more) = db7d9b68680f5c20b525bf253e342f2775d04a71
-SHA512 (NetBSD-6.0/news68k/INSTALL.more) = ab50b18effb102ac017c0cad2c054dffe8ccec3876ff9cc6a0353762b5a2b11651296f05b3cf3da76cbb10a4561bc529b5cf113141c742a96fdb73a5358e129c
-RMD160 (NetBSD-6.0/news68k/INSTALL.more) = d6aacc53d5c3384704e2ff1f64a4eb9fd474effe
-MD5 (NetBSD-6.0/news68k/INSTALL.more) = 4c22b00a52d8ad3cdb12f66d23a069a9
-SHA1 (NetBSD-6.0/news68k/INSTALL.ps) = 021d67431fbc7f9fd378e496c25c28097b72af46
-SHA512 (NetBSD-6.0/news68k/INSTALL.ps) = 224e78f8ddc0149a710511083c55a69e1eb2f37089ad15ce1fbc1c07733055eb5b34ad4c32b2803d1f3050b1c5a038ef1d429af780c0a57c8a4b41fde8d10413
-RMD160 (NetBSD-6.0/news68k/INSTALL.ps) = 86b953fd3860caadf7a681e0d75486cb2ac453d2
-MD5 (NetBSD-6.0/news68k/INSTALL.ps) = 4f2098f135e2d4f945dd6365a55b7bc2
-SHA1 (NetBSD-6.0/news68k/INSTALL.txt) = 1491600e777e5a7a96cc05a7fc5a0ab0edf2072f
-SHA512 (NetBSD-6.0/news68k/INSTALL.txt) = 0552976751403a424febde147bdbf34b7e589c0f27225072c9691e30f630e1f49be93c9e75ebbc7d0c6d06ab78419506d4c4313059023e9ae13dbd8d1f5c4445
-RMD160 (NetBSD-6.0/news68k/INSTALL.txt) = 2c6df35393c4ee9d9fb7dcb58002f996c587c32a
-MD5 (NetBSD-6.0/news68k/INSTALL.txt) = 9cff69046f721931b5b5ef4bd511d12c
-SHA1 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.symbols.gz) = 0e0add1125bb456d3210efa5035169e1bd7ae98a
-SHA512 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.symbols.gz) = 138e28fb744019ee2e89cb8ef1f3e23b5fd296b2f8c12a26245cef11aef9540f12eb2c180e5847d047d74d593e62916694c7f031fda0e3477e42ecdb79da7510
-RMD160 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.symbols.gz) = 4ee95362c6f9e38a32cd9e0fe36cdc3aadb91291
-MD5 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.symbols.gz) = 0d8837629ba02a89e50b6764649d03a2
-SHA1 (NetBSD-6.0/newsmips/binary/kernel/netbsd-GENERIC.gz) = decd427b7283d775b0356186a50720409c1c2ecf
-SHA512 (NetBSD-6.0/newsmips/binary/kernel/netbsd-GENERIC.gz) = 05df61671fb365dba6ee67d097f5e51b372720a260b0dd05913a4cf283f323836aa7b157d88eaa68e4cdfa2a7180e57e3ba8ee3cd538dffe4a6afadc1ce880c9
-RMD160 (NetBSD-6.0/newsmips/binary/kernel/netbsd-GENERIC.gz) = e997c6efa2aacfb924670a53162157c8fbd93bdd
-MD5 (NetBSD-6.0/newsmips/binary/kernel/netbsd-GENERIC.gz) = 1b105c1608405606b59942471102880a
-SHA1 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.gz) = 42aeaa1b3dd454b7ac007db9ac4f9b43ca2bd52f
-SHA512 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.gz) = f4262b07a27e2166082ed9cd4b0a247fcbd65f3aebc1c1f8e502f5fc931e130627b0906c92263d2f748d3d30d482391c6b72637c29812f98aaed2fd85830cfdf
-RMD160 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.gz) = ab7e5e64d2b4761006e95f8d1605d767f6ace146
-MD5 (NetBSD-6.0/newsmips/binary/kernel/netbsd-INSTALL.gz) = e23868785597388ddbae56348a08d9d7
-SHA1 (NetBSD-6.0/newsmips/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/newsmips/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/newsmips/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/newsmips/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/newsmips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/newsmips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/newsmips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/newsmips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/newsmips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/newsmips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/newsmips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/newsmips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/newsmips/binary/sets/kern-GENERIC.tgz) = 7b98d2f4f3acbf629e953e6b694d8f4755b8e8bd
-SHA512 (NetBSD-6.0/newsmips/binary/sets/kern-GENERIC.tgz) = 5d7e2e9bce3611aee142686bab7a69abc59ddb5e1308694cc88e63645d3b411013765ffa5198cbb44fa445ae258f85cfae976c239875ea26ac4d0439cb497746
-RMD160 (NetBSD-6.0/newsmips/binary/sets/kern-GENERIC.tgz) = 849d144d0090f36a2d013a9f85c9b4c472c595df
-MD5 (NetBSD-6.0/newsmips/binary/sets/kern-GENERIC.tgz) = 40ecc8186e3d4328e24ef91e817c5a4e
-SHA1 (NetBSD-6.0/newsmips/binary/sets/base.tgz) = c229edbeb3438aa2444933af1633c73b66f23748
-SHA512 (NetBSD-6.0/newsmips/binary/sets/base.tgz) = 8ce8dce68f07ee529d0f079794502bd225475cabe7f0dd351caf01b5acf8a34d5f865eea046c06998db53a2cb23c7c36764314493d537ecad8e69c5908a07dbe
-RMD160 (NetBSD-6.0/newsmips/binary/sets/base.tgz) = 6d2365c6adbf64a1b6655c7341a7fa1756878e93
-MD5 (NetBSD-6.0/newsmips/binary/sets/base.tgz) = 650ad75dc13c5edd48f4d8a58759375e
-SHA1 (NetBSD-6.0/newsmips/binary/sets/comp.tgz) = d6ce335f1f52b3d77282e7c08c3781202018257f
-SHA512 (NetBSD-6.0/newsmips/binary/sets/comp.tgz) = 4c8cac5f9fff3b5334083d5df788b0967f62817e797206393f6b83a9cbb0b78c151408440045b92bc50ac2540e0b5d38ea854f29b6af69c1043952d472cf0a85
-RMD160 (NetBSD-6.0/newsmips/binary/sets/comp.tgz) = 7985588ccbaf837e8fd044a0ea7064aa023245c4
-MD5 (NetBSD-6.0/newsmips/binary/sets/comp.tgz) = ac02ccf4b35b94d87960214974f909ba
-SHA1 (NetBSD-6.0/newsmips/binary/sets/etc.tgz) = 1744b2b2050df7622a70aec4c4ab39ff4766b598
-SHA512 (NetBSD-6.0/newsmips/binary/sets/etc.tgz) = 933f4b9af8a1f5033c88ecb680c70b258b36267cbd3d8804aa7d2c0ce797f272a4ffc7266bb369505635e0e0ce0efef285d8fa26704ba28690f1dc6db810c42e
-RMD160 (NetBSD-6.0/newsmips/binary/sets/etc.tgz) = c41f76161f0a9ada7ee8cad68d5311f70051c08e
-MD5 (NetBSD-6.0/newsmips/binary/sets/etc.tgz) = adb5f50f9862a06a123d1d848dbeaef0
-SHA1 (NetBSD-6.0/newsmips/binary/sets/modules.tgz) = 494b6a3b255bace06cfee70f87d2ac213b190a5f
-SHA512 (NetBSD-6.0/newsmips/binary/sets/modules.tgz) = c8274f58ae9d514e72f8d82e46599c655e1b959b744e73340a6a106dce528f83687b7bd7f8e769eab60294e6962a7bc5e0d7173330710ee381219ca6f87b51c7
-RMD160 (NetBSD-6.0/newsmips/binary/sets/modules.tgz) = 3536ddd91df0d4d53e6da53bf30548ac60062349
-MD5 (NetBSD-6.0/newsmips/binary/sets/modules.tgz) = 4cefc39360426c683af0c3031403bd54
-SHA1 (NetBSD-6.0/newsmips/binary/sets/tests.tgz) = 8c653879bccb5f7b67536fb96f92fa52cf11e69f
-SHA512 (NetBSD-6.0/newsmips/binary/sets/tests.tgz) = 5cc47261708222b4fe1ca43d1dc014909df674db2c477c9d814e2af319e2c21c66555df78786ec48c08b21c4c8c1ddc8d815967ffaaceb625f61687df9ac46b1
-RMD160 (NetBSD-6.0/newsmips/binary/sets/tests.tgz) = 8712fce841356834ff6036bdcfe58dbb391ffd4e
-MD5 (NetBSD-6.0/newsmips/binary/sets/tests.tgz) = ccc445c6ba7fc49d4de4b0dcb26aefff
-SHA1 (NetBSD-6.0/newsmips/binary/sets/text.tgz) = 766d9d6d34c79c7be29da59f543f6e029090ecff
-SHA512 (NetBSD-6.0/newsmips/binary/sets/text.tgz) = d11a630ead4cf249224c0f887cf6c2ef347983e885f5657c44cc988733880ccfee735f36dd5558ca60ffffb5ea8dab042d016d3824d8e9116cda749516508624
-RMD160 (NetBSD-6.0/newsmips/binary/sets/text.tgz) = 53cfd7b3389f1b71430daad46ff3be2c692690a3
-MD5 (NetBSD-6.0/newsmips/binary/sets/text.tgz) = f0692f4de9721110ecf0e1ecac4bf1d9
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xbase.tgz) = 19fb5f83a2ef362388d812fbe3c4ccad858dd191
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xbase.tgz) = 4774d680e11097be0f6d8b9cdd2a296cfceefdf1c19d0e8188c742efb2603b253b46c2d01084c6bd5470e34ecc6dd81f502a97c9c69e02b9aca1af80f9d3bafb
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xbase.tgz) = b52fbd33962b06618a8334439f89a7114cb762a5
-MD5 (NetBSD-6.0/newsmips/binary/sets/xbase.tgz) = d9c670a2392dd2f58f041b18ecd32be6
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xcomp.tgz) = e99076dd0244130e9ae9ac14533df11f058aab3c
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xcomp.tgz) = 2869e7c2d397772612ce36217da0c8f7ab0ed5b18694d0620e789854dcd2fbc6763dab632614cb9df7be4c7697065db5f68e9e400fc2068a03e38d98709399b7
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xcomp.tgz) = af2372e9b8ba4ed8a4d8f951b9570e411be2dcf8
-MD5 (NetBSD-6.0/newsmips/binary/sets/xcomp.tgz) = cb05a7f616ecaa766d696b7ab5d9120e
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xetc.tgz) = 973a0c9b770b14e156ea2d999b0c155f8675e95f
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xetc.tgz) = 4298ae57e88d6a5853a8832cf06c6d294051708ffaff6e2fa28efd06c2a8cf99274f5d1be0bff31248d3d9d9ee7bcb2738fcc9b5a4f55a2f34246cf5e1bd3546
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xetc.tgz) = 4b9023581af4b378be8ce78fa812c832dae9f682
-MD5 (NetBSD-6.0/newsmips/binary/sets/xetc.tgz) = 8eee7c09a6b78148e9b1260abee79e53
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xfont.tgz) = 389d0d14a3b5ebbdf3f49b0c5bca3efcf7155a42
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xfont.tgz) = e246f6527bb91eecd3190cd9eb82157db0a0d868f95acd47bb292caea573405170156e37dfb50d3ec97b00ac7c50cf0893640945575638bd9f958cfbece4bd72
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xfont.tgz) = eab3db1a489e432867ce806385ed12e1b25165ff
-MD5 (NetBSD-6.0/newsmips/binary/sets/xfont.tgz) = 4030cc9fd13f8d3524a8c161715edc6b
-SHA1 (NetBSD-6.0/newsmips/binary/sets/xserver.tgz) = 2e0e1a1280e01a64615430396697d3a4cc4aabee
-SHA512 (NetBSD-6.0/newsmips/binary/sets/xserver.tgz) = e5c9d65657227d24b52db9d109c9a4993c5962c3f8171b1353709464a0ba18c99264bf3cd8dc53478692cf2a297f36bccf15519f1aa198cf1a6392e3557914da
-RMD160 (NetBSD-6.0/newsmips/binary/sets/xserver.tgz) = 82a04ae9c10abf44d00acaa3f97f99150e7dc607
-MD5 (NetBSD-6.0/newsmips/binary/sets/xserver.tgz) = 9f3edc37a2f786ee70d5f0e100105971
-SHA1 (NetBSD-6.0/newsmips/installation/floppy/boot1.fs) = d55e9f59aac50a141dbec353c4bc9586faa8d00d
-SHA512 (NetBSD-6.0/newsmips/installation/floppy/boot1.fs) = 659476e61e29371975130565ae2e343ad3bc9423a910ef0b08cffe41e87179020c5b2f42f98d351c9957655b67ded13cf6111835e441d2ddd39584bc1a57c7ba
-RMD160 (NetBSD-6.0/newsmips/installation/floppy/boot1.fs) = f3becca1f4c20eadf3e77ff4bcb84990a9e543f6
-MD5 (NetBSD-6.0/newsmips/installation/floppy/boot1.fs) = 992e9d201b2a7183a6f8725486e8f2d0
-SHA1 (NetBSD-6.0/newsmips/installation/floppy/boot2.fs) = 2c228b57a187bbfae507d67aae5d0faef2f308ea
-SHA512 (NetBSD-6.0/newsmips/installation/floppy/boot2.fs) = 72c6b63777f2171c852f15cfd2c04fd9b21a9cfc423542d0127012be6d5ca85ad15bb33a67b1fb28e1f07f2652f94ae2d2f0c0641c6e860c0ed50d9556eacc59
-RMD160 (NetBSD-6.0/newsmips/installation/floppy/boot2.fs) = 495d95dd6cdcbf0a0cdb07fb8500738e306dd970
-MD5 (NetBSD-6.0/newsmips/installation/floppy/boot2.fs) = 90827190455600b1692585932670fc44
-SHA1 (NetBSD-6.0/newsmips/INSTALL.html) = 3bba0333ef60ff85cbb905deb86171f67a7e7d35
-SHA512 (NetBSD-6.0/newsmips/INSTALL.html) = 4778fb087bc4c44b84fec903f4e00003a41cfa3675a2f712bba28b33773800ad6b7d546074787caff68fd34a885ed84e05a0183a4867bed9c3e881ab30c68c64
-RMD160 (NetBSD-6.0/newsmips/INSTALL.html) = 27d6089590736239f38e1b0638f0b1662465ada6
-MD5 (NetBSD-6.0/newsmips/INSTALL.html) = 5041c29c150843c89b4dfa0c1cea869e
-SHA1 (NetBSD-6.0/newsmips/INSTALL.more) = 91afcc03bfa9fd0c378f7d9d22ab81cfe214f36c
-SHA512 (NetBSD-6.0/newsmips/INSTALL.more) = fc99840a5b29382c2f54287ded48994162804002b6947d2fc1fe907a0674b3827c64fa52e2bd3de735f387e09627ea254820bcd142f0552374acd2c951b0edec
-RMD160 (NetBSD-6.0/newsmips/INSTALL.more) = cdb0bd00e8d126b4736b77688ca2ac9bcc330283
-MD5 (NetBSD-6.0/newsmips/INSTALL.more) = 0dd24b3ef2da6fb2fd0989edf90aecd5
-SHA1 (NetBSD-6.0/newsmips/INSTALL.ps) = 2e236b56c944116ec48df342a4a4ab1414be54c8
-SHA512 (NetBSD-6.0/newsmips/INSTALL.ps) = 22e6e7b9975ffcc75b2560ecc103ab0f3337c0e637fc0b13e73c52b8d726c5a7676f8eb60a931113d2ce9570ca78209008810495d6260b374c61aeb79bf1915a
-RMD160 (NetBSD-6.0/newsmips/INSTALL.ps) = 031019f4af07c2dbb384bbb76702d2a6da747a0d
-MD5 (NetBSD-6.0/newsmips/INSTALL.ps) = fe0ac420b2c0c7a4fba8bfbbc247c0fb
-SHA1 (NetBSD-6.0/newsmips/INSTALL.txt) = d2abcef4ce10c3f567350ad9de6370a0f972f3f8
-SHA512 (NetBSD-6.0/newsmips/INSTALL.txt) = a26df9df3950896c9fb77d728190516f1211b1630dff4969c651ad3f343acd9359a9a6251815c560a6e47071717c53b123d911776d5f5d6b8dee38c12d075381
-RMD160 (NetBSD-6.0/newsmips/INSTALL.txt) = f2ef263bdb545134c7dbadb4509ff94ecf14d84d
-MD5 (NetBSD-6.0/newsmips/INSTALL.txt) = fea6e65c9aac2b407af208e4f7272cf9
-SHA1 (NetBSD-6.0/next68k/binary/kernel/netbsd-GENERIC.gz) = 9f78ea3f1d4a4b1c07d0a25487b20560adcb7fab
-SHA512 (NetBSD-6.0/next68k/binary/kernel/netbsd-GENERIC.gz) = daae6643ef07004beaaa345b57182f2d2b69e990896734e18ec50ee925e17acf334da7a5478fa0fa38de4062fef3285582c9a4fe352759770e4cd9012d70d6f6
-RMD160 (NetBSD-6.0/next68k/binary/kernel/netbsd-GENERIC.gz) = 2dcc60a3c451aaf9303c328a8471775b83ae066a
-MD5 (NetBSD-6.0/next68k/binary/kernel/netbsd-GENERIC.gz) = d4502e039874ee01d7564f7572fa4789
-SHA1 (NetBSD-6.0/next68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/next68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/next68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/next68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/next68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/next68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/next68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/next68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/next68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/next68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/next68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/next68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/next68k/binary/sets/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/next68k/binary/sets/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/next68k/binary/sets/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/next68k/binary/sets/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/next68k/binary/sets/kern-GENERIC.tgz) = 86b352f48720312e04260ba1dcf2f6e7e9d31e25
-SHA512 (NetBSD-6.0/next68k/binary/sets/kern-GENERIC.tgz) = 602f5ac04b050c0462d21d4e50a9a8e5c794a3b4442b6df19370ab6dbd6839755bc61e2c7745f777aef417d5c1179ff4a2af52a5880d35eb20d1c5d3a580a844
-RMD160 (NetBSD-6.0/next68k/binary/sets/kern-GENERIC.tgz) = f625cea32a206f3738a72b5ec0b01d8485c7eccc
-MD5 (NetBSD-6.0/next68k/binary/sets/kern-GENERIC.tgz) = ff2d20b2f2b0a12231e405b582b61801
-SHA1 (NetBSD-6.0/next68k/binary/sets/base.tgz) = d68bfc49aa82b76a52007a927f1a7bac692aaf18
-SHA512 (NetBSD-6.0/next68k/binary/sets/base.tgz) = 4d2c20f0dcfa061e1a1176d34111225b6c8a94b0742141560ccdc986cd5311906967d06e4294a6f988bcea4cbc09d1a9607810960f2d0be35f4ab2895f68f112
-RMD160 (NetBSD-6.0/next68k/binary/sets/base.tgz) = 6d98b84ec87a909545f72526f63cc27d450865fb
-MD5 (NetBSD-6.0/next68k/binary/sets/base.tgz) = e40a7e78d87959c20f37bd937921383d
-SHA1 (NetBSD-6.0/next68k/binary/sets/comp.tgz) = eb3082aae89eb8720e91538fd100125c9e6a717f
-SHA512 (NetBSD-6.0/next68k/binary/sets/comp.tgz) = 8c695463b6ac0a403023068b670d04c7cbe50a9e3925e19896fddba7f409b2d142e9b2817bf18144d9bb55aefe2d7cd90c1242f9bdd6cea628332277d08f8520
-RMD160 (NetBSD-6.0/next68k/binary/sets/comp.tgz) = 81c05df1b3c2c6a72575a325b2c507081279a587
-MD5 (NetBSD-6.0/next68k/binary/sets/comp.tgz) = 11b81d6d2371e3b3123f0fc776526b80
-SHA1 (NetBSD-6.0/next68k/binary/sets/etc.tgz) = d7697b36fa1c6c814b0745d496709c177b43441d
-SHA512 (NetBSD-6.0/next68k/binary/sets/etc.tgz) = 9b4ed551eb36810109e30dee6273d5c18fc918686ba9cab5ffc4ab25a1763e645a179920e7d4ba56be3b15269425e38abf3237e1e6a788b369a4d26d59aa8a6d
-RMD160 (NetBSD-6.0/next68k/binary/sets/etc.tgz) = beadac2eb477aca072b36fa2587e46645e908d11
-MD5 (NetBSD-6.0/next68k/binary/sets/etc.tgz) = ebd0202a3d65b7a528b4854483ac669d
-SHA1 (NetBSD-6.0/next68k/binary/sets/modules.tgz) = 49e37041d779f3b282c12b3f41d876e4621914f2
-SHA512 (NetBSD-6.0/next68k/binary/sets/modules.tgz) = c8f22b3d92b7089aaf3b5fe563a9d0cbc7124b6e402e53b458881c123468e51b5b4f92d8e8b1a5c0f7ff19fc032bdd012db8dfd801be6330e96e0e79917df08a
-RMD160 (NetBSD-6.0/next68k/binary/sets/modules.tgz) = 093e67a0796abb445f0f3b7f6bbfa42a68dff403
-MD5 (NetBSD-6.0/next68k/binary/sets/modules.tgz) = dcf44be798ece88e148faaabe70e2251
-SHA1 (NetBSD-6.0/next68k/binary/sets/tests.tgz) = 28b7d959516205c1231c7f756614c776fdba9576
-SHA512 (NetBSD-6.0/next68k/binary/sets/tests.tgz) = b704bcbe14b260067ea704350ff9b49d49e040a6a87597211de8cea7e05039054c4f4996bd96829a9acc1a97320b3fa3f1ca2300717365e2c13fefac4e13ec11
-RMD160 (NetBSD-6.0/next68k/binary/sets/tests.tgz) = b7ad8dc285efaeb99c3d1384dada9b20cc7104bb
-MD5 (NetBSD-6.0/next68k/binary/sets/tests.tgz) = 45d4bf99be70595e367459256c139b65
-SHA1 (NetBSD-6.0/next68k/binary/sets/text.tgz) = e079bed4ddd9e37cd0cb2f514823f81de9200669
-SHA512 (NetBSD-6.0/next68k/binary/sets/text.tgz) = 3f66684ea0cdaaa433f52dc40eb6776091d19e5f53c87c3fa888ceaef29524dcd7b5c08ce8f08df94db7f039026dfe60a963d23f888bdeab70da4bf71592b122
-RMD160 (NetBSD-6.0/next68k/binary/sets/text.tgz) = 692b64c1a4e521caa76fdc109175a636ef4f9d21
-MD5 (NetBSD-6.0/next68k/binary/sets/text.tgz) = ea58b70eb622e2bc8fb610431f9f27c4
-SHA1 (NetBSD-6.0/next68k/binary/sets/xbase.tgz) = 5e093e4987d3ef6e66dee1dbf5d2c2781a7be759
-SHA512 (NetBSD-6.0/next68k/binary/sets/xbase.tgz) = 9bf75e2feb514bf47ead4151dfc44e0bd8361bd2155bdd7f5f5bda16c2ce60edef88cfbfe054161af32ea2804ccc5903b5ecc8a4270b2d19d6e864c7df776ef7
-RMD160 (NetBSD-6.0/next68k/binary/sets/xbase.tgz) = 6c8fe359b16a5d6d7ab318ad8970b36b3a9d8b41
-MD5 (NetBSD-6.0/next68k/binary/sets/xbase.tgz) = 4dc8195a284c6ff792f07b0279a1ffee
-SHA1 (NetBSD-6.0/next68k/binary/sets/xcomp.tgz) = 6248c1a2455726a172e7d41ad3b71396d1569c27
-SHA512 (NetBSD-6.0/next68k/binary/sets/xcomp.tgz) = 03272ed1984404a7ed8d6753aae6fd2797b82da0f856173bff109dd46909561af865acf81ec8007e8e95794d41e49caa4ffead9d0f5a304e4fe3a627fc62b5ca
-RMD160 (NetBSD-6.0/next68k/binary/sets/xcomp.tgz) = a6fd52049b8fb32c457db212ea0b0f04ae8837f6
-MD5 (NetBSD-6.0/next68k/binary/sets/xcomp.tgz) = 1e5c017075bcb0ddc800674737475134
-SHA1 (NetBSD-6.0/next68k/binary/sets/xetc.tgz) = fc7edd9e51673c25587253ccfa05b06556554596
-SHA512 (NetBSD-6.0/next68k/binary/sets/xetc.tgz) = 6d1f1584a7dbf8ddc3695951796b3951ef5fcae7176c93e5992aa84618b1a935d28baf14dac468cfd50e084414978e824054e08d30b3761e2467aecaa8a2d5cc
-RMD160 (NetBSD-6.0/next68k/binary/sets/xetc.tgz) = 287ef7ae8028b2cdfdd081f19a387900bcb49b37
-MD5 (NetBSD-6.0/next68k/binary/sets/xetc.tgz) = 9cc9fc5b70004b4e532fc745ac7c07f8
-SHA1 (NetBSD-6.0/next68k/binary/sets/xfont.tgz) = 66f50766e91abe745da27688863877f1002907c7
-SHA512 (NetBSD-6.0/next68k/binary/sets/xfont.tgz) = 3f1fd3be74c0971fe2217fb8e39f6ca693d07b5a272b3eff1028ee2f012ec2c04239ec90cd90846553e3a066b58fa957d0ab1d3695faaf0063a6c947165e63f4
-RMD160 (NetBSD-6.0/next68k/binary/sets/xfont.tgz) = 185771ae1f0ed1ca9d8e7025f402bb41c5a14519
-MD5 (NetBSD-6.0/next68k/binary/sets/xfont.tgz) = 57e25cb12fb7ae0b3cd06def9e685b7d
-SHA1 (NetBSD-6.0/next68k/installation/boot) = 1678cf659734cb8f7d5d034bf1ce6aa506278920
-SHA512 (NetBSD-6.0/next68k/installation/boot) = bf027e98b6c1a81300dfe506c084a9777f4f5f9b4078b35d61ea0a39ff73a5d9abe526f423164ed3c076ce7a33cedf460111142f24861c142a5b2c6485881ab9
-RMD160 (NetBSD-6.0/next68k/installation/boot) = 8d3d5e3786b272a9dda7ca19185e3802639f7f6b
-MD5 (NetBSD-6.0/next68k/installation/boot) = ec7ee9f5d5be157c6a9a56ac77835f47
-SHA1 (NetBSD-6.0/next68k/INSTALL.html) = aaf1f7407874cf9d7bdff5b434a74e298b7dc52f
-SHA512 (NetBSD-6.0/next68k/INSTALL.html) = b2d952c916578af512363fa118f81950b95b545aac62474194ef2ed4df3fc4fd9f334f7b3171335f7669c8d0992c37140daa86bab57dcb0020dfa39abfcc4ecd
-RMD160 (NetBSD-6.0/next68k/INSTALL.html) = 52a08c6bd446a00228899639e98aeb8327f100ee
-MD5 (NetBSD-6.0/next68k/INSTALL.html) = f08b6811f0f572819de3b455714166b7
-SHA1 (NetBSD-6.0/next68k/INSTALL.more) = dced1147a6dc54b1365d13a49d0bf57d596653aa
-SHA512 (NetBSD-6.0/next68k/INSTALL.more) = 5136e7a75ef6c3a39ca15112414c73c023c560dfbc09d4da60e6435112a4108c192f25b200f0a149a9eafdff3a74001630f972f58dcc2a9d18174286c906b680
-RMD160 (NetBSD-6.0/next68k/INSTALL.more) = fd826a26af8b89375881dc361a7426b7841baa52
-MD5 (NetBSD-6.0/next68k/INSTALL.more) = 0d480ba3bfd38cc17c62d387a740111d
-SHA1 (NetBSD-6.0/next68k/INSTALL.ps) = 47541be31baefad1f76a45e45b2050cda159953f
-SHA512 (NetBSD-6.0/next68k/INSTALL.ps) = 297a4fb8e5242a764b721a3bea309d123d3f71b67aec903926d5118b42831ba054242783fcbdc19520609ac06f81b733785b5952e24ae23218219046922f8f8a
-RMD160 (NetBSD-6.0/next68k/INSTALL.ps) = 56423276a2db90876c067eb51b7c19f1341d261b
-MD5 (NetBSD-6.0/next68k/INSTALL.ps) = ed71185d0510303cbb5d8ff681dcfaf5
-SHA1 (NetBSD-6.0/next68k/INSTALL.txt) = 3d70ff39023294025c590934bdaca3fce5dd33bd
-SHA512 (NetBSD-6.0/next68k/INSTALL.txt) = d0485c5d3587022d986a53345ed78f49130ef54070d0c45a7812d57400402079855d6cc72401579d1185d2dbeb5e5846efebfa50fda484cc5a1ac719ca7b706a
-RMD160 (NetBSD-6.0/next68k/INSTALL.txt) = bd984eb4c13e1ec872ee2517b72c13ac7e90e090
-MD5 (NetBSD-6.0/next68k/INSTALL.txt) = 0cf50370809ab3ff52dc710474d37edb
-SHA1 (NetBSD-6.0/ofppc/binary/kernel/netbsd-GENERIC.gz) = 31cf98d9ea175b5ea6fe09455217e660d44f1973
-SHA512 (NetBSD-6.0/ofppc/binary/kernel/netbsd-GENERIC.gz) = 22e1ac76e1fa230f69485f53ac23186a97562a1088b1a99979d9d446dcef8a863f1bd63eb6bf16ebf990b40b161fb75025890d9d52474b82cdb3d497e2056b2a
-RMD160 (NetBSD-6.0/ofppc/binary/kernel/netbsd-GENERIC.gz) = 1ade658130f4e40d57cee2ab641234c1e93c3f01
-MD5 (NetBSD-6.0/ofppc/binary/kernel/netbsd-GENERIC.gz) = ae8374ac0ba9ca59c6068561dcad1ba3
-SHA1 (NetBSD-6.0/ofppc/binary/kernel/netbsd-INSTALL.gz) = 0b815e688d07caf3d93190562bcd53f3057ec1b6
-SHA512 (NetBSD-6.0/ofppc/binary/kernel/netbsd-INSTALL.gz) = 43255a25b3044320db3d12f474a70920efe93a52aad3351933ae80bd079a8f93a866fa1c939a92d075161822066dc76ffe314feaf493a783ca51058eba9e96e0
-RMD160 (NetBSD-6.0/ofppc/binary/kernel/netbsd-INSTALL.gz) = 87995ce3c896b4ffcef1eaeef9c7ff27e8c5446f
-MD5 (NetBSD-6.0/ofppc/binary/kernel/netbsd-INSTALL.gz) = 008fbd36266fbb4ef45c3c289d07dbd3
-SHA1 (NetBSD-6.0/ofppc/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/ofppc/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/ofppc/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/ofppc/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/ofppc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/ofppc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/ofppc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/ofppc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/ofppc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/ofppc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/ofppc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/ofppc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/ofppc/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/ofppc/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/ofppc/binary/sets/kern-GENERIC.tgz) = 7ace360c931ac41952447fce2d6241a8393a7b3c
-SHA512 (NetBSD-6.0/ofppc/binary/sets/kern-GENERIC.tgz) = 9c63f0169c8bf1282c54a5ae3b1396376b69a23b6ac881859a304a9d21aad45f64d0998eae3399cc397489a1c3e1b7f52cdce0ee806c160ae5da3287b113c00b
-RMD160 (NetBSD-6.0/ofppc/binary/sets/kern-GENERIC.tgz) = b96e84c0a6d945475f6523d73cabb42ff80caa46
-MD5 (NetBSD-6.0/ofppc/binary/sets/kern-GENERIC.tgz) = 2153bc142bb6f9067287344b5d3703e6
-SHA1 (NetBSD-6.0/ofppc/binary/sets/base.tgz) = 48aef3545f49ee86082480f6712e6c7df6c1c82f
-SHA512 (NetBSD-6.0/ofppc/binary/sets/base.tgz) = 580ad38769fc64e5f50a59f726d13d21625392459a03633c4908fbaf16e08715032dd10fbee9f4efe5261beb24169dcdaf86f11d20f2e2bfc7af22f16ce5b10c
-RMD160 (NetBSD-6.0/ofppc/binary/sets/base.tgz) = 93fe246dba1352ba0bc5ef955094069e82e777cc
-MD5 (NetBSD-6.0/ofppc/binary/sets/base.tgz) = 6a0ea91d58c236cd1d72963bee61dbc8
-SHA1 (NetBSD-6.0/ofppc/binary/sets/comp.tgz) = 7d553fd5460fd823ee474377ad7e4e4a57796d04
-SHA512 (NetBSD-6.0/ofppc/binary/sets/comp.tgz) = 17dff29a91c71c4fcabe616595144201b999b75d56033109f24dfa89e5653ea24890e2657fc007cc0bcbceb749213eb99db5d268db8c96f41f1c2ec203e951ef
-RMD160 (NetBSD-6.0/ofppc/binary/sets/comp.tgz) = 79001f2a220166711cf3e076c137d9944cb72d07
-MD5 (NetBSD-6.0/ofppc/binary/sets/comp.tgz) = bb52657afeeafa0a04fc52d5b96130cb
-SHA1 (NetBSD-6.0/ofppc/binary/sets/etc.tgz) = b19a807890c2859c0c5dfcc27d97c7b94703ba1c
-SHA512 (NetBSD-6.0/ofppc/binary/sets/etc.tgz) = 157110603a432bdf8da99f467e263037d2683372b37c2fb9e8ba7a25a5ed6e44b6d62aa3d60464ea3d0dd101d55b85ff951afde528cc0f61158892a3b379bc90
-RMD160 (NetBSD-6.0/ofppc/binary/sets/etc.tgz) = 8e67db3042b34b9e0ec19853d0209996cb18cc22
-MD5 (NetBSD-6.0/ofppc/binary/sets/etc.tgz) = 7c3ef92dc32ef4a24a29fd071fad94f5
-SHA1 (NetBSD-6.0/ofppc/binary/sets/modules.tgz) = 976ee92c542c431c7eadaf77dc3267c54643aef9
-SHA512 (NetBSD-6.0/ofppc/binary/sets/modules.tgz) = eedd03d73c348500f3df270f002d65d16cdc9f5318ecf14ebc8c4e27af6aff26701d985e5c5a47ed9f37359fb119d61ebe64cbcd726bb5ea7a0b2947aa312a8a
-RMD160 (NetBSD-6.0/ofppc/binary/sets/modules.tgz) = 03d76ba89e00f988e16e0a5cd6798fca65852c82
-MD5 (NetBSD-6.0/ofppc/binary/sets/modules.tgz) = 132d39b3a365d6ecd924789660a7b72c
-SHA1 (NetBSD-6.0/ofppc/binary/sets/tests.tgz) = f643b7607751a3355cc6e9e8d26fcc1bfdd14a22
-SHA512 (NetBSD-6.0/ofppc/binary/sets/tests.tgz) = 0a517f2c914e449c0bedb3be5e96e76c369be5be270ad8ba2aee4b96f3a3d7afce2bb56de0eef54d97b1194101eb24331dd202605eb58e648b3f79f04b44d96a
-RMD160 (NetBSD-6.0/ofppc/binary/sets/tests.tgz) = aca5ea7884341e0dc0f4e06d552b908550cb7dde
-MD5 (NetBSD-6.0/ofppc/binary/sets/tests.tgz) = d8c47bef7caa4afa0ea7967d42a59cfa
-SHA1 (NetBSD-6.0/ofppc/binary/sets/text.tgz) = 010dbafdbd84074ed3acf0bacea61b34dad4005d
-SHA512 (NetBSD-6.0/ofppc/binary/sets/text.tgz) = a8a4fe56016f47a03dd2e23cfb5368111cc7734a7a9dba9ab42081b609c00ac812ec8e73eb75b5dc2f81b847f0bf782257834e09603aac858c8efe1e6755eaf8
-RMD160 (NetBSD-6.0/ofppc/binary/sets/text.tgz) = 263b72d30191910c092ab984458cd1442ba67f3a
-MD5 (NetBSD-6.0/ofppc/binary/sets/text.tgz) = a6dfbc450a9aec79555f52694a2971f0
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xbase.tgz) = 292a1ad5d516609f5c3c5e78e83f4f200f967775
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xbase.tgz) = b3c082fb1fe52edc65fb728d9347d51285a761ba8bbb56cf84744f70614c2c1207a8b48c49d5ad598fc09745f3a900ca2bb08cff4381be8f007d6b89faf7c058
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xbase.tgz) = 954ba03beb3cc9b5064c0d9e9008358cf9c490f5
-MD5 (NetBSD-6.0/ofppc/binary/sets/xbase.tgz) = 410d993f39451d776e2c9d9ca55414ac
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xetc.tgz) = b83db52f87a7a2ba08d22f29249f2b0d8af31028
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xetc.tgz) = 541ca16e25a0cd271b490773e043e6d66d9d704f4d4bd22458d5f3c4f76f23190264201a80cd57b567d8410ca2944a36e10868c4e2916300d978949d78293b33
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xetc.tgz) = de0ae01a1d264465ca58a678c658f75d2844d04a
-MD5 (NetBSD-6.0/ofppc/binary/sets/xetc.tgz) = d60b94274347e3f9073b80da9f5dd874
-SHA1 (NetBSD-6.0/ofppc/binary/sets/xserver.tgz) = e8fd963e80c60b8a85a284484d0d78463038f413
-SHA512 (NetBSD-6.0/ofppc/binary/sets/xserver.tgz) = ca88d3ce0ccd0e82636ae59d4ea4acba9d29ba6fb51be52c6d8de5986d7b037e6062d00bc45390783efd3089de3eabbdbf565929936af7f46c207b705c33176f
-RMD160 (NetBSD-6.0/ofppc/binary/sets/xserver.tgz) = a6b1345264d3fcddf0ff72b3005dd71053aba0f5
-MD5 (NetBSD-6.0/ofppc/binary/sets/xserver.tgz) = 8150c6dfee587ce36ff31c34a1929e29
-SHA1 (NetBSD-6.0/ofppc/installation/netboot/netbsd-GENERIC.gz) = 31cf98d9ea175b5ea6fe09455217e660d44f1973
-SHA512 (NetBSD-6.0/ofppc/installation/netboot/netbsd-GENERIC.gz) = 22e1ac76e1fa230f69485f53ac23186a97562a1088b1a99979d9d446dcef8a863f1bd63eb6bf16ebf990b40b161fb75025890d9d52474b82cdb3d497e2056b2a
-RMD160 (NetBSD-6.0/ofppc/installation/netboot/netbsd-GENERIC.gz) = 1ade658130f4e40d57cee2ab641234c1e93c3f01
-MD5 (NetBSD-6.0/ofppc/installation/netboot/netbsd-GENERIC.gz) = ae8374ac0ba9ca59c6068561dcad1ba3
-SHA1 (NetBSD-6.0/ofppc/installation/netboot/netbsd-INSTALL.gz) = 0b815e688d07caf3d93190562bcd53f3057ec1b6
-SHA512 (NetBSD-6.0/ofppc/installation/netboot/netbsd-INSTALL.gz) = 43255a25b3044320db3d12f474a70920efe93a52aad3351933ae80bd079a8f93a866fa1c939a92d075161822066dc76ffe314feaf493a783ca51058eba9e96e0
-RMD160 (NetBSD-6.0/ofppc/installation/netboot/netbsd-INSTALL.gz) = 87995ce3c896b4ffcef1eaeef9c7ff27e8c5446f
-MD5 (NetBSD-6.0/ofppc/installation/netboot/netbsd-INSTALL.gz) = 008fbd36266fbb4ef45c3c289d07dbd3
-SHA1 (NetBSD-6.0/ofppc/installation/netboot/ofwboot) = 56bb70527f572ae12667a4d9dc71027032602d26
-SHA512 (NetBSD-6.0/ofppc/installation/netboot/ofwboot) = d137aad957d917f4db49ad9b912cf794d5ba9e52ac0f0d1926599dcac166df97c5b81292247b62d15a495134d4c9967ba777b0570701b3340021dcac293ab2d2
-RMD160 (NetBSD-6.0/ofppc/installation/netboot/ofwboot) = 5a6f580e7c000543b09dc7590555ce944b7f2df1
-MD5 (NetBSD-6.0/ofppc/installation/netboot/ofwboot) = 139a6e28174158a78719ab4e67de40b5
-SHA1 (NetBSD-6.0/ofppc/INSTALL.html) = 70ffc237a74825aeff35c638c9dd33b10334c09e
-SHA512 (NetBSD-6.0/ofppc/INSTALL.html) = 5df9959e93527b0f53d3866b15fcac4dbce2edd6a1bff082e588348ada3767bd0ca45d99089540fde08ecc73b8c8846ca7a046ada5f1f1072d6cd1e6c3268497
-RMD160 (NetBSD-6.0/ofppc/INSTALL.html) = 3718a3b3de1edc4d81cc61c88146e69d8b126266
-MD5 (NetBSD-6.0/ofppc/INSTALL.html) = 4a16acd4059c24dbcf1ccab96be7928c
-SHA1 (NetBSD-6.0/ofppc/INSTALL.more) = 14b22fc68257222ce1d15d02554588760ce4fc62
-SHA512 (NetBSD-6.0/ofppc/INSTALL.more) = e0c15cc5760ad5087d58c7659e8692b18fa805b6df85a7965ce142bb7506d3105c1dea0c7acdecfc51fa63f857dc959e25c74fa0ee871417670e013f4c2b2a1c
-RMD160 (NetBSD-6.0/ofppc/INSTALL.more) = b726d0dd772cab274c9b2f6f484d5b1903151827
-MD5 (NetBSD-6.0/ofppc/INSTALL.more) = 40e2acf64e90023938d03f0ff945ab0f
-SHA1 (NetBSD-6.0/ofppc/INSTALL.ps) = 16a078ed4ada6fe71e1d5939bacd3a60c10cefbd
-SHA512 (NetBSD-6.0/ofppc/INSTALL.ps) = 1d9815a162a77d91aebbfd11e0fe6d386c24be9e734683a6eee3cc49e059e8c4c9e559d00c3bfdbd3ceaaf885c11deb5c985ab4de41f1e1b1c9c5b037d300ec5
-RMD160 (NetBSD-6.0/ofppc/INSTALL.ps) = 83f80393d6bd7845dac2c2f789b14104b5ed3b9e
-MD5 (NetBSD-6.0/ofppc/INSTALL.ps) = 9ef011b3eea954489d1e03261175f278
-SHA1 (NetBSD-6.0/ofppc/INSTALL.txt) = 0703c2fc0836a815f8a23c9e295482feced08667
-SHA512 (NetBSD-6.0/ofppc/INSTALL.txt) = e5a59c4554e4dad54c4de8af3ef1fc051a3ed6ddcca88fe60b0f1c5e52c75507268a0cd154482fd7f8633ef0b6de5fa9052334adb93bc787e0f45db400018aea
-RMD160 (NetBSD-6.0/ofppc/INSTALL.txt) = b4b1e1c493973acc61f5280eec83fd1a4b386f9e
-MD5 (NetBSD-6.0/ofppc/INSTALL.txt) = 167ec8dd0f2430f3baafba98c15b0b77
-SHA1 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.ecoff.gz) = c3341e74bbfc424f067743c23369e7d4de2320d8
-SHA512 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.ecoff.gz) = 902237dd2bac97bbf8bc0d70e933307897e375cf760f90531ae39ff8f9abaf1c70091d61678e56448b46d060919eb93b052e0bdcba34482b12174855bf29a941
-RMD160 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.ecoff.gz) = 12abc208e6d943a92255fa99934e2fbdd98b86d5
-MD5 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.ecoff.gz) = 3a5c93ed6aedf91145618578c0283312
-SHA1 (NetBSD-6.0/pmax/binary/kernel/netbsd-GENERIC.gz) = c673249c82581fc220eeab9db4826ae70a879f7d
-SHA512 (NetBSD-6.0/pmax/binary/kernel/netbsd-GENERIC.gz) = 28c33a6cbb2cb4ad53e3e780c74a903ee93a6350da5a36c0232a57e690b80caf1053dc2bad1badd5631abeb20dbfbd223413762bf576db7363a3bd07aa91ddee
-RMD160 (NetBSD-6.0/pmax/binary/kernel/netbsd-GENERIC.gz) = 1c56f35974b50c40595fb19a763e6e13a052136c
-MD5 (NetBSD-6.0/pmax/binary/kernel/netbsd-GENERIC.gz) = 27f93c549aa40bae7bae47978622eb2c
-SHA1 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz) = af7b35f9bea1761095521088a9bad8d6122565c9
-SHA512 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz) = 506859e85d0266360f83d3a7af1deb8f9a84c8f1bbab10c1bd8b9b43bdf8ff7056629450f8aff2ed6f3424ff2034cd36e21144bceaaac6048fe54f58982dfa8f
-RMD160 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz) = 71b182d23dfaa77e92597e840c0d5cb502b9ff7b
-MD5 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.symbols.gz) = f70b79efeefcd03ef2b47a6d61b723c8
-SHA1 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.gz) = f22aa49d239f1c2b49fc2779dbc71b79d6470468
-SHA512 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.gz) = 82136634c9a3ea07a6eb23ad3e6d4214d796f54d406de73cd23f0da45a3872bae0f7f120ddb67aab0da05ef88feb21bb63ec1adf880469ee5d4eda2e32080732
-RMD160 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.gz) = 351fe6fec563003dcb4a0045c740ba3f2fcb73ad
-MD5 (NetBSD-6.0/pmax/binary/kernel/netbsd-INSTALL.gz) = 50f2b444f3462f71810f3c93b47083ff
-SHA1 (NetBSD-6.0/pmax/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/pmax/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/pmax/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/pmax/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/pmax/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/pmax/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/pmax/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/pmax/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/pmax/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/pmax/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/pmax/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/pmax/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/pmax/binary/sets/kern-GENERIC.tgz) = 1ae699dc77ef033860c3fcc0df198c6ec15bf312
-SHA512 (NetBSD-6.0/pmax/binary/sets/kern-GENERIC.tgz) = 1a29fbe70596378ab0f543dd010c24ca327822d743152ce0405eb0e4ab268224b91d346d23b9ee1eec706b4cbe88ccdea27cb6a9b115ce9ddcdaced115a58682
-RMD160 (NetBSD-6.0/pmax/binary/sets/kern-GENERIC.tgz) = 5edbc95d6df7a073b545902862a9e012a981b36b
-MD5 (NetBSD-6.0/pmax/binary/sets/kern-GENERIC.tgz) = d9d9dab85e423b5953eb17bdf8072375
-SHA1 (NetBSD-6.0/pmax/binary/sets/base.tgz) = a7e09afd631257929bbc0a4c6705fd56cafdda30
-SHA512 (NetBSD-6.0/pmax/binary/sets/base.tgz) = 8313b9e6146645955a135e9f9c69b90688f9011ef4087a7911e842ff13802150347ac4e7e9b3f60313a06300e90e93c192910741fd427705709be5f669a45701
-RMD160 (NetBSD-6.0/pmax/binary/sets/base.tgz) = 52eb2bdd47d2a4ae8ac2b780e70006dcc79f4cf6
-MD5 (NetBSD-6.0/pmax/binary/sets/base.tgz) = 3b726d62e4341637cf824c141cdc362c
-SHA1 (NetBSD-6.0/pmax/binary/sets/comp.tgz) = 9cc5684de31ac3b6c086f3716926eccbfaec6191
-SHA512 (NetBSD-6.0/pmax/binary/sets/comp.tgz) = fbead7650935dcbea46ef3e11ef03468287b0461cbb70b51e330e641dd7e246bd602bc92935980e3e8ea8100e8ea487906763fc615e477462a9644201a7f616f
-RMD160 (NetBSD-6.0/pmax/binary/sets/comp.tgz) = def96b7d151cc9405fe72c51f7ca95b552f3bd46
-MD5 (NetBSD-6.0/pmax/binary/sets/comp.tgz) = 93a3bdd6f9461cc642955b749cddb59a
-SHA1 (NetBSD-6.0/pmax/binary/sets/etc.tgz) = 73127a1dcbea90c9029538e87773bc7846ac2016
-SHA512 (NetBSD-6.0/pmax/binary/sets/etc.tgz) = b96b30df1576538bcbaddcf471cd4d87258c06d199077d35d4ea37dfc9c3f388bd62c1ea8c3634ee501d6f28409bd966b791bf3eef8741ca2234c12e1101008a
-RMD160 (NetBSD-6.0/pmax/binary/sets/etc.tgz) = 44ef8ce24cdd12aa5af0cbbf700abeef900e12e5
-MD5 (NetBSD-6.0/pmax/binary/sets/etc.tgz) = 0dd976e6a6c855f02a86fc0fb624b4af
-SHA1 (NetBSD-6.0/pmax/binary/sets/modules.tgz) = 9ed1e0f57d9ee14dc3850e541f0b95132a3048c2
-SHA512 (NetBSD-6.0/pmax/binary/sets/modules.tgz) = 7a367e78224326f43584bb7cfa1aedd74763ccfca9d6abc8587882ecb1b8276851ead5ff1afbe9cd16accfd0d415e26db6604d3a9c3a1bac78d94107a57d033b
-RMD160 (NetBSD-6.0/pmax/binary/sets/modules.tgz) = cff6f3fc309012a3f45c047ea5238f83432235a5
-MD5 (NetBSD-6.0/pmax/binary/sets/modules.tgz) = 825fa6d6cac00e2629ec059fcb68008b
-SHA1 (NetBSD-6.0/pmax/binary/sets/tests.tgz) = 802f716b73250eee2696cac4b6e3395833c0237d
-SHA512 (NetBSD-6.0/pmax/binary/sets/tests.tgz) = f56cba629167f2f679a460679faaf566f4baf053d644a71fd70fa3041aa592aa0a53b98876ce474b48f46a582401a882161005360fdddc49246f094680b1029f
-RMD160 (NetBSD-6.0/pmax/binary/sets/tests.tgz) = a9b17f97265bdfb69402190690d77306f42ecb6b
-MD5 (NetBSD-6.0/pmax/binary/sets/tests.tgz) = 54dd7a96d4abee24bb0019a846d77825
-SHA1 (NetBSD-6.0/pmax/binary/sets/text.tgz) = a0b59e7fb204b9db40df7edda528e8ca8b4e3fd6
-SHA512 (NetBSD-6.0/pmax/binary/sets/text.tgz) = fb7c0d5cb17bb2ef1ffeefa5791bab7932a05e33cd064f279d99eebe07a52f1420aa64a8c6acf191efacbfd130509fb427e6d5d8f14c042b3c0e5e285282592b
-RMD160 (NetBSD-6.0/pmax/binary/sets/text.tgz) = b0495549753b7c3a8abb342045ef4f65e7b640d5
-MD5 (NetBSD-6.0/pmax/binary/sets/text.tgz) = 9f9e6d5b8f9dbb70b845a9aba07ffff4
-SHA1 (NetBSD-6.0/pmax/binary/sets/xbase.tgz) = 99d83d866f2f15b6030b0533990e012ab59b1f46
-SHA512 (NetBSD-6.0/pmax/binary/sets/xbase.tgz) = 238db55892d9cbb0bd5dacb225a16e694c79af2fe461f06563a65c5d2c5b3abfc823ab26f23c54bc1514568018726baab0258aac0e52ccf7615d59c2a6ef324a
-RMD160 (NetBSD-6.0/pmax/binary/sets/xbase.tgz) = 16560205f7564558bc22495116ace64618834133
-MD5 (NetBSD-6.0/pmax/binary/sets/xbase.tgz) = 384d33f9a8ec5c7bc8e104869e3e493a
-SHA1 (NetBSD-6.0/pmax/binary/sets/xcomp.tgz) = 6b6b8d6b522b0546a13a304195765526158f6eb2
-SHA512 (NetBSD-6.0/pmax/binary/sets/xcomp.tgz) = 37af51b256f03e8b4c61d4c67724cead53115ccbfda7d597f3b00a020bd8f4c1fff4f6206e5fe8246e0b3fae50c7dc1df313858670a6e1729b1155e0f97e9b23
-RMD160 (NetBSD-6.0/pmax/binary/sets/xcomp.tgz) = 91d9a2cecb3955beabb71191b73d3586f2c370bd
-MD5 (NetBSD-6.0/pmax/binary/sets/xcomp.tgz) = 9028e22a82276249cc188f83101af806
-SHA1 (NetBSD-6.0/pmax/binary/sets/xetc.tgz) = 2171c5c0cb3143aa83fb8e55d4d98fd87d3e556d
-SHA512 (NetBSD-6.0/pmax/binary/sets/xetc.tgz) = a63407a7d884ea60761ccdee9279c37b790aa08defced01410786e0e020a63b5a4e4cfd503a0ef09e555d04a98a99dbfcfb087c476070771f8b5b5a205b4495a
-RMD160 (NetBSD-6.0/pmax/binary/sets/xetc.tgz) = fa4c1f7437db71fb1a3122cc366591b39b00fa07
-MD5 (NetBSD-6.0/pmax/binary/sets/xetc.tgz) = be3b5f617ddd47650cf9423451320c4a
-SHA1 (NetBSD-6.0/pmax/binary/sets/xfont.tgz) = ca16714159668bc20017cbb9a81fe3746171e383
-SHA512 (NetBSD-6.0/pmax/binary/sets/xfont.tgz) = 077ab3a7540abb8d4039b7f017ff52dcb5aae2ba5a984dd12b04d22908863cc60db8aa67b5f772a584aabbe05a74426534eeced9f323aa07c9225c8333c41f3f
-RMD160 (NetBSD-6.0/pmax/binary/sets/xfont.tgz) = 33beb97b3267941786413a7c5624d78297f5ccf6
-MD5 (NetBSD-6.0/pmax/binary/sets/xfont.tgz) = c262ee8846a85c1e5b00a8ecbe754dcc
-SHA1 (NetBSD-6.0/pmax/binary/sets/xserver.tgz) = 86332fccabc2c7b8e7ef7f8fa9eebc2f22c8afba
-SHA512 (NetBSD-6.0/pmax/binary/sets/xserver.tgz) = e02ed6aa6333bd8941d02f15a3797f862f3fe47b5afce08d60021a06d5ed9db56e8bf802920e8b7614ff5e3127706b195ab9a678710b7b6afb6b70e0f3a7f636
-RMD160 (NetBSD-6.0/pmax/binary/sets/xserver.tgz) = 4bc06df7b2012be80b61ef6b9860a4698b815353
-MD5 (NetBSD-6.0/pmax/binary/sets/xserver.tgz) = 5dd0ae8362aa55b5c7ab207d771834f3
-SHA1 (NetBSD-6.0/pmax/installation/diskimage/diskimage.gz) = 013da364eedff1ef317fe4933205a1f6e45a7520
-SHA512 (NetBSD-6.0/pmax/installation/diskimage/diskimage.gz) = 9a415703b540ea67b99a367bf8a2dbd73c18fc1aff0ee2b3ffedb858d09cfa1b3e7bc62a654061963394f3540c50259ad343edfc41518fa444332d7ab9ea5e8e
-RMD160 (NetBSD-6.0/pmax/installation/diskimage/diskimage.gz) = 3c7faef744c1c309dbad390121852ca1ad8ed0f1
-MD5 (NetBSD-6.0/pmax/installation/diskimage/diskimage.gz) = 2e40475c5dfbfa75ac856a0a02f4afd7
-SHA1 (NetBSD-6.0/pmax/installation/miniroot/miniroot.fs.gz) = fb7b259d7649170e5eaa31217417b6e75291529f
-SHA512 (NetBSD-6.0/pmax/installation/miniroot/miniroot.fs.gz) = 3ef73219ab90c01753bf53dc325b64e26b8b41a7cd78ff1fcb85c4d27ab44b2979b6d312c17383ae9f8c3d24c968f5b896fd04a0679e64a47ea859b578022722
-RMD160 (NetBSD-6.0/pmax/installation/miniroot/miniroot.fs.gz) = 4f8d0f80c84f93b4ea5d9025c4fd3227c2880641
-MD5 (NetBSD-6.0/pmax/installation/miniroot/miniroot.fs.gz) = 3e2cc1da2be2c9ae099bd488393a9904
-SHA1 (NetBSD-6.0/pmax/installation/netboot/diskimage.tgz) = de0f5cd5da27716499b56ae61afe5ca6a8bb0839
-SHA512 (NetBSD-6.0/pmax/installation/netboot/diskimage.tgz) = 0283bc16d8fef0704b0d90bda6213d05e63271053ce59cb20d6cf0dc3a76bb8ed711e968de5a194d2d900becf83eb4fccbd82c22ed868c9a79b7cfbbc43acef7
-RMD160 (NetBSD-6.0/pmax/installation/netboot/diskimage.tgz) = a46875bffd27ea9d145b5e5f2a286a49c5b93cdb
-MD5 (NetBSD-6.0/pmax/installation/netboot/diskimage.tgz) = a491535a6424e97d5c52207404922ba9
-SHA1 (NetBSD-6.0/pmax/INSTALL.html) = 416fb09d6569c88845b26c89d9062106799cb772
-SHA512 (NetBSD-6.0/pmax/INSTALL.html) = cc06ccfbe9a109b6873a6e280baa5d401d3adb507160e145446e0c6d3c042cd5ba2f9edbe1c8d9731722d12fcc42bf40c5ff7a8e1746d096c182fe92437d2072
-RMD160 (NetBSD-6.0/pmax/INSTALL.html) = c40efcbd9facf5dce4471b1adf725830cd53b934
-MD5 (NetBSD-6.0/pmax/INSTALL.html) = 140966d090ff98ea58dc24cf673a5e11
-SHA1 (NetBSD-6.0/pmax/INSTALL.more) = c737caf24e7e33dd11ee48d0f0b1c0ec2efe8010
-SHA512 (NetBSD-6.0/pmax/INSTALL.more) = e014f63f15cfe131b38adf13500caab4ba7d43a7dce6432b2d688e916c3939ac851e5cb9af544db231cf729e5e39f223b1a73cff5ad66a92714aac71546c863d
-RMD160 (NetBSD-6.0/pmax/INSTALL.more) = 3d69b81b9dacf7933a2b0e9c76568f9ccd212330
-MD5 (NetBSD-6.0/pmax/INSTALL.more) = 7aae0fb416c11b3ba0558595afc3af37
-SHA1 (NetBSD-6.0/pmax/INSTALL.ps) = 64b1af6366baed6f548759b6a09fdbbfbb85dbf2
-SHA512 (NetBSD-6.0/pmax/INSTALL.ps) = ec6c213be8ee3af8e2720fcce970c9e8d5e220b1b94ba5f1ef1d8fd4a4c1ae773d522e077e28aadbb4c78a814ea4c06e2f1a915de8e8628f2602cd8705ff786a
-RMD160 (NetBSD-6.0/pmax/INSTALL.ps) = 17eac5c26ecf0947848d6742ba0aeb54d5b7ad21
-MD5 (NetBSD-6.0/pmax/INSTALL.ps) = 242d97c9cf75db873cb975d2788a24c5
-SHA1 (NetBSD-6.0/pmax/INSTALL.txt) = 90f4bfa985417eff921768c47ffc495b066292f6
-SHA512 (NetBSD-6.0/pmax/INSTALL.txt) = 36a7a301319525765fa1ae6c4d73b93c02b59a6f532f0dd1f96503a330daf0ba903f97df81dbd906bd54f83a83332efb28a8450d3a99ec5214abe0ed5369041f
-RMD160 (NetBSD-6.0/pmax/INSTALL.txt) = 02fe56f81cd11b4c65a13da0868e887ccfd7d511
-MD5 (NetBSD-6.0/pmax/INSTALL.txt) = c6a7c6addcfbd8f1b1bc708946065b52
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.symbols.gz) = 4a2e47a10e1c8913a04a5c574a0f09b82540b23d
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.symbols.gz) = 07c86d3b4d188d94141d181b1828e0548bf1e9597c6b470e7a35c787e7c830905fdc63ea4c8ea3f8310378f2e2bb55097c915d1785379d30c12861047d95af12
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.symbols.gz) = 70b4600b73a7d8b937790bb9d69c68e82fdf559f
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.symbols.gz) = b0f9598d18b5ff0081a3dcc02e4ae185
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-GENERIC.gz) = aadff547ddd7061ee0fe0c72833b691eaeae554a
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-GENERIC.gz) = 57a25d74b982bbd519271f24456cd5de583e9e5c7e2ef7d8850d6aa64fcccddc9a2e6545c3ed7323e087d04116c2c78ace5b427b14fc3542435ba3bb9497e4b5
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-GENERIC.gz) = 9a642cc44881b1f2b6049710d159f7a4ffa0f25d
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-GENERIC.gz) = 2a37ae4ea5cdc2702db0dba34cf7be3c
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.gz) = c138618a1e3ab93778033de4e66966f08e047d2b
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.gz) = b4045a71215ac632950cae3022d9d2d7ce9af9d225ffd8a0e775093e934cc4b0492f1e95167bcb7bc245bb9d5f3390de974158b0d0ea8146fd54bc40199ed10f
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.gz) = 5a2a9371e99acf25730bdd8e9826afc16257560b
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL.gz) = 3aaa4706000b77fc8078bf2dc572c746
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.symbols.gz) = 1ef4af8edaba52436270f4eabc0549fd8c57767d
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.symbols.gz) = fba7441719c1023b2719179ad017ac8e4c7a99499d2152ce75dc54014cfb55eecd0bb50e549ce976e1a5d58b420cd60416db364ed8633682a7c9c66a22af1329
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.symbols.gz) = 428a02bccd74b8b6462a0ec5ecfebab5a9576def
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.symbols.gz) = 901fb77c124b0ba7923d535a65a06fa6
-SHA1 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.gz) = ec4f1dffaaffea221d480df7dfe89d7a129dd9b1
-SHA512 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.gz) = d5ee09d3d063a6a816b7fd0fd3fa3d0251e1b056ec75368bf557e79836afc0292274d3642d9afedbfb4893a4d4cca97e4f1d0d859db60e3a8b644d9826e57d94
-RMD160 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.gz) = 0bfa88f9965abca2ffa342158b4e1621183887e1
-MD5 (NetBSD-6.0/prep/binary/kernel/netbsd-INSTALL_SMALL.gz) = 8d52534cc5095a06286d6644f2ede176
-SHA1 (NetBSD-6.0/prep/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/prep/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/prep/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/prep/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/prep/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/prep/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/prep/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/prep/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/prep/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/prep/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/prep/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/prep/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/prep/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/prep/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/prep/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/prep/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/prep/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/prep/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/prep/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/prep/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/prep/binary/sets/kern-GENERIC.tgz) = 7ea9bbc043530351e4dfc3ac54ce19938a412ec4
-SHA512 (NetBSD-6.0/prep/binary/sets/kern-GENERIC.tgz) = 0123955eb6ead53c99c21e1dcd5b17f62f228c35e8d17c9f540291f0022574e2ae331a9aebc2ed947cc0cabf439fa47c59e8f820eb8e5241b6446eb79c11bdee
-RMD160 (NetBSD-6.0/prep/binary/sets/kern-GENERIC.tgz) = ef4531ac387b909f96b2cd3079ba8f12ecc61aa9
-MD5 (NetBSD-6.0/prep/binary/sets/kern-GENERIC.tgz) = 3d31ea9358a8ba0d7cb49ae1baf77e52
-SHA1 (NetBSD-6.0/prep/binary/sets/base.tgz) = 586f23dd6c50c12204650c92632bf016c9e4d57e
-SHA512 (NetBSD-6.0/prep/binary/sets/base.tgz) = 712c63416a188e041d85155a36248e5580df0aace895b045b9a2a6cb68f5cb80315dd7f731e5a79139ee19d670c7278e44561336e1224c56a71f89ece1aa79ac
-RMD160 (NetBSD-6.0/prep/binary/sets/base.tgz) = 11a21367c332428fc4e855764763276bae636fb3
-MD5 (NetBSD-6.0/prep/binary/sets/base.tgz) = 8d8b79b420ca775f8a7f33a109e40f0a
-SHA1 (NetBSD-6.0/prep/binary/sets/comp.tgz) = 2ecb14f0695750113144390d254e685c1c41331a
-SHA512 (NetBSD-6.0/prep/binary/sets/comp.tgz) = 7f8528e32862466f82158d4a60e46cf04a9c451b13655d2f25e929bf9df3dcda5c90e1e491457be3a82caea35cb2cfafdd307286e82bbddc466e8b929f44c322
-RMD160 (NetBSD-6.0/prep/binary/sets/comp.tgz) = 8ac4b55abc59b0089485a58d43d304c23dfa7519
-MD5 (NetBSD-6.0/prep/binary/sets/comp.tgz) = 7dc818422b8bdb702d921d284f0f1246
-SHA1 (NetBSD-6.0/prep/binary/sets/etc.tgz) = 56d8194e33b3ee4a1c059b1435e89a915add1275
-SHA512 (NetBSD-6.0/prep/binary/sets/etc.tgz) = 4b5eb6c9222bdcc591d9e6ad9e0781fcaa6a3bb981fe7d5f4b7137ec8df902b9fb979ea419db313dc1a823dbbdc284204b46872516d8f801f18854f75da74d68
-RMD160 (NetBSD-6.0/prep/binary/sets/etc.tgz) = 4b2fb8d900c22be6844c8931cf4c660954d123e4
-MD5 (NetBSD-6.0/prep/binary/sets/etc.tgz) = 553a0fb84d187ff3c420d5b5dc7287eb
-SHA1 (NetBSD-6.0/prep/binary/sets/modules.tgz) = 60eb72b005b0e80f397d42ed5d78fea15e867a1c
-SHA512 (NetBSD-6.0/prep/binary/sets/modules.tgz) = 98ef7da109a52a1814d3a7ff1c6377fd30140cc9783a919d6b3331226b1ea3c7b168598fb3102533637e24ad48be9f265063c0a55043e6614ae5959a56ba0aba
-RMD160 (NetBSD-6.0/prep/binary/sets/modules.tgz) = 214a8c4490e3ba6d6a4861d19bc88700de79a2b8
-MD5 (NetBSD-6.0/prep/binary/sets/modules.tgz) = 775b2278852b97f68453f62cb4a1fabd
-SHA1 (NetBSD-6.0/prep/binary/sets/tests.tgz) = baf4e3d6a0237d7eac65eca2d3e571ccde49c97d
-SHA512 (NetBSD-6.0/prep/binary/sets/tests.tgz) = beea30696935343ffd119c696e826a617a189dd4e9be2a08f468207f0dfa518af4164a1c0bfb6e8d796f609888ef2e1c8d2b1481c58309cd3077cf361118052a
-RMD160 (NetBSD-6.0/prep/binary/sets/tests.tgz) = 8547af5c43e56924032b7b7205c61c7dfb90c018
-MD5 (NetBSD-6.0/prep/binary/sets/tests.tgz) = fad9ca518beadf4a15db6b0aace1d019
-SHA1 (NetBSD-6.0/prep/binary/sets/text.tgz) = 265ca8e29442ca31af66219963a9931d7f71fcd0
-SHA512 (NetBSD-6.0/prep/binary/sets/text.tgz) = 50cd104f35d738fded65600514abc46f96dbcc010f13cade2131a3aad0feb7cf1208360d5869114ca13276096a83e4960ff2f342c1c58b04c26232bc23a8d950
-RMD160 (NetBSD-6.0/prep/binary/sets/text.tgz) = bf0370ee7934a80fdd3dadfe68b2124a7d1a3784
-MD5 (NetBSD-6.0/prep/binary/sets/text.tgz) = 2305e5d5fe891fca62f8500eaf7e32ec
-SHA1 (NetBSD-6.0/prep/binary/sets/xbase.tgz) = a9c6040c6de18dcf42371b7eb0eaa88cb005f1e6
-SHA512 (NetBSD-6.0/prep/binary/sets/xbase.tgz) = 2f5640b41005ccc6b989454a60ae68f9637d701aca7e62a0c5f9965efda0bed43891a239be22ef2f837d0769ce54a649b9e357a920f007778e182d7362feb3e3
-RMD160 (NetBSD-6.0/prep/binary/sets/xbase.tgz) = b171d2bf07e02360363a642a9ccf6b624bdb85cf
-MD5 (NetBSD-6.0/prep/binary/sets/xbase.tgz) = f1029043dab956ff0864f197dc1c0875
-SHA1 (NetBSD-6.0/prep/binary/sets/xetc.tgz) = 3d9da3ee21149017269ed1870b2c5c1096e9ed50
-SHA512 (NetBSD-6.0/prep/binary/sets/xetc.tgz) = d971316b80d139e87b2f7fa47f64ecc41a6285e002986165268e551b0ab059ffa332b9e9278b1e86d60829dac01f8c7cdd3a36f047f0e4a50469046456dbce46
-RMD160 (NetBSD-6.0/prep/binary/sets/xetc.tgz) = e6a7c17de4ac3a609498d8005165277e34f40b8d
-MD5 (NetBSD-6.0/prep/binary/sets/xetc.tgz) = 8ad7ef8013d48e0ca196e8fd2a4fd0aa
-SHA1 (NetBSD-6.0/prep/binary/sets/xserver.tgz) = 16190128b64666ba44729a72387061d80fd14c1e
-SHA512 (NetBSD-6.0/prep/binary/sets/xserver.tgz) = 8f9b3a559b5b53dc2161128db89509e12bb3adc951dd51141212c5082e3afc19b6bd5d960900e7986c72a6ee664ebab7473e2119657c1f34cfebb05737655b6f
-RMD160 (NetBSD-6.0/prep/binary/sets/xserver.tgz) = d62cfac8d16c1e56e866fe621b3cb5bbace44d07
-MD5 (NetBSD-6.0/prep/binary/sets/xserver.tgz) = eafffc08a401b7b8e92e47968dc8faaf
-SHA1 (NetBSD-6.0/prep/installation/floppy/generic_com0.fs) = 7bfb784953be9b7b783a4d7927b8795441ec6096
-SHA512 (NetBSD-6.0/prep/installation/floppy/generic_com0.fs) = 59567fa24b9801e9aaba2fa0b85245b3c1a34894e6f2f58c39877bdb3053b3e21cce4cad703d60626466a2c0d2cd75715919df4a3acacefa627d19946123a840
-RMD160 (NetBSD-6.0/prep/installation/floppy/generic_com0.fs) = 0614c7375a11ffba581e95ea182aef3b59f7f624
-MD5 (NetBSD-6.0/prep/installation/floppy/generic_com0.fs) = b93c25c459836cca031a48a788ac7c78
-SHA1 (NetBSD-6.0/prep/installation/floppy/generic.fs) = c4d629bee0746f9d60ffb5ee501e4e9e73ef3724
-SHA512 (NetBSD-6.0/prep/installation/floppy/generic.fs) = 4df78c22f6a3d4ad414bb85ff6305a0d5caa97cc88375f3bdb2f3872e8103135f5716e72d564fe5fd3b7c1dbf7353f5464317ca30feb7187599186320da0a912
-RMD160 (NetBSD-6.0/prep/installation/floppy/generic.fs) = 7e34800d3411adb3862a914554d3ad27f7775e02
-MD5 (NetBSD-6.0/prep/installation/floppy/generic.fs) = c40503911a43d7bb98c5a5224c776666
-SHA1 (NetBSD-6.0/prep/installation/floppy/sysinst_com0.fs) = 3d67fecfe7d82c9cf7479152b092bd106b87f2fd
-SHA512 (NetBSD-6.0/prep/installation/floppy/sysinst_com0.fs) = 929443de2610ee9409ed76468aa9645a917bdc03366267e8483cc83bbcecb35208acc06ef0d2520d389b408b566c113f5e6b71f5568a7e1c029532979221682f
-RMD160 (NetBSD-6.0/prep/installation/floppy/sysinst_com0.fs) = 51197c7d8ae21a29cf54064c3cf11f8d1eeef956
-MD5 (NetBSD-6.0/prep/installation/floppy/sysinst_com0.fs) = d1e27f1504e7dfeeab0714332e89fda2
-SHA1 (NetBSD-6.0/prep/installation/floppy/sysinst.fs) = 47998496e145c48564efadaf91f3ba4aede44ccd
-SHA512 (NetBSD-6.0/prep/installation/floppy/sysinst.fs) = 6688642f8ad525611b7757bfaa63c958abc0cc1f0c17219df85055c7d97c20896156a543992bbcaf08bfe1bfe36e112e8c8af8610c971585dffa27ae2083d410
-RMD160 (NetBSD-6.0/prep/installation/floppy/sysinst.fs) = d674830e0387841948abeb5e194ab60d9ab942fd
-MD5 (NetBSD-6.0/prep/installation/floppy/sysinst.fs) = 3164ba344aa2283cc7aca4efbd627dd3
-SHA1 (NetBSD-6.0/prep/installation/floppy/sysinst_small_com0.fs) = 2614d29a10f74be3e6ec6563046d2129976f3e1e
-SHA512 (NetBSD-6.0/prep/installation/floppy/sysinst_small_com0.fs) = 061156a6e9e1f9130d9ae085838526f027f3f4263ed03ebc3b5a4532e75243715bc554e4a0ad307401c792f35334d79653642e0d2e1e438dbacc246cda1a92fc
-RMD160 (NetBSD-6.0/prep/installation/floppy/sysinst_small_com0.fs) = 58ef2e610b17686a92958917250c4252bf2d2530
-MD5 (NetBSD-6.0/prep/installation/floppy/sysinst_small_com0.fs) = e1b821660c4f9a7b22a9069631fcefcb
-SHA1 (NetBSD-6.0/prep/installation/floppy/sysinst_small.fs) = 73f7d288f4026018498e79c14d362eeb5e25ef01
-SHA512 (NetBSD-6.0/prep/installation/floppy/sysinst_small.fs) = b65d0794537f5dea1b2a3d6afbd08b85d6d97193a6f0c69928b2edb3fd90c1202035df882878e8f45ddca7214a1abd28e312ab6c334a0708bea0daa1a2686a94
-RMD160 (NetBSD-6.0/prep/installation/floppy/sysinst_small.fs) = b40f136693485d517b455f0443614a487904776b
-MD5 (NetBSD-6.0/prep/installation/floppy/sysinst_small.fs) = 3d605afd5b9a7b57949f448c43e8274c
-SHA1 (NetBSD-6.0/prep/INSTALL.html) = 2674ff3a673f19a61cac4e2877a5656f053b2a3f
-SHA512 (NetBSD-6.0/prep/INSTALL.html) = aabbf165a39dc0207f39cfd27508821de8e50d26892baa27daf1a9b1a01841777fa59a147baa2fc082ebe5ee1f7cafd27674ea44c3e9410179bfbafb33130b49
-RMD160 (NetBSD-6.0/prep/INSTALL.html) = a818880156d01aebc4c92e2e82677fb0890e92c4
-MD5 (NetBSD-6.0/prep/INSTALL.html) = c716d934eb76805dd4acbd677ef13fe5
-SHA1 (NetBSD-6.0/prep/INSTALL.more) = f408ad8a753e682120f22e8763d9e20d8eeda7ed
-SHA512 (NetBSD-6.0/prep/INSTALL.more) = 0a27fc0b1bc6bdf44bc2aced239066f13e352ff248d8ed50d430e676bba3132f26ba807259fda765738bc915a6765fab2fd2e97e04b0166a50cefc4c88de38d2
-RMD160 (NetBSD-6.0/prep/INSTALL.more) = 5cc22227f3a244681cc352cc364650ad683c2fc1
-MD5 (NetBSD-6.0/prep/INSTALL.more) = 69c4b26606cf1e071a451c5afab13cd0
-SHA1 (NetBSD-6.0/prep/INSTALL.ps) = 9ab023c53af56e033541d6c27abf9b666b3f6a06
-SHA512 (NetBSD-6.0/prep/INSTALL.ps) = b68f21d8587797e750a6eabe92273481a396bf68d62e300e6e07139439144660d1e8769404b109759707bccf02a97b27fde4aed219f2b760e9e1f65c0b8c7016
-RMD160 (NetBSD-6.0/prep/INSTALL.ps) = baf09ab6b65aa90ca2f415e4428e21edf2d6d7a5
-MD5 (NetBSD-6.0/prep/INSTALL.ps) = dd269cf99b1eb54e0f7c376c10330ec4
-SHA1 (NetBSD-6.0/prep/INSTALL.txt) = 38f3b013b2b744dd7e21df3db8308dad808e45cd
-SHA512 (NetBSD-6.0/prep/INSTALL.txt) = 2a42b7a45500710fd4df5f3883f8fef5aac4416c41a54c532ce358255541fbf3cd1e5ae03863f1721d845c82caab792d5c8d85feba2cd87225edc8f5606de585
-RMD160 (NetBSD-6.0/prep/INSTALL.txt) = 71583c4ea3b65f1e17ccede286d6025fb6f281cf
-MD5 (NetBSD-6.0/prep/INSTALL.txt) = 15bc48222a898edd8de0a70f559c4a4e
-SHA1 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.symbols.gz) = e7fddbe9a6fe76bfec3ec556acf83101b6b1b27d
-SHA512 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.symbols.gz) = 7a96ad902221852bdbc290707be328b8374e69d7339165e8af54a65abc17707a1177c2534306ba28e066eaca2eb1cd9bd76fcceaffef911926dacd88c22e3edb
-RMD160 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.symbols.gz) = 3f5d25d432d08fa0458c087a3928d3370e60d080
-MD5 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.symbols.gz) = f7adcf576fff9a965730d8cb07b677c3
-SHA1 (NetBSD-6.0/rs6000/binary/kernel/netbsd-GENERIC.gz) = 3786662f4c42751a4ad0475d5b7674ba8ecf6113
-SHA512 (NetBSD-6.0/rs6000/binary/kernel/netbsd-GENERIC.gz) = d0ecc5a21218668d185cc74f70ccd066dd08c39ca5e092966623857e7e0e0a9e0d350a055e8f54ed96a046e970ac6e8fbefe3aca12f8cbb238a1240858353dfb
-RMD160 (NetBSD-6.0/rs6000/binary/kernel/netbsd-GENERIC.gz) = edfd5c086e4207543b08fa1125d137a436a17caa
-MD5 (NetBSD-6.0/rs6000/binary/kernel/netbsd-GENERIC.gz) = d2909133467c780a0364052df6f5a906
-SHA1 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.gz) = 0588aeaa722ae0065f1e5d92187e088c75000be7
-SHA512 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.gz) = 53b6d6603b831ffbb5016ab99f61a20fad9900bbd76b18cd33608c499ad1d2b7a07dd3d0ea386bc27f1f9a8fe68db48691e128186cb4a810c82eca63e8e04e8c
-RMD160 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.gz) = 4bbcd396759fe15f6052ec4ebf5b1ab0d1780a77
-MD5 (NetBSD-6.0/rs6000/binary/kernel/netbsd-INSTALL.gz) = 2a0d673dd3b76fbdef31325f905bf6f2
-SHA1 (NetBSD-6.0/rs6000/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/rs6000/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/rs6000/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/rs6000/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/rs6000/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/rs6000/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/rs6000/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/rs6000/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/rs6000/binary/sets/kern-GENERIC.tgz) = 953706a28ce3b7a195c738f805b6ecf878555e93
-SHA512 (NetBSD-6.0/rs6000/binary/sets/kern-GENERIC.tgz) = a699aa0db691fd82015721bf9aab0b201574798731a795112cbe358a61f7fc3b4b1b0540abd25fc52b4c44692b81c4fe400dc6f90315d97563c32c1e2ef12a27
-RMD160 (NetBSD-6.0/rs6000/binary/sets/kern-GENERIC.tgz) = 697ddaf6582c2712860f4c5abd80537b50da0059
-MD5 (NetBSD-6.0/rs6000/binary/sets/kern-GENERIC.tgz) = 6d7ea95cdb07cb265eda9f09ca484ac9
-SHA1 (NetBSD-6.0/rs6000/binary/sets/base.tgz) = c973cd9af8b007e754b99ead0517ab7bed7d3fa3
-SHA512 (NetBSD-6.0/rs6000/binary/sets/base.tgz) = a82112dc5f53f010f6c259a543502b6a0d90259169233b2b043786cfa677ace8ed63f648dd738cc08730d6ac35233a2b1b60cd606222f399546b5f0a61488656
-RMD160 (NetBSD-6.0/rs6000/binary/sets/base.tgz) = 0e84db039067d0ee045bdae56557595dfeb51935
-MD5 (NetBSD-6.0/rs6000/binary/sets/base.tgz) = af2472e60e90aafe55028b419b776975
-SHA1 (NetBSD-6.0/rs6000/binary/sets/comp.tgz) = 2dcac8a8c80d565b5373277deec9a67aee293370
-SHA512 (NetBSD-6.0/rs6000/binary/sets/comp.tgz) = b6b94000d67080ab3ff62768c3afa85ee4a63a0ee62440648bb8c1728c6e4df9b72cc13927e012d9eee0a73792f2ce5e22d6c9d86eaa7c4a6789643177b44371
-RMD160 (NetBSD-6.0/rs6000/binary/sets/comp.tgz) = fc6b3a3b6bb9613f29c50451190dba5fc7884df2
-MD5 (NetBSD-6.0/rs6000/binary/sets/comp.tgz) = e7c6fcfdf054fef00feececd660789ca
-SHA1 (NetBSD-6.0/rs6000/binary/sets/etc.tgz) = 302c5ba7b8efb24364748a665f5cfb824f6068b5
-SHA512 (NetBSD-6.0/rs6000/binary/sets/etc.tgz) = 1ab1027b3082336f54fa330dd4d21924a42a4f76602d35bb2108229b745b305356c5f944247d0b9bfda63f66318a8ad6525eaf5af42cb3a8d0c3cf6e8b4d45b7
-RMD160 (NetBSD-6.0/rs6000/binary/sets/etc.tgz) = 21418d6a16eb9e779b5e6d86cc411c9ab531453b
-MD5 (NetBSD-6.0/rs6000/binary/sets/etc.tgz) = 695e526865e9cf18c91a35647fd75bf8
-SHA1 (NetBSD-6.0/rs6000/binary/sets/games.tgz) = 0a7cc1be35944ade7ef1c617e0bb5f1a60a891e5
-SHA512 (NetBSD-6.0/rs6000/binary/sets/games.tgz) = dacf177fc2affd7189a7cb7b166bf0b3f6b1a92cf1358f1dad2c5e364d28a7183f841befea024435b0f125cf4008741c26f98e5860ea3872d7a8c36e0e699430
-RMD160 (NetBSD-6.0/rs6000/binary/sets/games.tgz) = 2620719e3f39dc3137ebb8f47fcbe482d77ff5e7
-MD5 (NetBSD-6.0/rs6000/binary/sets/games.tgz) = 175c85d188b3c9b4922c4aaa7adc3dc3
-SHA1 (NetBSD-6.0/rs6000/binary/sets/modules.tgz) = a710b61251bc52c73e64a0254489fd7ca7fb766b
-SHA512 (NetBSD-6.0/rs6000/binary/sets/modules.tgz) = a39d57fa5428c4734bf521afdd1356df4213980a9180b4bb28731b5ff7c22b606b2b2189cfba9741cc98fa049ae01a26516c1096969f2b0b17d24e1d1112eb94
-RMD160 (NetBSD-6.0/rs6000/binary/sets/modules.tgz) = ebbd79b609edee28f4c8331d5dfef0e510f67d9e
-MD5 (NetBSD-6.0/rs6000/binary/sets/modules.tgz) = 825a589361390bbf9d409497e022b2ef
-SHA1 (NetBSD-6.0/rs6000/binary/sets/tests.tgz) = a0eb45c7b71306f6cacafd52bf8f7f06b9d5fabc
-SHA512 (NetBSD-6.0/rs6000/binary/sets/tests.tgz) = 4a95458b6a260485c6fa3d136abc9c76c6764f870d30bbf4f7c78c86233241366f84bc5cf7d7be0a3ccf49afd7f5c95e0f732d4164d6f32a01f953ac51a529de
-RMD160 (NetBSD-6.0/rs6000/binary/sets/tests.tgz) = 67ec4f342cf6d25a56f4b0b62675b12df01ae445
-MD5 (NetBSD-6.0/rs6000/binary/sets/tests.tgz) = 1ccae2c93acbafe1ffc9dc329c8a73de
-SHA1 (NetBSD-6.0/rs6000/binary/sets/text.tgz) = ec4ec898eb442d2f8d86aaca0ce5490c7dc1722b
-SHA512 (NetBSD-6.0/rs6000/binary/sets/text.tgz) = cbf687bd4d20115e4f993b08ed41dde158b39a0133af78503c41b3240e7f7aeef3a015594eeb423d6a8c7d74549646e06170eb7dee86d76919163083c81a27d9
-RMD160 (NetBSD-6.0/rs6000/binary/sets/text.tgz) = e638a4bf115fc0fa2e4ef7d5399d79597762b94d
-MD5 (NetBSD-6.0/rs6000/binary/sets/text.tgz) = 6e84e62deb9c45636b7047e88a6b1dce
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xbase.tgz) = 143ea7f8f94f52bf946db4dbf3fccb963f0006fd
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xbase.tgz) = 66442666aa2e6b9139ae8acf690e1c671edb34160977f786332b6f18c87d8be537160b4d8a114b48660a09cdb349890514b9cd6c3cf12a2f5c3e49e6ef070ed0
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xbase.tgz) = f28a5be274784cb9b35ca7c9a452e6fb1758562f
-MD5 (NetBSD-6.0/rs6000/binary/sets/xbase.tgz) = ba48685231270484c0e79da384a77a28
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xcomp.tgz) = 1b1dda90e8376c39a124f39cb8f09824e1d88599
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xcomp.tgz) = c53a3e10df7ec1ddc2687ebf299a37f0b721f83df64797b64968bf1ebf2cdf7becd0ea8505a6a77864e9119c8817aa78deccac0d198b9c815f750a248fdbd5ba
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xcomp.tgz) = 4d57950bc653c7030f7ccae430f5b00812f106c2
-MD5 (NetBSD-6.0/rs6000/binary/sets/xcomp.tgz) = 0cbd6372a9d8cc2488e23708a105f563
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xetc.tgz) = a1c99d1c17918fad811cf27b08625a0b1461f583
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xetc.tgz) = 567bf3cde35f4e54ad9875625c64895d28a5c8accbfb0d5339ca523a9192c312db7ee3c44f9fde3fb5a765839630d282fa59fbe483f5deed16811bb82d8bb3be
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xetc.tgz) = 263747682247c8c38b367970ff103f92d92b0fae
-MD5 (NetBSD-6.0/rs6000/binary/sets/xetc.tgz) = e69bc3b1b38e787aff9d1df386ac63e6
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xfont.tgz) = ebe1c8e3f81f06dc9a816b1ff31240517e9b102d
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xfont.tgz) = 11f0db11eacf0ee00ecafa091c0f9cee84402dcf44a4467d809355d464eb698ff805acfc3da5752b167a2398a1f1080c93e3ca1ed8f08a6129ffe4e4a2402da1
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xfont.tgz) = 7997ed31cdf3895e1fc12b024314c1b72d94be89
-MD5 (NetBSD-6.0/rs6000/binary/sets/xfont.tgz) = 9e4241f680bc0b0303a0aa682b61b1c9
-SHA1 (NetBSD-6.0/rs6000/binary/sets/xserver.tgz) = e0f7bcff652a034a14b70eb608f9d48a21cff87e
-SHA512 (NetBSD-6.0/rs6000/binary/sets/xserver.tgz) = 9838dce48efcde1f60ff163b1c5da7a19d414c730d97d8db7ed19ac77a52f27f2294ba24de75f15fd4d11a30a97830ca2f68b4311379505208025b2ea4913644
-RMD160 (NetBSD-6.0/rs6000/binary/sets/xserver.tgz) = 9072c3c3519475c71ea42925c529ce5e323e9661
-MD5 (NetBSD-6.0/rs6000/binary/sets/xserver.tgz) = 997077c1eb372bf091c82bf06f96f7b6
-SHA1 (NetBSD-6.0/rs6000/installation/bootfs/boot.fs.gz) = 56e0afc45b285ce022bd561db40dcda0eb2fdca4
-SHA512 (NetBSD-6.0/rs6000/installation/bootfs/boot.fs.gz) = c88fa6848032305418c173e9bca58e76545523b762e5ef4f65bc84f1f820e5813a37dcd256af8b0352f5d6f6e1c700d888f5633d1ce58664cbc5886114aa5332
-RMD160 (NetBSD-6.0/rs6000/installation/bootfs/boot.fs.gz) = c575e56387f6956fd086bfeb5f85fed7a9fb4c27
-MD5 (NetBSD-6.0/rs6000/installation/bootfs/boot.fs.gz) = d47804a5227b204d2bea50e243a749ae
-SHA1 (NetBSD-6.0/rs6000/INSTALL.html) = 0f891193771ae2bbe138549727d4df583dc39a94
-SHA512 (NetBSD-6.0/rs6000/INSTALL.html) = 84b1ae87d5befd27db8ed74276b95a91228bf60a05ecf610adacbddc7905cebbfa3909eb6fe8bed0c8f31bb92112fad398f9d4594204057892a538c16861551e
-RMD160 (NetBSD-6.0/rs6000/INSTALL.html) = ca2e4dce100c234133c9da46ffb498d84e0115d3
-MD5 (NetBSD-6.0/rs6000/INSTALL.html) = 031cc1f873f6c8d6f6472b991915701e
-SHA1 (NetBSD-6.0/rs6000/INSTALL.more) = d86963437bc21fb0eb944b4562b79aefcec5c511
-SHA512 (NetBSD-6.0/rs6000/INSTALL.more) = 130cf1977b54ee32332c7c1a2f35e9c19c088753ad8755ce48965aebc1cc19cd89f37f073749ee5f8b84223a8e8b3fc4a68993e0b22d35663c5850c419a0c84e
-RMD160 (NetBSD-6.0/rs6000/INSTALL.more) = 7e35c4d92d61591cf32e7fc4f272734817b60eb8
-MD5 (NetBSD-6.0/rs6000/INSTALL.more) = 4bb3c03008a5857e2c1f7b30cd76f10e
-SHA1 (NetBSD-6.0/rs6000/INSTALL.ps) = 52af7c1bd8dc0f193c6ebaad3320a0d9b9c82497
-SHA512 (NetBSD-6.0/rs6000/INSTALL.ps) = 44c13947238205228eecd13b48642f68179745ae8441ed58db4a3e7103c431a86c86d9ca88d0f71c656f1f0d54e2ebed8b395dbe1a9a437ccac79f91df7ff56b
-RMD160 (NetBSD-6.0/rs6000/INSTALL.ps) = 545bc23ee542bce73f526bfb4184cc2b9314b0f4
-MD5 (NetBSD-6.0/rs6000/INSTALL.ps) = 06416001febd58f722bad81cc2a585d8
-SHA1 (NetBSD-6.0/rs6000/INSTALL.txt) = cfc54ae2bb8482e56b8b0e130285a78532b9772f
-SHA512 (NetBSD-6.0/rs6000/INSTALL.txt) = 9fe957ce5896aa3ca77bf2b62a785904d22b21250e1ed6a18ca0b0e68268ba76f314948e052a0bbea78abe78e95a2d5ca51bf70b7cde2d935ab802a1e276b888
-RMD160 (NetBSD-6.0/rs6000/INSTALL.txt) = aa823cc8082e6b246dc65bce012fec305a7d3ef4
-MD5 (NetBSD-6.0/rs6000/INSTALL.txt) = b47464cee8c76f0b619c0a70acca22ca
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.symbols.gz) = d09224835f9948e426f67e0008e9e40de1a39635
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.symbols.gz) = b130c4fc02e1783188dcb4b5a3f8fc88f4294cd331d3beddb039364aa8557c61cf050ccaf520fbbd8badeb018e1c676b589d6eff6a17189ae8edd3dc7d6f94d6
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.symbols.gz) = cb79e2871b79e109038c8b7e62ec213695e9aff1
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.symbols.gz) = 5f38dd4085224ecbd6ecae5e07a92e1d
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-GENERIC.gz) = c315b6db09ef1d0161ad647352d9983b72da2ba9
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-GENERIC.gz) = 27bf14f92d278fe7b4174cb265862fbd24c96a006f99e5d241f52fee928fdcaed13528f058d6e5cf78656ab7e0e17e974394a2dff8ab37664689ac8eeb457c61
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-GENERIC.gz) = 4aa32ba67c19f07cc67a13835b3773b2bb8178d4
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-GENERIC.gz) = 87054c981c0647f65a1aa363c3ad3074
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.gz) = b43de7e1f292d5d1e050668babd148e3310cbe81
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.gz) = 0c591bfbaab13c5c0d03a50e0914a97444f87d9513ea48a96fa84e05ea1bed95a63a7ae3cf77c5c71f79cf774f1d1eef2b866c6125173e97027882bb37c38565
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.gz) = 3bc37d3a7d32ba229944341349eee1d7498487c5
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL.gz) = 1812ae09823196a8493b490db6d35829
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.symbols.gz) = 81f74ee4373718b36152d797c812097688ce515e
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.symbols.gz) = e26f69d2d4df43224e12a922b2d1602678db53a8f7f5823776047ed0f1106e6ffcbaf6d88a4101a75bd3b298737971a99d82b806f78e70a7039dc1e8c027a0cb
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.symbols.gz) = 32e0b167f67afd79e83b8b5da906e7eb9822640b
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.symbols.gz) = 31c633e475629988bf3addc50252b158
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.gz) = b857802c9d1b447b451a50601e7592b6c72208a7
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.gz) = ef8318f98fc351491b88805dfb1150beb5bac352b18504bbe4756fb9fc54b064ee442999e08fa2a0b82306e717dd100a8a45e02814c5a03d168f33d05c34bd1c
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.gz) = 4add6bd73eeaf1c25a9d732adad0e24304e39b39
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-INSTALL_KURO.gz) = 61015da4f88490480f8553e59599dbd2
-SHA1 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-KUROBOX.gz) = a2b339d5cb7d614c94341cd9dc8928597275fdbf
-SHA512 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-KUROBOX.gz) = 44b9aa3d91de2f2e0d1c3ec42000182ad97fde311c2bebed17f21fa2165e9f2d574a2fff2330d9f9c2534e595e78bf1eb25e605158e62bf9c65fa449d4d426ef
-RMD160 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-KUROBOX.gz) = 8548f8853cf766e38388c6f16da063334cb4a8a1
-MD5 (NetBSD-6.0/sandpoint/binary/kernel/netbsd-KUROBOX.gz) = 9b8e45e5e31d018a614b2f9f2ec67f95
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/sandpoint/binary/sets/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sandpoint/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sandpoint/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/kern-GENERIC.tgz) = 3120fc2c7bad39d27640482bb99222862238a9bd
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/kern-GENERIC.tgz) = 38c1992332ac419fa5e630965bf0bac621fbea752cdec3c147bafdff55bf8b24343913cec8e645b3170cddb071ed501781a47048be08d03c21154c7cf0e2ff6c
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/kern-GENERIC.tgz) = 3964f06ff1e895fe07b28c6758713c82cf0eec72
-MD5 (NetBSD-6.0/sandpoint/binary/sets/kern-GENERIC.tgz) = 1ff2a1c2e3cb2d7f2fd9a270d9cae445
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/base.tgz) = 9e8d3d9c03cbd6db0b99c34641dab20f5835b6bb
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/base.tgz) = 4eb8d796b52589cc4132777dbfeb5295ef44bbe83e1e7c804540d39b98dbf66d7b0805a8e00dcab835309c9a69b3ca518288e0992e53b773d588339da9bbe0ac
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/base.tgz) = 48e26330269decea0489889a395af45b39ad55ff
-MD5 (NetBSD-6.0/sandpoint/binary/sets/base.tgz) = 2f7c4bf56ff06bf89e9c5d49b1154805
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/comp.tgz) = 8f217e53da02ee1bf5445f76ccccd7262aaad680
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/comp.tgz) = 71a6e2221f054534477100908bb3ae686e88eeed96bc7d28920b39863d10881e6951d39011f65415d50c2cadc78874582a1d7f0505c29fbef25800003310febb
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/comp.tgz) = 8507052499e85b2c4d6fd985f3d0ddc099732443
-MD5 (NetBSD-6.0/sandpoint/binary/sets/comp.tgz) = cb3a0690211b22d68a64e941711cc03e
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/etc.tgz) = 6b44f637dd5d01718b446128da95e0bb37c1682a
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/etc.tgz) = 8795d966d0da1b5419f50e577036167ab6e5de5589080ed0ee6903e0d3b59ae9bfd2395d7951b2b38a025acc39daf302a3d22212e0a6ba94344889d7f99d9d57
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/etc.tgz) = df0e4d773d5a180fba5b21b73cb6aabdaec11487
-MD5 (NetBSD-6.0/sandpoint/binary/sets/etc.tgz) = c8ec3910d995970ea51634c4f126474a
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/kern-KUROBOX.tgz) = b4c7f1bc4058463ebb759d84f0ed8a5613cb3c44
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/kern-KUROBOX.tgz) = 50df0ca65f4f7ed454cc4176eb26b63df738d658536d63dfcacf8ea6def0cf3f4778d686b19ff4f5b32dd07e862f9b0d753ac34c93eedc21f47bd27a0ab5a7df
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/kern-KUROBOX.tgz) = a86947596f1a0b658f0cf664ddd67c05385efb56
-MD5 (NetBSD-6.0/sandpoint/binary/sets/kern-KUROBOX.tgz) = 30f2e8b4824b9cedf289c6cdd46df34e
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/modules.tgz) = 7c4b66eea61f3cd7bebee7421f78ddabdce86b26
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/modules.tgz) = db987ae1a97bcaec2085bec2e33c49a53dedad2499e91db24570b50b6f83cd3387e2be0fd6f23dd0611f676133c5fb524c06a4c42c864b41acd74b88e1a2eb34
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/modules.tgz) = 24ff5d8cba57c1fd9aac448c121d8b5446c3d7aa
-MD5 (NetBSD-6.0/sandpoint/binary/sets/modules.tgz) = 380e4c6e51bf10cf6fd605b12332badf
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/tests.tgz) = 45a3f3ff64bc425bfd332e018456252756b0b3af
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/tests.tgz) = 37a7200f8d06849b2eb8e82a19284edcba07a3445ffa40725f288d09eb4e6dba18856b97c64b24373c3c191343c64df2bb2cd5ea8b1367ccae239cb1db9755b8
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/tests.tgz) = ff0eaa5ae045658f2e34b26ee39f41fc03f40589
-MD5 (NetBSD-6.0/sandpoint/binary/sets/tests.tgz) = 19128cd2482ccb19f4486a6090b89d41
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/text.tgz) = 8f4f8a5d09b63477d2a051e2d628b512363ae893
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/text.tgz) = e24825ec69e7b195c384e0fc83bd56a39598721ee30bde5dafc433e24fbedc2e5555a628ec1df0427cff6691f11040e244abd2f8f518421cdf53a94aca7752c6
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/text.tgz) = 264071e66052088a2a9c93b7d030331aa64dc522
-MD5 (NetBSD-6.0/sandpoint/binary/sets/text.tgz) = 3a05d3c0c3a0074852621cc38b0afe82
-SHA1 (NetBSD-6.0/sandpoint/binary/sets/xetc.tgz) = 80be15e90a6779956ecd9acecae91936d1417c2d
-SHA512 (NetBSD-6.0/sandpoint/binary/sets/xetc.tgz) = fa0fd709723b8c3768f9797e34f30dc3cd8a16e3bf178beb883ccddf5041f196fe85828a32e3296c24f96a8a942927aac4587142705d7cd6ce8ffbcc6d4a2fda
-RMD160 (NetBSD-6.0/sandpoint/binary/sets/xetc.tgz) = 02d7f0088ce5bda4f14607ca80de273d00a82137
-MD5 (NetBSD-6.0/sandpoint/binary/sets/xetc.tgz) = e285972d692807df05e4f96ac34ef6f0
-SHA1 (NetBSD-6.0/sandpoint/installation/altboot.bin) = 56c653262e9e672cd47728f06dbf1428a7a16604
-SHA512 (NetBSD-6.0/sandpoint/installation/altboot.bin) = 0ff15a1e8f4fdff1c97f5539c69c4f40e1bbec0ceb6d3ae0df8e6e472fa25dd1b44398135cff0995ca21389819fba455b70a59e2af6fcc817781e09b1b11a3f5
-RMD160 (NetBSD-6.0/sandpoint/installation/altboot.bin) = 7fd0c6c48de76b1fb04eb16a2cbd53531f67d78f
-MD5 (NetBSD-6.0/sandpoint/installation/altboot.bin) = a2b44c7df7a4199c917096623275d178
-SHA1 (NetBSD-6.0/sandpoint/installation/altboot) = 420331106c0a0f28c0cb27f39016852d65f47533
-SHA512 (NetBSD-6.0/sandpoint/installation/altboot) = 7569cc668f087aa5a2af3ed0f231cdc8a0364cf7f64fcb06b08b3aab17e3bd295bcc8f2c8175f1efe73a1e7cca4ba459d35e65872fa8436d729697517dedfe29
-RMD160 (NetBSD-6.0/sandpoint/installation/altboot) = ef26fc304a3f7bfa4717b03a4544207b44e2c382
-MD5 (NetBSD-6.0/sandpoint/installation/altboot) = a5c881881c99da3587d7db293ce8b453
-SHA1 (NetBSD-6.0/sandpoint/installation/altboot.img) = 9db4851a0e6349ca1ae912e60a329b8f250bb51b
-SHA512 (NetBSD-6.0/sandpoint/installation/altboot.img) = 2bfb5c17dcfa6f1619f398a6f994f57be2f2a5e5bee0d2542bfe076f46d13567cf5519ccbea8bc97962122073bcb002309509caa06eab11014ee85766d813410
-RMD160 (NetBSD-6.0/sandpoint/installation/altboot.img) = a140607e1b7ba43d76b22db739253f59234398bd
-MD5 (NetBSD-6.0/sandpoint/installation/altboot.img) = f007fcb1d420ec5ab2f662013f78663a
-SHA1 (NetBSD-6.0/sandpoint/INSTALL.html) = 87c1358b7dd97f4166607bc031ee8fd603d8a2c9
-SHA512 (NetBSD-6.0/sandpoint/INSTALL.html) = b27b71a7b9fe4a37e2ffe20eb09588a3e3aa1337aa7936c064a35752b02ff8b1f560f053206db9ddc4b0a7a5f9163f221dba4690c54f3791fdccdf791b1893ed
-RMD160 (NetBSD-6.0/sandpoint/INSTALL.html) = 790a76dee78dc46f35cf2b4f6078d699707d2adb
-MD5 (NetBSD-6.0/sandpoint/INSTALL.html) = b1a454f7901f9b043c6993ba09ce7e20
-SHA1 (NetBSD-6.0/sandpoint/INSTALL.more) = 60d0c93b382dfe57cc87c292f3cb53f66bc0ef7e
-SHA512 (NetBSD-6.0/sandpoint/INSTALL.more) = 6b1ac0a4e00aee1bcf54d434b02b41102927bb125be551b0cf8cd25016104b3a03f3bf40506bc6076ed3af4a8128a81f733d523e5ccc3679cd8b51bba105cc27
-RMD160 (NetBSD-6.0/sandpoint/INSTALL.more) = 46c78bd1d9df63eeed2f580faaabbac38f5757dd
-MD5 (NetBSD-6.0/sandpoint/INSTALL.more) = f317efc426b562d069a20655d45d361a
-SHA1 (NetBSD-6.0/sandpoint/INSTALL.ps) = f67cac326fc01aa5d0e47013afb174ce0962a46b
-SHA512 (NetBSD-6.0/sandpoint/INSTALL.ps) = ab10cc2d28735af2a34ab85a4c84d7da346375a964a65ba9a328cd93b4b55c6badba306bd7093be08b662695d8ad82e96c4def014a7bac3f711767c9b741c33f
-RMD160 (NetBSD-6.0/sandpoint/INSTALL.ps) = 5db8cd9595e21ecf5132a9bfb2574aaa01260515
-MD5 (NetBSD-6.0/sandpoint/INSTALL.ps) = c36aec246e63cd311c87bdd6ff54f28a
-SHA1 (NetBSD-6.0/sandpoint/INSTALL.txt) = 545b47f56ca866c03078d60d49d3276d4d000648
-SHA512 (NetBSD-6.0/sandpoint/INSTALL.txt) = d7a925733a465005a83a915d9c58ded20149a6118013493b687c7b0ef2e816d8340631828ce1ec7ca13400c0d7a2dbe86c4fed363baf84ba288cb57a47384f89
-RMD160 (NetBSD-6.0/sandpoint/INSTALL.txt) = 1a30cf24c59bd8394d8748102ceb9027d81d66d1
-MD5 (NetBSD-6.0/sandpoint/INSTALL.txt) = 25fb074abc8d6bd5c9aec25dcf7c3667
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/kernel/netbsd-GENERIC.gz) = f23f0dec597709dddd3a0ee1d355f7beb9110b46
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/kernel/netbsd-GENERIC.gz) = c07b4b1360396b00184b77c19fda5ddb4463eef2fddf2c9ba43cbc4e7b0548e79999928db4f662046f73e282051bef9912f497c91b3757d60a1a11a520c3703f
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/kernel/netbsd-GENERIC.gz) = 22b4ec375839d277a7cddcfdf9df0a122a9cba19
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/kernel/netbsd-GENERIC.gz) = b4ee3e5e49f3bdf6fed5e7f9028fe2f1
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xbase.tgz) = d81c7fe75a90f1b2111a066e78f1f2b3e8edcd8c
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xbase.tgz) = c241391fcde4a685a0a2af6f843844ac2e918024c447a2b5ea2cf5300f69acc42fdadf53d3b0348f10723b786bcc0f420e68fe36228375bf3cb5140de41eb40f
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xbase.tgz) = 2fbf60b64c0b7ac2be72ebf998d9d7390fc40705
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xbase.tgz) = cd23ca0f6b359c4d695d4494a147d40f
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xcomp.tgz) = c8f5ff5ea9f9bbe231f92d8b7f3bfcbd2897069f
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xcomp.tgz) = c7590075195019078b68ec5f87e36479ae2e7b7749c523df4ef21c9d881c343cda9f5c2bba897dd313329a76fe5c18e920d92827878d98ce08a7dc776352cd02
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xcomp.tgz) = bc60e267cb6e11b4a7305f8b7074084e179e0ff5
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xcomp.tgz) = 8e58ee51667def3bd015f79769c0d932
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xfont.tgz) = c551bd13179b9508c2e3a7e19cec323e8ba21844
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xfont.tgz) = 764527f2f3f4686759fcae3fd093f4e00f34e1249994126221a6f9afe73d4cf8ddfbe8b8311798da2ed38c52466a44bb26ea08ad5aab1c08eebcc9019b4223f7
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xfont.tgz) = b3a365bedf8b4a20f3920d0e33b9a42fce288953
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xfont.tgz) = adac8939da213a0195cc1d351f979199
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xserver.tgz) = 686f6e6d722c9676351ab058736f7077b4ebd2f6
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xserver.tgz) = 5c818f22edbeac7325228af99d6da6e44b5eb659c7c9fcc6b332071e97a0a490081eda7f9e0f22d6a3f3a589ae34179b434751a6191db5c664683d7510aecedc
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xserver.tgz) = 0e9f066095b505c7f062bf877147189a7a2f0649
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xserver.tgz) = cdd2e5127838437df40af161e0c8398f
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/kern-GENERIC.tgz) = 3dee2d103b30c27015f41f351b45247d1f1067af
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/kern-GENERIC.tgz) = d9393724341c9d8036646fc768c21cb510aa4915555460753caded9c1f7a5355501d801e72ffb12e3ac1d25a57797b3b9b8c38787f7ae42906c6dbfecd0bf384
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/kern-GENERIC.tgz) = 9e22ac41f53032ad9194b1b0002c56c13211cf65
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/kern-GENERIC.tgz) = 6b9b0560a05738c70d580a25e0c5f203
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/base.tgz) = 61ec72dd34b2103b7b2f3228ee7766133a089c29
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/base.tgz) = 9aa13fa9008c18633f949ee74c5aaa5fa1d58d59459e48cf5f161d3f11e133a0cdaf7caa941a4e435076644ea799d7c9e73274267b18c3401866fdae5444f491
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/base.tgz) = ebc31ee01aa8cf119d20f5e084d536bcc610623b
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/base.tgz) = 828ed9e45442d989a4a5233b6523d82e
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/comp.tgz) = 705bd29c423e517e231920389f853990b8103339
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/comp.tgz) = 33d7feebe4ce7a3f8a4317c49f10f51e69e40374a9291c6b9e657f3e965d533702513b92dba0cba318a786f33fb5f275237be13870c093dc229d2c826a6b15ae
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/comp.tgz) = ea75f4ad366964a45cc5c8aac35cee5a56460d6a
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/comp.tgz) = e37746a52cc63d8d2992aef55484bb81
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/etc.tgz) = 9b4b768dc9d999330aa8fe804d604738fbabf650
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/etc.tgz) = 6e56a5122f29741aa02b651671d5ecdaef0adac94f52c8d550ab8a17352d3fa6755a87c13bd707d1a7f4259fef1c77e4ec85699cabb96bac5c47b82f2fdb6086
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/etc.tgz) = c2c3fbfe163cc38ff774413c1be35f0fee0b0c3f
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/etc.tgz) = 3d6d678755b01ec623ed215f7e1bbbc6
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/modules.tgz) = de0c98fc8b4bb81299edb50e3f99f222ac383dcf
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/modules.tgz) = c279717a8c4a6c66f3dff4e22d72466cf7b2c82070bba336bce5e659dc520c8c1fa1ef80f6f3154b665e0fb76dc2745ac8cf3996389209966f3976c36dc591c2
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/modules.tgz) = 80479a2131441999c8d251d822e00800e4f69b9c
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/modules.tgz) = cef9345e5430560c5955adee76e537c5
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/tests.tgz) = 92c135698d2030f4b378f18fc991c9f4efbcbf1a
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/tests.tgz) = 7fde9b55e820f169c4d1820d5b3f213f460c81bf892df6bff0ccf47ee73054c651c7277d956af77eb6f3d75648c7916be72d08dc3970601dc872662f009e9117
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/tests.tgz) = 38049cb62625ec093f26a53f6fdad2bce0b5a2ee
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/tests.tgz) = dfc74f3ea392e2c963257cb48926147c
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/text.tgz) = f8ddb7ac8fe765ad3760b3c00516f209f31ba211
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/text.tgz) = 9e8f6eb5da98c7c88d96d539e5379bf98f0d6726b84c5d4c2e1236d515d3cc31a4e1deedf1beab8335084f0c8d2795e8bef3391feff024d654877cd105254e03
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/text.tgz) = fc5441996f0f1650b41b80cdeacd377cec93c8ca
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/text.tgz) = 22ad03bdad15b336ac4f73bc31c29d78
-SHA1 (NetBSD-6.0/sbmips-mipseb/binary/sets/xetc.tgz) = f89ac267632b07b88fa020f09c395a6766a2b9b1
-SHA512 (NetBSD-6.0/sbmips-mipseb/binary/sets/xetc.tgz) = 59325ee391ab258e507fad56e2f38e5062c2ca15599c71ed06bd0373dfb109d61605dad949434d521d5ab9ea6139ee099919d485cb6d680d20b1bffc6881fd9a
-RMD160 (NetBSD-6.0/sbmips-mipseb/binary/sets/xetc.tgz) = 6e805117acfbb8c9af9eb6f105b15c11447faaa8
-MD5 (NetBSD-6.0/sbmips-mipseb/binary/sets/xetc.tgz) = 3e113c15bdfceb0a896ebfcee6e75172
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/kernel/netbsd-GENERIC.gz) = 017c9fbd7101f94f65ae9f0a41a1a028a8bd3435
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/kernel/netbsd-GENERIC.gz) = 45e2aa91e69a575f02a48dd776cc7401f37e60905ffc986634f53829aabc87d2dfc52840fc92821a3611b61e728f415ac44ab19f73db85786962df64d87b60c6
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/kernel/netbsd-GENERIC.gz) = 56ea720eb521974e26c07d74f93fcebd6e67de91
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/kernel/netbsd-GENERIC.gz) = e5f16d9d0838695b251b809dd42e10b9
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/kern-GENERIC.tgz) = 8c185e51bf6d6c63d23ce62fd86e5f7bfb3d3845
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/kern-GENERIC.tgz) = 6f1a341b96a6890f1bfe68a588e74639caec8c320b72bac774f03d8f7e71d9198887b791e6528a10bd201bb14537e2f83a4e81aa402adc5bd57e4ada3c8022a9
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/kern-GENERIC.tgz) = 43be2a6c07b4b366d31b2b74ce7666d0337cb84c
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/kern-GENERIC.tgz) = 1ad137c19b7c2df8bcb8bfbe053466d6
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/base.tgz) = d0664b8cdc36b3e6b0381b6a9de9c7556bd383ef
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/base.tgz) = 737f1bed2c71e1473483bec24e7e48be28fca93e0ccb7e124661569d1960fa99bfdfc7f8e86bd3a61f744593346ef767b1ae2ed0c1e2fb9c5b421dd2b8125dcb
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/base.tgz) = 130c2d1408fad9b0c2e8c612b6d720a6c92674b6
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/base.tgz) = c2623377960d1a7fe4db1ffff70882f2
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/comp.tgz) = ed63cf25383b8110ece9e4cb4752fe762b636cd5
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/comp.tgz) = f699747ae04f024400653aa5bf5be624e4cd0bd92c9086ee8f89ce9327c5adb27e7cc53f1a85904b3e0f2cbbb49e45a3098fc803e131338a3100a56f1628218e
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/comp.tgz) = ca975dc6b36da0208cc2a79c346e74fe367ba833
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/comp.tgz) = 063da88eb27db9b012142fbec1707b34
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/etc.tgz) = a6430055b2ccc0d418f11c4eb5628d091998d4f3
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/etc.tgz) = 51a2c3cbb860e042c3ecc234e1e0645489a5546ccf0c87a2925f32c01dfb3fbc1dd088b4bc947cb27c731b9645f234e13fa9e805665be34aa3fe9318c51d12a7
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/etc.tgz) = a7c1913e10b8fdc44a191159b5b6278728bd8a0a
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/etc.tgz) = 690495c3b0cbba76f83085422161887c
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/modules.tgz) = 37c4fabb3a3edebf715572a4c7deca5c2f63508f
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/modules.tgz) = 2245821ee48c5a4a4c7ad378c2d726975b18a3f04b1e4cf04e78ee0c15855502eca0673b11420af837146c9003ec6c9899b815a37aef06632b9e8a00f4f95f0d
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/modules.tgz) = 2ae1af8e754811706b0d5633f2631a306eee664a
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/modules.tgz) = 3136834e1ac671cf35958f353e33d8c0
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/tests.tgz) = d3118b0c152c61b20933e5dc38272991b808fce0
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/tests.tgz) = ce817f1900de3b09a7b063abed50f10f78042f3000f1bb031963db7eb1666fb55b42ffcf446370b4ef2541ea86739e43c9bf0771aba86f5bcd62e6181975a62b
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/tests.tgz) = 6fe992cf685d12015118ce0faf06d77b241e10d6
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/tests.tgz) = d59a11116844dc6e6a754ab8676e30f3
-SHA1 (NetBSD-6.0/sbmips-mipsel/binary/sets/text.tgz) = 82712c2413930b0726af1cc8e3d7f7183e789534
-SHA512 (NetBSD-6.0/sbmips-mipsel/binary/sets/text.tgz) = 2681e2fd0973fa7573dd6a1746ba7c491956a82256a8522cbb65c267402ba700da71b0ce44c65269787385e596913ba1042eca4542e5751f55beaa2679d673d7
-RMD160 (NetBSD-6.0/sbmips-mipsel/binary/sets/text.tgz) = aba3f473d85e3a8fd5ae41ca25c7433a22b11f36
-MD5 (NetBSD-6.0/sbmips-mipsel/binary/sets/text.tgz) = 0b2dbc9b54843ba81289bc994b3fcf7a
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz) = b1a8652e56663a63c6376ecf20ccf9f8f876a9e8
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz) = 3e4a01eeec83c7da8725badd449c51dcc677203373d1ca0725a157a6f9ebee86fa8ca7d66e1936420569e7152fe9bf2089764b94132aa04d61e36661ea0d1b32
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz) = ae01910e3901d7adf1b925f13b4520e46bce2917
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.symbols.gz) = 14b2804f6c6f16940d4bdda28c6426e1
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.ecoff.gz) = 532b94eea6032bf2867a860f78973c95b3baf210
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.ecoff.gz) = a3017e2f1bc7d008d45d53f3733ed573c18de5d44c2c7a1e969f2938119a5d6996c1eb913e7ef6b28cddfb2e6da4e4ddb6aaddbb9caa6c43b90d046f2ba396db
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.ecoff.gz) = bfbcc81a415674512ffdaa8ad7180d4499fd410d
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.ecoff.gz) = 01742badd90ac599c850ef5d7f98de49
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.gz) = 1040bc406f9543efe4f2a6c198d136ef45d0e9f7
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.gz) = 1bb8fe9e495603393f69f25ac5fe57d8f26e64cc1573af4088d3e2929d8043ecff721d38b0d4f3f6b6934661df6f6f2790d1d506ced6f8f21b57c1f1554e79a2
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.gz) = eece122ff5df495cfee6fafeba2fb086cce6623b
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP12.gz) = 8bc4a605a8cb06bfcf835aa4a5b16411
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.ecoff.gz) = 0fa0539d5bdaa751a71d3df4a573adb90d742cb3
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.ecoff.gz) = 4e94bbc422b322b6b250a8cdf31144cb97f6349a2cd075b8720497dbae36dc9f90d0b48da549bbfd3d7908bdf078cc95e300bde365df6e204008a0af85a5e7e6
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.ecoff.gz) = ec847458dd2c3b20dcd27d5bc14ced2601c998e5
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.ecoff.gz) = e74b65c6a2f141174323dfe40cc0e730
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.gz) = 2c863ba399e4aad44ef7b76dc60bcedbc112d1dc
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.gz) = 27c329497ed9ac49c096071c6250b01135b590b9d2f5d79366f53409b4abf9daeca15f323a35521b9a79f4264d5784e1d49dec269cc51ee0df52a686bf6fea88
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.gz) = 410dae1e4c4a5b3f2b9b000c413faa6ccedddd5e
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP2x.gz) = 0538c7187f0c5778a89a660749018ccc
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP3x.gz) = 1968926bf27f4cb8f5fac47a22ed3327dfb52c43
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP3x.gz) = 0d5d484b19505ebbebda2daff665c43c77aa9e087946daf198684f7cba944f11e2dde344930e99ef4a24c02c6fb83009115b45a0100b955b0dc8450c00fc2f38
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP3x.gz) = 4194967cb2a542b818e0f4670e194e91c6b20635
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-GENERIC32_IP3x.gz) = 2d25467ddd2b88d4110211ab86f1c77b
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.ecoff.gz) = 8bbc293222db73fb4be9015b07e05070c413de50
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.ecoff.gz) = 7c0f743299c829bea945e1f927dce38ad44b07f012949532d1e0f73bf3f44bb5931f1772db34b8598cb46b1e8d522c1de29e537105e8f4f1c10057bebaabe33c
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.ecoff.gz) = 4c67683e70c5c31659196601d15fc98de34dbd10
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.ecoff.gz) = e3cb87e4586bd5e1ec2602cf7767495f
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz) = 66a33c0bed49bb9e1dd95cb3c79f944ee56fea31
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz) = f3dfc078ef7e21741758b7e3ea76af80772a1d3218b0178ce825814bd16a895115df7122b394c58f63af6b2128e57a95064ae3fc44a5a3e56d8a03327bf3174f
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz) = c60e7094e3801d730f699b7a67c4403ced988c92
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP2x.gz) = 2c406bbd7ec78cc4c97dcdc48ee476d1
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz) = af7722c589f536235fb6d25f27231a6a3eacd3c4
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz) = f7b6acf595cbb8e7a54b34b458c39c384ea0e3ce44fcd142c7f71cb08551b56624969872fde0f90614e40582bc45fa3e41be31de0de954ce43fcd34375cd5d04
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz) = 3b853ba98c7c4016aeec80103318c1147aa52ac6
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.symbols.gz) = 001d3d08526a1d35fe6a2d66baa59ff9
-SHA1 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz) = 9fef8eeac9eedbd6ce7744b13c0e14efc835c1fd
-SHA512 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz) = d4af0b7ffc0596e209e19161bce14533610fd414350b761a58873c16858c3f44f2bc20135f7f14ffc9458dbfc029dfebb998e19f02176c9718f6a6406ea5b262
-RMD160 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz) = 420fe89a1bf2f952113c22d083512456f98738db
-MD5 (NetBSD-6.0/sgimips/binary/kernel/netbsd-INSTALL32_IP3x.gz) = 7081086c1dca701908d84d74c29fc81e
-SHA1 (NetBSD-6.0/sgimips/binary/sets/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/sgimips/binary/sets/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/sgimips/binary/sets/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/sgimips/binary/sets/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/sgimips/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sgimips/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sgimips/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sgimips/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sgimips/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sgimips/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sgimips/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sgimips/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sgimips/binary/sets/base.tgz) = d02636d2688644bf3230c10bf072000a44cd2f5a
-SHA512 (NetBSD-6.0/sgimips/binary/sets/base.tgz) = abc4fb8ba2047eb2c99070b0b7a22e29a071c44ef8ce3d896969648dfb6ead55d396e8a7c0716e34e45f51565c6e29011d0e35cb914cab4691c8672a29f24fbc
-RMD160 (NetBSD-6.0/sgimips/binary/sets/base.tgz) = f91ad6342293731972f28cb6286e6926b3de10e0
-MD5 (NetBSD-6.0/sgimips/binary/sets/base.tgz) = ff1da3a02630406282d40b75528def3e
-SHA1 (NetBSD-6.0/sgimips/binary/sets/comp.tgz) = 27ba59fd7d5e90f91446a151f804437f8c249e8b
-SHA512 (NetBSD-6.0/sgimips/binary/sets/comp.tgz) = f119dbb5c22cab49fdd8f0dec15407fa520d1d8eb02cb4550bd01f88d49378b4999e0041f6da8d4ee2bfa4712590a5345a184ead5a4b014d80c79c459bb34e3e
-RMD160 (NetBSD-6.0/sgimips/binary/sets/comp.tgz) = 9cf77a31c5419a857ccf19a148eaf510a4d83aed
-MD5 (NetBSD-6.0/sgimips/binary/sets/comp.tgz) = 2a2b72f824b9953fe580cb284a37c96c
-SHA1 (NetBSD-6.0/sgimips/binary/sets/etc.tgz) = 6140d0c55fb88e07b633da0abfd0d5a345eb908b
-SHA512 (NetBSD-6.0/sgimips/binary/sets/etc.tgz) = da25730f805732e0d4b90612dd9b5236f6fed96c75f022f4d1053495d897f7355b5d75b95f010b041795d6331285a2ab0ada3f34175b611147b295e697d54eb9
-RMD160 (NetBSD-6.0/sgimips/binary/sets/etc.tgz) = 79973e6b9ad3344bb4e64ed23a1ba9bcd16fb8a1
-MD5 (NetBSD-6.0/sgimips/binary/sets/etc.tgz) = c96ede97a5ce906a1fb580fc1dabbf94
-SHA1 (NetBSD-6.0/sgimips/binary/sets/modules.tgz) = a206108d50c0e8a138571adf8a674334de685263
-SHA512 (NetBSD-6.0/sgimips/binary/sets/modules.tgz) = bfb96bc27db44cc540d3ca143099e2574ca9a42eeea307eb3b835b624b52ebc14fead54754fb3d95916e6f4c2fecafcaedebaf28a32ec0c1e1b798caf9a7e44c
-RMD160 (NetBSD-6.0/sgimips/binary/sets/modules.tgz) = 9114bd11fa6c211d72726f5e88458396165a6fe4
-MD5 (NetBSD-6.0/sgimips/binary/sets/modules.tgz) = 8f298135900ed72db173ffa002c4103b
-SHA1 (NetBSD-6.0/sgimips/binary/sets/tests.tgz) = b10f0716cc4a705193fe7485de5b6123153a40a0
-SHA512 (NetBSD-6.0/sgimips/binary/sets/tests.tgz) = 79061c6367c51f6b0769e7ad724d440d055cefcc6ce1bf1730e602b2080af16be5a7f74a3c57391567dfb62f49588721bee5704d71039527c4269add0bd8420f
-RMD160 (NetBSD-6.0/sgimips/binary/sets/tests.tgz) = 869f46c688b7d65e6f93dcf06e4d406fea799082
-MD5 (NetBSD-6.0/sgimips/binary/sets/tests.tgz) = b02332c28d31942e96e416d4dbf2f6d8
-SHA1 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP12.tgz) = 18e386c5766aa3391d5d29a7d55ae1eb3b69af2b
-SHA512 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP12.tgz) = 8caad11aefe7fe71d346fbe3950fcaeb08a3454793e24f12c83b91c3078ef4e15f44c94cf47aa785e8b975f7403f0de2be38fa3ad3a48798e70efcdded5eed0d
-RMD160 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP12.tgz) = 8e7531be01ac24bab8b898224ae33df0e84d637c
-MD5 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP12.tgz) = 2f1a7076fdb72698d28a9d8032b79943
-SHA1 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP2x.tgz) = 4097c0cfecd7e8766e4542ffd936ac18fb9ed32f
-SHA512 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP2x.tgz) = 9595785d477c04e57b81e2dd71957dfc3309fad013b7210d93d2501e64c308b57af9a22581ac3e61d8f3ec91aa62d49bb01ed5ab1eaf90557f41c0d4d3c3096f
-RMD160 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP2x.tgz) = 2479e9e6495e16753c6c0e3e8dead0c49095c245
-MD5 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP2x.tgz) = 8661ec66f60bce4cb75af3d6756580c5
-SHA1 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP3x.tgz) = a5a29b61f5eba57e0bcdbd6af9ecfb9a4485a90b
-SHA512 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP3x.tgz) = 4a5c4ebea7ddfad9bf8f3536212eeed17f22dbd74a38b7f48bd7963c6c7c4f29da10ec6454053a441db830cd5c18a3a342b6ad22f5fbb9d97104b683b94685cd
-RMD160 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP3x.tgz) = 3bae9be1ed83ab2eeb80905c1e1bcfc59a4b6f7b
-MD5 (NetBSD-6.0/sgimips/binary/sets/kern-GENERIC32_IP3x.tgz) = e402bda170a73a296a773b851afa1a3b
-SHA1 (NetBSD-6.0/sgimips/binary/sets/text.tgz) = 11418c012b904e8a99e91493d36fdca3f6e6f006
-SHA512 (NetBSD-6.0/sgimips/binary/sets/text.tgz) = 501a9e78e9310aeb3f0c766464b5453e2718f23b5d3290428ad775977cd2a42b5444b91d7b1707ae9991b58af14f376d9d93cebdc54c74ea8d20ed06a7e0387d
-RMD160 (NetBSD-6.0/sgimips/binary/sets/text.tgz) = 272adf1723ad8ab137b985946e64ca3b27055199
-MD5 (NetBSD-6.0/sgimips/binary/sets/text.tgz) = 0f6d77a90f9714d54517c4b5660150fa
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xbase.tgz) = 0e912b46017d4afca665692603e483e95d627af5
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xbase.tgz) = 54c6bb297c09510019a0e21816018b7f8abbecd3e9dab5f5dd48d1cf35493b0cb0ec5ca01f1bbc9066fa1b964cf550119c1678a70d80d4471d9df73627655bb6
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xbase.tgz) = d8b979b953547c386cf66488db96771f3923cc2f
-MD5 (NetBSD-6.0/sgimips/binary/sets/xbase.tgz) = c04dfa38a56e78bf0d075dd4d333a869
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xcomp.tgz) = d764bc540d10ebb805e8c976e8b300d9c6a108e0
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xcomp.tgz) = a6795d24491875468bdabf17698ee483c0aaeaae64772667083049c7f2b2ae82943277cd41fe870c085ae7498f6546d971362d77e62f6150f40aa23f6b92d732
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xcomp.tgz) = 99f0489f322b26960b51a53e24fd03faccccc512
-MD5 (NetBSD-6.0/sgimips/binary/sets/xcomp.tgz) = d6e8029f965bcade40d027658ea70e14
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xetc.tgz) = bcbb9c22987ffa1ec653920c5013030fb974d73c
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xetc.tgz) = 7e2ad6276a043e98c194a03fc38f3754193c0f75bfbb79cc855bf08d7336d01763d7df89edb3ac63056a403d08e7e21b43a1b4468c34cb2969024bf5894988e2
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xetc.tgz) = 35c9e251920fa14e32a68f6d811ec8ef81a233b1
-MD5 (NetBSD-6.0/sgimips/binary/sets/xetc.tgz) = baf2f338baf24e78da645312b33eab7b
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xfont.tgz) = 43b823091c3c5b340538ecf7cbd17be47e6d5692
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xfont.tgz) = 63a18f59b0c2ef7eab2ba7526fe2815155e476426d34e21e06d2c00fc872cc01bc241704971524c9c6410f420650a7d69914205a45a1b232413e9ccbff2d6b93
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xfont.tgz) = 3cee7affdad412ed072636553915fab9f0d23ca2
-MD5 (NetBSD-6.0/sgimips/binary/sets/xfont.tgz) = 0be724043d9312d60c89901238982903
-SHA1 (NetBSD-6.0/sgimips/binary/sets/xserver.tgz) = f604963ee4c952665400bd5742f6ac3925903291
-SHA512 (NetBSD-6.0/sgimips/binary/sets/xserver.tgz) = 2f5d36f2f728aeed88a3a2e8da36acb3117018fe92f97769babe2b37670c0ad9cce319bded4a4c78d7859c12df4124fdb2faed33abaae1b4cea20098582ff99e
-RMD160 (NetBSD-6.0/sgimips/binary/sets/xserver.tgz) = c18f29c81d11389a45b5c8a6226ec1e7c074582c
-MD5 (NetBSD-6.0/sgimips/binary/sets/xserver.tgz) = 41d79391ddbccae7930228219015083b
-SHA1 (NetBSD-6.0/sgimips/installation/diskimage/diskimage.gz) = 5acd23fd19ce75e45f071d5de6396668b89ea681
-SHA512 (NetBSD-6.0/sgimips/installation/diskimage/diskimage.gz) = 007da5ebfe4af418c4f696956cb768575b656dd40297cb39dea7b03146bf48aa22fe9f288325737b6904f5e08b89c79d60a375dce4d885fc83f3bb85595507b2
-RMD160 (NetBSD-6.0/sgimips/installation/diskimage/diskimage.gz) = d4fabae9c31423c0557937fd07cc796f48f392fa
-MD5 (NetBSD-6.0/sgimips/installation/diskimage/diskimage.gz) = 8575ffc5db9771c5aa948ab437c80e1a
-SHA1 (NetBSD-6.0/sgimips/installation/netboot/diskimage.tgz) = 075e8acd73646b2b89509714ba7ca7a001cb72a1
-SHA512 (NetBSD-6.0/sgimips/installation/netboot/diskimage.tgz) = e0dc8dfb79ee590decb7c315fd4b8cf7a55a2981a3752aeddc25afd83a79fd72d6852f9823ab857077cfe40c9619dc8b537ab1227c42441b43b2fb9129a419a3
-RMD160 (NetBSD-6.0/sgimips/installation/netboot/diskimage.tgz) = 4b4d8d21878765a902c28673fa2ff2fe62ccbc55
-MD5 (NetBSD-6.0/sgimips/installation/netboot/diskimage.tgz) = 250ed8b78bb6bc799d92f3e82d62003a
-SHA1 (NetBSD-6.0/sgimips/INSTALL.html) = 57dd965aef89b4c8190886a37ab3fff06021b8eb
-SHA512 (NetBSD-6.0/sgimips/INSTALL.html) = c1e5774651642601daaedef68c0337dbf8d634abddc9eaf8d33d38358076f49867df6644d0c8c7e8e730c2d37a2a35af9c7c03dbd817f5b4eae5d7383e900190
-RMD160 (NetBSD-6.0/sgimips/INSTALL.html) = a5c94dcca469b47cb176426a8cbd4c0e2df210e5
-MD5 (NetBSD-6.0/sgimips/INSTALL.html) = 7c4d8de6801d46c1dac589fc304590a5
-SHA1 (NetBSD-6.0/sgimips/INSTALL.more) = b9c2017ba93cbb87b7d0a88fd6912eb81a9b7ed7
-SHA512 (NetBSD-6.0/sgimips/INSTALL.more) = ca9a739d8c56336ebbfffb856904a4753e8948cf8c1a4da057f212cffaba7493c07467bcd0608923d1dc3deb76ceac989cc556cd025380ad1f80109a46aa6746
-RMD160 (NetBSD-6.0/sgimips/INSTALL.more) = 0e733569f0cd6acc3de8e7b3acdac89953e554d7
-MD5 (NetBSD-6.0/sgimips/INSTALL.more) = a43c8c4a3aea3585e8de329c8efef129
-SHA1 (NetBSD-6.0/sgimips/INSTALL.ps) = e61b0904bc556853037f1a9564486e0962a8b8e2
-SHA512 (NetBSD-6.0/sgimips/INSTALL.ps) = 122ebadac3919533845714c90f87c59a65722d6e79f50bf231866f2917e6d4ebcb4a8b5da8e4ac9acbe4e333e841611ef80665b7e69427db90d4843e5f630c8b
-RMD160 (NetBSD-6.0/sgimips/INSTALL.ps) = efbc102832be0cee24ce3a5810999c5ea9c4b18e
-MD5 (NetBSD-6.0/sgimips/INSTALL.ps) = e86216add5a2ed163e13a17c6ff291f2
-SHA1 (NetBSD-6.0/sgimips/INSTALL.txt) = 104c1ef873cfbe774ba106e437168053539b65b1
-SHA512 (NetBSD-6.0/sgimips/INSTALL.txt) = 8b5ad1ef07604c0e8ac5ec2c7f43a4c483610a7ad7ac4c15a13c4151652500a21b203569bcc9ecbb53e035f8b90e1c7e3fc81d985fe3817685957865fb4924cf
-RMD160 (NetBSD-6.0/sgimips/INSTALL.txt) = 7cc2ca6174d6b5e2ed23f8db3d6b62bb02c41637
-MD5 (NetBSD-6.0/sgimips/INSTALL.txt) = 99bca5bfeb2112666aba79a96379899a
-SHA1 (NetBSD-6.0/shared/ALL/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/shared/ALL/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/shared/ALL/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/shared/ALL/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/shared/ALL/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/shared/ALL/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/shared/ALL/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/shared/ALL/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/shared/arm/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/shared/arm/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/shared/arm/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/shared/arm/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/shared/arm/xbase.tgz) = 875fd641f969ec00f854ca1334d084947450c740
-SHA512 (NetBSD-6.0/shared/arm/xbase.tgz) = 75d0c9e9685b6b7bb706df7427c8b52f59c4fc4d0e725b02ee18024f75a546dc41de5f1a5d8552a8d2c84bdf87856e5857b0f12914801ca7b36b69536d617b4e
-RMD160 (NetBSD-6.0/shared/arm/xbase.tgz) = 1a4d099d59b2bd882e99f1b2df1c7bf22b890d48
-MD5 (NetBSD-6.0/shared/arm/xbase.tgz) = 5eb9c573c5a0c96701f268a3470a58b9
-SHA1 (NetBSD-6.0/shared/arm/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/shared/arm/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/shared/arm/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/shared/arm/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/shared/arm/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/shared/arm/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/shared/arm/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/shared/arm/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/shared/arm/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/shared/arm/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/shared/arm/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/shared/arm/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/shared/arm/xserver.tgz) = 4ccfef1d49179603286042088bec0218c6b2031d
-SHA512 (NetBSD-6.0/shared/arm/xserver.tgz) = 809fc0a9065c1b9e7cd17aeb0d41cfd3158efd6c585556af01c4a3c93f0df3646a2ff77c6994449a703a408c0988fc1aa68cf34c7e297a3056d73ded57034c12
-RMD160 (NetBSD-6.0/shared/arm/xserver.tgz) = 403604404261764c74f10fab774c4653fd20cc9b
-MD5 (NetBSD-6.0/shared/arm/xserver.tgz) = 914f909b6878cef16a92765a8cbb52ca
-SHA1 (NetBSD-6.0/shared/m68k/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/shared/m68k/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/shared/m68k/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/shared/m68k/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/shared/m68k/xbase.tgz) = ffc6dc889560371042dd12a5486a9a2c499b86a9
-SHA512 (NetBSD-6.0/shared/m68k/xbase.tgz) = 9aa2ba4d703a13020acf8543d1efcde76b6f0f4b411be20f804709b3802e537be1e651eba469830c4fd4777a379ea9936200a3a3eb4b1a702c04bb81aafcc723
-RMD160 (NetBSD-6.0/shared/m68k/xbase.tgz) = 3ecf53e7414ef859a47fe5afc108cf3bfa82fb1d
-MD5 (NetBSD-6.0/shared/m68k/xbase.tgz) = a6af002ce158cf72eb5c6a7cde2c0989
-SHA1 (NetBSD-6.0/shared/m68k/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/shared/m68k/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/shared/m68k/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/shared/m68k/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/shared/m68k/xetc.tgz) = d2ca34bd668e108cbbfd4b45720823663339f8bd
-SHA512 (NetBSD-6.0/shared/m68k/xetc.tgz) = 431ca465f300e7eb5d4dbd44c43e412a296fb4d3129217e752f86a720e8a8bdf736c9add05a45518a4f3e6cffa32381ef61e9186d360b68a5f8c64d87e385fb5
-RMD160 (NetBSD-6.0/shared/m68k/xetc.tgz) = 4c5d664679856b02b694534cd6afdf20597e6d53
-MD5 (NetBSD-6.0/shared/m68k/xetc.tgz) = 72bd67556ac14ea0ce147374af0ba624
-SHA1 (NetBSD-6.0/shared/m68k/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/shared/m68k/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/shared/m68k/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/shared/m68k/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/shared/m68k/xserver.tgz) = 1d20fd039546a66b428b854c659ea5e2ee9f8114
-SHA512 (NetBSD-6.0/shared/m68k/xserver.tgz) = 091d09049d0af5555feec02065234e281677aeb3ecbab5a19413d924a8b58dc7f64401ef68e68bc52d8b6eeb73e091d351c45805374b8bf276b0181415968561
-RMD160 (NetBSD-6.0/shared/m68k/xserver.tgz) = feef5d52278d23637d7b8ba77639bfd96918e90e
-MD5 (NetBSD-6.0/shared/m68k/xserver.tgz) = b2bd6057c374376388766fc8667eb9a9
-SHA1 (NetBSD-6.0/shared/mipseb/games.tgz) = f56d3e5181634f6a3d7908dcb002ebcb1c5aaff0
-SHA512 (NetBSD-6.0/shared/mipseb/games.tgz) = 0cff50ea13e34fe338edf70da6a28af061580feb4cb0773828adefa631ebd471a96568a3b30ea0f13f3bb116856a1b6aad8a5a52443346f52e4907f4caabc5f1
-RMD160 (NetBSD-6.0/shared/mipseb/games.tgz) = 1538910578dbb8eee2931200fac0ccda44758e5f
-MD5 (NetBSD-6.0/shared/mipseb/games.tgz) = 2bd5bd0ce72df5cf92767b8c3f7cc208
-SHA1 (NetBSD-6.0/shared/mipseb/xbase.tgz) = d81c7fe75a90f1b2111a066e78f1f2b3e8edcd8c
-SHA512 (NetBSD-6.0/shared/mipseb/xbase.tgz) = c241391fcde4a685a0a2af6f843844ac2e918024c447a2b5ea2cf5300f69acc42fdadf53d3b0348f10723b786bcc0f420e68fe36228375bf3cb5140de41eb40f
-RMD160 (NetBSD-6.0/shared/mipseb/xbase.tgz) = 2fbf60b64c0b7ac2be72ebf998d9d7390fc40705
-MD5 (NetBSD-6.0/shared/mipseb/xbase.tgz) = cd23ca0f6b359c4d695d4494a147d40f
-SHA1 (NetBSD-6.0/shared/mipseb/xcomp.tgz) = c8f5ff5ea9f9bbe231f92d8b7f3bfcbd2897069f
-SHA512 (NetBSD-6.0/shared/mipseb/xcomp.tgz) = c7590075195019078b68ec5f87e36479ae2e7b7749c523df4ef21c9d881c343cda9f5c2bba897dd313329a76fe5c18e920d92827878d98ce08a7dc776352cd02
-RMD160 (NetBSD-6.0/shared/mipseb/xcomp.tgz) = bc60e267cb6e11b4a7305f8b7074084e179e0ff5
-MD5 (NetBSD-6.0/shared/mipseb/xcomp.tgz) = 8e58ee51667def3bd015f79769c0d932
-SHA1 (NetBSD-6.0/shared/mipseb/xfont.tgz) = c551bd13179b9508c2e3a7e19cec323e8ba21844
-SHA512 (NetBSD-6.0/shared/mipseb/xfont.tgz) = 764527f2f3f4686759fcae3fd093f4e00f34e1249994126221a6f9afe73d4cf8ddfbe8b8311798da2ed38c52466a44bb26ea08ad5aab1c08eebcc9019b4223f7
-RMD160 (NetBSD-6.0/shared/mipseb/xfont.tgz) = b3a365bedf8b4a20f3920d0e33b9a42fce288953
-MD5 (NetBSD-6.0/shared/mipseb/xfont.tgz) = adac8939da213a0195cc1d351f979199
-SHA1 (NetBSD-6.0/shared/mipseb/xserver.tgz) = 686f6e6d722c9676351ab058736f7077b4ebd2f6
-SHA512 (NetBSD-6.0/shared/mipseb/xserver.tgz) = 5c818f22edbeac7325228af99d6da6e44b5eb659c7c9fcc6b332071e97a0a490081eda7f9e0f22d6a3f3a589ae34179b434751a6191db5c664683d7510aecedc
-RMD160 (NetBSD-6.0/shared/mipseb/xserver.tgz) = 0e9f066095b505c7f062bf877147189a7a2f0649
-MD5 (NetBSD-6.0/shared/mipseb/xserver.tgz) = cdd2e5127838437df40af161e0c8398f
-SHA1 (NetBSD-6.0/shared/mipsel/games.tgz) = 27d9f98fecb3495e51939df9f107e81e527af26f
-SHA512 (NetBSD-6.0/shared/mipsel/games.tgz) = 46bb4e10313cfffaaf4f7fa2157474ef940f94bcc9f84b46f829c7615bbf45e4e01edee7b7efb84bc28561e0712c37cfc737f9c2a0d9a73b67c80c8aa0f3a9af
-RMD160 (NetBSD-6.0/shared/mipsel/games.tgz) = 947feea90ec2698a65d555cb78a29a001b086589
-MD5 (NetBSD-6.0/shared/mipsel/games.tgz) = 355f00978fed8e8da6a251e591be5387
-SHA1 (NetBSD-6.0/shared/mipsel/xbase.tgz) = 76468fcada5a9e26652aa9f0f9f3c94829a317e9
-SHA512 (NetBSD-6.0/shared/mipsel/xbase.tgz) = b2adcfc2dedef30b21b885c8fc757d0479541744a280a9997fbeaa9c881009ab4b0019e0001a540a8eb6db5f84db87b365e420bb2d4270af209821bdb080369c
-RMD160 (NetBSD-6.0/shared/mipsel/xbase.tgz) = 1e0074d03d9fbb3373e0a427b25cc7097bf6d3c8
-MD5 (NetBSD-6.0/shared/mipsel/xbase.tgz) = a8f29ec2e3768405942f97af3dd08ee7
-SHA1 (NetBSD-6.0/shared/mipsel/xcomp.tgz) = d8ac89f3f6ff20abb0adabc49227afdb74aa2040
-SHA512 (NetBSD-6.0/shared/mipsel/xcomp.tgz) = 4f03213fb061dae9421747209628d06ede6bbb71a7560a9e1a54796b907f1620146a33fdce52974227a21acedcc210b99e15c4fdd36432eba60c1041a92d8cee
-RMD160 (NetBSD-6.0/shared/mipsel/xcomp.tgz) = 6be5e72b9b57c9bdf8ed8ea127e2a73830feeecb
-MD5 (NetBSD-6.0/shared/mipsel/xcomp.tgz) = 59a7ea141587417be38ab1f6056cc780
-SHA1 (NetBSD-6.0/shared/mipsel/xetc.tgz) = b9f6b1a54ffab37b11f4c6e717b481cd087fb609
-SHA512 (NetBSD-6.0/shared/mipsel/xetc.tgz) = 72f35e65f3a90967e250a2006d500619b3824f7f5c3d7494554f153ec5cda5b28c445f28c34a1e4463f40da5855e8d4257726411796967fe37763d90cf7fe461
-RMD160 (NetBSD-6.0/shared/mipsel/xetc.tgz) = 1169c246f91189fd0c4ae86ac27a92f5c2edda3e
-MD5 (NetBSD-6.0/shared/mipsel/xetc.tgz) = 8f3c52cc5af1cafaf7b0d0f884a5b537
-SHA1 (NetBSD-6.0/shared/mipsel/xfont.tgz) = d06848571034f3b7fc975082f1de37b912acb18c
-SHA512 (NetBSD-6.0/shared/mipsel/xfont.tgz) = 66a1013c935bee5e7e5d24325a527522306bcded7ced63790f2e58831b3ed91176a1b9510b2159be63504d5167d48d534919927ffc6e225ae2bb2487f90a9ede
-RMD160 (NetBSD-6.0/shared/mipsel/xfont.tgz) = c9502843a5d4dd7e996e8d158c519cf7f8575cbd
-MD5 (NetBSD-6.0/shared/mipsel/xfont.tgz) = e812899176eac2bf65a6d949ac3f3424
-SHA1 (NetBSD-6.0/shared/mipsel/xserver.tgz) = ff805022f409202f3346c45475c7ec0f8187218e
-SHA512 (NetBSD-6.0/shared/mipsel/xserver.tgz) = f2bb3810a5572b519980126a3d934f63b5ab5c2fcf9fb8166c556bd3cc14cfaa151d582086bb1506ac9ac7e21d4e70a5cd5c3faed96212d8a14a0b5bafdcc4c1
-RMD160 (NetBSD-6.0/shared/mipsel/xserver.tgz) = d5ae336337cc77f7f55f542b3457918d6fc0efe8
-MD5 (NetBSD-6.0/shared/mipsel/xserver.tgz) = 92447a1560887d337d22e2deed0670a6
-SHA1 (NetBSD-6.0/shared/powerpc/games.tgz) = fbf69640b362df2446d7414ac3a13db100c289eb
-SHA512 (NetBSD-6.0/shared/powerpc/games.tgz) = d86b41d79aea4204ccf45306937a5ec45629e37873a5956c0280fd1d54cf4a808542d097f9d978fd3277791554ce8a6fb4d0ccd46e30210549d5cce1145bb499
-RMD160 (NetBSD-6.0/shared/powerpc/games.tgz) = fd2aed1eb51f4db522fb5163e8fde4c040b55d30
-MD5 (NetBSD-6.0/shared/powerpc/games.tgz) = 997ae5fb42196a787df89873be321e47
-SHA1 (NetBSD-6.0/shared/powerpc/xbase.tgz) = b7c8146146ebc15191c1bf53f51f8f980fe8c816
-SHA512 (NetBSD-6.0/shared/powerpc/xbase.tgz) = 091f5d00414a9ad478811bfb0e953f2a204869bc5e310790886a59c11953974cf7068cd9a96c8823856ab2687ffa2ac31e97494f47338bfe31d80217382c59f1
-RMD160 (NetBSD-6.0/shared/powerpc/xbase.tgz) = 4bd1bfdc7c1e1619de63fb83276c21039b945357
-MD5 (NetBSD-6.0/shared/powerpc/xbase.tgz) = e621806afa0fcc9cdcef0f9b3c7dfcbd
-SHA1 (NetBSD-6.0/shared/powerpc/xcomp.tgz) = 960dd33b61e19dec92096a54791aca1cdf56ce54
-SHA512 (NetBSD-6.0/shared/powerpc/xcomp.tgz) = 111dd50041e4008aeadb898c3d08f9995c5c13a41ccc20993b4ad51c81d7f6ee3b4dab16158ac7436d085b80e4a643b236a9c97edd3e915125a1466154538420
-RMD160 (NetBSD-6.0/shared/powerpc/xcomp.tgz) = 0cf8b9a8d1489a32ba0b5a277d90e429c40650fb
-MD5 (NetBSD-6.0/shared/powerpc/xcomp.tgz) = 4ba4077ca2c0edf71813165fcf5321fb
-SHA1 (NetBSD-6.0/shared/powerpc/xfont.tgz) = 4711fcbade0238d60b7b89cf0d7873b03d7ed1f7
-SHA512 (NetBSD-6.0/shared/powerpc/xfont.tgz) = c29130f55f536f602253a7f92f073ebf6ba02baea09f8011530bbf7e03ae96594334f0c60b29a8bceaffc3eb8b152db47548e38a3c8a14abc5fe35bc5d1d7d93
-RMD160 (NetBSD-6.0/shared/powerpc/xfont.tgz) = 3b01af0f8e34367988d559fe0fbb0acbbafb0b2b
-MD5 (NetBSD-6.0/shared/powerpc/xfont.tgz) = 6ba15ed12217b726d9129db8e942a048
-SHA1 (NetBSD-6.0/shared/powerpc/xserver.tgz) = 05aac7e617e0cac05a88062fef29bb459da7a1d1
-SHA512 (NetBSD-6.0/shared/powerpc/xserver.tgz) = 19fb5af5d6afd78839a22e5c0694a492047b5200c569cbf58c676ff32ec250b21edcfe2ed00b65092fdac374d1ab9eaaed6113c69bc03009cf458aedc6014913
-RMD160 (NetBSD-6.0/shared/powerpc/xserver.tgz) = 774d2a1072b8d122790ad189a6d2ada2ad99e7cf
-MD5 (NetBSD-6.0/shared/powerpc/xserver.tgz) = 3daf1477cadf3593e9ba45e3703fe8a5
-SHA1 (NetBSD-6.0/shared/sh3eb/games.tgz) = 37e15b0950aaaf1af36427ae5dd5866c1879b6b3
-SHA512 (NetBSD-6.0/shared/sh3eb/games.tgz) = e674abb1b1966acbc581a8f8b3e37841f48656e66f3302077cbb2de443487912b99521336ec5dc096fa3c7769b2d7623e1d1720a079407ec1861d32159a72ebc
-RMD160 (NetBSD-6.0/shared/sh3eb/games.tgz) = 36070071e8315d2352be1b3e563ce7ef7625d184
-MD5 (NetBSD-6.0/shared/sh3eb/games.tgz) = 0016145b46957b95dd158b4441dfb010
-SHA1 (NetBSD-6.0/shared/sh3eb/xbase.tgz) = 564bce6dd7c37b5e941e41d50f363c133fdf8f97
-SHA512 (NetBSD-6.0/shared/sh3eb/xbase.tgz) = 23b3306254c789331542e63974f9d7cdc54d99ba2cd67cf6a1c97f09afa4f6cf6aa8798e37b7c38f4a55afd1572154f291fa1bf2e2a1fc87165fd6bd7f89fb80
-RMD160 (NetBSD-6.0/shared/sh3eb/xbase.tgz) = 476fbd8301bec0795a01552728ada44204d2dbe6
-MD5 (NetBSD-6.0/shared/sh3eb/xbase.tgz) = 9fbbbdb3acfa4ccd9f0b309ea0ed0700
-SHA1 (NetBSD-6.0/shared/sh3eb/xcomp.tgz) = 526a278a13833073e6231e879abdec85400ca888
-SHA512 (NetBSD-6.0/shared/sh3eb/xcomp.tgz) = d2081a7536e3d7fa27a363afd8f6eb5fc3de4606f11b4857be2f1df59934da9d3d16e0df3a6edf4cdf52c8f579e0e4c06f07de0959b5213c21be1a8fdc2ee134
-RMD160 (NetBSD-6.0/shared/sh3eb/xcomp.tgz) = 4a767ff08e9bcf98f886849cabebd1300397256f
-MD5 (NetBSD-6.0/shared/sh3eb/xcomp.tgz) = a23a2d8be9298497b4b6d39fda330bf4
-SHA1 (NetBSD-6.0/shared/sh3eb/xetc.tgz) = 93a5cfbbfdc641f91ab363d4b65d1158d71c0cfc
-SHA512 (NetBSD-6.0/shared/sh3eb/xetc.tgz) = 85a67734801e81e129a37b73ae62211459fb16d4e52a945ef21a4bb908dd7d1d775233956086dd3d59af45bcea24fbd6f54a2a9175756d242b57e07d10767548
-RMD160 (NetBSD-6.0/shared/sh3eb/xetc.tgz) = 6fb055d0e1b6264bf1ec396236d903218832377a
-MD5 (NetBSD-6.0/shared/sh3eb/xetc.tgz) = af954b56e624948145b91aa451d77392
-SHA1 (NetBSD-6.0/shared/sh3eb/xfont.tgz) = 6139c05273b6feeecdfcd11cbe0da91256d12a11
-SHA512 (NetBSD-6.0/shared/sh3eb/xfont.tgz) = bb849454ede88d39ca60d6c513c833c2b29ea548adedb9f76870839174a3daa838d38a6ad701c78bfc164e690c5ebda9c9d00d4c23ad816df9f1962313afdbf2
-RMD160 (NetBSD-6.0/shared/sh3eb/xfont.tgz) = ea8f123f9f78b429b77ff15c924803da1da2068d
-MD5 (NetBSD-6.0/shared/sh3eb/xfont.tgz) = a87cb6769c37ae20dbf0dd70cef93d11
-SHA1 (NetBSD-6.0/shared/sh3eb/xserver.tgz) = 6cd4fdb0ff00ef5d89b47e68e538c86e395b2054
-SHA512 (NetBSD-6.0/shared/sh3eb/xserver.tgz) = e3b575cab95e297a05a26a03eeff0cf843d665ebdfd103846ad544bef1d04f93aa20ceab09b1dfaae8f59d89ebb1cbef400b7521bdb41f7542f23156540aa4c0
-RMD160 (NetBSD-6.0/shared/sh3eb/xserver.tgz) = 7e52b98276b4d097f7babe918e6768ae9d7945db
-MD5 (NetBSD-6.0/shared/sh3eb/xserver.tgz) = a505ab4ce0801aabe21fe6038b63809f
-SHA1 (NetBSD-6.0/shared/sh3el/games.tgz) = 2040b4af557a62f2ade5fc9fcfe4cab3df88c7e2
-SHA512 (NetBSD-6.0/shared/sh3el/games.tgz) = 8b5071337dc844042537c24c75660e61c9709cd10cbbeab059a84da6d482260b73365ff3870f85060c130a291b6f02be174d288127ca62ce4d291a6982192317
-RMD160 (NetBSD-6.0/shared/sh3el/games.tgz) = 28acfa5a131d52df7c157e2edca1dd0f20e774dc
-MD5 (NetBSD-6.0/shared/sh3el/games.tgz) = d82c46dbc0021fd4694e464042936052
-SHA1 (NetBSD-6.0/shared/sh3el/xcomp.tgz) = 53aa1e2a910e8eed09dc07f8b724804f53fe5e2f
-SHA512 (NetBSD-6.0/shared/sh3el/xcomp.tgz) = 24645da85419528015cdaefd0c835741fa801392e795b363bdfc39558e75e7f384511c0668d12e2440114b7c543c7532aaec438048f08d35c54c9c7a748f20c0
-RMD160 (NetBSD-6.0/shared/sh3el/xcomp.tgz) = 60a461ffc1f1562274110d65c72a541ee131cd21
-MD5 (NetBSD-6.0/shared/sh3el/xcomp.tgz) = f1d2650a8d7a4ecd60fda8e1aaf8c09b
-SHA1 (NetBSD-6.0/shared/sh3el/xetc.tgz) = 1636a6fe3e01f6d8a07a19cd204a6807c8caa4c7
-SHA512 (NetBSD-6.0/shared/sh3el/xetc.tgz) = 9cea4ba4af287dd57e591d4269f2f2582010250316f323746ac56b12cefcf2590b93fbb0197c665f61b1df41dcca62d17fb6ad80d4b1feb8ac8265e91e15074f
-RMD160 (NetBSD-6.0/shared/sh3el/xetc.tgz) = 5f68e3f96f7bb9ae07fccdb1d058e4b1307b4b29
-MD5 (NetBSD-6.0/shared/sh3el/xetc.tgz) = da84d97230787283e215a4ee1c4053ad
-SHA1 (NetBSD-6.0/shared/sh3el/xfont.tgz) = 97439ccf6840b18b1e9885f5504a401bf1a93650
-SHA512 (NetBSD-6.0/shared/sh3el/xfont.tgz) = 3d15541f7d7ae2128f44355bf110415adfa4e5182829259d2c6f7a4217feff99e236d13c5bb7bbeb724ff1a09ac1f58f02bdd6eef528bc416ec3118db6fc7d45
-RMD160 (NetBSD-6.0/shared/sh3el/xfont.tgz) = cdc9fcdb5fd5032803d5bba18db58f3ea6d62c85
-MD5 (NetBSD-6.0/shared/sh3el/xfont.tgz) = a8466a0477c6c443eafe99e9d1c61131
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.symbols.gz) = 4033fc14abf440fef2f4e6370dead899e4983721
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.symbols.gz) = 17fb47f8b2731f8fe73376ab664040eefdc64690156e26acad0791871e64e5d401ea95f592a034eaf963ceebc919a6d54c06874c8be8141b049637cc55aabc84
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.symbols.gz) = 9de247cfdaae7ee9022f6d09030b58665536dd2f
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.symbols.gz) = c89c4849f164a941bc9a17cb89ca4dc2
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.aout.gz) = 98a104383326606b65c14160cf13b700c0d0becc
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.aout.gz) = 60c184cc2a78026b2ae297623a540618e63a58962e578fa8ecb0e68c5e94e9c64fe910da565b6e9427e0e99aae311e8645e2083a4cd02373f08c514a29fa9bfc
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.aout.gz) = c1569194e6d7d526911ecc813919db5103eba092
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.aout.gz) = 77f58eeb32ecae1a67c7821cfef3e1f1
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.gz) = 3aec79cc4bd37f7777e326445a18e4d551f4dc23
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.gz) = 46894446ed52b86e01d7fed75aa5285670d2d32a972be76a1019ea797583fff37423f4d9d40c29c394d123365b9a196fc7bb3824dc5952f6407b21198127cdba
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.gz) = e34c8493497296b2d98dc0522d2d4d58b56a3546
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-GENERIC.gz) = 9ccf14a3d80b596f8e594c2e7db89224
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.aout.gz) = 08fdda8c99f112770acb58f662e7dc7f92e211aa
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.aout.gz) = eb7dd72ec967546883dbf9e50fc9bf770e8aced07020c03f93abdc0c9bd6b1a03ff320a3f5167f74caf732ff37495e7507628e0ea213ae8fbf209fbfc2ed2368
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.aout.gz) = 97cd05778ad6cbef869bfd1ef9bda107db56b099
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.aout.gz) = f174a788515cbae3b497a13a1f27b68b
-SHA1 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.gz) = 78fa421384bc331c7bf1194c90f45969e0b9f9ca
-SHA512 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.gz) = c97fe5aa7c364929d749ee65dec8b6a7736da39e4d3366dfd8b17e67e8b5e56f9d37a0b8b4437c161602bfd265b486378ac272fc4e7917851b64faf8a9389370
-RMD160 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.gz) = ef146283b89c96c7d68bef166e853a83df6a65ee
-MD5 (NetBSD-6.0/shark/binary/kernel/netbsd-INSTALL.gz) = dda410ee10ec3e07d4b962e08e5895c6
-SHA1 (NetBSD-6.0/shark/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/shark/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/shark/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/shark/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/shark/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/shark/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/shark/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/shark/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/shark/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/shark/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/shark/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/shark/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/shark/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/shark/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/shark/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/shark/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/shark/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/shark/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/shark/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/shark/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/shark/binary/sets/kern-GENERIC.tgz) = 436b25de68b7e666f29611394561037b31f1a9b7
-SHA512 (NetBSD-6.0/shark/binary/sets/kern-GENERIC.tgz) = 64acef2068786ba3afa466eda01db892f03fb48db03ad9ee0817f6a78b8019225beac65553dcd733d9858b4c35da337cbb20a7efa7019e77178e637dd5cb25f2
-RMD160 (NetBSD-6.0/shark/binary/sets/kern-GENERIC.tgz) = 83396c190ee6331e8297e4abc20d5b940b654e23
-MD5 (NetBSD-6.0/shark/binary/sets/kern-GENERIC.tgz) = a00e97b04a6d5affc36743311bc2293e
-SHA1 (NetBSD-6.0/shark/binary/sets/base.tgz) = fa2c393fa435744e1b106d19470278c97d9419fb
-SHA512 (NetBSD-6.0/shark/binary/sets/base.tgz) = a6ec0e86858f7c9faef7b4df4f2a951fa120af290d18d06598bb82b54541fe1a36d60b47f03da404a0d97889a5ea582db0a13b4a1827acf9e1842c70c90fcc0c
-RMD160 (NetBSD-6.0/shark/binary/sets/base.tgz) = 151c8a2e662926762a132b689b24943ac8b93c01
-MD5 (NetBSD-6.0/shark/binary/sets/base.tgz) = 787953226e7c5d1aeb78aba04cb18579
-SHA1 (NetBSD-6.0/shark/binary/sets/comp.tgz) = d37041a235ddf0a129bfa9f1d5e11d2fdb77816f
-SHA512 (NetBSD-6.0/shark/binary/sets/comp.tgz) = 19427e8b7dc48941e4e54ff0b8841358a551599c43862f830a752551044f96ed39bbd8038348fb3f3bf15ee831e0638cc4a3b4f0c04037222666f017cb11b862
-RMD160 (NetBSD-6.0/shark/binary/sets/comp.tgz) = 58df952b8aea84f1e0bc2658871408502eef4667
-MD5 (NetBSD-6.0/shark/binary/sets/comp.tgz) = ef10bf2cdec1811b1d3a2d3376201583
-SHA1 (NetBSD-6.0/shark/binary/sets/etc.tgz) = 07309c170d21a4c786ac5a12f5e792580788cd76
-SHA512 (NetBSD-6.0/shark/binary/sets/etc.tgz) = 6424ecfc34615c6fd1acb909b70414806e516119f30df73b70ee7128e69060da9457043da999de6011e7556a6685091cd30f4033e0ab7ea8cb0a2c6cc02c03ec
-RMD160 (NetBSD-6.0/shark/binary/sets/etc.tgz) = b2fa61062310af5511249b80505cefc966801f9b
-MD5 (NetBSD-6.0/shark/binary/sets/etc.tgz) = 1b69ed72ccfb0af799b148825a53bc9c
-SHA1 (NetBSD-6.0/shark/binary/sets/modules.tgz) = 3ef4de9b2730972b94688f3674b121eeabd2448d
-SHA512 (NetBSD-6.0/shark/binary/sets/modules.tgz) = 7c29c66462378dc8d7e7d5bfce324b012383176d8b381e83122808920f2d88d80665547a6e2974738fb6b1268aeacc4a7cde9ef17faec3d9d5c155ae2544cd37
-RMD160 (NetBSD-6.0/shark/binary/sets/modules.tgz) = ae6f3aba96b1b9b2d2a412754a42296afc85a69c
-MD5 (NetBSD-6.0/shark/binary/sets/modules.tgz) = 5f374bf40599728af733192b3a546d7e
-SHA1 (NetBSD-6.0/shark/binary/sets/tests.tgz) = 62e58a9b83eec5a0fb21b9fe7f5845e5315811e7
-SHA512 (NetBSD-6.0/shark/binary/sets/tests.tgz) = 43d78bd32bff49e6f6c62914cd16916e41541fb446913c688d0fe4fdbcf5fff6d5605688ec165f8e856a418bba4f36c7d7233b8344c86b954ce104e963abe0a0
-RMD160 (NetBSD-6.0/shark/binary/sets/tests.tgz) = 560f27cf65beada1eb6e62458b7450968218fd37
-MD5 (NetBSD-6.0/shark/binary/sets/tests.tgz) = 4d39b8cb6664b022b300186cb7afa8e6
-SHA1 (NetBSD-6.0/shark/binary/sets/text.tgz) = 663a9a70c81324796717d31e46d5e8c00620a132
-SHA512 (NetBSD-6.0/shark/binary/sets/text.tgz) = ae6817fabcfae5fd0a9f35787e6d9af82d64a14c6d532c1a54c347c367d23c6ccc274eb813a23e4bb4dcb036b829437130400c418ffd0eb9c36858443f8d9b84
-RMD160 (NetBSD-6.0/shark/binary/sets/text.tgz) = 51994c6b412ee1e6834b270482f8c0dbbc95a835
-MD5 (NetBSD-6.0/shark/binary/sets/text.tgz) = c93688098447ac5ebf664bfb3362615e
-SHA1 (NetBSD-6.0/shark/binary/sets/xbase.tgz) = 2782c3a99b0cdb6ea4c4b29543f6f06b24c1726f
-SHA512 (NetBSD-6.0/shark/binary/sets/xbase.tgz) = 90a42af846fd7479e30789a28c7908b2b70416e7824d7f78c31b378c5e1dd38d4eb797f4430f6dd9baf051afe1750ad4bacdd3e93f2b65b2ad92945f682a1685
-RMD160 (NetBSD-6.0/shark/binary/sets/xbase.tgz) = 6b4e44c69f47563964562f18c42a5bc5a99e750a
-MD5 (NetBSD-6.0/shark/binary/sets/xbase.tgz) = 1c370ba00bea97b4afbef7e3bc919655
-SHA1 (NetBSD-6.0/shark/binary/sets/xcomp.tgz) = 997e19373b3e9b90464e849f1d635e33235aa5f7
-SHA512 (NetBSD-6.0/shark/binary/sets/xcomp.tgz) = 1e9d84d70a45aa3ea4d4bff9066594e853b9af68912e58bc933060f2b652ceea2d40231e04debed15dc569ec3d1d2d3682b3042b009c0738f17bf11979f2e86e
-RMD160 (NetBSD-6.0/shark/binary/sets/xcomp.tgz) = 60b1ce3cf224d2caf6d4c9757761c8145d4bcc4f
-MD5 (NetBSD-6.0/shark/binary/sets/xcomp.tgz) = 0bd79975afc5e2dbf542c8ab9363b664
-SHA1 (NetBSD-6.0/shark/binary/sets/xserver.tgz) = cf7350b715c568255b8d095503eed754c3d1ff31
-SHA512 (NetBSD-6.0/shark/binary/sets/xserver.tgz) = 3c88b006114891f2e3aaac95d15f25de6c8ac1dd00802097d1885f015326e926a297dcdf6c9c10a798ff73242e3130a7e359bd7f4bab45b23408a628da011725
-RMD160 (NetBSD-6.0/shark/binary/sets/xserver.tgz) = e9a9b2579181cfc7974ab1586990bbb0f2470299
-MD5 (NetBSD-6.0/shark/binary/sets/xserver.tgz) = 795a4afd76d016cb1868344522fb0fb4
-SHA1 (NetBSD-6.0/shark/installation/instkernel/netbsd.gz) = 08fdda8c99f112770acb58f662e7dc7f92e211aa
-SHA512 (NetBSD-6.0/shark/installation/instkernel/netbsd.gz) = eb7dd72ec967546883dbf9e50fc9bf770e8aced07020c03f93abdc0c9bd6b1a03ff320a3f5167f74caf732ff37495e7507628e0ea213ae8fbf209fbfc2ed2368
-RMD160 (NetBSD-6.0/shark/installation/instkernel/netbsd.gz) = 97cd05778ad6cbef869bfd1ef9bda107db56b099
-MD5 (NetBSD-6.0/shark/installation/instkernel/netbsd.gz) = f174a788515cbae3b497a13a1f27b68b
-SHA1 (NetBSD-6.0/shark/INSTALL.html) = ee446561ae849bf3326e81939b2071c706bbbe7e
-SHA512 (NetBSD-6.0/shark/INSTALL.html) = 01bd9dca202f365a64c9f523cf025abc31a7180a8b45f843d1e60cfe4682329aedc8a892b8e2a6a230bfda1803c6740b6d9fe415992f5a2206425cd875ca3e1f
-RMD160 (NetBSD-6.0/shark/INSTALL.html) = c73d5cfb8e656b4634046ab9dabaa09772f8e383
-MD5 (NetBSD-6.0/shark/INSTALL.html) = 4207442c91faf52d0f3778fb77943ec0
-SHA1 (NetBSD-6.0/shark/INSTALL.more) = 9259e39f2fbc92e793da04efa5acb0318ee257c6
-SHA512 (NetBSD-6.0/shark/INSTALL.more) = a9510586f73298c7b0b8af60cf30b86d4588b90682b73adc3f14cb862f0f7ec0f103ff62eda6d4a141a2c5a24fa13d108f08817829a00545f8400ff9785460dc
-RMD160 (NetBSD-6.0/shark/INSTALL.more) = f80b0169a0a6cc36d204319f0e5ea6ac9e3c6256
-MD5 (NetBSD-6.0/shark/INSTALL.more) = cc98ec10bfc9ee19abfac7bb78843b52
-SHA1 (NetBSD-6.0/shark/INSTALL.ps) = d63b6262c2b64c83f763fdc888153b4d5785a5d7
-SHA512 (NetBSD-6.0/shark/INSTALL.ps) = e7082fc171e77f43761b8f8dba6443f9a76103be8b964d70e845940cec689c10579d8e5a6aa80bbb008cbde61c125fe348a3db7d157235df9dd6b53d247c3b8d
-RMD160 (NetBSD-6.0/shark/INSTALL.ps) = 5ae64ccead4bce193eef02a56c1883be5836e3f6
-MD5 (NetBSD-6.0/shark/INSTALL.ps) = b80bf37de21a0d2a7c1891ea18ee27cc
-SHA1 (NetBSD-6.0/shark/INSTALL.txt) = 21743fee95f9d668c37c80415896d05a652d8e5f
-SHA512 (NetBSD-6.0/shark/INSTALL.txt) = 80bc5a7e1ef3338c29c29b51f72b5c014bb10a7e7f367912ecc1e6633c7882ad23c119733c81dbcc4d7ff5178303dc555fa42951a48d364613ff52048d8e500d
-RMD160 (NetBSD-6.0/shark/INSTALL.txt) = 15c92de408750d0c47946ad7c7c7371a79e1e2c6
-MD5 (NetBSD-6.0/shark/INSTALL.txt) = ba3059416376468dad953da22a4bf29e
-SHA1 (NetBSD-6.0/source/sets/sharesrc.tgz) = 87a69ce98fc413c46524823e16dcd0dce768698c
-SHA512 (NetBSD-6.0/source/sets/sharesrc.tgz) = aedb194ace955f8c15820ae3e6d8bdbf67992da79f8cb3d2d0a2ad409819a78c7d3921fda193a982a6f032f92113fc807e0ad2eb064a82da98b8f5ec957bc53a
-RMD160 (NetBSD-6.0/source/sets/sharesrc.tgz) = 8e03f055e853b3b44d48cbafde267da9acd549f2
-MD5 (NetBSD-6.0/source/sets/sharesrc.tgz) = cdf8ab923e83b705dfc8e47e47ebdecf
-SHA1 (NetBSD-6.0/source/sets/gnusrc.tgz) = a5bb46c56b0f27a47dbaa3690758336bdc472292
-SHA512 (NetBSD-6.0/source/sets/gnusrc.tgz) = d94945054d64c9b16ddf2b3fbcf0dc8aa41965f76e469e8da0fc822082189d87324169709f5a95aa8461209522d3cdb387f52beaada7ecefb46571b021d925bf
-RMD160 (NetBSD-6.0/source/sets/gnusrc.tgz) = 562debda10c4d28bc11f9760fa7f7797f062a9fb
-MD5 (NetBSD-6.0/source/sets/gnusrc.tgz) = b72569083f678e665d6658cbd2c3e587
-SHA1 (NetBSD-6.0/source/sets/syssrc.tgz) = 8206633fc5ac0f890ecffdd50176768236cd4cc6
-SHA512 (NetBSD-6.0/source/sets/syssrc.tgz) = 566104c4324710005c869e065dc03889e85824910520d097a88c1bd5219adc750b3ef8d0057a7d98a7d535002c4c6e04594d98b5be138b8e29d74b1f3965b045
-RMD160 (NetBSD-6.0/source/sets/syssrc.tgz) = 8f26506a9ce36e2a163026804d629e30628f8c4b
-MD5 (NetBSD-6.0/source/sets/syssrc.tgz) = 8ece18d74c2fbd264198467f47e8b4bb
-SHA1 (NetBSD-6.0/source/sets/src.tgz) = bada9cb20d00977af0fc80b465ae9bd20648c893
-SHA512 (NetBSD-6.0/source/sets/src.tgz) = 981158338e0123f59b5a38f3f5c3a4fb8142f0280e49db0af5f0753512035113887bdcc9aa3f980761b51abf625764d0e89ca4de41cb80145f5ef7239676d1b2
-RMD160 (NetBSD-6.0/source/sets/src.tgz) = 90dc01e48266e240dd95962496cd2a1aa1ca90f9
-MD5 (NetBSD-6.0/source/sets/src.tgz) = 58e1e661d9640ca3eb542ac3086580f3
-SHA1 (NetBSD-6.0/source/sets/xsrc.tgz) = 73f98faff9d1b90c50d50d50a1f17e6880f43f12
-SHA512 (NetBSD-6.0/source/sets/xsrc.tgz) = dbcf2591e42422a0ddb15529b35cd7e1f198589459806239d9efc917c5b604cd152fda76c5fd5a8e912410ee1fc25e561f7e505b63461192406a121e84fe3784
-RMD160 (NetBSD-6.0/source/sets/xsrc.tgz) = 617e6308cfbb0899c230ceea2d843c197c4f4804
-MD5 (NetBSD-6.0/source/sets/xsrc.tgz) = 68d1535d0baed6625f6dd95fd20758ba
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.MP.gz) = 496928e218106c5bc8d32bd6c736eddf69258416
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.MP.gz) = cc26d9ef454d86c7e95a122eb0ef5d6f9dc742b0f9718d0a798e9666974d977de44d90025f38c2947c9d161c3b52a9eb8f42aa866a0198d310f7defd7f472db8
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.MP.gz) = 3ccc735931179c31c8f2d4b5ce1e9f96121ff695
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.MP.gz) = 61be9899c92c833cb52f77b6f8e6aee4
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.gz) = 7b45c74363d7977534a97b006e114ef4051246c0
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.gz) = fc19ac6cf8544def619f803ab7573083991e050b8d551e9c4967d1e327e4ebfe51137f516815152fc00dceed5879309ba4e5e9c420b088378c0323c739df8cdc
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.gz) = 86944c7c8fbed3cad7ddfef09833eee06231c3bd
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC.gz) = 2daad7afb8771cd536a5bd668d3e981b
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SCSI3.gz) = 1138b7a86c5bb93d6b3904164e3841031880b675
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SCSI3.gz) = df36f0aac760c383f970b2dd9e13a4e6e3ca28d47846c904cc07ba11b6e289fe6c8319a40fd51850e5ced7a4585d61c83f489769cfe8aac189b650116f8faeeb
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SCSI3.gz) = e95d11e401563a66d9cc798db312d3f2a1b96c5f
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SCSI3.gz) = 0aaca233a00a9fce3265a749b9a2852d
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SUN4U.gz) = 0732f8665299b419119c4507e525a6c992f20656
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SUN4U.gz) = dcd45f52ade746443eeb910f331ccbce2d48eaf03f2e49c7ac75940b36e2097e41ed5873224bf664e4bd935ba17b1503a61640427a7d9ea87ecdcad39f7eee60
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SUN4U.gz) = 568b09bb65717c3ae1b2f2e3a5b1c15316a3c53d
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-GENERIC_SUN4U.gz) = 785d8668cfd1df9f6bd6af6587636e0f
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-KRUPS.gz) = bd5c8ef678bdeca11a32980b732803967ab0398f
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-KRUPS.gz) = 1c79b7d19dbab9bb132529d1bf10f6a3d9f8bdbf006d1296721c5a987812cf55a077368b75b4775e1425dda56afde6ab35f5995648187c623dcdb3154d2a050a
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-KRUPS.gz) = 93604d098cedbfd647a5ac6ea9409928bebc48d6
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-KRUPS.gz) = 7108981b6236f991fca67fe58d6eae81
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE.gz) = 976e0a56648d3e03356d7f76426971fa523e4551
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE.gz) = 172bd67678acdf034d897369d1d92be25dd684dbd14f362fad6c9655f7d5265caf4b57d495c570eebc1e53a87c53374d8f552656fa66366d3ac6221ccf98a752
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE.gz) = b3a6897f2e3eb5acfe2d87f7d377697caeb3b007
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE.gz) = 7ea122d02744bc1fc5e42853992c908a
-SHA1 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE_OFW.gz) = 181bf7c2d1cd731f71c5334a5d0d097749f166af
-SHA512 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE_OFW.gz) = 63f26657f4bdde1cff58858fd5ffda69867a45d8148c4b4cf13804281389f34026a09f9f228eb670ff01ed8a02e99affb67b7a170fdcdda5f8f5cb128eaa9ece
-RMD160 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE_OFW.gz) = fabe6d8566d88af5324ffa952c57f0fad3accd95
-MD5 (NetBSD-6.0/sparc/binary/kernel/netbsd-MRCOFFEE_OFW.gz) = 8a5f7d38f6ddc835e528d51886df36e7
-SHA1 (NetBSD-6.0/sparc/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sparc/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sparc/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sparc/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sparc/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sparc/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sparc/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sparc/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.MP.tgz) = c77b07953f63e5e21d1313e08dacf592acbddeef
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.MP.tgz) = 40e533f5b17404c1d1137cee7e541193f5f6ad323bc615ba5db6a1dfd4816a27eb54b26d272886dbedc9184e85b36ba1ef6e798e140f84e669475eebdd61a015
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.MP.tgz) = 2e067f3f9ef9697eba5185ff0d15d847c6e277a4
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.MP.tgz) = 496e0471d0eb80e227337bdaa45db5b2
-SHA1 (NetBSD-6.0/sparc/binary/sets/base.tgz) = 952c71b877521b1af63302bbe4c072b482c3723e
-SHA512 (NetBSD-6.0/sparc/binary/sets/base.tgz) = 14dc66a667648834321d8bde6c4f9e07c582ac569ceda4991552119282b53690521a89cb0fc06e2c0952f75d9dbc6c9c554f922e74111f4d42c94085bd4697ec
-RMD160 (NetBSD-6.0/sparc/binary/sets/base.tgz) = e57ecaa3098d2ae780c38e3e085c6f164498cd95
-MD5 (NetBSD-6.0/sparc/binary/sets/base.tgz) = b9fb689a8d63084ad2d6a4089028296d
-SHA1 (NetBSD-6.0/sparc/binary/sets/comp.tgz) = 59f49bbeaebf959d30414d0cacca3724359d55e8
-SHA512 (NetBSD-6.0/sparc/binary/sets/comp.tgz) = a800a26ddca7c79ccda284ab3b5e815cc4b53c409ca78bb00f386348e4ae973edf66440a931d9fe2ab0f8a16e329d885c3a2f190780600ca4e205936d7d01e8d
-RMD160 (NetBSD-6.0/sparc/binary/sets/comp.tgz) = 3a0cc6492eb72ee033ccd0b60c0c1698fa6b49d1
-MD5 (NetBSD-6.0/sparc/binary/sets/comp.tgz) = 39c91111ea991ede7ef81fa845ac319d
-SHA1 (NetBSD-6.0/sparc/binary/sets/etc.tgz) = 7cca1a9e594b2122f17b67a26d15e2051403bc68
-SHA512 (NetBSD-6.0/sparc/binary/sets/etc.tgz) = 191f890e7588a17a3258e92d51a91407281c97fe84e2ce68f6fc1db48b95011b1c15f86cc3bef58dff5b167c8ee1608fb42c22b55b78df7461a60827882bb0e4
-RMD160 (NetBSD-6.0/sparc/binary/sets/etc.tgz) = 39d06e86cfc8d3fb588c5b95371ece29ef11b5de
-MD5 (NetBSD-6.0/sparc/binary/sets/etc.tgz) = f909a9a70e65ad480468d1de75f057b0
-SHA1 (NetBSD-6.0/sparc/binary/sets/games.tgz) = 352b9089651bdd1ba05526f34fd99bf8e89db039
-SHA512 (NetBSD-6.0/sparc/binary/sets/games.tgz) = bd7c551fde89b7339d6b652a2583322c662bf0d4b69ce143034253f9764cfefabc5abe45d8e8850f7b9ee2d5714cda13f26f1d516679b544c096d27cbaf87b08
-RMD160 (NetBSD-6.0/sparc/binary/sets/games.tgz) = 9e71d26c198691e30f653c47b3b725ab54f1144e
-MD5 (NetBSD-6.0/sparc/binary/sets/games.tgz) = f6932706a5fba3dc666106b7b84ea734
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SCSI3.tgz) = e5359bdc3fc08e7fc7b5f0ffae289d8e3bbebe72
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SCSI3.tgz) = 88e1c0850a758a10d7752c1c64d4d80b5fc9935eb8cd9f4869585ca42cb5706bb6c1fa38467e7ba67a28f0b3e4e12df989839b1c7f6a777785e919eda6c4e464
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SCSI3.tgz) = 6486dfa05e73ea92b83ab42151f3978fb8d9cb3b
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SCSI3.tgz) = 8965e59f45390938dd1f4cca3b47b215
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.tgz) = 0803f566c7ab3cc4ac8bdb66f0e6e93e44f6780b
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.tgz) = ac72f82075f9cd2d7a5aaa4556f0e6efcdd6207ecfd3c6eef2773281f9088fca35169b68987c3a95f8481670fbd637caaccc48a6fea450c5334e1a5a61a009ab
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.tgz) = 4a8db5843d949d1d2b6c45e23313628ef2db07ae
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC.tgz) = 7c8d15c09c139fc7445d83e669004f26
-SHA1 (NetBSD-6.0/sparc/binary/sets/xcomp.tgz) = 4671cf1becbd220fb0693d8dc580bf90fd558a38
-SHA512 (NetBSD-6.0/sparc/binary/sets/xcomp.tgz) = a37753c7f879f4d7205dfa23488b6fda40aa098cdf5d998f3b8335c487d2bffc7d9edbd57de2f12dfce586d60f2044f1617173fa6902e821a74dacc314382b98
-RMD160 (NetBSD-6.0/sparc/binary/sets/xcomp.tgz) = ed445184a03edb2cf1bf204e9cbbd04ce6f8367e
-MD5 (NetBSD-6.0/sparc/binary/sets/xcomp.tgz) = 82dc6b78584e5997bcdf436f37400177
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SUN4U.tgz) = 478f84d19aae7f5aee8ddfdb45eb9aa37a21a3d3
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SUN4U.tgz) = b9168217a02a3da991b5b3fb069097b663dea23088a529f16ea09dc12c233bc4d63b4310fbc8e26285e6bc9cd566144141898743fc8617bd9296956432b2f9b2
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SUN4U.tgz) = e9e53c86f42b75fcc12853ed2dfd5423b0968581
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-GENERIC_SUN4U.tgz) = ee3736e6af879f5d4e0cc369bfa579b5
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-KRUPS.tgz) = bc69fd900a788cd8ce5d7413b4716f656814b804
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-KRUPS.tgz) = 64c42a3748d62926aa10870c08331bce20b67f6b50afd13a19a76b232b2f9f2d1c2fa04819cf88f211badbdff0cc1684ca48ca7f1c6d8f44859257764e882842
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-KRUPS.tgz) = 18df230d31af7e526b9f6fb3254061e6601a9b15
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-KRUPS.tgz) = 1057e644aef74d636a558c03dd9f7e7e
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE.tgz) = 58b500435295d07ef47bd1702ce2f8c5fe798e8c
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE.tgz) = f3657cd11910995d2bf8e4140f4df4d6829311de9d5a4fa39a980af3577035ad7cc1189066aa0d9093803727b0e1405e9e2c5bbad4db8e4e172e9d5d000c2541
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE.tgz) = 91c5e94452446fb8838dfadab79d8f0c915669a5
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE.tgz) = 2535895e15ea9dc1c4806df090d1bc81
-SHA1 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE_OFW.tgz) = cc966bc2458bae8bdd3995d423ae83707d0a0a38
-SHA512 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE_OFW.tgz) = 35967055f863081ef3d16144c5324ab62c2e44942100202414961a58b8b3e1243e8a2b3e2ff4d7075df0e624d9da1ff7889f8c9dc710c888f6654d8d845233d9
-RMD160 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE_OFW.tgz) = 5451d5da667a2a57e3af6df7119703db7a2ec8a2
-MD5 (NetBSD-6.0/sparc/binary/sets/kern-MRCOFFEE_OFW.tgz) = 8cb1f508b5103088f400e7422e23a34f
-SHA1 (NetBSD-6.0/sparc/binary/sets/modules.tgz) = 6519d6696e013f8a9e51d2856aac1390c0c3e69a
-SHA512 (NetBSD-6.0/sparc/binary/sets/modules.tgz) = 4dd5d8721c4d0733813e1fc884e9242cbf957f33ccf92fa7a8f3255bcf1af3598de843e15ad052a696cd95065251cae8a6927816c041732a6f12823657ef22fd
-RMD160 (NetBSD-6.0/sparc/binary/sets/modules.tgz) = cab574162ec0996f845835763055d6e65bb4ceb4
-MD5 (NetBSD-6.0/sparc/binary/sets/modules.tgz) = a60477fd2b83a211972512c035679276
-SHA1 (NetBSD-6.0/sparc/binary/sets/tests.tgz) = 816dc19db04ba2f95dcf80c62598f9fec7fa92ff
-SHA512 (NetBSD-6.0/sparc/binary/sets/tests.tgz) = 80c23ac0ed623404542d3e6b6e7dc8194ae876c6a0d17b250151ce6e941e874a033dcce8afa002fbe3d875b1c79687e392fa6f527fa46ec0e3c82ae31cfd5eb9
-RMD160 (NetBSD-6.0/sparc/binary/sets/tests.tgz) = 834ebf4c2126e3ec1b2226e48564ab87d7ff8da0
-MD5 (NetBSD-6.0/sparc/binary/sets/tests.tgz) = 9d0c1bd587f83df1b0090f88357f8531
-SHA1 (NetBSD-6.0/sparc/binary/sets/text.tgz) = 92d7911a1d761b73c8d2080e819705f901d1ce6d
-SHA512 (NetBSD-6.0/sparc/binary/sets/text.tgz) = 4e8e2f2abc8cf95a4672ef492e091142b6cc4a4baafddb6fc123fa5b3cc3d67a16e61ab4a7b188dac4b8ea198d8c88c1c81ffe1eca70f9900780a8a134257c36
-RMD160 (NetBSD-6.0/sparc/binary/sets/text.tgz) = 4d5ca8f6d680d3389d6b90c45875bcc4b4e962f3
-MD5 (NetBSD-6.0/sparc/binary/sets/text.tgz) = c16beb242b426177d80af90e40266abf
-SHA1 (NetBSD-6.0/sparc/binary/sets/xbase.tgz) = 2809df01d9a0aa85270f6f77341cf50d72bc78bc
-SHA512 (NetBSD-6.0/sparc/binary/sets/xbase.tgz) = 886f26f21f95ea17ef60d28fabebf415485d13647d335b237a4ee954039c7c6dfc0d9e68c06aec52ef463b6c2b7b88cd6baf514f2c5b567b8f5421c99df12672
-RMD160 (NetBSD-6.0/sparc/binary/sets/xbase.tgz) = 499a1e2a76a05fa4a0b3b53438d60b8434198695
-MD5 (NetBSD-6.0/sparc/binary/sets/xbase.tgz) = 82bb74d040bf256d711afb55db6c4066
-SHA1 (NetBSD-6.0/sparc/binary/sets/xetc.tgz) = 997196c30074dcc988f2dfa2a7f5dfc8c31df3db
-SHA512 (NetBSD-6.0/sparc/binary/sets/xetc.tgz) = 09670a40f33c9902b5b22c4400f9e8151f1985504cc1c956df68697e3bd6a7b841391d6dd32cdbba42aebf42f4a1cdd3559c5783f79da236603dc6b5cf86d33c
-RMD160 (NetBSD-6.0/sparc/binary/sets/xetc.tgz) = 50061239bbe31a4dce18784bfcece78a234e6ef5
-MD5 (NetBSD-6.0/sparc/binary/sets/xetc.tgz) = 12ae04f5957291f424568bb61a138079
-SHA1 (NetBSD-6.0/sparc/binary/sets/xfont.tgz) = 7e5ccc7436f81855bd5e20960adaddd9b9851fd5
-SHA512 (NetBSD-6.0/sparc/binary/sets/xfont.tgz) = f263bf4a2b1bc795c1c4dcaf0db819dca08e90c51b41c144911f897a991a3575dcbbac203060d8f51842c85c6e85c4839297fb7307353a38b1a46e1b446d29a3
-RMD160 (NetBSD-6.0/sparc/binary/sets/xfont.tgz) = cb721308df7413a821278143750bf95844eb4d82
-MD5 (NetBSD-6.0/sparc/binary/sets/xfont.tgz) = 9de78b2d18118d7435a6c95d8a503ae4
-SHA1 (NetBSD-6.0/sparc/binary/sets/xserver.tgz) = 0d3b410b9501560307d3b9b17a431be0da1de869
-SHA512 (NetBSD-6.0/sparc/binary/sets/xserver.tgz) = d3dceb5ebfb5085e905e8121c952a97bf7035bbd4e60898d913fbaf58c147181ae7c97f913a122e9ce83523d05a585d1e771139192d42c44fa85e60e2bed762a
-RMD160 (NetBSD-6.0/sparc/binary/sets/xserver.tgz) = fd59e7a1c949c113ec555a9ee63ab369f64559fa
-MD5 (NetBSD-6.0/sparc/binary/sets/xserver.tgz) = a89a1c519c6d6759f810717fc0ec43ab
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.aout.gz) = c2c368ba46549cb580707b799f4f0f88b26128de
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.aout.gz) = 9fb6bef663b2fb68b9bf3591834f6e653c0b3b7f69ac8c40f2479efaa5d0641140d87623fe8eeb8a21cb0e0065ceacb57d6a5db4e1905db97f7dffa52ba8b565
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.aout.gz) = 8fbcdca0f8214901d1fec117c567cfe93865e391
-MD5 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.aout.gz) = 1cf0fdefa01fee95d494b3418ea4a0ea
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/boot.fs.gz) = e36798e87b9d195c7df8602883c775f8f4268448
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/boot.fs.gz) = acd6ad2fa9c1618b4b14d6a63679e347aad6302001e36ea63c58968252ce993df23af7e05e590b72efbcdbc1013192b1862d70d7737fc2fa804249410c9d2724
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/boot.fs.gz) = 986addabcfd9f0b1faccd9fed0081f88e78f2aaf
-MD5 (NetBSD-6.0/sparc/installation/bootfs/boot.fs.gz) = 93526666c7879bc6391c5b7c38b24cb0
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/instfs.tgz) = 98f621b007b19382a0d529f2056cd8c82feb863f
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/instfs.tgz) = 7131f92cd02791f6d351a8ea5d8b5fe93b643ba5975522e85bf81da8f69157ebb21f80f5696beca47809a9732e79e85c7e97e07a33e830eeac2f9542685a01ce
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/instfs.tgz) = dc7168f774cac7e9f7eba640dc55c878ab2c16db
-MD5 (NetBSD-6.0/sparc/installation/bootfs/instfs.tgz) = 80ed52c842f1d4d56d4506d293e30b57
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.symbols.gz) = 673b10e3d23ee6e204bdba91b52b0b50304cb8e3
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.symbols.gz) = edf95ecf1f6133e5228d4f8b6a8d004c1f172354acfa34f1235a488456a69b2fd19cd959f97a0a7d06f007347815672bfce07a3ee25ae511ce73a6e5de217267
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.symbols.gz) = 8829961d6f2e5487af4bd4418335139d06916659
-MD5 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.symbols.gz) = 75ea54ba199fcf8a56054d15e4fb3b96
-SHA1 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.gz) = 8eb131ce31d568ee4fb0674f1732052bc686bb18
-SHA512 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.gz) = 7345380b1e2e1140564b9886e4d2afc5dc21dacf7148a5680283abc41f7249a8e8512db23ca58533ebf5bffc588bb6a28b18c7e0eb5d50c8a5a06da4043af319
-RMD160 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.gz) = 37ae0d93bd4532ff69c9187a1fd8ee3b75e97671
-MD5 (NetBSD-6.0/sparc/installation/bootfs/netbsd.ram.gz) = dc1f591b5bca88a07ff8e67a1c3dc01d
-SHA1 (NetBSD-6.0/sparc/installation/miniroot/miniroot.fs.gz) = 4e71664ebc1dc62f55992a935734fe61f52177cd
-SHA512 (NetBSD-6.0/sparc/installation/miniroot/miniroot.fs.gz) = 3cf2607774e1aa7343ed57c78034828878665e9a041561702daf18539a0775d27768ad89d9336c77d897a0f040c71c8cefdd555c00397d26fded0b6ce72c1dc3
-RMD160 (NetBSD-6.0/sparc/installation/miniroot/miniroot.fs.gz) = 39fff07e0ce17f0c62c3a399173b5a8681fa3559
-MD5 (NetBSD-6.0/sparc/installation/miniroot/miniroot.fs.gz) = 0355cc648c33e3ed61ac4ff2f51edd04
-SHA1 (NetBSD-6.0/sparc/installation/netboot/rootfs.tgz) = 98f621b007b19382a0d529f2056cd8c82feb863f
-SHA512 (NetBSD-6.0/sparc/installation/netboot/rootfs.tgz) = 7131f92cd02791f6d351a8ea5d8b5fe93b643ba5975522e85bf81da8f69157ebb21f80f5696beca47809a9732e79e85c7e97e07a33e830eeac2f9542685a01ce
-RMD160 (NetBSD-6.0/sparc/installation/netboot/rootfs.tgz) = dc7168f774cac7e9f7eba640dc55c878ab2c16db
-MD5 (NetBSD-6.0/sparc/installation/netboot/rootfs.tgz) = 80ed52c842f1d4d56d4506d293e30b57
-SHA1 (NetBSD-6.0/sparc/installation/netboot/boot.net) = af35e94ca3d3ca7e07084d17c7d16370c2be1949
-SHA512 (NetBSD-6.0/sparc/installation/netboot/boot.net) = 42e02f39699d1ef5f76a2a07641f5405b74a0ce72df8c1306cdc1bf9e8e176b0857a4c6c1098a35bdaaebb729e887633bfc91cd7ed4316ff549b474e4b29932f
-RMD160 (NetBSD-6.0/sparc/installation/netboot/boot.net) = 5f64296269674b5af481fa3a55d6268bafcdd50c
-MD5 (NetBSD-6.0/sparc/installation/netboot/boot.net) = 9a2b02686d556555bf350f6eb35e07f1
-SHA1 (NetBSD-6.0/sparc/installation/netboot/bootjs.net) = 9bba50438d03cdef774f7572e6260bf1feb544f4
-SHA512 (NetBSD-6.0/sparc/installation/netboot/bootjs.net) = afa66b734ea6f3f9551680c5dc1af1ce43de4b385eed1c732dbf22f676e5adf1432a2048a494932650e36667405df0160b3d1cb87d4d78b5d064dfab2d366cd0
-RMD160 (NetBSD-6.0/sparc/installation/netboot/bootjs.net) = b2cde57103124271b4b9332cb99a7b7e01db3477
-MD5 (NetBSD-6.0/sparc/installation/netboot/bootjs.net) = b6958131d22fe5ced08a41671ddfa073
-SHA1 (NetBSD-6.0/sparc/installation/tape/tapefile1.gz) = c2c368ba46549cb580707b799f4f0f88b26128de
-SHA512 (NetBSD-6.0/sparc/installation/tape/tapefile1.gz) = 9fb6bef663b2fb68b9bf3591834f6e653c0b3b7f69ac8c40f2479efaa5d0641140d87623fe8eeb8a21cb0e0065ceacb57d6a5db4e1905db97f7dffa52ba8b565
-RMD160 (NetBSD-6.0/sparc/installation/tape/tapefile1.gz) = 8fbcdca0f8214901d1fec117c567cfe93865e391
-MD5 (NetBSD-6.0/sparc/installation/tape/tapefile1.gz) = 1cf0fdefa01fee95d494b3418ea4a0ea
-SHA1 (NetBSD-6.0/sparc/installation/tape/tapefile2) = 98f621b007b19382a0d529f2056cd8c82feb863f
-SHA512 (NetBSD-6.0/sparc/installation/tape/tapefile2) = 7131f92cd02791f6d351a8ea5d8b5fe93b643ba5975522e85bf81da8f69157ebb21f80f5696beca47809a9732e79e85c7e97e07a33e830eeac2f9542685a01ce
-RMD160 (NetBSD-6.0/sparc/installation/tape/tapefile2) = dc7168f774cac7e9f7eba640dc55c878ab2c16db
-MD5 (NetBSD-6.0/sparc/installation/tape/tapefile2) = 80ed52c842f1d4d56d4506d293e30b57
-SHA1 (NetBSD-6.0/sparc/INSTALL.html) = 8213ae2b753d10e3eec349c15a7cabde6ae1c3d5
-SHA512 (NetBSD-6.0/sparc/INSTALL.html) = 7a12bfc31cddfda66761861cb87fc54deb5f683863b41ff44152198ea44e9489c8cce0d4702c278e2586dd3189e5c31692a02a3f17b112bfa19f1134571ff8f9
-RMD160 (NetBSD-6.0/sparc/INSTALL.html) = 77a4274595de342e22766d8c468e2a324c26fbf5
-MD5 (NetBSD-6.0/sparc/INSTALL.html) = 80cd31d110f62b89b7b910ee0aecd7b8
-SHA1 (NetBSD-6.0/sparc/INSTALL.more) = fce351f89d2da1fb9f709bbe890892db755f56c4
-SHA512 (NetBSD-6.0/sparc/INSTALL.more) = 496bb7e73d2dda1eb01518c40ab3abc767b8fb6a8b406b07176b9e926c2f4d0e5512bfdc9c26dbfa1b3a4c5069355f6ee1bb8ad8c1d459b71011ea9034f89d17
-RMD160 (NetBSD-6.0/sparc/INSTALL.more) = 89c6de032d286741f2ddde15e4b796205a8b8511
-MD5 (NetBSD-6.0/sparc/INSTALL.more) = 308ae548170c8b1b5a9bf59f64b1df7f
-SHA1 (NetBSD-6.0/sparc/INSTALL.ps) = 3e6e3cbbf8141043fce33e2245513a9683be0edd
-SHA512 (NetBSD-6.0/sparc/INSTALL.ps) = 93b81d3ba2fd2e1fa3ef46360e92e247fa72b320af7b0e60ab35fd90cdd10d7bc3dfc03920b4a8b209ef95facc74e047630cdec03cabe06edde21e795e158e60
-RMD160 (NetBSD-6.0/sparc/INSTALL.ps) = 8d4373a814dc88c7865b14a59e27731783e711e5
-MD5 (NetBSD-6.0/sparc/INSTALL.ps) = ecde0171eda632b616139caf04081ec4
-SHA1 (NetBSD-6.0/sparc/INSTALL.txt) = 556744433939c09c3ef5ee3e9b12c1570ebb1211
-SHA512 (NetBSD-6.0/sparc/INSTALL.txt) = 1686bb5982301002cb580022760f12fe9160a4fe826d7e0fe74cc4a480c891d31099d5219678b0768c0fbc04be329f0f40511d739c201a5e43367b5a27e72545
-RMD160 (NetBSD-6.0/sparc/INSTALL.txt) = cbc495189f2ce52328d87a1a73dc8452ad23e723
-MD5 (NetBSD-6.0/sparc/INSTALL.txt) = 17100faaf077e73c2549484e7623550f
-SHA1 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.symbols.gz) = b76da4e7c7cdcdbebd2148ee815c24554b0c4bee
-SHA512 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.symbols.gz) = f31c311444a309674e2718baab015b47c0139523e7996a29ab8d3e97a941b5d74be8765571bf3239375c979fff1e963d32d2dbae19ad5c7dedcbd79a8827575f
-RMD160 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.symbols.gz) = 95a34099fb1159f17619713ae37d3c6337b479c5
-MD5 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.symbols.gz) = ab2e1333f6d957074854ea8f92320442
-SHA1 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.UP.gz) = 961388f6e1c9522c0d8f19f0a471f14d3c35fef7
-SHA512 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.UP.gz) = 7b3fc655414c6c2334e46315eb91ee562b94400f5729e0a33dcc9e9a79c431b4b5e0c124541b9666731740ce365c034718671348a494c43167eb0b73966133a2
-RMD160 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.UP.gz) = e02a398cd00c0b8ab7bc3b6dbd52e767b18e3275
-MD5 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.UP.gz) = 200fd2ad96dfa6ec886585e20d4b4b06
-SHA1 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.gz) = bf5fe38aaa01c9b2e9963b540f1550562789da22
-SHA512 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.gz) = c2b63ce56ff32ddaa96642ae15a33143a245b9239560c86e51e78db333d8bfd19e761d6cbe27ce69647a62fa4c76317670f0d22aa491a2cadf45dae18573511f
-RMD160 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.gz) = 65f66c6c7f87e3be728339a1b294b4240b14b953
-MD5 (NetBSD-6.0/sparc64/binary/kernel/netbsd-GENERIC.gz) = 44d6f63922847e6f53d78f10bc776e3d
-SHA1 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.gz) = 1fe47cdf745a00c31a47faf1155eb0f9af2ec4fc
-SHA512 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.gz) = 7a10dbbdcfdcad97fec4ef476e9b6c876a3bb80b78fb4634e3f502b043b392faaf457b90ff572cc9fcf35c8c26fc908fe035b5859ed66ea2f0db490d2638f9a4
-RMD160 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.gz) = 06d3a86dbdb12e0b810888233ed79bc735ab13c7
-MD5 (NetBSD-6.0/sparc64/binary/kernel/netbsd-INSTALL.gz) = 203f7a8aad11cea65388e14dec6a65f9
-SHA1 (NetBSD-6.0/sparc64/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sparc64/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sparc64/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sparc64/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sparc64/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sparc64/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sparc64/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sparc64/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.UP.tgz) = 643e8b15fb356856d93258e6c5d05cb14eb7d569
-SHA512 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.UP.tgz) = 26c4eb3392f80d4ba7c28038f548e59a04a84742962da3340fb49d09ef42b2e3debc1387710b3c4baa6c735370b5daaa23a6f4da91f1be6552ae4c0cd314f4de
-RMD160 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.UP.tgz) = 37e5fdfd623c179edfa002163e005518b26fab7d
-MD5 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.UP.tgz) = 70d61e4a2588eb3242e66d0cd4cf1b1e
-SHA1 (NetBSD-6.0/sparc64/binary/sets/base.tgz) = cdce0eb09c71244d8362eb4e09c0bdbd92fb4900
-SHA512 (NetBSD-6.0/sparc64/binary/sets/base.tgz) = 455fa6b72e5735a13b3106260b7cb5cabeefd3ca83603dd9daf3805a0abe55acc6b484ad8b4875590e5d949c35b8476cec136f79f8ecfcd7b12cbeee44d6f305
-RMD160 (NetBSD-6.0/sparc64/binary/sets/base.tgz) = 13508c9d394104d0c0b460a895f796e091ca8635
-MD5 (NetBSD-6.0/sparc64/binary/sets/base.tgz) = cdafa4124cc784a56444f96fb24a7a34
-SHA1 (NetBSD-6.0/sparc64/binary/sets/comp.tgz) = 71040515074d030a65e0200afe6dbd6955251af6
-SHA512 (NetBSD-6.0/sparc64/binary/sets/comp.tgz) = 52a075300885b0d15ac960430ac3ed1ecb4434cd0bb2de216c6d8c27239011544628ad1ccd87076ac9d40d64e0c088cc2ce0e928902f80629cea11631f30e35c
-RMD160 (NetBSD-6.0/sparc64/binary/sets/comp.tgz) = 96bd6b8b5758360970d9d5b703019bf660aa56d5
-MD5 (NetBSD-6.0/sparc64/binary/sets/comp.tgz) = be2c961313f29bb9c0282516867850d2
-SHA1 (NetBSD-6.0/sparc64/binary/sets/etc.tgz) = e3bae514025003988d5de6ffcc14e130ee8da818
-SHA512 (NetBSD-6.0/sparc64/binary/sets/etc.tgz) = 2e5d76dc66495eb24d8abd5eed70cb05cfef3190e81875f0d6e6da67af962b0de0062bc4e9758859647ebc5d4334bd9bc28a20508f8ddecc7c183de8174a4ed4
-RMD160 (NetBSD-6.0/sparc64/binary/sets/etc.tgz) = 3fe88c6bd07952ad383d6ab1dbb7d6c3d5315b4a
-MD5 (NetBSD-6.0/sparc64/binary/sets/etc.tgz) = 810c7b6940fd2e8049abf4318577f5fa
-SHA1 (NetBSD-6.0/sparc64/binary/sets/games.tgz) = a40f5681634cff38215edeb22795d4e5f3f35324
-SHA512 (NetBSD-6.0/sparc64/binary/sets/games.tgz) = ff66f16eea28f3191abed7466b21d1c1969f0556cb5a9a61e5167bb7a2c4e55ed8682222a389a04d44306b39b424be25623cf8bcd41c97139960ee48ba91199d
-RMD160 (NetBSD-6.0/sparc64/binary/sets/games.tgz) = c3cc1abe005bc98e0afebadc87f0181ba1fd8d6d
-MD5 (NetBSD-6.0/sparc64/binary/sets/games.tgz) = a70797dbec20b831d406952468b8376a
-SHA1 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.tgz) = c047c462dd890c992df60d0f23657638875f90c2
-SHA512 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.tgz) = 79ca275266c148fa3db47ac564e8f764c75b80a8243a0a32bbd3cd3392621b47733afdedf64f3a2103a99c03ee2f63494d892260951b85949e1383d3bf8c5673
-RMD160 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.tgz) = c0b40543a2674c1db7d554e9ad19f8e289683de8
-MD5 (NetBSD-6.0/sparc64/binary/sets/kern-GENERIC.tgz) = a9346477bd0ae3d50b4b82f8f8da8531
-SHA1 (NetBSD-6.0/sparc64/binary/sets/modules.tgz) = c24c622359c9e5f8a05c03adb30e56c8a9862abd
-SHA512 (NetBSD-6.0/sparc64/binary/sets/modules.tgz) = f2f834fded5c1142611bd5ff4ebcec67db75f620256fb27689e4cc626785a1bdf90235965e2fc4f2ee7c0ba574e73063e7f13d7f85d291dd23395074517abb9d
-RMD160 (NetBSD-6.0/sparc64/binary/sets/modules.tgz) = 6a1b6845fc699f9837a88fc3c18585162a7a0aaa
-MD5 (NetBSD-6.0/sparc64/binary/sets/modules.tgz) = e8588a8eed7bb775dfb236cfc8c458d4
-SHA1 (NetBSD-6.0/sparc64/binary/sets/tests.tgz) = 1103500cca9a6dcabfafd50046f15e035a1d0914
-SHA512 (NetBSD-6.0/sparc64/binary/sets/tests.tgz) = cc628d649f4d16af2300baf5edbf075bc43c91b027c19dcd59b6f1be0ff1b02a3f8f97eb88db2f2bcfa93f69ef02653021f416c546dcdb0f0aa5bf4726257f79
-RMD160 (NetBSD-6.0/sparc64/binary/sets/tests.tgz) = ce47518fd68d02d821bb4b4060ea3a775f64e37e
-MD5 (NetBSD-6.0/sparc64/binary/sets/tests.tgz) = 2444ea500f4f8363d339a5eb58b50e27
-SHA1 (NetBSD-6.0/sparc64/binary/sets/text.tgz) = 09bdcb54fb74d5ae4e43b5b74a6a35467e385e09
-SHA512 (NetBSD-6.0/sparc64/binary/sets/text.tgz) = 82834b26dc0a102bdb5da4744fe2677fb50a6018b34a656d7f0813919bfe66168e37b5b47ad027ee6912fb77cceaa5a1cc33eef8269eb6a8a9f42368d01b3037
-RMD160 (NetBSD-6.0/sparc64/binary/sets/text.tgz) = 376a9a61492aed41b486fa58060edcb472152739
-MD5 (NetBSD-6.0/sparc64/binary/sets/text.tgz) = 69cce7d6bb4cb104cc27f75f17da32e2
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xbase.tgz) = 865d8aa735ba57980974089ee2e44d79c69cd036
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xbase.tgz) = 2b7f8d15caf6a2b831bdba3e8a2d4f78633f3350d0fc93f107c35cba746c1423c966313224422832484166e384a54b1fc2c75cba78ab138bf36e81c5468c2952
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xbase.tgz) = ec680d9c70f3e6729a19167932b552a727c628a5
-MD5 (NetBSD-6.0/sparc64/binary/sets/xbase.tgz) = a1907a4afda2ea247a6b54b158ac97f3
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xcomp.tgz) = c0b90da52efa86aadb3af4b7de3773c29289c65c
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xcomp.tgz) = d3774cc192c6ea74391dc0323db4f7e1695f290908c1ba68f885a9e670fb2c31f9a0c831a6020cd1a98e1b93691e02fadb260b26d8c6d252e9638ebf9cc0e8e5
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xcomp.tgz) = 40969f50dcfbfd6948b48f819a7f84957bf14134
-MD5 (NetBSD-6.0/sparc64/binary/sets/xcomp.tgz) = 681754abde2de73609efdcbc7370dbe4
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xetc.tgz) = 43c0a0b2db4bc88c509eb0d271a99e11f823babb
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xetc.tgz) = 4d28ba7d6db0b7c7cb005697eabd739544bae3e3128eb29b8ce62297b26b81d944d0992a6ca3522a51bb83ca874c4a5cf844e06a7aac0a6ab26b30838016faf2
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xetc.tgz) = bf885030bc65c540373a06e2b4c6257a5b634b61
-MD5 (NetBSD-6.0/sparc64/binary/sets/xetc.tgz) = 006f8b77a6fb41dad2dcbf2f28efdb8f
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xfont.tgz) = adf52a9866ae0e4b1e871102f664dd42907d327f
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xfont.tgz) = a02de6961b726d4f5fc291ac48a0a59d0f991ba96fd83788e766be8591e94a64eae0fdb23262f965042348516c52a173e332b8d90b21457d9089b7478273221c
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xfont.tgz) = b458181e798b9b33d15ad35adfb734a0b597d042
-MD5 (NetBSD-6.0/sparc64/binary/sets/xfont.tgz) = cf37180a29cdf9bd6a34a24a8608e6bd
-SHA1 (NetBSD-6.0/sparc64/binary/sets/xserver.tgz) = 6ac9cf2e66f22ee56ef1d692e9bed5ae97092088
-SHA512 (NetBSD-6.0/sparc64/binary/sets/xserver.tgz) = b6c611b3360d537e94339536354d0a5904137b519e4debab49a93a874429a115cee276f3550a6db23ec9caeb17af3ab162999d181189311a66d65f5230a3a99c
-RMD160 (NetBSD-6.0/sparc64/binary/sets/xserver.tgz) = eb216c772571b79eb35e44285f8bed559eeb4fd7
-MD5 (NetBSD-6.0/sparc64/binary/sets/xserver.tgz) = e7994f53d2b295259dfb313f86d4fe4d
-SHA1 (NetBSD-6.0/sparc64/installation/miniroot/miniroot.fs.gz) = dcedff4706750585b89433f833cfe99fdd454400
-SHA512 (NetBSD-6.0/sparc64/installation/miniroot/miniroot.fs.gz) = 94360d4f72150432307bd097e8fa02b18bf3d63ea095b8cecfb4de863ab367c73268116681bb94083bef6445842d4718bfdeec200f57124e95c1de8dfff96b4a
-RMD160 (NetBSD-6.0/sparc64/installation/miniroot/miniroot.fs.gz) = 344981ca28094153d14b7d36321dc5e747f214cf
-MD5 (NetBSD-6.0/sparc64/installation/miniroot/miniroot.fs.gz) = 8e457a7c91b800f997cdaf6a17e79bc8
-SHA1 (NetBSD-6.0/sparc64/installation/misc/boot.fs.gz) = d5afbef3f3b358e77789ea7e9f22298a77415d22
-SHA512 (NetBSD-6.0/sparc64/installation/misc/boot.fs.gz) = aba7c9613d7a34e3b939644d37b0a8fb6c27fa0a8aa208aa729499b367f76fc6d5e1a9a06a5a779748c2d2ebfdf9521ac2fcd484608bf64ee3fa0eee8b97fd5c
-RMD160 (NetBSD-6.0/sparc64/installation/misc/boot.fs.gz) = bb8a8ed04649c3369dd5893897f7ea2ce7085739
-MD5 (NetBSD-6.0/sparc64/installation/misc/boot.fs.gz) = b9aef29dae0ef2a33611cd4655ff58f0
-SHA1 (NetBSD-6.0/sparc64/installation/misc/bootblk) = 9aee0c29c2eeb5c2e61aa9bfcd289e88c1fe1e97
-SHA512 (NetBSD-6.0/sparc64/installation/misc/bootblk) = 294708defc60602553eef0ae08ed910845b4c89ed72f33493c5fedad3737c9ae1cc96e947a11227e52505c62e04ad6d1f8f1f292df7e7885346acb824c4ea3fe
-RMD160 (NetBSD-6.0/sparc64/installation/misc/bootblk) = 28bd7d5c0fe6f33afb9627a3e3c8950ca062afa8
-MD5 (NetBSD-6.0/sparc64/installation/misc/bootblk) = 16b4c89c82c34d5795a50c811941022c
-SHA1 (NetBSD-6.0/sparc64/installation/misc/installboot) = d1cb90b57a258cef3671cc649d50aa7ea6f73f4e
-SHA512 (NetBSD-6.0/sparc64/installation/misc/installboot) = bf100237898c168e020c365da754b8a659b7cbc01ab310fd9b77a2ab60982c67e5f28cfbc7cd152ec37bc9591c1d0402c850803d57a45591282f774b97da3e2e
-RMD160 (NetBSD-6.0/sparc64/installation/misc/installboot) = 64f2ea944507466a6f5a61367e6190897cf00dc5
-MD5 (NetBSD-6.0/sparc64/installation/misc/installboot) = 7436c373285d89dc76dc705c3bbba5c0
-SHA1 (NetBSD-6.0/sparc64/installation/misc/instfs.tgz) = 3715a9104cdd1744835ef982a2a95525a5500c42
-SHA512 (NetBSD-6.0/sparc64/installation/misc/instfs.tgz) = 17a2112d5279ffd1a5889e55cf8e7081d564c330645f8c90082e324d413568db5bb58f8281a5b8e22d566b8699c326fa1661a0eb31d4b167874ea828a283bcc6
-RMD160 (NetBSD-6.0/sparc64/installation/misc/instfs.tgz) = 1065f4e43c679d182e72c654ce6a236f57350137
-MD5 (NetBSD-6.0/sparc64/installation/misc/instfs.tgz) = 75c25d3de06e50ff85364600e40380f4
-SHA1 (NetBSD-6.0/sparc64/installation/misc/ofwboot) = 42516022d9da6a2cd08daa28c5e60e68c6accd8b
-SHA512 (NetBSD-6.0/sparc64/installation/misc/ofwboot) = 1d63340007e8aefb0f0a725f444f8cd8bd62c68045c0ba6bede194f5d5f4c05a795f728ae00b4cdf65dd82cfa163c2f954ebc2a8caa54b35a908a337f1cac736
-RMD160 (NetBSD-6.0/sparc64/installation/misc/ofwboot) = 53bf739509e7c3fe2f4ef8cad8aecec6fed9fd1e
-MD5 (NetBSD-6.0/sparc64/installation/misc/ofwboot) = dfafb8bbdf16b3219ff2b38d69dffb87
-SHA1 (NetBSD-6.0/sparc64/installation/netboot/ofwboot.net) = 42516022d9da6a2cd08daa28c5e60e68c6accd8b
-SHA512 (NetBSD-6.0/sparc64/installation/netboot/ofwboot.net) = 1d63340007e8aefb0f0a725f444f8cd8bd62c68045c0ba6bede194f5d5f4c05a795f728ae00b4cdf65dd82cfa163c2f954ebc2a8caa54b35a908a337f1cac736
-RMD160 (NetBSD-6.0/sparc64/installation/netboot/ofwboot.net) = 53bf739509e7c3fe2f4ef8cad8aecec6fed9fd1e
-MD5 (NetBSD-6.0/sparc64/installation/netboot/ofwboot.net) = dfafb8bbdf16b3219ff2b38d69dffb87
-SHA1 (NetBSD-6.0/sparc64/INSTALL.html) = 0422ec241b04a9456f70ae28d29c7bc2be78b7f4
-SHA512 (NetBSD-6.0/sparc64/INSTALL.html) = 15bd5a5a0362c4412c416767608ce7b9580ebe8777ad15fa529af5a2e658a250000fa4a8d9313e2f7f718bc904518943d0ef095d8f0ba50deb50997f6a447fe7
-RMD160 (NetBSD-6.0/sparc64/INSTALL.html) = d534bc86ddea48b776c562b00bf67b686b91ea9d
-MD5 (NetBSD-6.0/sparc64/INSTALL.html) = 90c6044241bca2933db37134f775bf07
-SHA1 (NetBSD-6.0/sparc64/INSTALL.more) = 055a5f58c1a926fdc7d272cf573eddd0c868ef7f
-SHA512 (NetBSD-6.0/sparc64/INSTALL.more) = 403ee0491131f45d867e10305a65b801f95bd8fa195bfd4e95499d63ba74851774ef14f1fcc8cbd03220f973050903279438f15cb824ae2b294ead99c7d07bcc
-RMD160 (NetBSD-6.0/sparc64/INSTALL.more) = 1744bae9283a6f0e12f95e382f3bedd44bb6da14
-MD5 (NetBSD-6.0/sparc64/INSTALL.more) = c42b30d10ac37a1ac1270335414e796b
-SHA1 (NetBSD-6.0/sparc64/INSTALL.ps) = 60073507d2c04d97ccd9cbbf5fc51458cfd12509
-SHA512 (NetBSD-6.0/sparc64/INSTALL.ps) = 86c33bcc6fb6ff78056914afa17cfbd8efbea1f2100569f4169ba49d1033e4a86ea3ce49d1c5932012712bdf49bd356dcbe59aea4f8271c822482722dc08c7ce
-RMD160 (NetBSD-6.0/sparc64/INSTALL.ps) = 51b6801d68738b1606a65969c2ae3c3fa811310f
-MD5 (NetBSD-6.0/sparc64/INSTALL.ps) = bfeb86c3637bf7b5af6fcb553b62ab1b
-SHA1 (NetBSD-6.0/sparc64/INSTALL.txt) = 518f7cf7bfb65b40a409b78375c0276569ac5540
-SHA512 (NetBSD-6.0/sparc64/INSTALL.txt) = f3e1503729f62b588c53747850b7907b92d823f702ec484925d3c0173c6dd866626ef500b8b581f72d54ce4b2aa72788a5543d98c72408a5060067b832e93a88
-RMD160 (NetBSD-6.0/sparc64/INSTALL.txt) = 2716b124f107462bce88b2bc12d54d5d5aaaef81
-MD5 (NetBSD-6.0/sparc64/INSTALL.txt) = 26984ffe79eab5c070bafdc74267e26a
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.symbols.gz) = a1a418aa1a4815cd42b51d842b61002b4acded14
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.symbols.gz) = 272b8dc02294eb259adca2d15a6ea1633066c7708a1d8461d5d299bc7ff5887510fd6f20f490a781813fd61e6f95eed92ef03ba3b4f846ba4ecfe6b7a1d91682
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.symbols.gz) = c69407e3e5bddd21575929744fd986e7795c7382
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.symbols.gz) = c47a2dcd2bac0d4ade29e3ceba7b8b90
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-DISKLESS.gz) = c6cb928563370afd5d467adbd4d24a0ac37bc8c0
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-DISKLESS.gz) = e24a4feb31212693c9c77732473107dc01cbe19c4d23a3f50a7028079f669e66c5252b9d39904e4d1daab0af8ac020b993f36f027df256a008249a8879d848f9
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-DISKLESS.gz) = b3bd2f4f03f92c810f3b21d3163d4fad1383a0a9
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-DISKLESS.gz) = 2d2987883fb76005f8b4ca0686fdb261
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-FOURMEG.gz) = 83451516991b23dddcd67b3d4aed3d4d5eef0af9
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-FOURMEG.gz) = 8ea5066dcd3ab85ca812a169d2a385befcf5717e1dca01c4d5a9daae2368498c1eedcb683aa76d912be0cb6193217c33a5819d8c597521a21fd9ccc5c4f84932
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-FOURMEG.gz) = f8dbe58a262e48a7a1bdddfad8bcbf4c02455f93
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-FOURMEG.gz) = f717bd51debc97e9efb5979b5ba425e8
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-GENERIC.gz) = 89a4c10827c07a9100a4cf7692012221e6f7d99d
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-GENERIC.gz) = f53dd3eaf33dac52acfcbd6657269783ca14c1a33ea4e0cdf47fe96f3a620961e07905d5eccc2e15ff75cb0910f9e47d8a37487c7a8b455db494b5690d9ce5cf
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-GENERIC.gz) = dca21703d8350ff9c84920da0fe38b4e96b58c73
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-GENERIC.gz) = 5be2117280d7f1f78689744e44903f49
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-INSTALL.gz) = 31619c78adb4831a8ae456942ee6a31c5bc0576b
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-INSTALL.gz) = 08d1e00c5013bfab18920543807657eb480d54d0270d1699a9a583ac0c8fd4df0750924727ee2723c7ad6bd1c0450c5c89378c450b412ab6d6e6c8be723f2b86
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-INSTALL.gz) = 3d651236509dbd65a585082b2adffa0abd47c298
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-INSTALL.gz) = d39784e7514b56ad37120e1accca74e9
-SHA1 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.gz) = abe6ff67ad153c993974749b41bbf6b2e207792a
-SHA512 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.gz) = 63fcbf6f7b5582b69aa77b4dcfed2125f32b40a622b2eb533eefd92bf829513488e37c4947c44e004ec8006a7e35030fb3e500f1584922101d376e9cc67dc8aa
-RMD160 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.gz) = aa2ba7c4930e6f557f809407458f12a5fe2da818
-MD5 (NetBSD-6.0/sun2/binary/kernel/netbsd-RAMDISK.gz) = 10a7099f6bfc84a63eb89985f93dfab6
-SHA1 (NetBSD-6.0/sun2/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sun2/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sun2/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sun2/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sun2/binary/sets/kern-DISKLESS.tgz) = a6ddacc5894ed442e82fc8ad75e4ba5a85acbdd0
-SHA512 (NetBSD-6.0/sun2/binary/sets/kern-DISKLESS.tgz) = 7b0afaf8fcafd005d56142659c130fa14fed8681f0907c262b52ba367db985390c1ada5b3c22705655fb8fdbdb2577f112b2e867dae8a47d30da17db9f68dca1
-RMD160 (NetBSD-6.0/sun2/binary/sets/kern-DISKLESS.tgz) = b1566d3099e8654a48e74a7f4b959d22ce72241a
-MD5 (NetBSD-6.0/sun2/binary/sets/kern-DISKLESS.tgz) = 320ebbbe9568d045ad4dc2f4284e45e5
-SHA1 (NetBSD-6.0/sun2/binary/sets/base.tgz) = cdfdfc1f6d5fd3fab1cd9e5546d1060a4cb16b45
-SHA512 (NetBSD-6.0/sun2/binary/sets/base.tgz) = d7a0059ea7babe24d603084826c5a338b33ef3ac4ce1a6039f926692141f28e32d654656a85e995aa000742f8971b33d3e4fad8dbee8a9e6b3cac2c15b9cf01d
-RMD160 (NetBSD-6.0/sun2/binary/sets/base.tgz) = 3652a11470a78517f725320750e8a61c5328510f
-MD5 (NetBSD-6.0/sun2/binary/sets/base.tgz) = 3505f44ff71277ff11e5402646e110ef
-SHA1 (NetBSD-6.0/sun2/binary/sets/comp.tgz) = 40c4eb1b75f3e903a92ea86d8919fd23a56e470d
-SHA512 (NetBSD-6.0/sun2/binary/sets/comp.tgz) = a52435520af63ae741654d81bdd5abd611857aaa19dc757bce5c841fa13b15d878780509be22a31ed893a2a4ca1c29548c5a737a2a650a7241805b518f9c70ac
-RMD160 (NetBSD-6.0/sun2/binary/sets/comp.tgz) = d51f8b1dbebe3ba6c4c3623351e647981b20f9da
-MD5 (NetBSD-6.0/sun2/binary/sets/comp.tgz) = cfdfa248cfcb4e2ae4af64f3f8a4eddf
-SHA1 (NetBSD-6.0/sun2/binary/sets/etc.tgz) = 5872a9f5eeb6004802bba9df4a0d4ec1dfccea8d
-SHA512 (NetBSD-6.0/sun2/binary/sets/etc.tgz) = 617be23175e9c578e834e039720a0c23357cd24b22639c5641a54c5b36ccb725446cda8e3c3def6e8e73c39c1f90065c348a0ea990f7a50384ba9a65ada10e16
-RMD160 (NetBSD-6.0/sun2/binary/sets/etc.tgz) = fa533eae2fafa51d8e2643dbe20be6ac179f5d05
-MD5 (NetBSD-6.0/sun2/binary/sets/etc.tgz) = ea43e005a9a50dcbbf704fa27745eb78
-SHA1 (NetBSD-6.0/sun2/binary/sets/games.tgz) = 97fe1f17370ab456fea7c21c66dabbaefbb8bf39
-SHA512 (NetBSD-6.0/sun2/binary/sets/games.tgz) = 2dfb36fb06f40d0ce519fe3808d53b8babd8bc9ae810c4fadb09e84e93e57b88b893c04cecbaf062c4ed2257eacec30127513aaca5c91ef9234da9226f366c4f
-RMD160 (NetBSD-6.0/sun2/binary/sets/games.tgz) = 6affdde9886085d8acd3bef196096dbff77fd99f
-MD5 (NetBSD-6.0/sun2/binary/sets/games.tgz) = 7eeaf3572032c8e522266e0283594105
-SHA1 (NetBSD-6.0/sun2/binary/sets/kern-FOURMEG.tgz) = 81e4d6b63aa15ea1f60604aa24a21d0eb4ddedf0
-SHA512 (NetBSD-6.0/sun2/binary/sets/kern-FOURMEG.tgz) = 117485cb1d871f3e643c009a998998885011c1d2d826ec2db092d0e3569a21fc63618a73a803332fdd936ecb30738e76f75be3e76ee17d71b190a8bb188aa873
-RMD160 (NetBSD-6.0/sun2/binary/sets/kern-FOURMEG.tgz) = 3c7e6d14f1a2a9b288f245ad0d6f115469b060c2
-MD5 (NetBSD-6.0/sun2/binary/sets/kern-FOURMEG.tgz) = f9ac31754f27f2e22aff03c5ce4e166d
-SHA1 (NetBSD-6.0/sun2/binary/sets/kern-GENERIC.tgz) = 05b5ac2735fe34a61df42c13670bf7a758b8c37a
-SHA512 (NetBSD-6.0/sun2/binary/sets/kern-GENERIC.tgz) = d5273855067665e77291f477adc2bcf482db2ac749b078502d04bc53b103977f4f16da05acbe917a97d4bba20626dd1954132939cfcf168cf8b75f5e12fe71b6
-RMD160 (NetBSD-6.0/sun2/binary/sets/kern-GENERIC.tgz) = bf5c45b36a68224af25aca91aa2eac8d213442c9
-MD5 (NetBSD-6.0/sun2/binary/sets/kern-GENERIC.tgz) = baac1013c64948cd3fb2bff22a21e5c4
-SHA1 (NetBSD-6.0/sun2/binary/sets/man.tgz) = 9bb0fc4bb2f60df3acbdcbd6d03d11e52227c70f
-SHA512 (NetBSD-6.0/sun2/binary/sets/man.tgz) = 3bdb75b91c18982b39f2c2842d9260749491f16c6da624510c603ef0e897298f6ecd620a63a96ccf21354f6a4008b4723249635280e4e956a4668d1984faf7f5
-RMD160 (NetBSD-6.0/sun2/binary/sets/man.tgz) = 3b28f01096b5070887994e84b171cd6c59f0ad94
-MD5 (NetBSD-6.0/sun2/binary/sets/man.tgz) = 06cfb9c81392e3ae7b04daa01475db38
-SHA1 (NetBSD-6.0/sun2/binary/sets/modules.tgz) = 0ff7c443e874d15372f107b6772b5004ee0ff6d2
-SHA512 (NetBSD-6.0/sun2/binary/sets/modules.tgz) = ad3913a8edf4494515dab3a4df4a56799f7cb2cf335ca9e4cf78e61a8b92f161cf2148ea2201ce9e9a6966872c5ee749b69642205ef4fa475aae1b3671e49d69
-RMD160 (NetBSD-6.0/sun2/binary/sets/modules.tgz) = ecbeaeb92cd60504c907b743ebf8bc729483eb35
-MD5 (NetBSD-6.0/sun2/binary/sets/modules.tgz) = 94f595d3a8f52f8b7b202c1715896b1e
-SHA1 (NetBSD-6.0/sun2/binary/sets/tests.tgz) = 4651980ab126f0fb7fa3282e401fed649129dd46
-SHA512 (NetBSD-6.0/sun2/binary/sets/tests.tgz) = 4fcec0fde688d32f2f53d0c3d6ec9218a2c670f0006b421ab907098f7210481d0ef690d9e8415dd5201be799f83b303a8a2a5b4f8b35af16b311b4996a353b93
-RMD160 (NetBSD-6.0/sun2/binary/sets/tests.tgz) = d260affd3d3656aa73171aca7e8f40f2f502a645
-MD5 (NetBSD-6.0/sun2/binary/sets/tests.tgz) = 801c9c531d070d152c1f259dd1111f64
-SHA1 (NetBSD-6.0/sun2/binary/sets/text.tgz) = b76b4bc516bd7a1747415f9bdbd6af7370cded48
-SHA512 (NetBSD-6.0/sun2/binary/sets/text.tgz) = 5654c7217b9d02e327c7803de1dc67d5df4225d1399c3c0a433728fb2fc124ddf0fb2e8cc89d304e03a7c1104a1e1b6ff665b5b29825e3afb0acb43f37fa327a
-RMD160 (NetBSD-6.0/sun2/binary/sets/text.tgz) = 89f288a449a1049aabef74f6033bf00611123bf7
-MD5 (NetBSD-6.0/sun2/binary/sets/text.tgz) = bc500c71253fd2e2b3bb1dac2bf2b738
-SHA1 (NetBSD-6.0/sun2/installation/miniroot/miniroot.fs.gz) = 74ae5c6fe766a40a9bf149885809186bdaae96ff
-SHA512 (NetBSD-6.0/sun2/installation/miniroot/miniroot.fs.gz) = 4c7ab73a13c13b3b4cd7a01e12ca25d7a385691dee2b830fb94885c9eece4e62c45cdb9e3961b5426f0e979b2e0f2e951c52774231129f824787ee6daa8d8ed1
-RMD160 (NetBSD-6.0/sun2/installation/miniroot/miniroot.fs.gz) = 032b6ddf1452800c8f824983c6d3c1310ba723dc
-MD5 (NetBSD-6.0/sun2/installation/miniroot/miniroot.fs.gz) = 6d2927b0648b018b2726f7159e60a911
-SHA1 (NetBSD-6.0/sun2/installation/netboot/bootyy) = f97ac30d2c6258791d64d408e295cc2f48e7892b
-SHA512 (NetBSD-6.0/sun2/installation/netboot/bootyy) = c0aa6a81071323564d4445ae06b9e0629b32b118bf6c516e28109d3c2d7a72613b8a2005b6f968a43acc6115e3edba57f15c314b77a774cfbb977ff668dd946b
-RMD160 (NetBSD-6.0/sun2/installation/netboot/bootyy) = 3de2112b92a222b55ffeff2d5930ed5eccf70a7a
-MD5 (NetBSD-6.0/sun2/installation/netboot/bootyy) = 7a6fce60607e791e1c40186b0b7a5403
-SHA1 (NetBSD-6.0/sun2/installation/netboot/netboot) = f0ab4e961148d2d8885a47a4fd1b2bc1350e4978
-SHA512 (NetBSD-6.0/sun2/installation/netboot/netboot) = b462fb05ea093921b40a1042c15b0013a848c7b022f22523e3dfe73e0141b35982d26825812604bbfcb735f8851fafe9709979d90fb1db21ee552f0e93db6a86
-RMD160 (NetBSD-6.0/sun2/installation/netboot/netboot) = c7c6416042d8ed641a8ed033541a7757492229ba
-MD5 (NetBSD-6.0/sun2/installation/netboot/netboot) = 52d961060a7035f07cb1946d71736289
-SHA1 (NetBSD-6.0/sun2/installation/tapeimage/MakeBootTape) = 1c24969b0bded7ed9bed7203e9c577d896d25566
-SHA512 (NetBSD-6.0/sun2/installation/tapeimage/MakeBootTape) = 33eeb495736ac60dabd87faf803defa85f2e400f49b1b4078c16aff18404673a7e668676dc90eb92dc597835ccac8abe26fb68ecb22ddc5afd5afd7de8f2d680
-RMD160 (NetBSD-6.0/sun2/installation/tapeimage/MakeBootTape) = 234492df364f78e2aef3c9cd8ac4496077ba2760
-MD5 (NetBSD-6.0/sun2/installation/tapeimage/MakeBootTape) = 924860ba84acf16d29a70783d6e106a3
-SHA1 (NetBSD-6.0/sun2/installation/tapeimage/MakeInstTape) = 75b8d9faa2e1960a48354922aef5c25c76f66ee6
-SHA512 (NetBSD-6.0/sun2/installation/tapeimage/MakeInstTape) = ba61feb33064bdb843f8cd563135cc8fe28e9bbbaf8d1ac2eba2c5e1ad083daba83b47295f3c677caa014c9be7606ef6a40a6c1bc9b07e4eaed139d8299be97d
-RMD160 (NetBSD-6.0/sun2/installation/tapeimage/MakeInstTape) = 198879d5058f7ee226c4c669f3a7429bb49c12ce
-MD5 (NetBSD-6.0/sun2/installation/tapeimage/MakeInstTape) = 58a95592c402c3f752f4c801fa3d20a7
-SHA1 (NetBSD-6.0/sun2/installation/tapeimage/tapeboot) = 1612942dd5bbca5773de6ac02723ea898ea4e172
-SHA512 (NetBSD-6.0/sun2/installation/tapeimage/tapeboot) = c5b75882d4b9041edfd74cbf9dc4df8393e687503043e77af766452d780cc8a5584b916d0a792748730e9c87bd52803bbfc0a043720e611079a5cdcce6243bff
-RMD160 (NetBSD-6.0/sun2/installation/tapeimage/tapeboot) = 61a36a8d1737147b7b4587353f974c87fca2b442
-MD5 (NetBSD-6.0/sun2/installation/tapeimage/tapeboot) = 751ee54f544a63177c273ea6757dbdc0
-SHA1 (NetBSD-6.0/sun2/INSTALL.html) = 40cf15ad864adcc8d6216b9d4220cc3eab1463ff
-SHA512 (NetBSD-6.0/sun2/INSTALL.html) = 0992031a6cae198c16b08553e94277a39b34886cf0bfea343b95493439d79868cd50a1c2b9f2ce9852068b43beb7ee2a2016480c3ea452b9d62a25b71c72d567
-RMD160 (NetBSD-6.0/sun2/INSTALL.html) = f7aaba481555931612488d204c9a256899f04efb
-MD5 (NetBSD-6.0/sun2/INSTALL.html) = ccf725a8f39711748946cc414f688dde
-SHA1 (NetBSD-6.0/sun2/INSTALL.more) = 21b6ecc61f6d15fd2b54511150b840b242996f02
-SHA512 (NetBSD-6.0/sun2/INSTALL.more) = 5c43f22fe85470c7069ea524ff18570a1a3605a956157d9f662cf8b76fa6f52e4eef41e765488ae00b491830cde3b148254ed5bec6b20db0f5661d29ff0f7fce
-RMD160 (NetBSD-6.0/sun2/INSTALL.more) = 9adc2008a6388ec7ce907c23ac6f1de1f941c979
-MD5 (NetBSD-6.0/sun2/INSTALL.more) = 79afb0a5f30435a2731e455a85884a28
-SHA1 (NetBSD-6.0/sun2/INSTALL.ps) = 37c7ffa52cf698e058442a61d937a0ad09fa0156
-SHA512 (NetBSD-6.0/sun2/INSTALL.ps) = 09998f504688d7144d223f857edd4273bf00c1c50b1ec47294db2be1abdc050cbf73d0037c0b88279fb1028fde2556bbcadc2d4fbb7466834385905c46f3d688
-RMD160 (NetBSD-6.0/sun2/INSTALL.ps) = cac0f152af9ddd8fd643b2578688e7db03a3deb5
-MD5 (NetBSD-6.0/sun2/INSTALL.ps) = b2a094aacd3846aa4c121629daa938fb
-SHA1 (NetBSD-6.0/sun2/INSTALL.txt) = 90377374ac7c61d0fb6bafdaecd790a86fe7a447
-SHA512 (NetBSD-6.0/sun2/INSTALL.txt) = c37c159387cdfa0f40268a16c5a55cef0473b31f51e5c978ec948fe4964d3e9574dd9bbbd758eccb9304a9af6d8216b38aa256676a36537b480a5606b2cb1fde
-RMD160 (NetBSD-6.0/sun2/INSTALL.txt) = b16dee40608a6b8e8022df13c27783e34e48279f
-MD5 (NetBSD-6.0/sun2/INSTALL.txt) = b33826d2ef20420c36a3723256cd4488
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS3X.gz) = 08ec51564fa19e69828a501a60ac05c687f8471f
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS3X.gz) = d31891f04947a6295085ee899ccb5d532b5e50eb66d1c4f7f7779aae9a1c711b54e142c1d26f45ce10f6ef6815894fe545b436d40cc0ba05149e02885981f029
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS3X.gz) = a71a82ee59a431dd5c7a6d5100d84fd264ca4e4c
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS3X.gz) = 261995193793314b7306c5753aed0e23
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS.gz) = 941fbb0e064253228f04d4baaa8e2db4a09b8d88
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS.gz) = 2013168c4985c258bd2f605cda56dd678c394580edf2afa1fb37fd243b748b4d50e049a2f4b314ee5b70f30d181ec684d886094258115a0cdf0e485c120a2628
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS.gz) = 6028696adecea1922e0bdb1d757a4d70725c3639
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-DISKLESS.gz) = a49e05dd12628e1fcf1a30e8815ea72e
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.symbols.gz) = be5066fcab92b01e828769c3766ac902896a9dae
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.symbols.gz) = cc0f0b30fa4b28c2fbaf9229568530ee61e17b9ec8515242e53d4d6ac32d1f3ace313c4d138ff173a2301e208ded7389e93551a4a05d7f9a5bf536a8566c2de2
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.symbols.gz) = 832199c94540e3274e2376b17e23144cf99af3c7
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.symbols.gz) = fb76fe7920f7c1e0138270f64dd90315
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC.gz) = a1458c3d482f170ce26ff1b4ae12fcbe82206cd0
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC.gz) = 703f16ca7fb7cddbf33e84bf7859d73ad619464c859927767e6f3e292c63b7da65ed90d20a32cb7364f425c41aff05e0a08f7ba4e7bcfaa04804f4389425d402
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC.gz) = 5a542bbb7c45f6940f5c9a63deba729d2d6e8b75
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC.gz) = 28729a3aab91b7b81a0bb5af1378c67c
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC3X.gz) = 50f6f8937a0b18960660908aea8a5cd490175077
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC3X.gz) = 2798612a5e0d6d60f80dded7a22bdd6c1f5a64709b65fa33bfe8dfa873c38da0269b0a080185efe2025b5682ba9fd18bb3063a1133f8227cdc41acb03fc4bc2c
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC3X.gz) = ecd36a3bb10a07cb7dacfd2a8add6b4e51eddcf1
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-GENERIC3X.gz) = 63a3954b02444ee35ebdfc8a280c6eb8
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL.gz) = 2da156899061f57aabfe77a55081e1281cc46107
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL.gz) = a316b1fb791d3df671cf366c911756cd9e87735247eda75372d73075bd8ec8bfae4aba620740f86cfe8011ffe0614777d480d4979ca021912702ce5699865244
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL.gz) = 51a1809d8ddf6701d556d858a18416a72afb0f37
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL.gz) = b4a756c7502efd5883243e26139d206a
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL3X.gz) = 78f041430b2aafc6768aef55603c4427f90c44ed
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL3X.gz) = be3a7f26745d4693d2393f0ee044871dca2ec554f8897b7ec54bba85ff3cd75143a548fa0880bb76810d2811018c9c3b5e8cc44fbe163588b82c0344a2f0cf81
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL3X.gz) = 9d21135a1448a6fdc1fa052c56434cf809e43046
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-INSTALL3X.gz) = 0ff6857605eea16d5d90a85b77335229
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.gz) = 6f90c82aa6150d861190e41dca228549cedcc458
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.gz) = e4e4f5901d286b164f9e4b471f6084a6ba879c91b21b4e86f44650ccf0447698a11f33008d75cb3e12673396094d91e2d715e24b596727cb97c125340fa82abe
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.gz) = 13e4983150a8508d64c022000d27b77c1e0da384
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK.gz) = 6ce2d84c334909c66b0d54b928fdcb2d
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.symbols.gz) = 6c31ae63d1149ae040b2f04fdcce0f41aa8095af
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.symbols.gz) = f986b22aef0685dbb454c95d9f0f6b7379a15b365f56f3a13e1357b8b2bf7fb787b09eb4b474d06dd78e6869152e6493177f911929f972a819f688af90854d1e
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.symbols.gz) = 18640447fceaf27b7ebfd19917bf40521718c441
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.symbols.gz) = 639d60631052afddcfb58f64847964c8
-SHA1 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.gz) = 78efb67e8cb813af99a12a1c67c9238916bb1071
-SHA512 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.gz) = ef27cfba56aff6b13544132e71513598e68e488cb27b7038442279eaec9d6a715cf9196ce98d93acfc4a7e89cb679e5ce787f7c4b14a661a2113b1a987861a9f
-RMD160 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.gz) = 556c68e9415f0795d58c4f8c491eed75755a59fa
-MD5 (NetBSD-6.0/sun3/binary/kernel/netbsd-RAMDISK3X.gz) = ff2a3fad6f6dd6504713e5874b3eb8cb
-SHA1 (NetBSD-6.0/sun3/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/sun3/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/sun3/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/sun3/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/sun3/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/sun3/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/sun3/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/sun3/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/sun3/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/sun3/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/sun3/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/sun3/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/sun3/binary/sets/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/sun3/binary/sets/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/sun3/binary/sets/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/sun3/binary/sets/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/sun3/binary/sets/xetc.tgz) = d2ca34bd668e108cbbfd4b45720823663339f8bd
-SHA512 (NetBSD-6.0/sun3/binary/sets/xetc.tgz) = 431ca465f300e7eb5d4dbd44c43e412a296fb4d3129217e752f86a720e8a8bdf736c9add05a45518a4f3e6cffa32381ef61e9186d360b68a5f8c64d87e385fb5
-RMD160 (NetBSD-6.0/sun3/binary/sets/xetc.tgz) = 4c5d664679856b02b694534cd6afdf20597e6d53
-MD5 (NetBSD-6.0/sun3/binary/sets/xetc.tgz) = 72bd67556ac14ea0ce147374af0ba624
-SHA1 (NetBSD-6.0/sun3/binary/sets/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/sun3/binary/sets/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/sun3/binary/sets/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/sun3/binary/sets/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS.tgz) = 00b387b99dc84b6128941ae2b849feb76c7f88c8
-SHA512 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS.tgz) = 0b2cf325d14f69c5905bd6d832adfdc806bec302780811c6ad50ecbb646de07d1e91dd0cf16873b0128a44688f9e810d83ae7c6a4415b8393ea0567fe77d5f32
-RMD160 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS.tgz) = 71913a5ec9bab31e74ff27ab154715fd84b34a96
-MD5 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS.tgz) = 6988897d69e304577b9f493c44425ddb
-SHA1 (NetBSD-6.0/sun3/binary/sets/base.tgz) = 43ba28352421316629ca0c4a93709af5e5b588cd
-SHA512 (NetBSD-6.0/sun3/binary/sets/base.tgz) = 1b0efd643066d4cc5d689a64ba97092091ac8b94ac5244ca7955b27aa6ce60eaec0f020390d9ed60c00f894312fce76d1ca0555ac4626a4c5c140beb57b97ba4
-RMD160 (NetBSD-6.0/sun3/binary/sets/base.tgz) = 46456971e8d821c310f3ac304fcda320396916be
-MD5 (NetBSD-6.0/sun3/binary/sets/base.tgz) = ed8d7947e7e5282728b94a7fbae41ea3
-SHA1 (NetBSD-6.0/sun3/binary/sets/comp.tgz) = 960167513f2de6e53e0512ba9d8a8fa891d7f096
-SHA512 (NetBSD-6.0/sun3/binary/sets/comp.tgz) = a6d2d94ad9a752263254736253c7be190d2baa69140ca1e40c06719dfb89dd5660fa83c72392b2c5b30c0caee058cb049029b8414fdd48017fba2615781dc08b
-RMD160 (NetBSD-6.0/sun3/binary/sets/comp.tgz) = 9d995295dc5806397c31541ccd589210c0f675b2
-MD5 (NetBSD-6.0/sun3/binary/sets/comp.tgz) = 3f277a5219ca41a91776606698660e31
-SHA1 (NetBSD-6.0/sun3/binary/sets/etc.tgz) = be0c7f05a0122f7fa7e2bf1cf643080c5b434c1b
-SHA512 (NetBSD-6.0/sun3/binary/sets/etc.tgz) = 64d9a05110471e97c99c53479a14ba17dedd7c42f1471e26e2b8e73770d94a27b77ca12ab6cc014f8c131fb6757a26a565d4b8c71e78cab8dbbd21608fa76c33
-RMD160 (NetBSD-6.0/sun3/binary/sets/etc.tgz) = c4c29b032978e5a6f803c353d4d5b5ab4c58985d
-MD5 (NetBSD-6.0/sun3/binary/sets/etc.tgz) = 68851b8898496b07817e828fee991233
-SHA1 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS3X.tgz) = a63f54a0db8362478ef1f3fbbc18060e3834723a
-SHA512 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS3X.tgz) = 5ff8b7a463fc5e0edd17f47d2c59a01f9c53f23db8e73ba7bb0e67c73cd84d2688a22aa8e6b56bdccc29a0056fafeb6c984ea6a34a01e454a93d62eb2c54b623
-RMD160 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS3X.tgz) = 6ff482b8e336432022ac05a24c376d746fe7f8e8
-MD5 (NetBSD-6.0/sun3/binary/sets/kern-DISKLESS3X.tgz) = 1f49b690f568492ba1d2ff5cfd76ec6c
-SHA1 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC.tgz) = 9eb75c58a99f7b046dab7888235bf8162b10834c
-SHA512 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC.tgz) = 9cdcf4835398df2124cc418b977f1cdffaa87d4edaff2c61ded06b44cbd5aa656743e74abd4b5ccd5f7232e0890f4786523d4438feed288bf77df1482fbbb9fd
-RMD160 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC.tgz) = 8a50ed11d968a35170c50ddfcd51c3cfeaa7dfc0
-MD5 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC.tgz) = 510f2e6a9de0cd18e8dfc6cce74964d2
-SHA1 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC3X.tgz) = fc31315a9d236278dc8b6dda1e1385680e35eb4c
-SHA512 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC3X.tgz) = 9de034f2f6ee9cf0c65ba4fc41bf7147205c9918263131957d8555c7d54997d98dead2108ec2fac89805d371e673bd66abb93715b61f3c7a71c9db8caf761c40
-RMD160 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC3X.tgz) = d1b03f8e7188324e362e4fbd7764d4218a3a98d4
-MD5 (NetBSD-6.0/sun3/binary/sets/kern-GENERIC3X.tgz) = b8b84407a1e0d4e215a494aee08eafa8
-SHA1 (NetBSD-6.0/sun3/binary/sets/modules.tgz) = 7c6df8904730e2b7d3ea7e98d3a88ee7450e937c
-SHA512 (NetBSD-6.0/sun3/binary/sets/modules.tgz) = 95d55d7951896249f4b1b3c38ba80c75c415ffee77e3294f40f8680756cb1cd5b5c2b74740ccd66f218474f220f9603feb81bf9e6d72fa130a9ec3c595abba63
-RMD160 (NetBSD-6.0/sun3/binary/sets/modules.tgz) = 485905b274e58b342035d5485507e7c018ee62f0
-MD5 (NetBSD-6.0/sun3/binary/sets/modules.tgz) = 5350f1aec24cf27edd1c4d50c916ba33
-SHA1 (NetBSD-6.0/sun3/binary/sets/tests.tgz) = b76bdb5e8311a0fe1f22aab836007d5cbaf92618
-SHA512 (NetBSD-6.0/sun3/binary/sets/tests.tgz) = 475835a862280be0709e09a8ea5eb132d8c068c63df12dcc925ff3268250afbde228b593f66061d2b946dabc19eeebbb1a4fd313a751c4e5fd8a63ba63f2fdc4
-RMD160 (NetBSD-6.0/sun3/binary/sets/tests.tgz) = 58e77c597950e782b3c75967d864ebbc961ffede
-MD5 (NetBSD-6.0/sun3/binary/sets/tests.tgz) = 729752bb47500babd316c4776ba02e80
-SHA1 (NetBSD-6.0/sun3/binary/sets/text.tgz) = edf2e1f8352a2c45287ecff9c473da4673473a6f
-SHA512 (NetBSD-6.0/sun3/binary/sets/text.tgz) = 2098084f46640c2f45b0fb916a2123eacc2e390faaa04e3a8ea99d93f41c4ca5ba77d4192805b13a053ad8262aecccc2228448c9f048c03c96ca51869f342ebd
-RMD160 (NetBSD-6.0/sun3/binary/sets/text.tgz) = 1adc9b33d9aec637e1f8e7888f07076d500b2ea6
-MD5 (NetBSD-6.0/sun3/binary/sets/text.tgz) = 60c2eabb16dd9df538a98153e2dc7dc7
-SHA1 (NetBSD-6.0/sun3/binary/sets/xbase.tgz) = 404b75757bcc91b281fbd5ec9b9333e6c106579d
-SHA512 (NetBSD-6.0/sun3/binary/sets/xbase.tgz) = 0f1604049c7e1caac48d610304a1490d2e55dcf3f6a325139eaa57a38211836c479b1dc070cc3b8b0afcdddac7a84b679d96330f65f86015a80b7800fdca633e
-RMD160 (NetBSD-6.0/sun3/binary/sets/xbase.tgz) = b1e258608f09cd175c9e15844371daff5fe0f027
-MD5 (NetBSD-6.0/sun3/binary/sets/xbase.tgz) = a7ecfb2c66b224ecf2460fe5c6715f0b
-SHA1 (NetBSD-6.0/sun3/binary/sets/xserver.tgz) = 88091f11f474465d1a996569643d6e22cf08f717
-SHA512 (NetBSD-6.0/sun3/binary/sets/xserver.tgz) = 36de7d4b8be72d53d5f90a144d278359da55008917d2747419d3347d53989e9ceca6230fb2596d4ce6257d1bc9f171c6b9a8e738af86930adc8535e726a8e356
-RMD160 (NetBSD-6.0/sun3/binary/sets/xserver.tgz) = e161f48499d8f1ca64b22d65365704f65344875a
-MD5 (NetBSD-6.0/sun3/binary/sets/xserver.tgz) = 6ed6442ab169c491e991c8074512bb48
-SHA1 (NetBSD-6.0/sun3/installation/miniroot/miniroot.fs.gz) = 8b01f52ec164477fb5ec72725d941e3330c7da94
-SHA512 (NetBSD-6.0/sun3/installation/miniroot/miniroot.fs.gz) = fb6995a81aeb2f9fb89e096290cf0921e92b1b2be0adaf95dd2b62c89bbd047b0879231d4e5805a68bd023026ce563bf6f0fc3214ecfabc449650dee9790385f
-RMD160 (NetBSD-6.0/sun3/installation/miniroot/miniroot.fs.gz) = 54d3f3d3782536c89d2b6bbf6abb793617c83925
-MD5 (NetBSD-6.0/sun3/installation/miniroot/miniroot.fs.gz) = f9994dd6a5b9837915a4ff01a7c9baa2
-SHA1 (NetBSD-6.0/sun3/installation/netboot/netboot) = 88a9ccc7444c4692483705ef90da4af422b33497
-SHA512 (NetBSD-6.0/sun3/installation/netboot/netboot) = f0810823fbe7335cc83516a71bdf4d5ab281fc2fb71309d76cb979e741af00d81b55e4b298af07e4932ec8e70a79518ace9af7ebc3b5d8a3328555785a8c2d2b
-RMD160 (NetBSD-6.0/sun3/installation/netboot/netboot) = 57b89f091bf51dfda7a3b1b3e92bdd0c7e96e958
-MD5 (NetBSD-6.0/sun3/installation/netboot/netboot) = 9041ee544a0625228cbbb93e06d2961f
-SHA1 (NetBSD-6.0/sun3/installation/tapeimage/MakeBootTape) = 2b66897333fbeba29a086477f6d25026b6d60e55
-SHA512 (NetBSD-6.0/sun3/installation/tapeimage/MakeBootTape) = db9307323e7dc0d394fb2b8e012c86df51109357851f2c5ee7894468d4e3b54465ca5015141621fd9d28aeb7a2eef0beac987fc7faeee223f9571ff4589d1036
-RMD160 (NetBSD-6.0/sun3/installation/tapeimage/MakeBootTape) = 986f20c8bab33006ea857b9f925b964ab43b9b03
-MD5 (NetBSD-6.0/sun3/installation/tapeimage/MakeBootTape) = 68ea84a134fa2781294912ca85d4b1ee
-SHA1 (NetBSD-6.0/sun3/installation/tapeimage/MakeInstTape) = a242866885b14ec2e624319b2fe1fc4f940a422f
-SHA512 (NetBSD-6.0/sun3/installation/tapeimage/MakeInstTape) = bd5950ce181ae973784c56bed18085fdfd6fd8b1a46d83564c798c130bc265f7a811cb896be8b9f8f78f014aa1a1d37e34b307a7f806ad8f7790ce2308856b61
-RMD160 (NetBSD-6.0/sun3/installation/tapeimage/MakeInstTape) = cb0330a75c5b5fa600e3789d81ff75f1c1d81078
-MD5 (NetBSD-6.0/sun3/installation/tapeimage/MakeInstTape) = fdc38b08d909159925b6a4efca11a498
-SHA1 (NetBSD-6.0/sun3/installation/tapeimage/tapeboot) = 276be9760458783489c93cea994dc73289ace945
-SHA512 (NetBSD-6.0/sun3/installation/tapeimage/tapeboot) = 7d6f1a348f99e42960f1697105d2771228a921860b0bd78624e96efcd9dde839412511e414f824ea78f4d5c938141c96d896acb3af426fbb393bbc69825c6c57
-RMD160 (NetBSD-6.0/sun3/installation/tapeimage/tapeboot) = 585b74fc55271ea82d4c2e3a38cd3bd7fc9cebd4
-MD5 (NetBSD-6.0/sun3/installation/tapeimage/tapeboot) = 6e786930e4f263c8fd65c0684b10f17f
-SHA1 (NetBSD-6.0/sun3/INSTALL.html) = e1f85d7f20325efe213999b96d606094b64a2c3e
-SHA512 (NetBSD-6.0/sun3/INSTALL.html) = 571b45b18a5fa33d705470440bfc49b38b19f5625aa26b79241f27232a4e902c1689e6acfa563d95204a6bc5a9955565fdd915673db770f739003c8838a7b680
-RMD160 (NetBSD-6.0/sun3/INSTALL.html) = 10984fb54cdde46e9dfe3567fff0a41e2f2fddfa
-MD5 (NetBSD-6.0/sun3/INSTALL.html) = b221aa68f0c0063c7d4ceb493971636b
-SHA1 (NetBSD-6.0/sun3/INSTALL.more) = 3f54bfd9cb004fe817d400878e005dd81f1d2850
-SHA512 (NetBSD-6.0/sun3/INSTALL.more) = 6b56e0d51f7423f74aa64a269fe9a0787b0a71d54f8582242d874066df05cc6bb4840ff6d3fd2817f4919b707ff621ca00a77f32938ece1dada70d8a3e6eedef
-RMD160 (NetBSD-6.0/sun3/INSTALL.more) = 40aec024ba64af07553ff888f3140e1e6793ac68
-MD5 (NetBSD-6.0/sun3/INSTALL.more) = 9c67417a5a30c173b09f1a8b518032d1
-SHA1 (NetBSD-6.0/sun3/INSTALL.ps) = b83169ce92b3dc6bd83a1ca5e858120f8b91db45
-SHA512 (NetBSD-6.0/sun3/INSTALL.ps) = 546cc770038d3194ca5dfab82113644f6b4fbb5930b9560c14550234858d0bb0edc7fe1fe24d44413042dc7f2c64dc5e4002f3fb60b9893c76f0b80dbe02ae02
-RMD160 (NetBSD-6.0/sun3/INSTALL.ps) = 1110e213ad092c715e1c5314d9c11d4e4d0cd977
-MD5 (NetBSD-6.0/sun3/INSTALL.ps) = 848bd14e183958c567bdde20345d9b7b
-SHA1 (NetBSD-6.0/sun3/INSTALL.txt) = f37f80d7db1daf78f66d91f7f76ac9caecc69d65
-SHA512 (NetBSD-6.0/sun3/INSTALL.txt) = aaa6abd3508681ed137796f3f64187fe0e9c7ec26f0d0f81ae73a4e2853ef5aa6b70e861ba69fad5ab51d62f1b09440a0f3f033ef2443a8b12ffc2129e5efdb1
-RMD160 (NetBSD-6.0/sun3/INSTALL.txt) = dfcd996574e4d266e95640301662f4928e3a343b
-MD5 (NetBSD-6.0/sun3/INSTALL.txt) = 194d8eac56ca75bff60e3d8c6e003ab1
-SHA1 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.MP.gz) = 71d44bf3bd2a39ac207a085a22a8310014e4b062
-SHA512 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.MP.gz) = 875f45349bf522e4f63d8f1261433b3e109df5ce7c3ee1edd13e2d4526616b7863507dc305d954300308a4c650b9fa12168219d0deb6622b517442b34e10bcfa
-RMD160 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.MP.gz) = 357c54bfe13253c5fec2c4ca6cd18909b6a3a6a4
-MD5 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.MP.gz) = 5aa951b5c5cb5592f950fa3882b2f60f
-SHA1 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.gz) = 9b77cf6513c4cf4fdb0081400a46c34a1c0cf04b
-SHA512 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.gz) = ff9d18b6c5d3bcd7bf4ea6e341e77180a7c68b034c61e02dc3d540389e9690faf7a157587847b3f1c25199cee097178b0b658118daddd136aa5f5856dcec1c38
-RMD160 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.gz) = 2ed49d64a3f42845c08a8ae30d45569492895cc3
-MD5 (NetBSD-6.0/vax/binary/kernel/netbsd-GENERIC.gz) = 26548ca549cfa4f7c9be70e52a981d69
-SHA1 (NetBSD-6.0/vax/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/vax/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/vax/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/vax/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.MP.tgz) = d4cac92dc06ec7b3c4ec9ca0d60dd1ace1814e50
-SHA512 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.MP.tgz) = 3b10e201e963285a8c3d9319e818510701756a3c33003a5536d273e886cc0b3c02ffe10e762d5d7b4aee2d0098d3600396afc2baafea64cc268fa032203a46f9
-RMD160 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.MP.tgz) = d9b4a6a9c85abeee0178536cd1b5c4f0322067a4
-MD5 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.MP.tgz) = 15126f47c08adefe93c7261b6eeeddec
-SHA1 (NetBSD-6.0/vax/binary/sets/base.tgz) = 9b83f88ab7d06a112cfff79b6657912bddb77987
-SHA512 (NetBSD-6.0/vax/binary/sets/base.tgz) = de7c42524163a5d9de7fda440cd2523834d5c46e4e992724a4a7af5e0768e5b105909e9a60e603b2a942cade3795cf4cc2bb22c7627453eda92bf662da83a16a
-RMD160 (NetBSD-6.0/vax/binary/sets/base.tgz) = 3059d6e4a7d54ebc9c529f90719ca561ebbe8036
-MD5 (NetBSD-6.0/vax/binary/sets/base.tgz) = d06066c8a452b8a7831de680a420ea4c
-SHA1 (NetBSD-6.0/vax/binary/sets/comp.tgz) = 3ad25c223276936b26916121fe8341524e2e51a6
-SHA512 (NetBSD-6.0/vax/binary/sets/comp.tgz) = 852dc3d7a01fc8e11e66723930d90e7141d974b976d8f7986f068fb5202dad396ef2762400c1e9e02b0d6c5a087435a56f65e502079eec9d9e86c24cf81782bb
-RMD160 (NetBSD-6.0/vax/binary/sets/comp.tgz) = a4e74e817807d4d79a43ac450109b14474fda740
-MD5 (NetBSD-6.0/vax/binary/sets/comp.tgz) = cf51957de39d3a72c7dda2633d39e705
-SHA1 (NetBSD-6.0/vax/binary/sets/etc.tgz) = 21f4ff8b449498081fd6dde92b43eaca86d886ef
-SHA512 (NetBSD-6.0/vax/binary/sets/etc.tgz) = c6e43ea57dd0b53f9e0a995aa872d9f7f1d8852fbe7105e125116f577d0ce2acb1e8deddc6a8dcb51e272a982cf549706b23bb26b0acedad416ceef8910a6461
-RMD160 (NetBSD-6.0/vax/binary/sets/etc.tgz) = dd7a5f74812906801bf474d265a4846f069c00ef
-MD5 (NetBSD-6.0/vax/binary/sets/etc.tgz) = fbb2c18ea3be98a3624f54b834399ee9
-SHA1 (NetBSD-6.0/vax/binary/sets/games.tgz) = cd79679fa36349431355dcd14b8a058476f20086
-SHA512 (NetBSD-6.0/vax/binary/sets/games.tgz) = f68c931765849554222cc439d5761411d36e8e95b4331d15525e73f77b31249c220b9de4c2061f5e35207e75e27d5d6ade99a7eadf2baf54fc8eeb16ac243dbe
-RMD160 (NetBSD-6.0/vax/binary/sets/games.tgz) = 7da1dd4ece7e9062635f7b0766af245e2624c032
-MD5 (NetBSD-6.0/vax/binary/sets/games.tgz) = 995e32bef1b920f33c5d7eb946441682
-SHA1 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.tgz) = 6e61cfb380e7cf45e2094ef64d26d44ee33fd086
-SHA512 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.tgz) = 0d35a882e1e98796099bedc0157fc30978b2e43ef0627be603036259069dc13503fee5dd57b2e9da74dd5c2cb1bb823f4bf91d98259d84b993977bae05d8c10c
-RMD160 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.tgz) = 3e2f321e7934e6597ea83627934e88d2214baad3
-MD5 (NetBSD-6.0/vax/binary/sets/kern-GENERIC.tgz) = 2efb4b8d6a76ebb59f4ce1171e1502db
-SHA1 (NetBSD-6.0/vax/binary/sets/man.tgz) = 9c2da95fb72f9fd1eaa8f7baf5fe45496c8b4615
-SHA512 (NetBSD-6.0/vax/binary/sets/man.tgz) = 1a158e92b8414d92745a06fe1c721047e87fd768d7158e078c3a17de1d2634463f8f6b022a001f5f9010e14f0eedf6d5a94e4b73b4dd0ed9ac4576abbf2aeaf4
-RMD160 (NetBSD-6.0/vax/binary/sets/man.tgz) = d2485fd19bffbc6103f8aa7521e52c8f652fafa2
-MD5 (NetBSD-6.0/vax/binary/sets/man.tgz) = 83e81f5c82acdf7ee76ef5854eca3f5b
-SHA1 (NetBSD-6.0/vax/binary/sets/modules.tgz) = 4e60e0177f0e5d6e42ee875a7c30cc612c22ca64
-SHA512 (NetBSD-6.0/vax/binary/sets/modules.tgz) = 0e5926279b9534cb9bd34ff0c4d49fa4cd467966829d080ec8ab739039536f42173c2ec91aea40ca37d94625a5b395c3f55ce7936f963bd8d970d1a81fcff8af
-RMD160 (NetBSD-6.0/vax/binary/sets/modules.tgz) = 54b0d690b929b4df06adc044864e76d47f09c844
-MD5 (NetBSD-6.0/vax/binary/sets/modules.tgz) = aa18ce8768d9fd88206d465fd1ae155d
-SHA1 (NetBSD-6.0/vax/binary/sets/tests.tgz) = ec975a37d490f45fb9e7f0f30f0ec46fc0038531
-SHA512 (NetBSD-6.0/vax/binary/sets/tests.tgz) = 33b8686c97da76e031a9678103ba99a83cc4189545b4020241a83084585f0eb200c0cb44634e578c8882cd849f80151383a54511c80d1a35964a3567f8e6b314
-RMD160 (NetBSD-6.0/vax/binary/sets/tests.tgz) = c27fcdf838dfc43c1527fde3fba2735065a5d12c
-MD5 (NetBSD-6.0/vax/binary/sets/tests.tgz) = 3789eac68014743577dfe22503dd98a5
-SHA1 (NetBSD-6.0/vax/binary/sets/text.tgz) = c7dcf12545842d5563887c983d694fa569d25ab3
-SHA512 (NetBSD-6.0/vax/binary/sets/text.tgz) = 50a7ad69dc23c0d178a3f835e9bed7305cbe432a92cf947e64e28316ac94ddd7def90e91c53515d0cd3ac26c5df23d3f60932ba688ab04525d635555b6078a6a
-RMD160 (NetBSD-6.0/vax/binary/sets/text.tgz) = 24ae1e1016b492c3dd575099936598d00d8ac6fa
-MD5 (NetBSD-6.0/vax/binary/sets/text.tgz) = 99863a74757bc9677befe8c6ef049685
-SHA1 (NetBSD-6.0/vax/binary/sets/xbase.tgz) = 35f6a1b09f246736f7c1c6049831ca0704fe53d1
-SHA512 (NetBSD-6.0/vax/binary/sets/xbase.tgz) = d2d0b6a5702e4a87e4823ce7478f5c8f1527045d96040680960e3d96f98f64e40ac7263ad2ca4c4272d4d253fcb41b7e296a9d27f9ffa7dc03be6c437835878e
-RMD160 (NetBSD-6.0/vax/binary/sets/xbase.tgz) = e2455fc04171cd3aef8662a36820552811c7657b
-MD5 (NetBSD-6.0/vax/binary/sets/xbase.tgz) = ec8b6356f82d4ccb90e93dd78e5c741f
-SHA1 (NetBSD-6.0/vax/binary/sets/xcomp.tgz) = ebadf7653d6173ccc73d1228338a4df09eb7dce2
-SHA512 (NetBSD-6.0/vax/binary/sets/xcomp.tgz) = a4c4cfaaea473e617870a92bfce40fbc2e34413f31ec2159554031c4312dc1e605079a9e0fd3774967bba9cc27bf9efc97899f09959bd401726ceeeec7006790
-RMD160 (NetBSD-6.0/vax/binary/sets/xcomp.tgz) = e6d1591328fcc0af7336d22a5426f72c8343ad49
-MD5 (NetBSD-6.0/vax/binary/sets/xcomp.tgz) = 1cc0fa0971f06c2bd9e296db9d6d6fa5
-SHA1 (NetBSD-6.0/vax/binary/sets/xetc.tgz) = 2c85388aa75c419cc5651c053b00710471a87350
-SHA512 (NetBSD-6.0/vax/binary/sets/xetc.tgz) = 38c9f1abf9d6ff828c361a2c58690f70a7d707aa739f7ded9f256b414e7b78c11ff4f915a59f99884afd5ef0b874c1c1b70aa438f6bdff07e354d67d2257bf72
-RMD160 (NetBSD-6.0/vax/binary/sets/xetc.tgz) = b1186ef0c975fa76d8d4d0c62e24ae86cb3d433c
-MD5 (NetBSD-6.0/vax/binary/sets/xetc.tgz) = 46ca22a86d8052c1044717eb907d7874
-SHA1 (NetBSD-6.0/vax/binary/sets/xfont.tgz) = e9a33e8d99378b3944fc21aa983c02707831f0bf
-SHA512 (NetBSD-6.0/vax/binary/sets/xfont.tgz) = 3d09f4edf49bfa98c7817cdb1b91aa4ec902dc87c1765e9a92f143bf4918a60e011fe614a70d9dd926ca2a019a33e5f0dc2d7198205f2273e755049dd8d5a2a1
-RMD160 (NetBSD-6.0/vax/binary/sets/xfont.tgz) = 9ae96f8628d6a35053f093acee972bdd8b6722cd
-MD5 (NetBSD-6.0/vax/binary/sets/xfont.tgz) = 6e95a6fd030425bb19f0505b9308d20d
-SHA1 (NetBSD-6.0/vax/binary/sets/xserver.tgz) = aa6c021940fae979a4a3a3cd01a138808c49621d
-SHA512 (NetBSD-6.0/vax/binary/sets/xserver.tgz) = 540455f89e8dfe7d376322ab95288e96e54aa0531aab7cb96e0b1354f85ef64778cbf265bfc2fca7827879a286d80b15f9e973d62594e5bf02df4b0add15be0c
-RMD160 (NetBSD-6.0/vax/binary/sets/xserver.tgz) = 84dee738690e4487d7f28cba1d3f61ab9eb12240
-MD5 (NetBSD-6.0/vax/binary/sets/xserver.tgz) = e2df86b6bfa5259e72d02f40de72491b
-SHA1 (NetBSD-6.0/vax/installation/bootfs/boot.fs) = c4d1340eb7d2ea1d555a46fcf2071fa2f091d1d1
-SHA512 (NetBSD-6.0/vax/installation/bootfs/boot.fs) = 155e7faaf14e619309c3ca8cc163e08d6bd3cac41b4d38dc5dc4cd4736e99003a2b6a6d0ffb6cb698772f43d31f577732b9933a71fb1f6315af16dfae34d4f66
-RMD160 (NetBSD-6.0/vax/installation/bootfs/boot.fs) = 52a2200dbef9e624d7ca91eb6d2110599b8010b1
-MD5 (NetBSD-6.0/vax/installation/bootfs/boot.fs) = f02d1ee9291b0dd37f0dc75d0a27ad10
-SHA1 (NetBSD-6.0/vax/installation/miniroot/miniroot.fs.gz) = 5aed885a0dde234caed611cca0f474dc6cf8461b
-SHA512 (NetBSD-6.0/vax/installation/miniroot/miniroot.fs.gz) = 3d647213e86ccb976107853ab81ec82d339d2cc7c7bda4cc0c416f55e521c7a43a73523c7f9ff6e590531f019badcd414f1bdab4c95db0806a606065c6803ef4
-RMD160 (NetBSD-6.0/vax/installation/miniroot/miniroot.fs.gz) = 6ddb63ee115a7b4a78546092ac7b8cee7c056921
-MD5 (NetBSD-6.0/vax/installation/miniroot/miniroot.fs.gz) = 0f860ac5f201e72f4b22392027b25117
-SHA1 (NetBSD-6.0/vax/installation/netboot/install.ram.gz) = 8f48dc649fe71a6f861a9f96e2b63679971b762c
-SHA512 (NetBSD-6.0/vax/installation/netboot/install.ram.gz) = 857920e536fe08897d7e20c62c74a5606ea791d97111740222c8998ee4a1a9ae05f52ac27b5580d5f78a70f75d5a9ea9446802a85297a13411b98ebe8a84a3e1
-RMD160 (NetBSD-6.0/vax/installation/netboot/install.ram.gz) = 9c94e2d64328f88eb7157d6a47e5aec15b1da2a3
-MD5 (NetBSD-6.0/vax/installation/netboot/install.ram.gz) = 23d3d0b714186b3e2e7b70d5f0a1ce21
-SHA1 (NetBSD-6.0/vax/installation/netboot/boot) = 738e9f280ab9874a2eb21af8627d70e2abd2ba0c
-SHA512 (NetBSD-6.0/vax/installation/netboot/boot) = 934496142a69c247ce8b96ea6de19e0cbe0d9e4e8a1ae1043f4d60926c6b3deb30132f3bdc346b3422f1fea02da3a3feaf900d64a9759d265b33fe81ab3da070
-RMD160 (NetBSD-6.0/vax/installation/netboot/boot) = 8a60febc408768e89ebb1a834bffaa06a72d3503
-MD5 (NetBSD-6.0/vax/installation/netboot/boot) = f238dc1fafca2d7f1a83a22b6cb31091
-SHA1 (NetBSD-6.0/vax/installation/netboot/install.ram.symbols.gz) = 6b57f7a857c24539639cce3ed41ed5de16ec233b
-SHA512 (NetBSD-6.0/vax/installation/netboot/install.ram.symbols.gz) = e9ac802e948631231eda425e5bab76bf14bc59462613eb6c1025708d67f54c67e9b928cbf33253473605c6239842667eba5e58240d6cb53afc5c80c8546357f5
-RMD160 (NetBSD-6.0/vax/installation/netboot/install.ram.symbols.gz) = 5a6ea2a19caafd034e75e9440d1e139d1af3ef0c
-MD5 (NetBSD-6.0/vax/installation/netboot/install.ram.symbols.gz) = 712856f65322faccd1b116c548d40196
-SHA1 (NetBSD-6.0/vax/INSTALL.html) = 8d850ffd9374c9bdc63e37fa14dc63eda02a93fe
-SHA512 (NetBSD-6.0/vax/INSTALL.html) = 3c93355dbfd0cbad25eb74c8497975855706a20dafe8a1baa64d0b53801d5e02d81a93c3347c52950fdd424623cbb58c7a0aa58b7989e89116b157f9d18bef51
-RMD160 (NetBSD-6.0/vax/INSTALL.html) = 42d4d65000e12d8f2cbe30f6743d84d7a040bb05
-MD5 (NetBSD-6.0/vax/INSTALL.html) = bbad6392f6badb4a1d0ee2977b9df90c
-SHA1 (NetBSD-6.0/vax/INSTALL.more) = 624b96b802364eb833ca077dc706d75b5f68f336
-SHA512 (NetBSD-6.0/vax/INSTALL.more) = 300954b8c1f3c47a1a45d773f8c7bad3c12dbc292485b7a7206289f56584ce12befa89b8d315511c3e3f7c407de9ca068fbdaae9d75c52dff72a8f8a9b5e4a55
-RMD160 (NetBSD-6.0/vax/INSTALL.more) = ab1b5238e9eb5ad1c937c75901199023c08d2434
-MD5 (NetBSD-6.0/vax/INSTALL.more) = e634a224d0d67c5cc1c7dffd98156b79
-SHA1 (NetBSD-6.0/vax/INSTALL.ps) = 57710ab0d4450b0692b07eb812c9c7e6d70a49d5
-SHA512 (NetBSD-6.0/vax/INSTALL.ps) = 0afac140d664edbb10a41c6dd646c797b78e37c1d36aa4804653fbef64171ddf9688d7220755553ff4add8891bd97f083bde4b03c93fe579f1e9d030c83f3d07
-RMD160 (NetBSD-6.0/vax/INSTALL.ps) = e84f468d6f328faa9889cf2ad76cab5846c45da0
-MD5 (NetBSD-6.0/vax/INSTALL.ps) = 51b9a2a1046494b2443503636fa223da
-SHA1 (NetBSD-6.0/vax/INSTALL.txt) = 0a4b816342615d9a4e60cbc99bfea81afe41d0f1
-SHA512 (NetBSD-6.0/vax/INSTALL.txt) = b1853a3be6cd17449c4e5539945812b9ba87e02e07877dfe791e04c3db39ed1577e795d7d5e3b1048fc60eca5694592bb5671982c24aaa1f78e3783ede603ded
-RMD160 (NetBSD-6.0/vax/INSTALL.txt) = f774566773432a691acf285d569dabcf5037ecfb
-MD5 (NetBSD-6.0/vax/INSTALL.txt) = 43a9353717d9309c11fb5f4a9685942d
-SHA1 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 0e3d568ade336cd6e538d567ea11a965d49588cf
-SHA512 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 721a7e1ec94d9a37f37eb30b96d66b19d387090964ee93233de36771e4d106e72cdbeb4b0b17f8d490d9f64484b8a511526841c511b2d33624bd626b4388b623
-RMD160 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.symbols.gz) = 176ba2b94555c5bda82260a075ba295021d61e8a
-MD5 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.symbols.gz) = aa03bcea1e574f24c1ef0eeb364f1c8d
-SHA1 (NetBSD-6.0/x68k/binary/kernel/netbsd-GENERIC.gz) = 9a7796c7abf7b4828ee7eb7125b73f5ccd25e2db
-SHA512 (NetBSD-6.0/x68k/binary/kernel/netbsd-GENERIC.gz) = 58c7f85cf73d90a04c42c502a3dedd779d9f5013a58f0df8a279cf559dedb80b6bdf2a22804284fa58a7df9c1ba8a8f0454d3f76a43787a7372afb58d5d734b3
-RMD160 (NetBSD-6.0/x68k/binary/kernel/netbsd-GENERIC.gz) = efce8e9537f895492b5becab7878dec07fafe7c1
-MD5 (NetBSD-6.0/x68k/binary/kernel/netbsd-GENERIC.gz) = adf275bc0aec4a8ba50661637b7707e5
-SHA1 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.gz) = e5fee2392b742d34a50bd2236dc4ba26acdd57e2
-SHA512 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.gz) = 6aa21ef102224a5194fd6709b70a47788e073ad0d325dbe3b982a19a24c67b421acb003496ddf42804785b0dae9bb32dccde617e7d6d9185511205ab390cdcb3
-RMD160 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.gz) = 7251ea070e26aa877c85b9eabffd62cd6ee4b04c
-MD5 (NetBSD-6.0/x68k/binary/kernel/netbsd-INSTALL.gz) = e5e8b74d980cbbbc0324cab3da12af0b
-SHA1 (NetBSD-6.0/x68k/binary/sets/games.tgz) = 16ee93ea4d5fac2fb28fad5c32c8a3d57d011d79
-SHA512 (NetBSD-6.0/x68k/binary/sets/games.tgz) = a7f49ab72f50273f66c8dcf408b57ec4668debd5537c5bd0ec59aa0f4fa1d599ba0798d1b283315c4208cbcb608925808ce003b1ade79034886edb8208f9f48d
-RMD160 (NetBSD-6.0/x68k/binary/sets/games.tgz) = 1e09d99d7fe2e495763f05919472d27a4ba699df
-MD5 (NetBSD-6.0/x68k/binary/sets/games.tgz) = 8a26f3e864444209088bccf21419a616
-SHA1 (NetBSD-6.0/x68k/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/x68k/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/x68k/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/x68k/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/x68k/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/x68k/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/x68k/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/x68k/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/x68k/binary/sets/xcomp.tgz) = e13548b8974f5d55e98caf17b2b4bbbcf2430370
-SHA512 (NetBSD-6.0/x68k/binary/sets/xcomp.tgz) = e4b13c798df04ffef88e72100e2db5af400e5ae255cd7a1ca2907736b8138a59045b6f3bd8531b5753d0b87eadb1b5f801043a929bb25d1611e4be693c1da954
-RMD160 (NetBSD-6.0/x68k/binary/sets/xcomp.tgz) = 3b1f4e26ddd57e69afd9709553c1bf70d6e29ea0
-MD5 (NetBSD-6.0/x68k/binary/sets/xcomp.tgz) = 894bb9aa05b164d9923682165d708335
-SHA1 (NetBSD-6.0/x68k/binary/sets/xfont.tgz) = 24ca4cb77a59246b1b05e0a91fed21c63259d12b
-SHA512 (NetBSD-6.0/x68k/binary/sets/xfont.tgz) = 8dc297fb6205a995767e68e77cc21169234dfb66a86bbcd2e1828fd32efeda0a25c9f2a9b1a39b97fe8d7b24f8cd5cf6160859af6be2259876f39ee4e76c405b
-RMD160 (NetBSD-6.0/x68k/binary/sets/xfont.tgz) = d2f134959940e6667aca185f01e388c05dc6bc85
-MD5 (NetBSD-6.0/x68k/binary/sets/xfont.tgz) = 3c96c1f0a13cd7d277ca35622ac9c058
-SHA1 (NetBSD-6.0/x68k/binary/sets/kern-GENERIC.tgz) = 253e2e072ae66dd896be3d6d936c637bb96ef2c2
-SHA512 (NetBSD-6.0/x68k/binary/sets/kern-GENERIC.tgz) = e2b9221ffad2c150f1529243197e7672c58a41d865dcf02a7252c1bb1f0fdb644e8c6bc3250f16f2091748d2a009badd12c0cbda2ae2b186bbfa0b6302957293
-RMD160 (NetBSD-6.0/x68k/binary/sets/kern-GENERIC.tgz) = cd78ce4ed94bd540d9cfcf2d3a6d51fd83cbef95
-MD5 (NetBSD-6.0/x68k/binary/sets/kern-GENERIC.tgz) = a41a26a51d64ac00f3d0b1f5657a5400
-SHA1 (NetBSD-6.0/x68k/binary/sets/base.tgz) = 97339969786af5934c8db561afd33bf2fdd5cb77
-SHA512 (NetBSD-6.0/x68k/binary/sets/base.tgz) = a5cb607f828570f11ae3653032d442cc191339a00037cc6c37635c726fb2b06a9bf1d2dec7e71bfb824ac11810ff1ccbff55ec69659c66112b36fd28521a304c
-RMD160 (NetBSD-6.0/x68k/binary/sets/base.tgz) = f77783ac8537a39ac77014b7fd8860269a6aae0c
-MD5 (NetBSD-6.0/x68k/binary/sets/base.tgz) = 752b937da621346aaab5b18ac1fc9f3a
-SHA1 (NetBSD-6.0/x68k/binary/sets/comp.tgz) = 5b2f871bf928a68b7ffdf2b2f45e5ee80a8c83a0
-SHA512 (NetBSD-6.0/x68k/binary/sets/comp.tgz) = d037edaa7d8b4a275a39771f2f7ffd4dd46f68a3107af0ca88f9ce205370c756904c6c0bcb7f6138fabeaf0bfb504ce541253c9d6d2892675e7e308358045047
-RMD160 (NetBSD-6.0/x68k/binary/sets/comp.tgz) = b371813449f8d913bf22466d52a7a238522b8a5d
-MD5 (NetBSD-6.0/x68k/binary/sets/comp.tgz) = efab43faa3de48943a5ba3b96a07741d
-SHA1 (NetBSD-6.0/x68k/binary/sets/etc.tgz) = 52e6167471d4788f7f060166de8f23a31f731596
-SHA512 (NetBSD-6.0/x68k/binary/sets/etc.tgz) = ce530878bf230e22786bac9ce6075958eebb52c5119b760ebc183b8f7b2fa59297797768461a44f708b9ce993c21a96e0f49b207c79208e25eea93412889babc
-RMD160 (NetBSD-6.0/x68k/binary/sets/etc.tgz) = ad019f3b95e8cc9d3320909dee7dd91ff45a4da6
-MD5 (NetBSD-6.0/x68k/binary/sets/etc.tgz) = 9f179baf30026ced05db113a623006b9
-SHA1 (NetBSD-6.0/x68k/binary/sets/modules.tgz) = d52fa0ed8a899526add267f705735e9dcbb62a14
-SHA512 (NetBSD-6.0/x68k/binary/sets/modules.tgz) = af60d178109bc5330363f041d688e46e36e1894ca0320c7a1735f5de483349a38e63b316b297a5bbf7fb282c1f69539698f7704e759a27c1c833239ec775e371
-RMD160 (NetBSD-6.0/x68k/binary/sets/modules.tgz) = 5e3db9d5547a118143f5eac40b442cf27dce8a52
-MD5 (NetBSD-6.0/x68k/binary/sets/modules.tgz) = 18d52b98a32e1b37501fb2056be5d356
-SHA1 (NetBSD-6.0/x68k/binary/sets/tests.tgz) = 469b2b371980f0bd11407497ee2c104536867df3
-SHA512 (NetBSD-6.0/x68k/binary/sets/tests.tgz) = bfb64b49fd88386e2012b827d9af754bbc75a21e63650da66a8add45b54bfc700a3d22a3c6e98e8736309f1a1015f82c366e51ac6539556f1645b28d3d018ad5
-RMD160 (NetBSD-6.0/x68k/binary/sets/tests.tgz) = 8e674a86bd2551876719f842f61850d6505b290e
-MD5 (NetBSD-6.0/x68k/binary/sets/tests.tgz) = 5c524dfbbb575f61ff958baa317a4808
-SHA1 (NetBSD-6.0/x68k/binary/sets/text.tgz) = c8b514b008fdd482c7df7df5849c5bbcd04d289c
-SHA512 (NetBSD-6.0/x68k/binary/sets/text.tgz) = 37fe61c52eaa54e8de5709bb3494efe1845a0946c65ed007ec0785902d44acbb3b971bd31b53305ce72d4d32180a56f280a4b29a2a9dcb83c443299edcfe0ea8
-RMD160 (NetBSD-6.0/x68k/binary/sets/text.tgz) = d927619390ecab77ada3966395d227967cb38a43
-MD5 (NetBSD-6.0/x68k/binary/sets/text.tgz) = 1854795033d3fb974637643eed84359a
-SHA1 (NetBSD-6.0/x68k/binary/sets/xbase.tgz) = 012b5faed219406f267667b7d5047ea9e85ac58a
-SHA512 (NetBSD-6.0/x68k/binary/sets/xbase.tgz) = 88b65e79f9801e1d3a0da5d3407754c7d48911bf86e5262fb8d02c46c5653b6fd55e6588177771ff82740b12fc84c8a19e207cee83ceee3a772e5beb182ae72b
-RMD160 (NetBSD-6.0/x68k/binary/sets/xbase.tgz) = e5d43999d4316d561ee7689321c04698af4ed5b4
-MD5 (NetBSD-6.0/x68k/binary/sets/xbase.tgz) = e5cdea5cf19b94dc3ef382951ef923e3
-SHA1 (NetBSD-6.0/x68k/binary/sets/xetc.tgz) = bf1f9fa57ffed50beb8d7d455c95928d560bf224
-SHA512 (NetBSD-6.0/x68k/binary/sets/xetc.tgz) = 3bf13d97afb20cb5e7098d9837f0a1bf471e49ec53672948373fcdb23c25c56fcb6de974a021c7e3bcb00e6069e0a68c5a84cd187e4304af129b3db66942d953
-RMD160 (NetBSD-6.0/x68k/binary/sets/xetc.tgz) = d2f0715f277a6de929f1504d50ce1b5fe27327fc
-MD5 (NetBSD-6.0/x68k/binary/sets/xetc.tgz) = 85342c60f299840da352a811f666392c
-SHA1 (NetBSD-6.0/x68k/binary/sets/xserver.tgz) = 54b441f5b0afb06e26e816a729b259abe8b3c234
-SHA512 (NetBSD-6.0/x68k/binary/sets/xserver.tgz) = a81cf87de57b646f79cbbdf5cf9a69c90bb2f97adccc1310bfaf639313c3027b04cb7591d49cf7dd07f4f6210e971656c7ae8980d8e0a1e854fbbc87ccfd91d0
-RMD160 (NetBSD-6.0/x68k/binary/sets/xserver.tgz) = 0ddef8e502a8ca10a21d59aa99f9476dbac2d29f
-MD5 (NetBSD-6.0/x68k/binary/sets/xserver.tgz) = e60e100d889a7377fd708a441d2a818a
-SHA1 (NetBSD-6.0/x68k/installation/floppy/sysinst1.fs) = 0c52f0ff358294b5fefca38d963f7fcc3c6dfe93
-SHA512 (NetBSD-6.0/x68k/installation/floppy/sysinst1.fs) = aeaba8cc7f83d83ec41a0ffef1a01203de34a89ad6028f8d5df06b2a6523b82ca44f13370f0f2f03e65cf2bb8a76532868471f25ddac4a8e53aa2f8a57f4be57
-RMD160 (NetBSD-6.0/x68k/installation/floppy/sysinst1.fs) = 396eff107455609a3b7322595660741e14a57077
-MD5 (NetBSD-6.0/x68k/installation/floppy/sysinst1.fs) = e1a273155ed6f80cc365bf441909a914
-SHA1 (NetBSD-6.0/x68k/installation/floppy/sysinst2.fs) = 35344d834aba89ce14574026bdc0c3648c4bed0d
-SHA512 (NetBSD-6.0/x68k/installation/floppy/sysinst2.fs) = 59d6206fafca21e1ad29ef12d869f7ad81855f0b1124625278db71dff739a76bc36da83a1bfa4ee920602a246f3f925e4c383ab8ad5455ae3cc19408347da8ed
-RMD160 (NetBSD-6.0/x68k/installation/floppy/sysinst2.fs) = ee5f34edcf9ae13406c1db031b9d99cf2e485c4f
-MD5 (NetBSD-6.0/x68k/installation/floppy/sysinst2.fs) = c5cf691f0b3380cfa9ed93158a0598a2
-SHA1 (NetBSD-6.0/x68k/installation/misc/gz124x5f.lzh) = 50ef2f563b410530f5f52a857705848973a870a4
-SHA512 (NetBSD-6.0/x68k/installation/misc/gz124x5f.lzh) = 7df17f64a217eaba1374a2833326824d43acbe84a8e47e558ec805053fb3d93e07619d5c89287951eb7e6961068aa8e534f74b7da87106d3c0f306bf5191acbe
-RMD160 (NetBSD-6.0/x68k/installation/misc/gz124x5f.lzh) = 2ebf89a1a5ee6564bbd9bdcb5a8d2716f4bc121d
-MD5 (NetBSD-6.0/x68k/installation/misc/gz124x5f.lzh) = e27b76e450d506e3cd555f8ae3a99e61
-SHA1 (NetBSD-6.0/x68k/installation/misc/gzip.x) = 639b9edf903ccc07259e146ac141cc8c102bab95
-SHA512 (NetBSD-6.0/x68k/installation/misc/gzip.x) = cac2274fa0b5e1ac2ef978b8a09c001cf3e3acdeaf7131e93677b4fb13d56412bcfee86fe886758866d6daffb67f54dd6fa4c2796bda49ca0e59e4d3a113e7d6
-RMD160 (NetBSD-6.0/x68k/installation/misc/gzip.x) = 7c431086e8719f5e48c9d698808a1ae74a78b2d1
-MD5 (NetBSD-6.0/x68k/installation/misc/gzip.x) = 69fb6553b4cf7d3825b53c8d7bf5a865
-SHA1 (NetBSD-6.0/x68k/installation/misc/loadbsd.0) = 45a858903634d838d7525fff2db12467195ce1d5
-SHA512 (NetBSD-6.0/x68k/installation/misc/loadbsd.0) = 7c67ae6947fb128acfe72dab897edc0d8cb4c8e82b1886337ed07b5d031e0e550ff791b470f0276ef0fb920b4d6eefdc574efec0dc04116b05b510684ad8044d
-RMD160 (NetBSD-6.0/x68k/installation/misc/loadbsd.0) = 4b30a14f171cf026efa10f44dd0357cc2db91d17
-MD5 (NetBSD-6.0/x68k/installation/misc/loadbsd.0) = 25b2b8aa6efadacb72cf96f497a38d5a
-SHA1 (NetBSD-6.0/x68k/installation/misc/loadbsd.html) = 9cd27c39d6fa54fc2c534e4e6dfb30f86764ea49
-SHA512 (NetBSD-6.0/x68k/installation/misc/loadbsd.html) = 71544bd6ce6c3139654cd55ec1ed293fee603e733fb2cde6574ace66df4ee8450182cf890c4519313ac74bc0d43919340cf277c329e6b7a66734aa33d6465593
-RMD160 (NetBSD-6.0/x68k/installation/misc/loadbsd.html) = d43cd8e0a08f11a2bdd4fcf2d8489761a8dfd629
-MD5 (NetBSD-6.0/x68k/installation/misc/loadbsd.html) = 3228e40e5e967fb87b75ee462388f92a
-SHA1 (NetBSD-6.0/x68k/installation/misc/loadbsd.x) = 9ecad059bb18bfc8fb33c165f63a15770326d3bf
-SHA512 (NetBSD-6.0/x68k/installation/misc/loadbsd.x) = 7ed4df332f2e65e5db31f95bc7635f2ea1f5b638727509ff16ee7a531a0006addf16f1da4eceb727d4148dcad8686b3dc960760d289f361fbdb2177e1089032f
-RMD160 (NetBSD-6.0/x68k/installation/misc/loadbsd.x) = ead03264a128cab57ebeb615b42e3688b5641f80
-MD5 (NetBSD-6.0/x68k/installation/misc/loadbsd.x) = 4b9bcac67fd51cd5bf95911a5431b49a
-SHA1 (NetBSD-6.0/x68k/installation/misc/rawrite.doc) = e2cab55990a4835524655fbaf2ade5d9eee29c17
-SHA512 (NetBSD-6.0/x68k/installation/misc/rawrite.doc) = d9df8ac2fe18ff8cc13ad62af9107e821c40ca41cd0ae6d3cd0dd1c55351f8b0f7bb2cdd7f0917a16738d11e0230c0ec233f2297b8603f3a619ef99b0eb1ed9a
-RMD160 (NetBSD-6.0/x68k/installation/misc/rawrite.doc) = ada5298cb0d2df6d1833f32ff21cc97244376748
-MD5 (NetBSD-6.0/x68k/installation/misc/rawrite.doc) = 53481a27e630ca1b583cd953d24d13ca
-SHA1 (NetBSD-6.0/x68k/installation/misc/rawrite.lzh) = 575e26ad9625ca21e5f3aad4c32fbbe01312c97f
-SHA512 (NetBSD-6.0/x68k/installation/misc/rawrite.lzh) = 36104c3fcd87dbedc2421541f14f54151087348f45f69508e5916c3570915f0b0fc355b3c075e4c1cc3907094abe87e14c85ff333e0064403c8230d93719ea0a
-RMD160 (NetBSD-6.0/x68k/installation/misc/rawrite.lzh) = 4c0538916a9ca007aa9ba66ea42c6c46a4c563f2
-MD5 (NetBSD-6.0/x68k/installation/misc/rawrite.lzh) = c15b00572229133bf9505876ea120a31
-SHA1 (NetBSD-6.0/x68k/installation/misc/rawrite.x) = 30e3d4504bfbf7c55a77a19435d75bb1069ed596
-SHA512 (NetBSD-6.0/x68k/installation/misc/rawrite.x) = 06d706b3581dc972d282ef9a6d254740b721a43d5f9c6325af7fb3d1fc8402071887b0ca99c720c5d02c8edcab6086b819faa69640ba4463c1713b168d432059
-RMD160 (NetBSD-6.0/x68k/installation/misc/rawrite.x) = 844aa4ab7dbef030c140e543475f24fc60f0a075
-MD5 (NetBSD-6.0/x68k/installation/misc/rawrite.x) = 6efe87d85560d8d6e3eec7a7b9d1545a
-SHA1 (NetBSD-6.0/x68k/INSTALL.html) = 5ef0d8d03b7f3f600444752d3763c17000da1e3b
-SHA512 (NetBSD-6.0/x68k/INSTALL.html) = 94181608314a1dcc1fa0c634060b28ce229883affc9f64c33d9eeae09b21f9f88149deff8d84a7f64b6b5e7cfb741b6c43d9ccdd2ccdd4c9d6e043f22452adb5
-RMD160 (NetBSD-6.0/x68k/INSTALL.html) = a5e8a1d8e28859a3e08b662d2363d758baf23eac
-MD5 (NetBSD-6.0/x68k/INSTALL.html) = c7154e6e818d1490ce1dbc392bb8207e
-SHA1 (NetBSD-6.0/x68k/INSTALL.more) = 9771b22f8b8b9a5a3ad2aead71a06bccd63caae8
-SHA512 (NetBSD-6.0/x68k/INSTALL.more) = 4f3561d62f5d3a6f1f936d476d783dca2d4caaa50e21d8571ac795a8f3a06ad10f490d02b05ae8e51ed3e6eeb7aba645215339632aa61c99b93c4c4b37ee5329
-RMD160 (NetBSD-6.0/x68k/INSTALL.more) = a8994368a67cb7bd6df0232815e6c21a1a69537b
-MD5 (NetBSD-6.0/x68k/INSTALL.more) = 13d4f52ad2a72fc92e24c1467463be66
-SHA1 (NetBSD-6.0/x68k/INSTALL.ps) = 3dfb26b142ddfa2771a49a371bcbf72cacd74f7c
-SHA512 (NetBSD-6.0/x68k/INSTALL.ps) = bc12356b462b30559d05d0ce0ccc73f07fda3f5575121bf2911db6c638375416e4a79364f7727ea1adef19ed2679e86600c960585e9ef7899ed583d630655b20
-RMD160 (NetBSD-6.0/x68k/INSTALL.ps) = f46789b092425a148d38cae66d987253e12efecd
-MD5 (NetBSD-6.0/x68k/INSTALL.ps) = 34b1b9c1a6ef25bb677408f0a869ed52
-SHA1 (NetBSD-6.0/x68k/INSTALL.txt) = 7371dc6f22eece4157c00dfb01f59a035f305da6
-SHA512 (NetBSD-6.0/x68k/INSTALL.txt) = 600911e35b9c641ee4315452cc4b534e844695af852328eec243632f462b0685acad59f35588c46d5c083f745ea5c1ab1df32e8e4f2307409dc5dd8cdafe110c
-RMD160 (NetBSD-6.0/x68k/INSTALL.txt) = 8f3c307f17b591859a241414a6a0f33f592e811a
-MD5 (NetBSD-6.0/x68k/INSTALL.txt) = 6bd22ee53bf58cae2454a2f8627718f9
-SHA1 (NetBSD-6.0/zaurus/binary/kernel/netbsd-GENERIC.gz) = 7f4cbcd7d5390357b1873da969b0a7cca60e73c1
-SHA512 (NetBSD-6.0/zaurus/binary/kernel/netbsd-GENERIC.gz) = 0c552ce725209b5686341ac0101cb7969a5a43ab8ba5d1b9a540fa07979e93921acfca844622ee00f5be4d3b06598ef4750772767b72b754e5cae22735ec24e1
-RMD160 (NetBSD-6.0/zaurus/binary/kernel/netbsd-GENERIC.gz) = 2ba59423e410d54f3a829f2ce9e5bcbd43b5b840
-MD5 (NetBSD-6.0/zaurus/binary/kernel/netbsd-GENERIC.gz) = 4cd87eddf3285a67e0f463d4896db002
-SHA1 (NetBSD-6.0/zaurus/binary/kernel/netbsd-C700.gz) = 01cc33fb982cd5f2b188d4688147750a94863fe2
-SHA512 (NetBSD-6.0/zaurus/binary/kernel/netbsd-C700.gz) = ceac21a76cc922a67cbf4d8cc83f471015d36d0896efabbf232ebec9217a3d56f8cea43f3e1c22bc527b32be5179898822807a041ef418e3fd6ff942d09dbac7
-RMD160 (NetBSD-6.0/zaurus/binary/kernel/netbsd-C700.gz) = 781cc21ea042587fe9f4c0fe9305ae159f5a15e5
-MD5 (NetBSD-6.0/zaurus/binary/kernel/netbsd-C700.gz) = 95bcd094f576b6f49e7a1bdbb5048a13
-SHA1 (NetBSD-6.0/zaurus/binary/sets/games.tgz) = e1d2bb091d8202962133475bc83edb55230b9008
-SHA512 (NetBSD-6.0/zaurus/binary/sets/games.tgz) = a147fe6d0419d53d5a428802d0bb6c9fa8a84a76c96d7d6d7c0d399e5af3a69240116463549a83d53387b0214ba0207796d7c10228d92a684fe7ff0ece3aec16
-RMD160 (NetBSD-6.0/zaurus/binary/sets/games.tgz) = 2be515c495548ba5135ff42a75a8ebbfc35ea776
-MD5 (NetBSD-6.0/zaurus/binary/sets/games.tgz) = 9059a6f2cd41cb58827709c9e9a1649b
-SHA1 (NetBSD-6.0/zaurus/binary/sets/man.tgz) = 899b9d8242e983a5110ab755651c24f709b5af67
-SHA512 (NetBSD-6.0/zaurus/binary/sets/man.tgz) = 410999db110d710f4bb498c3d7ae7adc62170c7c2f470ce189c92f6c436c5ea96149659c631ef0b5605caaa025d97dfe1c07c428d86f51239657bd6b71717b15
-RMD160 (NetBSD-6.0/zaurus/binary/sets/man.tgz) = c1270f68c6d41b351877f71f0396ac34877dfc8d
-MD5 (NetBSD-6.0/zaurus/binary/sets/man.tgz) = df4db2bbfa39ef6a4a215d949653d04a
-SHA1 (NetBSD-6.0/zaurus/binary/sets/misc.tgz) = 982918d46b2da2693dded747147baed27160d325
-SHA512 (NetBSD-6.0/zaurus/binary/sets/misc.tgz) = 54a45fa2bf5c57e3b63e23a95b6ca74f3b8e6b8f655715663ec5f83f713a9c6149b8b1ccc298dfa2eff9e81376f9f64107b35841cbd20ee62be6575539e01c81
-RMD160 (NetBSD-6.0/zaurus/binary/sets/misc.tgz) = 9c9161a1e855276c6aa3fe61de655dbea3ec9a43
-MD5 (NetBSD-6.0/zaurus/binary/sets/misc.tgz) = 7b0005d0512287e8a34e24c043582fb8
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xcomp.tgz) = 8d7469a85b7433c89690cce74e6b3f4e66cf0647
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xcomp.tgz) = 411304cf66e300a7f162128203099bb4d6eebc4a93ba18ed7caf79f30b31cc7ffcede85c4e1bad02c3f5f8a27d009fb71f3ce5862c1d8aa477f39a25c535fdaa
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xcomp.tgz) = 822d26e0ee08b72ca8b991f0709a8c1bf0399208
-MD5 (NetBSD-6.0/zaurus/binary/sets/xcomp.tgz) = 5af361f0334d28119d703064278b3ed3
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xetc.tgz) = 222d14c205f1018cc5a86eb03214d18cda2abb82
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xetc.tgz) = fb82261996aa772fd8a9022eadebf899ee04ee70229ee4fe07758ca14937bdb34752c8218eb4c5b722b6208f719891493bbc141372fcfa503de83e0a61aa7387
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xetc.tgz) = 511ebfe5076f361b7f7ca03a265d16052a16d259
-MD5 (NetBSD-6.0/zaurus/binary/sets/xetc.tgz) = 165cffbb6d2c79663198d80c82afac1e
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xfont.tgz) = ce0e141beeffeb5b470478e9887e4127da85de3c
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xfont.tgz) = 5d98354ff77103793d56af3192ab5f9afcde62208791976064ac33a149f994e0227dd5dd28ed544eeac5ea504e5212d5fb9e7d05e59e5a48a2fe4062e34e3106
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xfont.tgz) = 4d09f5e82fec875ef0ea328809465e7a98f2ebfc
-MD5 (NetBSD-6.0/zaurus/binary/sets/xfont.tgz) = be26b3890261302420b09976a1d38144
-SHA1 (NetBSD-6.0/zaurus/binary/sets/kern-C700.tgz) = 645cc6b6c3250ead1e2e121bcc179be2e9056b65
-SHA512 (NetBSD-6.0/zaurus/binary/sets/kern-C700.tgz) = 833883cb8aada6c391917ec890282011d2cfa6c5068d9483ab1b8c9b74361baa093b1c6b074dd5cd89709eb67636cbba1a6be292c23b28b8ff7578194c427263
-RMD160 (NetBSD-6.0/zaurus/binary/sets/kern-C700.tgz) = 0867bac200dd8bd12d1c4d225d392a175e06f24a
-MD5 (NetBSD-6.0/zaurus/binary/sets/kern-C700.tgz) = d1c5388985d5693d492ec75713ef3ccd
-SHA1 (NetBSD-6.0/zaurus/binary/sets/base.tgz) = fcee164dc5d4cd72f3c9841b7c7fbe295c4b3e6a
-SHA512 (NetBSD-6.0/zaurus/binary/sets/base.tgz) = 910606c4dedf523e5db213165fd5a244a655a40a7c4686e7a8e80f015d8ca496a1770b1a94532e118ad7cb4d2f4cfd0abb4e07560e0507275b4a27fefa3fb8af
-RMD160 (NetBSD-6.0/zaurus/binary/sets/base.tgz) = c1f5fb6f7b18486f08cacbf1ea6cef5d852a3b4d
-MD5 (NetBSD-6.0/zaurus/binary/sets/base.tgz) = e646c1da6b4ca9c38607d97cbbb6871a
-SHA1 (NetBSD-6.0/zaurus/binary/sets/comp.tgz) = 9af4ccb1edd8eea77f32d50aad4592c483bc41bc
-SHA512 (NetBSD-6.0/zaurus/binary/sets/comp.tgz) = b3eecf648f57fcc3af7ed707bf7f584db4aff71b7755986652e80e2a11e83b7a663263800f143d4dfe668bff0dd606f7733f1ae36be132f70c888a45e210d14c
-RMD160 (NetBSD-6.0/zaurus/binary/sets/comp.tgz) = ef64fdf6c3e118e4aab5264d457278d625408275
-MD5 (NetBSD-6.0/zaurus/binary/sets/comp.tgz) = c22150f0e6684dc1d64fef0abf882dec
-SHA1 (NetBSD-6.0/zaurus/binary/sets/etc.tgz) = 04a520449ff803fefaf80b0beaee929122d9a5bd
-SHA512 (NetBSD-6.0/zaurus/binary/sets/etc.tgz) = a109dffb85cd44758b30a9fd7b5eeb0e68b43babb96984974662ede674c4e4b06cddfdb84fd4377cdcf66944506547585f2e4e1fde1dd2c6ba0c823fec5af6e7
-RMD160 (NetBSD-6.0/zaurus/binary/sets/etc.tgz) = 1412ce7fbadb5bc2a7ea54662dc5af065a52fd06
-MD5 (NetBSD-6.0/zaurus/binary/sets/etc.tgz) = fdcf4276a2adc8bc6b8899a0f92827b2
-SHA1 (NetBSD-6.0/zaurus/binary/sets/kern-GENERIC.tgz) = 5a4db67f97cbf15dfa86f3d1bdd1e0fbf45cf2c3
-SHA512 (NetBSD-6.0/zaurus/binary/sets/kern-GENERIC.tgz) = d47f1b328c845abe0a131e5fec333a5badbbde60e1abb1c2a01032128350ae33a69df720f9a5a944e93a9c29e04b669f530d7d4b803d9262edef1ce8953099d9
-RMD160 (NetBSD-6.0/zaurus/binary/sets/kern-GENERIC.tgz) = 57cc4468fe4f292c4798dcaf7c7ee8b6a79c72cd
-MD5 (NetBSD-6.0/zaurus/binary/sets/kern-GENERIC.tgz) = 7b6a87debe65e4d987181b2a600a0cc9
-SHA1 (NetBSD-6.0/zaurus/binary/sets/modules.tgz) = 97cf73286143f2ee9d1d75d291226b14382bc3e9
-SHA512 (NetBSD-6.0/zaurus/binary/sets/modules.tgz) = 819d952342aedefae4120c8b0f3aa362089528ea9a604479b4242154b52e76688353386c6c6fe7f675086997459a1038f74037840642d4d522145be09d13b01c
-RMD160 (NetBSD-6.0/zaurus/binary/sets/modules.tgz) = 1c5ade56f427ccb12d516da4b60266496a0dbe7f
-MD5 (NetBSD-6.0/zaurus/binary/sets/modules.tgz) = fdf54f31acaaf41ae7e04155dc2ed8e3
-SHA1 (NetBSD-6.0/zaurus/binary/sets/tests.tgz) = d267f0e6d994c769d85698d5fe84dc84d3eb0aea
-SHA512 (NetBSD-6.0/zaurus/binary/sets/tests.tgz) = 400bcfd917639182daf83eddf20aa476be42285c8c5fdeb187b5086c7c00b0ebf2a0aa7badb7f4e1e43e70f43c46972003a4e6b4dd95eb5b7d621e2f8a562623
-RMD160 (NetBSD-6.0/zaurus/binary/sets/tests.tgz) = b8578e18377c21e4f0bc5509eddaacca4e439849
-MD5 (NetBSD-6.0/zaurus/binary/sets/tests.tgz) = ae201c948e67c3c74b0f5f89dde362ce
-SHA1 (NetBSD-6.0/zaurus/binary/sets/text.tgz) = 3467c94a0c6bcd54efe8849c282fa26f9f02624a
-SHA512 (NetBSD-6.0/zaurus/binary/sets/text.tgz) = 0f24772a93aa15de7b2a40e237ea5efeb0f701a6c3645b7add0e478bfcfb3d3050a74d80b1328eb821591ee0464e051572f2afa6bb2935d34ae369809546cf65
-RMD160 (NetBSD-6.0/zaurus/binary/sets/text.tgz) = 6acb227a392a29ef30d17e861ec681c56da75790
-MD5 (NetBSD-6.0/zaurus/binary/sets/text.tgz) = b4ed717b1487f24bf1768305e0c0065d
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xbase.tgz) = 8b5a46ee79d9bffd6d6eb0af06ff3928029b7a92
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xbase.tgz) = c675ab7e92391becf93b9894115e5149b1ef4b4cb9b2f41a58a12c0009c8c1999de4aa8e239f82308c5892accac5cbbe0a3d380f30134bec29b433a5357d1cfc
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xbase.tgz) = 81d52af994bb130ce57e83468b7ce350f107f3bd
-MD5 (NetBSD-6.0/zaurus/binary/sets/xbase.tgz) = 02cd86601f44cd4ba11e466236b04e1d
-SHA1 (NetBSD-6.0/zaurus/binary/sets/xserver.tgz) = e293d1143593154074951807e155c8e87adff50a
-SHA512 (NetBSD-6.0/zaurus/binary/sets/xserver.tgz) = 060d8e60ec568aebafef85ab34b527dafe11516ef5761598e2ba79e5e7994cd4f710812e857fd20bb1e09b0df5692ef1e10949273027c66ce2255e2b15f78132
-RMD160 (NetBSD-6.0/zaurus/binary/sets/xserver.tgz) = 8ea704c20eb2aafb79603904423f7e137136ef4e
-MD5 (NetBSD-6.0/zaurus/binary/sets/xserver.tgz) = f8d5d948e6ccb12094636c6d4106f895
-SHA1 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL_C700) = 08e381ea42ccb632460555771fd7fe6bae057a24
-SHA512 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL_C700) = de5d9f71284b987f67077a0fcf2273d11418b73108ada25e4807614752eea38d58b8d32c53e86293a0492d05a842e81f44e5e5e5bdf3f0ca76e440263becd5ff
-RMD160 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL_C700) = 91c741493cd043610e542d01a4cde6ed30469be3
-MD5 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL_C700) = 5544b1f0b4a87402fc0fc5951aa303ae
-SHA1 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL) = a54eadb65290c45af5e6ae4d0cb0b803640fa2b0
-SHA512 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL) = e78fc99a17c732908af345a40f102ae8eef248f4c5c3a4fad85a8e9d497346f86b65096e816aba26975a71780672040c148f40fc4879cf0b6f5d5ec7f6aa34af
-RMD160 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL) = e0bde1431f7c4b3f649b2721c0c38f02ad273bc3
-MD5 (NetBSD-6.0/zaurus/installation/kernel/netbsd-INSTALL) = 02bd814abd9951fec27c269ddefb6346
-SHA1 (NetBSD-6.0/zaurus/installation/zbsdmod.o) = 6f5a55fa2497fac0ae75f20df2074eaedde0aa0c
-SHA512 (NetBSD-6.0/zaurus/installation/zbsdmod.o) = 46e48ce8f3e637b5e708a066847e2f7449c8134f8f8d327e3ace9116cae4fc7b77aeee136cb797e00000277c4d224dcb10d946aff983be3292690580ba666b8b
-RMD160 (NetBSD-6.0/zaurus/installation/zbsdmod.o) = b96bdc9f3009ddb56d5b4b05e01e2cc3862a9e11
-MD5 (NetBSD-6.0/zaurus/installation/zbsdmod.o) = 49e746ab92af22b281d4c15eecf85c10
-SHA1 (NetBSD-6.0/zaurus/installation/zboot) = 142512f9c4e5a1a3762dc5b96416392a19fba367
-SHA512 (NetBSD-6.0/zaurus/installation/zboot) = 30520adab63612d4cf76919b21d2262235d3e2996c5a308f050e480acee5f544aad94993e53cd1e7490ef054b2fecfab7db0483ca1f9c045287debeedd84300e
-RMD160 (NetBSD-6.0/zaurus/installation/zboot) = ebd6148f2ed15ea48fd7a2f2a273136661287134
-MD5 (NetBSD-6.0/zaurus/installation/zboot) = da83febbb31821d4b68c07a9c9487946
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.11 (NetBSD)
-
-iQIcBAEBAgAGBQJQfDnGAAoJEAZJc6xMSnBuq9AP/1n7mninneKOiCjD5RTtdS96
-sjxa7DbX1xd8ZIL+klchZurlqqKeBdk63gALDo6VpAsSbNH45R0Ib9rzvJiwSkRK
-7PHPqijtxgACFV4UclrUXWts+Px6AS8QxMfuLgRwu0KETYMnuR8Ghp9YD6xIGqaw
-kG5Pfnqs2qWi9Q/70uTlmJgl3iEj/KStdDyxcmH2VlejtAGxJxqVVwQ6XpAu5z1Z
-OVMmoZoReFeDiTZAydf0VzvwyfmHuPvXKfO8Z+PhkFboAUfuIKIO8DfljQ7A5OBp
-oEEK1nnjeac59KWPAvI4IbXfVuC1o2rEYmLHz9vBxHKiPf9SxL4XjNbZozejXsMD
-h1NWWt4q6nD4nGQaOPyR4afN0ZWluC+6cASQ+Srmr/0QJbsBwgtXuKza2vwNs0iC
-IF80PL1iPjDPmf1CQnOZqJktUfv4aeAcwNs8oiq+toIlgOkIwCzFQFjflny9pRKp
-/YOxwFY8izCb6pu0/3LM2CSutwDEkR7I6aAn65BFW0ia6Ty5azf9iIFOAIbzefkH
-AP1CJKn36vgtcny/R9KueIw/50Hok2rrFrDqzC8mMq5j3Pletm/4equmVu27e+uc
-0jTiNwCHb6ZvuoO7d1clrIEEJPEXe66Xcmj9iJzo+Ai1nhCj1BDNZnj9zHbIwPIQ
-6yQgxCHP9Ney/0j1V+sF
-=nHXc
------END PGP SIGNATURE-----
+ uudecode << EOF
+begin-base64 644 NetBSD-6.0_hashes.asc.gz
+H4sICLYIw1cCA05ldEJTRC02LjBfaGFzaGVzLmFzYwDUvduOXceVpX3deoq87B8o
+y3E+NNDA7yqrXQZKsmHZQN8V4igTRYkCSVWV++n7G4tMcu9kZnJlSgW4SYsmM3fG
+ihUz5pxjRMzDr37Fr3/86ne//+bmj7/74823v//dN1/99ubrr7799je/+0rf+9UX
+/9ze/PV/3Hz7z7+xX/Drz39dN/vVy5ev/uPFD9/dvHhz027Gq+9/fLnerpuXL968
+vXm1byb///pF/+nti1c/3OwXL9cbfuT1zTfr7T9++9tfpS+NhuFHX/wwXv40+W57
++fKmv/ihvf7b1c+++Yebf1uvf1gv+cuLH9681cdefN++W2/+4Ys3r356PdbN2/a6
+82U+8Hq9XO3Nuvnh1VuN+MPUV9rbNd/N4Mubm69/evn2BTO9+Stv9AUz+r695ZOv
+181Pb/Qxprja+Ovx+S+/+OLbF9/90N7+9JrR/uOFJrhuvm9z3bR/by9etv5yHT/R
+fvjbTZvzhebbXn6Y5vdrvmg37c0Xb/+6/nY848efOuvz1zUZ+i9//O1v/vzV/7jh
+m4w5fvxx3Pz+2z/c/Ed7w6R/fNnGmv9w+81U/u14m/cvzOeYz2JAnsrHvtD32s0P
+6z9u3txO+Bjou/XDev3u/ZnmW6233luy4P1ukIyNN38Yb1/19frGGeuY1387fr2T
+0823a/z0+sXbv/3qD3u/GOv1++++uf3yq3df/v/fffzLV6+/Y83YJTf//aOgf/1P
+//ybb3731bf/383/vAlhzRTLCruMYv1MOVkfam57jpRiCtm01o3RING6h4Zpnd81
+75py6Lu1MGuw0caxt+u1NDtcDM5ZX8OyZnuTzA4aPexUStlx5dpaCsX01Xvaqc5h
+VypuzLLDCNHstVa1w8xmm1vT7lFM7NPONVz2X/zp69/aZB6anmtmzRxinntZ71zt
+Pbux50r8KptfYY289xdf/zY+NEbyPnkbgnF5tOE8c/JmtO1m9WGa+OAy6+8awMa6
+1rbGuJ1XNaHGsLvvrFQ1DLiir3bP3h9Z6tuhtql9e2eSqzvNnmILqQ4W2KzVZ+Er
+qbTCGg3bygy2191N6r3NPiaizWnUmXx2fLau6GJpuwQXWt/IYFprw2SV1/Zt1e5r
+SgExdo+Qg2epHlnu2yl24yeDDd+DKXbEFHMxKbFwzYXZbWBkH5d9aMlvx6muFVc8
+082Zpa+VfTNbtSl305JZDy77lz++Xv9+CJ9tsldoobYxclzLt1hHM2EyOT/yyLax
+F/0j6/5hrOxNzCFH9tyoZWbHPmXbJ2f8LnWzvWMNJg72dW595m5Zfl+Q+IhtpuF3
+rIXfY405o7GeBe05z5RWqmGYuPweM7IPas6JDVpNidavls1KfsZHFv7DHH3ZNdbG
+BKcZBX1h23WbA9Ykdd6avW9bZeUeWPkPA5kWTfKxGe+dzz34uuPMC31EgYpxny79
+v/zm2z//69e//+Yvf/7qMC51l+YsCoYpyctMbwJSKLnngeLHMXayNt674+8MNVMP
+mTVjj6a+kpmobUl5eAYwaTYMxmpx15532DWnMG2fZmeTVtna7EY/WGqvcXVXkFtv
+ucxdfdrFhb68DIn1yIuNEjNirqnZUtCC6nK+b+HvTLE3k70ryHLnGnm5ugeb362Q
+bMm277Fda9N/su53xtnd8arIvZha7dpmjLglu+S27+meHf+nr37z26+/+vJwqYel
+Kb5b1xf7kl1URqyxdWyfN30YX2p0FgNh6n3rfncszPJA6NYEh/Lk6k1d2Ays8zIY
+FYtWe5n9vkxYbFxTVi57ou8+j9VWWpj2NU2f3kVeKKwwbJozY3xrjcOy9M0b2xai
+YcOZ3kdGo6qNa3Rv71v4u3PEZRm7mt97peaXHfiesYwZ/Hs6192MIfgUP1n5uwPl
+FfLKzMRNtmgvvYzlUdaO1qYS8qdL38ar1z+49Ot3QOnX75DRr39Yb/ub+av/9Ye/
+/Onrr3735Xf/R4Mvi9EIdqLjXmvJuuyIHVrZ9cbaYG1H9rXdJ5UnPCaHkvGILbhS
+p9t2ziTr73BWLvmG4k2LR24Df4PSmMCCBZsKdh1bxPLj/TEVtZTknO91IDWzGptG
+UktxJRsdxg7lbRHrNgqeP0YgQwmx+XCfwJ4wfYNFnb5jw/oqsVftnRr22iO1UpZj
+o6HEdn4iyyc8IzapBoY6dBAPyhX7CCHG0GsoNsQnivl3X33z1Z9+/0/vBx/JJ9eL
+x9WGmli8EeTax2jeVyyNDRiZYsKTxXz9mNnYQbOtiL/AexmHmqNQ0yN98OmqwwTb
+GggjI96x8ew9bo9jigNj6WzN/OmzqaCR4vCoVRZnJb7vkTkIrddpkcUE7mSUdrmI
+mnl8+SrVPVnM19NPozUH7MMJYBvBF90KSk3XUPuF5qWwwYvuaWK+fgZLDRiK4Dr2
+TG4+GburxQQ2230p87NifrPevvn1d+17iMrbWx2ernfD/ivOuJrwGB440Efxa/YY
+0bJejSknhPvp4M2GLIuF4OqMeHvpMH4W49kBbLuB6UITdkuYT/4DDaPDKzZwWmJv
+GWtTwGPLx/Ljnr2A4rMKzTiTs35sWOPwUaAq7NlerI1hvYF5GOUTIv100rgZ4Xx8
+ZgxYAsBKBE07dmcrQPk9AHkNL/Q5QX46cjWgmLShAOzfHnHFIMA66qqN16z9nPi+
+bz/cDlgqlgPBBbdqAQSCHHCLEVcFPQGwAapZypTPCu9i6GBxbWAKhpwZghNkRsvw
+M7eVG1TK2WyAmm5DqMaymM/qdhp4JdSp1WRlKyq2Qw6/o894hobYIkBQpGUYfAeC
+K+indSDymDuYKFt+dxvPiu5iygN3ZGBfI4kg+AhGyTvjwBm8DY8X4cHgx1OCuxh3
+biAmSrKbr5jZFkCAUSQHRMDWbifF9uLN+LARgGvC0QlH3lyqXhwbFI669Lamw34Y
+oYvTcrsYO8IL4m6uY/aAqOArv6AoNaJxDWOJJ1rgRsBqzDYmvgsYK56F4kNDYsNW
+2TGAxKBJONPedUGkAe9QM7ZFZmmLNvAUOcMzYPLYc6yNsTDu04K7XI8B/bHN4h+j
+wxykBvTBLYOoYpwdILRGhaidk9zFwFgLYyJc1mIj8Ap48+VgJYFXcLuXc6L7z97e
+rA86l+OerAMQEdBozC4xjCarOU0JNUDK0YtgzsruavDMXGUPEkABXYDYQAV2DuCs
+0gEpKFTYgycBsSKWcKF4RpoO0AxpCozhP22LUysJU3aj4DJ2ySWmFXEd3YC8qw0F
+YTVECQiv0aeZ0LqwzgrvatKQTRANBr6iJVMEA05r2drbjtxxerAUM0M5Jb2rkWE2
+oLWM924sSwLFbZckxAyTK72eFJ9ODj+IDz1LeJPYc/B+FKQIHVk5oBR+82ca26Rw
+2mReDR4suD3AAdPyxrS8LWYSbmbgGBUDOuEOgKhWYcm2oPKjwazEYgAhOq4Za6ID
+4Cvb2zRO7FqEM08DqsE2AqiRYnIDd91awL4Brx2Kjo+arZ0W39WKODddWuiyKTpE
+aixsxWriPVqBzch+VmdOiu9yZLnxJPuLbrhiwQCZlUjs5tJBF/6k+NbbD/rsmKuF
+rRs2ubEFHtlKWt14MMHk31jT1ntxp6V3MTbmwLlkK84C9+42K1yBFqvN1WEHdYkP
+rsyX+CtIA/wRC5ofqsdzdaEmtM0h1x4G24t9n1g2DGstVZ+CBwJcPUOLaBj4ORjL
+NAxfywCb08K7mDMen8mtaLDOLHXH38G/PD4lTsbCBMBMXaznZHcxsE066QSlYUGA
+WXhxvEExvF/bDeR8UnT71Q9vP7hnthjv3xceBf7ZUeKQC8AFwxxw3ROlnMuP07K7
+HBx/XICJe2fAiofUw9fZfRZYCEmoDU6Bq0IcGVqQE5sQROAlvC0Gj1DznBG0jlZC
+rddqQjFRJwBo8Iy714UWxhWFTgM6uVcwyS0cirfmNNK8mrTMJowBT7TgDBGchKcT
+QK4BVppbLdsh3nFOepcj9+UwZ5hdp5ME8KEB4vPezUKnbAgnxfdmvf739frDdCHI
+C/odqmVLoHMlGUYupeMH2fcDOGO8nacFeD08r71hMtUknaGw3GNawGY3Qst7ehvL
+wvMOvFiUcHFgoflR/TaTzR8SMkH8cMEadCiHrWnBlGHYYXugZCDD7cPIy4k7mQh5
+QAdn5IOQQXdahHdWxUDDAsybpc4p6KAUuAwMh2EiRr+BSWMA7k8J8XpszMaugPiE
+/x4sfWoVeITNGx00ME4iTzHKD+cF70f2eDy5n7BNw3DiTmDSzWmhcEiYtwnNcXaf
+leV9z8hsY2hB3K5i7QNLsQJYRcdZ/AtUktD6ZspskHQEwXvi30rDtEJaAKjA0Gbb
+gEzARHtB7Sp0xG1fuis18p0CLG9mjlVAQux36UvQ+ZbFFp4V6H1zx4NnyI/LsCd2
+DVSi4L1YMqYN1sp79opvOMcl7nsAQIY1caNmi1MZi/2LHQC4M/pwPZ4T7SVYCmxv
+QKIuIoqcChCHf29WcGURl1ihmXmlsyK9HBtWNd30q5iOMjV2y664xw7ogAMOEMKM
+duUkazP9wGWikFD2Dp4BztcC5h596NKEny8oCiLPMcCnuyltorBsjgnMSYhyV9s8
+OElgLGe8w2lgczlnUw2EHWnhIOdyMXn2UFqWjVYqOBVsimVY8ZQILwdOWOnabdZt
+5m4bzNsHI9tp5grhnQP7vOiuQSm+CT5ieism4809bqziCyvbmV3S0H3o9Torusux
+5coAIp1RtRQTCTX8W0AaoLA2W9oLN9ZDmxWf3xK+LuhMtMLZq/NYTbm+WQ3ogqXc
+M0/YfXIC9U6Hc1Oy4qddKMc5jOZfYAO6y6vjrOgu59wmcpcX59UbBK4UdkpkV2P6
+sNfTsI19ief44NXAKRmdN/WCdS44sGrYIED0jTGKxp4T3SVOAsLJF4064WkDMdoi
+JIZpq2vCOkF4e5p+VnIXQzMmlMfqkJplnBvDk0pPLesyZEqXm9WZZ5F52kKCeJnq
+o83ZAN2gSTWwWDhtI4O4sJqgmTSLTzu0nthRAY22s3pnWFEkmQoDes8+tOD9k4K7
+mHJFHyCYjo2k01u/EyLEF9ui2xtAQmJXQO1Pye1ylSG2Ogz0kxWAUXaQIrAmttZt
+AzI8wQ/eHqjeah6Ohz0cm0d8PRgz+YrbNS+dMCZA6QgVSPYkP3jnGcNDY1ddqWLO
+cOK6qpZfm33bAPMLJbFSBcu/Yy76bsZrLtDMrAOmO31KLY3jPl+XaHu3BawtS0fk
+INdwHN+uqPu4NnU+taJ/d7TI7rDrSX7wztxZaxAvpseWAB+F2jN+dyBtCOx2tnsv
+PR/n/eCdB1h4Jhyx4J1AduzaWmAcO/WapDknOeL3r+ZPLy+OcFd2KwYMfcOkArAB
+Bht871sVgmpgNUBO8afP166HxzBOBwQurdccZBcXmq9Ta6zjHHGCV7DcPfuOJH0Z
+Hn2D/AvgBjB0X0DmnRd0oou3D0BXRJA+tYXVhQm4iYVaAnqKZPDJe93rQvL5Wjst
+0DvTVrwJL711wMRo2AqQlOu4GIxfHQZ2bs2Y54j+nbExc7VErAawzcLQs7PDJziw
+7mSAq+fE+Ha9efthyOyAMriaoAMKCNcyfgToS4wwN92AoqF97NOHpFeDW60vPCb0
+zug7DF2lh43ILHZrbrjD5hMIsgM2cWyiaCiVXmttH+EVsg0+6s7HoseMwKZLTbE3
+QAHga0IVmWqEW4Bj3XaDQbxteeZ22rheTbrB6wc7p2XhX4UOselsizoWtM4PdhAT
+3OfM6/XIiT0xdcKWIXOjB4hxWxPfzp4AQ54V339+ZKAB1cCzBhdZgmWlE0A7QOJc
+u7AeoA8IdjsvvY9jQ7hSdGA6/EsoOoepaPWKzF23Pwn6tTL7ZKJ2UWg9LBQJY9qw
+XH3nhOEFx5oJs6wjKKwAMwbm0HFJjXDy5DF0IQWUFhgL56iSYwEA2W6eILyPc17B
+tM6OKcGDukY18dB85gtj1BFNEk9N86TsLga2EDivnewMgADmluVQuvyJTu4eFt37
+IMKmmMLj1Pz20vH333z759/8y7/c3vJDdpoCSMxa8k5xdGd95E3kE3qx0YNV+6N6
+ePJRWEsWuwHSN6bDKlCDDdPzmjBVkwJmdmBTuw5TO+qG9ZoL9oFsKl4c3sAsEakU
+d0e+EyrbcBYFVmHgcms7AB2g5IUtBPzJw6aOPxD1YLM8JtiTr6DglAheyQFnn6Lh
+38PrAoWtGYzQNyB22IdP5E4+BxacrZwJ7rg08F1UwFzTHddUDN9TxN5fvXrr0j+A
+K95dTvlYrcHGhq378YUR02VH6iiF8Swi28w8fkL+uWfYtEAWmFgxPvg69LJBLoD7
+qB47arTUFCVkBy4FJ2VY0Ilz0uEx0GdD/KEBKLNYpAEBQdMh5xAw/SWPDmwKcTpF
+cFjksXDSbSgEx2Al9nqaoK/n3kDYK5sIfIZg534c+5S2VorBIegKF3K1hydI+PoB
+awr4wDLrQVUVZTSxSZAruZMyfoZGv/nb9/3Vyzdf3jrtgSiTzP3cVvePwBYXVoh+
+eJugiFjYvdbP0uzrR2Kzx/LL5sqLTFtSBPUBJkFmuR1AEAyliwfIH37UWJ1WroxL
+Dgnv5JJCeQOyhIROyGpD6MAuBzJArOLJYGjskjc16BnbBzwBv3kv3sz/LA2/fhUw
+JaaE7Zu9C3hd/oF9UdyTtxatHGxMjFF+vqZfPy9M/H/VQZTifqsfsOsN/QEVLbjE
+IydGt+P99e33L9+5jFKBaewppyMjj4PEPU78SMVARTCimEZ8lLTeHbPWaMFmsMi0
+2MDQViRq0oiY3RiOY9CsA+5ewMDQRNunIsWsMYpbjVt3UNWGaIJZbcNkeoJa45i3
+EE4GRoQB4VH0jpmQyroULel0Iq9YjUdPiO7ONcgcs0umjQpC1MWzwjrmXEn3cFjv
+bWt9JFDgkwXNsC12b9xpZixxNMDesCsQB3/c/OdF8/2r1+tQSYspz32yMg3aWKAD
+bDHcFtDPiw8s2ED164xobsccGG/PL7Csbhfr9hsgtvHjqMoKXidEIJ/s8lh5hVQs
+ZAXXy7IgkBZDb6N3i+qlvmZKtZmNbPAS8KyuWFOwrlmmOb7hK1SH/cXG7AsUNlo8
+I5rbubJv0CiTd9zB6yQzzADxH9HVDNjXDfCwc/TPiuZ2QGcVIIzLqrawx+bKwabW
+kusA0ejz50Xz4/uITNwfWxLGbYPDuBSAVtnYLgiead4ZXXn3dkYw70YEbk8BKVhC
+XZFlY1dPjG9nV6/KhueBueF6nc5E83GA7tF6gx5t6wb2b4ovZ4toc8abDq87Z5AP
+yuOBvq627DfC06kA7KOydwbfgWjKXpwQy7uZRqNj6glA3QPQsbtbmNztMbs76MRJ
+G2KP+FmhvBtuK7YFHV8KAa8IukNqnIJ5IaItnTBkb//z7XFCZhq4AJyHoXFpghWC
+dToHYzdG3fNYWBwM4YxM3g9ZcIfRo3MD8Nm3q8oSiDIYbgrUOd0DpwYq0Xm9Z3d5
+sKid2LfsFC03szIw2KRw4OwwiiDXGEyNEf2IXWEHAwZnOlqIW9MxXlWYMIC15pjO
+COX9VIeisBe0T2H3LUdsoSLhorIRRikWL9tCtf6zUnk/3jYKFmGDJDOB9ECbXaLD
+QlSoJvvrAbF4dyZysUzYPFZVKgJNta035m5YJt3PziLjiw48bNfOPUa3DlObPOVS
+RgEreqSIx5hgqz0SHm5XBQiAKrqunkvAnQIOAYh80w5db2+UO2w2z7FJE24KP4nV
+CxFxYhztwOUnfufO1sAEVJ29QXbnfFB856Zv4NtyyoOFiSg5mwuYrxuo5uFauDpB
+Wd/uF+m5Z9S0da09xxgFH6U0lmHx+DphdmD7J4r5m9tx96g6JBmKmlSax3HZjgWr
+dmLWtLEwGqH7J0v44xNYkBRLVdwS6BEjhIdICqZRwHn2YKMBa4TXBYMjYp9FEEJZ
+qAk/ASlWghF2GnyGJV/gnRXBO913gCLiw1cVhcfvNRU1mNgp8MfODkp44hCeLNwP
+M1dcQlCKD4avyK0bIQaEOz3ObOpiU2/WnybXjwvj4UPw2KWMAWMU2Q/51+FGhxM+
+eCH1cdz/grDgxwb/uw0LfmzSPy8s+LGRnxkWfGfIXzIs+OGh/27Dgh+e8s8LC354
+3GeGBd8d8JcMC35k7L/bsODH1uNnhQU/MvAzw4LvjHjfdRZGBu3zkJbUZkFuOzd4
+Id5Fex57BO6YMKazIrzvGZAw44OkM8MRAYxcAFdNmYDgHnCmzQs6bww4IupoqjMl
+573LoPWpwAVIb1QgbAtHoEbkJ3aFazvdHUYIztblcDMTaLpGirMIQbmpUKfTOnjf
+3N12eQGvPcsDkTAFvd7wWaGt0AFnxvZcbDsl0vseEBcqk1xDiTabJGFA7YSSYkWC
+2c6fE+1VELJlKWLHT4Mhg2WNBrgCLY8KXPG9paFEWXtWpJdjdxE81l9pjby691CY
+pNOYCC8PE6YKUjBJh6TR4dq9XixjUJmEojGAoAaR76zQcI+FtbBapU4Ddo3u5Boq
+FFYPWFj4DKtQeVj2feZVc85nRXk559G2TaWPidnPIBdev5lgyvITNToO3/FluZ8S
+4dViKD3KKXYJKqCkU9tDBA9D922P4ySMuQpAFnqbM8r2M3pYuBbj/bab+aI7uERW
+uu6zorsKJfGOF8W8NexbBhbZvZPxA3cSdMqPmcTKROCKV4Kx0R10VagiCDRhfUuJ
+0PkWTSyJH+k4Teu6r9KQ4kNogMMGeYTQYksnNmpMqwhyCXvndVZ0l3MeEyAET0Vw
+aZXBrvLABJBMZlUW7Bb717srp0R3NbAvCYCvGC9g0QDv6jIfDjyyW9Pbc6K7iPhY
+YD5Bg8qPH7d1gPkN/cLGdXZ6aTXowP200l3G1bCtdPfbjDI4uhN4gb3v7I9rP/Au
+7BSICb5NAOiJUYX/55Ij6M7i6XqBK9g9cPK8IlAUphmtDqjBtArdBx9C+XUfMGFW
+1tY41xrgx+FwqGcFdxmarqGaGX43nYlhjQfGecyODs9aOs7XzNDGKbldhtOzmkDY
+5EHybgUFHUBRYlPogTNhPMEPfvPBAi+TQ5g6surQ6ViwDOgFazvEJXDe2DOsvX+S
+C/w4PGbO7dkiag08Xq07YGhWfCF/wqgYewnVlZkUbbqOI0Qk5URbIlQD0qDLJd13
++6RE8AKK8PBG+dDcZC/ZaLNjmR0IaaTO27g87S4D9PUk7/dx2t30pdAw64PJccLB
+J57Vu4nBWB66CkbN0dvzju/j2LEr5wDV2MIatu+OjWY4JAsu7WcJxHVEB6A4WycT
+j28CrEfPVjG640pLigDTGjv4ehqM3gkYGaqFkixT9fAf2MJSjFPbeD4IOpYDnJ56
+7WhQhfdX3c0DVSp8C7Oo+ESRfVxdbGIYJaiWiVKgE+w/uA6p3rg/LKqiN4AvMDUl
+zmbcYVrhNB69M22sm8HjgQnwSsroxbmsgqmyCzxTTM0p1WnOQdLrsZncjLFj3J3i
+cuDazutFht7O9JOE4iquQ/eqGCWhgOSzUpBKV/WC0pW/oMIdR0DSaUZxNTjQo8V2
+kPS0DBhyuanDTxhWA/JWiQoLaDOIRYHx02Ol4DSK8C6QPtXo8cqYwj5a5WUhzaUb
+iGGzjBxWVsn7PmVQPs7VR8wxANuw+XLN5qwIrybNlFSUZAzNLuND7JpNl8p5jtyi
+Ah+D7MYpAV6NvHSw5I9Iy+OUgYVJybBdxKyq7WfFdxFD02PBGq8FHw4owJQvAm3I
+eiI3KGwbBn51Xnofx24jwPKcUDfMGl6XsUoBLIqibH1jFQ/9Ww26CG+GMoPRd8m1
+Np15+MDHtg5Eaq674KmBWAvSjpI2Xrrr/MW2AqPcrgEHCz7WBwvhUCxjteeF93HO
+Ne3eF5gXsxn5R1OCyAYAD1DjUKEOdlWL+aTsPg4MdGMRdMfI24HtVTBiKtIOIBu3
+qedEd50UGU1rMzMlF3IeSmnxeNuJZigi8TDPOqk+K7vrNFHmC8m2ASwUfNHdawbj
+5+7Yyb3ZAT9I2M0KBapH0lKcOJxlo0JEnaodwLEqckd5k2IN3ITvW6yEcw4otFRM
+Ba2DOqk2UMJQ6GR1yqDyjLPCu5q0ASrNkgpcBwCKXUDbg5uz60LRoOrYO/jmOdN5
+NXLNUjjVdhI6DgE4hmo39hmuZNiThvMqdbHC3atRLP70Porv6a5T+V7LAG799rgr
+IOlp8V0ObkAsQ4ep8Hg4qoVC1CGK3YG13SZlDymsF7rSOhtygu9wtdthAKFwMSn7
+ULBqaGupEJTVOckCvPXJx6GjBXw88CVutWyBTMAkGKuuHFc8bTivVwT70LvF/DZg
+jBtKIcBzRCUOQNwTzJMN1dc58V2OnJm4ndnpNibm6Po2CoVuOoKYNp48jbnMXkw6
+Q4BXVd3lK3R043kA7Gi0zyAtlHviYU5jl8uxgxu4ZkaFlONBgf1oxsI9sdfaYFna
+1gFYhG03/BtMGcTBKinAeQw8PF+cRfkWMXolSSDVakvQRQ/EcClStE2zV/c4TSUd
+OuTnd68zyvCdFt7FnFVW7FD7gpNtTtnEo0GKdVwrsAh35RXGSdldpYkqi0T7rnqj
+MAqdrFVdbmBSSjnJ+64zOVW6TQFmCmZUNAHsKpWsfIJojixN5T+v0zcPV4NvyG1D
+K7JOPWebo8IbWjkun11czsHfTGI3jmGAjaaogJGvI3rVoFGuHHxigdnBUSoGFU0t
+ZtZsG2Z+F9sx8AaRB34vXbqDrhxrFDayQx1PC+9q0mkCfnBG+Da8doWyltRUbGmw
+3NB5UGIY9Zzbu05ArawG1lLnhrjSDu2JE6JSdhM4mCfFd5206KqbBTQcsL6sHjhC
+JaKwDTHptFkl1HztrZ0W4PXw6IxfC9AGVcO9AS+kQzBNRc4DNELa1fmIgQQnzKJQ
+H++VAdB0aKyzl6O+E385OA1O2nYXMzZzpgjb50cg2TYyYEdZ+rZNjEr31xjSfF6E
+19NeRhFomB3DbhahsRNo7sFRUznQUxgBSlPPCfF67I4H3xmsb9mzLMPi9Vgciz3C
+09dHaPxVCNr17eL9QWjdYvGXrtBtw7XG1pfrKWOXAksth+DZUfFRcv/khzYPpEGt
+2hEnknyYzQelhg2YeYYMYNtVasCjdK7aXeHVQIDVJfRiFFgwenXKqgsK8dL1z9T1
+7lJei8JXcOrJdI8x8zUrssXqdG5BwPBHj8KdJ78MQoFWo7ctsmC1WGV7409qr03F
+JStYZoKfH9wIT36i3UuiUs0PHa0bXTamoAyi3IG68Wdtj/d3YcOXuZQ8gG1VeH5Z
+C0jjrapIAsVS9XDwNH/mtnj/PihsBapjYxWC45FwxwMpGrc26AjbE8qhZAyvlCnk
+201EvTHQXVGJdbL+7y6gh8qnLB+iqqVVRUVGzH2rIi4TDySUzrbLWHdQOypVvNk/
+czu8hygm6iiYjejYn7K5qqKCaQR1x4gFAl5gquLP2QbvZdNHsmM51etUORGlcqlQ
+iQqItBXbSfEfAar/+PZ9Gd43P/7bu3A9JcGAJ1hfRL6RffO59J6WSg9AgCs8tcXT
+cr/3KVuHCUq8carlizhwpVhlUNxWQdijiCoUVTf99giwqjFmxbWYlY+ECDynl8FS
+MVOY+IRshKowLAectfCyWco0Kt86TfJ7VwsbxNFbp+IU67TA7509GyzKPc0cFU0B
+2QIlqKhBtDuJFoPXsaAnJX3vIwLcUjGTWTVqIa8p4gNVBNhCQPe7WkRnRfy6fT9f
+vPm3L/et+cheCeSxgJ3yLhN+qLp5PcFIVKuvz5mHCvE9TcafPEYHggsLlYA2WBCv
+FKctklgHeMfAavfuEVRsYB9+r2XER8EamSkpowfKtoPEFUoauH7TbQZo7IAn8G1G
+qKbS7fD8GwTckEHBa7A7bbFj7KcJ+dPpe2eGb07oWtVcRYySVdWbaYuyEWTsYalP
+kPKnkjAg0LUcDm7rDhKIFfFaIE3ne2zxKWJWyoF3H/IxYAOeVQI9MPuCc5yeZWVZ
+VEMRHUpZ1Uft02R8/QynwBNWIysJsh4RlDvi6sqAs2aowwwmijagfHEYE3CRisyK
+AabimiJNExrcTOgKAAjVsQ0GjGZipAcWPEHyLDTYOzmczHTBJXxxANhTe6KAr+ce
+i+KIrXIOtgsFctcU51yZbW2mzyAwnvx8gnSvH6CoNJxxmomhJv6rbdhHmb2F5FVn
+4gmiffPjy5+++7K3d5Vzq9GJU2lVmfs60MM4qGqYqGe2sNaimID+NMlePWJtfIkF
+kFcVY9m56j6sbOPYQxYQVRTwMBXswyvN2bNFO2fMWdViaoScAr5gUBFPDA4HmDAt
+fMnEP2PNjOJjIWoT3LxVaVYhGkF38qqjPmN6mmCvpu5NMYr9wZGw+DmG5lXMwCqW
+CVfcl10N+T7FNl+NH1llJQTvWNiGXQSDfe1hMDmzGPlhsd5NMZg2sYbBY347ABiM
+MrCYlaU38Pig+g4YNPPoeeLdMY+KsRZsBjq2mNKNCgGAAdddS4ujVYSeGEpTjWqP
+iOB17BwFkFQQVE26MvM679gZ9MqeBZvPKobTvWL/M9hDZYCZpKkJXNBHtqzGAuPU
+xwR3d67OHZHYFVR01EmfGzRgsypUjaobu4Za4rUflNTdAQ1MUVwwoXSm9LXSUHUy
+sMzAOmX/edHcphgYbDzucMClc8+Kvk5QMFXCz9YtFsv17jS1E6K5HRPF8TowWCqY
+4pIpPunWM4BhUQgLfFu+yyF61FflfruyolrLqnHP48JoXjZcRUoy3iIgWtWLVywl
+DlTFo49UkKy0j10V0l6cfK9VAqb1Z0RzO1dd5RjsdY4qhhFCVXXwJt4FogUeajMh
+m/FZ0XxIWAGPs5LYK8jXgoTXDI5vSTX/dKX0edG8SzTIKloDMXQx6jI6WZkgFfMa
+bOnI4szpWF5/RjDvRgQwDyAKEF1Bmqr271VJYwpRMmcXQ0xgrqQaRqBQjKEihWAT
+DlrnnMrgJGhFU0KLt9g/VQrMVrktXeJiNjhc5aus5AaIBlag+8QyMmtgwxmxvH/3
+pCyAoTP1mJzyg0uB8padM5MtSdW5K/7ys0J5n7MxAvPcNsT3GWctOKyxcXWhP48d
+MdzJMqjTronZSFXXuaxQ8yCO1J2fgk64CnHvRyr4fTqkRSJeN5xIpztQBDjJpqxS
+lzXrdE/BjLZXpoky7K4qYIrzVrT9FAppLDH6YxUYDlzu8HOXm8rM5I0ogdYeQbJ1
+At9TblQ7spxcmpDNkc8I5f1Uc4wbQwrPUHRzB8TsttASy17A2xjW0yzs5melcvvq
+TXX/+kSRswoSAtVVQmJCvteaZT8slh9frx+//NPvv/2nP7zrJ5LqWtmpZPZQ6XDU
+N6aBTTVizSoDAIBu/tH8jDtDCqF5hapEmRdfohuK1ohq2bEm3CEwT9xLLKruEvH+
+2yhELfrgoTEF21mUpp0woOJ7TSV28HvKt/EVMa0ccahqQFJjSKqc13E4vMGCMez2
+mFjuTLXg28YEB3kVTlUTEnyVgTUrqzM7LKxupu3Dl8J3xsPfLSTZMdcYCR0h9On7
+xA7gG5u5Tywvv3v1+v4w/z8CGNxt+mxVVMbecByVZCoqa4elSToM7jDwoOYFwdx/
+tnruEbCn7Flhk7GTmDrMyGD1vcXOqZipVUqnipRGBYDj9UFOCpkphdnUbZSO1kxW
+/KJRSximuYTocxvDwbjZaYicXa/sAl2xAd5xTBUPhX6l+6NLz029RMC+eoxEdcpQ
+zCOLNTwOHScQZ+0DM3xv7v258d02ilHASSpiNSHZpIpoG1+rCnRPFCv7LNwmcDgv
+CAUGKWIYCBC/yVMK+NgOt5wdecJ6nirWi0csnXgpHdCpVH4AgwE/seloy8IbdLxi
+Hst51ZRV0VeHZmkeO+S5cmp5KIKy76ZCbnWOpeYuS8k23arGsEq6zS53CPILcKSW
+1Ikh5QLCsGE+VawXU9cdqfM4sy67BhpQEPu2qwfdWyl1xnjFNT5JrBfjx8XGCHWu
+3pWYrntMrFFVpUsAdumfEes9qSIMsY9sKJaixhXZL8iVEVVmy66Id9ku7c+K89Oh
+gXF67SPSZG8lnGNitjIPwH+QJgA9/3W1akEoQa1gKlosgLhDXGEZ3O86amrsXpTh
+X0AsuI4j1AugmD1wcDiFfrNbespDVV+bMnuhvPuzYrwnvUXJPrqSwCynqiJuM0a8
+TC7N6eZfFVWU1vW4+D4dl22hZKfMOuuaZ4IPXVTosO0r+nu51ScD/lJJM48N/HeZ
+MvPYhJ+fMPPYqM9Il/l0uF8qWebRkf8uU2UeX4tnJ8o8Ouwz0mQ+Ge86bklVTrdu
+3mH/eNAEpmxgBtYFAB+QKDgjr3pOZv95nTyAKu3h2ARLBdWdKjzFoYx1FYxUMZAA
+CWLXFQOGrPCAxbOVKI0RAc13VQ4CgRvbYlDlUN0pIdcjKrr7hPF0potfOJUccYYN
+aPvEeMHiHihz+fiUre6oAf8eb9G791nVwBkdjDwG9ib3nSZ+74TUrsZtBSePsYVZ
+KnA01qCChkCgOU3B9p8S22WAziztSHHZafPerXeDBNUMyMmRTahTU7i4OSm2q4r5
+W7XbvZr52dlU9kB1aFjchEEzSeVj+9HeDayP3JaEA6Puuu6wMAMlAHu/wSOqEBE0
+IWfV2BLts0bNlpSzuef0KXi3ekvmKBPQFKQwHrjaeXzKCfeihGP8QYbDTWD3ETOg
+exEVcvdHZ8f7SlQ8Pq463L0LPVCUToYmQhsgyiJiA1x/SmwXsTkKyupaL2BC93gC
+u48idQoVBMWzF9CBZM4q28XIuiFXoyNBAiSl+yDDBjBpqsuSrd0XeUz1XcIiV/Wh
+2jbKTA40v7ui29btjrqIChRJXqWxmgp748eD09EwdlJVxhl9s48h+LMqwn+r99xJ
+oV3GKVldIyk0xFpFepgRGrC3iefjbCPKMqfo7QmZXQxbMFtK1wcY2KHKAcrDMLuU
+wGveX1zk0/EuA3LY8iWUqBr28jNA8ZoB6mp6prjXapXFZcs4KbPLoUVbjFW99NiX
+dvACVaMTseEyooOBpD7kQlEexYqb7ZYOx1T3ZOpClJ/vNVqZ1lhxWT6qcI9NeYYy
+Ie3HEbJ6WKTlGHXp1DOoKJv0dp7VtKuOATUaVwJgbIapjLUK31JE4BEqs1WfIgMk
+zwCRq3FVzQO4xyup8g1WNrYkJNIU1wl3OSW26xCcvctRfoONrAPf7b2COqKCZ/Ma
+bAlAlFpDnBTcncFZSq9zWQCH61G1iY4CS16NWnfS3V9nC++BH+1FBWaBrR3XoSok
+cASruK7igNkdPGjY9ryqyqPMsNRJZaiw2AY0Kc9ftTZt0KVHV8tcxZmfFN31pKeu
+XVW5NCu2XNYg7hgcjChmAbe04Y97nfJud6riuxAyL5VMKXnygOmcApgX2sPrpDPi
+OzJo3nH7W122ZrGrdYoBZQVLqDw+y+W1N8ALFSgUYy/nJHjP+CUko3k3nTP1VqJQ
+JdYQ0+QKZLnuWEFr3uqmR0XFbdlmOjUVweGq16j6DKvDqGofB7UbqjI4WU0sFxY3
+zakreu8m7hB0tdRBCDQBzmoP9IY5MW8VuBlO7Tp0fJKCih0Uxd7H3SPs0XWAl7mv
+ScWJwdEaa1nw1XhFrE9UKGacSl6eXpH8J0R5BalGG7os9pg2OJMqyJaWTV/bCkJY
+1UXC+Z1EKldZrzMEJayY6NVMcGLrw9JJSsqovEpTM54CRrrNggWClDlnq3t0mPro
+SmvqeMnsgZs6ru0q7o1Q2V7IrTrvjKJWOiauGri6Uz4sHothwgznxHc1Y8V+TKvH
+QjW8nrnVR6mzTeZRkEgJH/f0EH18WNWFVF3sqvatZag5BfZDkG36iMs6I7JL2ONX
+PSq14imWtRE3N1t24uIuACzZ3TAqdvw5kV2ObB2osA3dBEAyAkAkqMA220LmJxWJ
+pg+1Am5DBfVigFjnudTFqxg2tVqLeNRnr6mCaBgv3XLC2Cp+uRaFcC/HdksmTzUz
+MKpRj4ZmFByhnhPZ1YxN2gDKqZAakKXVxTxe2lolj8zgfVHfAmtOiOy6vUCovmFg
+6oqxKMjMgMeYqeky96f83QXqGRBCdWRx6g6F6c1YrBRNbmbHFIbKs8RtzjLvi4Hn
+cVKEn5pmRhy8WVPV3pUqIfUBLCpEPm11BFDEeVcI/d7qVYKD6xHgMlRfStmVcevs
+Ay6MU4ALqNjbVJH3CVBHA10eaipqfPM40q2e7d2dE9hlKnFl9DpW072kFYNLgCFv
+jlp1WKCghG847gl5XWYYqAQgm0C3oHmrIr13rajDjYdu+if4t+OQ80OOEyoGAvBG
+0RrYcjUNwG1Ah1UB36q7gHLvnuLfLsfnpXNPAEV1SVq16AwOngVHwPypUyvmV1V6
+A3+m7ZWcgRMxq0ojk7KNVYnbNyu3HtxgKR0Kpqu8prg89dpzqoGa9kx1IVglr3dM
+/NTJZXqKf7uct1o7GwUyOB5Xw3KqAn3EZh5fS8edZEzttH+7HByrok7pKzfwZgX+
+oHW8sbdVKcXnjOXdDNSkCBBWQM138RAKGopKvpFTUuTl8CpJe9Je3hlc+QsNXYCE
++T1wQSy9OpZBGSFN6nfW/Ug6GfE6Z8NCAkarcZlNZboCQFBgdVRo4FQBE/wM8/Ux
+IbPIyxsFOM2c+f+sE7aalxQ6Zb/wc+bk0dedcvwmmCOCrK2Ag01VIf1VNSpkFtS5
+Zitd/4wE74w8EVZjN/LSa9eWME5zpl5GhgIZe+rM8rqmfYohdJEF8AHK0tQeW12+
+8UO1qGJC1mGGOye868TWpdVeuktjE8PewJd6ex064qO8UXy7aUJDuh5VBZajXWEx
+4JlcgE1VjRr3cD6o1pfzmpMy64Fmurhc6l9d1CGGfWc9pD7rTDNBJlST+5zorrOT
+01LRS5Xz9wPrNsDaQyUbk65H0O7RFedzxt1djevbshWtUCInImOUckS7Y3lUMy6d
+E9vH9FA1yDFDVUiVGlsV0A476rBg+Ws8CKYp9XVaaheV7BX9G7p6OMcAydsAv446
+4AFtD/04/ICcQm7wcuruBABXQRSMpiJMFQ/D19wQIGnCcwjZxGqVOCYAfJRyjXEd
+EdGKN+ExOCaD6umecZwV2scZBwcyAjgZZYgquRVMUpiAdc0EJZkrnIF1PyWzy3YB
+zgLRgM84DuiuVY8KndkO7Lu5t9PZyx//2h4vePj1H28vbg1sONojkgbtjSvBdbNL
+6rWharBAbZUivj+89QnP0RPqmJWlTVNkgOVRMlJwGA+vIPQ202oqEo5jZ60yMp1K
+wsZFKjIAoM9UTEH7wD58j8+C2bb1GNkArce0ql6MAcqobcfeymZhU6s+nr0/oO4J
+84+l5ogbLKrzZzTNovh9BRXoYHLATsIO9r6b1vMPMTCjBGc8kJrPfTfg99b5bdKd
+RXqWqG9byIM8VMVUlf9MVj8LOUWjpp3qlVqaWH0uz5Tze6sVVfwIXVWNGgiLmfwP
+UMJuxVtU473qsnZl3aalcqEZMpMLAA74A2rpSVA8a5MEo4sji3taBpo2bQUP2egx
+zE5jOa+i9zodh7vkIgWx7ZlCvq1iCP0LsOGuAtd9GVVhVRhDFTNaFbgFbq7uORK+
+ZV0YXswv6qV05IE9qBANle5ueIzyGfH+steyjwz893kt+8iEf8a17COjPuda9pPh
+frFr2cdG/vu8ln10LZ5/LfvYsM+5lr073lXpPEzzh9KCW32FdPoINpvClKUr/aeN
+zm82xj6qyJ2T3gMPAXKapewhlqRgk8OWzYsgqemVYb18bqrOrLhI59A9LwSgEhQm
+KDwTeIPKRjUA3GqJgG1U34ejD5eqjcQQ8eoeD3o07lHaldk6ILdegcjlnCAfWiFW
+YUXlN1ogNHCdjbVh6ur8qKpETsEzu9sTMn3gCS4KtR/FqPAbTUUCqqqzVOhyKMGf
+Ee/lgd1MqnY/sqq1ND9kztSItRawpg9pK99k7l7OyfTqzl2J2ErDgRlkZqxOqUkl
+4afaruC8pks65h4WBOu2D/jGcmSlsUR+wNUmOyAq87425D9MUfyljgEwqgMuU0pT
+d9GgS/x99OkpJXaV0eKbJzXyqkdqyEc/imUgGmm4EqD28Fs3Vb8dtl4Udn5fvsej
+w6qyQkBKi31XYhAASBgoMI1TM5JTRvTqTHQACnFxxi61ZwMWTLVbSAisIzW1veK/
+h+IBHxtZzTRcgq3vtHSFNnPJvYBac+trqS4eZL2p6QQcLw61BebjKxq1f+34Rpun
+8m9hsABV3OZkOPiEzu/VEj1snXRkNQ9W9phtqstV1EKiq4F6PyeyqxnvieZnZePo
+tsspDEAxtKpNDwHLc3Ulv5wR2VXFwsgP+uUtPiLz4yizzg117awLjX1GZJeX7dHh
+K2SMk45AsgmqEaK8YgtsZntDFWc/wTA+PQwsxWJlUinJgx5wVxNdVrx0Slvh0VBB
+DF/MrTaE6TL0UBm4GKEyDApZA3hV4cxLd07IcKpQF0BnqcCh3wMkMXQGwRANNJoz
++lBnVaHD4c8J7HIlehuA++ZZRSyBZzRdQa509Fj3GxIaeYA5Ia/LRvfvionFnPLE
+apQ9lY+wvFMc6Lw3w/WT4a6iB9VpGq+u7gmYqQOMqzG9MsB03+XWkTwa/DmBXQ+d
+swcAbqR09CFn3Y16GGEVrKoGOdHcNfbO6Jcuy5VWW9WO3uMUIQdZ3Uowhl3humpd
+hPiVA+cBeEmJgUp7VsGVpcalqmgRcHoQ8FxZn5Miu5oyP6leByCd5Bo8AwKjWlHY
+GHwafEAWsqxTSOVqXItnsWmr2yVaoKbDgCGZnjpAV6E+GarcGtwEYcIaGXWHQUpR
+1NRjZdICm4P+Nu5n2/IMnPJBoVsFEC+YWFOCO1bYFFiBd80FqwB/9QscQi9Tt0Oq
+ulVz6FFP9qqG4SBBYSlGOauBsVLLFOoqwJmLCh+aBj2tSrdSrZwgVVS1mIpub/8M
+kHJr2UZvwXkTjwYmRg2l7RZhGKBlHTeEFCZG6akI5UPVv7jdUDPbdISkTEAb5Ej5
+Aqz4vTVDP0Wzd9u14l2i4g6MGssO5ReGwDpadX1DM9X4CFB+kjPc6XqK0VPx6zSn
+8o8VlM2uKa1hmBSZUUtVv8iKNGzfR8MKnYZ6W3WwdyQ3qtt0zFgchYUzVCymTuvw
++LgOvhNlNRX+snFIA9yq8LMFUcETnESbd1ekpAk2y0pm6F4uRYkHDQ9QcjFqWpVL
+Aw+eYQ53rg8shAxXgfzYl24bi1saqkjjooOTnBHfnYKK2WLYGG+xJFZVNCy+cEEe
+1QgRT60SkWueE96drqRudV0/eIYD8qhXY1TmT1EPLKcip2mzYQJQRX2yu8oTYrpA
+cbV6j3wAvmnM5OcwENKoclWjAyGCLhktDh/iXis2LgxUV9kNsyimyWKgzTgnuuua
+mCpAaLVNkpJgtLc8vK873aVAZ/yy3s3kTgjueimU7almNIoL0QlXxk9ldSTiJcHv
+58R2cYyr6D82AJYIBOWBBKEM9dmcmKMNZGM/q1TYWaldHGnXZMEgwHvlC3QgovpS
+pqxavFa3H0knmDre1E2bT0sth2wKu7SoSqpVeXqrllFLkQcCORyxdUYJeuAXj0HA
+CaapkswqWs0fyyk/xkR1zT4rtI8zLsfRSVtT2bJLqZdpAgcze8NXlZFTUw576mDl
+aiHaxHf7oGzymL2CDVR7X3xm1jTcGZFdxfUWzQOB6fodx+Kamufp7MLolBO/oabO
+IZ50eldDq0ykOr44BfqpL9fSsH2of2ZTSaUMXHJq9taU9DgF4lZZuLExVDEakqde
+M6Wh+b7Bh0tv2l8brJaUewkAYtpGR71e116pgIsUn61mpe3kYdjVlF1uMgd5uGFV
+UyUU5qEQwa6LQHv0Q1WE8AmpXceoRwUNz1bl7ZXpW5Vbo9x4Ff0N8ZTYrqo9gn22
+AVlZm3AxYxSlqybdos7OdJvrJajg0zmxXZEYVTHxtezes5uqa1RUUj4NZR5nVWdR
+jTMAblA3ciBnKG4PyBQmySghDog+jY4uMFCKhreaTcM+6taPKfIVqGcBxHeMhcpT
+ua2kTTF2c9a3Xa/Gwu/AttXmQRF7eMml+fkYDNwyKO3NQxPOiO1yXAW1TPVsa2xa
+yCZIEw7qIZ1WpzWnYMllaK+v2BS1qzQ6D/VWWUtKoOKfTuEeangIATlJ6C5HjgH1
+UeymceK0YMQGKm4FwqybkaAQfaOAVzUDjOoLkZWhv9S3Vg0h1Q9ybrBLZCnTEUih
+bsOzVBWsVU1c5AUZB3FCHLxVaH63K2IcZH/zSaFdltP0pqiUu3eJ56IXFXuo2w5s
+NMsr4OvUiOKMzC6rUqooIPYl1LzVCUqRFlkwazgglz0nsqvoadUELLr7XWoiufA0
+uBgd9/aqFult1qVKxSdldhU97Y26R+DLFqAMJw9Pw7opZxozWc3sfXSsDVIoaIyK
+2sLMEwwPU4htVL9zWBqCRJihhV6PrGIDU04ZhVBCwgAGV/X7CCqF3rpO7Jg+RGKd
+PDe5LqRpFeTOTItT/B/ozgNZtys1dCgzNhnSsWI/I7XLca2qqYdWu2LF2XwlGFAT
+shyq9G1OHXbdrenollLgBbQj5oaR1Y0Nx8mmUGlw1E1uuJ4U3PXgBQqddRgyUdgK
+nJZtCMiu9L7VSMKrUGe2Kpmoqp22DaVzJKzi2OUo4grYxoiWjSbOuAvwxFnPblN7
++MBSMF0D+ARN54AOq7is6mpWq7O0k6K7nnQyVWc+vmfjjhp2uncFCvljkYtTDfWJ
+yTsjvDtx2aX7UkrD8gZ1arGoR8Lne+vQm4fPKq8q3agu1Yvv23fr13/66je//fqr
+L/cLOMa7cCo17Q1K2VAlhmGqiu5jHJxO6TBRHmE+SgdOPggTmpOBsuDkvTjzVFfR
+2FNUC0xEZsCRWbY/9wGuVQ2rHcY4ygIvyB9a2lLBkuo4JjWlpLMBHX+GoMDqpOrD
+W3cerqpjZ1ChxtSiGUr0CA+L9eQLbOzAiBgsBZeoGvTwKvbRZUqNdhfMEhP+kFU9
++ZSQYevGF6+Aex6YRlF+mQ9lt4rNeaK4x/zrfNt+PMq0xGR2UUXprFjL5VAMGRUT
+2GHCYD3BV13yTxb15UPAH6pvAdQLCgYCOAttIpmAjLsCrOP2Cu61wu5qBNt0lleT
+6mgwFcN/M6kqgVLioO7Qk1l9702141UcL091Y4Sr4ncgnKr+XxULqNZZ/ulivpw8
+3gJXvaJT/0lFDKg/bTU9T2BUxCZ5ZTTdG1t48glYNnU7D4qUxA+bIx+8j72tSrmv
+dUq8++WrH3/823+1Kj/wlP9H9PiB2f+SSvzAI34RDX4/tjaRfbX9u37yJcY2VJ8V
+HGtSQLLDqaexbhQUzzyUWemfJt7LJ1QIIqCePcQKLK8zNlYdl1pUqrIh8g41Oprs
+6EQqKAcJPqDLM5wvMHOpvpUB0+cUcKd4264y8eZoK66yAT02nUGqpKDqjw2zlO/E
+7N/FhDxJtJczlxufzhaG2sZVdT/Q4YWyxZQFrKYvxbcHz98+Nzwbe6pmS4MQhrGx
+SrzrKkx7mbbmfqpI3a1I1dIXyqdafxXsNxaMAAzZG1PvsO2jHNdyTxfp7ROyssyi
+VYZDV5IxO7/pMgKYpkrqOt/YJap3hIywV45WEgs9GnRsr+s1TAkISWlK6s3Tg1cv
+Csy5NcYA02EsPCHaEo+gYLU0r25qA0Fi/dNFejtz4/Y2iq3FS2X1DWdtEjYE0H4E
+iqgnVUgxPFGkH5Z+lzSt6/xij7ujSY0uu9RUWwzgqSL1H8ZlAZz44UI/dXIEC1/D
+qw90BBPCCRt8Mj5dpLdP0AFlGinICoc0Jqaz6tcUL21h9qbAJn1bOZ5zGfF1qS+C
+jzs13VNZdaNQfSg31MR+oJ5xQ+c3bNaqoOJe67iHVGh9nkO1ZxZ23nZbni7S25lb
+qD5MVD3QGREG3DeeXTVf7dpdwR6sllp2PU2kt8MrWYYRoZNVF6t7pB07ThuviMUp
+57RU/7gKl7tTnDsLk6jAsUpkKWDZZVaPJ8U2lYK0cqjQgLNO9nOPAx7MlZRij79a
+76Llo3KKWrJB7bOgWe64Vdyq2K1Ss84mVJBpdBjJyBA+OHZdQcxW5RScHJLKHmYd
+aSnpUFuAbWmirgWADCiAfLOOMk4K+3OvAdvqRxc4k+PYWUxLZxLY5en9Urm/NYct
+/YzkP/cst63OV5SNM5JtuilNRpUys+KSon/qNvgvhlmPPOn/Eaj1yBv8knDrkcf8
+IpDr0331/rDDxLzM7Kmwn9ByY1SuKXivguM6VFeUBszq2Rp/a1hGdtnkpWquqpm7
+BmBMo+ukd3YkwgtN7PWoCgnB/eJtD3coSpWjVWcHV5VhpZJk3bna+KdVLdPk8oa/
+ZKMiZYr3hWqBGq2SXe2u89F7mFPT78oGY5ONbK2QlgqVmhZKbXibiUP1rFbI8Xka
+/j4+kzVRKKZCxuFka7AqqhZqfYrGm3RKzBrx1au3t/9/+CUFwim2X9fM5cj09gBI
+VfBU0/qs/Evt1JMSvucJSw2OfGHCdrpS1UhPZgmRBVXRbKoHDEweAjg6rNpHS0gl
+6epM2G2Ux7ilqGbcsyAL7l6lxG1XCtHSh+tUsmza3ue1lPDJzxo5814fKJZ+auYs
+RJmuL51LAzd82hYLrtTR4QJPXs1OmP4pGHbP8E63+AHXZhZvkZJ6ZeWadipW6eAP
+Xrp9UhpZ1eSnzdGEgdawq+csyFShkijUHANr1+0jEXifFHDmrQAnHpwEm9kqj2dw
+/DVZ3UD3rfrQQX19VqwjKjrNLDV63hHmtDsoEAVOWZ261e1ZoZtm2uqR7ZbTNlVt
+LNIaSncqW4eEcBasctlOvYceFtndmWL1Ys1snYn5qCoCqi7MbbOjAX1BfWuOZrEP
+iOjucCo4HNlq6gWsW40NAVEb2B6DmmD4z4nktipwT9lstXHACfmjVasdJakuKJwS
+tgCHCIw4Pi+S2xHVmsgPRRnEGhVkivKoZJ/8ljuKDunYCB+mDDmvxOuxRlWxaCUM
+QQXBxVtthDGLEQDKTmHB1a8qYynDVrRCU7yeMlAAk357VT+3GP0A8h2fF8ntTPHX
+CQLVexAY20ENMUbtihVjm/QB0jaCi58RyYcCy2Yrzr1Ghfg5y6a0A6kbExfQ/v6K
+h5fjvKsJjC1pwhB4D7XOSUH1KLzRBclUmb9kS1FpzM8L5N14ybLfAQsTtqdOftHF
+Ko8L+dg5K+3UrLR06+v30Q9PYVPVRoe77Oh9HGFgu9Xho88quNqsMomjIu0ZA73C
+6mDAsj0Sk0dTq24Mnxq88GOfF8f799bhgo2BRQwjtRnVj8Ba07tSOL1hH442zPqM
+MN4NNuPoRVkR2MTGBsQWAGkDuq5kW/tZ7XhfCFgtbwvgfi1n1RqFV3SqAJMUui+z
+vUEApffPy+L9gA1oBcIbCk5bVi63Ygic0uyVXsgbF2Vw6QYvl1GtClwMRa0fVyvA
+Y5BT9NU32ZJe3dFx1gSPGamqdIaCjSgqyYMOAtutTmCVFB57qSfM1fuJAmIMjFj3
+Id4J/qlR41Qz0q7WOlnBwwrl+ow03o/WVQMms3FtV75gQDkAQMjFq87Tuu925PuZ
+wuOJUdd8AnnvHqJC0kCqs1UltngdwDUZl3r0nBsx3Suqpz6MvR2SQ1J9AQeEzVVN
+DaxQewGfK7B6qOO10O1KvsWq6gthrVl7ZUVxWEAKvAkeoAIRU2RmkNKlfGjEulVg
+xk/V0TI4c95CxU6VFaGqK/1+nXrqS2yMqTIFfK7RqrAbAm1AwIo5ZR8tAw3EKNzj
+kJ76pCmS19n2QGGP8cZAqv+3Vd252kZ5lvhvAx+s2ieIPy+1AXLyWaMHqLRFy1Sd
+pWJMniv296Df4vWDVxdfzK/ZTF7RyMoSU+MPtUNVkJuvCmVR1OyeBqLHDtmqZaO2
+6lUlRirSbEs54wVDop5YakqGLThU105f1NNGYbZsCh0GoN0M1J8p7vdE24fQQzU+
+YEFBcWqVZ0pQx/GKi+nKmbJ+t+eI+f1GUofVoU7GigmQ5VANERypU0hVXk8S7wMN
+8tTd1ml9FCmlBBAVkQduTzViBbwojyKF+UQxP9BLzugg3ep0bgKC5m6KR0iqFTb3
+nk1lmKeLy+ggVcUiFLAV5qrqLbN4dQyQwpFB4GEGNeGtI003Q2wWFXeqe1Cyaq8Y
+sJ+KOkAIgDp4fI9Uniru+19iVFV6xBZiX5U7GwCd87CFKiAfW1PKoN3xKWK//0lx
+vqsTpghjUPfSEcWwuvPvtdYVnyX+93vXlVgVIdCAoSXkoMRSVRLyww6VTG+lNIj4
+M8V+a8yxDw2wlrFOKtzQrUQUY0o7OHc0c9YdQtQVRZdnwd68a/sDNuhKsOpVXQ+q
+6rCqB0TW7YyaEKvowowWJ6poaHmJvQDH6tyS1AEZ9LTSM8V9m9Zmgf/BV0ysDVH9
+ntUvSzX8ApxqYmxXXDs8R8y3FWhStd4qZs0pvGYCRFUuDzc31OnhOeL91//91Tf+
+X3/7h6//cpvevGTollKC8XeqrdDV/qyyxl6JLVXxVy615wn6k8cF3YuFDjwd6m2l
+e2N1tG4qHoNbrNVYGKSHwoes7hUqSwuNxIEvljUHgPHWMZ7aLsFXVLZsZ6uErrwm
+Bgn3VpRNaVA4RDzVpghMvHvBTwAbnyfyT18jMmSAILitk+4Kew4hKrBwlgyF4JXy
+NjE9Q/ifPAsI44Y6+0Sv2HGFFkb1BzJp1QToedI2uB3c3O6xDTSHNjhxDTZtVbcM
+7HmEiOeIIYOmQw+fKv67j9lytdWLmVqWyRx1OEfhEcqKMIqLX0GFSFRdQFGKqlWY
+gxK6st5ZOVdgf9XSC+p8CdtUn3eotxKHNv4nD2zIZMcOC0Z3CtXYCrsKO/AKTxT7
+3emDblwrNbH7IijHK/NM9cEMwFbdrwKWMpb7rk/PP4Pd3px5V0BnVZj40fJhq44s
+LM/MZ4n5Lx8ca1d5ytnjGib64V0eqqILMcgKr1B2sZ8uPVPMf/lwRgsKAzKDEtRc
+xk92V0Ez+05ORWbMTrvWMFB5tT6YC+HCTHIv0ya8sQ6kYLQq36PyEVAVpAwmA48b
+tcMKacHy967OwJWTAVFFNUbXtQIOoz5TzH/5cEarDDSnAkOxm1YzUMO6BnOfgE1Q
+W+26VurPEfPHJRqjqFaFnVP5niFbdr5T4WBWpO/PiPmXrU/w6Mh/l/UJHl+LZ9cn
+eHTYZ9Qn+GS8+zLPSilm4ctqBNgA31F0dsTWNYTqHinNQrGu+Zzo7k0rtEcRatuq
+hRBskFBJrQuzYM2Mcgp4BtsEomJg8OqImaGmObIT4XQDHYb3eqX5LDOiSlknhtFB
+TlUGUFcreV2p9WR1ClCVY8L7uLj5RHTnRHhvVt4KwMylo+HCU7LaoowY6jz4vB+7
+joGyhhOivG94nbwd13seK16nuuT1LhB0FHLY6YxIr/LwrUoaTcwsFtVLrZUIq/KW
+6jVkyoL3tWH2OVFeVYCVHxu87VCTm75Z8ZAS4KKq/8n0whmsDibdKohdVHj5gfKD
+nFVnFUucca8qcK0ayVgCIDQaB6CcE4hv1QzxaKC8lXfa2wA39QyWGnbF0s+J8Kqg
+KqLy4LaB++4dChZUQz3qXB+z2rIqYA4U6ITorsq/hpmAwvyg0M9aANcC/8SURpbI
+mzMiu8rDR+oedKA2OTuhC7kUbP/ULrOqGqD+w+GB0nWPjlzTmDo/0v3M6A2WgtvD
+686EJq4KvNJpaFeVs1As2G4p+5t/Ko/RO51GbF2brgS9NzrWXcI6SlRwyGj4IrYD
+O0gKB1GT6IlFHoAmLHVo5pzIrlN6mEs9wpo8G8PibdloWAj1+zKa0948tJ0Q2VX5
+153mggwlq7YQq6qSfgDbG3HtVt0ZkV3kV2CFwKlTBf48M/NRA1uvCu+eXbzwK6rs
+lc5J7DI3Ru0eLBtzQnl1UOrV0lVnG6vrZkuRg+BMBUe41hSNkxW66wvzcBPTFDY/
+BTovqTbgaJ/qAQA19bKQZjWdRxSMufJgtJYGuqiqdRhdE5c/J7DLwrJlVnVSBF9V
+uTQHIWzJT3WDYAvrbDpi0scJeV2Vq53Ry1msdUQnqpGoNw718vCAnc+I6ypbntHU
+i5Z3dRV2GdQJ8jiqYDcBA1GNyZZo4ZzAroaWVsFTFT4JTAwWStzUpAEKkNG3mUvd
+zsVQti7D5TGyEiYgawAmFWsX1vSoEC4wqOgWin9U5VgRHwhXqXA5JwyjXmGqJ2NL
+EvFQwWQ75jmRXU0ZKtqq7mfaMl3FQ3lKbwWXr2aFXcUkglo8nhDadU2CnXstY/OS
+WZXw09GmAIIkuFZzOw1PPjKSWy+pFC7RMzO81E7RBHg55Z/jZHocfcW0x34CQPnk
+GVX5KkWoW0XQqi4sE9Z4O5HABo5Ty25l0LOdFcSC6awwgKM+q1dCa0Q82E78y2B3
+YUuxNT7BzLpSuJKK6eIsJmTBq3SLT8WpoUneENG41xMgyidzD7Aa5dliNm0qEDVe
+pk2FeDZ8bRd5LQJNZ0HKJw+QIwd6zcyyBMXVqDp18Epz2W3m8GTR/uWDrrvae7Vm
+2jVkRo2ZakRj1C+N0XXuM9n49hmi/fCMBQkRltRNClbO5zi0X6pYRZwb/NkjezYa
+N5ZRHNdxytiAUXPuovi9brGizTU+NpxXuWXxRvVcC7FDxJ3K1IQ+im7vKvBZ5c7b
+UV0EwTxDtB/m3mbP0aoDBiQldnSUVUIX4G1qOZ6hAMCF2p4q2g8P8H1BxY/4nDFU
+wxH8r67LYCYVGjjHAz+WvdsRe4VxytkcTTpYvGXRpKUA0qFT8AL2q/4kDfw4sGoE
+Qp22wp2Dm04VbfG66ngJtbfqb7O9akyYoMBmJJnVRFutMaCN0LGUINK6YhNhtApD
+h1jITJll0GOd20TTRlEzdD67Bgxk667KZSjJSfx5MWHFRU91IgACT5fwugNyOoba
+WmICeDQkcc0zkrsYlflMEZJQfcgzQdbTWg0nDkZgg56CMncqV4CncmG3KiocROHV
+ggrYyKqy52DZWV198RcnRXY9OFjRGJVtHUXdwvCTWFSwjA7SXTWte/eu6VQpQGAH
+o9BtKWiTr0XhiiF2wcZfPnVs7kJcIbtWdLGPbVDp1gWJBMtOddtUJUn1lk1GWPrE
+Pem91bqdGsCo+epC70I/gjG8Ip9Zlr0Azs3aeV+7gM+NLIqjnrc5dc/W9PhJ9bgS
+Z0rVnEOiV/UrhpqzRR/ApOCKWtjtKjKrcDg0GBQZY07enWQPV0NPuAguKro5i2CS
+Ym9KU4gqKwA8LUGtrpUJruoFWh41+oHbRxUL8epUGo9ayVitpEjJVHTdnfvquy71
+9FFf4QR+BOfsquLdgqQlqbIBtvOc6K7LgO+uWisw8sJ+zvzFq2FBYC+tqr2kqmtY
+tROCuxoXGLrM0SYA+6H+n3lWEHhQ1a81ykmxfSxh4XCagnIKZ/TKcsU8qCC+j0fe
+q1fPLBtbPyu1jyOrmbnwnSoowrd7c46/qFrUHPi13Zc8U80ZGOomkKV0Y+OEeLQd
+8nAqApcAn2sttmMreB0/uofXbdVvYK/VHFUeQvWUjtSXroPbuTIUG2Z9VmgXFapn
+D6uzBUwBA7gjhdouIZdp2NEqVK5YBHtKZhdVQtSLSdWawNJB0YAmGoVPzaNVk/Nn
+RHZVv2Io+A9yB15XNYSjOFFbsaljFuoA7lOBlmLOyey6x+Iq6JpXOXnTIltNpXiV
+OlbnPhqG56UcLauY6Z6cavQ6dTgEx8A8ms7Cmpo9zAXNUN1HB/qEkBmv9seqZI1n
+SK607ICdxSlriCVGpSNwup4U2tWU6+JtuwpKzXF0ALTraNg88U8shwrmKmWpn5Da
+9VLUcpweNTiOsRVuqkP4NW0MtvDyp8R2yf0zsIHlaL4B/fivCVMa1rmookPUfSbg
+vZ48l74aWpUk3UwlHnUbJrZS4Q/WK0QKV5GC0EXWLVOwaq6Co4NleR1GTAdUsaoM
+A/xaCbAefdPHVPVe8TG6S8ZhehxxywBYIwIYLWYHm6Mg39JPcr/rKiH9CByDZKp3
+HF4DnBNWrgowrKqhPn1zajpwQmxXq+yy3mYozaWNlptKQwRv08gCZPOU2C6PABz2
+2+J0KjYJ6KcSjKZ3OFZugPkZiuq8zZMG8nJkVGSVhGdAbaZpxirQ0AGgZo0CpxlU
+pQ7zADX4K9wJajLE6LHQuYokG2TaMJLRq5GJbhGtjnFbXx7TpZ4kSuywRl0gsx8g
+QKx7nfCcoUCFc0K7nHFU3SSUeR0wWqkNygvAsuGYk+reMBmMzxmZXRYfabapLieW
+Q9fg9TinDWYeTZkgR6dEdlm/AujB99dWw7iIi8efq2CYShXZMfc0Hf9fezsps6uG
+hWmpxJ+rqm61FOfvlN2plNUZsHBwdUW42gKO5GMduSr0IdQ+vdsxqzTdDorKjUY1
+eHRnAjFz2yin1QVdeBnV56xxHqC0qCXqsjqtScuUk0K77jipCRr1fZlhzM64SlTH
+UiKtAfTD4LODz2DIq3EVlbdW9yYXVV9Wt6aarWcdKr75HBS5U7lCvbpqU2lkwEHQ
+BDMAHK8y1c3Lx24AKcWVk4K7Hlx30zW5tC1r6VCgojvWmsDzVaWTqvfWqgrPzuos
+MgIfLb4p0VCnVDCGpvQz/tfYPz31XNUSNjeZRvyEovmtIAikqibP+o7/S927Ndly
+XdeZv0jgul8eGZYdzWjLdph6V6yrGiFSQBywLcm/3t/IqjpnZ51dVbnLQASpdpMg
+gJOZO+dac46xcs4xRnTOqkOv1Bguhu6VE6L6/Ap4wVMsKRpQriD7NPVkSq9SGjhg
+30tp8tW79vI4lrxLK14qpPIKY/uuJm2Ft3tpTvMZY3756c+/02jG35GEf/jxl5+e
+ptAW0Eaa1Js/YSohdLFHm3VA5iLYTx9J6zunnBduMnQi2dfcO+4gDUffiZHXKejW
+SBQsDkhkkhovC6SpSFu467xFBhx1SUBqQQKr7Tqe3pXdB7HQ+XZPkmahAEn7E1RT
+ZdWrbhnYR4llH/rBb4fzwsNLBGjWcZzRsOCH1wHH0UE2sj64AIFNLPWt9okLd4iR
+Gg0RS0MWKBqocEO6RZT7QpFYD4b35bLWeSeDkgEoh+/pMwzsOfSuHjJ9TZ468jPm
+4dB+fW71TFt139cF0nKNvdnVsCQFG7kLN+jdhghYDSyOzL+xwSrDOTlidplGl0hu
+3bABecTFBnor0qikbFq1oBnDJrLHFE5vIEWSi2cbAPobte3hsL48OIV4pQ3Fk82Z
+Wq8qG5dyXdUJl3rQCYGOKh8L6cvVe5BGv9FiV5mV8bmDngLEChzNx0vhfJ6Aflkq
+9of9yxNTy15kOsQJ8GjLUtyl3uCn/DplHjGhgrNejOkbd5HjLJjcHqdQbMa1nrQ7
+2QkSQ9ekxVTLeVOba7EBwr502KLP0EsnN+RAz3JIDqyhE2UTlmzFSwe+AvJ54pir
+SaEAaTt/KEHdDmcVTbCPeDGwbzx91ddgkmSVhObKmokHpS2yTlmCmM2S6uFkV6L7
+1guCX5F+arS28FNYzWXsXSHLx/Ltnwmxe762un2NbKZ5vVuzlXOrTVY9gJIDgJo4
+Kuv4ZIi/3oVqTbkras/TcYrEpuVLDAkBFRIh+MI6YEPr5Lu9B/Cm6PunXU6Couxy
+XmJXvmaHRsnzLR0Gt64J1CxH+h4ceVr2nR5WNqaFscJutlzjPxfil6eXdZbTKvUW
+oE16yIM3xsM3nWZtndovTc5/IsQvt6iT69ecpPAP5W3wwJpGP6R0u1bPJ0Lsn69d
+TFN7EnwcnOfDqmNohH07qq166LK+4cXZPhfil7vMDl5saUoKGaLotz/ysigcSdnq
+vL2nRLLTtGmCoOhv+LWTKdErz05v9U1+JdmheT93WkH6MJJrZiEOEHRMWwjYHO5n
+2anOq+ePdDo/uYtfnn6rLQCqZOFEcpQutlSNmlhI07LZhQG4H35+IsQvtxgb5Ajh
+FJTIQf060+QVF3+1AJT1MyEOz9fWObK+HkHfI8gP3iVjUg+wgmykuJtl6fr34PGV
+u4Dm5Q5g9NEw8tTieXZK1EcdX5ovrtLnD3seizd5EAu4CJqS9C0EesF+BANU2XIF
+wXdIh7JLL1xmB3C3Pmux/uG2OrsMUjsxRVMK/MLxuRC/PP3maQ7vCCNDQAmtj+Sl
+f0wlG5KZiYCWds/g7PIt9Lm7rFCXjIYJLbxAHyxsgelJU+kzIY4vIc7SsCwpDokk
+DTX7ViBbSNyBLUTNKxWE6z4X4pe72AZirhJHU7uBn317kRuAS9EpT7aTeqMxCqCV
+Gh5spMotc8wEzpoN4dXBru+hw3T1uCFkmaHJEnTIzw5cUhrwLGdQ0eD/qG3BSiSN
+v7k/F+KXp68rG/kLcTGSqQWrs9NgHMBSin0OxSbI4/afCPHLLaKM/dY4/PCGFNjk
+XEeGm2oPHt09GuKXGl+8ZPQBMxn2CM+QBzrbeevMY3ArcqG+cpnHw/tyB1OdHAPh
+O34fjmc7Wh2y2cMKxEgSvncdgCTemSvJDQmTaN7dqWGGrFLAIYNYS83aSz9ehsrN
+gewdexycnKAA0hcI+vLL1u8OZJei1IR7ezy0XyFWJ/+mVYxEajTq0qaEw6PyQxCS
+HtKpaOXBsL5cXodrIZEN1B2lkYjMb18lTydvvv3wrv3todXfLqz6jSHVbwWnfnso
+9bcLo35jCPVbwaffHjr97cKm3xgy/VZw6beHSn+7MOk3hki/Kjz684//+uMXifu8
+/MUP//Lnn+aTynsfLhrWzaJqV/lhs1l17h3dlNJ6lZ+4vYqS3r6RpG5AAMS3q9tu
+OcKtJliVKd+lPGeHl91FaWoiW/J4Coad3NrWt/y4SNXb2s0uZqOzBFP0RQ1AyUkL
+plH3a5jHKLLaIKqTu3KdQY0pbO+LAX77B7A7bWpDmgPeOhlihGV6MLYdBtv6wJpZ
+eftKnN+JB9VlREmL1ix/Of3mxTtopA1SVLgY7l/G737+96V19E8/Nu9+6D/+69Nw
+ANupsMFsVZMHMd8WCHyI+7sWsutG30nt5Wi/cZ/RZqrykbFr6PN3m+BtWU+mIrvK
+ZsGXGdTbljy6o9pesrEU59rcMWDSmj6mNoleqxskzqIu7hx2sdE005RFKc7qHwE2
+Lf4EcCxqfKkVZ9flYL/x/Ms5sGspshwrRc6WRmLxa1GPQRPqHdc3jnUt1m/chEpE
+Ni2SiEvsjqLv8qxxKx0RR3Z9K9SvJaHkMULNGGEqDfqsfpWgJqtVcxubHdYtz//O
+J6Dv9Lo02gqehXJQpqxP7VAscSzJYopGKVwyNXnZFhTNSbK3+1pJnaq8HtiWKbJy
+TtslB5ggSMTFyvjS2pjIAE0doezhsNdgqURJ206K8ZQA4Tso+PWTUusoyuw9ckZM
+ziSpOMG8DuPpBTGD4/Q434JIry+nM3O7NXC3Nwlq1ifTUKtRJceS/SgkL5JQ004W
+dNSX5uGd/MVA+k7EisS0wLuaIIfCfBySlyuqE2GCvrMj5Y0IvpqDV7y8G0ZUy+ij
+Wif1eU1LskTJjZBG4E3VZwX+FSnfanzSb14PHBOgx9sGdG81E8J10twjz1Ht1F6q
+h62QWiuBoXN+HJKXJ1X7xMoU5hKHbB5A0hY8zy6FTmmgTO0TOaUPQvJVXQv6BaAs
+a0AjLQvFR97uBkHKIWl/uEuehaGG6QQiGJahBy6OJo2xCbujNouDEOUSavo4IM/q
+Wq5NIAv428pWWfWsyR8kROKtlnnwnV4Eq0ntGtqcmhhqQ87mDcDpRnNWHWSTn+ay
+TCNCFIBlsUkvoshJk0LswKyazNzqsSB9QzC5Ufk4HE/PKc0aoBm7LgJEgkw4+ePq
+Y5GM1CGo4gz46YNg/Px8ouJlAFRH0Udn9huIwQY4eA/SY0kfheJZFWqDcoNcQsGp
+uQJ9eTw2mhSUUlpskck/NvHC5ngRrZLjccqjdqA92J4yTZBlI5PUhexlNxVMUL9s
+mIBX4uamkyN31ocur6K+mnZU7PyPQVSGJJkMyHHmJI87/pHUS7lTb/C6UWNjVUqI
+C8TxcTCeH9QBox3Zc/JYbKsJf5PpAq+OCgbbtTXXCCv7IBovV2PRJTBnA4pvu72U
+NrOgIsuMsnr3O+WP/9yuSPuQFYbMi3vXGCfVz4HEhxxfalYXmdpsbV9vDAdfvInz
+cmul0sziU0gxT/mthiz9oCHf1LwkbybBs2ZAFFILbPpOWY3PTn6428qWKckQDxKg
+QEIHJOW31DgW1VZZByRhyxEvWbClpJTVUxlHeqNJ5OLDk0KGum+mkZZnsTuws5LU
+3KbkS2yoroF87mW5qzEY+si6NcDQZZxmqnqoVVNzULPTQ+E9a7sMXw9VMo1Hshc0
++Zlnl7siWJDfROmE5s7xYHjPN6GiS8bsmHClimjwKY4AV6wUGwM1iqRBicoZGJPU
+IUvuRhLZM8rdyUtwSYLawwi/9B07j8be2+Tbqon4QeTV1+UTcDIfEpJySYShD+m4
+Pxje88OXOTqvYlaeVnqlO0vHuRoDH20OLCgzxnR3GODq66EeODh/Ueuz/DgJKrBF
+ApzV9Lt+Xe9c+o9//9++CkBZtXSpQaLMTNEjw5cloUxTZQgAFSajvdWxfOUOE/xr
+hB1ku0AFJl1KMBc27QTGhjE5VQqaBcXvLP1GSfTaaZRFpW4sjYUluJul3dqnTCZk
+3Lujlb35or6rBlDwoxdkAGPWujzYzGdTHt23N08OotudzQk1rxrzCIFsW+yAA8no
+JdjSrfogHorqt8tToQeFFsTjK9XRS0SRNyUcaZT3PwjpneHKtEiAS1bduw23WXyb
+mjvUX9R4RZnsY2euH8byzghrpvw2TeZE4zKYMMk9cgdz9ENoyh90RIUEe1AVp1wd
+1C8ig1irvqMuf+zCUoB8e4mFOgkzDCpuAVfAEsi7ktQibWeJ0BVR9U4SKFuD5/PD
+IN55G0sbssqf3YH7NeKyTZT4HtXA5SbDav7xfj96d0Zj2dCbRaYpjCBR51K6vKNt
+AGul+7Dm9QVvhrUKL6fC5oButXjBBDX2R/XvD8cyI48/+alcCtrNhYN2cJUUmpnZ
+muOLUy3joDoZopGczWZk1kmQoJal9ml+jlSawC2tShSFCiVitmTVCxIdjZi6CACc
+e1kNNYOGAazyyvP8y9L+7AIoudt4LWQ3Dzysg+QkqKA0k7w6daWXtQ2XbtJ/z1kj
+A/NCwG6uSsma3VFUGnmE8hiaPCWrfpufJrRL4frVNGzeu/Jfp4bNu+/i8xo27132
+Mxo2r693mjxY1sNnYDZZB5ZSJCtUZFapBvd6Z/MCDCkW12J2vrTmfody2zZhk8sL
+hV92OsvNfjSLmhXbchF2K9FsEjs8wRNH64tgWiC8hHZKMY1cqkXZ+dGHQdPhjCPd
+3qoJaDYeb9tyR1CrVKnam63L7z4yaRZ6CEmZlAQu1bZOxCsLAYJBwqFMu7qauRC1
+03UPb0tl/QjWCaReDRI5mbdShr2Pl8J2mu8YTXLv1JZlVS76BvuECHYDDbD+IW27
+vOHO8u6VgycQUIjtjQzme5zkiAny0PdsfVGvaUNS5croZMkc3S6pyaC6aKZmEz/W
+9WSFNvmsqxfZrzQ2Ocb5YnWEsUgSSbP9PRHmTVKDGLGpS9z9Ymo8PbEIJayHhRYT
+uLcnIIMPYyaitx11Tbor8cpOu71sdv1QrSS/2kDIh2wdfJaUG9XRhUshu508YJu2
+MGCpLG1HjrTdyFarqh1B/fYaXJJT08WY3V5aijJV8zL82lZVz/nJmsWRKLFNVWyd
+f5o0pACzd1Q08A+peElbD0QVR91qWrZUAtmWLQFeSmwRhSBk+oIrI4cOz4wiY1tz
+qwFwLGjZLwbtNN/hdF5ej77rlTQyMRpochvLQiiDHPeklXglarfX9aMmSIbRN7qZ
+Zdw7jkMi10blqpcS5D2lKR34NbnUTgdsgP92EhGpRqNOOo+XFq1x7SIWuSuVpXlT
+UAXJsQQP+hKOzBJABkSYqjn8nCtsyvOrALFsOPnxRjNluxXAy9YFguwAkexS6ceD
+cop0NjS8OeI4dmMM8m0FqY6ydkxPnw162/5aEO89uXRe40iadnZRsjlq1uAnkLVd
+jsVaOY24Ui/E8t7l/dpAMasjpuCG1AKHHVK2Kaqttl4J6cmvnvTIi5xOwp+gS/Vt
+G2pUWZ6f0WIHXQwf27VQnq4MSBG896R5SRCB4NPxzY3iAd53q6fulaKcVISWJhLl
+e+f1q/R9oJHIO2hlUW6gT6RN7+VCLTSiY3kQPwkYxCaxygEoykLa7FjS9Ab8XAvh
+7RNH6QrwNlgostWoicdbxmngEqIeij4wSqzjQujOw749mxzB5kbj6LIPo6iMEFYg
+z811JWQnF/U2k76NgKqzBg2pLYIKIIXcii8UK16Ts+5ayE5W9YUkoyFg+cpUL3fW
+KV+B2KVVAh2gskxNAzl5yKlZwnkjXS99hrHeNWiqdfqKPmBRcqGCVfm8YGbwK6ia
+vsyyA4hSqoMcBCnugoVpyuKmXgvZ7RMH0rFbRVq4I4kkwrBMdJ7rQgR88RqK4P9d
+CNnpFQsEW71mG1n8AQLOVanvcm1fY14J2W35BGRLGra16NuSPIYE/tuiekBgJyvX
+8RcjXIvYzYWL3Ng1ozLkLgIi4XXyvBUcZBfojXI/SP02wUKNS8aywaqhIBR2HEWu
+q2DF7sikXk4Cy1qY+Dg2AAViqU7CFILOwvZxeq5+JQ2AqR0tXNxjt6pk+t1u7AXU
+BvAULsPOCIH8UzVQGauce0a6EK/zHK4+0C6VgNn6miYbyvxmVTVAe7/E3V4JmVg3
+KGHgEddhr0A29bxIH2ovD/MuGrpjP1+kb+eLm81jAkpr9J181tqSCbJa4ch2KevE
+i5RTCrUCHMeCU8fmlGuajJKbZ195eXslI1V/4EgLGRjSpde4ZOfS9PVT4gIQIf2L
+TTb13Wls3Ia32gE/eiNhS6ZZHxuadcSugAUrK4oXL52xXf0Gs+YrJO585WF4vqUv
+hkFyvv0QhSKHRZn5GHvpgOskscG7SlkG7PqsvOAUR5/L4EVA61jJdqdDj+ta8M7q
+HbOkApWW9IyRXW6POhP1gfcdWNwSe4bTACtszUUdJJrkJk8OaeFIcpdE5yEA08qt
+UrBzQWGzwA751VfYQZpkRpL6SlBbfSgBuzQpXbLwroXu9MhJ7auTXRxloECqSdKT
+D12Dr0d/BsAzQx8vBO503RKazbuCpaTXAWDQYfPyLY+uryjmWti+qWwUci1IbgVH
+WTReCtGUy6mXre+Z0nCFBM96NWq3+h1NejBQNB3IGquJ6SAlBQl110QucpJfnse0
+vT7YuRatJ2CyTfUkPt68tJbUdbAEfQEnsKspUBLYoZr4Up+pZ4lVaY5xqV7JELOx
+7+a8GrRvT8y+NV0y05PKDtohZzp9m5D9rg1cckvZJY5LMft2WaihXF2bzlBlHugl
+YEA9kx+QsTNf4nEnbOPUWVSboNtsq8q1IOZMjW/kiqImSoCkLxd53El+Nmur2AB1
+jZKwAepIySQOmU7tQRSoGEv5R9+x82bjUGC35E+SFEN9iqwnqXUnKcVSBIMG/fWH
+/FygpuUqlXi1IJ0NCU3qbGVtdqbma6+emJzeRl/SPdTHr8Sdj/xQapAmMkQjy/Jv
+S+P9Co+7va4+TKopT/qb0JUJrhaHM6w1ffT2l8J2nh2nOASIipcaDuhEp+8yjKmh
+Q+kXkNfooNpdxP2vB9PBGBBBKldzMsztZL8K+LFsNXlmGTn+Rmm/qm9LgGNn5zqc
+VKm1yaahsf2KPqvbIm/m7WUOmA4Xm+3gVp4kY60hketTuRfuhRl59pu5yt5ePTTk
+MSnydhbgBC84WHmeg6h4MRBNacD3WC8dd52vHDXbLIZldO4rmZYuoSfNBPjQxpvf
+5D7o7dtfDZGKl6hApCCXYZKLsJWsdqOUlpSw1Pe48nvl7uqdglXrsgY51DciMZOt
+79LyXnWOFAVtypJDpCAmfbWJUzZU3QuhHkELmkbhGjFIQVqnPGaxSxNoG9QDmbfk
+Yyk8SD/QkkBDrQ7q1aq2eno7sJd/gb7AVN4WuBioRVKRXW3jbxu5aKuPaklp5o0o
+X70NmUuqM7I6y5BZ9RfGo9FI2xiKdDHkv4zf/emnNvVB0P1gw9PHxiV7mOCMrN2K
+mspjYA8kNppkMIxMfXtPl4N97x57QSpi1sJiM9g98j4Oe0FThu28HIkjNe2M5qiH
+IFGgIaiVramjA+iTA2ys4wMe+F49H/rmp0weNCIBBVIb/YRB+g2eWmnyV6rR/KQ4
+Lof5zrOLBIMdNaui2JI6rKycZKPT1TbVZ5c5cb0W4Hs32ACHbKWK0Z2XZrIcmePU
+OTNIeD8c2uNEbVCVbACsWqdeKKqS5G1YlXVI0wKQZnmf+RNRfVLlt9NbLRDCyH+u
+FKVGSMH2W9Zx00CXO78LuONLLfOAp1MWVAHYJEdhECiAMYQIi6QcR3k8UOFV4Trl
+0hSXXFe/BQBeHzqprNIZErT17hMBfdJ7kZxOFsCIec24hCi6yLiRJAjZI0obvjwa
+y6eviGPU4pM+IXlJrLJ6F7tnZsm3hnk9jHP9rx/H+rtf/vJltT+DjtuXF5ObDo1r
+x6ejUMlg6pWbOnpcTqovUotme63xSFDfvJkAOIk1q51zEjkYvolkUrGqDWfRGRnQ
+3B1d5nJ36WWqhcN3mTWQQpxspNVYKkmNMqC8zrYdUpTuG0R4899Sq9xRJsRePkdO
+mvvqmwf6PxLiN3/ENCGEaVdNWZ8VRODjomYkaAYpiHwKgq1uXg74m3eSRdeaLOkS
+S05JftrBD9Z31YybXdfD/+X//1f1YPc//TT+5Ycnk/KnNroE32YJACplbCoBV/08
+wABoIhOMYe2I9ZHgv3GrKreEvWEvZgLl+mATBjjmgktxr+abDByGFEHU1Nt0digf
+zgxQ1fmRa3YZa+QrKEQYpNcrTbQqK6a9pMUldZ6UA6Cz7LhMsawt9iMkqbeHQv/G
+TyjZNWdThfdLRFIeaRICBRIeHSAsBxj2tO5y4N+4z0hms2DtmPITJAkK8C62qMaZ
++Pufqsvpye2bVSRRPlvELQi5XJ5zMOTDY9yzSbDWfrYup2djq6jMPVc2C64DJ5LE
+rjrUtOEzPyYkOKvrZrc6wM+a/OJFzlWhTDzA4RJZwwqNHLAMtLUDtVPQaQiLosuM
+AViuHkQNGncIC78LQKm508/W5ePZmxw9am7kb4A73Ix4zy3PlpGWDoT1/T7m8Jm6
+fNygHOMaQT1BmZ8IVU/wcSmB1thteaAuf5mA+f3T02d7q4nMmOCfe02NgSWZUBuV
+DuBE1TQTC/ShXfzt8tW6OXvt6n0j2RoJdWYdMtRmBKasJnqdJI7kG2xzkcZ4SlNy
+k1Q+pwwi/Wp9V7JsRv658/x7jRIgTVFJPxadLFUdf+jIg6zUYFTAbthoeGjnfnvs
+Is2eIPeznQZYtPTEwuuyDvaTdUZVBuw5e323fru2PsaxJ+XcVycsr5SZrAy0i0ba
+w/hcYn6Su+ZSx+QynMXpU8mEsZghNehCTAuUNLthPpuRn+wmxgZHsPwC8eIeMskO
+mfSfs/qpYMb63MHLb2oogRrFpOPlqNOm2X02SX6qRi08UB+v1CExeU96DgRwTy9D
+XQ16SIO3wYfhY6lDrsIwzX02FT99k4+yD9pqD4xF1b2NuWEta/tIiaiisMvuT+Xg
+Zy8OA2RLqU3pXrIWoQkVdgi8I13566H996eC/pefqO/HNm2HlYuZct+Tp3umirBJ
+HS+3qhFkLHVdPLRNX98D9LwyF4lEqCVNPJjGehJZjcs7mxNwV2eEXntYXTpe3zt1
+aDdMjAO0oeYP+dl0UeHEhXbQoMTm383yVG1qnpYB/ZQaObvKkxy7J2PG/lCVff3s
+VFZrdlb/0iCdrRwksAxxKZV8ttTUIp2t66F9fQMWIrw0b0pQJOkGCVG0pdapJfHK
+N5Pv60kpEAboAqzPA6Ug8jiAnF7fjAfbwjbSmzpq3w7kd6NcfgdWWN87pqzRCkvV
+DEPN0KTS6aO++MpjXqYU+ljtlnhXWn2YQDi07LNpWZ8NoGiud9l3TP4/v1pmOSiW
+wIpYupq6KKlctbkaBcD2Mm+H7bspMWXUxW63ErOHK6t5Q4b1PMLQ+Q2rbZs399/r
+yw02lZuaxo/HKIfZBebd+lQViPXDkLxMSkn/eUSpBHoZ0ICXZ3FiNkWGL+Ls4Cfz
+3knh6yuSQ0omnHa7lHmfXZoGluoXlBX4+zBGfcm1XXr8kp1w0rOT+2k6FIDZgKBZ
+ipC0kr2+Z6rHACbVyJxwB+ozfx4qE3sLvnKpXDUX7+Z2a7iPQ/LypKAUEjYvy1Uu
+sCzP0YDNRnOMze0kb3X+cfwgJC+XswCc6cagtmf4hpPRHJtQbaDVGe8+CsnTvBSZ
+ByQulz0KQxdJlyP0oUcjKmsyRY5XWz4OyNP1WKtskUGAm1xSpzw8UiT792SLHJ9l
+QTK0MgdoEUA5jRwkU3G80Wa91EemOdz4Ijl3HS7dGhssEvGzcExIRbTJSWNXZqNG
+rW7qtbbg09k+DsfTcxrZFGmIvPjAz9xJNYmaPY6PNa2DKjWVXz8IxvMEm8lqDUqJ
+XDzVqSJRUJMnW9fmvMtHoXgellKvj9Iob0VNRiPrm3lVzo4yyK76/R4e83EsXqav
+dm/GTX2YT1mqjVPTSMHZqGMg2ZjBlHTCOtPyGSDQnhqfJbk9op4iWsnxE4VIAnhy
+bk4DtjcK5N7lkI0KWa098oCrlGQrOwwAunoc8+NgPD+olSo3oBV4Izl/r/kK5dLh
+bJGUQuX/sUnHB9F4+dmeZbdlOTtjnMGwNuI20oAhPKu+9QX/55/HlZknS6rg7dS6
+qCZqMm1GwqJZM77G9Ng0qm7T2/0XF++jyU3y/iEIbiDhBUTW9H6NPGHVXkQuNVDD
+MfUtMi6p24YlcXen8lvhcwv2ZUfQUdd0EgRSH2AmeZtWAfz6nuRb1fFpkMsC3B4u
+LjuY+c4ZzMXn7/JfpJJrJKKpj066UBDzNWxjYeuL6YFo7sf04k14VplKymxY1AS4
+PL2tGuxv0mFvH4f6Vx+NeOfaf7XTEe888//dgMQ7F/7kjMR3V/w1xyTeu/hf7aTE
+u2/k/2pY4r0rf3Je4vUl79r+Aombxs2n0ak/5Fddj/oARPXSDLUUmqVQfzWM925C
+lgbUSV13H36scQs/RDUWDs0SLFBFdsdHfsP+Z8/qllRFEyY1eVJad5LLrz969Vtv
+8v0zizyt4dRGqS1NvyBXfV9nRZCdw25ld7f3qJfDeffhI7wme6PmBFB50cGG88V5
+arY07awKhNnrWljv3aFN8NEhgg5l11SjM5KwiHHDUdlLF8N723iQKhBX74UcRQYr
+vMi0clkV3lv0IV6iU2aFy2E92bNAOSFmPKYdlnrmpQUPY5n+0A2D7JVRhUm6yiQM
+eEXqwzoaK6boUPZ9kPih4TMDQgWt9whFuvGG/5bqjBvsfUoxyJT/gLOw5mF1IKPU
+L4fzZAQ8JD3vimfj+L65G1ii8V6AZ1sd5QVkP6O7FsZTk4csm6gG8stMSjPhmN4d
+E2w+3u45fX3J2zbWKQ/NLgsc7yysVPuldZd4KfqkuA3EtcR1vTCebFo0lGCJ2MEY
+pjhSa8AWKB1RVB2EIu8g3QWnNvwd4bcUzQygg76AFrtkKH2qElFgnbKWrAP4ASdJ
+S0ljxaC2w7ONrFWT0K8tCe5Ux+rXd+PpobNMH7rUuRLEpofRFo8kCyRTjq6UrOH4
+dC18p2mpou/c1deeuqa5QcJTht4ejsoKvppcb7paCT4Flh3C62o1gB6pLZkXXbzs
+7OBYDtDgrufUm2v37HVKAZFdakg55CWH1Pi7plxUe+wRL4hzTmk6J3rkpY8uVUoy
+WZX6DjSkSsWlAaxHpth2MLWvWx/WkqZyY/BuTmnDeFlAFiqDLR7Eczl4N8/M8pCd
+H6U5RH0J6RIAFYj0pNVSV3SHC+1FWHNz4UGWYJOpectb1vMhcjNyKVwQFN4vhu40
+/TutAUBXmEWVjVadsLVGYuj9kBOTz/UELqbLwTubEAMwqFnb9iABR3VHDi7aZFAv
+6wuZR0kClDcOu4Ax84aoCVlVrUERV9Z6b9CtJuOiDU+PAIygw8HDj4+auRxpPwAX
+dDAZJMyRWtZYj3unD+fdpzaqvzK4rqXLwyWYmkz3RuvcN83VseCa29cCeLo0F5mj
+QIqhvn7k7Xn71KUtv/L0hpPNPbR0bkx2yu1AG3mfSB/QyWexBNP12iUi4ZPedLkO
+Ts/X3yTmBdA0ECLAgcLC7wDzRvney5QHllQoWqCd4oXq4ZKdX+fkZNLcdOo+zpBF
+qPwW+4btF5eBF/ILcQUAtuVIYmMITS0xwxzfbnXSMfoD5OL83LKsLfKTJwU1wOps
+KSSZp3ZwVwtkpQElsPYiRD1f3IK/16p5qDc5y7lc2lFTKF2GWVdDeWpVXmsBM0AW
+Re7KSU6OvdqjtrLugAvS5YA8Xg7kud2cNZcziFO2M1USyFQvE2Cc6/BN1McaikNQ
+SyU1EbJLZjwUUrIUbzIbksSQQomwFQeJZXklKYz6LdtgfR9cgBbIRpt2Bnl8SseW
+hOylWxUuh/FsyTnBUmq6pIZQp02VM56OJKV4mgeUoEd9i7wWxNOlpTgtNYnKzzmU
+dEzq0YwaEjmPlXE5hDdelIdCStSHF1A79EXplT0O5fLsEygvcJ+V90AEb40u55B6
+4NGOGdTM39VeNOKA1jUpRhKRJj8kjVI6u2rQnkusSHUldHk7g4AWj2ZBD/wRuaLL
+Um1uydlJHxauT7rwwNpMLd0NPFuW1DKWdQ8E8NtDB68GHiqqUSts1eQxgQswrQxc
+UpNPpJb3fTV+N+3yGzy+rKb0NFEZE2Uml67CnsksV8N3amG2h2Rj2xsEQ07dZbQ+
+hj5qyq8TCs1mzBSdy/E7N14DcSECcP2k2ZFmlpVuGih0jS1cLjdSn6JjPcribDeJ
+wTo/Aa12U/hD9nHOkBykgz+qvllxbwiPleulmo40aCbVVPZd7QK3oJ1SlHh7uRzA
+c4f7tOxkCTJp0iV76W1Jx406OzWVefTO93ExjZ47xhvoWdqeZRm/5JZLOchxUEUs
+dGlfDeEtwtUQu1oduwYAbVhWQ/YzyrNXYwq6RWh7zOshvL26Y4mNXc3QuShk5Whr
+3ZJJZreDppxso6Lfci2fvoKA+6a8Z31cVSe7a35620GucBDbDpYqCpjUDlEmIH8t
+KQPNPHknORs5o7JOqlqme1/XQ3jSMpCZ1lBjnAoxoMsKG3upYFk2oXQV1RgxLobw
+ZK9ZSSS9yU5vqt2iusOsO85FvSW0V0N4A3SrjtebdJq4MtW7yClUFpYuHQfLUcrH
+9gE6f3txCy8YGTAp9Xm7tE/gLFOfhLesN73NgxKwqAhWxvMaGcpeVgT54Lis+m4O
+T6gZZpI1cCGZAZezUKo/JHGd1BHlAgl9WzpCnzoznSmtcp3O3z70OGau1rZLqkQu
+bk0UeF5Ba0UNccAmCk68WARvr0zZ3xQ+GJZmP2uQS+yU6GXrVZD9avhu5/l3yW3I
+4xtgzjKmHLIxPMm0FvYKW3MA+/y4DmPObpD65j5i1VdKp7S51SQv38YpJXcdXU+p
+IGQj13HVFyqmdqAZxyEIxGFq+pd0qvM3VoNm6UEtuWtQv7MCmhpXWpGLdAa97AZ0
+cpqNZ0Fcr4Knp06alyNaytg8bWGtbcr0yFTc4sj9W2LP5uKBzOnSi4oeQcqlGMB+
+pwD20Sz1erRkt7kcwlfTIGANRxLj4iDDpKUOl+hT2LHkLTPzXGp6IIjn67PetEx8
+hNW2Obh4VDjm1MT2XEAwuZzu7lKLUK8UQT4QO0pe9ISeambkHk56V6cgiwxcugms
+6gb/Y2pst0jV29nKu45RB78saf1vF/N1UvHaJzM0tWEd4N+yJtY2OjVg/eh7DrRL
+B0Vzt4uBPF9c5/2ake+SnCwlOOnhyyPCaNWUe8n0yxtfs/7n7//h7//wx//3h1/+
+48/9pz+9DHzssIIq9l4jAyN42GQ0Mt60+TUybtWm9UZxfOxWRSekHm5YW/TyiJg6
+fOxhUBREHUi8QG+ZerOimpcYXtizd34oKVXGumUDaoryPiuOFEzmgBXmZfTVeDYN
+yU0f1dICzLWzeh1Zg9t07PTGYNxjP+FQnHBiXZLEMWTFQ4ZbHW/8spKsznJ9u1M2
+H7uPk3J34skBn0lNeQ0MlO0iz4eR834g7OePmMNL7rZQ35QFhX7Uits0cuXkqh1W
+q5IEfijc51tQ4kr0WWN4vJ/djtn8AWiOWR8REjlCpkMwWf5JMs6oVyOxrHOoOszS
+oRxZlcDvUapkTY06vtRhBbaXgfhh0b3U/w9vV++R42rDA6tkDPBQmM+PLiCtNoPa
+LWhcI2BerSQqH843Jw92zRzH6+E9X98EWUX0QxjEx3FMPRhJjaZga747D/nRunm+
+MJRSfKRRtQOseKu9mi3Dz+ly6N6VMrCc/dQufv5Ks4DPB6VwsvqW0gkVPI0Be809
+hjjGIg87M4qIVw/HwIVl/0X17wGHgJnt0GJyJpAL5JVrZqvyuTmmJYqTGSjJXEbG
+gwoIaO85SbE4vSHxfO3RyQqpBZZj0enDMYIDIgdRx96PD4BqTOGJHt+1z0kaMLOl
+ZUNakhGSI2PrBbH4dYCa3g3r92eCTmflQN4F+JDearRVSkJVfT5LsvFk5+3S/iCY
+318YRE9i5GGtH1vKEOTXvPUtHFimT3CBnRbYqZBydeSDQzTFZCXADcYOy1g1FoKB
+FtWWf9Ep1JAS8rbPYw/w0a6isbO2rAEdKpTUQ4z8KN6Yt3jvgWsAV5AQZNUkefMk
+cTv2TS5N2MjIDz3Fe5pE713VR7XoCJ5DtFeZ8FYXea0VFhZ9yR+H69fq4fjyt9W+
+8eU36Nz48ms2bXz5jfo1vvyNtWp8+S26NL78qg0aX945BJJcU9lSoZAkkEsputYO
+GLD9ELQHHUKi65VYnS58zAnuAZuYC/jWZTmg9ratIsWayjUGKKq+Xqpr7RDtahpI
+AmWaqolIco4+YUHpo8wTACFTKpaaSlSljfpC3OUAot7r7QzLzkKRwDg+1XElWOfT
+R+6VwzSeigCP89QViTFIE35omCd3tYKP8mG0TldtZQNuhtMpfwnQrACry+qQm9Kd
+uZAATwc+szRq35aRBr+4wVWabJRCdSpUs+fQVPLNpXCdRLLIH05G2zIdbBpO0fkB
+LzWRuCB+rNl+CFKB743Eo2QZWAGIsmJPztiQGmR9Dkom8EqPAxsc6lR01vRaj0Fv
+aAigxqt9PplhTbCtugnWW5fCdfvAqctkzEnKTfYLEPl1nHq4vFyTL6ahnFHWPw7X
+6fySYspFAElF7f76cNC63aR00Ff+gAN+d77Tq3qJeFMAAB1xWLvlfam0HzRfaIo0
+KM21zXWS2tw+LmmOSrI98YujaVJumtFIoAK0qHpImqSIyZqeJ7BR6RD+FzvgWvLj
+/BcMxa4Qkr7t8E/IU9RosGzWmaS1BJirb9ZulhmSgXjvFdKlRHg69nua2iTNWqrn
+njoMWvoWwSqhlEa2x5xkw49jdatrtmU7CdVp2wrBbjLjNLvIyQTIeWVnnfQ1Dfuz
+UDiMVyXJWy5YpkiMRU3U1eoQ3r4xxffehWWQZECBmhtZWrMrTsceiO1Qi3PeiPMv
++ZXO5HM120lZQbNBUCCCwJ+XeJBSaKyUJK9etWihrKHMCGy1VbMbm5XlnPSBSYqg
+AIhck4zCpWDdPvCo0bgSvI42p1pIamJVWDUQ26olwFsCGH4MMM4HZcU6ABw/ZxF3
+cmlsSQgDyLJ9uCsP++Xd45pDtcQ4p8+SzjgpP4LJyEqw9zVYCAAjZ8u6FLBXl+YV
++qJp50iG4VfXYiTXwx5gcSQPzOws2q05vl5sAgfG1CkO0gyRClyUcStsm5xpo9Ek
+SuOhnIXzU6uiRGI1+qOGJUv+azJPPURFJcE1ru2v8yNP+aJ6CXUOHVqw99VM5WA1
+MQuMyadp7XWher06cXMh5KPNsZTji9OUHSjMRON5pl3gW3fbEIMcb3RGkeWsAGAt
+dhopxC34KKt46TNgaFdid+/6sE1oOcvMgWaGBcd0NU7K1NTAmBzka/haeOEC6BJf
+kHmCxiSXGvbylG+UJoskkska4N9s4Ffpa815ULHAtg1kBPEaMM2g9smSUo4gybUr
+Abz33IFyKhdEEpkGuKesiagQgN7A0q6w6SYZ5PZhFO/Kws6pph1RKOhJCZTq5M1I
+Qf1ZYLyPQ3kWQpW+rk+ajvWOaArYwlSnmuNqFoAIagm9EsITIJUBQnbLxJarvDb5
+zXLkA4dlM6WvCsojlw4/2PezFfhXl+Rgrp69ZuRWxuqJGq+EY/lsVwI4Lh4V8C+f
+Zp4mqzfTqNEAuFRJlDsajf0Peyldnj4ry3RTVhu12SLt01XZhhYu1mKaR6kj46WP
+ccjtRWuW/Ecq2ZA1+QmKFsszqwSnbS/suhOokZazDu5N83Lo6x1s5it4hhcIrumt
+m82Vr4Tq9rrN1CjPKzKl5a90kBp8EBpcQPm2rOzWKgHgPyJ5ntxU05Cf1UhjdZ0+
+63RXij8kLckfGmpj93BDK8uwBOQnIqRiOWoZbSySwiHTw31GuhKqk75+ldwYqFkt
+PbyTHMDRks1RlxtQGpqa1Kz6YahO36TX6pJEgN4cx35Ug3asU52uzhk/DtXtp8bd
+ctJkmOzOqOSsTvV0LTM0QyWmF7MY/pVI3Wqfbq+BOoqkPOh41C6zaUijl4v8itQf
+0ynO0bfGTrGHlfHKpGMjbQMQgJWXijRXyB0aXbJtNdkasxqNY51Ky05hdZAyfZTh
+eSkPpC4YXr+UDm8FYKsSkw3c2y9ZtrE8u3ppMjk9LkiZJYOV8WGcbq4peS1DFeys
+pa3JWzZBLcBgmP0crV844XglSLpV4nvakvGWHqA9DGEh9rzm2JpeSG9v9P29f2lg
+w/I1bBnVFn1OmQugoynSJPDsSTFHC8rMxflSg1XjV0yq8l5HTlAWyqiFbYUg3R0r
+QVLtmg2UCUb6KdMAK4FxLkjkt9qh6K5a2LtvzDB88DaofYdVWttysCxaWmolAZbz
+lmaN3Q8WhPn4qOPVdWdQGiVArGHIEsUAjqrPf6yD7C+cdpybzuLWTtLZ+jFxn6ws
+FGSUIY2fwD6DwsZxCXecLgzBmkYslExVZQNM8YKY5LWbV+qWX9AkNfLWCxVOPe6r
+UIaolIliFsD1TcePc5lah85wAcVbRtNZ9mVrqOucUE+ytkYcxkiwiN2qerRnMFdC
+dnpgoI90h9rRgK0pxOpcqH7HOgKJooAbQTjzY6RxlpE1dqmxz2tCZpncwHck1NFZ
+qDJYuBKubz1mIDPglDf1sKm0CS5LCtfkoYiYrBe9Wyn7a9G66YrTJKrUjkAB1Fcq
+DHtIKSzo+8oc1UhMkCqUYkhGwnQmQFfY5PyO4sGLFKPGz3LOqLk8HN0Vkl6ZbRhW
+5aDESkwbmieVM19W3PIITKNWkuO1YH17XlaoxE2DJpEpqmoPJS2QZObBIY0GhjqV
+60Ksvl1UjiqabarHKUJyPqgzMepzX/DAj/uhOqk8SLjjSVasHhaQpbN845atvYMx
+UbxGy0OHfG5AeN+EgncvKr1Ytn33GstXezoIuNiV1bohEd2gqSj1rTmd/UuqJS9I
+DiW49EMAYoICJQhHzRImq5ruGhq93urmmVTpzGYneGvB9zSfrfXUgUikwPXmqfzd
+h/UkZh7SSIWnxQ0n9QF0Q2lUK7uaUUdTm9PdCL1xxa7fU5JEPmCKKw756PBE/JT7
+3utc6rW+A6AudIn22ix1ls7VHABCxjTyUZjUVZ0fvdlx8J07c5FAK0tGNs016WOc
+VOGiz8Gure+M0XWppLEcSNQe/B3gWS7J4y4f8QLag8Utf1yQfnkJDQerjyyWCpX1
+uStmliIZn+xcAisScAnGCPENJ/U7z7lYdPtwMtH5M6Avqq22SPYcjmYhfamTn+/v
+mO81N3hxXnTBLs+6WVkN4lSQ5nV+Hd4PxYuuQwLPeuq2t9IvD5mMFnpsEJvqZ9Ra
+rkXjjx+F4qtOhFtW+iNsOjXqkLepvfqqJLd6Z2aTTR6LkjxlVPhlZL/iYtNPIi5X
+QFKXbMAJIEHyrsVgK6l6NiDiBg/y8nPQ578QvLUhOv4vbhJf3zXOj0LxVR7DNXC2
+hwb5faiagw0jwc4bmmgcqScDR9b7oXi5mCTOuZTO/bLmxWwbxUoSPqaD2b0fiidV
+B7b+UHtk9AOwVIutDZot24291PKR2BqwLPNRIJ6NiVdjI+3DYlvTHrynmTRKo3Ej
+9myCwdlRZh+bt8aGsWQuKRnBQ2LO/E+oV8z6pBilaxeXPglnCf/BR3Ti2NVgrO9n
+m/Bq6LTHWsYqs0g8/qMwPP9mPYKbMrDpDq5vNCixZW1q5XTqZyHrc+l3g/AsilFz
+twZ4L6vbBV7iJ7KAqW+8v7rX+yF4lnLIgBwH1/OaW5lhSGdOJh9G3Z5zywO+lmjC
+RzF4vpyauGG0JPOmU43RqLsaLQY09bQ0QgHAzSCdqNepsc9YumooP0Cnpha2U+yQ
+SloYzXSdHHUdL3JVDQ4AkPn3NTe0Y5S8iXxH5e/rRw9x5I+C8PyYk1fGW+omUp8i
+l2dFkB5ZydOWkmWzbsZdwfbvr0X9N9LrkXMH27tqyof/yhoYHtHfa2/5S/vy4/0W
+i3/4w3/9/X/7uz/88fd/+Pv//NKCQvotEIjJKzgU7dVCpD5Bq2aiKQVMXki+L1ry
+0J1yrBq0BDF4F4GOVAvAuLKr7LK9ZITKkjlQyZoszNKUdNXDs7Ps0jrUY7e5jhMc
+dlmMTtYkaRhb9dG5yu81sbHKVhpKkErK0NiLfGxkm3A3eA/9gnlI2Bs2tAVRAxfl
+N+ybbrB6BhNvRw2qdw7MH7oNv3LY5qSaXnxvS55li60McdMeSg+F/Pf/+Pv/+Yd/
+/MeXrp3pFqmPjSJBKAgLW7zIXnoMZQoH9DRuTv9gtM830afUAnQF0pGBsiMybFM2
+4xyaqzpcneDM+bDL00HsnLNBlqLaI2WKY2SMkYo+Q8k32pF5uFpshipA7TzEagDK
+Q9o4tkPBJS5Aps/Fb3Dtg4E+P7zkUsEmKYWVrTwDB6hRQJSdJ9QbiDv5xT0S4/Md
+NjlR4jww8iBZzgVktRoXd9LEHPGh8P6X3//X//TfX8yBIZTijA5YDIJ2gecHEsv2
+aIkGeTZ3lsrbg9E93SMdzR1E1en7kBTxwXnAdU0biQjArZu8GyFwMqiQSCm4oCU1
+XgTIca3L8be1yFhqY5FXPYVgScgNQjY8mDpuoLvkjqLMzwe/pDeSlN+72QeDe3r2
+7qiO0tkLbgJPJOIG4/bSy0waZgHpmiQN2wdie7qBIthkbLDIE4BazUTbUM1eCcJQ
+20Oh/X9+//f/+Y8vLaYBLqiTMgEPCdX6Kg/R1UAbVqLVsFNJ+T4Y2dtbAG5ChOC1
+og/8c1f1CRMjdig02mmsILETJd5fXNZcRtPBWAOCj33YWPFvyA8RbqxhP1JuVPvO
+UE8HhFraAGpdgERouEp/XTV4U53Sex8PBvb20dUPorqfNVgm5WtSzGZLTSkUA8Sb
+FfW410F89fo91cWy1Ccj+B7r2atP0wFe8lzjEzX4f/ynP3xL+OwZijrwROIUM4NW
+2wRYjqGqrAH6MOUe5D5Vg093AvJCzfTNprP0iZ0UUggTqMLJimEAAqoWK/+a99lt
+tQxVzcVaswW98uwJftPURQpPg8+4NAc8tdfDL7w59ZH5mAXgk0b0WVPZHcrsUJRP
+1eDTLyhHn6LMBGM3Us0LoKOqIeixHexHH/KoEp+owafbdM33cROnsSgH0tSbkLcc
+r6sbHx4K+R//AUAHUXjxcE9dmyfbLa02trMFijbZlcXeZXLCSi4kkQfD/eouoF5S
+P3wzypyNbBG4uk0Uyzrlzwll4Y4yA4kNrDwkxiFhENa3kUE9BNBMzQ/w5+sxQL4D
+KGrJs27FSg2UYZ2E2vIxcJCdJkyaRpMhemE9GOpXTx9k2wDmDaD84JOk3mUL2WLV
+1EaRkoudAL5HwvzqFsIeRn2cpmocy8xEWScdDQrnsuajOnzHPD5JNHQ16har0UHW
+yT7qAHDH1lA3nGV71w/j+v2lm4aDW2dDyqAUlCML1LGDARbBbUJKUOsuWw0ARJ9G
+XptqEQ5bZj61qmLXMq2AmT+cOOSNPLpcEuFI/I8lGyg4/wJISzYbHCXRjgJ7h7Z/
+GMw7b4PUPivQnMS2JLyro/FYLSQA/pWbajr/+INi+/112f5p+1Vk8MnPqKbIYWLr
+K3RtyaYrYfu1eo3fu/BfZbfxew/8+X7j9676iY7j7y/3a/Ucv3vlv8qu4/ffxaf7
+jt+97Cc6j7+73qvuIstP1hfNGgMViPrnSi8RLit3G2g+iRPKYsO1qL26uKl2kgeC
+1L8AMzFuaZs46dbqyYtNklvvvIze2MxkIOsBVqHpsGDKSyQEIwN24ksuiW6WTirX
+ULQuzU4YQac4XkrZXVoAHT6q3lHgcEwXA/e69YzKKW0wd5zkJIBV5uIaSvdV47sQ
+B4C3WRdi99pwTf7sBuDN87L4fJGnCRs3QZN7bfVK+I62ohfa+tWGkNq7QomABLLT
+UkNOAX0FssWWXUTvvGhjrsXw3h0M1BFot4+uuV6ydJ0Io3X6AF/Y9cSItCftUfad
+PmxJw0iTqUYcq2cdLfo6SVK+h64hxZXV79MaqXMtfclYVpIKRW1nav9eJGJ9GorS
+f7kWyLvvxh5fDk13WzICjWTpYVJ5s9gPb2Z5vLl0JZr3Lj80Qei1a/Y4eqmbSn13
+OklcwdsrIT21HQW2n5ctwbLqN6mSzJdJFsysaAvtDZO/ilRur7xkBi1JDUPtjJCl
+QdLYJfahqX9yftYHOZA6aVaCa2zKZEwtFMsBRmELLGCZPkjos3+MOrLIlayWXdKI
+HOVoUlAXmxCkT0qSg0WXnXiXvPm+FsLbJ1Z7vsQE/OqagZVrZGARFpbVMEZWsTKy
+zP1C6E6iG1kWvmCeqHa+ohPfDkUtFvJIlb4UspMCBOvfqBfew7CVGipApW6vgwCq
+vUaNrbW9XwvZ7ZVtXkZ9Zxo21HfVRa7LxsLo/CZTKpbSKlBHIfWGvDpIkcLKZfUg
+7ydyrL4L6CONXCMMNJlysVyTB8CUmZZcniEdAVA5ouCAVOQzy7m2fBGonPq7xO55
+ULXeBRYAUKDwep28eyJP3ajIMKwru+3sHy4VteJZ+dbLj3pIZVw0XCv3riHqd9e7
+bd5fBzCQiRIJ0+hcxQAHWfJcfB6qa1FT+NcidnPhKbfWo0uAN1iS3QKIMnmUcRzb
+jr0HfNHXj10Pb+ogaW+YW1aRS2pzr25qvFIeI2GPWvoso25Je/Ypnx+1oY4to2DS
+JIGTNHgioMZDIq8F7Fa80NQtiiv5QH1KUb8My0T+3oA46pQaSbYNF+J1c1WBfyle
+Aft4farxcsGmdlRWcwnjcp07HcF/7XNyHgAnl0Zj5NwkxUUIC/hNkn1FjoeQMPtA
+sbt3G8cTsxhMlzCUGWSGDaBvGRBJZvM697fyRySjQtH29HIf97L2LAk+OFmwUBao
+Hds37C2DZH0Fq77n2nj+XELKOrVJ2dUA0QjOeViOZnc6SfWBinfv8W0aPMjhTQ7k
+9pAcwMBaGoEHm3c1XmtMxVwte3cjQQpeUmig2PEfgwqgE//mlPeoCpfD/HxS+7J6
+llpve5tUmdBy73mTqsKGEUtFSw3aPYToHwjw+QYuTPkzwRw6+aqlaCxrxlBmSNNj
+ptnlUrD68L5DOatPGvHX2TeRXDoShWyIzA1JLrQNdA38cYgIfJV/q7nqySo+zCmV
+/WD0bSVKWUxDHOGR0J4fvFDBw7auGfX8Wi4PklpWfa+sqSoD+bComleDer46z1dy
+WawLdpU6cqCcgkwsnwrV9JfD+XRA+/VlNzm8e/krbSgQ/1mapcxCOgI7pYpvcfkH
+onm6flHrr686wYkU3EKxiw2C5WT6om8dCwA8m1r1qHLwij7AgznNEgukh9e4wrJA
+n3qMFlRh0zl7bsMNtyV/IfEIR3B1qWjVZZRlM67jdNfWA8E8Pfdh6imVHRjW0EsP
+VKFZiuaIyD1LA0vF+Hk1lq9eOgsSmmJlMjGMxBnJOupQLZD+uh5MwM/nry94B27f
+4j5su6uOY7YO6iilahHm7cQkjWWXH07A59uMmcMQ5xuUtswCpyTJhcWIXAA+k0SM
+hmUvK1fojLDXNIr6FSXmlPnTlHi1c/gyGiH0Dc5R5X1cvDc6k2YpQp+lFSdT+3VA
+CijpOkzbHk7A58eXuE+p0A4eqzeqBlUCPB0yUZ4HbCvqD/KPJeDzPQSJqtV3gRCq
+/Oz5ZSBGO1VbWrGXw/z1/PXrYJeaJYtaNMgDwwC4NIPmra2aFCw1W/BceIRQvr5F
+MEFixb0EOI0Eobqf0s8AvFpqID8mamAzuhaJHbf3U4cxx8dplt6MrVFtNIxQLQk9
+iCzJPFeixkVS2nJvy57rHGdQog6lFjWkLf5meyQJv350aEmQ2pvauvVdNcilKvgC
+EmVVUQS7Bwr4fDW03719OYzFw5nOs4b0uXsfpoOUJR/bJbT7up+d3F6M1Sl3JB24
+lXxeizQmzTPSENCU2rUunvK8unjaxrCHjLoSjZmGxZJ38DJ1BN4M/n6oPWo8+PAh
+NZQrb5rEK7OTlG7Qe1sUHeUpKy9eNRX7pSNza/pOUEh98eT3FwjldABJWzSnNaZX
+8/G147lXosGaf2Qha9RYPacD0J4k1eyo2c62qJTM4rtyQne+cpA7EdBLMitNnySB
+hiMdPuawgHEJFp1aurmUd9Z6Ce6BM7s7cH9ST0HQUCqcI0s+7Frwzk3zULJQ5UoK
+xw8tmDpBurKbBq4TmDFJ5dAPMr7eOSVTan91AFplytsl8keVNPq6OEwE4E6nvvV6
+OJ9SRjugVuJL8FEgi2TCRrPdxOO8z1081zk9ctNNvT5jR+5rm3p9tOqyAPkm2VOH
+Ki/sQuDOgwnihJI0BK81nYA6p87zshNEY+54LWzfurvn0nr3mqpUtvQa7AlqldaH
+V9i7khwY0l2N2k0zur78mWIlUayq4jT0KgvoPpbvzoQ+jgItyaFZp5XBarb8OOc0
+jx+lHKXuljxImUbisceHZ6fGelBSXUCiQgYao2skAbIypZ7QW5YH4uxXg3YjVUs1
+hNxOWCu5cuaebJYfQXfy1oZHUKxIqulSzG4a6PVNLTleg2FftZogVoeR89KuSJfO
+U896rCScQ+BUn1ODhlzISaoccEs1p9oM8871IrQ5XToGqjIRomjoYHOuLuOsFOvh
+pZGjT4Y3YpMObzWdok8QJfeDTPCSouTebYWLkEckpqVRz6nnAwDpy4rXFym1RhdH
+AmbfNjEWn7MmYYofF4/CT7Yizct8hVs0GG5dlH+d8lp1kSQWNMRbcvVX6Mbpusu4
+bY+kP+WwBzbt/PDUXYmxmhouhe32eIjXxQuFWeuzKCldcz3UUN91wNeTcYsCBYy/
+GLbbS1cKkT5mGvnuRTX4zA57IAflQUKbwF4N4rfSWTJS4ecnpOW6ZVdqujKqz1Ft
+xHnDDWMXNPN96x+a4eYMvofFohjeENatgVrfuJklT5S9y8Wwnc7gUoALKr1scvTI
+ojBA22nJFC3NBFA/jC+uhO0koktO3wMMolZUFp2+vkQNlY4gf+RL3wtv1SNSmOBy
+iZEmyQlCPclXDoZfa46L8i4f+bEugsyT2MWSo06B6JlUVHp437Ke1FRIYyHv9dSB
+nhpxU6sj5E7S/WynNHYaUaLlLCBKTQ4tExEl8iFVL2mJmKYRDpPsphJJ43xWDV8M
+EJaaysfFBHn7xOyHLL9gOZIGq0+EI8cA4tYooz/EeOxiaVyJ2e15pPOaNNQ3NS/D
+UnLQqqukKpn2uC8hyZOEhL4CdUmWk79gq25pjFOjt9LUgJ+5mY0W+MWY3V46Q93d
+Mb8HMZrNd2Pg5V3abcM6+SkCINlGuUUlisVijIBJyTpo/+vjXDDAkrjgWcURCys5
+QJl2gxFlAaypC/WFkVqblOjBCk6n49RRSsbFoJ2EfjV7RlHNNcoKsi+dGRR9zexR
+40+9AwO1gi9E7fa6sCLQM+XSi9TA5CflLEbjJNMLeXkrbK8MgP/1xy8//fSX3/38
+Zf3cvqwf9i9fWxZZSkNeCgU8RyrT9Le8CmzXQtGxUs3uvWbUizcCQ6nlBRQsSVN+
+ByvFNCBGC+oMBnNMNWUSl5C29XJzscd3XGkgVs1KL82nS0KamI5CprAy6B4uC/7C
+CinNcDrWANWzEdUktV4WYEpyEX87pBd/gAt5p2X9YrmTS7khmSMkNwvvR03wbFrA
+51tfoC7eBWot2dYpy5epv7ZcFnYcRxsyjX0s3L/8xy/6B98u76MHL4Pqa6AQeGlv
+KoutMRzM1Vud5yzn96Ph/u5GXe4fxESephWm5mQwAhiRycEADbcK+4RwEsDAUwBZ
+XOP+MTRqgPThhWdJV207WBMrIwNUneQyhibogLlNgpA5bmqyBkh05AN4dSuqSu9H
+w/39m9qFhWP0HXNJjXVb+XyQjpKpVZQo8yRxh4fC/d1dAgSXJJpshchR8lLKGiit
+LclOdM6L4f5l/G7/+Kflfvk3KvRffn6azdKV2VHku2xFrImGpHCWyWZMI/EJqb5d
+jvSdexyNEcbLdljKLtNuwguWzek4b20gC5asMFPUSI1kZbxx0Cgl6wGyJpeZWoBE
+XfrjQJwEaxzbwpME3+yO+iC7JIN19JZPYOag6sy+3GzhcpDvPDvw20qQBjomcdc9
+Dr8zqa51I0EvH2sIfl3cznduoGnKSinypcqFq+uLBe+DFyP1hOivh7b9/JfxL9/i
+anVQI2HXLmEoO9jANsgoT+2jUw19vPTwSFzPNzB7HRWs2QaWbRrgdQUIpJk0EAOU
+uHswUomkka7mnTi3XdJL7YfTg6EEQ4/aqhaESNKCepDGwUS9d6dO2h1tWHKI9xXe
+V6Lad0ZUg+Q0/pGgnh5cExr+OI+Tsz1XBZZY8EKV0LLaghxc1uR2OaKnq0cwnj7j
+hDEp69JRABuCT1xXs9Rdu6o3Ljv+v3/+p59/nC8XJj1KMtYWEvLqsDWI9pLyYiDB
+gfuJL0X4vWGfD29hJWDvddQi4MB+FSsxYUEuJSjfpKIEeZaLNhs5yHYkU9Z0LiDB
+h0OEYaci05wIwJFAbh+S6a4TGiriYlqrsj+ZMcWWn3wIQF4x6rP8fCSkrx59L1lh
+AlctT9FkFkP69XACyXWt5ryFMNgULwf11fXhK9SoAOmUMwqIQ87oagqFLJqRHkjA
+X9q//duXH/+yvr70MlLS4S/EvRoSXweRLH0dVmaGnmvAKobxSFxf34NiSulcVi3k
+tXtpIgDmLXi+5jF6kgtlNLnL9lFn01QBHQ8azf9MnyXo0Bvgl4JwiElKThL2Cd9M
+gWK9edh+iPrb7uTB7bYJRvLXzmnsOD0S2NfP7vVl3sueSOp7EHT277DgKD08K75P
+fQO/5w1/9eXoq4Ksp8IWevRyHkyhtMUG6zvb66H95//949e0TmlQEWryZ6e6Sl/J
+STnOTM23z51EqwCHj4T19vosFzK4+oiDk7M6qbSvsn0jc2X1/Dr5qYzI/sya0WdH
+JHWRRqlL6pRxNAf7SsROKtpFx0dNA2epUdS2NE7cGgAYY2ySMjlMM7vitsbCY3OP
+hPT2uTUUSl1WE4TrJDKZyhBIMkwm4VQHgSvB5X05nLcXB1wvadaAg9s0rco+BL5+
+nOztuPb1UP7ppzb7L9+2P7CyLHW+UYysNDv5756oT2yEqQk9nSu+4fl47Raup0Dx
+cK2oYaCwNvwMsG9b7JypaV7YUlnFgii1siHjr7aFsSYNwMF/t8wotiaxeE4qUDV5
+atpHZ+isvaJ+iy3hVbm0Ls3/RNg4mLVBTR6qp68eXfYEEufLhkwP3lUjX3fwfWkd
+SQU9NJOmL5dj+ur6ALsqDGZKhRXKgM1NtfAUqfeY8Sa3fS0Jof53tnblHXbyrRQ6
+tjwWIX6Q2mGbhibCeOf06PUVmxrr5It6qDVORzoyEjkjwVIxdErOCglb/SGwALY9
+8OYYwq9dJ+7kfgu65VnkPwOuIRclnXFFTRHpC9jQEQVofDt1rzVuYPkbPlWIzvTv
+dNt999thO40qPSV0aXRCFHXw4q2GsSU+DH5Wv8wbMXp9ubzaqN1IRGBpyC3bIvtT
+zdVmnrJ+FJKv+hrcW0du1q601TZyeKrIBlCau2XKBlCikx+H5OWKPEmGHlnoKpXI
+6LuSGmt20ykTRSQ2AXipKo6p/tPZWKfVV8tmiAnI2mETMkw8vHBilRSJS0X+UcBc
+W0E7CazlswwGZOvADtPRINuf0LbycUhenrT0qW5i6UFxe506hanpLeoRS0q97vWQ
+5PogJF+lRSpbnScPmf9fCs+QlKSeTkpDbP7DXfIkFOFmLWpyMmyRBEooUcNjFd6T
+k49gHeDxjm59HJCn6/GCiULdZGMb1KVoYYA+RSMnSrA9AMFRJKcH01uelRUUJIg9
+gSORcikeR8baWV8Md9AfdSSHLtsgt5PKVTPH9MyRZYCTyanJRH3ilUr7cTieFUG8
+3GsVCYAMQDFsD9bQV2k1vcpurxSnwdb3g/F0MUkUeTKBhYuSpVhCWtcWilFgM+3D
+3fGit2HlCqfTQAmQ1yqTzCVzXznKJ4r7YXRn5sexeL5gL5pMSE22IhlMSVw2oJNN
+UU3S5zA1UxwNfxJwsBByKSCsA6NLoZPbZiCAxJWBYRpClOti8zLUDBnAt0aOO2ic
+EF7VR7aatcyW1WwHof84GC/SIAPY6TWaaqXYJ+WeOvQd2KhLPLnJqgGPug+i8Xw1
+lkmUMHaEHjW1hxMV6EjJ6gwf99xH+uo//fv9ucOXa5/tiIA0TwaSW63S8qiHCcEE
+pV6adicjeVlF3z0we/hmI3A9MXkJ0ASJQ8YiH6AkJl0Pj7GRQ41maCHrJE9Nfmzq
+PSk5MgTUZz4r2xQpocAaNcVVRtOAYYNy1AyGINoadKtJJ3Bsg2Jk3wssubunHv4R
+7GErFQB2eWBZOh9FyyWU1aLkPbW0POXkuxA/fKdjrr10vS4SNglMRuAbNtciwCq2
+h8J/tiuSB6mvMhN0wlej6/BimmLAQIpLPhjpffnxyzfpoXSuMiQlZOS2BHtjsyWd
+Ja9hINMkrex1YtegunV6u9OoMnU9vsyDgzUjuuAJGuHUAdzSt/rgR5V/nuZHd5dk
+iLeSy9A4UO5OXZHUvF4fDPcrQ6duuBoLahVngztkhySaZDwUMzgdjVDw7szSXL6D
+mhDk+Zon5Go7FQqB3azenwyp/tTufvl86eSFPcTCawUYJK+NntKsi5claQg2ypqf
+3NUv/TTVkE51eD2jhrRb0Lh6HWV3cDW5N61AwSQlOkf+9cXUtdQKkaiYQLaheS19
+5NEhcShqNxhSZnny8JDrUJlRUnSsjykLO2k6pFRcoBy7+snd/NJerK+CE0QAzvJ5
+SU0EyFqUdXSkE6pd4KT0mV38/DWdHNbtDrJkosr4AirMRHbLyRea90F4f80J4Xcv
+/Nc4IfzuA396Qvjdqz4+IXzncr/ShPD7V/5rnBD+4F18dkL4/cs+PiH8/fXuKdfP
+sKRYpGzVqzQI1GQMtZnWpyUHmS4XZWOvhe7eHaQzGildU3KjFLLRzc5q43FU/A7J
+rSJtRBQulcIGfetLr5RuJGu84pZ1NhhDE5My65aoWy1NwoQL/tnUxu9T1lgDK0ST
+q8HYabnydBrYuRbCe09OAU/K225Z+IvaImXZZkHWzi4PbDy8pV2+EMp7l7c8bReN
+ovIPTceC38OhPs2bsn5dCelJLl9ik0UNEV0+dilTWCJ1CY62wVGkzTLJJfVaKE9X
+bk8uiGxtVjcYEKDQyIFSN+9yrshAWICzIWdPL9NS9mRIc0MVwRWDzNUkP5pDnBrR
+Vavo0HguC4s/Ch3kJ/vh5GNbLUuBHM+PqBC8pDPxayE8jdvqm4L8UiF1koqW8ItU
+I4MxW1S1mp4kq3ghdLeXLUEihrmwYQIXSFShUafcpzKU+Z7n3vfXu229IgFHkHR2
+Mn9pPJ+GrEKRSw3VzlXS3RRDvhayk5tVA49okpCNADfkqsDpqmYhMMaKMFLPHaCT
+S3PrrLq4pACWNnhfH/q8JObjUOGZRHm2rGh5tyVHvyaoZAsEwVPAFWVbSiiE2qtx
+zPPvtWshO4+Y+m2Ok27KsDojS1DjCm94WBbFMC116NG6ELLzZQNLgYwTl6eSyOW8
+L4k+rV1A0eFKyG5HTKuULjPEdFjj1D85QIYy+shG7MX70PlHF0vdrTL/ZME725NU
+3WuSbaZKfNYRY95qId3UKRIDWG6rpGggoTqgOohG1jlRg6/Q8dZVZ4DsOnheQIR1
+GFzILEeaUY5I8iflgSKdGpGfon/tWsBu34TMqxPrB1ql1vKqLw+LhQR/4f+imxGY
+v8KFeN1aT9UC0A57qYep9yP9yiFz6AXHdilcJ/EaKDHL2bHRwCOwbtK2vD+XlcHK
+UCe4Ghz2vBaws69nlE6SOZQKYftS9KJ+bbtChgWQA8PQEQCY26duashVcnwkzXmo
+4IHtNJVEehyRXJUpM42USjJIaqVm03mbg3ydwJoeDCSjvMo2btwjQcevhez8yN1p
+QESqoxNUuzXRIl3tpgM/CnE/5Mrslbx4NiOVRHjWR7/qeP6hI8KeQNlGYwchXkKU
+53ELShaY0egIwAHj7JopJwmZigHIGHhJf66Wi6Dy1cX5uY3ktefWfgsSpg9V2moO
+crbq00de6RPO2iSKFbyE9CjRYBAqaSgaHlgyfxu8sTCGgAtbbspJKEnSWRJjVVLe
+e1AfyzAaXGJxz0zauIgrzw89LXns8G0kCfPsmedOlgeRtqUV92BDu9GvQMtXY0RT
+Lc9koCIha0FWFTijpT30QeNK+E5DFzXXCXgqSyxZ8/02Ab4DhIuE1cbsAVCYmrkW
+vNOlD12KkkvRZnBSCgaCqHvVsiCMBu23K0UCIF12D05y2zpPPD6dUFy7PlR7VZQ4
+XRn6iCEVlBYpDIbCkzRvR9BlsmJEjLyES+CyoGIVumuhO0/jHP7zTd7fuYFaswGY
+GPadjhB47cRzber8hcCdrgsXkMBrU69J1qkijF59MVwtqTX+WthuxjlA5s1mucd1
+49V/C9Me6sGDCUe1Z8KMcw9Xo/btygtY3nTCaQ/HtD6BUJJ8G5u9bCPcFljNPwOl
+5kPJm/qlDvet+etDl5SQ1xmivFSNBq90yunshJjDDfWddUtAXToMsu22RYeUJeoT
+9vBtXQ3atycmQsvzH9M6KbUY9QSI5soXK0sJEaI8Kc2XYnbzImT0PgtIwfUw1TYZ
+Y1zVGhJDstlfCdl5tAWy66v30CvKvSzp25bwv1c1psKnEP3y+yIgOV16SkYYXG7Z
+rBk+ra5lSGhJ+saSAPl2pcOqTN4v3ald1wDn1xxraUK7UcdllkfBqwDylI42FukT
+eH1ylZGVFBAH2cxI5DQ3HpWHNk1miPfnkT56G1t4hCImh8G0eLXAkBWUAqTyEKya
+DXa4AiLPXr7qJ2C52jjlk1v5scnLtRQ+VJ89fD8M20kCZsigco1cj08QXBICQdHQ
+4vBxSlvAwgcvHnGdLt33kNb3oVkj00SqmbrDgNLcMEgBQeab3TQJaxKIIaOpTBX0
+OgXn5sCQxKbpWjdqyYYt8E5lgUT5AuNLL3iOIulUScsMnW2ocCSptNaLsOT0yM5T
+KuQTJlQrnup0BhBCKpb6GWYOPlZv3JWwnV6FJOHJDU5WOfw6YYhQjtQC9bl20HU7
+dyG+63S6CdQvK1Yyj4a/ZklDEyjJRplmFncxardXpjastJZlLVRQmYac5BRk3Nzz
+mE1hrfQ5qGiBIuWX2vXCwdM0zEd6hYA1ld22DA+kEfio2Vz4Y6/kGz1xyyqP/ekb
+OEQeKiijXP7gRb52cuA9uuGMmkm4As+wPXk6AYIh7TOaQRwppleK2sl7lqtSom3n
+jRRACdWgzc0PhHeB2K6F7OSOGgLFAS69JfkSqJPQfxa4zpMJJeXEDN7nuhiz20uT
+4g5zbTtl/QUHKseC4KVIs84DFkjygD5ezdpRjt8RYKnzqSgnBVCbvhtPMyE98v/V
+l4vjjAt+IpvZocNMkqyFzMvOKtpI6vRNs2ZJZ4jXgnZ6G3KLBtEkWdhKrq/5TsUw
+MkFi8ZmwG3i9XSEA59EW7/xqIFSS4Zb0uAwV7eoSCBnWXjoZeS0yGEf1HRzZKT/g
+stGzPT4LsO0kwJIM77S2q4E7XxzkR+j2lBhFhQ3baZKRknWSFUg8rFMhMF16chVo
+LWoGuCBtFietigyXXjIkk9U47OfQf51s3alP/hagwCaV0diSodiQQpScSUItar+a
+5WLozg8dHeV8Sg5C/TOappJDeEsZbATA1EErld5fIQCvriznQcqwHHgqxV0lDpI8
+w5QZVLJv0u5TW9j+008///wfh8/SP5GFzQ/7aLQAgbHgyWKa5pavhA7yAcLeyFaX
+3QOhkUXP23G8chcVn8UOmVKf9BJMpqrtXFZweWrqSf02wA31Uhhua+UloyNjSRJ0
+ygxb9LBm41+YIBZeQO+86i2HErJuCoXo8hd5HhYL2kBtzhTljgVHfTug196RnO38
+UKU25fiWKXNjCU2xRp06atj7vbwR2Su3ALpNHapTV+3YVsfqkR8SZCSpxshHQ/x8
+2XJ47cjVYkF01SsVDxzRSkq9ykSsqFm3PR7d5xvsLTif5YG1dA5NAi1Oe1M+VsCk
+JVolTyb+LRCeBm9rGHLb6NINs3u1IEYubeRF9e6x+WMqS99mXW9Ns3Js/6hjfp4Z
+zmCaqQvWIU/L+nhgnx886gNrqfo2zA6VQS5JUpbcMarPfnrTsoTqHozpy2sBfy0J
+l3UXW6t7VMm5eDC0pnPe/qL+5lL5X//cni8NkVS/wYRWdw0eWdlUddY9VdgldTlW
+UmTOn9iw324SSN76BO7YnOT05OSQuomZY/+RdTrQshk1Z0IjpmY+WADBsJGbxpTg
+uN3JQ1pn52Vlda2tAKnO1IbGqlArRaqLijx5/T6CALyaU/u2mjYdn9iv3x5+VI3z
+ZcO9tKO6ZrJNlfpFhISNkqgb8rp/dLt+u4MPmtHPUzfgQlUDDVstVqwZmXk/Et6n
+L/f264YFGsriEuai4Vl2krMgER+yBIJtJVXC+h7csOd7cAlNiMmrcBHEoRFaX51R
+q8EGzOUsOREAHmEroYvAwjnAuKHBerr+1tQBmnQtYduSDi5OqgmU4GkyjG56dZC7
+JvE4jW2npVltL3lCm91jwT0/u01Vk3vUJPJWMmFkiAdPUGsAkyWtNpN73Q/E9lUA
+wpYjlVzurFzlJZVcp/iYPsa29Xho3cuju1V4QyqqZvhCHQN/z1JgdatvaYQ43m8u
+nwnt13voyAIenYX3AEbUxOqHhjiTDKOgijrz3RLckR0ucGREflvpynWg+aCPJdaN
+1J2dZK2+QyJ6imQzXmcGpgdQqIwmQWdke291lN5jBFS6+JnQfnt2FjdIRGaBRuhM
+Lr+sRnUn2CUpELV9R/NwaF9u4KAZYUlCrVKze9GctCoKELLH3ftboX3duQ1q3vKI
+TcUkgP9caiPrQ64SrJJYZI/iSThvB/K71vJq4A1ybTsmlsiBOx4TJ907C7Vux/fM
+RLphCbFqkj76WerUOKA8lXCDqP4Pc+/WLElyJOn9oxW/Xx6xBAQD2cFyCGBJvkH8
+OgvZwWIFDXJG+OupX1Sd7oxzsk5GZvVDC0YwjeruiEi/mKm6m6lqrLQH8LjUjOYk
+atpQ8d1HQbzfaEOHvg4/FdPpFKyC2E7E9ZMd+f5LsVXcX1T+RGO1mJBuGskpAEBM
+aiHSl9q+MUkfhlLYs+FGaBdtCHZoG0+L0TZee6U8mpK3yu3NzXG1pqeizCI6JkYt
+km6oUrAeHcI8lO7H4yl5eyJ9pCIerR7eg5yKGi4fZo7D+xpRNBQZwaW7ckdUtsW/
+WD9/lOwJ16iAipY4iqyF4ZBeUhJNQXF2i3wJ+Bb2oDCMFwQaY4mhNhqMqhWGjY+n
+5O1LvVAy7VF5toKh2EYHyxVsTowGtFMEf5zmfz4lP/pWxlXxzC4V27uk4K/Ax1X0
+6t7v9XCXfK3fTrtUR0jYQeFBS+RwNWqlaRay4iCFLLHZxxPy5XnKQmYffo1cFGrz
+YTsbSEWNQmYvfhGtYO2K7Enc1fbO1R81RhtXXKuvj90v+o7CKBVB7sgte0d+UjC2
+1Urlb2xR36d8IvyQjquHSTPh4+n48p1hTfpEqNNx0yukInaaFg34gmqLKxfnve0P
+JuNr5X/lgqdrB1OAjDQHACBokrXTYzSPpuKteFsAbmQM1Sg5QWycW5WulYeaV+Wg
+IS/Ry8dz8fWBQxzIrqRMO6Jxa5iZZjlMr+dKW2kj+ImMl1BjmTQoBG5cqzhUxbdP
+UUsLs+PgrsXW0gwlxchVljB983YyhgjVCUMoXGsPa0YtFuF0xipCPJ6Mrx8qVN8r
+h6ukWQ5QtCQFX41yVp0CP4pfFOw/ilZv4yiCP0XJOu5xCpvdByFNt2ksq8JBH6dj
+NEpUPqvQ/NV//uffvCu2TsrByshmLg2yiE+Opk8lX49MD94x4ivNzLsA/6UXaoCa
+QpBQiRNKVraoTWFs0NYjIpq0xyI1DJhP05geK3uZurCE1pKAI2bsOe7CrXVLLeh/
+Fyr6zAiWYyHBhix+qJ9BCVTH1E8ZzC+/kFy9O50v/RBbOMrpAptTa1A4ltYiQZZK
+043eWLB90Or6MN0vvW0jQ6XQr+hjMyqGyv3eZE+yUELbzyyHt+Kz4zU/HrUKFAYl
+GEfPpBCF40x79UrKoeo+VboFn1sG917EDX4SXrE2+y5MvVyq2D7NIbZurKic4Qwr
+Hs1CA2EZ4QdruMfAPkR4R9NcvbCk0FUQoQirFqEUcVHhjJrZznpeOHxN5vJYnZRW
+kD/I/b4w81M/IJWBAnTd4agCHFqyirA+TJogarbIJeV0R47gqbegYnUY/3ZlnKW/
+omtRIxMP6b750nS3v/0//3irYRcCp8YfBw7R9ypQnQRSEcQa1JwjlU+t12vTffui
+QJ9LL4aOdc7MlAKGkqYg92pcSFGHMwTGaJlsNbYutEv7WKeSKERsm9MqeKoo/CGu
+rQRCJ1rCxFJZlsVvZnQdfWi3uBxW2ovB4a6Rw2vTffMDFM4LzrlUsQ/OEIlCwae1
+MbwxGjYhl5LNC9N98xbK8mNr2syeg4wZszC0thukAfmSV6b7bQKWPl6MQcEV8bPh
+6VndwRo9txj0grbA435tpr9eJGxF7KNKeNBpORucqqTjEFOIW1sZwcItPNu8wJNB
+i01LwU9sWowNWVkA3xkNrrfO5r447BS+tFxWUsHBJbvCeB8BBGYQ3goar1K70td8
+bZK/1jnUI8kaQ8Vt2Nq/2WvnTdrrsW0TivM2pvDC/H5NE5ZKquUFJ0dGC4FqI9et
+na7pL/bLefzr+owo8wtDL1MhicqSa1LoQOGgnTFiFhpX/478/XWg3KE/UMQN8bpv
+2QgzcDEHhE+p04GGzM6qoVcwvaJ8j7hZcrZusaHRimhijC6K0SuFC1wogGoViuWs
+hqqr0xbmtL1i3dIUJOhwiMMgAv4defvrvb1WTZ+jZyyNBBOydnQS6aCQxLfsV8rD
+4fX+Yr5+0ytdHucHwXqxkBZwy6niYZaeihjtK9N9BIp3PXIpBzeioBACs3E48VqH
+tYnZ2uAa6C42n1x9bdrvvBDxw3w4Bihtly02SqXopqgN3anWNursiN0SiDurQpzJ
+Wa30jGrrnGN621ZyIYs0Hq2s2Y+eFOJbLRgmduHBkZFdjNsVauotoiXKBsipvDT9
+d34IDmNhoU/td43pMJxUnNVuqUdqWiuVuOIry+Du2+ygZ4nz8h2Q51D6HpWtH3Yq
+9eXl8NYqqYxIVc5oDgXi3ikf4uLPc+uludnRhR6+Yxm8FW2NSHnWNq6LlpTK7FBt
+5eLaw2qxhSLOvJHwUVCmxt7ym+kCS4B6lE40604ovFJqJwglNt050a5Ye7saiun4
+YCXapBB4FZ9FNSxEkePvmP43v5pCy6dtQzEX4yL09CkYa0O5KmN4n0y8U8P13DBh
+s11Spmu3BC/yKeISBlY7Yd/tprp9/Mda2oVGFDYPUxlUa9RZ70OOfRS/8IRyVKYq
+dT2a3zuepkq7e6VpUOQ7tPaxMzJuiqqngRF1K4rW+stEp6bAjwC4wGdsmkkB7IPW
+BhyAlKj1r3tfcjfIrtHznQ8TBsri0eR17GXBb0SplQmFMW16NKEfv9gBCwT3FUWV
+NwQYfdwC4S3HVpbyyPCi9zmnT2fwThm0Zp2iEOShRuc8NWdTB0lIP7D2C1P2M7Ur
+fvbcX2K34mff+3Kz4mcPfb5X8ePTfqZWxU8f/EvsVPx8JF5tVPz0qc/3KX543L1e
+OS1cWtgaqp1K3z0GIWkNAsqDnAdagz9N6Zem7d4LNIilUvph4iFjqgynLRQUfOI2
+yNLEXjQVWfwTY5KONb2oFeWrlNb5FtK0Kc8qHqR9if4MdZGaVIcgelVyjL7QLZeq
+EfmKbQgqYS4YNfTu2l67OzLKMt1Bq7V4lV2XkuhwYlCYg6JuAtztez+exntPT+jt
+CLXg/wfFVkAf3eMauV39qi37YDpPjYRBS7hYmrs0OpyLij1U6B7tSEEh2Iou9HZp
+Gk8q/C5Gc+jGhmAon7PjaJnyWKEsqh9ttxQZYACw3aatiJtmYcHurNXuG8Noij31
+fJntSDUu95LJI+g6hEb31kQfcl8RDU2u4wQrEPUO9dL0nQqKa8YNjda0MeD/wvIr
+B2KnH8JIM1CYYsfjabt9qtaBLWA/PxU0xl76/qVEp/yLJMuV3Xcqn81OuXcKtgME
+UaNAq45LguGWNgF1hDulemm6Tk15HnFYXAzEjL22suKPUGVFTiYc78mmt60p2avF
+zHXwEl43Cbta31krh8EYJYGiJvEABJmjPmXIFSl06ocWyhSe2eS0ZStngsixQ8iu
+TNepUZNurb2GS8o9CEEZsbwhnOam3j9i0wR2u9vj6bp9qvfizjjNchoq0tSolXQY
+RcZAG8qF6Tq1zk3U8D138pgDiiwumv/QfXUlohai9DT2pdk6adgXdlLYM3dsHKgi
+9/qtyBGXbgKuYAqU+hkrL00CXXth48ZWfGwzdE0QMkRLEaolw+ARZYUqZ+slFSyR
+iknYmJVQNUFKE07bWJsiUZt+abJux8EuIR0kOCJeA26OESyt4WZgclPoyIq2XZir
+W8V97UYFCXG6hTlAHUJUux7XZ4kOv2fz2nF68BYVEQUrSuL02oZZa5iU/XmFcyRc
+swgVLfLx+eR2+xbRtoF9RjamLYFJNMe6dl/iUNsM2/S7BO7F2Y3CoBeb4fosbV/Q
+j7KMZSSqiBVygWyKUL3LW6FAk6mdvOLRK+AUNkVAh6EJf2gLtlnw+SrPZ7jbr89i
+P4N7KjyLrN4/gukoBAYFJMEmI3QR6oMj2c9fcQj9mW4SKLYn4TkKhHuNYl0oll9B
+mue2OoUfpRA/LR3dIi6KQRRbdfLnSpXGGNRwrsXPd89utcVIyz+3ddqVnc3njvpH
+qiCrwXejtY62ZGm1wwUWTTcQPWTpux/0oHilc83Rqsp0ox9qDNSIixJRfyCKCEeK
+goadcp8Qwhc1o3kNb75rMxzCE7VR1B3SwMhB68NasZmiHEPDixDj7heS3vuBXkhO
+Tr9DJHUKYlPwGcUbvHKDvUISTo11XTGoRkUqgcs4RIbo+tTKO3xDS9W463P9ukbB
+zy5XDQzRNRXCPJ3qFsFZuiii4qb2Ey0fNIah8IWVQ+3iOxiiLeCI+K6xJMl02K5z
+ArQxrNPsCYtiaU/F49zY0qQVK5rA1bISxuFl/fhI7eMXK5gLQ5XZxF4G05ZC0bd5
+Khsweok4FBsXHk/auScS0DyOdadtEanMFUdSOvQM/pqXpuynvjqt+7DSoa+rhV4x
+gefefHPk0RaXxkpjMdSLM3bzYC1S2o6nMKNmgsOdhDfwmh6VdNDWRHhNa0V4TRsK
+90IKys3YETNSgUyNWdN+0lzpH+F6WDmuUOpISbr+QBlTHz/FZkQF0MWY2PZ1qhz3
+xQm78SfLzaMsV/ohoTdgAWErxfqtBaAQOdwExlyZr5un9gP3GHFPam4bFzRGq5Fj
+ekX4Kzvs1FCHi5OeYDXjdNF4vHe8ElEvJVFTVPZYiIxemq/zk7l1olNI0caiRokx
+Ca4yU2B7KQjGlMVwo5v4AHa/TShNSFloxGZ0AHtspik8bjejtStrCaXdKPv3+EZH
+7dWMgDOFT9VZ7QiL1VO1dtKFeWnC3rVwisvG2o+qIRp9PAqnTTCucjQukgFR3O7x
+jJ3bN412E8rBVRttBG8WMVL74Yv95xXIcm7Sm60JBwqNK51pfyVXBSVozXLaGgy7
+T2n1cW3KTg5Uxk/0ZShwEBhW/lJELD6XWgSwiqAITlybq1FNVaLghuBsuBRXBqUT
+Tvi5mZkSfZXbj+M6bNLAYVaya/XMpRO5fB39SNaOXnoXhxj1vlbi518cOsWoIrIZ
+0cq9tjiHFuwYUZGgC84j0Wiu8IGz4RlyyRkro+2AlUoAKQTx0YL/+D2vwo/PuwGt
+puiHpoH7GvofxyGMYpEf1u+sMOEotYgX6fbJiMvxU0W5FKSWmZxU24HcbnOKtvSW
+KN7NLG4zel9j0uOcMcZFKEVcqncr2Fg4wFq0YSVNcDB0OXrR/4jepdckCnX2IaKM
+l2hHRWEAULUark3YzQdrAegLs0GvBA2Ho+3ocAzZKNugUa9EduWw6z9OYjCG4qSN
+mMSYYIaO/m4p6IyEcIW/nX2nKHOYAkQCu8YhZYxii3J7peUNmeGFNdm1U67Tk4eY
+2rIYC9Ad0atyTxUsUMqiUWaiMqjYtbg67p2uC98EFHOalqaJaDmvLMVWlmYQ09Zi
+xLDcF4fm09jAAMhmSbWkxKUwLhLiyD1H6tuvTdjtFyPiJVxTBPu9aLvIWwa+KkV2
+NCOhYRMb+QszdvvYaaMIqdPyRCCriwCZjNhim7QFrXplys6tcxXxgkTfrxcf1o+G
+OiF7IgrPSdP2WuPbXpy087MnrldcqLSCVW6sFRkF5Tdn0cFew9WstBxdRzRcBMMI
+FeYwAz1pHtzqrUNsOVZ2JjKxApFhmKbRRIQ+FBSEZmod0VmFmRwUaiiGHJYrpkvT
+dv7msLmwiMphSqMzI7wkFhUNZ/hUSNYiDOVDuTBx71o2cQoDYYmnCslk1+1WuOUs
+wsUZ3Dem7n1B+MAfTjCN4lGlLRRlOMSrG+5n6NtMRdDx29j+g7681k8afVKyb/Qd
+9F7XilWho2q9ITMbPUd91FDkSBfJxjWLHiY/tGeWYKJ2CnLKSyFSlFz8c6Sup3E1
+3pB4Wn13fXYnph4F9iJ03tK7+81J+lAKzwrynGi6oLWCL3rsWcsLi4qqvWS3VUj+
+xmXa+6dFFI0wcnNcgBYzOUDYvqag6LeWeTAdPwqse6zwXBPeM8FkBaVGyQDxSljV
+JIziaOV8OB1vD1Qi8WImfTmBJ621aGFS5rAQRl8tK+VjVoRHWTNYC6ecvZ9LGEOx
+IRbNnPZXWb0hQK3wXmGTuK0KOPhyyEZBi9fWdw4Bj2WJmomDkmbLw+n4UQQ/iRws
+gT6laRMLt+K0+CsOR6MVhIUPbVP28+l4e1oTm17JoWpdRa/N3u2wE9aiRqL50XR8
+LQfXysO4S8lZONQFjYJRNgg2a2iggL7hCDofTsaXx2kiOeA1YRXtXY4OZxS/s9sI
+fgtbC7bh+6YobxTUsBcZKJagiMHxYFumcKKRlQuRr6ha+loRxflp0BuDKTrc1AU8
+ET+jlVApXnwrBDKaezgVX2XlNWgiTHsoek4U1YcwjEGoRRiUw1Sj3RfDg4n48iyl
+zSZkZQ0NTIPqidZ59Bp48uT5YBq+1oHHuqzTtlQGtAWlJ5HPlMWWmtaLvuSwed/l
+cYz6+jxtbSPIjFWD4RZYDFBA3m+0bTD6EnCf2DkkOr+H0PMQE21DcKMp/WgnCZjR
+fKS1hViW2HQMKR+aZk6TnLYrpoXV3OCS0vU5qQ7ASwdDc78eTsTb78Y72QF+a1fG
+618atrQ3RLgM+ha4m5o0P5+Jrw8ro7vVsZWITrGSTEexvuBvO7RO7kzF+mH/ZVyq
+sBRg1DgVTRHd/Nomk14O7noFi0NH/W1+vXD5MEGX31LiEgriWpZm9Oqpnlkeb1ry
+vhLgDigcKWmLCxXc+gquMsKgbieq48tex22/jYmQPJvDc7N07isnujDic/rw6QZH
+iZbS6a6clDBsUFC7O22Xv14EOSSBRr0vZevon0+oiymiFku1bhJlDne67a6/wlMw
+KrSalYO1hCljmZScKgTYMO7uttOzP1aG2LRW9UvDE3cbbnOI0ohabpSmscrTiOfn
++nhi75Tf5B0q2FVsEXmQlIby0w7cQ2Yc8w77cGFw7M/7PCQlWjMbxX+wX6c2tUyr
+b6I+FUl4rXEOeARYhCAQE8Edp82VEclCznd2zBepXC/z8XTeGY9F33ydedMXUoUO
+kDCslp0/BSkDznF4Jnw+iR8fXJoTYFpF2AEf7qqlqx21xchsbcmmS1P3cxXhfPrk
+X2QZzqdf/HohzqePfaEU587zfq5inM8f/Yssx3kwGi8X5Hz+3BdKcj4+8B0Xs+Di
+qfWEYSZszNFyEwSM62pHF05VkP9GL8nDp1P7aDhbmQbh6Rj3EvJzBr0iLJds4kyh
+Y8jd6A8SBcewgp62WI67j0BXkXbASooq0U2lIA4B/eLRGNwHxUt8RA9b6iyqZTlk
+iDWVmK5O3ruv1kfueNjolilEhYuPnk51oq8i71Xprqxq1pX5e/do7ToqVfPQF+Px
+VLDP0g5OnGHUe15Fd575rfoegy+sYcMUBEnoaArVUgV1KN6kXKu7OI/3XmGci90r
+3gkY0Vyr1OaPC/TmgqLicWl8lJOH1qLBU8OHKtIlTO/Ikq1vcQNMT7wCqqDbwpu2
+Cl2MmZbwtkJH3Vb42uTDWiopTbkx3cIecfSLk3nv07WZrcK360goitQig926w6Mt
+ebrjm6XHPV2Z0XvPb7idG6zituhQKGFqrITJvUNg6G511ccHn4786dBXLKtw8Kw1
+SEMAmkhWYVAYL3btoWivBtTbR2sFN8XMjNPb4YKWBezR1etbuDPRe0fBzqBFsw3t
+u1y3QEecgWMQ+qmR47cpDkowGpVplCoFxONEKzmU2mbQCl6UohQLlTzF/UKiIMbd
+N7h58MnWx6rNHkEwHg/2aQZWA5jJ6U9K1lYvc15Kg6cqK++AzWNMBZKksJ+nQOhy
+gE7axi5N20msvaMeIChfUEvgNPXwXYb5UWYIFWojl3Vx2m4fbfg8XJ1pkRRuRPRF
+UENoOYldCjmHIvShZyvajrnp1BMJ9ppDAfSs39iatr/wtKZaa6igejwm6unWCnwK
+ZVvEGLB4xbeUdo4Fvj+O14QSLk7bqerM9KOE3g1KumabHSvpFoQyvCi/1l9zzdhL
+u+50y7S36KOAPN/vgmA+Dp3RowqqH3cNvtyc/jvDXuB0BdDStHSH8umwwuO7Hh6F
+yJaUeXHWbp4cxUA2JXI4AyUbtQJMUpQWWadsR8QYoybADY2blHSssLzB+8iKDTrN
+WdA/Ibao35e1KhELEFEcVNgZJU9q5Jz/ItAKwVHm66mzysQT/VWicPPFCsVC70rC
+R72Q0lwz2msKDjQEcWqUUfWsl7barSh+8E0hZeAFbg4Ii30RejBieVrL1xDnOxXt
+aJEn4pSMaosh3qE4LCA4LP3WtRutLpP8VdB5frpzh1mpH4IhSMrtSX8B9TZUjwkS
+Yfi0fK5adzXR7dnoizZCvh7ZFeEFYRdlNAzAOOcJTeQAcRYxvYbhhDhe6uhtBIVh
+08dhmUJJtAJvvkwWzl8dUW6kWquKOk6l1Knd7akc1TYZ3tbqrVb3pS337tED905U
+95Gwt9R46Gegdi/IgYDMpSk8VY5sUfykmGaxlBG5wz8jKGvYiQq247Qx+tCvMr2z
+bvkWxG/bBgqUPS4zSlsD7bAV8crlLj1jFyvW4LJyB8JzGjmKV4pZZBkzuXYXWrPU
+hYZujW0Jq0aUTHPQLtkjHL6duJ2sSNeT0OF0VNhcnL7TN5tB2YTZeOmIWRrFeg13
+DEdtWVGG21FvX/bK5J0erEWlUBFQA/cmNrM0heKPQuNie3vni1N3U0QiUtAg4R1L
+a7E/wUFRvagf7gxGrn1z0Osvz9xPjz4WKF1GNB1v5XrtCoFBfWnFerQpWGqzzL21
+ofQS1KsUOHGFF1TUhCh642KLtLdYgwi8sKQTeDhmLB8WzPrPQpx6KoHmWrztqGAV
+rUL9yeWJ++mTORNWSC8KBlNUnbJ6DbPe3uHTKzRFvHKRpd8+107hL+WzXZuQRJ1a
+GNoqi2a7qJjsrvG9cyWJYDm96gthgtboYtasNWU6SNaGr7b6jX7jB88uaCQ2gyWz
+UKV4XEm0dKU0Nt7Mih3aXtYJOC6j9cGQ4ZgrWGnpQ7NWFIKync39jSK40p6o6UYv
+Q8Sf8zNjej4aRJCjEqAJ3FNxjx65YbnK9W6/2XOAXLcWRQ/LcrAQHVpQB3XhEGei
+Gt/DJaZ3++Ckn4xhuUhpnzMp8HI/wp1iAFxe23GnipLtF6XLdIlrkBPmFgP5UhT+
+lgbGJXz65mWifqpWUdSlZ1B5LI4kVMVoa/KWvjY1/C68sQoWApJKhIEjg9BwCvG1
+jOA59imRcw1cUQXI2jwUn5XWNI4dGIyxrL7dRpH3oryx6kaUTyOkOH2Zpt9+cyoC
+kdxOU86pZCp+GVemPiUqQ1WtDtfFeK+R9NNgeJxSyRmNI1mEZDNOCgJXmc7wa1N3
+AoEKA5QT1SVMhmJPpVA0idTEFgs+7kLs5So1/49TMbvloFW4eontN4Ff0UalrNJz
+sAo7qWlF9MbuotB/Tu9ptjT4Cs+kjM4Rc6CeVAnRDdw3FdmVyLLpFEo6M0mTyJAV
+ZANE6Kgvb3oOdbOXJ+621MYemswhcTcnuC0knzQU6LCMJgQXlDyi3ZcOx26fi0Wv
+EA/OIXjwDi+klfHPdWJ5Nl6j4OfCFZZ+sChFC3K7UjipEowQ+Y6N1gdBP7O/0Ybx
+4NniYfqPzfhv01OLegv6cAGFTSvsYZPCMQp6NM6sgu8M9cvaMugeU5+k2TU0bGTu
+OaqpuyOcM7Avs9rKcSN1Qt1NQ6bH0H+7zYwI1qZ0deLO38xtmwDlrEvPBwJPg12H
+olwSa7RK/NToXZq5k5S5YM3GgKKXFfdYVF3QTZYKqhPxXr3+33r7t39cuVgalaMB
+gWpvQkB/J/kqvDCOKpxJrYc1ylB3BRivv2UHclT3AlOcfthgNJX+qAxWChSd4o8U
+VPh169AH1F4diidmiuiF1e1CdeM4io2EW3y8bdEcEpnnKukQS8dWTL8H4xRtYqHF
+iAyD0Ord6bz89Zjz9U43Oqh7U5LZyKxmZS5EBT8SNUl3KrSuv2JtZeuwxCG7R0BA
+mEnIWUC/KfO4+NwUv3PFHYnmu16hOOLOK9EcgzQulz2KKBnR6dSfneLzWxoFE1or
+ovIbtToReIUDpvGoZqoKk+J33nmEW3C6ICALBCB0RxUBxlSdn1upJGd1NN8oPlmx
+d+5uBey1HFq3hzKndrvguqBCMUXxPO5np/id7bHYZ6XJj2bHYaOWKhYEWRC++cil
+9/Jh3muluvwKa6mf2XUq8yhM9JWEf0tCWisp7eznpvgPv/r9r3/3x//ytnxM1idn
+EZcifJg1JOJnUXuuBG5I8bRx2MM9O8XntzTFGpGLKrKgxYlltqYIaRwFpoRYSotZ
+SVXMv5WFzQNfE4VUxSIMVjgzGc89j9UipCPLBM22p8xCaJXQqKWKXJ4ZvSNhWEQY
+t3CLpl/pdDw7xeevR7mM47qaN+/PvCVzIBQU8kZB9lIrNPmnpvj8CgMEWrajKtg9
+EoBJ/AQTzuJEJR7u4juyEPqXNcCYJApxC7tZ5bIpTG9NXoLM8BHRhP14Yj8+W6EG
+VG9QMWGY2w6bwmYbc8gKSFUhuQqeAnlCDxRj1pGTNgflGGiQU0exclf0QMl6OK6U
+Fg6h4zD6zto/dVCurt0vvJEH1VFc9Gs9tgs79o6eBboeVBTSoVoLIq+R7jANuOMo
+znaKrUt9MIl3fP1of6dUWDAe2Rnxfxc1vtXSun7P8PTOE3+uW/pPn/yLvKX/9Itf
+v6X/9LEv3NLfed7PdUv/+aN/kbf0D0bj5Vv6z5/7wi39xweePctSEBkYWBu2upxI
+OhcDtC1v8bVwdGLa/I0WqwfP7k5baguQKdRtIUAhTKHuoddlSqRCrjEIkQRulpv2
+JS5JevkoR6ppHXNJe1hZ2haxSFLSnx1rtdlL5tJyBZEPrTiakxXLjVYhbtlGLD3V
+cXHiTt+sGCxuMw3aCMJOFFsrM+HkE8fImKtuxBfKlZk7d5whhqHIu7TuSjCxBrer
+EpA2Cu5A14Lk6TABF6iiaRLy0k9vvaMS3QddTnounuHClSaYq1N3al3aKPb53Y0W
+bVv6WE1U1gBzL6jMrIXce6daVTFQC4cJQixUeGnbJDqPaigqV5hX5sAXOduoGR3O
+imJiMDXCntOLnDsBmmSGNUJ31U1OUK9O3enURtlmZSf+Gmm7m7uQjpoC6HINMXRz
+uBv0S1N3++CoFKznCO6UHBChFL7udiv4J459zbWpu3VFU9zpDJmQg6Cn0tEOIhrk
+iFDsYbe2RcIvb7rbIxDEtRVlgAmaLf30aLQKTJpR/2WrGBIpVKFUSS+gfB22jYTM
+gbupK8jabP0/z5EP13I7iDlgNb7QNYk5O8VMi7uL+MrC1l17xQwwa0hXg+WpT8wi
+bS+MVC3yOtMI04qV4iSq5aAvdWtORcxL83Yr8YDTuBtDWMGOtkV78ePcpRzHQP7i
+jjv1BRlt3aIsg1Cp73mPmrFJFCvTQHTcGemCHlfn7fbZdGsL6A8xhL5YyCvSceVQ
+ScUF0pvUBzlVmyh5kYKNATwXDH5NjVzWv99rpGHNRtRPfTQ4ooojhjLFFKqt1eW9
+tdCcnrqU/R3+cXi8aT9fnbhTwxjnCiVgbBAmpm41aZFom4yIOWfeGisBzEvg5Hxq
+w5kYptZpaRko5EbsZkNtOCMFF65N3bvKq43WBy1YpjqjbeIDBSlBXyhKTDlCyXR0
+XJ28d0/XcPqCoWhUCIo0wRnrFATn4buOQjX1EXsosfZiuXdA898PapDFHzi5jFTh
+HgXtRqu/0n7l7BQL1VMH5cVbSAqpP8VIlK4EQLsC/eBk7ur0vWsd0zrwHn8ZBbJM
+WIg7Bie+FPPhwUu7w17Xst27jjcXQtbPSkYUduoN07klKLC0ifSD0qUpvFcPNTmx
+2JmAlZHN1Ai2NhpqQ1H/lUAts1R/cR7vVqPpkVO7EbdOYQHF/zhWcSJo1JeIvC1N
+RMkGARoq7rXrMDVfYAYOt3G9bE5z68q2LZWCj6NAp9aXsv0mstJPpEUiUONjo8RN
+m9pv4a6g4bo4mfc+feAlWIPvZkVjD2uJMgSWFk1mGplAE4xC9ZUZvVsLiK6kch+Y
+S5w1guu8x7GSK4h5Laje4iLx+8zxZanm0BbBf6FxxYPdFDa3KwgeXSYOp0eLsOFK
+1ubhSSsGJTySnBfpQz+axiwKz8BNRMXIOy3O0hyIWi3ebhz2t/iTiwxQujYUQI+G
+NvH6nfH/XqsrkVJe0zlD2lAU7kHcN24NP/9ki87YMEN8P+gNiimIijmInlnZD/zo
+cEC4Mn2ny9nc+qGkLj6yu1u2cvPLGXX2U3zo0rSdrgydw5F8ajUMPNUddltC7ILt
+XLHi0yUgb9rFabt9dOPgP9lC6dkCkMxeCz4w3Pd1zJpHxbMmB/2ZpSKmiAKG3aOo
+fOyiRoKSRYtpKOS75vjR+pnB4FuqBabAGimUEewxeCsL+7DKxCW0Qla8ShtOUmWU
+ZhRF/VaOlncRmjTTsHNzkcPzOWS0lxLhCYYLablOF4hg2KCQJAjzN5FdRX67rx2K
+nS7ITKUV2cwteO8EspBmSEt7zOGjPnKbqbqrR2K3IG5aERxLKRcxTuFZxE5zAWfo
+cWKxt6feQDlSpXEMGpxpPBY4r+KydiEXpWDJ5VSsSsmDP1lUWwhm4p9TUGSf2s6z
+IAIwAK80tMxmrobM2y9OhSPL0dzMEe9yoAAHQmJ6hlLqyllOiFfm7LYareMbyk1E
+1q8YC1cgL1qb3fSit0/kvR871X6M7HuiIqH8Yn3Hr1CZFM+JbbifF3YQ8vpG2+W1
+V7iWXBQ90Bpp0eBcYTD20sLVTml7JTGBjVqSTUdpPJ5Z6D16MeOIrlJM29LBrHQf
+SZNhIQRQ6SIU6FEgK6t47s61X5YGWNlJP6UgNCzOvp/Je+8+vVQ6eoWY9MQpnqcY
+rY03FZo43KGZWgMXzL6c996PfoJXCTJ6jM8KXLN7pzwxtxL9stcOzM5Vb0uBsjg9
+FMMYpxmkN43rDKwPJo29AXPhq0jmfbke+0qj7UW7heecwocf5Uud7HKaKP2AWWM2
+uLtrXrS6BFlhdQnHKKNYNoEpXlGxKVeKQ9D2h5ebwIpA4Wr10O0ThuEch3ZPgTGB
+3cFhYrh6bHb+anFUI5C+Ek5kK/ItHYszKgJFNSb+GigbXDo5e1d1qagxaEClTFI5
+wOWguTO5KX9UseBLU3jW6RKaSFGI02Eri7EC4mRreIFEBZXg0G2lTuTaBJ6eLVio
+iHx0W2q/Z0UQhxZ9iCNicrRQ6gt7Js2RMMf02YlobVTMqeB1WztgIBWiGK+syDgi
+nE7VEYqcTctMkCYFBFCLcpe3U3Gv1EYtm5LlVfByLrrsLftKq3ATewjZTO1ABXVB
+RcVVhZUiCKr/dWXyzkWGItj6ToHOjdd9Fcpf0QlYe4Qls7s4dT+Vvyl6cSyM1W52
++MWYuMsaDYkO/J/LwmUz7Mszd6MFpk0irm0SBfTbVi7lBGnBMtkqupIkbS3dW/G5
+Q73AHtc8VGgIjk2qE5yoAnUywp80aYgjUoUvBlIVhbawhD7fbbETHOUborvV41qf
+5zd6ID7/5Oa0vDzSbZ6CLG1vjvRgw0ieIBWChrop1+btp+cKDgthYPI6LXRHdE1L
+k+u8JajxycXQyUTz8DN+O4nDFug4qV7NU79pBcdd6slx/6yHhkHB8CfT9q1Ht+l6
+WwTzSN7DhVawVkFYRBbL6sNAePmduTBYdQ+kzpToi7WaykNhxYokbr/AQPqjYg05
+Z6xhPSnaYx+qv8HhEwUdaFnF1HNNTTDPfDJt3/pkAdlKZ42vXrFe7Lor53pMFWZX
+oF9Mm1jDN2Plt567qUceHe40c4qrZ2qzmxITHXf9zuXQ/Ptqfx3th8/rNf78+1//
+J/39t6/PdirDoGY8lE6L1T5WdmmhY+dX59Rm6SXdPUx75X2N+/HVjmYOexRkc+KD
+ekbV68rSyi/VB4GGXLxorei8nwJvrRx3LgEpoe6DE/JMWgsYjfoCtGlkytCM81sU
+ZVlFj5ABG0UzISxLmf7ud/slXvkdsXED34tWliKYWDLkaPSOs0el4apqVwgLfpj1
+V16WxGwUaPWjRsL6S1hbqIGeDafouNerS+HmFVnDP7QVQksGo0zFXSWhKFCvgLG5
+khL8V5p7fR3cvIzwi0Nspd8gNqEWb7o24FTeRlEli59kzIaFgBxONY6Wfsqmmmhu
+DJRJeVgvBfxl2HQoziNQLOYgRLStDcp2lvaA4UjbAsrlUMHj+n+9vghufoTHX10E
+OJXatdK6Uku1UyimGaNolWr12kZ3DsyffpN2y1ZktTnguEQLm5jjsMyOFrfxL0//
+j9IVQbF7i9V2tPMVMdMQj+jYSQmjoXATx32TmqdehO3wgi+NwiyZSlEaotKFxh6L
+mlLy+A81RB9Z2Vp4+p8jjIUz5zKBwjJbRLtEdJS/9d21IZSm/2wc8TJSdlMcaCTh
+iFgxEbZEtWhb/Y5p/zrllhMPbXAMaGOujhrkkKg9mGhjK+85KlxfnfKv91KBgCyu
+MJebVYFYmdBm5M+6otgu3xP4z+5HxRusX3fyNSrAiPbvvvVuqyDjslOynfDF+n3B
+/53jUii0IKY5HPBfM++XFoLBRlEso0Sij0BxMFAyww4zXYmecz0REv27E6PqILQY
+UE1VgK9x4UXqV6RmDBv6jOJVsHiri43jN2+UQmk/Dt+XAM6/paWtTYjuhhJXR/cF
+7UtqHRSABOn1A/BON9+RBM4vnFrfooGUx9QdcFRV2sSTk+vBWcf3LI23ChKwBodl
+Lle0eatyrVJcwsxPk0FFfqW8+LuWxFvLIC5bA2hTO3pRytCav4pbNppRZkQBbSK6
+eAGKb6XWnFPxiQ03aLF3oWAqObowg92N46MpDqEoTxFuyZwyYvKh/VmX97mGtdEu
+Cca6/H1L4Q0HBC9QUkXe6febuc0gKCX8JIqEESyH2r7771gCbxI9gZonjdjI29vu
+DFfBArv4hmCM9Xjq7xTnsf8Dwg3I8mzXJuXZ2m0bMwIwBt7Gy12a7TvCMR3vcG6d
+RglBZAm5HIB8TAmx11GxcprA3L5a54qnhHl4QDuXTEdGIO7tuZso0VCd4Gm4tMpW
+xnUMREWai6YSzqihmPp7LVF/UvHhvTTBd0YFCfEmXCI6rii888CTAFuLdtwcIayM
+1t3jOf34bCQ4Q5od00S7p2ACqvCMTfXJRHd1Gn+mQr2HD/8l1uo9/OiXy/UePvn5
+ir1vPPJnKtp7/PRfYt3ehTF5tXTv8aOfr967/8xzcZJv+ljxf4u2Lq2sAul5l06G
+MmEDV+O6f6Vz4fECmQG0H4MVTiviaaKAiyKd4mMm8+nPfBW6xhA3obY4hOkQyIxI
+E5QQudBEtcy6xYW5AAoMP+DU4V1Dd9/rQ8s2ZfrIdWcdWeujbADY9Uk814KZFpLF
+82traTmnL1UYSbiINqQREb4d09mLs3julrRI4xuR/twCZ+H4rpRlcW3AVufyNJ4u
+owQtILpaujvN0kxuVglKaZKu+DyKYlcYT0TS26ejo0OrXgOhzomtDoSR40RuR2m/
+U1g0GFlgwxzo307dKq8pH7tYjyKH3kXIM1ImwpkdqiNiRPaDMQulzWJm6HYvfDCK
+RkikdOEIE/YTk3jb24g0k981Yc9b29KqHgP7caPVpTfhMBa6q1fn8GzUE5QFOP0v
+2RXFJSs4tTAEM9pQ8/IU3hYtCev7KoRHeWe3yOfXUqIQjuZQy75vEUGhCvPEHN4+
+3k8btXR3JgFyebuDAkfUYymcjI0m0qWEg+6j5my6oYFrFG5uImdV7EWpewjWajzR
+OkffV1y4aZPEAqyZk54LbfMufJ+QlcV3IuEEE57Ih+casQmqo2x3aoW5Q8W/i3Pr
+wZHT0oZHwCjx6izePluzmFIzIWtZDo0Gd5SVMhSr9EHv78VpvFfoUvCcwcXdKrPk
+3CKmN2J2wQnqb1991p+EOq7P5r23CC4UBJ4tzc/a7jtvLkwUUcmTVWnQuLS4nzbi
+p9NjUV3FxLw1yRfN8t7bpUbHjyJvxGZw7I5BFCVKVbs6Fsx7KFQxR2XzKCKOOSKG
+tXO6Pqn3vh4ftulTnwrxu7HoFccQYrIK44goKPbvacPFub07QAONdICd0YyIZNEs
+uz2/2iv3XEatJ4NB3OSFhqvwg+h947+XSP+2LubCranC+Xgm2J6EnyCIM/kQBGC6
+Qi1X0THEo3nHTcpBBAe3ZnGL5UTRKle1A72IQ8l2USSht+PsZrT+IpHaa0mIeAmJ
+aN+L7uWjCkhTPTAkVNxBkR+3vdXbvD6lpz4ArRrGRehVRGZ63ArEjEup6CnpHYo0
+YPCLU3kWQtDnBidcgOb/EkYQpRJkKBrn7trlKTw10mMt44syU6TFFQlw72sVkFQ8
+cRxVdEQAyvUpPD1994WEtZgFLfpVlBdAUrVGYqEpT1/tp4uB8//StSap6RcQqhV5
+9JWD0W5zhpt9JayEhYI77pK4zkY9VrvTtqAdv7F+V3ql/7kK/TRffLk+hWcjRuFS
+Z4z+TackHBYO6ku70MU2hJBjzpreK8fCHx4dDyWdHsy0icWNi4Wmsgf9aio9rk7h
+bQqmNmvqq+o2RqymihSYXBfCJE5LLQupCYP06zN4W/qNgaPgjWiBj8RXrBwoVNee
+UxBfgkBNQBzb78T2wUgSrSxaLbUHsXpfaOPQ9QFzFCQS77coSY4mvrgMbNFtpow2
+izRnLR3rCWG0tZ6YwNuugM7RGiXdtOYqxC1xEczZIit72SToquVxNVPemjOawvVa
+XBrmoiEvA1UbA3KFrKfL3PFdQUVQjBB/3pH63ri5O1mCgqK/tjEaGmH9kmfo//kF
+tnpOUTdK5CkMxaGszL6E5KuoesfuVwRkRwE3btKX/mmO5vlLd4j3hFl8dsLUlhNs
+pSkBJ9GkBN5dnTs6q62MvInCHp5bayiYIMwUjvPu6wzy/OH0toeo4AySV2RnRunt
+xvmhUnJtZ02lXp3K9w55hydaR3La7IG7Cm1QQT9XyT2nywH1XGKhuFxcF3by02iR
+hCQ4kpfox4qTzmuvnJPDuj6Z59KQPQIHlrj7iZyapGSuXaogYoUHbR/D9uAWUktR
+FNPR2t6U9pZ2hDZoxfapihHU49hROSll0aM+rAuUHSH2ST9Em1X41ZEew8IKerM1
+132V/yujIkCtIG1z01e7OdjxTnRa2QugrFFaYkzu6kSen71N2/q2TLtObSgwlbgQ
+0XImKWNcn8abuhZB4UA1kAaOGkvBS+2UqtQFvEfIkZL1mJ6ZxZ+eLrqgj+30ZOwv
+mu1IZ6ZQKWwwFetXqqmNQKEPSWAqCuRrxjRWuy3qwkRqkUjdXGQV6pa0AbtYBp6S
+tbkllCBwio6Y4qwSjOKzmFrsbMuanpnEn76aOqG2CtBubNtTJ2sLH1DZP/TYlRfW
+o/PyHP70aIPxGCcfgkZzao+g+Un53hKwid5c5pEnKKYlIOgfNifQTXskt6rRQedD
+VIBCJYsomH+CR54L7gP6Hlakfwp6RBTQkvKCYJT+SKEqOSMk2gVXELUVoDDorWp5
+DoVZj+uFgLcCsRf0ilVoNBhMvGjEED7d2ByiJML1ul8FrzXOdQSKK+pJz5zo3H72
+bnppMmKu4nce3Gg5UnR7iqEeaaBSo3/5NOCkqKWQg3rRVthgu4jJIIfiFFlFNNq4
+PI3vumt2NBQHEjUU12bU9wHgjW/24JLormhIn5jI8wuENLqlHoRzUavVghbaEtzB
++WpwyF0D7h2LyrJIo5g2nf6vN+R/ncI9uVr7kJ4A5cGA6ECkjXSj3jq3HtMbMU8b
+lnQe9HC9oiuvi2w+QTXefTh22G3vSdKluUlbfDg0osQbc1IqoKFkrav3HO+ePgBL
+TZt6p+Q12lQfK7cJQmz9p9w5oFt//cv/+uFzIZLzdSimv3Fz74EUi3LAaBm57WIV
+8iwdQDNQCntvap9+2c6Y3mnxWGSPa0zc4lC32G3QYg3DuOaH4IzSB+ohHWOZ0Atq
+s/CjhqmWQ5Fo6QFlhMpVF0qQSgcGwRj9Mxw6Cr/OZOmM0wJAkkb/eMt3D9Kf/hHL
+eBSyFSm0t5qfK80s1EJL3oLDap8pdayP7OTpNylO1oxf6M497sOpJFDLMb1itJv+
+qek/F0hoPfWFxrFIsvicJhvtDMWjlY7Gy4Z70bDPTvv5JSKzTbCjRn041QQJU7Ce
+UIgX7G2dZlaEe5XQkMXOgVKAXZRxZ+pHlsj46sxFp7L2wjQagImzPdrktHsahe+d
+UNRpuPY1NA+VzanKz6s9Od3nj7f0e9K7PMTwoyn05rlFcqG/O9MujlhcfGaa3znG
+WPHyQG3zbJajEsSf+9Y23wZto5d291vXezDa18o0yoDKA5SS4gIfNb19CVop16Fp
+8OKuflOP7XVsqtwi7ek+mkMsvtCmrRkIvuJuYkOfgboBJQnBqpptTYfeeUvcuoa4
+DU30S7tHkaZspBMyBnekrbYzhZpCEZbrUQplLS7xFfPYF3fzm6RDqtMpE+srleSD
+qaWE6unPUXaZ6I1hHeRe2cVvJb7ZhdHJmxhOjZA5WQxrbLeXc/vi9O4fvmHJNLQB
+ZlQqTlhQoewgjBn3AS0obtU+W3lenuFvvCfUigyb7TMJFk3BLbS4k9Vi0ownzE8j
+QsCoowom492NXpsWg8e/ChXsJvysFRhK0i+PmnRF7NaU7AXPknJkMt7jRX+IcSOr
+sLlFFBjD2vjyJH/j+1fegYaQpJwv+IBOVaYZsYu2UQlMY4oik782z994iSKPxqco
+MYm3rhkFSDRiEaXfjLbpg6n+OasRPn3wL7ES4dMPfrkK4dOnPl+BcOdxP1P1wedP
+/iVWHjwYi1erDj5/7PMVBx+fd+9WBl97zrWEpoqnEdGPHZ3GxUGketMiVkBK89rU
+3e0zF2vng/FttDlErAtQLIOZ9EhfYaAvGMNaVPS0YrRVRAJDF/bDzHY7hPMowuZq
+20QxgdqK+KLiK6hI0FaDDtBFiE1YKOCtQseSd2JI16bwrnhAViYpXVu8H148WojT
+otdHminC4UtwLD9CQN98fPYipCV6soUS4vZrtYSwwjYRyaQrU/pOtrtUJ2jG7Wzn
+FFD5xTQKAUyBKHAsmu47HXz+5GS0s5XbtHXMxqZDoJXz67mxGBQdaIpPRRNji5Lk
+0Far1Q+gax9Z+a96fJ2JW0XfVsyg99TSfbN7cCGW2HADUhra9O0OijOXAhIhCVeY
+a1N4urrT75zcaBiNb1GKi6uKP1VE38cIR0sYx/AXpu70WLe3w1Vqwnamgu+KeAbW
+hi6Ly1em7HQbM1xEn34OMKlSEP7JEaMnL96rRKUJzYIf16bsJCnlhIE0pkh+A0q1
+i7R8LYKiBecq8GbHKFCwQ2SKUoym7Cf+0LTtKJR1HBggIqYNYODgWE9qSp0pCKAX
+5STF151ovCt9cMMTWhQj3RPLzktTdqpPEl4fGxuGoPBpCybJI2GTq8eL9SbEc7SW
+LkzZaSCUQjW+Y6UcKZYMlHdqVaHnW3O7lOtuBaRBbQIFddLEjoqshm/bLWqOqcph
+2CoY36/N2M2Dg7JPSpod+k+C4L3XTgoekdo2slmTewfXs7aZs1WZW+HIUe5MVU8B
+LK5KP0MIHb8qaoDKQI10B8WsJUgyy4Y7m6kBWGIq+mzBEpy/tOkuTthtKRL2JtZp
+LJf2VtljFY+ahqK9IveidSpiH39hvm6fqif22pWVBLwDFf5t1+gcQtK23GtT+vi4
+U7Hswn1cg8ECXc2gypmqRXOpopPpOebWcKxrE3Z+tL4zGlqqUhOMz0NBQSm+GiTG
+ObkQRxHVF0YU5OfuquFxFpoVA3LeullXOKRRrKLTQMGJcl6TRciE7XB/iQovGTHe
+ZGtJHCRnbT19chS/TNem7CzwKWwWkdoI3tH26N123U8yxEzNCqlqp2hJX5i003Oz
+1TOGJ6pQbN058qNhf3QB6tYvTdu7u7FdG2EK1zenrJ5mnuQbff5smtLeleBFvdNF
+UHl+eOv6NwX3o8ajRGTvtSia5gTbCRFX08QK9mH2a42fPaHBMzFS9tpDtDQKQDbE
++m3gSr4eujlTaVZkgYLCwRGx6Xm1ScQVmlIqFlqISexvXJy6dx/NjXVTMOturElJ
+qGCtPjf4Wijjw3ZXmOKO88vDJ5OySQcisZaAi+PNSBsX8Ir085XpO5vURPQ/oqaQ
+KqXSJscNS3RWy1hp326NrgJIvTZ5p0crhwWgnZ0ReyjRapdCVMbQNlFE9ELYQcR5
+rEZfrsFSW8OjfdY5GBOUUXA6bIlF+DSnwp7NCYliLYTRTSm9d9oY5xpCUQWDb0FW
+ej97sZqAa1N3+mTMobZW8+JiNPvWhSe5kUUPXwuGvO854rswceehWBupmyUWE8VX
+7VS05yVhBUUJd3Hablx1En5m1MSIdWM3PbQDuLhby49Fa4xFCbhcnbWfnpzHnnQF
+Zu7qutCuUrpYl1Im+ga7CmE0o9AXtbqz/lGjNJrS0mZXyte2xFqLbqzD9Ayzcq/U
+Leo+C5p5Y2Qcj9KMgbo5TxcEba6ccQi5hxGuTtqNrc5COWzOlMvqgmXCsGKeznAn
+LSTSxBItinOX5uzmsUAsPdNuDofaSrhlHH1Y/RBiuTJlpxuv6KPAgp6p4doiD8H3
+nowSu1GGs0otOdH+2q7N2dn3RjwntWFF32irMkyC1xZO9HdpKroerTisv1+qqRRq
+OScUb0xBP4x6klAGdhTagwKitULktaY0VZQATleHwEzcgiN0Omv77TK2j8IAWsDV
+XJu00ycfXaFdkBwGISbiLZ/RODONC7kz7kzH7hdm7fTcIKZnwUzCupUb77Uzgm+x
+doWybi5N26msXVtLO3ULpx0cSNmEw/24aFk2lEZqvIK5iPzPiq/CDLl+aWoX38qK
+PXMGAUdoa8LXZYpxCFsFIbhaFzJAobroRfJi0Bw5Tt/CqrgV4HcpWGKwoXCH6DhX
+Y0IPyNU6+ruFpy0VmIXSEqXJiwHy9MmirR4Xr1FoG+2zKEjiSInbAH6viWJAb65g
+/7NLj6D0SMrLKNMe9jVZWCwU/TjLIeKlabtV3UKLt/iMgoRxWgA2RKQE6SrDpc6I
+DwiJX6TYpzr2VIbzfpsV5thRv1gLy1m84I0S2KS8tcZDqL5NrqiygMSh9qOfplhU
+FLJ7p5bFry7KXIZCQU3HP6qctrmyR1/iqIpTPBWtUK53eVCfM8bFk8nbL3b6JkXH
+wQmi1vLR760/GQVrWE5tulnUeV2Zs1sCoOCSj8ZMLjETJs2uKMEtbVytgnBpyk5y
+rJtqERHgxTlhcELf1CNNhZrFlaoi1RAHGhfn7PbRimYzom269fuF/aOAA1dBWz8h
+g6fbElfm7D1WtOQ4UdPvwPVRa5yyr4J8q3AJarO2RWWB5g5LQW1ThEgxzmrcL2Ul
+R6yZy9yc21LSaC9mtXPvgWhG0W7NEG3tarcjGHUptye8dPQexd5+Ja2dnhuD2Qba
+qoQhtGx7Qg/aeExuaa+9NG3ny/9W4uQQl2MrCsEsrCksALTptLOTN5u5iEbeq7xi
+vyGq7baoxNq9IUaop/uNyjCeHIOSRX2C1klcNOZW0SbyXcucxHJhP2bmXn4plKyV
+FQ0sWgL6X2KW9BUpKyrWCmh6CtMLFq7KeFW48uLB8vuPpvtKYSYXPVFQTDluirWY
+pk1XD3+vbqMbVw4k3z95UMnlqtvIfSsnZ/xI+hBf3VqN3wyUJ+GZ+Zcf/sdf/tr+
+df30V283pUPrdaeFtRmGEjuLDQnqiTw7kzjFjU0j+cmFzsUXxS5MMbNC4grY5Qqq
+CTEC7YfQR8Hu1SK1EWdKKMZQQiHaunGl2vpAJfSpaFNNV8JR+DGUFev3Ux5olPWc
+fghAxfiSxJOT5lWDvo4zzTndJ7d1F3+A6EGmr8BpG2ZX9tq1ooMnXC701YWlqgYy
+fovjXXyLiNI6VOOUd41JsRTk37NSxfQLUHtluv/6l//5l7//7W//+PEv/tP+4caJ
+xx1lgNwu+VTYuFP7R7HHAcrM3MnndHG+P3nTWEsYd9DroQehTHlYzwXOKoUfMtZ1
+nHzmfeBkTZ/AYOGg2oKARAOnNtJRZVNdX3TcK0EUn1bF8KBSBodfJ5V6PXRh3Fii
+mOQQx+Ay8OKEf/ILhI/tFqYagxPEKI6hfafxowAs16kISnFpGldm/JPXYA9D8QBL
+NXYxm4gf42SFe+92uTTlXP7y+J/W0xvfF5LlWjIIPWrLkaYA2wJJniLttoVtNDXl
+4oR/8z0rDvQZNPR6IiLlZnFPZQWLeq0+eQ4fRwpGiJZmukxVQPXR4/5oCvc4osxC
+fnYtg4hlTgu5S5NCVmxg+0N4OnWrpjbfuO5IbWrLd/GVeXG6v/n9Ix5KZE5bY8Qi
+QFeVJAQfzEasVNQ2JaWXHK9M9jdfUg9rKS9Avuj3WzRHZI8aOVds9/QBvjz9rXzj
+v//jr/92nDcJaXot/sPRr7hAt2zBBmKVpQEWMuOYq34Std8/sWrD5dkOlodxfEZE
+raKL4LT5TKeqQrliBaxEhQENdknceWNi0PfGkyk1LA4zGqHGO24M5hfygRdntcqu
+edtNu4Fi2ewc/k6F92z7ZxdJ778U+IpSkgh6miaZVY2+PBchkVwwVsDtfX5zot4/
+rjgFDYXwqVVLGkG4AdMTr/Fod53Nz8/569/+vo4B1GqZZSOZrHnhF7uVp/XJFoMC
+xnCzOy3Ux1Py9sRVgq27RKrBRT67UqF+2nGJHSDmfbQo8pR2RN93IcWxR852iJh4
+P8QNae/hyAlX+YXPS0n6mEA/JJorSzhKMLPssJOC7RKLHLRXUxrXPiP57780G8xb
+FVGsD9ydgqg66l6h0I7KIUKcIdQHU/L2ODO4+xLMVgDhvH1x5byDF249TFIeTcn/
++uFLmX5RBo0LlWAh+Koc7SixVojdTlymWgyM93g8IV+e17TKfBpLqxm8G1NsQ7jJ
+VTNxR/RThC9UCtiKYMcUFt5oSHLeitNcjq2JSmt3zIa/66S4VaFLcFY7Q8tZ2z95
+3BysYk7cle4kbTEaRUoR7X48HV++s6ObZxD3M04ZcnCeNbkgp4omxCheKbRe1oPJ
++PKwwcXDHAv5Y5H0jQu7tm2xosGrtfhoKv7xH/84ZnTalKYi/uLc4ojbUbGjbntc
+ojYQwarRPZ6Lrw/slJhoOkVttTm02AySCGtybKcJ6kaZeh5G71xMsBECFwGagoE1
+dWP+FHs0N/W4TO2rIUo1sfHTrl2RW6MpOB/LrKtPLe4ccLg2IfQy5+PJ+PqhWUsN
+DWyBVTNq0grOGK820YWofWimQTR2PIpWX5+mDy81lD61nfCwVQrER1HDenih3pGY
+X/9vb3//6xvB+Nf/7y9//dcv//3nP/3mV7//1R9/9ef/+i//1x/+/MM0f97/1n74
+7382/2GMQY7RvOHeIii2trJUb6UeTaYDvwDR3GUTXsQCEuW+AO/3v93QqbRx63HC
+31Pxi4OwQG+FmJ4/+ggFIYzF0qVYHIT3strvirYIAlL1SR+YEGanXScnmjEUkPyk
+NL4OTiO9047TGjFG46mUEsQwOVMP5j5t+O5fNXuo1JSOxQ2yFmIrLeHxgL+W82i7
+F334RyXt73+1dYn70KB17FrMRmC/hUhjr8/4kzyzhH7169/9+T//4Z/evQ733B9f
+5zV4nE8X72lndfoWpVYuxaoyjQK9EHz0IT63ei68eEVsfCgeDNQxJRSZshEdbyHM
+gUzJxJwH5w4sXRUqvcnUBytm66+FqLb2atdMeDABWrJ0d2qWgtZbqb1yT4wkoeJN
+MX0WRd2ykh4rXjjqcwvnwg8K9K9Tu6dogcavUbZR8DCmj6VtwBHJpkfiiTVzZRgV
+EKmpnD0XWOgYnur4NbSr8JB7Zbn8+yevs6O6w6RVBEhETvGY+sc5BB6VcLs5Bny8
+uFw+eXFEIJ5+1Y3Qgkb1KBXNGIa6pBeSlxU8KstFYIazeQq4aghKMNrNEcfPnSp9
+xLSdDsr1klZba1yKY/ND7bwAjIZt9ia8nVuxXHksO/1+bbl88oNMVKzU0ijHkbPX
+NDqx4plG0WguQmc6GjhfWC6fvNULA3PJJ2wVMdMlMwspGaqx9RXtmeXyv/2Lt8ac
+Fuc+x7KqlNw1L/oZgv3OIZfU/HEFRqHnwNXFfauC5Dve2xUOEmVVyQkgzdRM4zpy
+KkQUQe6KZowInUB/L3i+ekQrKXt03NJSfq2tMwdad3XmnUWOMe7rFgOAhqCpXugO
+T8gKiuPCgdxW6bNJ9w3gvuf3zLGrFgRN3RmTczwT7Ez6TTXplxaqZLf41RNr5fFL
+wwZFKvKKv3HWn9D3UyZIALf7lemP3vbv335bDoWaAotqZKJTXxxteAUyxD2n2AXt
+cru8tlQ+eW+h5d0bNKvTAUEIDdtgVDzFtrQ1KXuDUCvpZ+x3mqBiHJtSNpq3Y0FK
+sbgh9ui5G+STOeGaToR/liBobvAdN/SvKvdQmLsWUpXVf6PR6Dt+T4ClCHOLNnOf
+zxn6TEvR7NCML9u3YWhleH6pfPLSTXeZ8lCvK2sMUU1HYMsYCqJ6XM8sld/+5ve/
++6+/+yl+aXBu3uRQJ0hjFEV6U8QRqhbNthZxiNFxnnMhxPuKGS+/U3m10JnBIYQR
+bVwrDHRFxZubCfTju+L0D3QnmrLK6FoOsAokGzYeZBoJLYQqOkofEqfTYgdGrIaF
+0mvQX2utLMozMGuJIC7aOLyZLrrnlsjnv2XT0SWqvafPRuyrOpE945AXogBm1N7F
+8+YzIOXzFyq7Iv3jHEZ/exSjkMVhiKH31s6nosjv/o9itBQ/Q894JqUtDJkxksl+
+W1SNpwZcBGIuOgdRIS/PrY8LLxbma7GiF7F3j+5oA+9ulaORUYu0KFrPuVK2G0NL
+0fWFcbx4fhthBhNFa3E0ibRfiXBkpUeXuJBGy8CJephD7LYpHoo/dZSb6bPFmFdI
+bD63SC78IH+IMHjn8nSZamtcYjpteHXHZYahi7HG/sRKufDWrTyjUKktIeRgFVdG
+VVKem244fEJeWS7//gl7RbrLbeG9QilO00inqbBlFD8LfCIWbGLda8vlkxdzyGAC
+blDCrpZOZtCX5RDOBopbkNkWglGSR3apxkx/g5ZIyGFRydwcxjriHEtv2ocVtH5A
+V6LUnGBNpSAvuuj7ZMlbxZV0NH7ZxnHleG25fPKDguKKKAeSRV1AdgkTVSw5jNG0
++cwhW0MH7IXl8slbsa0riROQvlZB8g2xOlhjQM9iPb1cnP0MEhlq57zPuwgSalmK
+fsTAQWE+NIWFZ72xWjwvLJfPX7yMQHui8yLvIGDUfFSyCbiWalS75tccJiXBdfqB
+02qJIk/K6SNH3M4L9dqqrKyw0SFowotZS0fRRvQmQ6eWRQDSrrKDEAxJb9Nz2vpu
+7oXl8vkPakXTxWfmsV0SxiKICfoFKB1qfy5h6tueXS6fv9V1fC81ANgWz1A5U8FV
+ihswxdnyynL5BBaJa4mTNwKKdkYQVhfPpFUjb26Moz5lUkXx2nL5DARaZOonF1mi
+eUTu3VeslTBhdqyTO8aJX5fDS1KDnqnFPq76xICtRZ4JJwJgytTK4FJV05XFueOo
+WEYKDXMScwirTWuWV4hiCep1w762XD75QS5XCrsivyEHum5XXSUUP0QqA32CHAq1
+/MJy+eStAybQTXKE4Uqlu9Cnxmfk3p2/W3H6zdf98fe//i8c+99GslucZPTzcnPo
+fFGh0lARE9DVXlWAyT4p5mwKX59bK4/eqgitzX5ocmnfDa2B2L0Gs+NRtTn55xQX
+KTqFcMyMkRNBOEdbxi34y9IupesoznqUgc+C1fyO3pbmgh2xWFcH2qt00ZhGU05q
+SdQ71vLkqcqjX0NNvxBK1ohVg7GimbZtkJkV1opde32x159YJY9euRaNktrhXYMj
+wKRtgzzBQgU/mudOa//0x+ze8axkUrrFZIbzm82d8kh10u6SBeJNEtfUsjyuwfdo
+48mj/ofvVU5wGBL0HLnzFy/mWr9EiN7Qp6A62z2tBU0snqaKoCxSUS9QYFfAKUa4
+t1OxLtITMR0tXBegm1wzMgHGC+sUTdIUP/bGmaNfqzoRu2afXCYXfk/T2GEkmov2
+sYgJBgcaS0VnXEXpHKtC7P6Z4/2HL7VLlDw7alBTx/olAc0Q2hjOdOceLZX3ghF/
++s1v//CrP/3vf7ixKsKpUihw47akF2iUkWbE58MXDIGdkAK6AI/Xx4WXUV5prLcY
+yZRKTx1wfY+QV1XcGhRSZHSYthM4UaC2S6nBluj4hryxjuoCu/uw2fHUwYtGiy7v
+hK3Ubii5psxRVxHgcj6IL4oB7UoVqrkAYS/8CJTiBv4hrgwTMAbdeMeMvfBmXcUD
+68Q+HqyEK8NVacfIyih0LLMAFvLMXYhZMM3P56b/61HvzfMVXCMO9im0Q70xcMit
+zVdSdLvOrkCPjFl4du4/vin6rD2in9Dbxl1d7BP7mFxb7khUCu2IqHCWQKuzgKti
+hwnj8A0UZ7S5ooO/0VDbaYWW9dnCKtoJKXF6YhQ+OQSfWiOVsi6O7EWHlB53sfct
+xZ/7Bd5akp7RdJRAe01DVEigScBMmzREw1mWL0/N+sfXCDRRiy+EXjT21W6//aId
+XpgPk6zXpvxNhlDQvxsEymxIogMFeQ/S60Ro2VaP3MOVo/XP3hKVbqavue1SNct9
+aptsbVOhAUzgtkirzWKbWg1KusXQTFWrZhh/S6FMJUU/YxvU2bZAgX7gZl2peSk4
+TC+kM4Yi7qQ65ahfT4IiDas53NDqq1P9JqPTjRetjsitR63ArUE6rEZRYLeQJJRl
+6kvT/BVAccITsEJGWMTqZw0bR6tmNYs2wWtT/MPf13jLGkqkiFdGWsXbdofvp6Dg
+ork3aIYDStL3dbqffFXVQMU9skcYYyBhFGsuQTEbvqLdUcWt+xLU2AJTWtE5cBtB
+WbJF2lt7yCPHr93qFD2L7RPPUHrR/aShumjxUyglFir2JbiggEh33CpC8d+oyX/u
+JyBOHcPWthAU8VXoYtijsQQlaLHjfXTCrtc29s17hGp6CWhAYgEmZo1xhxud5m2N
+hXlu2r8csN9G2CUwdSjBLjEye7RmFm241YFLtnjuKkp/OpZ/eJHT9qvxqEiaUWu2
+u04GXqSqiIZlq5ECQm1d/GuF2Y1GcBa7Zuh4KYj6GU4UekUeOy3fMiefSgtz4R2w
+Y1Quija1WA7bzOwEGJxiSdWHm2en/ONINbTGNR1KDhWtAyOM0bQIzD5KDsfsXN8+
+N+Ef3pK4X4cXC+aLSI86Sx8V2QFDhZh9abrf5J1HTRMUVLSMWtgi1/gVlG4KTr+V
+9pVY94tT/RUbaMBnIqAKaSJCy22lQZHZJHTS8p5hb31IJH8nzVR0ZtPCanoRPA5W
+1F7ReluaGZOmutO/VkX6WzTopyp3B/2jRclec1C3b9zOmF6R2I4vTvMb6YkphcLF
+UlP8xpd7IvmYtMhanRqwkmM3+ZUp/npd7LVohDJQfqxLP8uutQ//a8fVUnlpem+i
+hXJyKOHgF0l4g8EsxSo6iaDmKTZAr+03XH6fe5PWS9JPIcnRK9WohaskCdhGWUjG
+Chs00fhus7a1tqYT+sliBka8pE5qbKLWdqWvaiHcnUUo7RABRK4NGwO0jJWjo8vO
+0Xs1At3COFLkVyf65hdkpQbnOe0PAvlaTbEoHtGgpzirbMJSpFT3ldm+eU1XPuCm
+RlEPzzrRDPx7LA0tW3PxZN7+cgV2GzDoFlUIRIqtm1j09qUNXdtoiMbptbW1neyz
+M/7hRVubWCC6zVaaUrUmxxifNLEwykUnRLbormyNaCYEmMqV4spIIWSTW7MmKCIo
+e1dBu5LJ0oJqmQzUnFhYAoWPBKTzwn4oqSwMCwQvOTF9csI//AClTCp2EudKYYlH
+UvNlHML1wpGafDuc9s1zGO3jMGlup7ISx2kVp2MnhpG6yB+V+tG/NN1fazPEr4WP
+U+kiW3sJ76bmyiGSaTE2aUqbGsL84lS/uQyECfKjartDicUaBTDFkoIQl7i3QJuY
+VBdutmKWmaqzYmNSyF5ZId5rNVYho2CyuHTtnA0blxDhMDsJJmnQaWXEvSDvtsW8
+q1e80gtQjH11mr8ey2kIlqV6UWlTedQ5wY6etelo/jNrIIOeW35lir/OQVRmKKVQ
+/is2iS7T4HZ+7k6P9ZNw7Lf/7fd//NPv/u9bC+h9iHobN8QZxLMdqSJQASewJ0xO
+mWY0/mk89vFNdOMEjBt6oPRSWF/xeIkLr7oGQtzT0g3RAWRphMQWXVykiBwsMdbU
+lcwE0QSLujh3i/hLmemg3XYLUdJ4vgrnLV1bOtso+uiaEnc+KqGfnugPvyDVZlHa
+t1aLJ6MXOA951N3piFhdqbZ3et2fmu0PrxE4mY4ybZ8QphJ950DRCLK6tFsvr035
+TzGJenijDGcorlacEHfRL8HoeBmYVysvRO/TW0r3ZeRD8D96tHS0h8eIgtQ5iUqL
+ogpOTxMU4pXRN0p6qHlqxovL232FRIsj3yUGqPnebSj4hOQV2VOdcTrN9l7CYFZP
+a2Ub2hoctSZpr1en+s0LWXlsDmotlQxKty4hYzW1+SbdEZmbX3vH3eP6K5BbM0Wc
+ZyO9H7ChtVyFDAVcIY8nd/U//fqf//zb2zMgvw6ZrLKVxjhVHDmkIAqrQRPMcMK7
+M43onp3kD++JYSr19yR2VC242AjRckkr7pWzgOzQfC20PpILimGIVwxN/GxL0Wxl
+YdxK54/XICgJ4zjdlMa9oF4X78ThetZpBk3kwhvBcUOlxKYpFmLbz07zh++nN9AS
+jKiotVqSnO2N0VHJ711gMoqfNP/URL9/CTZNnd9AVZwGwk7a24YoXIlRE/XKVL9d
+0Ohb47JHabSYbkXtbY5WtbfdNh4lFRG5/No0fx0iJNtcQ3RuF2y9ikMjrueR8DxA
+Sl5foair/7fz4mpWKy947wChisNQM42ua6aKinmN8gibHg7qs4yrrXhjt9YBEiot
+WqUhYTLER5avo782xW9AWK+NGN4LL1RTEnfSWSOVlCBQ9KKLJ6/5wvS+kZ+AydQw
+flMNaZYSQ4pI7QlldvMk9PrjP/3mN//nr/7ln//bb3+8wSxG04mEqd10Q+k3KFib
+QF9W6PpNQks9tWfn98OLlAaMO8oSipvOFsUM7NxYWXNb6qPsqDi5CHtr22nqEBob
+RxmFApc9Lj81lOmQ6hTn8BQ9WIXsiQRia8rcYTXTKNbpvdBsq3y2URQvK/lnJ/nj
+D/Bc2CqhDe3hzGcrfISFPmsAFQyT6WgzT830x7dYI0YyG34Ay9KtmwWNW68cKYq3
+Pzfdf/iX3/2oqR9F811HE1qBcgoNiY+gczdFWMtgFezg+7PzfPuGucSKIho60DNl
+Gix+tTUUTkemcFyBD/WhhNjFUqBdiPxMxjXj1d6FxBW1sziABiB7oROlaa1I3LqU
+uQXnjEelPIutbcx3SP8ehU0fn87HP3350ppyhQv5MeiXoyiwWOXIIWikP0VaCL2p
+p2b2p8crUHLqsjzeCkq+Funr2eaXMtxcXr64/Pp45d+EWxVeG96VKUxDGT71w4qG
+gjqLiqDvubR887GqlF8L+07hqNBhghZNIB8FShWqtW85d3NcO23usXDbxfzgaEIU
+m9AO7uxbfWzKXYnxy1V1UjBb2ueC40JyGCYsBJjcMvrnMNfcEJL+HReWbzRkDKTc
+kILjaAfz4uAMguQGS64UD2cg/+pl5ZtksTXiUQYdsaFXiIgUF5ryTmZIwsvTfXtO
+74RAg4lJG0ZrSZyN+76pHWLTinj3YPv8De3sF96maQ49ZYrxEXYLfVjbKFJAI1Ng
+XwFYszhyz5bEkZFiEgRJYsN0sfu8ccKl/NUO6+iJRxB45d25TIpbcTPv6knQ3u1m
+Md8cvhLsq/2em+qbX6F16Llrd3RAKrJq3GrsmJos0cG10JpToiuvzv7Nq6Ag4tR7
+Isk5zMDJR2tYoEN4o7n45BL4Usd5A/e0/yKHF6hXI+8jgISF+KhoimhFK9iukNfz
+0//hTZSzb+yglkK5jWJzrit7049a0a1khloIVauxc1hTtE9Nxu6Bc03qUrTfmllL
+S0Ofab/oMNbjIppSbs0DV9QTT+ShEHbYgEQiAQD9+YOTj79gCYSJOSvnCBgrLXHr
+QHO6UnjF17QjN+3cc3z642uqVq9fUVy0YlnZvELu4GhAyNTlZ2+03p7/psAvbFzX
+6JjfpWJE33bjcABlI+cUQzVwYY1Xp/vtRhwbmNlFlSkf9Vw+HH5fM3JC2koWSp+c
+nmmfCiSKtuZhBU1MVCRSlj8u0/V5qaMuKbyO8odRKtAgjC1CXRRk63ZWUG2gpjEi
+XecTsb8c7KtT/daYZyy2RJgd6G3HNZZiblqYtaCrtEX8nc8vTfOPhmM09w4XBKME
+T6isT8hSzpZFOl7c1be3okMRz+a45qqp6G1YSAPOfBbl0egbbTtj+qvzfBsM9Xzx
+J7H3HtIqZWrNjqhYGLWdMWpzOMeOPDAENhrNFSuGTA1gGvPMlEBzCtKWx7J7a72Y
+WrU2Nd/i4nyoEgEmLBnhwNKGrXU4NOaqXvXqZN/eClmqXporQWwXA9NS98be2nms
+GP1hrhaerE64855i7eJco+CpXQan0c5xFgQqFzt7YdqdvS08EnjjGABPwsUdk8cd
+lCF2Ir+Qbo3piPWlWT+/CdU5NDYTRnPK3nQ9dhQTtQKEcH1DMFw7MtulFVecxf1d
+c4z1SRSVatH5LhqNDVfQkjgs/qoCPNrC0wgbase1PhISFc0MnCB6x4V8opbz0qSf
+fsH22Px1eIQmWZjcGhFuFHgd8DOYTlVF68/P+ek1Xr9/Fypz9RucwGkW63D0Vwox
+RO9em/Kvy1bfOQyCIb4Ejt3X2trogkjdWUF2PV+7JbRXp/ut3buPLwbh4jV5ccCU
+E31zRvEluq2Ii6zyHjhVi9/jQB0wLLbU2FUqVHNVFkCTwmmNLFF1s7L2dKUfvFTs
+m6Kd1sUh/MYRmsFnaGC+3fN8dar/f9bOdVeS5DjST7TauF9+CpAgDZYkiCWl1T8h
+rpIADilouJL27de+7FM9dfrU4VRmNUWRnGGzsio9wt0swt3sLczKN07lweNUv1X4
+OEquCQ9hLOq7EeU2M14L820kmJtdZsQsps92V6dCVRn9F7It/lqI79KGiEtiRM/g
+P7I3SXWvjFs9wmdYDev92vMHZw8exeGD8JfrftMrZlVA5tZ+Tcizcp1zzEjOiDCy
+omUGw5hxt3AIifA/bu6Yv6k0kwWB85JSwyqtxygUYBr3YFOoruCrQHcfhjfa1Ilh
+5n012PeIWSSyRKHMcLTJCTfgN4eguEX6JpqFRnOvlyJ+/xwRDouALfN4Ah+xoMEp
+kOByJe+dDPs//dq6n9vn+6GP4FfNWOGIGM1q5ziuhzi0FiN0OGyejvi7pyj1YiGv
+VPvlVpxpI8u5bIwRW+yVs9n0NupfbEZVNVlGaMzASLZtoaNWB3rty00s4JBe5cp4
+MYWi/DmMioKAiKHF+Ms4pqD+cT2b3DiPyN99exFhsWGaR2meqBSiKS4pgqHKUTzq
+RQ2voHNxfveI5Q+9hDiY3WliSl5FVXRlYOZdflmi4f1nc0vqhG3fnegLwioVOhi+
+auaocYWKbpKP2JKrQCTu3M/G+cGjAmhK3H5xAr/hXYKbS/VbrCK3pXzFTaXwQSui
+mMqLYlxZX6Yg+YRKWemLC6ZFrRFY2n0h5tCY0lkNxxxhc+EdtB02cs64sOlN+ZDQ
+bm5ng/3gJ0QcnEz1CVYXDc0UYhWjigyYkFJc3LiFeY5/PXpVWuMxh61sMRBJHYvV
+pcgYmpVjuBj2tww7XClCt2uI4yX0/VD2E7YRuTO9COboJ2jRXQ75zQwjoWw+AFML
+e6M4Dx+3kPLWS8PBkiEP8fAgTo1gVdCe165X2rdNtCQhqVa45MT1T7y9iayoknfu
+xObhNycOx7h80UJpuVJmhQa6WFLq43K4b+dEwoPYV2DVih4zgGw3gaeQMSR3AWk0
+a66F+tYuog1gD2VVsU6jRY/PAmrByuD1iyfLhTDfdwwL2QcBIgqh9pEdu9ZchuCT
+KBCD1WYzPHo91vfdWrEbi3S7NoK4saqy1faeLc2G40rNdSpTO3wwKlnFgnvxNMwj
+FFRuQunKnvgZ9GNmkd4BvRmUmX2yXsi9CZ5rX/iOxE/37EEEWmw6zAOuBvyeStJN
+U61S+hd3yCzmGpj5UoGdyc0g7BbiXtei/q4NEK+ApF+OJoGAjkPCZTQMN5KA4cnQ
+/yP29feJartgsBFTscBTromJiUdqg6mM0Mxbsuek7XTcv30Q4E/QVkVPddDFqdRR
+FsVKTFtbuKRjVkf0VuCbk4a6K8pKeNVXM0TBjSCqHyl2/LZT7q3R2BRKxJwUqUxO
+ATPyQLbTbuFCZbR0mRLF80/fhH34AZS4tLAa1udtK4KaCtmlZq1afFNcFJcY53oX
+PjzF0GFpsgocsGWInJDP5wwDqY2L4b7xi2rDUR18Sp27HUEDTqBp3MdS3HwZ+70Y
+6q++CtrCcbA38XFUEvfOu1AYTlVYlSgVeW7NMpLUgj40BlehO8FHwQmvSp21f704
+g7fCrQs/So/xgt4uA3dxcpy2kQGstCVqucyAx7fg4RoXw3w7itKzuncc59B020m3
+1qMmEYVmmePvBgX8CyG+ad44XwtOWPoXrXscEQJ2GeBPP05y7P3f/24ez43NEYVl
+acJFzXoz0D/J4UqUU8vosAIVizndjPT5E1He3JY5dUEzyCu+FHQON46QCo6VMRRT
+RsmIItaR0Yx2Xnlavz6LPaPKGWepgvgb93kR8Vm9SmkXjhvc8HBxqGyhTDDyIc82
+lOxjFEJJp+nY57+koi+fES91eZdiGU3zRYVKD80oIqDNEvy5C7PPH+dBbaHFYwfY
+cPie0huCm45SV7rc6nD3i2bVXgy5IIaiWipKacRvfKm+iU8hg2636PkL7Q53edLq
+CZ1O5u5XQqy/l+0xa2O+xtIfvw6E1Ffr4ldzzwoG0HZv5rB3WfojwuZaqehMJFu0
+U1TJHfeUOGymtnDKcQxA4GwkIudLZ2rO61NeaHm4+xEJE9OhzY5j+E6HOiCypF6L
+eSg9f5F+jVfbHu5jg7k5jo51FbpEastLeTEVM8VjT3LzY/I8vLujGXlNXAwFtVJy
+kdtHHw+zCQUj21px31PuOR38j4/agtWuqso44SKRQpyRxLSYAFd2oDVJkEUZFZqq
+mhY9aZbxQJdnSvQ2+GHEh1UD+ANJQD0u1XKvLD+WaKbhAADcy+QDXvQZG6M+BA21
+O0/ngEdvS9QWLcyu5FjKMcpS8B8v3KAbF+mW3swYngr8x+f04UPG761jZGs7/ZfW
+Yh6LJt/Z9oivD3gDEbQOTotiJe3luMxVxjE7bc1M1MakHenC5ZC/4fjcjYKAgjfd
+tHQS6sGHsYiYhGliP2LBXi+z7mzRal6N+d6KobP4mPNTJH9WcZtV0sZcAC85JSNK
+ohjfQNvXl0NTKXCZvJhpc6aUIEyRLof7LdSmL8SyVH4sk+8+LuF54SOFAIvVpFWV
+3e7XQv32iupSlK0+yi19MDfD21DVlhtCYP1imO+Hdzhn5eq4jMgUlfCwMmHQhspe
+lQxehIRyvBzru2dxxhPzWlH8k/FR7bm1hbKLEYhBj8y6bWlUW90od7suBoZPi+Dm
+oNW+G7qNxSlwYWvbmCnu7gQXw3aHbQzWUFvpXUAgJkfv4+H60RioutLN9uA3CGwO
+1yYuysrvpF3xRXT39RWS2OS2C0/HdC3q98NC+hStLUXBi/cY2vG0DxIX8UgLxwuh
+L+/mCwWwrWizgFGqPosUT1yjHbrYDQGY0r0gtjGXIv/+UQHhKlPwmlUiWULrtuU5
+ugiRyrTZKi9o0gqyKU2jNDrxlPTbF2XRPQ95RYe/mqpDEMpmyFK5qO/cF67hczvP
+2Njm5mAwvlDEBZaInn6M2/VS4N//hEn/+oiIVHEPxLTbmKY7bR4aY/XC9qD0no/7
+++fUIVbYkerb2wqw0JKbTRwDH7Te5sWwvxXYhXLOsYgQJ2zZZS5Yeth+IkpB36cZ
+n3j0Pv+YukYQmOfEfaFvLw4EIlsceghqW0zXDH3nqr+xCbpNkjya+pysdeE0zlXh
+bEupvjfEwyIqT34Ors4c01qG+cE+MKhf2opxY3XKLzDxcrjfQm28j1klNUTlXu1m
+BcJiKcv4c0wNBx5BjHQt1Lfj8Mkct0uq4Yx0+2UYtJ9ddFUQcV8M831iz9XQA6tl
+w+mfcJNpRT/MGoHloAhkAQZ7nsI9epZfEKmCr56N22zcVlYGHGZsPPlJluNMQfiI
+xqLnyplDf7Nc17dRGWdUK6r+cBzvPcNjSn6czitNYIXEqSVu4CnYYjlpLD4W+uOE
+U8LlgN9fcilZWMM1j+dUsPcEf0SNnw7ltbjGti6Wa1G/exBKnEobyoJcmjoRE7yO
+OqcDmXabc6G/V/i/Py5brdmUqx3TZ5EgwWCAIZplQVveqrSGuc6fy33yuIG0SiSG
+XO7s2LgU32hE1RhM0Q9FIWErL+Pvw8ltq6JgFcefYlOYqnZDS7IIp9PoJqqvj8Dq
+NKAKsA7BY2S0hHpHD4ggRnv0QCJceb4N6pOf0WjgUhiWxWNl6pkZ4qa6NZQskW1S
+dZ/mHHr/5FmFFv2AN06ubdLsmFdW+bLcNOsXvrAMbto8ORoOQCfziKqtXkB6QZkx
++tqYNQrDtPjSEvgq8Mugy6ESqvwtxKaiHJSAcs4IkhXxeVWcIjg5WO9ieMpzNuLL
+BCwYIE0PHhkpidUlLRehXf1FSci4FbMmg4RBa6YFMWeLszP+1E3kZPuXwn878ULZ
+FpOrjjcgDY7CoTnunjGKFQJpCOSW66F/W2KmHd42KlWNkpa6wY/UsshiM/2FsN83
+xYk3l+StZ2Cqzj6HqFyuqrHN0xOZl7DTOt/q/NnzwqFbXye+yNXgRb4XWbMlwu0w
+wFC577X1xhsWPQPO6t8i119RcMrR52iLoQbOTNNNPRrxO1Ng2nVmoAUoxDDHEqJX
+7RiI166lf2mvLYD7oqmMBc7SzkhdiWVjiaJt2bTr/YhWq7rNePLs7rOHmZBLw6tO
+YCmjphpmFgbyQmiifOPk0c3vf/jd3/zWhXe3AQ3H7qGkarxr0UNSvHaVU15Q4aGb
+t9VK9/bZZfDgWTOJBW/hGNKK8aoxmNBNXMhtP25UNq+zcXK4RCuQ80cRHMV/5D5d
+5EYnOJzkmzvywURcANNjoXyj/6CijwTN4RVak19H52db3rleT5/cP/oNW2BDJazr
+G+NHmGlSyIwo2ZaY3qsIC451jtI/ehBh0M8TCo7YhXCs2SY9o5M+wNauhv6mVx92
+FJyMFht1/STVrzANQ3aM94mFDwXHuOthvynbdnymvB859BGUXpxKOkMPKXgR5YKJ
+hUGcyx3+4Nr7YzMotCP1xxXxd60QWjkPp+CBDmhXAhbCq+YQ9FMhaaViwLVouNBq
+VrXsuNKq+l8P+VuFRFRV6E5sHqW0AB1C2FlZRW+tHX7YyFtcDPcNGq3tcWsuAmC1
+NEQnRB9USkTy0jpb5w/Fx3sYYTCDLqJHh+uiikpLc5fdDyN4rzqmGtzyaZj/4UFJ
+XE3RcUFFeYcw6E4JE0OtjR64Svtxhj66GzEIt++F1geaDgVTUZoh5xwYlxzfrynL
+BxWH4hc9bN6g/hsRsnaqTrNzuhJViMcWaRA+zqeD/e0P6I2JaybhdtaDuc0SdyyN
+0Ge3UM6IXCGei/aH1+Rccbbuhl0QomlL4DV3P1MwiHVdCvfb8dnk/sPhO6ElVfHY
+QSwo0tAtxKI8mwtGdRdD/dWxtZbRGJJp1Ql/MUbaCoRI5RycqgoNGsu0T0EtowpY
+saWoZmlRG8sCV3CrwkqXLobcqp8NJ4sc9NE2HOfWWVvE4f7ZhUb1dV0QBD4/tvTu
+ywsaxJlic2t1s0oXFTGDFWVqs1OhWC2m6deVEN8u9zIyk42xS/xnxUqTNSsKvA6h
+ubPh/T8//Ob3f/3Dr+6Z1EjiS8MVuhW9EFVUUcIGyOnvI/l7uNL503dtDx5Fo+JA
+R09LX1tQJSMvJepM03IX2PWCdFtApCvnIhvqMqk5iQEVFfLdxDCZcir0PTftUoxG
+EDs2S3Bm58KxvH4Ae6zRqT1K8eIgzWMoK2p/OtQff4KWWHHaC5wJ2GiPs0StJwGq
+rqjYmCxd9eMkav/4HCCs5UatcwGx9AJUNJQ3bDRg2HQx7Df1qcAFZ65+IKJvkq95
+xOXjriiZaltbDNDW5ZC/HdJMbVOtWTT2kvHBhnJ0SipqCo34m7aoQZ7ekqr8CPaQ
+8MHW1OMehPm2GQUVDCeUii74dJi2zzh8ZqpJ8JyeG4YQzda/YVTTgxbuKiPny+G+
++W5rgVn6NWpt6MaPXg5lkrC4Y0fjVQnS2muh/ipZt6YT/VbOi8Un5MboJIqCpTb6
+k4h8/fsyHwuEwfFU2DczoVsGtG8JMKvYJdCtMNQyOa7T4Ozx0xg+EDbrolfckAlL
+CxAUVHKiuAx2HQwDsXNbEfrJJjhVwSLMpmd7FKy6wedZf9qIA+FVZ4+iI3QnlMnk
+yKpC9lowjsMaRAR6QNUp5dnt6T3++FeojkYaT+KICF0JpXOwOBONCSLus9GNoJR0
+KvaPH2V7RFJcxbSmMbY2n6qItoHeU9aqfmEJ3Jg5dvb0worYioop3jWVyFCo/k21
+MSufrfO9FB+fpByoLaOdF2sdib4wsbCQp7EjQm85GET3PDhwd84LxxTBOKOPyMrX
+EZdLkd+UhPvAkCV30dOmZHTchajqud2MxVXYmjF60PYMqo87VqUA/0ro37ZKWbsx
+doBFJw49wpZDTABPxYgJO9dHeYXLYf8qf9W0hqZ2CjOQyRcIaO59mpkE0S80VX2U
+ZbZWhNhtGpHwPq27KG8NRSINbrlQY0qiCetSR9XHxxk8vrlMwTtMW7+GaFoxzTbD
+5hWI0A7lri8wLa7dbFpUYZ/J98Ppkqap5dC3MmJsge+nt0I79Q7RNfQpBAc4HouY
+HEZhOQxxsIHfTiDvUjvVg7cWwHJCKSGjmt1ngEkJ73bhlV0XMglKYO18L9WDZ4nP
+JBQ3Wsgqka02BMOh/5WWQv/CMvhqkJLDqtpuzPiFRi9CPNrRLcltCI4tX+t8aQm8
+ZZlUB7NTyoxV8VgoNwmwrLRVc5yW3jHmVHA1tQNpXGXyrOUgNNWt/qn/5VzDio5h
+7O16yBWJ6SWAoNQ4nUtRrwrlJI+m7kriha5OodSpVWPtS+G/9cty6htVFjMufwgJ
+Zus5ONzcG3WOUWts9Xro32AR5m14YQWrHIgoAE0XeqZFRDjXF8J+L3NdZs1N3Hml
+PPCJU4LRC+SaadM6l5SBtczqS7G/n79Vng7LBL0vbfwpRI6MSrLavFns4bC6Fmcz
+zfjo6CWZSvYMj/ni9A/ldJzmRZdRK+kVAThB4FmF7We0Wbgr42kk8N9SWZ1b6y5W
+4MKoyiY7vLQA7rsgxCIC83OB5i2supFJ8ejiKWba/KoQU3Dz+iq470/puBR5bYWa
+poArpSDkY/VnI3D8WnftfRNJFnen+wzjaa7plHhQvPB4/ypEYUekYfer7bXvBjQE
+zsB4Myvxu4GtaB2hxZ22TzhcT4SfdvMC/YFJZP33tVhB7WYMslGlaDWkNocYlxHe
+9tM4kSyEImw5xJw5mBNK6ngE9NYiumG0dDA3+Gp/7f1t87CM2W9soecuJOic9K3w
+6qjWZd8M7rHrpQbb+8uNFlHuV1VEjXEAhQQ6xWMXNuY+v7Ys3k6ec+j6PTGIjZe+
+HUMIen3ccs2dxKKUq7dQ76sr4u2QYVe85LtIJWK02ucr4QoYs7hexR0hxoRbtQCp
+sJ8dHNekwTy0GGIM4qgCxIIukbNcy6iFakZpwEccu7QM/NJucjGLTwnUihgOHPLo
+g9dKfHUx3E7rjz4w7GZdmEU5CtMIrczDCzeHEP0sa4aX1sFtAtNsRKuLMOcQiw6Y
+3uh3iXMM1aCTS+Cnab6dPI8MfIkQ0lG9Mw6Ywjqr1ML4muBWUw0f5XQv1scnaZ+a
+jtxM6knlwGTt7X4sgsg9x+SUVoSO8xvlvVQYGzdGiXcZ7XKnH6zMsKpo4GCWqjTr
+GJ5VRfDC/ZVDqjxo02C4TDUIuGC6ODvGbqGebsX6+AvwuRImaBuR8c1AtndGr0+r
+dC7jnBYoKeiceOCDFyWeNvXXrCA729CX12YUAqJvR0+6sus/COAMvayWhD/0mYIe
+29VmVQZGEHfG5SNHDx9t17b9h8dtsfk+tID1IwTXpn6ZAVqvFuipYhLJQQNFC5AI
+ERyglVmolLGoYIroN124HPQw6qevJjCLPCSNdsELW66CI182tPIKQuVMN67SZeo2
+nxcw+eRnOPxs5tF2XvSt9AWV7bdvOEHoKzkOqUI+2aD1ybO0I+dGga8zg6A810rF
+LEFYylhnX1kGb3e0cU2hGMGMhT2vkJRFC4ahRY73zbAqcm+3wZeXwBuYqhjmdIT0
+W9OO9z4ciluYNXV0AbswrxBd8FzbBHDW8t2IR5jYJ7qKIG8QflA2z5tpE3ywg7KF
+/lBN4pF1mtpUPYLBldrbqKUjvBDDHK+F/w3GOJEmbJa9YKgpdq0lrpoP9c1I4wA2
+gSXN66G/0fXAWGBee6jAgX/186BHGc+dVl4I+30HgJ0MVigxOsaXBiMcVUXF42Iy
+vMKPEsb5Fp3Pnrcx9bWtFxVnemoTAxMhdYV5+jCoaUaoryFZVenEEyQRNcw7qKji
+lZeU5LUktcE9dd9lMxkD6/RKTSPM0KfHswE1lLSTU3IWaih03DNV/9ICuGdTnUlf
+BWT2qEyZme5tIjiIHUdlKje0NJjmu7wK7jVJTHRlo8Vo86ZxgmFKQzNwmb3Fkxng
+x//8l77Mg/nWaSDiAYk/TgR2WEjv69+ZTwtRKKA7508DwM+e5xEmjKjOqLT1Xg4f
+HroSkgCCco7+o3K7F6SaerQgH/cDAv+46SVBOcxZu/B33xVl6KKcgBPLWor9Dh1d
+MdGLtJFcdJhpl6bVN4Rl6aM9787y2e+IaM97BQIZQqyfq0hh5OSjxW5EbJKZS0no
+1FL49GEKeqjcbaepHyWII8aIpoTRnhhn5+jfP+WNGTpjVYYDzh3YJYy1RMpQ7lm1
+ayOi1g6Ae20ZvJ0R+OST67uvzsW4MfpgQXwhN1U2FImWwMjGMDH3kZqQVhyxLty5
+WtN6zWIsHF/jxCuoMqla6Ovp/QsNim3GlRD3tfj3CtT4vMlvPajgjHB+3OrRb5ji
+JRzZrRXBJOKqpTaFSPQzGYeZx7R68ivhv7U/WJBSqUFVgf8QpjuIQItKqWevhv7I
+GfTHa0aFQAkTzOTgfhXFCSU0TC/HEsEKh7vsOK1K+8nj+hojHxcPCS1gYTTTVViL
+z4J+DbqGm2iqbogW6E8yVTOWwfBPO0uI2DJkYTBi05uIVKvo0BlvldGIsJUXJqmk
+ei0zpY3GnIfYB4pny5wewPrkZ/hjnZmCVobz+gFIPAStCIOc9cLRPsVcz6kYfvKs
+mAC3orSlKZdZyEZbsXm9JwG42V9YBrdWekC0Nr81ot/puFIlkzkRnHqIINdVBdhf
+WgI3IlXyMLYtkY6YDQ0w3U0m2lLLLUxVBuzy6NyrFqFpFd2KmFxBLw5314rYVR5I
+Tynj9yoIs4bdKvaC4k5wMPtiqhOwcWWSNXNLKtT6vOlmfSn8N52cUNMIURkR3KFi
+5pDHzqIDmOPtTBeqytT10H/tqDMqwCLkCa30oYxYa8S6uugNpnGe/3+8f1AKXv6Q
+IBkZA4qpqu/6MHOLmCEmwDmHONuVM4CPTzsO7zLCLMUrpnrIIYdjtb7g94qe+L8t
+S99GkR3CJAdYFWMsaGo6rcbRGxfvTTEeyBH0uqM+hmyhRLwXfgEdu4O5Z0itzey1
+hLhaDvnSOcDHX6HV55n+aXSg2Wn3cLE1rOMUIMaMtDRqPCln+fhREf/QtrQ1tNy3
+8I7ntCMhmz+Uo8v1JXDb+FG/AalQp0QmvuSraltnXHkc0xSKTlGheyX8b4cOASeE
+lgPOGmUxHkJXwNCWR4iEbtcC7pjawZ0DCixgEBQU48VVXfRX+akr1woTjJXp2XOi
+BhwnZwQORcm3126vHb1dsQMtC6syHFQ40vkJ+4+/wLZmptdXVTKm15CDOK3dWcWc
+hGg5Lg22r3057LderFG4Q582uUyjSVwrIFk8EcMr9nrI77mMKPZSBV1ZOEWAWaA5
+a+uzjiOmSYzBpTn6K3G/Fx4SbVcR2w0XgZ52sUo4y4ywkb7fdgxmsPfRsDrjrL5o
+T6WcBXAjYzlxtoCD45jCJg3pJaFT6xyHQ8UioS3akjpDPE4VcniBVhwNinNCsqu8
+Evz7q5oQkmioyzkJtTb4np0+HrdVKAKHPOlLTZdXwH2ETKbtG3VNhz9DU3FxSp00
+vHefL+z8D16f7Ozad9aG2k6Idum1T5FODO+2oFON3BqudGURfHiYCARnP12lBv+y
+bssc/hjN0Wvj5lixRblXcF2pNArmi1NxDydM5VDPP2aDBYG0vweaihwh+a5XlATr
+tLAaVlKmM2S09ecF/62YTMPrdSo0V5bAhx/RTWeLowNgJgZUowStBvzfmTpEPHuh
+CHJ6AXx8UvLYxolbhmwNpnXF+ogeEQ5ydl8O/xsKa1G50mUsFEVcPVpmWKWZvvHh
+Ep8Z9IysF0L/RveGADjmL+ZQGi+FliktPOt9FFwPyNS6jZ+3XUiX2LB7dgIEKqwx
+oUiHrXVAQwttLByP+7SdC8IV9xH1rb/PJbO2pmBgFyJvAjJBVFGU74Ww345IFtNk
+vZZUOeNb7BTk+83MrmwBkVwZY78a8tscaBbl9YJBSnoJW1x95PaYXUCXzeVwv7tR
+zAmza3zkinahXcpkqqza4rU2AxoXh1mvxPz+6hcLx8p5vjIYdiE1Il/ARHAXzMzB
+0uTWVe/baqjUFE6dRT4211wIoaIkE5Jbx6poMcToA/aKeYvuiWdpm/tKa4ndYihK
+YhBJra+ufe/LC4G/P7vUnhDwxu59NnE827oIxlbk81I1EDVZ+q5jX43+O2ngoKoi
+FD59qHVYlrloi8oaB9vzwo5/LLLlKs2TyZecsEDQRpo7eNR2BL2w0wtFWaxduvR7
+9MDem/FucksfMjqTW7DDcWhGE9qa6DBEG2vxq+JUyiCWcrfZw3jGSK1rvrMOWq5V
+NB7EOqcTQEQm0VWOrbR2PNIsPEBVcvuUySYs70sL4bHm1XATdjdmyw4ty8WEa8gB
+gFINyEWgtcfzV4CPnobtX5p6nPK954oUA0uPHK9IsLP1peVws5CfWdtSxUVo02jV
+2ekwsmcE3k3hsgrNOu/1+cnDuNP3+Bp7gf3tg4qNKPMXh0NMmJc2VcnVNCwLVDJK
+FOgvjUldJ4Kisu8tnkDC+coXXcVK+FGrONaJyatQeYKZhaovreq/lENDTCbrV4mS
+vbgMblIWO6B4nTBCo0kb2SNluh2HDXnTo8S82XxlCdx6EDm86qL7YdEjJ/ArVFY9
+47SxnHWw+OYR74oCwu3emzi5zRInLyNw9ab638XHk6keAbYX18A7LrCsp8Fve7G8
+GpXbS+expdUwF3f9dFcq1v0YruhxKF+pnieGOaP2g3jfCiOhDydOqBclqrSaExdE
+ayk2JOKFE0UI+xbvcCLPGz8T9H9Ce3Eh3LcEGZq1Jxp1szGrklR4mJNS0aObf6XY
+kr9wDvBJqApRmb6Jl1m9Ci+aOLCHFw1FWeViO8j7u3q/y1B2SWZtUZqkMq2/VtbZ
+NZdFY0h2dA1cbgl59zQBgLxV9V1d1R2SmFxCt45XxHDK9RNpaE67tCDcUvV1iKMK
+FWszZAw49C175nrWisHQNOC6WSrWoY/mRW78FuZhCr0J4dLQH62IbaaVvG9zuS3k
+fWOAp0OF7qadVOc6vZ2uzKqdZfEknvprJByutYa8d0hC+9seXrGiU8YKk0QczZEf
+4hzl+hJ4+yltLa8XXFRbMaCdHuWn1pSjF4fs2lpp9hxfCf+NgFj9EKE9YSshQaUD
+lfIwBAv8IXsQUd0iikMcGAFdtyxibUnc0Iyp5WkS9nNtchuy7RQus3g7F0MfSG7V
+N0Qn0L8N5JsBqUypc3Dj23ol9DdoiF3t4oKJlaYSZpD1t0ysCk8jW5v97uFy2G9W
+fh1RGi9uuwSRxI1qRn6Co9nghr0e8vvW0KSXJGDhtLLqQTmXmzMwLGmEFStH22j7
+vhL3+xKwas6Meo6Sg5YB7TxGG1t7HA9n5e3MlSC65Cre248cma+bndHo5JL+iAqv
+KrwLLazpt6iB06LNQ3uQPBWqVkM8TN1SzkxAd6G37JWu7XAvBf++kQKtU32h2tGy
+yyJS+soIiWSk4LQ2UDRUgbu8Au6JyGozBr9iVtJ3eAHEMrkBSyOqXJfrvYB3iQyZ
+vDwotblwQ8uYJiorWVSXFkS9TZvP+0Q/fto8vI20yhAvFngWl8bHGZMrUUTlf0Yu
+lrAcfTA54TBbhbE4/VbJM+6LTMJwqsJ7iRPSv5Inf160TMtAi0zrpau6LAFM/NJE
+OA3KnNxnnBddfvwrYlDOrFrGh5vVMlal3yhS+npNS28aBlMFFi/3Bd4d12XDpReG
+Fav1giJ13767Uob39aws4/0z7vtOao6c2IhS4U0t5OmyioHDiRuzhmWTx9b1lTXw
+TpEe/mHBzdtUajNpQJmdKzb8vXMYZg5hHo8k+kblUoveWUWfqepMF+4WfuUsRn/4
+8DRVsgqmNnqNuDf3dA3YTHOopYsiZnHO0rwSx3xlEdznz1kxMVFN9qK3Abhu/aCl
++tAoCyZks+K43h16/6yhuoZUn2g7VZOrQL3Bra17NHKeXwafaEXNYTZaqDiG2s2w
+PV2vGIlb7CEG3s4C1OPKUvhMQMw3fK/gWD5xmys6KgCf6zoO3pthiA3tutUGX49b
+0QlJzEoVeOtavfhkxQtSX4UGbUxfpsU8xeahwmytPT66ao1n4YpBU0gTzJ0iWu7K
+cvjkp+RahTPDWtxGoBeIxW+Zq1cU3xF/EOkJ8/yS+EwMLY7WIh1UoiFz0iOFYsYU
+UzIicfXFZXFzyorajhjozIF6nPCXwIjIQuIn4iqtHD2uscUHjxszJnQ6VMlzU7nj
+ylMxRI9ZXKEonnqrNK+52bDz2d5MUVYBcOaZQ6FDyxlsOD3CPkpsXiTBDI/YbIse
+2VYXlBn6rEI3xSp5dGML/lvOjfDycnir3XSzr1ijdm1pKQDWVxd/Tbn6rZ/V+upo
+or20FG6KoblmdDASNtM+IRYaDI0QqpbpCk74VEgqlbpzr020HFWQpgw8x1hBVP5w
+NI4pIQj+8lq4V8pqW/tpR3QR8EA3SkEhbmTMtDRm5TRzbwR+tdWCAAw9hnbqjw/O
+aTAsE0736FAFbfxOv+3ElDd5j9hrqQMCiuFRLnBtu41psRmcRZJdLy+I+yEzkw9b
+u5l9YvxvlrLKxnYaMuOTSmPZrb2YIO5P5EPaGdMfpK9ip7VCqYkxBn74WZeOn340
+/+Pv/uHXv/v9D//0znDLDy6RnNJzVvLWogt1ztKRUKBTWgnCtnSeQD58mtKboiGg
+1VcIendzgwho+KhbVTdoPYqDzWYtftEoRDGQXot+rbZ8UmKsI4lpWFeUVlTKzEje
+Crb7xOEU0ioqNKory3MPKli6jtU0EDDIF9DDw1/Rc9e3dyLZiQNs0RjHUCwGQMm1
+XQVvaxAmPrcQHj4KU/usMikmHbVPpmBjo47GUaf1Zw3X7p9xa5FYkXbOxCxXgA8V
+FITpwtQ2Kx2HlRF8eiX8X62MXF6j4BRtfeJqwFlah7QIhIa5U1zrEDEfXAN7BTFu
+Zk47oh17LsPRcIHt4p8Xs1JB98pkWq1WZSyGY1AB9KmNyV8ZfWzRxlRt0B96JfRf
+ZT/01VU1e/b0MKBqw5jpKCYvOphqzH7beTnsNxVsG+vETxtt77yq4m3oVGoYaZ61
+Ufzpx5/+9dHC0mbvyvU0jQVfZopeKF0sgnYP8TbR4Fw56jkf+E+eh4qBYNT0cYnS
+l05vEP5c6PN6z+0ypp76e1V0XKiwVbdEYdLC4lvpXcgc95Kw6lbebajrGIhPXKIL
+hbvqnY97WMGAwCHeFiuZXDPbvur5Q+TPfsdmuiXhJ5yR+ouxM/bSceDWF9XXOOZL
+1slF8Phha4o1ILUgxIaW9UjGgRX9HE1b5qWlcDvVc64LcjOJuxiRMLbZ2Kzgu9i+
+1f53eMbH15bBLdeEsKyKvUctplb9J5ewSE5uREGrjaBIw/Bb6ZyzwqifPbfygENJ
+vfboTeBtj5yE1ZPbCnZDmqoiB5qUP3LWH1ixCBQUU0SEEOsoE8RQzWtL4KZ7VjLy
+CzTXViYvZnZYyglKxybkAt0u/aRxx6MHuS/uhLjkxdkH3ZbRGVNsXWzVk6H/r4e9
+iq4irn0oiSLkhpzpcNpQjJuLi+l3FvpxTx8dPH4ao3gUk7IUp93Q5KmKbXBChQiK
+ha7SU8JC51vJVLnOfmlqFfVX2qDhuDFKMNwYgispcZZbQswRh8WB8R7iiT7R86Fi
+iSVfjFo+U5lUQOJs+B//iiEe07p2hz3cjaLqsxk5ADwdvt8cZ1rxm1ML4PGjqhUc
+VoySpycOU0qU/REdMsfl8vUl8LOMtYCWZyIPfSYRtxC01cpBQVeweEbt8lL4b6fV
+XeVekUYIUEtgh0zCycrhepW5NgZGV6MjwDFVhlGcyIDHNzPUvAVKtmp9s0kLZQrh
+lazsMEfHTMFVrJl6twm9jBJokLbRRaWEyrBHOq8p9vEXiCHNvUVDWuwlVyFNJUvx
+DIdoYDK+qSxV78LlsN+E6mh8FmkvXq+qbl8QMUcKVDGpZ88E/utxoyLq6do+ieGn
+vBEy2+K2S98+2YSgWdUvGSO9Evd31jFWKG+U3ZsfGBrarkipxghioC0TROuQ7NjJ
+MVyql+uKncnWKLBDS1UffNuCvGcXLemJK4/gR5xoKy7MX/Q/zUsJRuEJRbhJsJBr
+Nxu2Na8E//6cNYdDexkFpljtMMJKYi1j5TFN9fTFMu7YL6+A+1dW2XiridGUrGeK
+ABU6I4U2Jz2f55fBh3ZFdBkVaFQxkj5Ua7gGkfLscb3GUSdFm5qpVxbBx1bShCBp
+3wBbIZeFHXLCaVKI1kdl96M1fKELkVTwyKf6fiiGVIS/lSusx7lMTJ8sa7sf+Ewt
+rVKfhYyXar+AOOeO4oWq+ihUIQGUkJ6r8coS+PAjkBtOZjEkxAVWcNoro4pf0IOj
+JI3QnSjr+QXwMTZZ9a54j2ioikA9WtYyMqgVdlYuh/+GYRLq6vinYFOSUXBk1+Pk
+k6e1otJD+O+V0L89qM/OYGLYe824sDvvWQSwFUXfO8Qe9OyGTFBs2QUMJ0IqPtPA
+AvWcWhVhFtfpfhtKBC6iFtoFhTsqY+4wBsdiXktpKTxow0+ApYIUxwthf8uUhNw6
+zloqXl1WeXHGWhmyGohMaROJOderIb8dBM9wiOMKObZUlxGFUFUOqoPLLVMvh/v+
+KElcziLx16plQKNkNNj8FqUVmUiBziur5fBCzN+1km5cfnFjEXOnvoDchOY7vF+Y
+HZf0ZZgVFZjKs6Jsql8qBOeY0mcooDAQ7NASnNWQoCqaxkZAVZmDvt5g8Ls24ooC
+MCsqNYaQvM02hRcCf3/ex0yom6qVk3MIJoccb6l2ow2JJ4XXS7y+4e9nB2yam465
+UGLK2oBey3tP0X5Bsena+SXwoOtlFEvDvihF9MtjnhE6A+QqZtEg1xi0qcwluPfg
+acfUh2Xsah/GYUOMIlfB2chv8jE5v01utKcU9GOHUp4LJiqhKz1NRg9aF3XTJqgR
+bsIEiQdDNqO0gfLFrkO1S8mgecEwb1QbMMwxRmDyyhL4+CuUVA7RqtSK4ARnMXvQ
+0FBMKjRLCyd77MlOL4GPj2oCqooOwvYq/2ZYEeGy8jE9O/v015fAWzLW7ttwV9+s
+lhkK3XaK6ak+dpqkF/J50blXwv+2mEOsO7QcPexckBwLU+5vPY2hNjMNoDSvuC+u
+iBjBaQyYiQE2R23qJkQaJ7RSRIEO68EWt9X60Bf2R3dYnUEMKGHvNvVvNm70UJfg
+SxuvhP7tF0RMj5zz1iFxLETBGSxy8+jvRL2malTUxuWw386RtUEm+mfMS1rP3IXP
+nH4JjPtcr4f8/sL+UGkQZfLaVLSGCKuqGgiCO3Tz6eAwfc7wStzvL5liK7Y6IXWa
+xItLwrDBMNcpbOaYaODwChkgldYUUBvMgdE5fTkupy3690V/0SPa8cpKSFTq38QO
+lQmmiJ8ogQq+asNswoStFGjsCCm0eH5g9JOfMUMs2/XSEJBSCRDsFvcWzo/ismhI
+2Ny14vblFXCf/BnlLMVhoXn08GTDWVit1mA76y4ug3etKFkMIkDmd8YTa8HvlZn9
+1Bbqgfv3RvPYurwK3j3t4BIOnwwjcqaAL2fyEFp2iG41tHdK0aLb0Yh9NrCVaK8y
+n4rgUhGaSWtVCaBC7RqTHEOpy2jxIh2UrcEx16eEowvtT0EfOoeo5SH0vuzlRfDu
+VwRshSq3D4HekKHFNn3FYHoBW5STS5nl5H3f40elhkSxZZRa26Eog2ahQLEbvSQt
+t359CXxVkhQpyj4I5jsMclePQi4+2Cn6PFdPIXvf6yvhvx3yTpeUn01EPTa2Lnov
+krYEnYI3RSsCCm1SoA/ERIE/LYEuKqroTQZInULLSBHteEv1aE+Uw8emXUQwOaMV
+jwN0EejbW3/DT3zeKSQCifOV0L81iAkgmaQkaVDZDy0tpWavJOS1aYTQUFwZbfjL
+Yb9ZM6c9xXM55jj6jry2i+/CtzGKC78Q8nsg3vVGGaevrCLOrjhPBEk1peYxlOHQ
+LH9p29/3PKJLKsSvPSNMps3tkYcdNJmIvQoQCH8sfRujv1s4o1UJR0QAJwlGgzIH
+0qbRS4bA3UrDVFaLcc1kpSplqBQMaoMeEqmk6WPkDjhHGqzHK8F/Z0Cs75+SMEAP
+XH4wYrVVlwfOI6pUDpXUZtvlFXBfnoOteS86HVhwuXOLlNFF9fTPjvPL4IG4f8NX
+BkSuajktYswCf8Er8Qpo4c/BNEK/sgg+PMxX24YCE2OvQ/W+0NbUEZLjiEY5YdLp
+otTvA9dOU9/Ix4O7Iw+rBSBmor+XVQM2bXk99sPmi7KA2JiDF+gDMNdYaWrNzMNH
+jB5OJo6vLIGPb2yXhA2qgEmtg24khb7QxISEgJmVGQW/zlf/j68LOWe3isE1jKt4
+fOt7jTlrDcYcLof/1vJjEyobVukTtmSgXqE1IXQ9icFdR8qNL4T+dnCtHTmQf8cy
+KajC9+O2nEafhT/inmKfnvYNjn298WGVaCIj6yhrq4CL6lR/HKizrZUgQhaCXIKG
+/ajuq+DqFfHtLtwixT6xVeaCN48Xwv7V5QaWV7h08j5habE8RlTKk1uBGdo4ftdw
+NeQ3eeW+xIHEZ5gMZMBJVCzkYzZGCeX8yd56INk26JxM+inNRqheafTuR0EwrYLJ
+g+puzl+I+YOndWRPRxE2RwpGoHKIG5nF0WLovXN4MZGN2rl1xu9MrAK5mfYu/TOP
+XoXiF0UIMZ44bRZEUXKIAkL6X0xGtYwwQl7KDVgGB+pVDqrDghrn3YEe/wqhzdlq
+W3750VEliS03vURfrMLePDbSY7TTGf/Bo9JCOGFtcktC1dM4IF8QalI2XO76Eng7
+eFF0A4eivu0eBIzWbog3CE4qHKlq7xkO1F4J/xtvwa0J3xtnu2gEo/wLLz7TAkP3
+CG/HiNCfs1YVuw0bp+vOtKWsYJ1DiHWiIr58GMLXLe1WkY9UuopaQ9ofS2AIzVOL
+KUXZUYtJf1ylYdlLKP+bXxB87qnQRLItvrMtRYyDzD50lYxzOA/7Hi6H/UYkjLjP
+it5FXG0Zk51dwJI2N0Gj8yHfH5dVc8yAaG93VQ0RE7207r1QFmsZUdpUODO/kukf
+PW2OwOG0FUHhlkWVfmtDC+oz5pi83l3JAoDYL2xxduX+ol2FqZDW4cw76osJ4muR
+xIoDKHxOFWHheKjiwa3QZPl6mqqii42jNgfKRxrOXwj9g1+BGljbIo9Ty49VKUhc
+kWn0dKqKXnQt7HD+dO/BozwSeHkdGnjGT4zxAiMOu5naavXXl8DNOELpaxd0dALV
+PZgeFQEV0hD1H8hgDl3NV8L/do64Ex151W2D90lz9Nx4WofWDCbO4nbd3S+UaUf0
+I9PQo0AKfoQ9aaBlSMS0XbPzAdFosdLoJnHWLh9GuwMNU1G+rVWh/2a3oPyLrENs
+l65zv/kFljcSwzHIGBfytj3F4vxGqgdzamXhHMu+HPa3XY9SfmUvbpqD9KaiOe40
+fdZmnec7eP7lQTFBFTgz41uT2bURlKlipvKv1xpEmfjXeOVQ98HTKhL9G4UBK5Lv
+c7EDa4jQ6YpcaHmpGmSUPG3XU7cD9g3I3NTmrq0XrQBfEIL3S7Vha9/DfplBEAQu
+vYqFJMEFa5owt8ASwkEeE+9W0qVa/+BXzFrw1FA5suhzR5PogRiIthQFadBSPow1
+Z8P/6FEq8yKtBSsI1LOqfim6MT1pr87ary+BW2vF5MCkcnPj06GrITaneEyXBbSO
+W8V1rdZ/8yQr3MU8Y0P1mRnjLZQp6q3SMpf3WuRdJU77NDWBetwdBaS8yUXsX5Uu
+29YY71nHAUpQfFm1q7lq6TpvvG9z6PHqGQYvyyEeMEUe8SwVW30l9G+/IKlCKbY1
+iPpmLBRXxZ1K7LKjn4s8sOjmvhz222HuIfpntSe6KlW2YXUhGq14PXBcaN3412+U
+f/E0y0OVJOVeuvgEWpmiLUxzIBJUtlLBeeXfB0/SRtECw1lSr2XMYfHpNMrHHlo+
+MmLweLjq+Xq1lrburq1eGppLSfnVlp2CcYbD7IWf7j4a/3ZCrmaOA9jV2Bn4w+FM
+wEUA0VqlMZS5L4T8m18wiwKs4mKHcIVivMXmitWOL/nooDcOsTGfz4b8m8fgRDzM
+OLrSEGdS6RC802/My7uZ5/WQ36Ve3DV7CKn7ZJxn32chKRwaErhbOMwFG/YrYb+7
+vOU2QkRd5RxdRmOsiBgtFcrC1q2qwq6g943djEESdiv76AXULdpZitizMv6k/8Yd
+d7a95zm7SG8+5P4yKiEHKaxKHBbDwEzLWbGhKSeUl0J/L1bRXT2E5zeWw4oKc/9I
+DYtrHKtbq1Tp53L47/AwwKHOYpJPNVaOuDailymIXZRytlXzx0f6cl58S7y44Wjg
+W8QZkjZ3ASrlhJGF/CDh5fQKePQwO+dYCpZAXdLm1J7evkzvtL6LS23QiozhSGXI
+n2slhdnjtIHjbzW0xhtxvJyrCtAW2tmOMX8XqzZ67MryYwnygYmCSstoEMAZ9T9z
+iBuelnx++CPaXDTookEWUmlMn1rOnif3HZOLFjTAzx7pPHrSQPVGK34WrnSXWYy2
+ByYh9Rit68vhv80c2KkNJWCcWrRJm5E7vOLZaHmbnWhEyedlnz48yBz6XOJt+nt6
+PduJqi43mlGq1yZShK2YMctOSEl/ylVGNgGzK6QQBA2GQJTVvg5jIVNGL7bIPtYO
+S6tG8S005rU2chI4ObQjTBerh+6dd/35+KYi7XK563HokCNZrRCrsguuFC3VMGkc
+Oqn3+eEprQWa0JhCsMtx1wlm9VY4BzkTcznc9+2mIiRtzYk0Dq2SRSTVxC6EtJzW
+cVcW8FyJvRDzd/dEXM0Isw+8xYTWDodJ0Rb9o2BAWquYBPKp2Y08JgpUtsRFexRC
+CkkRRSXSGKZjOhrLQN+ejJBcOM583DEVbLcponVZtLe65NAQFDSyLwT+vm2Wo/Ru
+kcAwqAwNb7aI/Qw0kqD7ZSMK5flq9O/7A7TxhLK9gA8dwS6lpR0hnBuXVvMe55fA
+x0vhDRhSkTWLJVvW4a+jl5gm99xAabHnOP2VJfDxadrWkxnQnafSTNCjrfBYG6LC
+7G0tjFxFN4Uy9EdQaFa1U1poWYUupTy4p895CQKVoCUqjj+9IKoLYces3dLsYE7L
+ifeV6mrHJ4GDXaPF47vvV5bAx1+xSvRjKz9hUIWwgFgFchPbMj2VVZAwMzjbs/fw
+UTkiiuNQSFUGbtjg7gwW3k418KzZ2/0z3pKxF0vFTUpxUWLVq3coqqYixop7ilhY
+5d7wlfDfenZEWfRhrWkd70MbZTJY7w5vaKx9F8MYETVFp/rfR5q0x3ArNk3wet81
+q9grH0zbrJibCEnZQg8poeYTzFAS7vpToXF/N4KdyjcbGXlsJV4J/c3HtNBJsKKK
+42jI7akqNmUbvAqyuEhtnlvVy2G/9VId/ifBI2skQqRKHGMCUK6kQKXrIb+XCxEr
+SkJD6LdUbBYRZUUSx6KiiKGkmfVKo97jx1XBI+Wx1BJ6fFilVaXtoBDZiox5rAJl
+wuS2A9X1m1uwTPKDb+nKWl4lqokirMNBWszOUPb94G4jCQRNgfqES9FAxGNXjsKx
+hV+dNs74SvDvtfYGBwu0EIhlqtDskZjMheD3FSsy1fRW2csr4J2zaHZuqb4gm4DQ
+rLVeSFypuFsUhM4vg08kQqheWPEhTDULd59zIaUcU6SeiVi4tUxpV5bCJ49UmsTZ
+V1g2QuFDCUCojMMZ/4Fj245aTiuF2+OBKZ2hZ0UoXltBpFpwUbWpp4jrLlZhqQsQ
+4LCBH6vbx20/JhITk2HkH21faxanvBYvIYHPfgq+b7RTcqlTWhooJFaTwsJkIC2k
+VmI05fSS+ExAZtgSxMQc4tM5iQVZUQDbhHa0NFJ6cVncsoP2ZSrBlx2Q4x6inDN2
+FQVzyKzYJKJYqnt5SdyoB7x+78NfmYZBQ9c7PduUci56/G7iVmUp/7q2xOVzS12p
+uHvEXcH9uEW03szcTHOPiVzHmBmpdC5Vleg6lrkthoVjql0imn2NwOzvy8vhbcdu
+BAIQ7zi8yAsAty+VUm7fp+EK1pmQ8mtL4S1CmExqAXiX9c4q95l+ijN3kd/01mv1
+wjK4y0MuHfAJhdVuGZow2o5xBG1e2qMKc1Fh5/DyWng3BqcFKL5OG95UahWisuxv
+bd6O5EYIIYoKCB27QTO2LdZ0kr1DQ3ol5pgPm7ii12IyA6GiyQp1PUQ+md8dpOpq
+ZtMrpG8AHw2tH8+d/+sL4v79LcUcOzi+PkdeNhSWXTGoWlMJEaId6bVV8c6Q0HOT
+adFu1CuomGEPphkTjtrlF1nDT+vPP/3Pf2k/rp/+6s9veBcF6G5YZVoKNTmxwpBj
+Fz9bswszqjpXY56giR8/u6GQjNB0AOcoy4gVlGKc0k5Po7LvCw3do6aZJ9bwZoo2
+rtgwWa0uGKtfmgTAaysemqTsYJwNygXKkbinK2Uy+Terawnh+YxtzFhivsM+cQj0
+8TsrcUQbgZva2l2Zh06i4Bp3iypKe+DOo2TzCyH9+MHVCAglZHIEfzrt2plx9soR
+Qwq/fJVzfOKP7Y+3zysV25viglsV704UL3qOVHYu02mHxi8jPxm4u0/W2qoi7+LB
+ZmaLy2IX3MIJt61Mx7+z2Qw0KUXAxrLciSAWGTDqFk5LFjHOegjrbKGbZBAqU8ji
+FKejq8PkoZUwS1Itd15/WJAgiW/r/5SHngzb3TfGJRbQKFoRrLYIjYBYZogBKW/6
+oL8UnvtFx4ZvP3Yi/a3doa1VlwCuyIfVb+DXeS3q9lzI/u2n8XUNFFdtmSF1N0WV
+KieJk3v8kHtbHDAk7YBnuuk+fHTk1n4313cU0VZxQjzcN7GmNFoOKiiiGL1sMXDm
+XhL3p9DabPWHEDmpXTVgjIEwpz5n7V3pWxYdFzvVksh6r4WlK8i6Fi50nOdHvRlj
+R7HPBu3+bYyKV58V5RaQQ6yi4eaE3FKMuEJ6TF2Dfypqd5+rHGFMnIYWoZKXykRY
+dH8E/QCR0vJU2P67t5/W172WUZYN9vDmFYHbiCBiaCIEpSSPIQAaDubJuL377Kxv
+ShYQlujaA71nk6ZqrsujdNXkSNvD0INWdvjzLW04FDCVkGIQXhbPwhZFCJHX2ApH
+a6EL+eQS08IwoRuU61WaFCjVI8GqVKMgWLJcoT4ZuHffWTh+Gs73amd0WeSyMnrr
+5uY2djvXi8pvKM9E7t0Hx4WdWvZDhFBVIRu7XSKA2YiU9/pc6Maffvz3r6HDuVPl
+IzKS7gdmvsKMSxhLOBfjkTS2EP2zafLdZwfRNmTA0a00puWNLKfDmUIvp3O5KR4z
+Qqvi3LYsLM52roLAtKIAUsaaWvwjwMmmEd7Z2pPNASgrPY7MUUcuAMCAkKjta3OR
+KxC0F54N3bv34dx0aRlon/jXaHqrItVG9aJhwUrOrM48F7r7D6ZoJ1KuPxxLuWMw
+jGkwnEAT3HOhW3/+uo1FItF2cEar21jUn1pJKLUJAEz9tTJo6724ZyN399FKAs4l
+WytTZdltvd2KXA0XPluFVS8HLSD69xaXDAZBXG34UJG06wAk7TKHhZJIKzS20/yh
+ZCrmxJ9ChDhYjqjG5p5jIuRtWmJYXSDm2cDdfWXV94UykWG4N9mO3HFDJD9FFPG0
+85kr+EXdoA+fK4Y5GKvX/3gIUKlmI8yMjxqme7/sO//lA/ef/vjnr8VYi+vQzFIJ
+WT0K1AvN4ySgXBzsMXQX5/Lj2bjdf7aqLx1pe2cBE59VQGPSurOCfz3u2vZQ8cAk
+TqQCBp1EFJhXDXVXFPWY+ZtxaoGuGfEZayCWqGiLORw6JnVlhDMjKDRoLzIOnNxS
+CeEg4tnA3X9nUuVmrGyvoUIiSLQOQzRTQ4pcdJbt6F9+KnL3H9yXUw4reIRbJPSd
+EY7Xr252+mJDeC50P63/+M/1H1+/7Bh7bTtDtRlZGleS0QcXUcEh5C2E1ZXe7Hw2
+eO8/Xb95D6O9RucBr3pMK1DZDZh4T29jWUi4q2qhLLFVsELzo3oEi7yogOKh0I+k
+YAbIlcEvtAyjxYVvpTjA2J5BLldpWUQuGpveqD8YBBKfDd8378T4dFg/6j1nLvwR
+hdkC2zkMhdBvISJxsf5UAN9/tJLFrkLqtBcMBPe5v05KdIPx1/EcwoQ+fhWBuUHX
+OnYg+fY8lpDl6Au7xE6iQixJv6SCW56M46NHbEFAQOIMYgmOYezOGP4UbNyHGMzy
+ekmOKZie0djIh+hpn8YqLeoH9pRqIdNOVUZtu96ykE0R5Sypa48qPU/RDWVapuiC
+1k5b2C7jUW1NeDKYj756CL6zilqkt3k1fL7mFGZ29JJq4Qk5rfaL4zmffr7wAPcJ
+NSA41fX1lakCtmbdtq1E81RY34HE0MTBIwepIiFRr8YKzjjhTmWy5FRnolFiexbF
+vMNyYg4FSf2chBgrBygzFZVveqbF/Pcqh8O5kAzdgMIKixFGX0u2y0YmRATSh1lp
+i3WIc/amNb1o1ms1Z+V9YZrsjNLSYe44swrhdIFpNf2xZ/Hn/VcWzfPDo/qgBN2i
+No+pDjPwZJOvHiNVAernMur95zKCYp1ogivCilkUOOBH3tC5hC49FbZ3ANGYsF1Q
+aXJ0RsSpN9JjcFgecLBt8cIU3H0ybPcf3QwTa6p6A0krnG62Q8VQ5DcLagguK6Fm
+0VahTaUUE3NxvR7QPCZVQlXS5JmOLkW5AOSHTPYxwmS1m9HTFRhwVmQjfDlwS17/
+r/BvL0b4LIS5/8piYsmWSldQEdXtTagr5h12Uh3Ts+Yx5LHsM2F79yrE7vCtEO6s
+9Dc4bJmCU0rRb1cReSpsd5BIect72q70wmqxKs4Mw0S6orXjVKyaKs2b7P4TUbv7
+ZESn8x7ETi9U6VKBWAAYBOJnYLJG6HyH4o5+o6py69A63EKdBd8nEeLherdeP3Wg
+FWrY/lFBzjFkiytOc04cIuDszDwEAne9oG/k7HwyaHffWJUVM0JhLkHCYibqQr1V
+xBhg570dUjO/2Ov87cdOz9lRVY1LR0dw5/QxBVzJGqcrz9e9m+jlDWFwRCOG1KLd
+KfjjbEV8SdlB6XHhdV5oeBpn6t43j0BZcnL5UwQ16KhcWnuTK8y5hcdmsUAkH2yq
+g/eURTgZCQtMzzZs7us8pEzEnr32f8HjoJnYC9c+S2/TFqX5w91UEEnwXikWdQpn
+jPHDnql733x1vXOsljJnrsiDqpYoeVbnU3GoEypzDBfneLruffP5liazpII/Ky48
+wk3irJXZ2jFm/WWzqp8/+K1h5va9mf8dc5eO9YpyexBq56RkIDk3MRpdo4VyJqrf
+PEHFz5a2k0KmwlSOwS4lu9lHZuomHXqwyE0tp6jBdX0QBRsAY5H5hiWUtrdSMcec
+nN70zbXu6s3YVpRQVfmKuI8XqTSHcUgTSkqHeKEbZ4L6/pt3vFbp5EgdmwFtqMWa
+0jYQ1wqI8zkXhK2ejun7j9duUgbwbNImZlWZ0sG6tdroaZY4sVP/9tc//OaH2+f6
+clQUo4/A7lfvxobuqxb/RJKnOTM5uTwFUN8/YZiIf6yiZjZay5bbh6115FU4lVRr
+0spMnHIOQb0khs6RrBiakFU43M+EBGbqgzlRfRKnf84N1NxEWcRY6phdIGcWMRSH
+Lo4WSg+dxZj3MxMHn31zAaZpULjIhc4TLRPlXRF1h0HqVgWxE0/6+vw2fffxRkjP
+wbusS2ML7jLZaTnYEFYtYT8f0jvXwq9XPkWLB8Fp5XGkx+j3XMovh5jm8BPDJhNO
+5d+PT5mof7tkxGkc3KmPVVD+UklVlVrsYo9FnBMGV8XNbBCxFaUNLrT0ZxqEeQ7L
+mXDVDmoJBRN0YdF9nIhEHDqdRSkhoCBrSd4q212rJpgzof347Tutn4hjcuYS9c0E
+3OfEJFXrFBvoWJmTeD68Hx+RN4hVxTQLNsy5lzZCVY6cmyWV5vMh/vu/+dU//93P
+vKbGcUzcDRPQVtTSmZRaxHrIljZklZJ8JrrvHuCVZJOdwLYl5MWAsIEgcqAfetp9
+DDsHToWI/3h0e4Wi9UtVXHKOQuzDqLZqx1utCDhB8gzjcnWlFGm3lsdQSfV12Mps
+mxZR1y9gLAEGeCaw7754pBdV4FDFQ+QmOwG3oDUkbGuNymGbtdNcOp+O6btPt3hC
+MCTL6Au6d0IHWRwI3UWF4UQ4310s32iPF+rIyicNN0X66UcInEzhnIGnMiceZvoz
+UX30HO1+PNtF6g9xFI5Dp/KEN0qYmKeagQ67qJJiD35PPFVFQmusRnFQtAEwA+cE
+Ozgnjqd0PYSVR8cbVhCSrjoVptVrQayibRiH5TybU6UzwX30/Rv2MpzgCToxgeLE
+mlKeTAbhYjjQFUN49ekYP3qIfp0zA6d5Jt7wvMlKb85HZTw/dj+RnN+Ewm45U689
+cVrDHS5OYomPFXZV7tM7t16ZTtDvVMH95hGVUZ8MBy/DYVaql9Q4FlARroo1x0TK
+FtwX6YE4e2cuqJQEu7hlNlwApoFIkigY3b6qpsHbktyhniNc3LVG42H3rJTjh9Cl
+/oiL4lKqW+1UWn7/1fsW0RXSNo2L2AXDmdWlyNV3Ev7OyhE5VPN8Tn7/+cOYkZvW
+Kwjea8Fs7d+wOyODShHrZFid/bp5p7dUEDrXB8LSgpR7K3d2VTZEUFzxaPWeDuvP
+j9AG6iI8QoCocoSMEWmpCDG6YLRDj9YRPVR5QpEwzuLQtQSNLTrkATXG7SnQZQV0
+hOh9LMrNYyfRykT/g83RdFx8tmGcuijK+nNaS8KD/nRY796Om1kgHTeIavSVEec4
+qm2LCTH2IWDS9a3PhfXu8/vA9VkI0fjI1KnB9AYDmlFqbGd26z/92rqfYfdCT2R6
+7IQnk0YqvEiK0b6vCpAEVJro5ziVk795BNd9h44OQ/8IPNoo3DYcfWaFdt6UwbJ4
+EihuibZRj0JmK5XdMYLwkYAWW9coCWLNtbiIEqHkHroL3nRH+0izUQtdv6RPDBhb
+IK4pnwrr+6+O15ige8DOg54XG7kudQKvnDhGj4aIflV4PqzffP5SLc+YoyqX7bhx
+iHHCripLa9WRng8ruBsk8HOecQz5ubCqYLz2asq+GkbcCopURtUrieXaM3H99hk2
+pbqp6eKyom7ZWNTflfirdp+xQliHkZvH32pXpeWxupCiM4wzC0Wj6atwszVwVzF2
+HmM3A5DUS0KTGeaHVOIW7UEGQUtjZL0jvR1fzgT2w/tZWayVW/UvB11lr0x7YK8C
+45nefGbue386sh9eDo6CuZc4XZ1tZfwdNofSPFir9ERov8xw3pBrYpwidiENrD+r
+DRx+NG7WO54UiK87QdhTgX33hFpHH7tqdyZciDOtLdHFkJRctWgiRtE0FWiz4e7G
+UTsKUTjiZfEZleay8OPwZfUWBCX20EsY2tfc06jscqMgasKx3kCrqq0lsqS8f4wJ
+x1NhfffN8xyqHCojLDoBv3LcDjmtskFc58DsWtTq+aC++3j6iAWuBy0XWBEqOXD2
+uVVnuBU8wWf/92+/kuRptNatPvYYMqoOt8iKmvrhNMine8xn5pl43n+8qIthPipw
+G90EBbRpRVe1vPFGHpWrNEEP/UU/JC2XVyZiloNKPIQjaHkUsTCr0ZlYnFCvWM1O
+XZQotLkMF/rKiMjPrxUEoXoTIhB+jsroZ4J597W3kPVEKnslrhQ2JnUuKvG7RK8h
+SbIJ5j2/Pe8+u2mnQOiTMnsT1GsonYi+MSdsajfPh/F3f/+3f/uPf/3bX/3DVwIl
+PmhFiYvwpBlVlV/x06pMDXVo8nwR9YjnwO/Hp5QQBIMUgU1TTysx1cm9RB7FR2VT
+r/Bi+cYgpJKaNoTFRcU4RO5VcZT/qa048wn7LkGhjMaTCyI/pTntaT1g4XJlvCCB
+yKD2zpycPxcti1NBffSOjJJEdV5UtihpzQ65ijvRo4CG9SoTRbOnY/vxEV6sDby6
+xQzKjOKWiErtLNyRaztz8vS7X//N/3Lhjnpo4Zk8oxb8MvQMKRMYY0dESyjUUoWd
+TIz7VIC/eYaiKcCqDxak8aojQFinXOtswllyuMyZQ/DCZehR0bG3sVjEwFQbL2iJ
+2VW1yoN+qhnLRMuplGOWRVsdBWv9v1F2UYAN4/pkAVNpp3F2nzr4//a7G7qaMSFu
+KATP48zT8V37cTddcEcGLjwf3G9fTitoCQEOlSEr5uGOBir8WFIs7WRoyx0YG3Mw
+GYBpJXebAsGOy3rFoNJNbADKAsinQ3v3DGaM0lDwVEFVPKJVesASrjHoI0y5icMC
+KDuRTvGt2pGoc0wvjhpaDX3aSttj715fSTlZtNZlG1jpzQTHgR59xGhv6A8pEycc
+AFV3S839dGjvvrtWfKAxvsZZsrdB1Mxn1e++sRRNoglOkK6eDO3dA4xZk+NzYWGx
+Ops7Tkv65kIc3Ymcnzh9+uF3f/NbGpW+vne7stBlFc5rhcN1LqX1jmk8V71D4q2H
+0U8dF394yI7LdEZfTS+0S4j/rVRsieServqrBC1wz+V8acrgyajKCseJdzWOlzaj
+5kIrrTOn1LbwU1I+REcuuzSWoyUNyqR/wRG5LRG2PZCGYLu5U+dO3375ubRFx3Bf
+GvOq6BbXl36xuSZe1ibOpa39/KHTt08w+qm2o5eMJZ4+eitnKk9h6TdaOsFh35RK
+vx4WKwvnKUCpKie8hqQ/7icGiVb0G73SQ1+nqM77J9ANufSMGJXphYxrmrblXVRa
+tvZC0avCvy0mjpVSxedvowvm11jjGFAdSFClXrR/kJAwQ1UE0yy3tGu7dpNPUfHe
+a4et8pdsVI7WwtjC0fFcYN99c31XOkQFAwS5yfCjiJJwj58qI1nNaekn/zwifv/x
+cDxBqQ1E0M+s+D1rIWGHdrTOnQjp//nhN7//6x9+9TWoaAGK2CvvBnGnEFUT8wHn
+tTSX6u9gMKefuon99hlBrIWrUi4BB2JOXQA5wiECUmt96DmqVQIjeIyO7P1wcCvH
+ULN2RclOyCgJVg8lkd42rGwLMgsxa6nUWMPqZdNoj3pX5BKc16NVIpiYzoX12+9e
+OwLli86yzoSrimsojKThOAIfmaLP9fnOsm8fMAQsmBPl5FQLUfVFP1qvBJFj6+Zz
+B4k//mn+3z/8PJq0ayulqphz8ev15voMqGsvLhgiL3/gsPLseMM3ny6QtCeujbXv
+Y9JXwcmhip6iX+s26hQTMfExQ6WNrHSPRpD2SPRFpaGVzdCFmFIwm2O7IqBSjM9a
+GPqXeswrZfShmxHem5xOIQ6sXBZLffZU+Jtv7aNDo11cxBullKiqhGg0tpO5YKlN
+R2UdT82BffPRnZ6rliziD3FNQWJ9eluhKVuJrz53m/Pn9dOff54ty3bvUZVwHWep
+eKCXXheaK56uIEc3XEvP0pt3n01ypdnhkEdIwthFWGwj9pCaIpC3YGrxZlAXTZkj
+RtHObkJDLI8jc0endsagKWqF2oRnI943DWci5dzd+iSlcutUGWr0O5iSc1O20kZ6
+MnzvvvPgts2UjUEc/rrcFVu0CZT4zRQPCyi9/6LH6scPXqJtAxmqhn2Hdo1dTISv
+jUZNXO7J0P331x5uI15HB7GYvxGLa9yPpD5UkV1lN2aHp9UoT0fu548Ox3fjLMh1
+TO3ELSyDXcI9Ey/4jWiDxaFoICzM1GzeHlU9jjvnwjaDPjVtzVmnsK/og6g4Psvh
+0Dy2XttCO9UH0VPVxnUIr/eFappex9OB+/krC/lNEXJRnx2CwSRZlSukaAJOvEL6
+RqBbv+q5uN19boSMpw1AMNz6hpT1CymLewnFfRq2f/vjT39uf/hD+/O//emPx1+8
+H9V9a/v95x9+87vf//WvfvVXP/2/H/uf/vDTTUqmcVLSiskDG4gsJJ7oLRS/gBII
+NPqww188633p+SiEZvpLOy+uOOFg7Tsb0EfTnrOTO28flwhJToUzI5+atkdHVn0P
+vfFGe8xOMYk/CORqNeK7y5xTUJREU0VqsudCxUZwe7NLuSKMMZFM/AsL4KXfRb1f
+U9lCWZh22kOcvmJQgaTQGqr7BT/nz1bJSw/vgiC0gWAjPzwWfowtIxI5kX9e32sp
+3alCiF9Uvdfop4rydL0pjqG6DMxAYQmztx7N91tGd6qRuxjLo0TpGZdDN0gVurXj
+QpTe1WWPtWXQ8VtKVQpOxIuzkmCQGDFTkCt9uenYNR8zK6oVSetpIKS5J2MrzQfx
+BOGMqo8QNNajIGXfbwn9/JvozxQQ40BVBWpiISewIDyvfwy9aZF4i+PZd1o+d1rL
+yW2bs7Zbqla7Mjj0qVVDVaJG/QuurCef+HZsElWalXL8phFGkQjiBC3q9QtJbQYQ
+A7fp33HZ3HK48gDFpae+An7sm4wxju5xlWR6ya1vUf/VxrR7IffEqbRyiRA/CByL
+z6T67Q8191Z6wL+2BYRqZ5nIwO+etkhc3VqUh7xRxuHNijh9vyVzOxYVQRjCNTVq
+J1jVpca8drVuZedaKCKRPpn5nZbL7Vwkb9zczJx0fsSx9Up9YBwyN7/tdytY9wav
+iKcz0iTIEEI7ph8ETZfpKzl8vhMacv47Vqt3DnZV6N3tgYp3U37ZTJO4KARLZs+q
+mM1XWsAmgwxBRK9xKIg3uElQelEAh/Dc0GpTAkneVc69HObQq8Yc+m6DWM4x6LsV
+tBDE6QxkmvodS9WdM9N2nKALjAtx1EP0WGVV4JN5NkzaxGKUDs33qlN3GiuNYWeH
+dGUTRbQh6TfOKSogwJ6Lu7p8vrQGf1IZrUDALgzDCRmY1gZGXgqaOLqyXVAsPS2g
+7voC+ouPx0Fmi2tw+iOCFWzPQbhncN0QETkoTfVaqc8OM2tFfa3iJ8U0lQj60Znd
+SzBcNDtV+NC9Q4d6q65xOiCsZvVfLC8Q1emf5bpNWFopVMC39utL6C/+LE40irNL
+GCsikeOSKHnq2ejb7J0aujmipeviIvqLz0ZZsUe7jE3Jli5qtu22/eh9r26s77SM
+7uTKAOMcrSfvAzJwSv+jIRM1bY0Lm67R2srfbQndW6Zrm+IprFXiOJw3U7S5McV8
+XKwWhMrQWBBe0XoRlFmxdNTye8f3VoBF1KrRRSpo03JcSF/aUg6FcMGnTQqiXUrp
+9NCSM3RWBuW6tpUFvtvy+fknRR9Cb8mhuxe7FovXS9xKiUPQLdh6jK6Hnb/P0rkT
+Au270FmRODhq4rVLqNDxgwWrlhvfadm8nY+jCbpUurz3NMUes6ZpOMHObQYj4V7V
+6y/6llx57Ioudj8DgiUiAVMBZcQ/htRVRZVbClhBkZ9CLIJaSisqRTEwGtmsmD6D
+VCwm5RLPxLbI1zTCaQKg3PKqQqRtQEVOK6grlSt3i3qrnsxqwvfLNm+gDbPUjQaF
+0mZilFrcGz2AXnuaQpDC7HjZf5+l8vYKO+PZ+tlda3MraY85RayOvSdWUb5Xkbrz
+Y1dlQngSLwqlM06R9UMbfsFZ+GZACYQ9y/erUHeWkGYUmqPs1I9V9YnHwbXpDGJw
+B7vpjEONovo4ca3KdP8tRDCZZqslHRb1+mdVZcXmEulcG6wgYs5pYCjO2C3+mIds
+5nHXWLuWVloC1t+vPN2htlGKgGkcYlHR2Vl3E1gUmQtTbFGwXHBMcGt/p9p09zJj
+wbLTYhA4PMKP2vlOG0Zcrvwl5dxfeOKXOZlHHJy7322idqKWSIyb9tbWyPkxdNWB
+2rgertdXzqePTpXzDdodbbcDZdexV+g2csYbTE/cxRrO4pSK0N4quaCwjJJJELU1
+LrOzfR7Rr5Z7D2VlZeIlAJMRnF/eRqzU8Hfi9H2Kt+mTeu95qwBeXzif/iTY94ro
+puQxMPnOWIJoayQUVoXTkzgdbqzX1s2nz12j0yrjYpk4h3YXFvqo2lAcaZjxnZbN
+G3hqW4lMFFfFHsejOUcTX4kqw31ChbUvR2z+uy2Zm/jVCh4hVHRAcslO22F2+lYs
+Xbx6AUp/olYCcziwrdXCRn/Y1A2zThatCGWO3KZWWl5i1Ho5gsJaWAyQaxVmztZR
+5BbNElkTObeiF1pR+DB9t+Vym8sctG7HQfvH0F5rnDseTg9bFVV5Ucs8Gvd9lspt
+eS68m6dW4sbDYpXMuNBSIJ1AnP1Oy+Te9vjQNkmH8oCwIzrtyucVO+OkWuFVDXvK
+rn+3tXKve4xjtEphQGLjELsF1fx/6s51R7Lkus5PJCDul5+UZUgGKMmwJED+ZcTV
+JjAUBXFk8PH9rdNdVZk53dN1Mg8NiRJnOD3ddTJP7Nh7rYi914oWDh4oiHPyte0S
+6yDN937c0Y3CB/KGGFPzaZLvok5IRskN9rd8kYSJUye2xgGXnBHJJKBhXVdqXlKd
+X66psaldFjC3CtjyqResloQY1G4JkLMDKP9JYHtLW2WsfE3U3CKMYiWmtHqCOwLp
+dNhH1JLLSNjd+GdD52PC73tUrY2iDkdfQpFivQ5pd1fLJ8QWFud1DhhfYU4//AjW
+Ci1SW6oGBCPAXHPsoNzQiIHYO1DASZAwEBNf7F4pA3WBa0CX8PKYu9NIvUTeoQwO
+eFgPhbmumx+bk/FBXbeTr6qhPRLUSjL8GZYfbJ8PpB9+tTCmOnGTl82g1xCPzgQp
+sXzm4UPSTbHaIJ6Mpx8+H9xIng35aKUp8sCSlSXlczlCzNerMtL9Q3WxV4ypMtu0
+EuxgVcR3h2N7sSYDSJG3vS4p3d9ekZdIgHqvgfwBAusatKZ+k/JNjj751kkycPE4
+7NQoebBWmmPFVRkOhTw2oLC2dfi4UCrkb9VFO2yKGnmYTq1DW+eaXrqJ/FZ+k9xC
+V72ukD0cU9ljaDPL88NRWdQBGw4Pu+GNBs+cTFHGuig13V9I6sTfdAmDmt2dXAST
+3EY0Qdbtfh42f1GB+NYRxEgavpeyXpzdS4SGbw5o7VLZ804+2Vu88vkY+u6zq+7V
+D3VhULAMqKJO0XjbUNuifJPq2BCopkb2basXKFoj+LFK7cFWqytT8ua0Bl4vj7IB
+tzGHfyEB+eU+2S39qTB2YBmTLiAb304uNS8E0He/kw+UTIkVmgWqN7m1pH7ArvFF
+NmaHsi8pej8bPd99sPxJppr4tqwq/OE3bnhpzWfH9rRXhc6bepmazccebNgJDgJs
+HNMMlFEvOQe4A3lp+OvC5mvIAPwyuKS1PvaW2nEXhnFBfX95go8gf6DRUAASuqLI
+4KPmfAGxsaeg3KCcafyqo0muhZiHno3mdjJytWa7TTk3S7VpE/xZR2SHM5rzLdh0
+Xci8eatbrxMlPmdKXbf+uqJftkufjfzTIvtQg7PXhMvbqYBNbUuKYUnMQwMFGlan
+XvCicuxXhcqtnwYVWa1jqzf1AcaiUdUJXohSJJWjkh1zz3RdvNweRshOwffjJnP6
+STZwh3aUSlAaLs+6k5PkZV/ki63j2BnSNJQqNo+E7X3gAxbek0YA3Jy8qbKryZ4/
+dlQ+8f+ZANzHdRw/O3rNaq/qrHXXBc3NlxIjKFGyoFTVWCkT1Etp9BHRW9PoORaN
+nl0UObceXNJg6yXZQSKVSE6AbUqCDdSeYe2Xhc892LFbzoJG2gSD+kwUqbdtSs+V
+nSOdvZ1zKxdG0N3zx2LH8IJLHFHXS2tLf147qTQgNPi4Lytts0y2SMOu1rLzh5Na
+VTtuGNBwuGk0stiwucW25O1CGmPdtpUPwpJMSt6Zila9xvOVzJYZGum9MIjuIUe1
+fclOdmnyRbrhUflhxTBk6bLgulmiulfF0T0pKgUyAvPcWYPmA0Cr8VHLF3e6yruQ
+jd2U6A1ToEbx6CK3EI0hOY0DEV+88q128xB6vZSJ3XqW5jXUkDS8vJR0UrJl8ggY
+EqxtvjU4uk9kRfViDD8P2yMdIs6dYOZGx8tEXRdIJGpIBJLrbzG10Wo4xk6TpQ5b
+SeNA7oA+ZRRZPplflxN/5WvxQkU9SrczAEBGPmxSSX8sKOTEWXKh+o+uY2C3fTvL
+D6kL7uq04WSJ3U0uxZWq1uYLw+jNKmJtXvGQhG0SDNHAojONCLZxsVtYFM0PXhpC
+bw4FoMgWVmpxydDLbHmAhw5utqQWCdBDkJrVqE4ZsYCk0wpy6CUJdblykKnY55Zs
+07PGKYoAk4CUYdNT6PgqeUuRtnadIfJyUx5qFR7OjmtJ/NtcKVzHq2qaoPb7Qnb0
+mj6UYD3f0QiKjadvKb77XMojNN1bMGNTyBRl+CQthB51WHblWdCNryRoQrVrCy2n
+0Nkc87gGBRtVHWuq+2yZcu1B0M1RJgWmSPi78K0dKHMcvVlDfppTwi0mRqAzZWfk
+CDDylCCdFY4ZQluhEG+xzzXa8sFuq4zTrNk+zq2JK+uUwE3c3ssiaWTZwxW5dMgF
+2PyqLulL30tX+QS+RIuK9NOERqo5YLVa68iNZM9a04VHQDf9PH75bmocurQ5zLCM
+/NQj3GKTxZ/u5/kqUvMt8txd0NiiGeySfszdOHke76FD8AbMbZUAay+E0XefHcHN
+s0q/Mw0f1aUg2wM4to3UmtjdapKpkF19JKIMFXWvXSx/zsg+2ZBZVCTWFvoAUS0o
+ZEp+dg8e77omXNIroVotuPzQUWXnp+oNt9zGCyH03e8E9RsdfpIBt0OG0tCjpBGz
+QQrcy5NkyZv76fr13QcX+QAP6rcsNSpsDBBibOgbbFRy7leFzptE1gBkmBnJNSON
+0C2AVS3LIRNREmToUjQs14XNW9naVSYOXUpgmnpYUjqdfO3efBbLbVKilt8uMBkc
+OBzhQTQROcPLKy5Vm7Ml/Qynluom9laMBB5NdJDKLbn+muQ0fUSXhJ27zSYFtdlc
+FzJvAyxZp9/dUjvt0MxA00Mlcrohh57kvvlg46Jw+YrV5zCaIxqdegGpsESpJnFA
+ObmHelmWuW06nW4Kyi3x3wn6XHKnGVuCG10+JbqszrVeFy93KV0Kc1tnkBOEBb7r
+Pg+gr61Sth8aNdykCKDv4Wm+HBGmywxCnNpjsuRge9UpokaXjcRBvCmHNY6JcgyT
+8Yx6ml3yEj0rlYQETk2kIe/6dUFz25MhvYl5nIGXFSsxbMg61q8Y/XHqyxN1+XZR
+5NyuZeMdlK79AF2PsjU3PepQJugAYV0WPnccr/EdIxsXfC4lYBY0meZloJwsCU5u
+PNJSHhdG0N3zAcqR6sFf6wrqSWFls6YoF/nBaCQ/B2iVkm5yrIiZ8reeFg4W8+F+
+t/h3/NEqpTQq3la02RVF9ZuwEl9vyKlrgfp1bK3raRlRzwAKaBcG0d33ikHeXpBk
+DfQ19uayTZrWHr4OjR0wS0eJLlfF0d3DcwVekYXdkHyYZDydcdHCehrFpc6XQsnZ
+b5bJlKv1h6k4dGDVYDZvXuOYFOqpYQ01TdgXw+ibz/ZmqtUvuwE2t17yj8lIOkND
+zpRr1SO14NUtr4O6JpEdqQ2gmRD457DTkGCiUdOpjGm9j+L2kCzJyq6UKMBSJwUw
+Nh5kAc/L6/7btO1GeTGEvvmd5O9IrR++QAuJb9L6tpIx10ioOu9SX/KreSV8vvlg
+AGG3JOlFYa7OGyt7jwTXKOyp7fdVofO1ZCarEalsY+8aT7BbbHbATwJY1Sy5NQ0/
+43Vh8/X1WjYPRLYaOd46CFSTcN+sEBOYrudDSexlORLIYYNkNbjaparW5fSxy7aC
+vdCWIh3c5epMmguSfy44FeRklqzc5BEsHM5fpfpbRNVgP9eFzBtrlL51aK1QTCm5
+7PFs29pG4oK7muADdDrui8LlKyaH2MwiBZJMdNaSVdgzYAfaCSa/LMvcNtvIQYkN
+O5tmauoEZUCEZbJqOuW5zDC81vC6eLmdR0kk0U5WyTGqC0MQmXrD5+jON2N0dLx9
+JyiCjghD1sRGkO0VmWlrDMsP4kTuvdtmMozOAikB0aQUDXnIsIh8AY3xdAltDVs0
+PA/Czi6EC4Pm9ryBJMlGSPAbJwtMHVzlOLfu7+QhSQb3Hsp+UeTcPNkoo4KQjxle
++XPkOXl3dfFWdCJ5Wfjc1+WsjhnNEUUretsMIBUEbUuffvdcbJdKcr4wgu6HbwN4
+asfcDzaS65Q7imsmGx3jSCF5T+kqrtI1a1X6mk0nCFLZoarDsiUkShIaU3O0UXqg
+Cixe4JIIUPZTdl5yUgC7qSGiGk1p1320GLcLg+i+e8lX9TG6Y1phN6sheLVTwdUL
+xNES6NSwnq6Ko7uHT5kUeFtXhHzVacOhgl3U9E/+3U/397yJX36rF7arkS9LM1hO
+29LW9EHuxEQP29d5Dwd27YU4+pWHZ1nXbQiKsfquWnTYlWpRA6vLOVMKX94ROmQP
+u+UT53TSxn6Wu7ZvfQr2SGY99yhw7BoxWcleh/rp4C9JQ0txLGDjkLWBVD+L3D/b
+C/fsv/KlWvUyTxdQXZV6nHU8NwB0Rcpv65hYbcC4JyPoV548jxZDNVQnZ2Pquuo+
+Tr2JJN7Mvix83iaLkxQ9TYXwZSh0BmuQFFiQmELQxO4oQIVxYeh85VqsonOmCosE
+HWlVylYsEtoK1oQlyRddpI4WVhlOwwiJMKpyu9UdV1yhHtIUcuKC2jtwaR3gtSHT
+Hl0WkmI0v5y91A6MFLGEtJzP3ZnpLgybrzCOfadLlQjaSkXeCXCrpJs322Yo6u7J
+za/LQubtcCm1PqQBollJt2IBBvAGqVySKbwu29wUy+JijiMAMJKXSCZblIpZtpdH
+kPTHWJw1i7swZm5BghXqkl757HzFtZc5ukL4PNJ9Us2cRdNxjvfuSs2715yGJtS9
+vBekcVN7F0+TsV+VMTqcShr0Gq91/IxZU5V7DU9q5vDKK5PqOESYrwycu3cKCEgz
+Ni9tF3Xny0VzNE8iB+GV1EGUJl4WPbdnPWlT9CEVQ4oO8uJgy+m2z/lOFOXrQuj+
+sEf0oPbi1WNnmq7Vkvwa1S6RLZUrGI0Z+yuj6B79jFpttTD2ELKRFymrnCG2mpU/
+4INxhwMtoUDh1iGtnA47L4UNPlcm61RZQTVbJIBhZXU05eBt4GdhRd2SGuogWCRH
+EikprRW50IxdwyvN8j/4YtFLX5igLRSsPLJzPvqRV5Drec8SUdXBYb0slu6HnK2L
+qvctmu08sA8U3RwoTOLce6dnw+nWYONbMGSrDReawP8IwWd4b/MUjUnBkIos1eLL
+hdDT4fSDD5B08APMHJo0b3VTBoLTcaXPh2nmTLEv+V/HoDFX3ZtL1KdsJ3PVwwpZ
+guhNVXDYARkAR4XppcbSPcGZS4zHMOcC5mUpSVNXSBuCs/WV2a4ffDGyoORQ3ZEd
+vZTCurSOUvSGaj129naTSJ89/vnRupL2pHe7hfv8DJNkfkx8mUk5j9eG05uIZoVe
+Vzn2dWr6YV40egGKJJu9k3F4tib6i0Pp7eR9wdthZHan5PjuTobbzmQA8NH71aFQ
+SxPZW/LLJG2NvVEAyyZldSpIixTIrOw6p1vJt+yGHJiCS5RMX2V63BxIXM4eUlKD
+bM7ICoNoXxF6+pUvlbq8nwbrt+T1w8s1sQ1gfwD2JUorgWUvDqGv+AgWLXe3HUQY
+gPN5BCJJcqJ1zdEvDZ/bRtJgCNoozf4mZ8wFMaYSWOmXsoWgDomFMOHiGLrtvYSm
+g8SUAqmnCQidIPaa/AZdt0muOvQvLJ9myqYLfgroCPKmmlFniF7ywMXL1U+qdTaX
+AjsDW3nNAxt5JwqgSAK2UhXzqrqqBYsPcGgPFwfSXVtMGVluxDurO2ASwnUsDYMA
+lFzfKcagW8Aro+n2xXofHfjEU2fg83aOUPgHpylY1txfG1IPk2E8bAIO21b9CB6S
+31lYeYB300XlmiyDro6q+2EeiT+tQ5AdalVMGWwwI984ErV3SSblgWKYZVDhtkwE
+Uo4azPA1T81gOOVUXcP4KIPpLc1mahlEnz9T5EkNsIq8Ug08S6alNK0xaJDVtVcH
+1kObqeTXtil5LXKkUkQiGwNQrdny9UtrReL90ti6h6U6siqlt253OTpr48qe9Jz8
+1GXQ0+F1qAp/E7jU1Ju6Rtvh1mJU3CJEG75BqdFAqZUnxwtB9b1Hj1JV3RvVnW07
+bWoHo9faT0NGSZp6l+D0lL1IdN2CrrIcfWRgA8hO0TZT2Qo1gQWWdKCdkTzLiEv+
+fakm6V06ki5fkQqnairAtOBa2bwQSt/7ShJRoMK1JZsUcr/OOpvGH/nlPpeGxkOB
+GjwbQN97rsYI5TwBIhuwk0p1i0aX5UfDQ14Xhc07KAsNJhEKKzCmbIMA/JApGJUG
+p4K6xPuql4XMV8qYlm5BrdIBST579RXCWUMtZJFIBlGfZu1NQoC5p9KqN3LyUXQH
+D8eUuVyVH9eybcoFNAOxWjnaRoYYX8+DP+2qBPashu599uGYqgutXRYub8e2ajPQ
+9Yv8po26/6GGUuDdg48xTGFLkPiuCZW3WRDt8FrYdqBA4FfjfS23zZgp9xYuCpNb
+JKTZlhBn9HNn2E0t2boFzGimTGqHXIJjsvGyWLk92lD/hqT/SSs5FFf3lPvukJYq
+PBzIoJrErmHDwOrHKDp0TNZ2f1yIJAm1iEf6mcmDpu0I9UrkYijulFQXoJvyBjPz
+pauljDAE6IEF8qgxXBYwt+inU5F0Rwa3dhR8B/g3c6irtkvEITdAyVjjmqi5XUj2
+G5BySnNvORBPLNTIuKeUhtMyV4XOffdIi2Tt1mCfLBkw1sQEZSb7U6BNblYeZryK
+66LnfuQl71aHh7rI5BvEIpXdJAeXOijJkkPvzg62k3p45tTlJTBQHeoDNL1lEnPY
+N04JHxNLakrL5BRp4vslA/mkYR8nwUQPet6R2mFklVsB69cVqIc7qr6C7vOcnLrJ
+l4sAJ4SBbUXNJVIY6dIxvyiG7s+Hio5XKd2z1JmzGvmnRKup8rzqz44U9j/84eff
+/+5ffqeDqK9uRDq6Az5K+Y9V2r5pBlu6XAsYZaWwx+7/bJw8/vxdi3rEU5JID4FQ
+KCdOGlBgEbhPtwX4kdrRY5glqkLUUvJJfEMzHyXOGTd4wEXhYG91LyjjUImwyHsI
+fKzGIAIq6wIebF9lPdKdxAGm3Z8NhMfPzVLCOofR+FhVW2an0gVNMvRhBms/pUE6
+PpctHn84EMCOZCJ/S5Id10k5b7lvCqpa4b67lG+R8X9+/v1PXwz3wnJyeaxSJTDD
+6u4Y8C/okihYajRSn8OvrN7jjzQawzVu5iCDRsDYspR+UzYAqaWcWUOwpJExZC3J
+hi3Ps3HU38RHKMk1NqPT9YoMzyVrYbu1ptVaqB+b6rz5ll52iU632tJl7zIsTn3E
+8WsL9vhRIyigadajJW+t9MKknzEplbnsaUYLMXg+//fW6PHnkYfkhr5K1Gc20l/1
+EGKWZvZCXP1wWX7/h39bXwwwDIu7ANxNI7dRt0vBrBbkj+X8IYFcf31w4PFHuqqp
+I9BG1N1LPJRoDRyWEqoRgAShbTCeDhcMMyedw5do6/QlwwyDZpMoPupuikbdqFVG
+4kbpZhGANtWQZAOpAUWdtrhlnFuan6Pue1/HJ5bl7aN2R04BIBHOUlea8CC+Pl+A
+JNOJKp2J9vR944HHn1d2hk46daxvIm/I32EsGZsMotGZHy7Lv/7xi6umkwA9aDZT
+PFYrfaa2F+8DlApZrnHpyt99YlG+/sAwWV3Wuls1fGhitTmZshtTeXlAnDAbpTfx
+zslxlUQ2YFq8DAevsmxblwGs1Uu/VKcyaXsqXoyDEClVU5JqASmUwSagYpKVR4QN
+UiPdxX1iSb58UDVwmKUZ06GWTj0hUSkhxsd8+HLFSqja/GhBvvw0Q34Z7NohJViZ
+OKfuq/SQXNetVPnhcvz8p5+/WHaxRUEHCfKziLlk5IcdEh80jSiVSE3N1fCJ9fj6
+E3OuToCZXcfLbLo9ll8HYWg0y7CmHWNaXZuRlya5geDW8a4m45tcQpQyp7xufdI5
+DYGhsl4ljS6U76x0zJZJzmRI9Rq6eNAP3LXqyPkTC/L1k25NUqVOfWIdLKWtkWKH
+6NMeRfOBEDDnvo8jHn4cKWuToEDlgIJ4nHH1YNSPJbOv9u0pu9//7l//+Bf6CzWk
+v7lGPNxY/ea3//gb794YOp81Dh+yGhwmi2WJUhZddE+mifyNQuC+R0ieeJ7OG4bd
+S+oSx4Gr4JZODs0w7IDZltQz1Y0JGtIoGBtoWetsldKkACbktPNKZHtUpf0ET9XU
+FhvSx0HZDapJXTdQpAMjg4dcI6SV4va9BpnT32PyPF/G0PUotQlWp94RG4q1oj8L
+cqBmlW8eu55+2KFXpn5EvjfBWR3/w6hRtlEL7CovhUIK7zJXEEMy50hNm2cMyIyx
+mcWinhDaFKpDuODFUHh/nokVPh+BFbpaApDtUtU0uuTJXM0eIUNvJIm1vOSEZffn
+4jjshHIHlAO3gJQ6kCRMFU2ETimrkrVtE1SglhilcUNCbJKZ27AMq6mtSbi9GArv
+32OoX/AQIJBgqAzCpadppZaSt2qktG2tWa+EwvvDNhReIkM6y0u60uBrZ5m0S3Sd
+zfRsKPzzb//hN//4z+8RFw3vCAotNYMhj8/YmrC7dEspZ7zfaIopL8TCwwMllUCq
+dtO5Afx1atYFZKhlLntWOkSvdqauAQD2We+GNGjYYCM5smGQj7N8hXrzVABbVwLt
+sN7ykod8jgjud7mtWQBSsn5Jh1ui0TWQDlmfD4bHL5KpKt5RRfgcLtYl61DymlxG
+KFreNY1j+vRkNDw8zQ0L1d4F3iHrc42rG289tK/pwr2/Fg4fqYG3J0I6QZPqex1w
+5O6Hmgh8MkCibIDXc78aDu8PnFNfhwIsY8V1TNcXiW6z/DLD4RcKUACUBSbTOajk
+HI3xEs5cJJOVBYO8PSyJSZNHiwC/Kbdj8tbqY/PKmpDe8uqMJWnYYGo6GFuwr4bD
+R3IAnMHl+bGSHLW6KJLNR2C5PNhSZ/0dpvRaOLw/LeucG9zmZdQO9CXcowOT6Hys
+Ut8/Hw5f7N3av7x7sdbadXcgP0SJtoj89RxjiuwrEJSpPYo0nomAx2ccdnd1iljO
+zIbW5odfelj5ym2y08EkA9y2+XqDkqRjp50GmI/93SQRXFOs4GC7tumRFdZpmXFx
+siu3mH+GvJQpxR0KBr85wxcg7Pxft/HMoj9+9mGdGEgZBKfVKLuEtzOFTAwafMU/
+TmDg/PQ6Pz6AUJUYQJfVLukLNOnAu1Xf2E8T2tml/d0fx7vJHpjfSrpJshFAYy+P
+tBxkBtMljpZ5KdOfw4C/eEjUDMNu1OA4Yl5eRMV5qWam0XIA5JVFXdN9dbYx8W9H
+1HBglsPF0NJKI4US4GqZcnvbuy5dNadd5QVqJCAAoBwdFCs5ni4/XI36LfZcsecX
+9/YNjWrlC7cKcAUmAw+RPr6dPCNqGEMWci34k6t784TcjVTVDO/XSYimeaqgeiL4
+Um73cnJ5D4fNNxD5toXb2qHIw2iygdV/1zYImrfqc16akJK0ZD6/zN96WJa6t2Q0
+zWJNVG/raMeEjY58qY4xammLkwebp+pXijWcFbjm9tDALaUyarRgZXie1XTk8kEO
+4zAUgrSbFiQrrBtOeJWdFKRpyxI8hh6eXu5vfQmN+Fsv376gd6dpAjDyoVnPJjey
+h9s6iTm37N96UgykbmkCZgCJl+qGdVMjtXJIT1+23onl7+2P68OaXv0sMkKX4Fmw
+MpFg06wahqxPhbqGTvNPL/vtQ+AnJsG1jIyjNFdfdJukoiPorV8qlI0eS8/yUbQ6
+xo28zyHKrhHDpe52kxeIzW5NUVCMCYlIxazgCx23qM+6kgCCd7kCcWSLFHWczf4+
+vdy3H744FzWymXlTfQABMjW7DVJRyyaTbcJaoX673fiTT/CFsta92LZk2KQnnHdZ
+jgo91zq7vOMPv//X99QkbswbrITNJIdKX86UKEcgkreckqOOYNvp5b19SDBR56Ux
+TLXv64ySXWuyrpbXtmM7yd2oscsGwssJkrPx+Uh+VoHTIEJUdQ5mtdHbzEvpGVgO
+ZS9Do1Hq0z+IU1CTsPyODke+Ohw59/Ty3n54DT+r9SBIWJRMQ/6zc1gLrABFmABI
+0rV5Pre8t08oxTQJadYpU+HerLCyX6EL74/vuFJ//0evnz/KAhBX02QliPuaIOF0
+syJspgez8nQggDTnedh18wyK22x7eHMoyrCJ5cciBYgU1DE8SudvWeW1etY8eYkz
+pxQSX1sQXHPJUFw5YXkigQUTAUrATkMgRustyJ1CI30osTuADN/DUn3Uo+H86cW9
++exz8DPkdVb5fGo1mUdGJs0tPmxRE0Yb1NVza3vzACF3HcNZyRzMkePUrTi4VweP
+s5qTS/u/2+8/7JJTq1VijGZYL27Lex0eDOak5s7+BZo2aUOfXty7pyzQbeWHEut9
+9KSZspzAX5Afyi+kWNchPD3WBITPA+QdWEOA8VTFkL50S0GsnKLEPtFAhp1lTJbP
+qtXZwGgzQAX8UxfQLA1ZSOmwN8jn9/Ty3n16avsIck20aQ8lBaGieIjtkFfygNpR
+9tvJEnz3CCfPIqo4EFL9+X1JZNWuRsgPcEd6GnpBy95WeuxN4jHyq04ysh6T16nW
+ZsBuy9JHKnKMfgF6fTzMxB5gQMYt3XoVTaAfzqM6Pw2zZWhIniGrMSmArQrp3LVa
+ooGG+srSgs2GJHOgGj3kCXYA6ORdZSkENKO8SNjGWXitflA7Rqv5IhLc9v4V6PXx
+JRZRyDaWQjtcirLJB5ZQn2fxk2wOcpTZcXwWen08SQp5fOkJDZyr6gIElDdrTaXK
+jX0+s/zvpzRv9TMYM3knNrIemw2VSR1Gm6yyUCxLT0qqT67/49OaTRpSnlAIdoha
+emYjGdejv5kVK1taLJ0knBY7lRygeWY1VzbwGKuqcz/KZJdfqdAYpK1kJ9kZ69l3
+/BGQV/XgsTFdtPu4XZ1ehZRYts8FwC++RV5Non46Wp9G0tQjsz0hRsYfg7VkSJdD
+fSICfvGoNKI8a2vR0VnYkRe2qek6Vm7R2+dD4CPMQga5FrkAqR+DF8gyyGcNIkZe
+lhFJV/9gfCUEPp7GS/OZLEl2dFlWtcaEKRkVHZItUsGQjohM6TPUrADGg85Lym6k
+fwrS1gEAn3RNXXCHsWT2VkkTkO3D8i5uEHpuQPNymLkFUlve3kpS2c38SgjcpE3Y
+A9EJQIE71pzkJZCzDRrNVWMl+2boMzwdAh+Pgl6IWljfXAzqc5PeGsy0GKJvd3f2
+eOUP899/+igxNsqZc+lMXQfWqZPvp3xLMxw3zG3LNJu6cP6E5f45CyJlI8jhC3ek
+pu+9BiuizhsZ/PICHbvmmDsHZAT5D9Vc5a8GTGYZzZrezMORKIBv3Iqj8KGrDOxl
+gd0EDPdxvqxOAPmWhJTiEDz87hzxpz9/lhqvZCey2SCfuStVyBmJT0m8Te0/QV3n
+J89Z7h+itoo0+dDB6JKbR5KdN+wM8GPW6Xr/8/rjzx8/mz1RmpNeRZC+JyjKA+VW
+D5Ka2UMijo09d3qh757SW2dHBi9RDGvkqifNYp8BwUMenLn3rdap5jTfMkAWVH3Q
+WXTTNHjV8pJwrk5KW6TQuI6zv2okitP5RS+FC+nHFrayLRFAwHvRqZzh9bvzFf7u
+01czxVAjZYW/wt/VPWTkAptC7BoCNEH+b+cW+e4Rw2gOhbiOvAjdASS34cmbt9Tl
+cnd6if/083ut8DpHy+p+2cCFolvlXtT2tEaS1bvJgPown1jhj4d42KpUj0wJRZ3I
+NrNmW2Ork/Ujfxt1HlE5VtDNd7Wj8XscgLxLM8DoDMUpo0R+paa8V1pQ0ypFA0Ui
++2oXwI1sF9VSGnRD4Zeue9VkV55Y4Js3BGbbsvEr3gJEAbzVr2Watq7UMw+z69Lz
+2fX9eELJcDErMY3RyQnAKikelJwioMqus5DtT7dHNcLpVEKYHpspmgSZBxrJGUkm
+4VZVG/S0y+n1vXtKXLIqnJ1s0HZqX1aoGpdMzFJ0ZXmriLiKr5NESElOp2RdqrXw
+UKKvAR7UEyKlMw8eKlIji0eyqcZLtdGsXUnePugweabWrc5X7SQJnF7gu0+v3l7K
+BOiAkGpTzeBGSi9shigeoQMESVqcW+E/3Z+YScVC2oEhVl1EGI3/eLsPnjHO7uA/
+3R7X8L7dhBzJiSFvOSc603SSUreaHyQDBtas56HY3VOkcEPOrFtIOtdFmZm5R01C
+anSJrDqyYedN9YGRo7KOuAFktg/4lUar5i7eldBk9RPkQAbqlvKZoVwN3RcUYiOE
+qsEsu43OytNKBX5hfaznl/j204MF1GVSjmGi6ZraLnXZnG2tbF74Q8s6Sz65xHcn
+lwRk7XvasqHce7W6Rum1ZAkvUZXOLvHNqQ00Uc0f0BLCktQMixlQWykpEEylVP38
+Zs+frNw+RG6Au4Grk1oOndzfsoaNM1ttScRK+t5OAmJVpbdEQTNSR9eMIGywzqX0
+LNNMqCdFhFcRQiObqf+7m1TU6OGzeIGX2SAlk7dkYUVsgJXOL/DtwZkQ4LB+6uYB
+kLUC+xgUWF1fbIQ6NEEKozu5vjdPKFQfMZyywYs+ghm3ThfSluvIV93SM8u7//Av
+7wVADWCG9wummUn9t0a3RhZQpLZcCSuU7WZ7Yn1vnxJBSmCSqVsHVsxnE7LuN5KV
+QVKbDepjozQgZ1fjZyPQ2h5y1Eq1krGT5dWyRQmF6qB4tnkTPbuXyiVPHDZxHs5b
+/oidGxjWxayCRE9c8Oer8N2nN94kkkhrvBqgghk9VVmoVmkoknlkZWjrdCdX+PYR
+ECU5nrjCl4+HKIikItUMID2Z2s8u8R/Xv/3f9W8f5/bkzwaQkYNZ03jdalnrvNm6
+fHSjK5v5BGP+xXMymQ0mUygHs7kRKWAErvqvtyF/9ykxKKmbR3KUTvWdpHVkn2an
+/KxJlJairQ4m0BV/YUkH+IGMMGH60C1QCtWcAiCMmAYAV+dXbvOtzl9uPHx+P0Ch
+ssaMMfqxrR+6c41OpJzEoi8RePbJy+mHh8RaKUXwxOBYCv53IbB77Gq3hSF+Zqnv
+pife3QGOntf/9XYdeittxGNCcTkTX0BVz3L0ITMEElbzUniicPb9OSp18tkat+AF
+ymx4tjblkhun7qGXtnGxsUf5lNRDvUR99cuAm4+hNxjVyjJZI1q7rpx2Ba5B+g8p
+ymSTfBIN5Iy3yZ9m22h39qqCRQ2Iq/PQT4XEye+0jEZuQDlE81T36Ko9qReKEgTS
+IigXX9t84jDl7EIa+KjTfFVwVDxqvfWm2eS9jtuCuyh03g6+SGtBUly8UXVOr6gx
+FHaBBIYjwAI8HKK5LGresIAh5yc/5lpOKn1eF3Zds7IBKF793CoLwBCXlbqoUXYn
+qAVF8jD46ENm2pK5hHqE4oXyO/ha4kVRJ2pRkifTq7mYPBV0OloktuSEiMtlAfP1
+HIan55Cq5/8lyePU6lJYO4osn7ZQ5goJcl0TK19XbhvdERud8ZJWYEgsGbxx7JQA
+K/6qDHM/UXlITi/QrZFbXel9azDWyhVIaAyg4iik7bokc/f4LmXQSTmp2fYIfFlZ
+ioo5bV2uADmUATXmSUU1RkoipI81CIqyimSzSmHj6gDHWV3xNKMmWVX+pav54QdM
+xlIMms4cR3VZ16Wy2QRqUzWuyzP3VrDgDEpfzEtWkZqrmwCa6fJKAeqik6dYWisX
+pZr7iUov0cgkF6dquhCzqwUuBqylOCZ7RRh99FvmAPsdzkrjyhO7XrxoLhnfapOs
+SXkYn+yt+fxj1V6hC+8aRyASIrTYq5lCTiFZB/TS5qwSe4+FcmOj7lG6bRliS77R
+R9w16aLTRMk1F82HwlHlxQWJ8bCXDhEe0gzkZ6p4eQkG8f26hk+uCZuPZl84LoS7
+6FhF7y1TjSCau/WezZQgnYY0W78gXN6fWSUiAh1LTdPGFIqjXyYtjaDCwcxFYXKr
+qkwJJOl33S5nMoz3S41lke9oddGQ1ZEcvysu+tKzh2xKszgRQaIjIK8Jf2BhkzOj
+GXP6ortuotVIa4RXIlkb8DBFZjgdcM7uNQYC93RerwlQLMYOwx5qoR+xLYgd5I7y
+5dpxkgwXatUO/thlAXPrSK9LoCajXkvOTOr+9JJB020hH1YnyF+uoi6JmlvPqi3/
+Daq1lOB2GkMSzhoOBVfxNq/KMA9SPADDqXmHmYnUCE8c7PrKdj+8HKLxfbMy87ro
+uc/oBEw7/K6n3A+6vIbAxVHoCgbbXI0KJZdkqAGyBcw6dYE4NQRQCXoDBzkbspdf
+dh6wZgiyKRMmZHT1BhxcOVCBITFqmNYBbINuWTXLO3ddAN17nPDZjjDdebQ4daOV
+W6IU7zRhOFGMXr1qF8XQgzFqb03mI1uHjZokg1m57aINbL74Kt55GBQxxzS5ThrE
+ZtVe3NWs5qaTRr8twdWVaskvx8/Dc0O1ullmMQM5jvTmt6bPZWIcfcsRcqBJnqB+
+V4nPuGxjlM5+XS4nft+Wt1X2ajUgWw8pQoBJeXGGf5ngVnP4qmvBHpc/DOyAQkGm
+rGt7218OnIfvM9T7OHcyLgDzm5RMNdTpRi97jLSrfLN4ka9FzMNDl8Zt6nSH3rZR
+7wtfPXkNvk3TRr0qVG7ZYtEwsz96SDRPPtWJuJaaM43mmaJarVu318XLzcMF92UX
+DK7VCI9KSZf0SJ6AKqBtrE5moQmYANBrUT7TTval0t+jhOXjNLmSLckwOvNK+iMe
+eusdWRq4wX7LBGA2o6rAeSXu7SsBIwGV64Lm9o0m6T3q8C0MpRvdwFEybe8Jqpj4
+8GzP5NZFkXMrkgMiTRqNyoGNbvbWW5ySqp6Nul8uC5974d2mUzrrddNsU0niv71L
+TdG0nvjmOtD57FTJE8/vUsAC1ElfhbzRZU4a3FGFZGgvVVldm6QZoO66SgmHHQNp
+SKNB5Bc1eW6JdarN2UsCOzdd8hrdrnyx/6sRYAXHgCsXp8sFyFwjK+gq9cIgevDl
+cnuSA0DwoH/13Mayk1RG9JkLZL0XaQZeFUcPfg4pyoFMqi5RlyoBjgNstA1yF901
+ofQO0gU6sm4MCKFit5UOw6ROqetEip6srGDGuCiE3p8brM+lWQmfhVKJkKgsofXu
+BAyliFge7KYk6w+vPneRJ9emNWODd5bGvYwFA0sBUnKCslEi3OGgpE8dZVpSmQ0J
+/g/qzn1Ah6klK+Y417godD6GEKcEmRaFlnXT0OtWmO7ohwwNkumWz2ftvCJkPlhd
+9ukY4dV9cFsa+2i8zymvt0H0XBUqN4lOOyPwrkPNZUzYb/fQYWsl4zgiHwJgVahb
+18XLHcfKhWI1StEJ1ppOQ4zWU3Z20LSpi2VaKItN0lSTKYy8GVXXu13ZA9D2kmxF
+nTovpuh6aVE1sksEF29+wj7Ea4O0jan/wS4dDlaX8yYa7XVBc1u0CHzhsyjpjUUi
+F+yP2Ui3ZIc25FYhYaKLIuf2dbrjxPFQr4qh28LuCVXSYVtKAO2y8HnQ4zLFVJUG
+OLJb0nhYeegvsgKSi5dsvW2+MILuzyNHsBIOgXZQabaDEGhcBWpncwiVjyT1VfYQ
+aFBiBuShEIE3HlIvg9jSnFzyJJ/eg4Y6YWN7yB1GamuycUlzyjHWS9omUzVGahJa
+TFSs/l2Nvpe/FyRd2nAutq1702SDA29Jet+pvWbDuoLct66Ko/uilV1W/yLLGGo/
+mt168zpe9Vt+pz8MpZ++PXz913/13/7pb29OlAoLxMvUkT6QgtyepxlL8v9WJzyL
+yP2+f9Xp55kI1+jSl8m+Bk12TjBdWe2gkRJlhj+nDNBhxWdaouwLCN+jk8G99BFA
+u3y4UhRQWeqPAJ/DSE+NJKxPlDQdaElTI9LD6aTykax8hNtnmgA/9T3Ue2784Ovk
+HMWpFqUSYkfa1EzMNGB4duIPOfinHrbslsF5HUsaqSDSOMpSN9oEqjbTnw2F3/79
+3//dX//D3//dG/Y8BsprNDsvt5Z6LHsOyztpGI0NkcmHvcHzsfDwwCCbQfXHA2J1
+tlske5T3Ii84O5c6OmHKqWlIK8KUyKhNnVW8d99NibJABxFLxkrnHoAUC0lSw8zK
+IauRT3p+Rkbbxsj1Vi0MMbGNAsAv9OeD4eGLwIFkmOVWC5bcF5po9ioDmkcRnVVZ
+rMVpnoyGh6dlDUbYLTvaAhNjn25dglJOiwfPhmfD4eE2bWQAQa6S9HYjy/kR7l5k
+Hxes8c1YMiJb7PloeNAm0gVSTUtjoVnT8roFkoSP+HKRH4rTOVegDKwGFTalkAjb
+CB5mWCW/B7S2q+/ph4Z+RISg/p33U7ZIdvSa6qvGBSjdCtkBWWQyax0k6lOj9p/6
+HpDD2YsupquG+CGvOxsh5BwHaUta3NK2mE/Gwv3DwOlR3op1WvKhpU4aQFhpndTd
+zCdOdX/6jHyPjvoMZWxO3SpWCceB5trImkdVu191Ve0cL4bCR3KNoOHsvJPPqHy4
+WO1GjZCftW46XFxxyT2jFnUtd7azKRBJqiR1EpYsb/tOOvHL71WSkSEHoVqL6yDs
+EoLENMAaSU0SgNKsHggoWo5lgMJfDIX37yGVAOJUHYOpHUrRnjwVSN+tBOOduu69
+beGVULhZpHaM1cpIy9dIxZisUpGGulfb17Oh8N+jSeEvbgof4ZX0JnuRSKYGapNZ
+pu4Jz8w9KIN/NXV5LhYeHjjBW4V0XkeMpmUd3IN/5kqH1HM0lNmuxvbqO/8dAM7Q
+cuF9yzpoQEYkImmGXMH8njG2QK2Rvdzas1deTZbMjSYZs/rNYpBIQgFnKKWrofPp
+YHj4IoUXNLy2KgjYQIOOFreSiVd2zwxeIx0xPpsYHp42PBlhacS9SzqwSqJM8rp2
+SAhkz2fD4VHKCRQMbkvSmGjsLgOXnaEo1K2y8ZLzNfDl+XB4PJrvxZDkw+H0Nat1
+JlKRJETshAxkDtOTBSqrcoQ0qMoGFA9ysGpy0X1tX16uiEDcUbyi1gu37WYy5aUP
+MK+3cdi0SSFbIFhdY9NBZpLPz4fDwxfRtIqZFVYaNaYmxcLkpA+3QMGrmTAoGyza
+k+Hw8DQfpJ9Lzt7SH4FqteBHrGEOSdKU9Vo4vEedeL/4b+kNNAYkV8NWdfKa5TtR
+qID4RGJ5NRw+mgrkGSnhvSRDgw32dlH66bH54mTeVrSOsgrKS90nal4VVWbj71Vz
+a062yjWU3TQSBqCArBdeD+DadkFRl0RPxVOpcFAW+b4PG4+e9VpeDYcPIpY0UOkt
+AayOqwSvhbeAgr3EsCoMHwTkZ3gpHD7OKD1oubRADoQZ7T6ilUJp95qLXt18Phz+
+jJJbP/0nltz66c8tufXTn01y66f/H5JbP/1nltz66c8uufXTn09y66dfjhW/nTa8
+jcKZKhlItYGydVtOoFhWWo2eRjYJs3qqfZ+nl/lbDzuuv1fewfLbdVk1W+ErwflA
+lKQpydMG8nDK0FFbs2SzoQJZX9cC7MhdmjNK6kZeIv/dBjUtZ3nnzp6XSXL+W2pN
+1DU+nDYu42qSuIFJ5/fyt75EDaQV8mncujqYBVgn2Ru2unU9SA//6Ms8uezfepJk
+xoAqa/Hpg75Z3lQwXY3sCZxMJ5f/Tg2LTWDgxLrAJnl6aYJHLwsniJL8KqWMAhU8
+vey3DzFGhU5NWUVD+wB20BiMDH6+twmlbUibug+ldivf+WqA6h6qoftXDSaPKURn
+ZAQY5Mgc4Z6O8F+WnEHZKUAA+X8JjVKJwKNrWruC2xDYcXq5bz984wWRSwBsQdKy
+EkKP8pEMBUwQNNM8AFR9nFvm2yeQpIJON3XqShk6qlwj2da8q2NfnFze28E1QFg8
+VPnJfMJKulCT320ifbAEas/KILZ1enlvHyJm6zcxr4NrGyK4WoeVZWU31/BRxl5U
+Yi8LALWgElURuFN0QcvCNwn7wbsKi2g0qNBMml69TOqqUivX8ka+q10SuHXVQY6d
+UdPFkkr+1Pjg9z986RSRJkkw3od8SNjFMwYnm9QVC/tr20gRObe8t09YMNbOxu0Z
+EDT6LltKcxSgusOq3Z5c3pu5NTZEl5AdACgHaQy5RtUBsRjyKptDxhSNQnh6dW+e
+4YV/y9ZY5SSdmb6P5gHevhTLu1BZ4usEMJSU3aSAH0AhObvsAkC6eUJ5Ts/XbVmN
+vdaspNvADGaMVtIdiVdSrUxSQaFzRZhkD1ktPKua04t789khU9I8d9U1HiFgnwmo
+ZNUYAC8oGZwBN6rn1vZ2rrLJKb4BJmM2ooy+dAipGg5qlfjDuaW9l5OStE2Wrvms
+JAZe+l6zS/tGAlNNQnQGVOtOL+7dU2o3IGQv9Tf1achIMMJIAciwZc3Fky+kaz91
+/tK7Ovqtpjrq0q2nD2HGvf0uvdYETNSBeMkAMdPB/Fbl+fBGkRwH6zojMX84JQXH
+Q2xYp5f37tM3TQ7UqeY2V4kXZ6RcnRYxxmeFuNehCfh4boHvHiF7Wxi6SwSkW+Qb
+fqzTlVQncCiXz0Cv96P9txw02TB97dipfcautNT/xAuFn7CbfZbwUUnpOez1+LS+
+SpKdzqrwTZIrlUx3FrCcaVlyP4wkOiZbXqqmJrOJt1fdkN26jbUGL6uk7eo0AIZc
+fJeGnjM5AL+BWl0DxrLu07xwaPwgaRS5RbIjy9rnwNfjt4ABJjic63m2XolanUlT
+WwCRxjmyiXQHeW9PoK/HRwl8dRf5T4ZZppCFNRc1yDiyiFvPhMCjBq0sxkoaoiYS
+hR3AbZIWnGiHVihHkkUYpT0XAQ8PA+uxl4PGJBIrSF3ttiyWrlYDqbOyUtJwdaTK
+HsPVRKWUMRfwJJiybcrgHfC1pTrqZFEmshILqFEmesarlw4qBiZbVHIDf5Bzn+CZ
+hk6fRN8PX2IZ6Mp2lmIxcxm8HjVys3Mg97IZ2olqtJx7Yv0fnsRXmcmBinchq61G
+meutsTsoJdV+wt3kpx8KuzkXJXAYQlfcRrU+m6hpWOCZnEEKEF1KbC8s/8fDpI+v
+yduevYEts62TTMfdBEQEynJSz5xPtbS5K6TskCEVsfLacHuQ9sL0OuarxsLjKNWV
+5YVyS4PTgtEhQaHyT0ZO6GN7AP6GxW3S2Z7pheW/YZCxqZpvkEeSI/occG1dvC2S
+EDl0jhXt3k8v/42yV3bykQcx8DDWpnafQxs62yKpjaeW//3Y/q2OBUvq387paMj0
+VPgPhZRMWuNhdx5kLjKe3P6PT4NepKHTkKBh62qMVF2sOjEBkxv0nbXqKzV4A7jV
+a7QwuWmpABm4DGLbdaRZu0xQQ7OaRBqS6uRbwMqSuGTlRYEODewjgw8CWDpM3hvl
+2j0XAL94ZxDVqiNAuUo2om8lK9Ft4lQaBYW0WSV+9EQEPD4KipcT76z0KOeyHPOc
+QUMYTUILzjwTAo/CfvXw8qKQVVkrVicOKM5w9AN/sXmtapt4LgQen2YzSwXCrLLP
+IbCqeioo75k0X6vw94hSsRTdyuT5JhHz47qZ9KAh1DBDHRQI6cBUpzs6XW+Z0uVp
+wmoIZ6895DTnoAvZTBizzSukoOHD50Lgl+qRDQZhoxckSZJ53l2qPlSZKXErjZBO
+6+0TIfD4qA3AiRJB5ftlHV4d17rkGp1Ltb6fD4GPMBOkB2MHEul0MLciC0O+oe6H
+1J/qoyTWs3slBD6e1tdSY1ujxgxZ5IIGAigaQs2GmuEwbs0xaGJBd0Wk1iF8XyJs
+WeXeSVnZEJ7AQ9Aj5X9I/ku67Vm+JqVVzQ05gD4xdoy2S4/PETSAxN5fCYGbb9Fs
+7tNqAMN3KQVQxVLJsqmXMSH/1lOonoKBj48yzekod7P3C8DYSmt4bAmPaibenz2F
+e5D6C2ORVeQBqNspZZXg1A3j+6beAj6k0uH2+RLw8JxejTp/c4sSiyhWwvXrOHXt
+Lkm+fprq5GmQyDhNNzpdnn8uJ+i/TW2w6LPy9YkZ1yJYSJZisSzAdxut6G2z47NO
+a4/JKCP9C/6kW2JQ4fxJ+4PuogdjsBICf0uTuMO3Bv7k6ZJMlziWpc6cTPuP4pRt
+UoBlnWmAQM52gj6yAhOsbHlfJ5f6TvCPamqNmRHSlPlLUcWUEVBqbBGv+0yfKWX+
+9ELfPUUafOxPVijnNnlT4O8ePOsZpJc1XGe9ew7yJXBDnWTBD2iAUwu8i4cvrg5g
+R9Flw14mtl3BBhq06iL6kL3egUQS8AqD1EQdJtnKYdnP1U4v8702pW4FjvOixedb
+43jp4MkmeRK1ExNNZQ5zbpHvHiHRUUmAuw3LBjTyVTTd2XQWqNbp00v8ofnXQTyw
+uAAsdiMGyS9KPsx2+T4WMF1NTaqAT6zwx0MMMLGRHuwI6oRlJ+qS2/lNBpmZolxd
+iSQMU9gsLDVLJ+c3p3LF0sU9SZtO+gxyT6wgz2zZWpWgKTJ/0OxRkaWjunABvQNu
+YjK0z8xNBolPLPDHh087OyrdkuKlTqd917mBzjwaWFRVqRCcK55d348nHK7JkGdj
+Msms6Fam7Zyz4EwfJZ5c3jvBP6d2aV3CybqVVxhZbCdtxypz3FKb8ZvwPV+n756S
+pO2UQR1Hu0ap22qYJ0gr1NkqPZ+jd8iMDRMGiyzp0elCraijUnYkg4SSKrj1OJSn
+KrKLiflRfV+5HsMa7OIEaPJ+q74oTkqtxlEDztO0u09PBE6ng2A+lFp2as3qYJ3J
+FCO9iV6ADGufvBy7F6aMks+RL8ak/hBO0xLalXfAdwSenV3i2zN7ebjnPaj3tQIl
+vZOBODlxOAFevePZJK95folvn0K1VEMY4GivHYJsyqclWQcHOBtBTS0rmJ0kZR4H
+FCwAyAIfzW6hAgpGa/IoWTV17dUEEF5uq8PISbwval6UP9JlQGAOU9bBvuDPUG/C
+E4ev96qRTscIM7LILfkpueYVYIebFO0l1lyP2+STTQ13j4BBRk1GOdetxr4NTwzy
+QC9kr9XOHr7eav41MVT2DDupAyZ4c8DWqRORLWuf1FszEzx8foVvxR1XiDrxcsCG
+riYBtvR2GX4KTtWUb8mWzdY9RLnououyAJACTKZ2CHeRassChwfD/4ESiAtQVIrS
+bgSaA98yKahKgLHbJhlOKC/fw0j34lyj0i8/fF583iFsPcOEflTpKJm8nBSfvJRc
+s+64T67v7fUJ8JCqU8lsztUt3dCm+ZAoryS7zl583gn+kQ0hJMF2EmZbhncmm8vl
+LaAmSmkoT7tGO9+2cvcUP5vTHtT1atXJh41HM7awc+FfVAm0OGcLe6FbjRJRs41M
+sPPWCRYcXO3HIx/t7iRNwJZS8xiWygjqlCiYC2IzVXi9F8Neq/z87XVIcH6B797R
+gFW2pqYKSgplq+tzx+yd8VbqvQRkXTWcXOHbRyQD3pBMjT0YNBHTAZcELxlv5tOd
+K496gkYCCobcPDTSSvjz3y7bnyExDA8o0nHlE5X4/jmkVbjSMakwikbBopdJVpBf
+D5grqwMpASwChb/JV0maLhpcylvu0fK1Z3dK8B6wJplrajrBSBJLBvQ5WX5ZoEI3
+VluQACkSk6/lJDB0wnl+me8/P7Dfe94UiC66NNpQ940UYcndZbPoliKqy6xzC/2g
+uwh3iaS0uI1MBLIFfahPj8AHoqz6iaX+tYm591uZW/HDmYd6RqIDB3XNjcAXqBNl
+JoknSGpm6pL0U+t/9uFA+zpJJq7JKcP06af0ZiT4Db4nT4Jv5NbTZEnQlgUlEhVS
+ktH8fdtNmCVnAMvwsKdV1WcH/5rRB7A8tdVan+TYbbPU0WQbvckeJDJ95891tZz9
+UoeUbiOMSwRg6FhoSs+Kj15mLiQjddKO9okG5bNPTsOAajTk03aPuVa9C10Rm0hO
+2uuq8PkarLBss5ZqZ4xpQ2qqlxTbcCTZAHaVGET8ZLvbiecCe3OWGTqZXt2lUrV3
+FKrNogPYvW78wetxUUvCyLaCr9RW75bZ28Vpt6y2DHVsliJZGRmbGfZdaFlK+hST
+QMBoRjbJQbinzeabjY2ZvNkXBs3XeJlAkJJLU9e1ekTz7JU0qJ4AIZsFmmUPxovi
+5Wu3a/UQGXgtKZ90C9adpZGcodpLFg2XZZp7XasNJfMabaDC5wwFyJqEarVosHzL
+XZpFMvbCZHOvEuJlXReOEYIxYXQtLQ05WC+7riHJNp3VwvhdPZxHQwWZ+7Ikys22
+ipIqKuoIKoYlG3IoSxDwrgmeZfiV1pOJ4VC3665qsk4yd6moxbKYC/PN3fciycUN
+P/RmUSu82hDgDyv77chGwB9ifI2Vrko599PeZLo99MpGPrzGdK8/dAAH15Zo/Guh
+dD+458jrQQY3XeKERULcSS6Uazc4QQZvF0jfqC9H0P1jJaObktvS0JMaHk9XxaFC
+qVgBRyWPQF7XwL6kf9QfMMJg5RdhlkoNuooyJCxdqZat2QjbDbyJqJlyb8tbBkzg
+adhKIgeVMHt3gpfVmvpy4Dyor869rVrqmja7ZCVSBXBEKr7sRMDQPThn7Gvxcv9M
+k8ZoRX4/dleQ3TaH6WAELPMh4rgoTG7KoWZ1yJ288Z59EuX1OXc+QNbNWpMiL+TM
+XRcrt7Bq615QUjazSMCPHWni0j8ZymIs3u1Sl52U7NpNku7NlmnLAXSdrhEnGchG
+SaFt9fGqDbTnQx1ChoJZV49puUkJ9BrCNFMGlVA/mdJsf1nA3Ap1qUE/6jxhbs2y
+Ku8F0YTAL5ogzZcRcynXRM3Ng3lhUliOS96TySV5FPJ8dbaz21q5KnTuxUG2l3gE
+ZdlSAwL5re8Zg2VPWnZqmWX0avaF0XP3+C3Xgzas737UaA2ETFTtuJspEx6bCA1w
+Q9MhTq/ZBOlX6c4+lNS3OgdX8FNC2DpL3wIVSeaAU81q0Mc2QE6xRIAiyUya5IRm
+pjaCfbyf1wXQvU7YonzKGDPqtlSdktA4J+GbJveMIjFkiRpcFEN3z6aKG7YISUAS
+M1PXLrqf5bVUaRaFK8LoY1Js1e10fQcRiJpGa3kZSYEbB/O1/LsVjomWS8LnY5CQ
+xBAkUQgCCfJwIes4v9sq1uogolKBgodHdzkcABaiSC2cD/qlcx3NCXl1IANKB6/L
+QlpW0DX3grtorGQfSou7RTuXlYin6004Wi5Tn5z6PSHcK1WNXmIz1hj1C5Db1pIO
+Ys/kHVfJliFcUqhuXiFwyhYfDnFZ7RYQIhukg2XAOuaiMLkVC/a6swnwU5meg3+3
+ZEFlfwRnLdlXSRKUT8nYn362TmI0QuSLpyjPSbqAeI8EgUvqpXB5sUMtNK9LzASI
+CZGUZXoYQSd0FprkRWFYCBj3SE6z7XnJb2zxMxJQKTvt6wHf2uAbyq8D21DUQGrX
+BcwtD6bApjnlyl0kV5uaDo3g3QB7qoZrGl3tlxSq+wfr1EzFmDxm5JXVeVUAvD3a
+ONx/rwqdB+nDkXTcPZvLEgVMk/xKTZh1VlcoIIlA6j5dFz33GT2Dc40GyxdUh4Vf
+kj9rcKaeZpRmQDUgrVrlGVrgsX0kfoubkk6kTqnxzLFaQYlpurCisnJpzcHbTaNg
+GJ1oTOmv7q6/lyZjYwpd1wa9LoDuvlbYpevIFYgYPcyQQDKtZpm6FPljtZqoGzZe
+FEMPRTK7BCguWTae6bB6A3SMfhhZ5VfPcR5G3GEio9TKC/f8TbohvNjQDLg8S0FM
+mhux1P1y/Dw8V10yPUyrhyz51lUWNVfyAiAPiJeHj7PW7njRrMOc2lBFIjE6KYTu
+dT/lDJ6zjmWNtdQ74kQeCyUfxjhhNGk3JgnZC2jYwy0+ztwrFO3lwHl8jyscL2vz
+CcHoK+n2eG0pl9RKMlwkw6ST1Jci5uGhEMYMJJbBqyPJSCugwVVXnyQ7W+ZVoXIr
+xc6PH9bJC3iyDoAYF/uU2neG2haN8+lU318XL3eHqyEkbUNvq/qp2qje+mY0+6xD
+iAAcBp3snUEwMGlA0LYJPuv5zxyQvqUKpb5XM7Q2JOrC5tLAbpAEkBoypY0ncRSp
+r0df4DetGAqci+m6oLn5UpakWUBiu6ojzAzf5HSWo44FQjkkuqyL214UObcFSz5m
+/MdOTcnIMIcXzD9ANkmyy18WPvfHgF1QWOKSDXa7rC/8JLBD3XYRVbKgtTFccAz4
+nedndgdEapLrSna6MEwSbpPuVR8Urj1NIs2mGNlOydkGvCmhEnpmb/aw95p4TNFk
+YL3JRL4rsvbuczk4WzflmJxR6W/8mnc+TKCqPOog9tlfGET3IvPURomoHzPOywC4
+1iGIUn2S/bN6bpKHCF4VR/dnkHaZ0CE3MarFzHSq5SArDUcJLfuaUPqQU0qHgUh1
+kiGTpF0qSSboyYYGGoJmjQXFvSqEPjxgulN7wwaVUHiWc8UPWaODf3wCNUOtupkA
+YXX9976k7TnbIQkL3RpNznZLfWYZYA1uGgc8iqvLLRAgFEYCI7mgvrcO8a+leM9r
+3LrGCrtfFDof4sdepxua4F1kcjh5B9/Ig7tRN112sroJ1ZcrQuZDmspCqbZtq8n5
+dGRQoE85GaLVu/ny5cM3pW2lxsAmdj1Ri30m3bnohoHUbK/cuoYbuafr4uXm4cU7
+tWkMtXtvf6gUy6ssqb3B5e6HVBkIo0mykS69mvh0fLBlNMbHBYG6HaiqTfbsRQZE
+kjgml0j/VVNnZqUgTRHP7+HtBmkSwHJGj7Ayd13Q3BLH0LbaBsCNdnudIje/tB0m
+6FWjkFa19jPjQ2efrEafMIdcvOzSyL9MrwikQDHxOVyWaR5AuWWDsiHUGGcOQQBn
+drUGygtEBQoFtT9tf2EE3T/f63os+2qq7FCDaQOApwaE6KwFDtdsQNFAYOEZOcXp
+lHupKV7/AHGB/7rJpwZVg4c3QDVCLeSrGXrrwnS9N7mhQTN6STpiJoZSYIXZHRcG
+0b1eL2SDZDfUsqM22z3DUalC7kuG9b61zHdfV8XR3cMh7GFVTdSkAPFpcmpVkYzO
+yHb9B4T9w0TzXjSq/fvvWZy/+M1v/8vf/Ne//Z9vxVm9LVDzeHxPqa1O4deWPb+e
+9nG/mE35YTfVqYdmP9VnHkaXUDrRsePwk8cV8AzYr1I2h/UyZZb7DgnSLA19epuh
+UF33wvxZHTk3yQF2pRfZHcfMn3bsQ9CxhQccjXPdaIytyQTOdwsT+7Fr8ck3uEh/
+YaivbZWi5qdhdIrpyJy6wZXGpu2/TrBOPTH6ZWCW1EH5OVMecpJX+561sFF+pBrz
+vUfdP6PufNiBZSEz6XcAAsBsoUa2Y46Q/iAD0fpsXNw/zQJfdGRKAiUCYpUlXAo1
+5HSI/WgiP1N9OpnC7e7bipoLIr+m5qTErt5RY3SElwjjZF0KXSIFR/ky1UbRQY0q
+FwDv0IAAxSwf9+ghJrueDYjHddkSGpQOabG2V9BSkzasrBj0kXIxjr+tpyLhcQfZ
+KH+hWslB8egDsYdahYOr8Y6eC4G/+kvrzNtNzy5sF+nghNIHGJBk7vzQ0UsEtjht
+LijvfjYAbp8VWDsP6GmUrJp0OQqMJfeZ0ayEoygKMM69wRHJw87gY00nubIdYQVr
+0IEvnxE+nDVTPeYuAYbkdVA+x4JwdNhzpubEI6fqfr7JbjatmX7sfvyZ79A0tW4t
+UDnrP6A3yj44ZMoM023n2bXC1E8t/u2DyF9zjxkWT8xQ8CnfHoriahTOFM2zS/+b
+f7LRmPezvgCBbG2zIjAlVoIY63Ijtp4Ma2TTR0jU51f/7nGypfbsnBF3XY0sA/z0
+ZATWnvArmmPrfjVwFeSYLDQrCNUXL/kK+U9teYCz99MXQZK8x1ChrvI2auJ/Azjk
+idZorVrv65ACSraBRFDgTM8HwN3X0GS09V7TUvzdZWkCSUzCVXn/Ti/JwRzmfDIG
+7p4FY7BD9slLPWPdyIOvZ6lu6R2k+UoYxLeHJNf4Thr71wIRXVHjO7y8JGXyKANG
+NT/H18Lg/XGOze80iBSyZS83vpU02Kwn7xvpKR6DElnDgAMIyVZrkZrBW08hkA9B
+DVlOYVlaQ026OsVGfn4iI6/RfJH2gogIVca1IFvRrLuAMHUDW8drYRA/lkYDt5qt
+F/6nPlkHtl1+sEUBMmXHyMf9gbDYJ58FuFYLPDQ8DaK6Sau8Sh7VFKL+R00I33vI
+cQHwThPbyFRJnW2YAJVaEkjgC/KmDo3Ntl13P5aI/syz7CByK3QlSgOssElLozKY
+pgbIabWPRwXtqbUKYklyj/yTm2MPzcBQmXYBrpRk9UkP5ZKycmPbgDKNXk4nnvSh
+ZUUMxCVMpEJpeCIFJD8bALffAawxRhle87QAFt5MheRrFmDFuTN/T7op8k+t/u2D
+NKVMSdaNjHwkQD4l1kls8FTeW3xu6f/HXwbv/+k3f/Pe1go30CTx1HDc0nUMGw9A
+5psZavOAX1NM87Or//C4JVFhq8OIDgRsavaWvmrV0a/uaK0uSSPwkF90JWxqvekB
+oh+Iet+haz3POrY6bgHHsEh4aJEMUtBAtFySY5KqAbjZmnzYT3mShNuDdbP+2QB4
++BrwD12vamo2297JSZS1JdEV6+WsDscCu6znwMDDs2arZEPdZeYog9ZC2qP0OI3b
+uLbaZ8PgG0JlYD3QpQziZf7U/MzVHJp3Bko8IFPyYNnm82v/y2cY3XoYSrtfmkZW
+1WeTmNk0A6ujHBvLMeAmqWdKvvsSc9L67UeZqCQ/QGAnDTZD6GwP8reAutQgXa1N
+dkKLLvDOQiIYKP6su848+9DlxacX/BsKYtGXak3MRY0DS4LkpHpjNpRNAziBYqXr
+50+u8i8f4DqQTv49mSIFngT0pNzlX5rHcKacWto/g6rz95/wH13T+fuf/BJF5+//
++Nf0nB9/7p9BzflXHvEfXcv5197OFUrOv/LzX9NxfvjBd5OyQzdKW3tCOo28b0sa
+mEVSBEAY3tThVV/3yXW9fwY8EtQc5RZlSY+lp3KsHYuc1Je8nGZVs3iT84SwjgNG
+1aAKO8KT6qpqa++NDzNhct672lhWNYhA44655eI0TjLJArqAzFMdAj468aOTC3v3
+2SVlBfWDa6VlYart6AXj/ZgcpIsrpSOzdzyzsncPKNJAoQrCeag8mjuzced62NjM
+ryOIn1/a2xHKEaPtkjEC7fDmy3DLt7xsHaAdgF3pJAf47tmlvX1GTlIC3k5SXamk
+r+5mUFRT+ZVFsSJSYXdk62Dh+s422Sbslf0MAzQ9d5f2gawM2LUazZF6iAuJ3CU7
+pnRIZU+QAFvbFN1VA8VsVas+W//s0t5NsfrmU+wafmZdnZE5nJnyWuk6zwPzA+1q
+PLVp7x6gm/5SfeVrqVuD8AcoTnL+rrnaWk8t7SEt9HZK964sNIfuLaQEoJInCfEi
+RZUqNXPpcEB3XK0nV/hbjyLRJBYhLLLl6Lvy3LDCoV3eiwmdlNxtKEX3YHX0LhLv
+51rs/T75/aY5fn0RBtmDJFcLiSQ+46GRGmrWncuWUhUAU5qWyTgIlFWTRpen18mF
+/tZXgOvtJTieNaDE7oU4RclV8dX4n9TLkUh29sx6f+s5ciaeqam5rKgtSXpA2U4y
+GIA2WHNq2W+FK+ARYKfsisbCtyxaivrbYSWZROE0ZhFt+LHa3688YjcJA0wnndoB
+0wMJQoVl5KtG+jmEtYZTF5om2G0rmWTNX8Cjdss7talTGnhKFc680KV362patZN1
+aozqFIM+s8HUJVLVzVg6VafFRSFbJ5f5TpEeliXnt+jzJIHsKWg/ddE3BPSCPS6f
+TT+zvLc/X8AHfkUsH8rQVT0NcgeT1KL6zE8t612JMYEqKJFg0CDUSrgFuBah99Ti
+akYnhc52Fi7fSW5EyeE3a7emJWIzyxLyjTc+bQ7TSiF9JXMQmAyvmGk4YlVd8IKm
+MqcrUms1VRJHfF4ysRTgkqlSN7Qwd7J/lPURGEu5Tj5fUPdIEvDlbJq+k/JQO2Mf
+ATxOwQK/UzBTlxOf4odYYmNJ2uLMst6J0BO08L6lbgJQmrxvS45BnRmtxJP191aj
+Qpq2UwPbLi4ytNTpIcxBbgQzSXa27mJqOrmqt09IrqSVdVU1IDNsIW+TlJkEbNmv
+EhtcxpekkYEmxfshK1WlWJmZmZkEJjsJmDRN3TPsEecj5DfLxF7XH9KDV4mJRd6J
+hCV13E4HuNUM0LlFvVUICVEj97mGmfm01k5plvq1s/dD6fJAQbGdWdObH89bni60
+SakCuvH3vl1LApSapWjufN19Pxx/o1lS1/TbSs0ss5m82vnKTKVZMjFVXmcDfu9n
+Cu/js8i/7N6kQzjXcmxLHfY8QAL6xWkKahurVqxDRQAQAGSmzkmFRYbcuh4iwywL
+7PBZqjVqlYAa6pxd0sEmWHB2CSU0D23RwvdWm9NQOWERnqm8j9+BUMrRSMc7q+t5
+HVrxJqrZPVVLgum8tWTn6dL7+CAYJOwAhJ4O54ABlCR1GL2cOpdrzyy97sbeDVWO
+uYY6dWeQImSbFAgRaGz21cGRFkwzfH5u3W8eJOJO5bWaFGfRk4uirNR9SVUGQYvE
+rrfUNOk9DI1Gjq45SMg+RSmSdIBQeQ0AFNwoTBlhut5iqBr6droSBbcpS2vzmdza
+YaqsW+8+Wn9u0W++gOaqbF/eSSc+O7XWiJJLV5P4XVSQnXS1/MSK3zzlWFV5zDqX
+pY5Rm3QNOrEbcvYxP7vT4/sT1iFhDWIvmxQ1HHA7Hae8NXW1WgZ5qYOLn9/pH88a
+Kbuc2Lmma+AMjN1gbm2s4NuCwanGysTGaIqYWt6lokrGlGjZJgMcLbudV0IO306j
+TIH9Wy2psIFsAWyGmDkc9pyRTTbhO60EQqofbabnd/rHd5jVDuCuU8uI7Ol2jVI/
+rbk0cs6k+Ent+wdTSJ95kF36YjJGAajqGq8bqQWraxyw/Qy5+nL58e7eI7ikATU4
+ubaUGVOXutXuvNVnaHVNZJ9a9/sHrc3+bFH2DXJwp4RX3zQ9PwA2cOKhSyWob9bB
++9hOJlEeKlOn17gloFzDpbqYFFSHLcM5I8XVqpyv2EEFSzdctRInFWrlDtfL5MB8
+3qxnFv3uC5DP25ZJk+U1NTC+Rlp8KLonrODZudQCM8fpFb97injmVJ/wkMsvUUXN
+UpqTJNYCCp5f7vd7jnft0O1526y4pkoAf8Gl5ezRIjQnqTLEyIvyz6z447O6kUUy
+TLfoIFJONrXBgb2GPNqAwZP/QY5lghIXZUbyKEvW1DpVJyHZ2Kb04TI/VkJojRx4
+aG8QA43wUSNbmLM3navpAqfMRm0ooGei1+VnFv0X3wHGJgXFngEWmjE01CJdly8z
++EQR8FuzvGzOrvsvFqaQaMGq6goOPnsh2yGdDzaDJwDOnWnfC/buIO/tqDPzLIxQ
+pLW3k0aFWYfYjeQyv7ZEnjnWvn+Kof5OA/oCklXn1TySpfMFhZ8Q4lQl27hjkzku
+5L7EFQfLN8meUxf9oLass+/cAvhcI81ADYgaO6zkopbcSdGAwIBvmxRwZzsuN2Ip
+QLp1drkfPj1YNmu+AG4k61mf3Eyp8Y91Vw2v8HRVrHrqcPv+EZJEJcPpnFjamWwP
+eGThzfM6qBnz1BLfyfUOI1ewY5hOLg8xquNW17o6Pk4UUjcLr+7srr57xgHDdpYT
+SpLcJD/ZyVScbSiFASvv4cNIWgNAKcgCQdaCKUTjHWSqQJTtHsF40maDxqXpJJgB
+JqdYG5W0HqG6EGvfDiTrNOsKcQJUd3eWiN2rShfPz9xd+N9AYtTTMAEFhFBQH0M7
+1JTLKZx294DdY9D0CF9MchZ97Ayb910cJZQfeQn/4id/KPVWgK3tmqrKUbI/celo
+rICOYX19GElI1FD76ZX9eIT3qalbcOgEvZJuQFUpNDl5FOsIVk3Iq7/c9TRXkfZe
+kcMcvygJkwwtIMhgPZI0Fe/x/CZwXbS6VgjqMwsrzTFbIaF3MD3LHXp1B2C24fTC
+3nz0ZXUOXOp2VIka4HxsLWCxnUuWDRKe9MC0c+v68fNho8H1LUsu4nQ3uVrE5aWk
+PpzuQ05dW9zpFw95FWzNBSVgDgyig097DwCg5JSo2WNgvrPXFncSwEm29NuZLPJs
+pYBceY6VpV/pWfzaqQtJLU58QUfa2JLpIx5S27w6lpqQy97bo+dbLmZZktqSGiFz
+g9xZ4S6bF692Qh2YubwgvHNJSf3stcXtZ5fpeDhUdTRa9/+oO7MeS5LjSv8iCb4v
+j9wwGogt9pCURpgXwVdpgCJGEPmgnz/ni6qsvDcrq/NGZDZAipt6ux4RZm52zN3s
+HJV9Rm6TVc0PVQ2C3aizaD+fagu4W4Db/6SHHrKomZa2HwT2imf8Q856zrS3soM1
+hLDLVJ1WZy4yYnZwtQjQqXKWfdfSm6SzO/Z2Ca4Z19bGR0kycYW5BEzS1KObwv6D
+8DatKgsVSPTpm51baUDoCMYN1V/6+2yZTEVGQ3QctL0NQcAoSKAvD01dH/D+KKYL
+AjG7pb0twK7EeNawt4KJ8u1Ka19z24PwuSpZeapkL1kfvmTnavOnKqfb32fCY8tn
+OPzr1nkIKQTM4dpeYz3e0/0qT6igczQ0pnftHsJA1K7Itm5lNq8SxXGj/Daz+U+v
+onAsINWYGGC3mmHp6pCTDpg6rHAivXxu9MjUqYu08XOGKcBcnLFoDcEklFIRPoaA
+TLt+QYrXtXVpp84MLBaVU8swDxJGi44rwjgHchdnjfuCC7ZxmRmAyVt5RGlLCKAs
+c/SQy8OY84e665R975cwhjMdATL4Y5HU7I6UhVamIpt7+4riTdaG24m0ZoT9OYA0
+rlrlYdsVjyAFVqLjkPFgkVlvyxWcXXePuezwlvaQCtuf9fTsqbSdKuC0IeNBKH4M
+j4e9A+0GAtIxMYGYEWrNwmmOU0jbGG5LoQtFQ1iWTBvZ0JEAWYrwGE0o+r0mIAZR
+nRBdeeSY5NT7uBkUxxPDkcPZCjFxl9XCYt8XTk4aIxJv3kOfWnQJp5TJzXpHWXNN
+1A8XPKBy/RrcB7jKF2sp4w2f0ef1qk2iKTFQiypfCQ+ixCxLDhM/xEueuBrcEFZQ
+tb785voKzE2r7tFR5ycsycoOKqsgGuDmenvYTQKNDMr7EJM6GDIPchB46UbpHjL2
+DmX9qHE7FbkFaFhtYU5vCkMgebirWftDHORL+SKMpuphcDmy4bU1Hu6HKpdJGdb/
+zf2qi+/3jaeLDY6QS1LBFHtY0cK7lofql6XAnsZHRJB7Hh8k/goaZikPYaN2kFAg
+t5EDfSCjdqjN58cEkRezpWZuVOHR0VFBvf32q2XOrfVvFWV6CnMMvu6j4XrLvsi2
+IRVummrwiHCNTV2QAElpwZdRaPsyY6pSc7uZquJqwCOzHEdXBf6OsvS7Ajz5Y+LI
+PdlbWBM9VbNRAoXMIx10MjFl5isO7ngufz4glNytm+BQQ+NHjlmLWXATc2UBHYEv
+9g2SuWd68AemE9G0kIPIb1rvTHbOETkDA6HZoG2dqhL2eBtqnFmUfjTVeNrrKvTm
+HqMplwhuOF9p8OZgUEYuU0+yw1g9bSSmLIcxEU2dKHjrtbPq0JMvl+wEdlHowFJd
+ke8SsJ6JGUOVhQY66yCYAnknM39vusqZlzGGDjqv5ALlUEcvbjMznxhjV0hBbW9O
+88bt65kVhccTX6a3rqq9HLRFqo3AiLuEla+5x/0aJRMf++SuTwU7LTEjtKmor92q
+cq7EhGJVuuoX96u52MxGYoVGqFZV3aXYICCgUTAMbcEdclCd6o9erCSosZRhg8IH
+FQ+x1ZB2ujaNnelQUBCKcb4jSzl8RFuJ+cOiGtgIFZTUMZuME5VAx1WHuH8L7VnG
+XObirFCeoBJhBVryq6IfqiHyTEHSfckTXpinpKy8qWzrOT2ckAIjaV8C+mHjYoT4
+1Y8//PL3NnydWtvMailhKS/qbQ7Wi5SiPM8oiCuW24E6drRXneDlemhqqJhtBkaR
+znCZdi0sOeXoNE5biLLGloyN3IoVD7GZU+5eycFF7EtTQhgCe0X7fO2qjYIq2jYI
+jCktMng+0YpQYgFvj5hmr3uXelyGXHWDl+8R5b4r0ubjE7C9w8RbyRmbUVlVFUmf
+No5LjvDNYiHkgWq8swhHqojQGytdteQYvTDXXOHlrKRjHiDvJav0tWACsmuupD/f
+YYaIzUYhPH/VE14sV9uB1Dhyg6c/uK3M17pN1i8VR7OpIjUZ7onioG6r23WB0c3Z
+/dH3PxBsycIM2bVqocSUM6hIFFRYJjGpEat+TvWqUJgWMWYaGoqS4smslx3hxWsw
+c9lRwOkq5o7jrQXdhl5gF1XRtDNZ197g5HpwLRTkelFFzM2korPSoqHTPLfQVInb
+97jB88gn3Dqxcx8igCl4HmGJh5oJkQTBluiDT2/rcT243EbnFwJ85+GrbiEopw4G
+PrS90kTbR8WHUUyYG8XA4hlA6kn/jeY1TJqfyY+bYiSSqEoquVWvJEYhH+m9HEVO
+Nbky9LY3Q/7ueqMuP5jvc4P4HA4EVBkK0AIVLSn/uY01qDoU6mmr0KTu9zvc4Ota
+i1IQhTRFbWHViYZfawJYHhGsWq65wf/49f/85x++8r7DxVXgeodtsykrK1iPrLjA
+EWo0+sYI3F31gdu1enNC2SPMEKLMo1STmDUXfAwChU7VZoUmlDYxOp5ChvwJwT6y
+78ozQKIY/XSrL0+v3Vx2NcfpBLQ1ipB0TqkSVTLhpmB2evxRkBppt3AZKN59r7BV
+8Pm06tIbTOe2CQMKygqlv95PcFel2jV8eLtQ9FuZX/WfgtoIECnGGPQaVq5WocO+
+ZPq7gV/oyjMCYXE3ZLGC83SvCoLYHLp2VWnZ2HzV9HeDuaXAnucQeo6TTmdGXPQB
+bThaeoxPyGCPKpDFIQhRQRWnysxWFKPapPfam6Tim2f1qvRh8Nc/1BmQ4AZBYEKZ
+JK8eF1xGqshN3AOWtGn8VdPfvoN3afcod4MlMIbCHZUTnl0lRTPgV/dyS3Mt/t8u
+JIfVHkmTnnVIcQ3HQ9CUB4cH+Ium/+O//p19yshw9u+mugr52U5nf1XlHZnu9SXU
+pSjrv3CFXjL9zVpNSH6hv9WVvSLAAuYy4XcuUBRGZ1Ax7BnQYFzfU5tvla0J8qDF
+MYPqMKRS4J6xUUXBKIxgaW8PYkZHXXbopwWRhKOcPKqquFzChPT91Mu7/vYdaAdb
+kKnSDC3o6rk/9JCFKjMPel19pMS5ZvqbhdB5d0zievrGVQTI5SHdsAHVydqumf53
+P/zhF799xphKvMEehbgVXIkVIC6IIdyMxkiDu02Vmm9Xrf9iuaxMwrwr49dOsG4b
+NzgZ0If0lhkjBhFsWlaVqGBB5/xuM3EnaJ2EthUvilde2C7QLJecc/rcq++QjnYI
+15UQQoXpTQiT3lMYrmxFSFup4TL8e/kaClK1lSScWqz8U74oFIIe9NrT5cIMRa3u
+2vZ/sRZn2oLEXP5xNlBJe7s1+RpwsI1rbvBjMF9ZgpeedjJy0pw2TzDRq6xdw2yv
+9JKh8Bmj93k5AtyuFVIQEuN6TsGdybTtosCMkg9N2qY5BRxmNiNcbwhBoeHYaPRo
+vu28+NMGBQrDHZBH6a/TMaFf0H+CwFd3CMUtPa/KyEJ/H5K8KHAzp3HVAW7fATZX
+4ZMI2WdI2hxcOWZnuKQiilnZH+rcS9a/XWi4ZSCC8ybK1sftvlAvI2vJaJWLx0E/
+CkKHr7SsyFlX5N0rx6FOyw3BzKaCMEKSsYU1Xbl8DnC7lmoVqFe1jxXlQzt45xTL
+YlWFt5FfVW7nVG/0iUgJrSJN4a4x2c+/nZD2tlUloTG5zYjj1BxSGu1A4LHpV3IU
+EHB65tShmTroR+B9SA+MYTzwDgOW+h6Aw87Qfrjlfn1vZSY52nE7JjCar9X/twvB
+8OlVqjivJ0dSnmvZNE1bpgc3Ltb+P6Yb5zok3eoynJuifBpz2DangyepD588xys1
+XDb9zVpb8V67XBWboz170wp79B0p1Tcj/5al82AwbTHuyEFeblzzZ8OYkYfuuQjr
+R1UHUCQoRSjHowGu+k+B3RvBlwZ7ndM6W5Vr7U6ZIKlaqkoMl01/8w60Bh/0S84U
+JSsP08mAgctlT1OLkWXQmr1m+puFnIBrPEiZ3ZrQBXjKXZU6qvpNq/2a6f9r/eU/
+zLdHTJBNwMOsWCsMGLVHJ6PHVp85tlGGALNx10u+11cts2uhCMOUa3u3NHYM1aCi
+tmPmfNqNIvifati9rKgcBNFEcjELOwglZmHg3ZQpBI1H5jJ7KW5ZeS0bHRE1uq4U
+3EKRxwgNcBywUlZ2UJl5OQm8/jYq8SGXRDvaC6tsl7sepKDXqIRdA9J3PrR4yTFe
+X7LWEJXXXNJHNAiCxzUjZPU0hOawrrnInxVevlkKXuLADKeqL/QTApfsQfUha8Gw
+AAOYPP+qh7y6qFVxQBdYofsbEiKZm8s6bYU4lOiXRVaxCqdw2JuCACD38voDWhSi
+gGOJHcwStIk2/UgtM5U7klClfg7d6khTyfxM7h6mahG8RH5Ser8ME199mRq1upwD
+C6nERVJeju3lzbJeoJHBMApwLXC8uqJg21T5GYrXW6+JZp9QcVdKR/vCPVw0vsKE
+kyey54AGeUXkBsRXLUfDyCpWJstNoHs/7g3friFIxSAvtziwULUG7eSGnyUHpqir
+HKEG6A0ETQX59qEtKQze6dBglJMDbBr6F+26zCIxWKGPr/Isjz2QooDe1kwGMBQR
+6HMWiBTgJas8bvxvn70GAafVqlnDJaHoxAHHZyU2VxUlFFcZ/60P2vrbBVRbCv5U
+VTdrQngLP1PUd6+2q65+HBL+bFREn/5mqYg+/bxURJ9+JiqiTz8/FdGnv10qok8/
+MxXRp5+LiujT95lwJmwiKg92otWp9Q7vcB+hOqLv7BlOdhPMSbverRHk3c56RicR
+fKnKU5lpyJq0w6DrlVkFdy0zt/T4KGMHlfAdUjebnLEBIZQ9AfUq0ngy4cpBJe4s
+nXPLxqMLXDiXzvWWzLAm2Aap0ljrpGHvnj0pFC4mSlTSjNrnLsRKlQd5uQZdLSqB
+ymBnLPvf91QILev3hCGKgAR9vKV1e5ycjaGi85xpb+f95fSdT6m0x708CHakRQAL
+gsDK5Hmr9q9nLXvb3ezg2EyRXCdr6pOoIKO0mPR32UqvN/kWJnjmIaIexkb27Zgt
+didArR1P64WgzApM1AaVb1G7SOlIlX1mphWWooSiqNBbTn6qVEIWJaSzO/auLd4m
+pW0l/GqVHfY0I7RVFIIdo3swX605m1+n7Hrz+0UIMDra2LcdbaveQ6wFMvzGdOi5
+3HpHcDQ5uqWB0nhiYt6jZpUHtDYsWj6ta6PbMs7a9XYNLkKNpesR3ejIEf502luw
+LuboHBTNgwSgTUhdYlReMvemjLamvmiGqBEt2a70UxVnfeRIxiYu22YU3GMiOu8t
+h3T61aWU5ZT7oCyqigdnDXvHwFWjcSUIdzAUkletSc6k7TUEMPEcfTvGNk5Z9nYB
+5RRHa3JOS+7SlY9aIsUqfW+uUk6Z9jUuo1g8aBhZ3dChvwkpOIPo2PbLVGW2gKL0
+Wfz02lLDd9XA2gUpl8Dll29pmV4gA1HeVbBQnFUtH9DnGUav24SJlNG6F2wyNA6U
+LhQ6WwtYVBEyOo7ZVJRH5qKVVxoTqar6Bm2d3nfBH20GfTrX00lDv0qS1YXzCDfB
+l6BHi2jTddhSkYibWgaNdBPP2Pu1deBk9XqZIMw46gr0k0Q5s1F6j8Kcp8x+N/pj
+5P6NAb1tVfyo/rBNiVEeILwK8zA8zS2Ek+a+W6JvVQsmpbArBDtGEWkGRWLbtqFa
+VVq1zI6UPF1cXomWg0HZTlFgJWUjFWvB1ADxlACHUCyTbWho0oYngytQzK3kOPZM
+quYplZm+VYE/Icg/Z+a7qbFiu6qcKbjOJ8EGuQ5iNso8GfmUtgXvzpj3jt+LSSvI
+ZhvNUZ4TxJi6/HdubbmTiPkOOSREiwCmMG1nFRApCrNWIbcN5zIKkfPLhfsJs97R
+GDITNWGgE+I3dA6qXjEWVcSDSdtRyAyBuLgOrgaGhqtwkQrvhAxgKIdIc/NJkICm
+A20X2RYigaBitqE2lzNK0ors2kY+L4VWZF4AZcacNOs97lS1MFTOZn0audze5Bkh
+QMtBlz+4sFSCnkLMt7+/tGk4PNDzN1sTLJfKAHXSspxWOrdbb/K6AGAUlhl1w9s7
+oICfK0Q5vd/aBCrZN0eJ7aRVbxmmYMVPKktLUimO9nXOfhs5TfEDgUlbjLCPFTyx
+sVsao01DyMgq8OnV2tgIKITAZcVGJw7SF4FhhidW03ZybQdv3CquqPDhSJiJe6a1
+lhL/SaPeYqok4JH9kGFn1q/66pVt6Z4TgEPHqqp2GW/Ikn7/54vdZSDj2MNWRhzb
+Qv1fvZZRaZ/L+bz7fNb19AaCfL62uWEBKgplqHCUPEaYrkN5MU0fw7UrmfebxRBG
+F8CaVC8xOTeFSyDRURkruBuFkksmm6UBWTsYSeYSPOJy0AkZTztRC0rIVjGRXpds
+aQXMst0Izzdh2q1tW3ONQ7YVgFDYFz6Emsu4eiX3fvMSfk50cSyXrYYr2BbQdBJg
+F5Qv8kO9ncDg+ez7zUqwqgb9nKtNeJK+QrN89HIAgXVv83nzf0uYpQevgnIlma0v
+reKjWhWUgwOs0WuhhT87f8X6L9fisACSPlQq3GgzKw0JdbUId0IpcALHGqbMKWcX
+BtC2AuPrL8etB9MHLyu2TvXUa+5OEVPldM2cZHoVBnZwlQh7IkM1KmyWIED1fDKo
+F/IV439DyMZdiiC8pbIBlybarvSYo6qgVe7wU28V9mnbv1woBoU1hDB7PjBxPYb4
+hT4SszbbXjX9M7GRo3VESH6W2iudxK4rA+rr1+pTmcqiwkszxOumjzdbxq2smOsU
+tLQ1qoNVRrsy9JWN4kAqjk1tQyyC/2VSc7lOT3CDmWxa6NC0x6s+LwPzpeiJOLqu
+tegXi0CLUwBToM+1KMe7qZgpO1kkK6wv100fbzbjYruHPjgNR4g59oyYh9deHKqk
+EUrZJVw0/Y1h0A2Ds1TJ1jftFJsV3OBxaEq+J49HjhU+N0N+dWEUXWvanR6xKGDU
+vYDssCYL/nrXMyreLlyx+91CKvwt50h2ZKeaWiEf0QgFSZW/YY8SNmw0qq9GNYbu
+WJ+o+FQUK/ygd2XT3It2+qL6Vlu5jISIzsrMruSlonpGWpdhsBZiUK0t5BBhTB12
+OHvF6HcvEGpEVkfuCQTXEqocTbFyRdWQ5eixPQbQTlv8bpXlVDl0zr76huRV8U1f
+J0RVk3pNn86b+47QqsuTfDV7xLZWhjbNbOGtqGCD5uVmflBYsVwx9z1zlsIhh57Z
+aI+ug7lMv82giiBWTKqch/I1pCktae/HuCbMAElRPhl4Or0CXnPN1IJQV+cwD+E0
+7WdV0wJXO9GvvRu6VHU0kIOAXuQyMOx8qa6+ewFqwmYY421JUSfIHoqBQ9WpP4jA
+aCNDgeW0ue9XqfB+GCUtuJdaUHijG3UerdilX4B0n5sen/LGZGyxqTjaXcFU8THT
+1xeiXTAQLV+YgvX7krlvFwJId+Z2ZavlvTXCXWxVQTTbewtpDW5os9Mf0WsYll3M
+Kymb1xJagY05pC7r1WP8lWvF6gT1qlWdK+MyrFBoEesur4ZGkNwBZaw9x96Xsvn9
+l+oKHlnprgg3GGV0KCWM7za2EJGi1B9M2f28uW9X2Ywc0JyjQi8H6FPzmEMF4Iqz
+CdOeN/fX/sanMIv4k+qMyvmrUcTaKuVDqFa5W1iIAtfoI16CcC/XWkjRKLsefYSC
+uKtFBi2nCmdrnF6qM8SliGzQs4yohyr76it27XOTm+qIyJyaKi+VY9BbdhlTsXWu
+Zg7q7Kmcp+CQwjReflCmouBE+VLlfbyUx1++g2FswjCKj/xb2PpE8DFEExq9g0oj
+LSJmfdruLxeKHvJxJAi9heNRL5ibqvwUo9BJ7OdN/7m58ekCbqFnulbiFBNiPIZ0
+AiNILSyagBuIqacrdr9byBojWKOUCmuNh9oR2UROqNxxJEYvyGC4xvnUFQqWrxCZ
+5MUkOg1FmTNTJSAz/EDIARF0FMXQlR3CtnnAgEQ3rpJAYPZM9tHPtQjZn7ti9LsX
+6HPC1gLdjeyKLl8Sxtw0OAie9CRP5cqtnLb43SrIDAdhw+3ApyPPZFJWVK9QDqV2
+xdxHQ+PTNp/IGMeRu+LjCj0gf8HktlItGtRQuMtAl+D63ULBF1UCc1t6DaeXg1FI
+TzR6j65DxBkC58Gto2LckVZQyFcYWPLICCxyAnWqZVRIcPtlk551KhvFvbmcgPbN
+C6wBPSwk/p6+6SIEt4nul8x9+wKdA4upL77ggatytxA5OVCJE0wW8A0uej/Pb/D7
+VY5uilH0Ch151xqa3iE4/YFQ1poXzJ1uvKmk4FTLmAMa1IAg/SiHxFtDjZ453x1t
+cJfMfbvQKCl7wvRGDMVZYCcsJPp1JnND67IKWqmu0SruuerUxg+Q9ZVChDmItaPH
+H1RxZ29mh7tKic7vHIeetUJSnoU6YEsyin6tZFhiTemXQvrdC+TYGkJr3h1yAVkp
+cAmvk5FMoI9RH44j3fPmvl2l9bHRL1t+KZuOXJleglBGNUc27Zy5X7BSJsEiC38U
+payqDMXCXr0+nHEd3k6TuX5vZyP5y1W0JdeKYSrr1R0zxEVoEHeVVkMBviK+SLkZ
+9AX15lt1osL8bFYQTsmlJgdVylYasAiuhAxPpMqLJGhXaENNW/gjyHmS3wc5hpmK
+tVvlk4HO7WSvyQtyUAUQhevAxargw4QBJGQFkTZWHi2ODhldOnXw8mKJkCmNB0Fv
+d1j39Udo8zI4B3PSKRPfcVP2ov3r1lS1IkRWjiGEqpidtbkpu4WCVrL57Bnr3RrN
+ydGFmdhgqo5iUdGncn5lOj6DstCSKfN2cOPl4o3jbFT7A5DSd4Xw/VDELF7xcsHW
+2bI2kIPRP4wBM3zaEOJ6rowG6jDAZJNW1RLu7MXI3bMvhQWkUXNX+hRspMmnVcFk
+zoi0N2asi062M8a9Zx9l/ravHSxaMkWO1FtZpcLjwYHaSdPe0F9qvwp6VQaVswJj
+y8fNQlJe4PBCSyAzFeZpyz4vIUCkIOxVNQs9qT6lG61U1VouFw4flRaUUW2A2xe2
+FXr7EdKefeVDGVy4m8Ew+hu6t1lhQN92rb2D8mGocEKEKB9odaytT9/rcQJVdyiu
+rHzasM+PnnqA9kNwz5meIWfpwmFklL5sWypSIDo09Zxdn3+/b5he1hJ0qEqYqtea
+gMXBn6nY3Pe5jpPbK1LlNbQNVAekFCrfsnWasjoCEkLBwlp8r7Mh+X4N0/ZUdTNo
+q1BmzMbBvaDnzzQI0b65nPGKSn0UtqDwHesvCDqOG42ETpIgsx5l0nNSK7yE8u4i
+/AzRhoX0hYNzVD0O7sGIdpYrW+HibMfJ7bOriIv0g2cBu0XLgQoaOMmMkspStEwb
+Lbt9rpfoTgXJNNhqhP8HGSpuM1RgFugpldLHuWD8kiER3ZpEG7bie9L+ym6pVLXT
+6tO6ZQ+BMDvPYqsXqwADp4s2H9ftgjqyTQa7jRzWahxZI6ogD5OB0XWhya9RK5qD
+nMUY+iOctiYduHBbeiXkJGBgc3VtuqC/blIVJsl1+W7mLPQsKYwqOoez52Evnz4p
+gg0vQOidggNqBB45vMHwSFB6GTupuD0Fol8ssTlaDRM9DQUC26DaVI2zOGhPimRv
+mvgUESFUUApvQ6lX4W5HVxlFU7XK3GHOTSWJSivzSIfRuXU5vRoq1GqA1mu1lM1i
+UIwC5WAz9VaRJUPfph0chCpp7c5uMJ2n/zNupKhwLcsr0Qr3pN5mtCrAGfLaY6sQ
+tMHUiKR4dYqx3rklXKpqS/XaA25w6n1KEXhXkVegje/a+PBw6o1Wmt3XtCxc+fLa
+txzjHIuk2UrUKjn04oyCWJdU9hYwZ1PICR/gKk/5vLQuqG9pvg6zMJpsyjFkr8Cj
+P6NdxnH0h3jJlyTZmraVaqIhsytFK9RtwYdBDpaHquJoOyvBCTSiUW5g/EbHIa3A
+lclenPd60pHyuIGxRdHXrmxhzxjWZvhvVCEpeyUFCjkaKuM03Cru5Ye4XB5mdVyC
+EEVIRdBW5eSwQy9geIUE0TbycgnZkff7xlMNjiR59JHCdCHRMQ3yDcJ1+hrWv8st
+vh7nvSCStNTFVbWBmfugsKwdxmq9u1V9mJx2sfJueaeHfGd13wOnod0CYG3fwvVB
+dkzctXF+JgcQVm4M69jJGbtRNuOPtiCwwmpEfxuiZKF+up2Yb8iK6Kqfh0r7DmOF
+fIOaYW9IJFHScdBPe5WI873R5DtvNSY145q1UlZz2TMW012+aXs3mv6DlWvN9/jN
+d5bWbglw6sWCgFcNiVmz0iZDUorO6SOS0N2CBulzBF/YnSp7Ytcfu2S1S6HPPGQQ
+GIn/mDx0tzT9jCoIjLCmvucqPaiCcy1aynPVDgoRAyK+GZJxbrdWIANqUZjRC3zU
+abh1U/5yzQzYYQSSzETRJKlqkLuYqHA5VH5uNBNhvS4matVZkVT+mEhz/0rBO3ox
+BLCaXVaPI8g10kQGVMlhCT9SKI39Adnofl2V2hk9aFyGy8qE/pEdjM3Suvwxkeep
+yimxIYXaujDSKGYV4cQea4TqYWZXO9V9+6iI8yRItiCJsfDWwxVguS6jr0IfdSjY
+0KAjHJiGCrC46Lqa+gITLWk/YRPRUytFQ+8ia2SjMsYFeEpRbFUxODLdFI4qKrbJ
+CHVGzNAiMilTzo+KNE8HALUqtAXDqTO0h9Bomp1DZg5jTB+c8EUvHxJhvnbwHIRg
+sxgj/5dlFoLSB78hHE0flJxu+L13dlt4oCK6eJxI7+EmYpH0VaPYwKx3XR+WmZ6X
+FlKaCqQL2hBlXtmRjlk5AXRFYeOieyNKQj8j96F6umKr8Mx0daqaLhEKSMO5lPIZ
+9NelVK8i9Rih3MuYQ4KpBDkXJFGBWkh+1LKLyXyYs9y8EpRXckYhMvR+Wz8G7Ieq
+Mp8IfWNxgylo8zE56aZe6I5m2gR/w9yrKSMgGh2F50mDr2Oa//zP8fp882/+RcEo
+mb//v3/696dx6uQ3LbQzKXiMLASgEmjZupKyzowQc3MD/r2TjRMrKVEopXmGKhSd
+Sh9p0FJ60Iu2lUOaqlA84Ff1Ef3PqNXECnP6qio3o1BKJnAY/cW64a+IBk22uhVW
+5BAJCcmWDh5jIYdAfOwzOBXXrubvdfWeeIOwt0OnayImz+WeALOH3BdehwjVwvbc
+Ab3mAyeW6TDTWtSaHP2RZiPm5I+Z7Q5rwzWTP4msQPmh4Nv20A6auYfkM8cqitxj
+LWaqzHLlqrmfxp9DQ/pxH12RqSxKpQ4bmdAw/NxKFVPFSKqTUVRk173yQHJoCwIt
+tNG9wnM3mSjmq7ZecB2mSstI8lCZXJMVbNJPozA6h37KQFhm6cG7auonXGTMmgVO
+0iR0H8rWStF6HsY1/Q+Mh7P4S2Z+0pJYNEJxmTKTAC7SuNCwjLyDj3GcNPG//vjb
+3/3+FyHaGy8CxHUYtQTBZlyquWgdVmGyFwIF1ns+5VinLf3qYpxQpc4RkLbc4vYC
+OjoVHAKMtGLDe9oDTR3T2jYFAseu21vt/NAhoHO5Zbp/+25rj50mPDXuEJxzPcgv
+tcP8qJSrsQqwuqjSRv/gDhkCgLMGf+0llky7lH/6HDF3kouS1WibotINRBpV7OmB
+z9n9tZVCCAtKZkyBoK+SHfNFfvaiVXy7bP4nqDEiumDJNi+shU5c62g7umKQFuOu
+zFTzHtN/MXtVIQk/iHDFEKwWjut2qKoPFT7VpI0DN5kZRpFLpac8nZZsKg3aa3KR
+lwRVmoICNDGovpvdKMcryzcheP2gE9o9hF2jqg+nQD4s0rte/5jr/R1m/1I/6zP4
+lYcq9454S8x0jkNMRFVkt6qj3dt0V03+1FqNqxsFWhVKKfag/6VpVWkEhmN3ztxf
+0cKPv/mnX/72d7/6xz+4lG6cKxp90nkwNGpvdJTN0y5wPiLqi3pHjGjKnrX+W+vO
+nraMajlvEK6VgYRs4XDaGSjdOBWpMynJFL8rTOyZPpiuysDrqzf0LvSpl/b+Qh18
+KAj7blCkVWFcs/4Xcg4OKwyMhlt16ZKbQ+aHcuFZZ3jrfWiBH1Cr1TpJm8HRPTcs
+pSsKbVYgd9jXpyovLzqOO09t1DFzGoLpQu2NC4Gx5ZQjfoSrfFmpCVgLCuSR4IAV
+YNcSa2s1GDIVCanEak4f4yZfwKxQANCAw9pVaRNl3ko1l1c2FLLZ2o9DAWsKnWQV
+8gq9AqLCiy67RLMcI+uLOwgjn6bFrK/NFWKoUIVWxQZ/dLKP0VV8oMkI9kDnSkVC
+/yAX+RI6lLtLjk0Vd1Ulq0IE5hyDBGNOMlcfZc4c3Qe4x5coIrBrIBX3NFYoE67i
+wnFVH5UzzUnX+OHHXwkZpF//4WvO6FyEVx4ZygvHlHiDig9paLT/PHWrO+sOL9dR
+5W1803toSzE1aIx+WrkJbRMF9xTgY6+cbxsBLzdo3e+ZzdZVYQ0ZFSaTppKot8rV
+n3zAZMiUV0TzVI4xSitDniUDmQLBzw5mCFkdQfCsC7x8fuWiNtJsy0cIQuStMTfI
+sqewf6c0LUpk8xw4/MYYJiqyCS4F1cYOSnaHBliL3rYcZviIKHB/gFUVBbobhGaF
+NkMVo4B7jHonX3beA52Y0D4mGtyvXVT37bk4IEkGKhYh5V4V+5gw3/QMhLkSrAry
+wAmPI01daWXP7SAHSJAWd3J5cQK7JWWr/eAEguTLnbbkXQI0zFnRBVorAVTlHjTH
+VLznj4kK9++klRviBbv5jI6jnGIagIwSZCC6CQIJ6NYPiA4vJJH6prE6HbT9ivAB
+KA4ZZVX9NMK85jr/+xe//ad//uNXovZa5S+CFUJOtCFGpA1iHhw/GkVnKrovtHlX
+fOVuMQcDtQB4s4VuCxhF5CihJrlK5vZoT33cYuQNqm6QOerOK2dE1VJtQF2p2qqq
+UrD6JxEtg+A82Olb6HQlC3s3xSDnnVIhwwZD2CJ1iAcEVupl57h7idrioVW9VeSp
+/C20y+eduqAZ/CXad4pgsZRL3nC3Us5Kky3AuzJVGWcLB7wCICcWsMS/y/zPMMXp
+hRZJd0EUqyIgREbXi2E2nHvtQ15193e6wPOC28JYGIxXvSeDh6lE72OC0WchMqlN
+LyMa15n27PGYwVPwHBwNbgYavTZfRI0jwpXOgytfqEQxYQutHtKACiZ9ZGimlIlm
+pLOnQEvMHdQ73eCmyKwHdUCDNmNxbC6XhfwnTNVFdVV6KZa8+z2ucPPZslW9DEqa
+emcB2GO6pmd9zE2bw7vc4UUUV/aFjU6FnzJ446SUqXR9Rsi8jSuQiLv0Xpd4cf9p
+Ri0qLZqCm6oqfU/Y0lr3MuQeG75iNIvGWCFYDm4tIyfwDKMzgqRisUoEZgN1EF0u
+nskTW5Rs6G5HpdUxG5A6vO1wgAh/jggDIlxc73SLF5dIxWvdGbNCmkCltrGZqANO
+qC3IXpa+Wjff4xovpAh7VWku/G2h9K+qwRUztGhux5FjvwApQ/nVM1Zq0DSMQrcf
+bf1pM8KYhMSMDDFKmcLKrYVLmPJ2oeBV1GYMpjpipqxdVJn2rZGz5cglLuNinGxD
+aSt0Bb2AQO2Uk9KkDsWtSaYjSTfRxnI0Pk50O7UZLXMNqi4mpI6qNGH10k8oDQWF
+8uT3JVB5+wJGn2Ntzq+pI2acfRw0XyxpTGrVC8mWNc+jyttVYABxE1Q5OSSgMy9a
+iGxWLU3B8py5b1DIM1VqEWAc3tDUzG0ksunOKhNta5aD5RbIvutZi7+2lp3WWg+X
+i1L1ggsRKjxVRjK8yuck/7WcDTsH4SG61ptrjb5jcUr5qm5KYQyxJf0/QpxZST8p
+Ki45KcKrggrIqEwIHl1uRgDdKwh0pQ3YJdZZo7/2DopZfufVh63lYOkUWLMoWG7r
+VckKYe3GcPwpu7+6UIHm0QpyymkdhVOFMkppSMHFf6fj+cEVbpJbXsq7KrOWtn1L
+SJUW55pAfPUMg6FQ13pv7zP/zZWSMjTcxlElN3P9KSsQ0MCnBWukOYaRdkUFfdRq
+6YwzDmL+Rt/Wsa+dNvCQ76+0rUCFMED0k+OIWGuoQmZNHyvD9zRRFq8H1ybHQc2v
+ON7nAjfH52E1ONmd1U60HJHaLQeeJRoEeI7iyHznOvr0YnpwQU/tga1iOqNJJSzn
+lf0EULOq5cuu8HxS4eBDNYCBhXZ98iHkuj09Ur0oMECIK1u8ww2+rrUQ71HGnohX
+eCWwNdmiUGQ4apKC/GfoKhi4Nmo9IWwYo2Gc0KMxqBfvDSWMAT1E7TM1PWg6puER
+PCAyDMRy3DBQj7pDHpgJVEgSwztc4Os7tGl7qcLOC5LWAi+Ko6OyHedgq1YuzFOf
+V83//LEg20FSJyuDTQiRtD1Ub/um3Tp3eI/pnx3sUI7xg470upW59ojKrssgT0qV
+77wNVsZ6n/lvHHraYejMz2m4PunSVExVxb04JmxcOSnnGSGqakpPHDFrO4Vuuecb
+dnvBhdJhkogTTzEJ4dhp0UNUnBc4dGv44/wRxD5RWkVLoiJbkId5nwvcfDe4VVWn
+DQWC6TzSMRD6ecZdFMlGF26R2/V3uMHzYiUMxbxc82RIYCbP2wgfCNbYXPrJQvFH
+lV7mK84osNJyraNn9luRVF8f8hLtoQoTblJlvRXqzjrA/Srwmis7c/Tg4GjYYR7K
+wvpDi3gZfQMylYBhK5mkAKzapTjmrapLIQnww1FB/uVHhBaMEogqCJ/ihIfEVYRW
+vUMqTPlE7us3mrmFa+ezZr9/+gml3N7Vqvp0zveYnJDHgc5q4wpqNzozzx0Q3S+h
+4kY4dSvrh4MHF4KFSB9fjYPS54KJf//rXz79uD4WHD0xM+KXszb6WstHVKbjVnrM
+OVk3/SUbPy9jtzb0rC0qZyk6a7e6HQrJu4PLRlu0BSlvK0y75Fohhm+uOlNmsDuO
+SYLInH90OGF6E8SWb0RGpCDzlO/ko6VV2zzQwOeTQIvqY7mIi5eM/Pz4vk0/DTU4
+zKWhyfMzglqZS1JUGAbsZract/LzGqZykbqZLtFfsM2qIhHsLZXbG2dOdgj9+MOP
+P/7q68Gssp0wwhQeQfwzwWLXY67wXlalcIBeWudtfLPGZiI8hKh/ee5NaOaBP9Cg
+TWKbQomA+WJqvrVtLKQ1piVagJeZy0KtFvUYTgHcBVrKducyUVsfJim6DRUKchwh
+KBAxNuDklxb/mMK+9ryBb5/9OJWKpVrOCxtqyalCh2EFSGODmUiYYp0L2HcGyAhz
+ZYZraU0II8IqtTrCTEpqJ/sEfv/L8lw8edWycv8CK7bjAh/Sn6UqWbAHpmLlBJTt
+z5r2do0CuTHcrbHDm6maexcAej5mzLWJEzPiENIoyw5Zq+lJVJ2UqO+nlHcMsChI
+yi30cA018rC2UnSVVzQ4db23nPgmH4u+T5qLnvdMz5ct5XRevn32nuR/ekCjiimh
+mDmEF1SSKaMMDkmWKQyD2FOmvV3A0UYrT1WwTFv1HoyUwfaAVCzqUedMe3cGPOMK
+BSq8MQqEZLQ4xMDEUdAX9oPbQyHA0ydxLw6ap1+zBUTn6OWxjnE2GaiMJOSUITtP
+LvtAO+9QLKY92RrZR5vOrkMOwxZTuSqYEz6cydEkytx57ZD1b8som5x9wvgnxKh/
+JhmIvaagylnj3j28/CvJh4ZRTGuGEbMGFwTYsIcmnFpLbGafs+79CipIhH4O1DPk
+PQpAviE9v4QuTbeXzHtzrmsMDDIHcZASjOqYqo0UVHuXvuWXyTI3YNpFE99gUpWg
+Kn+3V/zlDlaROXbVoha5kR2N9jaaVl6bhH7R4r2isoemb8hgDtCF5BCzUgumZBXc
+tslBuxDW0GPTvJvpUtrCOzUF4c+tSNHHym34ai+a+aY4sKEYpDiLMtdxUTHWRupZ
+WzimnmQkhNr6FVPffCZUMQ8FSyskNOdWhevtigWmPsHHc+Zef25/aS/AXDQqaGNI
+ynMN9cWCjKvAUVDVcgzLWIXysE63a7y21i5jcondG4NvQRhb9Y/CUl89+M41m4cb
+ttdofMnZNoS7o7w7hg0PTaI2TnbIVbI1fQknQsJS+1KUljmsNcdo8ChHzZEg8Re8
+KwES/+FPG/21dxh7K1dmbqWW4EH1va89gsL2PNiIFNqTwtG5mvq1hWbmbrIxhFEd
+cNWokNbWlJPHaNpJ+HUIUN0vYIfgS/NCYgaR70OG5gA9jhuxotiulXc+Hc5fWapW
+5YuqXSsUr12hwOyUlM1iGgwc5gSiOhOPii9RJhe65VwXcaGN8fpcRpEeujYVL9rk
+ql6HbxBhZqH2RcJQuR2dSY2xSblGtIkMaLOQ3+lz9FdewcFTnGfrh8bhgkR+E202
+nQHNMOU0bDTn2nJeWUeBg1unFpfNMywFlTgUYDrExMzaXjX7Te3AeA3tDYqy0zt6
+zfOGMUEo1gqKO6FbGCKv2/15rZGD0mGuyuMKu5kRFZ+opUvRIygEtDoU2loX/qbB
+EwrMxjurstnaw4eaeoKWT5BGqc7RPIfi+aDHsaj810e3YR+EW3p0o+1H4Ztq7W6Z
+et3wz+8wO7qkskWDLzRNg4ZoroFmsWVWKuYQjUsXLf+8UFJIGUmVhdIcJPbKWcYo
+JMagClvJ5VHT7z9/p/3HM4+7I4fMI2oPIn/IDaVisKf9zfnG8P2JXqzvLrUY3K5o
+hatc2fRYuSFsWwODZSq6JtLwHHoH4g/dmxBQKd/HxqgAjPjzUBCri1mmgUhBAOfQ
+XZNC1t8ozKakaPTpI7qUSgspWgQ3VLqfwOjffQVaTqdv28GUNEocNGENVAyYe681
+IYObHj42++460NKmqBI1taUCkhJG380haVBbNOaa2W/v56COdjKFhbmhopSQ5tSr
+xe453FDYdBPgd9Xut2shBcNxl6/MZDD9TedMMWuMhIkp0dBiikx5erqvFjm7w6qt
+nDBzQXmvz170lQM1Ou34+lvDMdvA2PVSTQMI1SfS/igucC0j3LdX2+mq4e/ul7kX
+39QVios0u48O7beiflG5iCCZj0guX7L87UIN4Q8BCu6EVT5NG5TEciMQq06w67Tp
+X0CIyJ0fYk/aOhkyg0MDyMCOv2zpDYW5/F3F8McXouXXeZjyGQx3io9cjMqPA3/K
+luWmlXtHOu/bQNxxQLivjLlGP3h5mXPaS76x22KmH+lSS2Oq/gzwRz84iipkuayF
+yCJbX2jJdQLIbVww+v0LoK81IA/Vs09BU0TCuJFBwFGxt4GN4d4+a/H7VTxKKx0A
+LBQRWzHa7IKy2ymRjTz3NXPfnJ22qBq2QInJ/CNATngl8pHkZqvhy8mlcNXeN8en
+UVBublqhlM0FzwGMqrT0CZUlK9fzMPNpT6rc9tGPQ4RMruEQg97cgNMe0aBT4gBw
+6J91PuufRdsSGQ4SuH6xxK5KUVDI6b+YTjQutu+y+Z14gzlWz7mMzPQoGTZXPa9g
+RLFWhVWWq5FJrln8BmyhZJSis1xMOERyCw1MzYztRjbltMlvz3pWi9MdUzEDtmvV
+RcbBxkxWWqiwej/p779g77vzNmFseW4LwicqSlIPXWh89GqWMMQuTkAN+t0w93Fc
+z113V7Htt4GfTKCjIOUaUQJQ7ceudopFjSF/ZfIU+MNJx90Usi9KS/ImkwUQSxFM
+uLK7bx+/Kq7QAR5xQ4/wS5yqEdvR2D25j+2djXPW0nfHekGmiPIfow+inMTxO7ht
+xR6qtsdbZv5gndef+OW/Un3Xn3ji9+i6/sTPXtJz/eb3Pk7H9ad++q9Uv/Unv8Y7
+dFt/6ncv6bW+/MF7Crg8Dk0NLkCoJlVJWH1oVRh2l12L2avo70gP2u3ut021kAUZ
+mvNrm0Ho1urHu1kVgkv0X0uqfRxn2Lly+N8YN2Ggvap21k6n54zZ/FGKgymm0QOd
+NxIGijG0/Sq3K4wqpQqrCOIb7WBfBF7qftRwd88c+mQWnbvEJRPWSSTvxWNFYTIu
+eEL0MT9iubsfll8ps6O+YAQAFXvhgRRy9GAfZCMfMt2tFFnVjpoejL54TkUqU9Mh
+cSvABt+GqkSBxvCo6W5/2yIIEzHdCsaUpvqplyNSGrgBqnaisp6KRLYVHNTKAQLc
+8pSZd1qLLrHWLeoCUJjQQAaYMUslnvC+80lbs+alF1jVgtQb1FnKGtGX8MjY4bfP
+LFRRutKtCglVKt5B1R6byzRjLFrzgqEpuT9kujudYcF5k/NQ9aOkr7ii4MEB29A+
+4XDyMdPdSn0qLloZvc1l5NYzGfiJqpLnPG7ujBLSEiZ4NMPd65QqEHuzheCiPxQW
+XfRNCMQpNXvhzqTvQkd/U5XHqXFU6SI0uoxvcFfVwLCuGYmCBkKJRRO3ZwDARicA
+T2sClxH+oMJq2r6b64sR0Q2b1T9quttn1iujGLn1w/IVwcTCWMFmThhFzw7vsJ7n
+MdPdCc52yG6EeBQW6Fae1TKLXhCLbgo/j5nunlJRxYt8mml8TkQGtYw2tttruyo8
+oSqnMVpnHzXeC07IukE3cSpUcB7gVXQLSUFCqTyoPR6OaRczYqqDttuRlMg2cmIu
+mkMeZGyBbcXdjh6M25PDR9q1ehXsXDNZQVbirmH4kDNm7W9hH6NMaR823/1TZy3A
+oXZ2vfC1Fc3bFHxqSX9agKDNCivefsiA9z/tZ9sWRQ+GAaMQdtV2VMrIRilVePkh
+Ex5c409sEU/UmIFeno4wU1cYratzoaKKLCXlmAyOEUKM/UE7vrYEumtWtaBymKMc
+KbYUpqq4g4WbZazJCb9t8h5UtlpVmRAtxKUmaOuh46SyIiff6K9QCO1CgCsaZaeA
+CAUXLhxplGlsV1LxQ3mv66+VwYn5g8Z8/evkjHCMHmo5J4dDiySYuZzCv/aQ/kWZ
+Eh+x6Gu/T9NylFNAlm7LNqg5Cs1EgDKCNA+Z9TbBpmSE+FZmA+kTCBDBjhFhH1Ad
+pYJCT1/0fR805+1PyyOQUBMIFZY/TqhVPak+j3JzbSnFGNugs+MsM9OaadArQDkb
+VNPSwQAvlM5E7s7Z227noWntyLLTNLlJ5Bh6Mjcls0enNO4jSpxDnvigGW8fuYVk
+DhpIj5fjap5he4HE7fQvT6OXFbx6xHx3ir/CswMxkjbgEQrWyfOaMapmmbHxD5nt
+NrkKCjWO/he9mQnFeuc58GJeLKguU+SXk5dHo+mdFmwCYHFDSXuaUrY+QyN+qBzx
+ZWzapWPGi5f+ktX2CUVFuGMbQe5bt6+KlRTkquGzRZFwcG6PmwYEbyenyn4tNziD
+gFRQiH8V+qS1hx802+0jK8FWlSPOKPOurYgUFVADMqzCM57DjVDQ/nnEbLe/e7QE
+NeTASle+iHrbneM+GBFRYHvIbDeaqXJwdCS5Jh3o0uoL0YwhwO95UPp6qx7VP2i1
+m18+BCcBK4Lhx2SQT+xpRcTtFCNnVuGkpAt/uosLJaFuGELfDCssjlpkRFXJ2q2T
+LKzCTmlC5XnLyJ8qT3FG5JRJhFgtFJ2zcX3p4zKUZQ8a7eaJFdaU7/Turh2NxfJY
+Z+iI1JcZkFl4E+mifMRmNz8LNQfyrYqNkROzlGmezg0uZaGNx0z27+1Pz9oLK/e5
+VJJZ67Iw0BAsnFABVm9Vr3K1lCBAezTh3f22tgqCwarVutJZMqEJcFckLrOiPgfa
+IyQVC5ZzMNnvYMRS/a5w54rMglCQM7MoyaBbJIyahY49QpahqaobriEjgExCZgTb
+cHyaq/6p3ISH1oNmu3tmIWAuXnOB1qBBjNJUNjXGbZdFc171FNp6jxju7oeLhfQ8
+I8izhZ8hFEcKpArH0ZO5H4cs9+MmTwcizAHRBGtHCCr8Wui2ZmeysBZN21pnqo4N
+Z4DLqwsJ7DP3XTtTfiqKvVyS0i6rlEXyWRtMhvAqjmLVN8s0LVWhQMVFrkAK/LJr
+w/XM1NgQRnUMD5h4zETKsEhQawOjXQmrSGecta8KKZQKt34Gvrz+AtB7HKSJYS9Z
+mYFDbveP3uVFq6RFcaA9DGK+swoSbSkJ3iml5rzRG9kzGIUo4Td7AqE+kxw9RYGW
+9OQTmS+FuS2cHushBNNVkWWo5WiGbvYUSP1mFbeEWop2MA+vykBlnFJdQEMKHpZ4
+9OLMpNyREPaWuaHQG0X5uqB+oaSpCqQJwmzl8LDDgKZIbjj3LBzN++EFbrPSmtKQ
+dwGGZWVIAZ0eBY9P4dRvnl4Pxryl9a4wWQr1yTLGs63rAGojcKp4/DhU/WaJHnsT
+4gvV57Jt3q1QSha9c80z+f64iZ8vwJ8AkLCC60HpXhsXGZaR+qBtXgVZqXJe4LFg
+xRkLf7MIramyRaWXegaBH6ecotqSUqINJ1yurA2LlQCzUqNCS9GWDKpe6IhTtSzc
+L5yQkA5WmiicxWrr8Geyp59ihMUZVNkoEnk4vxI3GlsonNG7Mwb+5uHRKagMl48C
+w2JWutXzCS7KDFtb2qsc2ianh+37zQrK/0KcRQBBiVu/LVNHZRoOWfXfbzMHvvjp
+z7fcX8UpVbqOLcdnskL1paw50cPcjplIGMT9CJ/XOGXfu1Wgs+6bQkLb08JirFpe
+WUBvtQ+hnAi38XbWWJTNrJ30vbuoNKHCl4tASOQDgpnQYinexCH80lDvUeKFjFhI
+2i8YPnaFnt9qYxsl9AihWD5t4LunF5BD4bJ0NxRJEiJ72rIbFeMdzTazcm3f3DkL
+3y2h/LX9KMt+JiBMWRiD2ZfYuZYd+VJOTukZtm59Z/woZ3hHOtRJqroUlNC5Wmjq
+CpLaizn5eaHkuf5yQT4fo6GfcCvfmoBCpV7NJXnxoZBuPTM77SDsUQlvXONYXCUs
+Q9FKVDJoZFpKW1lIzKpA0HaCtE/VkJcDeXkMnfrmUJkJm77uWd3FnPz8As41A3vl
+hqhF5lZeVgk9fBKkz8YKeTXnkwtXcvLzKjkneuyYQRrNNkeRp3TDPdGSd52AYE9d
+DE/ffyhmQlJHQ4mwRRJuHEJCsAJRROjtVDGaU+H6xRIqOIeVnQVOxg5thKLCjZnZ
+gdCfCkI3VNErXlvl3YgOceVMjEYjl4Zeui1VdRMqVG9R/zZuVjQNkbIEYkeDNGBC
+tjjOED2HrAWSc+vtnuaMiV88uk0HMijGW4Vpgw6aiqvGnNNYRR9nQD2ZHk/FL36/
+BoBhqaozlqoDGse0WkD7QvgilZNmpVXhWdCyC5V2az5rKR6jdyNUZWFnBBydP26y
+7Gm73qyhnNMQ/qxeJZEXAtKXgYAZXkfDwe3KyIdA44hEc9CLwXyv/xcBWGXdKGPG
+Sme/8HSqi+O/2Gn7t9TAMTHBU45OwOC7trrK8aWE3hVep9mnDXvz7EoQyQovDI7B
+jLPRqsz1CjLL6EOVAsMYDN7nLHtrABto99XzbpJTqfS5CVQoPQq7zXDCtMew19di
+SdU/B2+REyAv0CksKxMIdhXBRLkm2lr5VLF0t0DJm0M677nfpMNQrljjhFB70cPT
+EgROkOU1RLYLissBfc4aaA8T3hPARs0B/Ru+bK78jXukhUooR7qwgOm/F+cdtinO
+b4GrYUpTmqmnjHr74FzJNzRI4d+ht5ChzYXekUP1GOLwoqS5Hrfo7a8rJTEeYtbR
+WVHlJ0KYfHpFANj+Hjfn51aTp4fmAtapvMjUuZaT0jW4celO0MU3p11TUj4Vfu8W
+MIMRKwEyS7PgFsoV5G8EWabvW0EHZlKTuYJa+nJFsC4p/gvx5oMRLtANhLGPU7ut
+kJsT52Xa1EUZIzOwJzAWilE53ASO6W+QQ44InD1jzrsHTyMDDbKbh/a3Ary3CKwp
+QoyejU+MCI3XJVrf/vVao22QW5kyWjL1kCbe3dORyPT24+b8Mubz9Ln1Y+tQWtq9
+tcKlg1GtdejvhmOfqISLbp6x5/0KQjQLDnC7D1nTxOm14dwXFtrYuU4anLq3nji+
+VABWAeZ7ZDrHQnCm0ljIxxhkgfMwc7VMkGpGUXvPpVofkSIhrQrPspItFPtKqH46
+IetT+/P+yWM4jsAmJ8GOq7SVDz2UXI0RSCs9T4ZlH0+m9z/PMLaJCjmp9bJCDU3I
+Jh2jY0FFwXqsB+he3tWjCZCRhdQu70IC2kbehEp5vlVbFXr5FQYebQO6//VY0jFm
+on2i8K0siroSYzwBMVnopXYvphnZSNVMbU0o3/UBIb+yi5tTmXAb7heswGCxG0JQ
+xA+W6gHPUa0cLit8ZJgWBIq0iZedykH0D/tHjylePHVHmdboi8CYU01Q5le6LFmx
+YyNySbcqFNYPNQO9+OnFqFJN8G2sjpQMqlVb71Tz9PUxOHSvcEtF1Dj1UwbuAXbp
+hFIxGnoKaqnA1dwe7ky4/20VdkhY511MZr6Vjj48JlVFzX1MGBt46euuqcNovF38
+fAilKmSHnlqMrTYroAejTFsIYoYVZteuFXirHYipnOu8wxF20H7ZdO8tRvkeNN/d
+M5edocjssprStfL3aAvZAuFrB/unUxoQnn6oH+juh7kYD50GzAAlzZh0GMVVFV+T
+duV80HTPOq0kRrpnlEeW/JWhljEzPfBe3twyUmTyisct9/zTedJsJnjsAuVPWtp6
+MffVBvrkm9iolKA6bgyH+IjKFm06FSEuwrpSi5BFlU9u6BGRZ+76eDEYFwZ0Nqki
+Jju2IE2HI8yGrV+T1SLXXavWhw33/MhjO5q4hK+bHlrfBWmtbYSnlYQZnzboYNj6
+mN2ef3chsztU69MyMJmN0GsyhZN9VxR6rK7875trHjl120eD/c5pqrBRFUkL6VIN
+rjqYYfa6H0+Atz9dZSTVC0K5wpzaF9q5+vyory2lpjGnbdYL8zVtwKQgbVapayMc
+oSIzBGtMg9skm6A6g2kEK5dX0Zug8toww2inES+jMmNoiFXybUdu9ehMe7SV5PYu
+bdgcrXw1z7lgqEAeWZm0VzdpKRb+KsxKP9RHcnuZljkQCUwOOyFoQTaOh1ojnSTF
+je+a7QvT49//x1/+9OmAtVZxUDUcBKihgv3RyVTYErZQDNPzt4mE+0+Y65ufLEIZ
+mXGrhJoDs8ehw50Ix061Cd0s1Yhch09fVMB4eR+6Dh6ixV4i5MAKnbmRzpTU0NtK
+QYFzmaQHzS35LY8yyY9xzARboSCV5BZ61/FTYfHlo9Zql+JJMGQaKEW6K5F5xKGa
+zRo9gMqdZL8bDV/+XuvaOZN/vCXFcHrlDQO5g+pYeOpNs/zp//3XOnBHjjGoQNpQ
+illOT+LyBMPdPKP7OxaBD9ceMMvTT05VGSqDIJDg1BnWJS94qP8MfYFwTOdzI1aH
+3FQgULgR4R3I0eippvtDH1eAVmV6hq/Bl9RgfW+FKxG6PsG4gzbebKD3oiNQZYWy
+XDOxPmCWp0dFiinWqvjvMg1uZaOplHoJypLdwgHvUQN/yyxPv9flUTksiPOWnqRy
+zFTjoK005zHWm2b5zz8fsXIcR+gtHqNvAtOMlXWjVC5E0VXdoizarHnAKJ9/ULk4
+kFIUhwCo0Jc0YSj4L5d+qTVt8nJQomldE5VFVVRb4Xha5JiazrIZqr+ZGXLhapWP
+iKA0zsoiTGFyRksTH8R3BhIDN5m/GzBHhvaAST4/qKrSrocrqOgGiL+Go8yrSvUq
+JgVclBm7AuVbBvn8a3LiupGTtdnLqYM/jhztoP1Nu3u/aY6//PdfPusjudRd2k4R
+vqy1euTk0HCjMlUtzphpX4qP2OPLL6q2tfrGeiSB5c5lcEwFlcjmSWDKBOY43qUH
+teuti7Db3BxgVnhykN5aOFpRwo+wImljoI1qBJcDWn6K9sdx9xA+llNrH5YkwBH1
+3kYh8AGDfHlS1HlU1AdhICUxFWltIAOtXWy94FZwMpWq0PiWRb78XAh6ePqK4UCn
+v0y/ZwWV5aGVc6xXTfLn//B/p/+s/vpU9K9+98OP//zH3/xrlnd+pQ6g0UH+o+3N
+7Lfwt5LYMQcy9ak6NyX6gN8DB+cXnC4iUdu0PXdmyJuRc2L8Zign0ekNLUp03NLM
+PGyIZjb5YqID1FghiRnDPsROFAVVeKkeFOprHIhMhoGKoROXkYtpoBCsgwkRmpEN
+KlCvG/T8i4yBq9WQZsg2VuHRGBW95eAT2LaXkBCK96/Z+/xqKCjKMuFQy47do55T
+UCGbwlNjmfe4w2/+5Zdf56zgVdFWEiKcW4UvUG0vsnqJ2wgtRzTf3Pu84Xk93zjA
+DHnGlVWTJG2eeGxHOJ4D7BkLGnSZVLiDC99irdId2gJoaCcBpTEVuxTyndFHMdCM
+TTi8CtFa4bHlWhjYaVV50R6H7lFvVsfBzfg+Z3h+j4SUtEI/3LRlqshQclBF4Iii
+OSoqegErvdc7fOF5MaV4z7wIZx9ChFE1WJhIv4yk9P+dg7K3Vvlfv//Nb/7xD//g
+vwpUD+1BFf6B0bCtF2lzsjPrKNq3g2GmYIy56AgvVtNrNMW6lG0SahZQywe34+po
+KRutrkJOOIl+XqhptQMCtI+5C/sodIx29K+VdByJ912Zde3QKe0m5C1sa6L+v0G7
+jEKLnHx2lxH1EtIs36exOPkW+kScdUO9UZMQMaNqbQoWph3oU9LySxtpXXGCl0tt
+JPes9g5nBQaCj+btSl3IpX5h6D3rAv/4f/7wD8HYryydI6xeaZzazEQpV3IcOZUp
+kRCvn6c8v8tbdGqtYtDWKBNavoEwSDL9gP/KyJnyPqFnSuqDFHQLRwRbCo3Pc8Nd
+WempVdmsf9OgVvfReLwQphzw0glacz9LizJH6Vkp5sgVK60kWJaumf/+HZY2ZaCb
+NAyFaZtQGeq5qNaEcpHb6KEUNOsF498vtGtcRhWC3mHrtaZZLXI2hbBS8PHB3f9t
+R6HPy0b6bUC5+mGlMmH9tuKUC6ua47y/p+4fNfgrzaGJeflutasVqEaHFbGVXbqH
+FyvYzRg0JtleaIdxqN7dZK49FIoOuMFVNnhZViCazskm/Cc8oL8rJ+eXCsSssM80
+vslLT5zs9E65uWXOyR818yvfJplsTLareCt70jK9aK6PqndXVjxU9UIf8EPG/fbn
+OdwSzOmBJs7OzZ6NaC0GKyRrrDlh0o+bcX7z9/9KJ53ffO73zDu/+eOXpp6/86sf
+N/v89gJ/pRPQD3yZd8xBv/3rl6ahX//Zu1FdkO5YwitQ1PcomGUXF/WG45+hGCf0
+XXY9tzfvVnC+K4oqLgXUkPxntgRYsQNagWOOGCY9PW7MlIc8VbWl6pUqcMUZ44ZD
+TNBZkRka/bIDFyPw5mQ5dNiHLIPtgmZCbnRNMq2qzTkzTb79uySuDzx5kM/0qarc
+9gWlJ0w92NYVFLKC8vh0Mmx63KJ3P6+no+HQcyIYxpiqCpGgW3TnE+XPmPR2/iW6
+RN9QgzjH05mhjCSvpNWCrlWhP1WfpZRzJr0bNnLM8WVVYEtBVpssN1jP6aFATw9c
+tJjJ2tb2ULg94YQQHncPEdz006Zl5vY0pu/A9LYbZccMRZScOm3uKYUAOA6xqq9k
+ABL0HG4t68M5k96NN7f8WT1oCVDuqpxfkjDkoMV8WpVt8ksntH7CpHejRw4u8dLh
+qdfPqizoaXoBySZL9O/II3znd28vN5Q0h7wFQCp0IhTXPaj+aIZShlbWG2bscc6i
+NwtQ6uRMm4YchbbE2thuKooTHaMhMmeoLLWiQG2Ia3Ox0Du4d2ZmoTNUxJRIlD7o
+DTSmScdqx12n0qbST6vCoMzOoYih0C4bH0fJMZRzBr29QxEsUXQ1i/ZAhbJtl8pF
+OXya1XhInL0qsNxO2PPm12naDx0k6EJVxU/rim3KT7yxr+6MOe8mta2vqgSdSkTI
+apc2wJAhVWcabQ8rB1RF077bf/fACr3L/QKCmAuRrEofyxTa0WZSUOA4UnGGWyFl
+714FG2lk9DLQIYza0BHzDHPObBga6vsQVk1VhSpcx8p10xhVGPL3WeQZyq2Wz26J
+AgrG5wx6++RL+1wYSz+oZdF7EibaNgqxyTuZ/mBUOZ0BRXc/T9svU4F1MLPk0Ecz
+8mFDx6zCkj1j0vvZ7cRE62RAz5i146SlIC8O231hesSjBGi+S1Hx0BqCQ5EmEEHz
+RfeJicJgjaZErTo49p8pYSHGcnwJMmAMjFtYQT69YEOObrV+EDNSsivoCplXhoXk
+fVupAepVq7SkOKOd6TbEvJwYyO3HyVz6YmxewaNXyE17mEYpXoBRgdIW5BMKmvKq
+lgSUThj2foEW9Tl6gH3S0Ga9nBX+0mcQhCym7hOmPTqIno86nhp+wbuuRY4iQI8M
+TGRLx1sQsglCfHlrO52z8OtLFaWhzEDKdPFoKKKPxC6GKhTuVBnI4Ln1YRQukjBR
+NcestefSdB1XBsr1njGq3qYKAaW4gYKeynKFc5UVDIhr76vqUYBrC2iqQJqbXDYL
+XZ8y9OuvoJrdcJauXKhP41UxcNvnOs1HzMDXJlAn53zc3q+vA6DnNG12inTTct/c
+SiqbKcZ6t06Y/W4OXmDDG0bZfUoVHmjmhVKFnKDaoSLNmh78ORR1T5IjROD1ZQRJ
+qF3LygxtT0ZVrFw5cgwVxp40qCoWb6ofI2C7B2SbKl6S4KipcPjmBKs2khez5byc
+C8ostZWlFAOJPzlb2Jmhw8yR417x3F6+Kxk6okXar83W7mgOMgqnHDY7aNaCssqm
++HrcsLe/Dm9epebuS8i7HZMycnOGeLcy0Jmce4vMSnH90PpNc1ka6bnDsJX+5Jgh
+huPqt896ypy3Cwiwp2CGoHAO0Q9GeGyP4xjvwZjKmUPh1qm8GiEsREPhrHdxHOKA
+DQbKEicEHTtNeVlWqqbbAFwl6+mPrSvKtaZbJevdN/JktPkoRJRxrm69pxJSVqX1
+NLb5pQc9mmCg+Vyl2up2GUNI+XFz3iHiJaQX9LX1q/D9qywIaJAqmau8N/mEOW+A
+mRCoFxgzCmVKUTEnoZMx9flGygopRXGMjXDuFOIWcNfSMgoXpgpUyjFkjlq049tS
+Gj3ubEq0qovNoGnH5j6aUIqLyrppReVPVGRgUFQNE1WbQlNvuO2ZejwvDFIFlXPR
+Vp906YyoX2MWvDHNZs8VOHfj+TPq5edkOl/POwe3fyqTi+yr0hIN37TDiePBmx8P
+epMwEwzCCfYcPa4taLPQvhRNP51fb+8Wv55vIs7CvSud505Rz6s08YpfdMpM+Xk9
+2noupNhXViMEhMRoAgiHsZrN8K7KLMR52Z4WolPE5Iu24+ojRMXdsHelSHeCNMtY
+qOiL0q4qjRmoDDo84dA3NBhvho8oKyl/C53Y44y5ccrSsr2QZV95i1HCctG76dde
+hjl2oVozOJT7jKINUW+us4n2laWUsALgsJoOlAC5deZ4ujJMdTZfdQGuFJ9GSIVg
+g5CJp547mqubQh3XPwpTI8CYP6pc+boH3Cym6mVAE7Z9Q7WXUbOUxrBj0bobkWvO
+aZlNZFd6Mw5qKdhPlDbWPmAUvc5CGfSGqnZSXFZA2PoLitRMjWfv6KOPeiPq6MWP
+dU5OCyoX1x3g9ospfoSKsFwLLdIQTZd+q764muj+cdCY73DR/refqyo6KSiOYuMR
+5tw4lIwDjVzZnUbYT/dJX1ve9fEGQnbMX3D2HTmzUtB1ERBkllHm/q7s0OML0XZa
+156VAwNOMczMXiFY5VMw2+WaigKDcEx1nQwtFCsEDU3W0iMJkEfBnUwjh2106nRB
+taQov6DdK5GOW1MW/bh9MV2qSKmM3lCGn/QUnjf7yy9VGZ7PSTChuSBjDxWcW4U7
+1M9tlOP+zeazW/7FKvD8MhrVHXpVySIXg5aLryr19e5nrhDue/m5KS6Ks6oM9oA5
+AsaqhgRjCUhuOIF42PrO3SK8mBcYxuwWYGVETz5VBsCFf21S3RGDb/Izbc86mSOM
+EALSKmXpF+OAEsHxTB/tUHLW3y5Ml6zD/1Y6dj96f7k7OYltMWinu5SQUVHIX4ij
+nrtIuH/26elAVGEAcV8Nij7Lm6o6zXKlPJSchMyMO4HJXixgFN7aVq2Hy8p7BTtD
+hDjCxrpWSidMe9fp31VrcCHTGKDInO3WHoSIy5jaHw0JoI5pTxn2bgWDMFbmVJv+
+VOGbrpwbnCKf/ke1cYyGxWRExb0kPGUKgZj+J3ohmODaKuFrsZwLyJ0jl5EyYwEn
+pe4P+tXuBdGs1xZC5JXDEaFLIlA6Zdb7bxPpZ0zKAfogQmatVrikERLj+m+sLJvW
+4R436t3PexcC2llCSaoUOqd7AjB6w2JrVo1/yqTPQwCF63FvmAQvg5mIhOAxXJil
+0g+oMjAMYd2TFn1eIAliIWqZDQJYTtkX5nyhvb2THt2mtVZGShmUzBi6oLmAWVLB
+n5VWOwPD7jhHnZl2Sc6ilac566IZCfWJePDYhpCLfpZmZrlBrkpeJdt+0qA3XybC
+MqoiBLJ0ZCcVY6pVba1ybiAv2mYJ9JyfsOfNHMrRZamqFAFq27uKqNFmHTRoy5N+
++nbo0+v9G7/48d9++IM14d8U5v9ef8dXjv8EnY1gdw9MU2a+GLMke0HUx+r6fOat
+aurcopmboIbQYBsOlmDtyJwE8DgKFEiaxa3gUmVyhfMEgRhrporSDB9vUVEmDL2Q
+ODno6udkwK1TtzFPIDRs8qIB2WvzKr7v6H0fkCApM48e3jL7uZfpvQa9SdgOvHp0
+AKvQYiQvBMYIgqAGJzE/5QrnVlTw36s4fSiakXxRvd4EYYT0mB/35d3u8dQQAtfh
+gE2kMJFZHaBnNdeQ9KLj8TBX+QDX+BINUDxV3KWyV+CBI5mBWVVoWSEdJpuIVDPs
+dxYho8VMvqC6FSLKpndo/pFOZQ7KHERcVkZgjovh7KwNinmaPDyFbZd8Q1WcAOc2
+ky5a+wFu8dRJaDxXcyijqyxzKplIfRsFey7FVGwKzbryXpf4EvzNSNohR+edIrIg
+IAK7ps/FvWYKV9zhj/r9nE367S/+6TZYpLbQqNUyDOcspXej2HqQaUWrLegnTdX7
+mke8vuaAuzBwKRY3xAOFnryZwXQhDz8TRISKI4rC9TMBL6SfU0bnAlo7MISwuZg5
+zj5VvvvsnIr/SWeI3b4kJ/BA677qdKEAH5Ay0gLe83LxmlO8/i7GO+XTmnaMXdBj
+BgEmBk6UxtCWl3uYEPUMF/zi9QWhaoht21p8XjBWOmFdbhnn0QA/3usaT0pKUIEK
+SWkJH6FBm800A0GoRSnTrtAULcz73eKr1L2XWUeJsxRBkgQN4GLLMSmStip3Wlrs
+wecVXFSKMdC0IaK6cBXVcsLxjNnCSGFWQ7AKPWjh1+JVE+zUKFIUbJCv26Nw2VIE
+Hajk2/td4qljQFFM1RTnBspgiOPYgBJnb3smxKeKEQIb73SHL/vIC1GpvNWPdqV6
+YVzGGZWwOj2rLb3LFf7w+xun8xD1qMJOg1aliaIaEmDNL3CYquxedputvdMd7tYs
+xXImt7PgvXALxBB1t4w2+OzWQMDHxuNap8PE2TiIUfxHQiBF1etW/5yQHMd3zVu6
+d1fNqrymD8IMFoL2yIlvonr0ChHGldAFMBxTU/2dLnH3Lht+AiNs6ws3da3JO9xQ
+elN8Yjx8Z/1vDu+KEncLRhUg2i0dEum1DdIKKoqmaq2i7NXme13jqTfZFBMDXaAc
+kcr3BfVQptMubfQONKi2k3+/WzxJq6qk94hIg1b040ILOc9mVbfnOejegrW86pUn
+PQ8raY8b6+DGcIrPqWbkMPZ0eigiswtyKT5/4RMpisZAv3PsW9BL5aaF61z+bTOk
+4fb9LvGUADcajlYRSfULVCEpKsbBwxOhVGprLt+be6c7PFV8dmTDUGcrVcnclqDC
+RkAmO/TM92Ou8G1zseNWKbTNNXPirgNlVdVNQ2XGaMINu6DS5R41/itctMqosAFk
+2uuDrBUV4qBGj1CXJRoLDTKkBn6/Bu12KypDkpIwtJA9e8FLoQPu1yCBMIKihgDR
+SSh9WZj/CyF06A3GCkdHPWjIQmeZHzX3K9+m0AUYtQfsjG5u7v4zygYCpXPKGMiW
+h/lYGvj251VMKWxNjsTk21P2VLmS+EJVlXV0J0z68X3dn/5G+7o//Zx93Z9+lr7u
+Tz93X/env9W+7k8/a1/3p5+nr/vTTzQBw++96Lk0i5YgU6e8fZeeuXoPqF5BsbZP
+2fNuhYNqZLYSA8xkxdg4ZlMeNYLPMQe7m/6cV47PsrFPnsYVWhnKynFlBVmVOdqB
+KSGioncOxtrQM+IQCtjeQXkTfKFdwBQOxGNQgUd7haCQebMX7SeePJlDUHwPiP1V
+NuthFWEEtrNTUre0GNsxnX3conc/v1G3VmnHFVFYA2WGyemySgrVELWfMenN9btN
+nCgJR8ufOR6DNR4dB6VVaPeyChR69M5F27su47Ea8k9tA45mRPiDo/VUkdGQOxo0
+OVVipe0PAYs2YgL8LqVwJ2TcK9RUxgo0JzTZkf7YgSYEZctp81a1pXJmwvixujJe
+0Xda1S57kLueM+htN8jmNvUYy1PV0QTx9hiTg3s5W4AzmUZsV0/Y8+bXJxihZk4e
+iyAxQiZRdl2MnWqXzTPmvO1ErTnQm/X/qTvTHdmW4zo/kemch5+yJdi0YVEmZdjy
+HyNHiwAnkAQsvb2/tU/3ubX7VHft6nsucEWJw512Ve3IjFgrM2KtLTFb9QVANiDq
+kosgU8oRAgYCHDHPxfPkNDVtjOrjVMF01pUtZ9ao+xcT+BGk0bCkWlTkL1Gn05Sj
+7HjzVnatS23U1o/YOy92KXVo0M/Uxs6JRZBogqgX2Lf0EWxaUAirEcg98gzP1c+z
+r9cULlTD3WTBOTX+8iWans3neqjqBH+V+EREz03AIcHuZbQEWggSylz83CrvYsvm
+fyKkt61rVsDC12OAcJgJWk6Nl9RAixpmLxQ4oMrD1oX3P0ByjGr2lERxVv+Fz7Xq
+ypmlGcEvQGjLZ3vXJbnJihqprr6gMaR7G6trml8MyVFQBystLQV2U96hP8MMb4qu
+U1h3oaoJ3RUwbo7SnQuEvj8V0NOoi5a0t7JMrU2aMFkKf/Ll4N+drDF1WZvT9Xie
+JozUjkOGIXasC91LkYggd7AkCQaNJ8J5m8e7XBymJZsXNr8X8IDtNase1tJl5wAI
+ILBPhfPUMig9cV1K5wLH9Moz0k8pQhqD/6J41xCks0jiNTHaqVGnLKQaNT3cJWFs
+qZoigGxsUHGkanojY0lwEMBt87alcZqmBOSc5tKl9qnrXheeCuep9EsrX3Ii46g7
+8kTgPc+ibnSpiUrYKKX1RAE9QZeu39I7v2HC3ltMjX1leSRYqRT/RDhvq9sClJcJ
+LVfnu+auqkwxcm2zZ51cwgyp/88BopvnyyLSQQ1Jrd1tSbzJMKrO5HUdvUmUgPaS
+KnHt0snxJi2CmkOUuTOV1Pgi/8moAYfU6iEZ2FyUoxawfJQ01nArLMmfw3KjgZyT
+AinRhT85ngrmrVqYtM/88sXLhr3CpJSr+swuL81iRcktgI2ux/K2ZTCrmnRhe3ZT
+ke6pfJmCZhRM388cJbxpYGgpG13vFt3p6eRqQwfhVTq2aRSisTzVYj23Od98BmRD
+B3umysMbOAfQgXrApH2vddsit5VCtpleeiRT6kw+HLoHda9GMSWtVrVe6QhPG2NV
+CgG/3vENJTizNnnKshmXLOdkVAhn1lBhLTaE9RxlOX93KVSQ5qlCxyRKrp2M4juA
+a6uqssMoq/PjDpIPP2Ae9ytqmo4a9/fWL+1a+Fs1ottPhPasFVn4flUKfL5qgTeV
+LXBGJRHDMaovJOBln9unp09wWU3lkMfE9htk4OkXpSnnbGHWOomsqVNHjJrD1c0C
+/CAJyRiCnUalsUGqT8S+lRTUQRO0V3wgllV6nbqSBimPBiDI05BV5pjRpz7y8A9n
+oz56NzBPLzEhX2aTMXuR/eQGeJuqt6Xmj04Zvx7U0+MzlLa7sIARLlTJn80RdGQE
+OGSpPhPSo53sdE/5Nd3sDD030bglFa0qL9UWqXiS6M8uyXKvPcli3v80eEgCCRVD
+uIPTFEGFszbiSbbbRTcDw+psWMosmsJzMivU2aHNpckLalep+WcDBBJfLEfXwcxR
+h8SsjZj3Xk7ni7vJ6qcqRUNGAsEI86lQv/srZoCok+qBlqYnF6TnmVrYpVIddNBV
++ZotPbGX3/0oaZRCvTU9qXEaStqWPc+UyrvJKT67BG7voF5h1fRTQ2u6zrUuwcwG
+KL8GsX1yie2O+mjbfH4F3PmwvMA9x5lRkZsTJLYWvS8rGZQA7ITUNmJlLeVkN2Ce
+t5mS6ICQC0AddtjyJurU5GSE6qW4bCNwOFnToCKJHwKBIxGQarf6yah1asiQIr55
+fgHc+RGFHehq8GlP56bkL1VQV00alZ5muRR0qzyejP+dT5qAcOCEsVstpEHxyboq
+B6/AMmr+dPh/8+sfxrV4idltQwr2mtWzbretY7U4yMsCC0q48UeE/4cPk2x9UF9C
+k4AxQLuCCrIz8hug0FABqnhNrz7K8DIfqrzB6T3HpZkpWa/Dxaf0k9iFUzNZPUqS
+jPTBY/jjGKDJ5EdqiZO5VZPLl9DlXuFHhP+HHwGUGbrCGk3+9bAc1q4MHeVw1SRB
+pMleQMZnw//DJ+nGdtZ81PCormjwqrrpoCdux6eOOk46wqN6cod0r+CsLoqGZBnr
+aQwLaKVJvT6e3PEnAeQGCJY4YOUz2opQBcBzgeTwZnavXSY8qcjflxzQveQhoCe9
+L1m0SBOALWU0dhCtpnj5lxQrutr1ZWGRSRm9SL5aZgZVp4U6haZcWpat3U9W9B++
+ODwveZ2jhGQAOl5HZfL64g0Zf8wOkeidac8U9B+e3mTXphXfWCbR7AquAltldpfE
+FMIzJ1cnXYwhd92kAdJcpJysTdudtUInQbstsXLMcxd5p09oUnBdBXYD5vNwXuBX
+VfGWqSE5dskFaor/gptDDD5vK94bvCFXqalrOF0VSUrTCE+UnYK3K/KntsZyupQN
+Wp1labYnsjikWMAuSh4U9BxEO4t6BDlEpK1zQuggEJusJvMMICFYpBgTgLDxiYie
+Hp9XIP2w5niGpl2jOra7EWHIMh1/JqRvvNjlE8tLnaBf30gwJDTAAbuACiPJUxlu
++t6eC+obe/OkrgZDqZpGObiGKI9i2d152bU1qNAkS2hQffKfTghXnhRbYuvARc3Q
+8Hq37Ow1huFtKGxi8PgAafPWSdxG4moyTJpqshuAmGrD0Sr0HEd+893d0VaZqo4i
+8mYVLYpXBOutdtjuGo2KpPJEEX7zAZ28CJR05KRmRKSgh23KtxCkGeaj2vvbP/zl
+r+13v2t//e0f/3D8wfs9g//nVeD1L//6+/7H3/3ltbOv+SrNBWKzE68e6HdQajjF
+zlXi0lUyO48p9Y//Kl2H4I2sS1EFDxo4oYC8HZLaVVcGAEvHhhpnpioD22twfYgS
+6bRbfUcbjtZlQCMjKk1Qw/cW6DLV5lNObXcv6/I6WHGGOp8kMNOofXv09HCh/Pif
+GNRmIRcL3RXHWDabzBt9fzaFvNZJo2qB/3g9/fjvsSDTUWZRyomgsZLkLSSn82Po
+Z/8Ey+6mZUuWuKDm6J00kQvRanXLbpTVlhWOCueu5idZcrf9pbpYTKFOUAmZSM2l
+Ve2C8lCXWqJkgeW+rK6BZduecjCYR3vWzBny33UH7HQq5yGAyapdzLIoSVZ9UhsB
+P/KjXr2EtYdUo9lXJmho0ob6kyy3m5bdso/TPel+w2fsUTiDYBD8G1zgxG2Gd99/
+qd30lw1Wurqiam5BPeMSFQM0Q7/VrftTZLeXJZa6Wl4oFbC9DJPvvOkkO2ZfeyRh
++AFnL/YnWWIvW325AGWDeRrN0zvwUkhF9oFQjDCigWxrfCz07I5TWPBrkRervDrL
+DBD+bvhru5LIwpqHv223GqKnZLCHQt6leJNBZXGT0FiHwOmurthC+vxJltdXWYUm
+sCzOuESCWqmSglqyyVZnlIYT3c7ff2m99klKBFrDKfPQLgn50BeRG5lanH7ksrph
+yO9kT+CutDdhhFSOwxPYwD9c6kAo3gT0oK6wS/mxq+vxNxnqZootyOG4Qg5TNEtu
+grrjBDBvvqaD/qagCeHRSipO1sVeNbJZq2H+WqB9JL8NtfWsnAlUJpuRfzUmL3V2
+dXNN/SSbIrS9ZcNfYIc1U37sInv8C9Moecvfx8prYep4G3Z0+ICOAE6c9jgaqT9q
+rT3+Gj0FgCfEUDfIO/DJsqNQmKskbvz3X3I/ZFEAuIahNPwkIA0MInsNyEtIEn4y
++7iAyvmnWG43uZzqTN6crfUWp5EYbvBOrX4tbEmNWymx7SRNmwLMWRpL937vQkaY
+VPsEl16yJSJaUtag/LRttBaNruCbDgK3js15cF8aPaZgsJq9c3JT+CmW2g+/blGT
+JnCTPeThRHVs4KEpXmCc3DLZKmFZP7/7Mrt5wWFDQgG9s+WUjiOyDUzwvPI+qnHf
+f4m9LK+0JQMKaGlSfEk6NNAcIJhIGhYyb5Q/mP8pltcL8ZeGwRadO7yLVz68mJvP
+RQ2eaVqoifTVZpqCUtlCs7dGf8W5wfaZ12YPOw11L06pN0tiMjmVzd4jrFkf7ACb
+a2lWLvcS55J7A0TiwoHdp38ZbFdnGr3JKUGi73zPPvhxwpohS/tgUurDd19Wr5Kd
+U6MrWQdwtq9cizrt4MlH50hq32lJ/ebXd5az2L3k2Orehx5e0pyyj5u0VdRqYpuF
+26X63ZbV3W9RRoPeyhKdL0KOqjaB2oe8v6sHm0rrMGc31Lpk1P/q+D8jX67sZS6V
+ZZojVY8mma0uubqtK1QZGXkdSklPwnR1+c0YJSXi+Ntg8WMsNet8t6V199f5NY6u
+KFa73fBKtod8PZNO1HVhyGpvnVfwfZbX/RcsEQVCvRc5JEh9zB9mkGXAsm3x33+J
+vYpBNU1aqlG+G8qj1WFVzdPlUiZL3ng1o7b0UyyvlwU+3ZIjVtMx09AlQ+6yitjS
+kDI6gnC6o4VoyNDUwRy9yqRXb8gXp+suySYWTl/qvgjeGxgSdahqzh0q6tNhceXk
+VNPaYQEshxqqROwXhtE+/csgGTMkEm13Qz5Sw+sokHdrslzxWOPC3Gl+92X1Kga3
+DXuMmlMtO80WOTxKXNM2MLZd339JvTkcYWf7YQGbvhRK0kgaN+3UDGM0EiNhSQhQ
++SmW1tvDOTcLC8roxtdDM9QMHJ2uTXLOQd1Sdm7Lu5F9CeieAl5kleIiXGxo7G3Y
+qpngGtmR1CFpCSfDOp1xT0vJjEECkuxaXXqnYiobd1g+x/Yaf4oldv6F0cjCKGV5
+KbBN9jHarx4pqRiNZoz6aYz5/kvtDbyfvLalgZZdAAmGXVwToKNSNVy+61X6//4S
+ijG//+2f/nJ/xOrXf/Pf/vaXv/mvbz4IwEwZVAOY7H2X7GCFc2S3Ldmz+mWoJdy/
+CP3kR44Ug+0WaO6DHDwJfSYXUYDr0uFIcEkDbyQnKnZ1wa7k7GJBqU0GymP2mMuG
+JW1S6zTrC7fUDTlfv5qy5fzmAls2zi3yG0nMsv9jydb6joXZ537KIdoITM7JaJyp
+Heq9Oe/i7WpF6jAbhHdvKuNzn7e/9JVnGZPlaprrvcH9pzxb933xu0cf9J/+7u//
+7te//I+vh0TQdBtKOpQw1KetpvPl1A+xpKANBLFAifSp5XD+qLTjiuTuIhcjXST5
+IQf4wBKPpkzN3iQNd+TBWpCvrgS2TSS3KMH4ou4mkyAiq0avIfvMquCZcuSk1Frj
+s5VQmDepRx9MkVVOqz1FeXYl+6llcP4JskVMh3Ouum2CBJ2K3LcyQWdBWFAXBMaX
+58N//pxRNMVQpZ7YBj9ZloFRp4cUbLUA/4hs8AIdZPJcezukibo82qHCkEzePgyY
+PWqsTm/mj8oCL++seVYX9C70EXJYdbQQgxtUgzmkA7179Z3QuQb51RSr3Jm3uolZ
+HyQqV0kGPc0V+uELy8vQMMCSq80AdZIY4KomBw3Hmmo2BaUCtBOJLowft/tf78sz
+6DzroCHIDnA7VmoutWkkwARZNGX41Pj8rn/t/LTNhLW3cxL+VeuLXTF/mXck11wK
++3cdl3z8+J/ltOTjr/35YcnHz/7ErOR7D/1eo5IXnv+znJS88l4+PSh54eGfmJN8
+56lH89Nrln/dmrbxmrVpQMBA7L7UEAa76mTLPIc6BEff/pmQ3vscCohN3ZRqYQ1R
++ryR1NjVnyPDZT5mGKWJ0aLTX7MU5xHU1cDmTdIQ9tKxAnZMNg2bU10bGzTCenZi
++QAENqqaGYM3GiVZGvw4BhwHFfmZ0N77/nFMo7YpyR2EaKT9TcqoUfg4LakEqLVm
+lsshvvsh/KydZTFqtljWsl0iKEOaER3Kcz3Up86ZHkhVyXkDPK1SopequGRAWa+p
+GXW4QnPtMyE+Nf4c40ClUpFgWxJGrhrbcVvU2Qmj8PK21+1r0dm53ZCzwno+cDb/
+k1Vw7L+69wiy7SRLidIRbgi4Dva3Fr1d1WdSQJbMMyltBGBiduuZ0J6+t/cyiTZS
+y29VA0VbipA5UbFZVwmiG3S4dTmktw83Xdf5FKIh1cqY2Kj8bycVhRF7DNdDeRqw
+7SlP/o9U1nmvZJ08geTEsvVD0TPWokaPZ0J5+3yK2wpOCmSBRSMHWnL8qrL/S7FZ
+YttIl216DYAuaKLSf4dWS67W6TKMhKeZSL4GOSWrPV8useySpbuqyPeFp9isUVKT
+SwElRQ1Gh1zVofxMKE9jWVVd+8V4CTK61Xb2DijgWIG2gtZ3qkDKe6qwV14Kz7Pq
+miRy7MlaSL1bV6zAC8qsux7K26EsK+Prov4yMc3jGNyXtMCepJIJ/iIJ7laeieTN
+43eCF4CCgCmR7ccbJ6ZDlvPh2PhjdYrrZuUrfuyxPdhavRAitoCzicxWelJzIHCt
+dNOsupCmkSlEhDVpAClrmJ3wwn9GynwWdLcX0/s7I+qPv/bMNe+hDnxolYY5gY2S
+ng4y2dIUWAPS5JIvx/Hm2auXIn+asCJ44ui1Tok9rxMtcN+4HsazoybVWGWenbJ9
+rOHwZ4Uj+Gp4ATkbytSEFD4TyDemoFmnqYMcaXREX4VvVlvFHYfcphx9Q+QqASSI
+LMUjUY/21t+qiKufPRuqeYSI6g7btyC9y+1XXo30xDctuoE8zn7GPASA2u6at1zO
+PxPK0xevWs0kUnMsD42+q7tScvaxHh3FlRXWnsivp6cP6RB/cSctIAn2pe+8adLi
+SFSNJ8L5ZrwrWpayZPaoDG7yVsDSXf117PpFGbbqe+bVPgVy34zXAfJdkggjfAPy
+mRUhwii5IeiWBnJEvAHUQHY2VJgQVqtOj12yXL5ygbtmweB2dIECbCvrmL/oPAwC
+Yshu7dKQdWNs6WCQB2fZOlRp7+gNXPvqaiSfUdf/e5C8gtSyYmmyQZfJrw5B5PwR
+rkPd8/NtBmBFHTj21FmqcfGz1fvoGiRj5OthPWsnR9lmeyBQcDCMqi/apbUKoc8S
+FyMFewjhM0E9fUB0xgFetnzgEulKynxhL+3IDGplM7nkGkgUuge/abPqiowqlcgW
+av3b/CUKjUaP5HgkewEghO5GIG1SUdewu7c6NO1Sw9XiLKHXCETpwz0T0jejb4OP
+DVKD0vSl1s2Chal12MuKsuzMC9vXd+lZmjnX5kmvUjSBMBt5zcC9t59J7UPlmXDe
+DA/IB3BLA1m+fDo2t6Vs9sZecffNQowB1pCei+YPz4dgVElhSjhZ44zSutsDGmRz
+7KyfVTM1s+yVLWU8tdp1sb6byaaPPdQ+CRIWj6ktql1a3buA1UKo+e7qx5P9lHzv
+0tIZmHPegTjZr1tKJM8F81axmioh0bZoAFqa0LKhyCsrS59Ul22sentvqOLCw6tX
+M0iF4Gdh757hbt2riRg0mM0TCfdswxotWEXeF7bJ8LQUoY59qJQlsmNiD1m44DOx
+PH2AlTiKTLFszRlEkSdcqMqwnNdFdZJJCARmG83fgXL33sc4ipDILPaYCe2OJOz4
+Jrka/qbQnKTUW00ajJXc8kgSV28atiCfgN/mbul4yFOnQ2/ezICBzwyT9dJ1lOOj
+92M5jVc0OZ4NIMbul6P5Zlyjrp6Mb5L01wHcgTeHbrHVhu+fCOctWGaNSNZ96Vy0
+8Tp75a3mmczh2uml1puXmfOpcJ40EqSrWdmJIH4SK5icF9PI4DKxSdFVGIam3tKc
+1pS+qw7pbFu+zFGcLpsXRERLKrJync5ToJW5sD+S7HaGZ2WbMaUeDw0PqzbqcKSs
+Si/OhKfCeaIRHqIL995SdI8LrjRkowRPHisUDdBZK+WS6+G8fXp1QKzEz5mlHF70
+mYwOmQshAr3aE0cHtwpAhhUCJw7Vyx3PziFDODgdW5MUkArMbVPYnjq4PQkvSetB
+SRvYEysBWZbtWRykgyRGMsvSTjIaTtX1nPzkAXgktKhy1YGt/BlCFIoU8SebAoDj
+1ZnZZ2PfOjV7jgivYjkm6kNoQyNSPkrA68lg3tIrpUEZSLOcQN2peKkkGfC00THH
+yFZGvslej+XtSy+7Axi0OFnVW27CTeJUGQQokeYnQnkr/WMl7qtvRo5t5Fz+Cd4b
+4BOMGKk9WSZDZLOnYnlyXqV8ebk/afIMsLI1uk0oJbawTc1iLyM2fR5o1rEyvTxG
+yKdsrVrVx0ao5CO3xhae5O+QRowuYKnGuntZ2UgNPUuNIoODzYj9uG6RT+1TwTyJ
+IhlopxPFHVOoWg08fJWmfoss81u+3IYWXI/m+b3Dfw6nM7XoTvCPZJmTtzLgox49
+Ec7z2FSUc1PJPA3eFrKTlYmEOd1akZ+xy0qexPVcqj1/hAlB6hlbreV7h6FWGHJV
+m4paZTt2I1bd5dDgJOfioCMmy23xEGepK8uBwwF/GonbWOoN4Qw7dg3abBmTyJM2
+WdkqOUBSTbWtvrw/XDyeCun5q7NAgFK5gddmB3lBSjpfK85hZ4Bb8UkzjTmuB/XN
+VJxhucOl5Hkkhd1ieOemb7kIpvs9XzcPPjVr9D/+8a/Hf7y9izNT4a06tZUVZKZu
+5UKNU0eqdxLNNuTFh0cLlz6MwrRm61ZtrjFI/9VuF23RCd9aLsFXqrT3JEZi9F9O
+ln5DDORwMWeNpA5dIHtTdqSeq9FU/gIln8IWiIXfdQls5U4JdLGxsYp80/m718Nj
+hks/QvoTJcTBd4mbJRl8X1WO0OAFUN+ALifdO3wY9EufFDTKKdH8CtofTWPdNY9j
+hLpa1tZnwv9l2crQfI65mpyTdY0F4mulLtmrACllvUaF+FzMv2hAmkNft9gUeP2S
+HxtNut7sFFhxlFDIznLA1kX4lERPlMGb8DD8NmUlb7nuUpWi/KtSk8VfUYPWkCJj
+30b3ASSEUW2HvY7ejQNewf1cXZ8L9BdvKAews1mf0vbqRHJLwoanVhl+Awt7LA9a
+H95/vDqPYGbHcLsEIVnkyxpZsfAP3/edefjcX4w/7n2sTMO3ZOEXEVXoAawhr0Qt
+DEvyKQF2ElR9PhfXrx8jseM4bdY1aNGsVZF/u6VOxp6cCwJunlUkOiN5J/L1tEeX
+roMLBSdUXXXxWqJ4espGZ/12pu7hQBos7nDrukCqDTy7F/+gHrRYkjU8PsB/8PUF
+Mlk7Bgy+CTIMyMvdrQwf1JsxqQyso5E/EeGvn5H6qI7Uyg7zaalvI0UJPowhUYM8
+nwjz/t0f//Snfz0eb3+x/3LEGYRCBhhyrdWWSoG8N70UxaWhCaZVZ6f1T8X5zueA
+IqDNhXpvJfel5nb5V+9RyXlBfebydBvJ9wo/kr87WKZFUlMRRQhZJ1LbmyXxQLCy
+tLiShvCi2r8HpCeyZ+eIa/Kqgk6So9D2iFaWBvOpQN/5/jbNKAUtqc+bIXkGuwJY
+vg/PusqyjFfX1RORvvchjbegcz4DzJDBKkuqx5h1rgMFNJ8LtXt5OnG1HnIIfplF
+1jYjQEYXPwv8BbdsGUIw1/psqF8/J0h5CQbbc9FZEvxZDX/umNwOOgMOSaclpW7X
+5W4H/Zte+n495hlz1b2+1yiNozbL9we+z67lNRi7QzJSOZjUd6icsU1idRp7owqs
+QFaw4bOhfv3+OlbwJBxrlya1mi1NtiyTraB7Jjnxqde6fyrUX1/S5teMQ56xRd1L
+mrLUWko1DdD29LlQ+9efAD037BdQGG8pJ8+jw5J/o5W0y3QthMJe+Wyov36O1Rzb
+zlRgWR1qnqLBhSKvDvYkaaJa2MRN6mFrVw/EBtpU3mB3ULe6F8iwgUMg6gCIwkvW
+9QIAjLztmhpVPW++ZXktpxkaXHVpLVHsHFnrs6F+/f69CRzsLFXf7GapmoAVG6cm
+gY1zas3KCvFToX79kCWBaW1kMIzJXr35oK4iCd4E5X9AqF57n//5r7//3RcbGnjr
+YdDt1W6y5UJQi5E9buo6RJKnI7T0UWjfPvdoWHcAW75agcMDXKC4lEyRIJ6cZVZb
++ygia7qn0RGQ88ecDatguT74dOIz7csZkVfTO2TSs0fVmKlWXEu0HSXc8XLVy6hJ
+Kqcz3oe9TG+/bzQGUipa5kEnO4WobrGeWVEukiMmxI8v+jFf+ubl+mCnWzHCScGY
+MLzC0sva9FEE/1qofv/HP68jnbO0CDKUh9y6qHRbI5M80Heq6lTzNnT08bH/2+dK
+zFZG21W34OpLDEMN8Lr6Y49TF50EEHRbb5zxgzdfRtoypqnJmuQkHA1ZLZHlZwLl
+v3kWkYIvJ6bhgRs2Lk+alr8OCzWu7bLN6uAmM+6roXr9vkutNkbqHXMPTdMI/NrC
+yoJ/8I6Skjtv6VKoXh+609Zph5djFFlU7NL4ukD4oBg/9rVQ/enYoS0uvgOguYuq
+Zo0HS9Te6EYSasamBdaVfXlPfXnqKFBUnUSQcuUAU3JmJcWagStLM9BaWYYsl6On
+EKr7Y4JUS5bV6ILOgG7TNIKy3mprr6HBkJJTqBE6r756NUsOF3RCmKfpo6nLv7VR
+5+Mu3vO3BSxHmO+eC1wvyXCZdgY+SVYAZOrEV5u9r0tB+vLI4oW9xBk83zG7NCJM
+nPKzmySixrUQ/fVfvtDA6Mqy3QD/uq4XiTJ1pc0CUOKBOyb195R6NUYvj5V5ztSx
+Hg8Oo2ZN2gQ2AshTG2vp9DiCO6PuLyWHp9mx1EjpS6Ls8iZVY/P0koOQKnEgRkXH
+HC6bnk3lv3V41KVPK69qAxMJq7WkC7Y5rwbp5etGL9nwAI2hOOawgw4fgcED3LRg
+CWFV6Ra3S1F6eSYwR2IpTkqVbpHwJKHad90+RJvDnTD985+8Mc/MZPglFcZlyc9d
+42j9KOkOEODSmmmFvOFO7e4Ge/rDZLxUgJMOmAiHcWPKKlUKKtJMgn5IwbKAT+E8
+u3XeGRhURoMmy09JKpeJdwwcVhcjW0o63sX1zMr1WY1VMLEBtlWD32Bnj1iqFZPf
+FHl7d989/SPUmLNUiWaQW+2yfknY1C/JIZZaqyTRQvn27ODpT2rSrCogxZRaqQ5g
+Slk1Rp2ANRTnnwr/eSYDSBGbiTo5hv8ZypCPmlUjbWvo0shRVhdbT4b9/CFUgBSt
+btXYdBuIONrSVI5c+RzoUUpJUv5Irreyy6Fw2ENtRi1rufGfrHd285SykToJWTlV
+Jzbkwl0L1XB6yV3yPcnopHIQnDoDt2TxKZpPhvvN1Moydcmgtatpz0k9VvaWoKhO
+ac5LqtkltfFMmM+fMK20+6V0umDYXTdXatAampeJoOxP7e6X6aQIkmWPFImzNjM0
+kMSHLJ1eS94GAqdevfXJXf3yIYem8ZCOkyki/N4sDbcZjfiU3XwnSStyy0o8DnzV
+N/yB2prlm+Hk7pu1rEeNXla8XW6eUzeb5INqJR5JLGsVa5Hkj9KqJSq6jnPWfXI3
+v3x5r1YoHQzM6lOC0Cb+ybjIFXy4xCshtL6Mz+zil0usMGQPtKTNNDbIP8qiVP2S
+jn0254PwftunJhfv6lcLEx4xwOZO/o+gABC/cCIww9qZ68OgfvvoxvassnCH+7os
+c2+WzFATc1fXSZDBEOs0ygsuqr9P/SjsU1k5THXi6OKrTFkCeo0rBmfked6TIW/F
+wh8sY6S7Qv2uBnpUkpwrnM76NmTpYSjvvA32p64Iv2hO1JglAhrl9gBddFkuPOql
+3x8H8I7/XXPqZywp8C9nQOgk4LHB5ba2ZNOVsH2ngaUPH/xzHFX68At/ekjpw6c+
+P55053HfaTDp4yf/HEeSHryLzw4jffzY58eQvn3eqQFp7yG90lJlACLBVSeFIV37
+plabG0HKw/zPazE79zY1AtY0KeSblRKOuEIMfqrPm2SW5GrJ3gvW9uXMLkADtrQk
+DZYkrEGi7PTFI1LV8XTYM0A2m4cUtErlccY0z4sEh1lwrYhCh9y2tofYw7Wgnb4y
+QdnRr0zJhXeRp4OaGXmeJQ1vCb/qLdsr++ysJywjJr7gslFA0QmBU8B5C3zpWuqV
+sN0bVRLd2LypAGaIrrrU1vIDJkBJibZn6mUhN1zccfc+ofHW5eIBf2R/6bDMTFZd
+TgnuRzmqlh/BX9jqw8nBHPAF0OFj3NBD2wefqzkeByIMsbes68OSqxUKneQJk6DS
+LbtCcjflmFdih0Sjc/PtrgXx7kxdlOGIpmUitDbVLu1FZw+BgQKiTrKuZaldiOW9
+x6fgsySgWRyLYlxrpNg1GaxUMG4wV0J6GlWSEwHgtSTpKWfWhRWEJ3VkDftsqBKk
+2F/ciKdF7UjIhZ2hNTx4lhRGFcCmcZTiZeQklxH5DeuwGxrfOxxgeV0/dx11iuYu
+cCfZpsmMdgd7bEOXwKUimsJXTmNyqUDjyU3VevDqzvm+OvnH33jZfrBpTXub49Ca
+lZxWUocQmMl3XW+z2C+E7uTTxfbugPcgn0IYoRYylb6piPOyL4XsttvPG0+lV4c8
+G0GtS0nGggQQdJ522z7qRGNfDNnpyVleSwtENus0ckOELRuiR9YER8gmGmZrgSzV
+gz3heIctCLlEKj9Tk4SRzerjlovaiMbCLOJOS9MwlXWq6QGdBm+1FfKPWc06raF1
+4EYP10J2mv3qVTMfuW4pHQ+zM9VjAtnlsEgwrWQScr4CKU99prOrKLACAKS267BV
+dlFUv0WGWONKyG6a+tSORc6hqNVxOEzIp60PJyqlu7ZooAjVjGsRu7WAhDKXAn8e
+MCwp3thZhO+rP3ybHOix5L1nYzf7+MWYK/PbdNkHlbJq2THA5zxr79PvRoiJnpMn
+Jt9SA0Yig2FlmW2B1KyUfUUWhVXrRRJw2/Oploe4kg4T4Gzs2wnoUS2FBrE81OPC
+NwwX4nXzVCndmuxzlIVOpVSTJMApJXXjgVH2EqJ8M+pyjHMNe3Q3WNlqgsYHqQDk
+ZpRz+gRVh4ub7M3DYcV2UpkSv1kcTo0nsiABUm2FDbhB0RAX102Ruixcl5c74NA0
+F0B2lWqVRc74t5FBN9ve6DRU0w+z52J0zKZDZ89O2GtlHd4MK8f0nS/iyvOX7hOO
+yb+avF40+COXIBiC5yuPEMaqsWpFXYGW5ycDFqprRi4HpocYJQJCCinqWpD40ZXw
+nQZPmkRbgrx1S3YVxDd1WZ+cjAHZyWEmmBxp61rwTo/mN+e15KGzdb1PJWPvZZme
++aBmg0maq1l3cRrokSDuUJvY8NIdiUPHRyToAGO3BrSyeVqVfik/l8WrAVyoXoa9
+AkLmYvnCEYbuO3Mqaq68FrrTV2aHl6QG3Dp2gpg477rGFqavmlcglaspbMQLgTu/
+5d10/ih1SkoDRNPo/te1o2+59nQtbD/MmGh+l8w9dylTDUee9yh3BNkrR5A2IJNt
+t+3VqN1Mr2RbdBeTSTvA1jyPQVjfqRfU4KZpjyUFlSTTCmlwQv2DY6mrS6IXCN/S
+JKB6qljh3vfAV0qZbUkYdRCu/jxiqttjUq+BEy9NPskk2o44rgbtxtqlqsEnUNFt
+bMcgwuoAWh5I7LaAJbt+230pZjeveEo11zlvmwbRdg2N36QWN3vMDVzicadCGaVT
+wAuyEPrD8DqXYeOhgA2fMSvpGD+mizzu9tFwLys1+Z2HWmqsbEwWf0jNGLvLpCbU
+ItHKBkK1GizVTUUd0qiM2oCBmptClSYhQYZexVLZ+n3smnSXLLPX7I6ZThNlJVqG
+vHAJ/eS994s87vYrz1QTMRp+im9E6BZ1FjiqYevpo5WIDx95JWrnt0wW6z6LGdbD
+yhD0awu/JU3ZRfRLYbvFI2Gb2XiFHgbhuu5s5pAaqHzM0+atUUagyBejdkI6YA1N
+uvVdXJqAseTH2tL1qjaU4KpOyqvug6GhQRBNZEzzvJukwYf77ZOcSxbcTidDXjYJ
+EjwgFk2nlAPupxm95KnRYZPlZWWnQb2918Wg3XxjqBpJUNZSpHKw76oFnpZ6nF6n
+HDI+4KusK4jkNCQiO8tIKpM0lKVAQGCjOp/q6JpavBSy20kCYJwtTn0gxR3G1j5n
+pzt7qBCIjXROzt2pXYzZaQRijaLRfWWCVPeMQHvNUW1qm+7Je9Xlq7Tup419gv4M
+aNgmyivk05I2dQkQeGWbTFmPob4cdAcaSFy6rOpLU09sYoCKnAiiALoATFQz7MWg
+neYqqI3SwRqerTshKlautux7G6gXZlvdFvc7vaIPnqujuqMhFA4s//YK9PXHVfCo
+msa+FLY3swIwI32lKUnw7KSqyXeWJ9AoGi8LFPa9orsYuPPDJfmsM3n1ovWse5iw
+dZA2A7Eg5wxw1aLQOyq8JBCNs0CAldkwWSqCURClHzev00o8lgLO91O/UtpWa65L
+pVXqfPLCNvJLCWMUyQVonvVi6N54LmmQccjQUQesmrVjLYNsl5WjM0t7Bv2FK4eU
+b6ditnQupvHB8IZtAkS1IEOX2qV7/e7166nr7Pe//cNv/6zO4df/8Yv9VUmSmimb
+pcJzobayfXZFZggaozxuS1tTan0/llc/KbVqxeLlmDHIRvA4id8uqcmTtxf70CmJ
+8vFbdhksJPLKzEPtBgUGUWeTNx+L7uDqkMLeoEOdElp9drBkK88DiQak6si1ZSZ1
+4Db1EcQPTk+u/gJArU7waui6ebXUGLKhlU1oqXODeqtZJPb3DjUvvygeDvUrWx5h
+ZuztjrFdoJlRr6C5GPK/jH//n//h3/3yP/zi/64//n799c//+kUG2ByD5hb+JIVY
+W8AKMzWYmGzQ83FEBv++HO67n1JZ75K4N0aDAQQ3+7Wh2Trk7HsEA9kqsjImdVCS
+3JLcVdbceyM/s0EhZgCOqknSKc81wCh/v/qOwLsCHcDoHNvRPNxVivrU4BUpGXYb
+zeVQ3/32cq80UnAeYKxigFtGapFO7EajwOquyq33a2G++xHqFIG1kofigFoBr9nO
+aajBRncp6XqIf/NPvzn0b78cMbMPeKkTVAJOldE874stAduoOQBmd5Os+DPBvX1+
+YiuGym4kC+cEUQa5QBx0NmWbW5XALXVJDeqopF3YkEebNzlZnRTbW4qYjS6R4KX4
+AlMjNVeh1Jhc0hxhnvBZ8BvMCTwYQVOyw+Ohu6f9TFhvvzfJo2UTU9u+xAm69CAh
+OFiTsYCur+ocxgR7OaC3D9++pqITJY0ubGPki+7d4ZBk5A3wXCj/x3/41a/+8YsE
+lK9TM92aR5bdoWE3SDEuk0aXcKem+T+qsQ8+AHJbyftZDvb1MByKujVI0xinRmqK
+PLBZiigLSsW7y3b7bOVc7yGXkgwAEcFgRwSwQpkXmdxavyZVO3gyPciu6xJUfnvq
+JR2C0pQbIF2t/dlgfv3iemKkZJcSWVqB0ps00zmaRq7tSlbmfi3Mp6L59ekDtuNJ
+VMCu3e3Yye5em+5jV5E563vhfNsqDLEbfnf4vy1AWtYaRU5TIZuoaqoP0qCD5Pfj
+9/aJQAD4oOVXqgvNTKiI3IrYQBICkHWUHHWClai7KGLToC4kQzdFbbfm69biydJc
+clVNHCTXDvkv0y8AgAMmk3cNr7PxDiXgM0fX4gOmQ87fD9jbb5qFqLyuQ3ie3LnC
+ZgVBHoq1IzSNPQNr3t1vbx9HNnCpVkh+Pybw1LixnZ9U+g2+8o9C8rXfeqj0OZO6
+PEWa8o1ZgMJO+Y6S488gxm0vhOT1idJItNkYUlsdbE+nf2cSCnVvHUye9S8BwOYd
+Wxd+L0Uk/nNF4jS6WFhYcF4rf0bJNAAgR1+dTailPODW+u0lQUpg+1l/c4jUyhLE
+NB+H5PWbltojxYUyrCYjk+V3zXfwUl8CZvM6vQyV94OQfG0xd4HSBSAzkr6yQ6S9
+Q1XmUnNRb49C8qUBWF2TltdSNPwLRdecsQ5ubO8sWFExZ3l9+3FAvjxvVnnEVeku
+22IifK6yC1rJURNyQ0pSTbcpav6SICAkszSgBX/lEH7yribJ5y9LcMAoGi3pnfUP
+Lh1iCyCXGfSnTAoZ2iG9Mo06yA4prfQ4HH96nYBapG+ZoIqLBtjzMmpKD/xakCp7
+EKSZ44NgfHmYutaOkfYdveHXwXolGBIpcFWTzI9C8do5TFZmM9nN8qsxxyTNNLsF
+yFOUcy81lPw/Hsfi5YEqKmGTXmTrQ0aeciLqMo0qmrP2PUZZMTapJm41e6muDOCF
+FGiMji/5xzJ7c2gwU27ZIAVyl+ftTEAgPy1tyTLyfdnM+v6kV3VH5ihBssfBePmi
+xh2A2+mQMx59FpIF4pH8h9ofWrFhxJwfROPr06LuJkjysUrLjuzbgI1Tna3qHbwX
+jvxkt3QnETQD+yAqENmtkbN8dO+orUl+kFD8We6H6tkPgytU9XHBrnWUbF3XWA87
+pe8C8B4SqtF7qvCgHqQk1T15pWpWd8PZy9SsP0WfvcdrhDoRQ96wmmzl1s7GA0/7
+BmdrkFDw7+G3o2MLYOY793FP/ogqIY5sgo667a5BqkY2SB0EDrQ0CQzq3ncR/ZOf
+NAFLJSeo2zYjNrZg1MreNaejDf+p8J87dbuQ/YQKF5ZWLYfogKSCdQsSAIdxge3V
+kfpc2N90S1fIl450rdNsZo26d+Qz/BpOl4RyrDmkNHsCzpVdIKSAxsH+A/w52XwM
+nSaAetiOYJIW1CXmuty6wtTZuYeygwWpmmr2mxJ/YHsDCXM14clwn7+8kZws70bN
+jQGkwJIDLC3+RJRk5GrgGd2aPRPm8yeoFXOGqBPFGaXinM3QIWJ23at/7lO7++XN
+FwlVOB1CqvGVpZoHUDSKbDoJ9/cKFeif3dUvh2tVbYTUGgegW7wh22NdpgF2pZg9
+wI2Eou041LK95KwlXT7fa1VXfpFs7gY8ZbjZ0Bq3xwV1cpp2qb4Rew1DkYqWmr01
+KSmMCRQO0tDan9zNr6Z2ZUk6B0TQTXAh6YtLOgcewJKLMl0u5e4J6dXXY9XKFNQF
+4lcn0kMslQ8FCYCP0oPwft+22/xvre02/yRtt/n7tt3mn6ztNv+ba7vNP03bbf7O
+bbf5Sncly5LMNSi0OdgCy2TFBj5Kcj0U3loDeD6la6G79wlgBNAJ/yzc3fdZLctZ
+lCwVJzYXKGhO7qKE0qlH0lA809ESo2Wu7Q+NFiOurfK3twLhWWzVBWuRdt7UwTg8
+GfLNggB7SgSmwvUTbwageS2E9745GJo0L5U5A1smava45SqSvNGCIhDWO9MuhPLe
+40F7rRVow1KbonZO18iF/BhlO1yvhPS2uVCXMeQw5ZqUqw2GgqJ2HKhS2WwVz3+y
+Hy/uwtOT2WRF55IaC7FQa79LylKgt76WwxIIskGlk/d7LoRQF4HsvDoXr6/2uSTl
+x19zcIYNqyEfQA+GBMEqFTVmsKVMbKDXkKm4KCZGpoGWwhLctRCeOk6jBgvlW6sm
+3MirkU2cIQEUTSTCLTRgmOqF0J161YuVv2QE/Ep7sNTl4WKTZFFlwTWvhOzUJVBZ
+vGripe7wraLU4YDVQfK1AOLlUqTwzIu776S/2VrQjWz2Mo4QtlQzKFUKEDnaAITk
+AhirGSyayIIueTkSHAA1zIMWFXkw6DxSV6msH7unrhegHKBFTfmF7JXma5H4BACX
+WFGsXAHPtGshu/3GXRf3ZGcduMXmivrIGqTMgm7HqrpCKOTnciFkt4+FkBanq5no
+Nsw5uHiYXaQVWcF9XwrZrSijRpWsl38lAGR7jUpVarEth9FTj8CC+XK9+DhiNw8O
+02qEzoQ9gTg+QApgJxTWTrpspgNqg92HmFNcnkI3w8qVpQjtCGXC+5KuMai3cBpV
+mKarzl5h/IepineHhk8C9BQ5WGnXmRABWLZI3/lawG519IGuch/P6uPkbUiyR6r6
+Rpfb4jipzEO773G8bp7K24xNNnDw4SpVQ1fAyUCwTUEnl10J13nSrEvaSF0MySs9
+aUrVS+KXt1ZbkniiRtHCtYCdFfml1VwpzMnoGq7LnTm2DOQAOXgZsh29vEVypXt2
+UjJ7HNgfdfk6JMjcOxkpdkC/4mnA4URZ+ZpcwOs1JW9yl0l9SL8UONE01msT+K1d
+oPjffuUeZthkcQmKsC8KeGT2CaCgQDj1SjiwcHD2QtBOz3U+qp8MAGGbZimKWrZc
+CpLGGc1dQ5RvFOA7b0K2IrN530CPRfPZrC+/UvYuAwIpGMVeBJXnh2fNBbCJeqZ6
+UcTAa0mzRlA4L9RalYKtQBGgMLhhijpsq3VFknawBwg+lVaCEFJMhjaPutmqkoIE
+jBynk7ZKh0nuL02Cq7uLfXiSUPT+Iq48f+mVdlI7nSQNoZm7VscznIxgtYKgm9Jz
+i5eg5fnJMkCdUPEtQto6jL9Sl6UF5wiAsVfCd2oIDc1nY3U94FxvibqTkgOzHpr7
+VjHl1VJbrgXv9OgKfgaMSXTUHYf8lJwGbclDw03akFEKJkSzdSkCq7EGwNn5NWwv
+I9e+Gl3SRXSaXla+XSNfUInc5YKUjE1LtQxGD1h1oQP/HIlDdrCskGuhO31lXquu
+Y4uMsT1AdopohcN/3FPnyfVbTa75QuDOmv2U6qKrJ50vrgqcIt2zptl029bkroXt
+h55QK21JA7kANwRKPHlnkr2OcQ8jHRzyHHvbXY3aD0+GKne+FcxYphpkRhl0S4aq
+kiqHGjacXB2kZ8PzYTUwXiuhoKiTr86CkTlsowp63Sd2GbMSDDiF05xvI+smGEMb
+QQ7JoFG5Ym71P2moa46rQbt5F4s0CxqB6LelhqlhDdU5WhObnWZKe2baPC7F7MZS
+QFJBGl0vsobdOrg3MsUOvslY2VwJ2Wmwz1DWNVeuFhspOZLUosSEgprN2MJqCgW8
+j2sxOz/aCytoSmMOIf4KbtcQIYAiq7S7rRsF0o7clE1cMFQvAwmSv0wzu/53rZo9
+ZxfNYmx2krphk0oKxbt2pN3pG8ViJrmBjai2tWiM+t/ztaCdvjLfUO5soTZdJ1KQ
+ZF8vNeISqgQodPQlm54LUTs911GNIrTGUz4DqcZ79fDxZSURLSHZK2G7haUtm1Cs
+Uk87HMLM2DrmFkWS/rYUO4v6/i+G7Yx4KUjyUDBjGXXUxkGCrKSbTNUQA5NjrNUt
+Uml5w9qSBi52A12SjoZM1WTfBhBVPQGDW3kIUQwGe3GphSU7KQLaXY57LgP/1pEP
+ASe7rothO81uTRZHFbva3TRNkLE3JA81ZJEiGR2W4rRXEuS5cRzo2yX2RDoxuwHB
+KL6T/1mCrHAugf+zDn7TZWtKGrGUe5JU5Y1sf6NVGyOvJTcg68Wo3TyZrKYnk8bl
+ZEhMNsTN8h66FezriT8JvOrq19+SaEpDvsI6UNdFRtQbC63sbcmk7CYHLPBWqKMm
+L6LGYpXe6LKwQZ0FLN1d29UOI8Or8P/2G7eqaCfZIGfZoFQpRY/sMyne9joCq8mH
+ma7E7LZt3CUSCEURVmK3GsXBx558Eaf35v68Xf6oj7dD+8GhGS6rPkRJZSR3tOYf
+CaeqBzuwdC/G7PbRxUEcVjFLSS5T2+xk52lc2xnAiaSXZm8DSHgwIUltbin4R9ed
+6DjbLlNfemDnbdC3wLiauvn1tZicg65EgSFWt4ik+RCBo132h86x3S6eTp6+sg4f
+TWm6mLLkYLIYtRWixR5ZMp6XcIiI1pWo3T5XrBdyOmxmd1XBr6nuNpeIILjLXwrb
+uYO3VHl6VX3FNFROWKZbw4gQcGe9o6zXmfvVwL1pPC4gMsO20Urrx2Eq5XM7taGz
+D0FsUjBS8Y9VYroReqCjxkMBAEAL6AbNuQ0NqVJfks6RdU1AXOKB3qjlMh6Mz0rF
+rGpIaHZdl8/l68VTybda9tIXl72CbnN2lfArXD7KAkFQdYQ8QG77UvDePJlaEUOj
+OmSS2VKnuInZDc8vPHL6O+E7NYX9Yf315Y9/8bvfflG7Dmqu6K0YoyIEhOuaqtpp
+O9jScDpMy9N9cJHz4APq6GBr3coV8Wdet7Kli7qHi0NnE+QnzZ5YqynTPDWywDaU
+NOMB5JYmyzopVyNlao9rGojzGlNuTecuPEjKdKSLYST42mSdUY1Opn384Nr1wRc3
+hg0+QwCqZfXlSkKdfbfU87So/XCPUsO7p12Pni4DKllMSFpLJnPswOW8p8qDyPK8
+FM7f/NNv/p6//MX/IUregS2hmgMGNpTVdchZpiL/9iJ1ifea3T96ctLVp3dWELBD
+w0YHvpXSWTMS15QD5B5bs8iFBAlPWpVULiO+tUcvk9oAWdVMQ5YCueZT6uF1qGmr
+IF2AMXXdSqqfUQqZo2ed3RY+dcPILgbw5hsLV0fgLrxiHfr3MvHZFGIrA7/Ew1kx
+EpW+ELmbx+rEvLbGUuaHsyKz1VEs289qQNi/G7K3TX+jNQkgBFaUHUm6iyACKbgu
+aJYuu8jUM6f6fqi+6ciEnUlYkYIE+gHjQTPZSJCjHuvQMUyomuHRigVvJDWpECQ5
+r801Kd9O/SxswdUPNFdK1IQKO9frHL7VFXcrnS01wQxWJ6qQGp1awl2m/wCavP2m
+K8hSsni2EDCJxCsHQZ8aaYg6C0GWGIF/F0Z+I4Ure1A7+WpLJ28gk7Fm1B+YTpIJ
+j0Ly2vTXJWvgZUvAyrWxfpEfB+p3lQKQqKYPfQuPQ/K1IzO0AyxmMEHSBfCIPous
+AXGGI/ONDb0IbWja2QJ6I9xaarmg1pLyjrmzcJ3G4remUlfJYUhOeWjoJwW+XMjp
+GAiKAx6wQQUQMnYXDAKE/jgkr9/Uw2uAPJ1/MJMyIBhk6Lg1lgC+T3Lt6oFHPgjJ
+6+PI4wFYJC8JirLhFywpynXodKeQ+EcheemfZGnmXacNcFaKPask8IjqZEHeIq80
+ssjfG3r89nkZ6LZl190E6ppUhlxQ6xd7ZKslL0u1FBTIX8ydHAo/B+NDqJc8s6UR
+7CHCcRpVXCmPQKhlde4zNYiCU2GGPotw+WKl8Msq9hLuVjPRRzjw/D01Pq6pkqnX
+tc3Q5Q9UY5EiNHbWQDK6FY8PgvHlYZroa+twMYrbyzmWZLB0/yE0kh/ujtf+SU3N
+yznELfW08Y40Mp4JSmLzs+5SZCmO9TgWLw8M00zKkleXqVm63FZ9FZRWh4CGAfUn
+HZQVKsz2yGRLgKp6buQHGjRORRK3S02l8izi202ZBrLN2nH9MmHWOVJhujSryAmA
+MWlgeKvezMfBePmiPbP4WSpS2U58az9lDMWetDKpBgyQckg/j6Lx8jQyy9Ygn7wB
+TPVgTR5gZAZH2dMGuxOO0f78+/vtPf/lV7/++7/5278hX7xKjqoN3jmY5SEUAkvt
+IVdNcEgxODbeZQdvvHMa/8QHha63ravALJpTXdLcZT/sIYJK+Vrew6qyPYCkFrK6
+8KvcTOQXaSg2pZlZNOgUJpyc/af7dfnKTRAnuGjIvboeV6BR92FkXzj1AGysd/bS
+Ez/AOphwWiEGaYHtsUAmy4LcAQhrWVKeI7vae7z4iU/ROJKmqq0spnceLMmj2T8Z
+0FOc/blw//If/ua/vwY6x6PBMMq1LUDmvLSgnawTYbtLzZguQEKfDfTNR/DC4VeW
+nb0BdRpbKmQ8WGk5jAG8vHwCuUB9O9qh4AZPnbKHvSo1KpKijYwLitSejQ732Kpy
+LHd1TuBogSE1G+KU5lepvnqzjpkCpb65ng3xzVdfS3L10nWYMn9IOqvTzAh5Qdag
+rdgIy6j7qeDePD/KetIJS7OzJCXLm9H0GVSv8UOeDOv//N9/9+tf+V98vT2SmP0C
+FarRAiACfbVqHZazewaHqLfovXOQix8Cu6u7qkcdUpCCpmjYchsG3NXDZiVaDC7x
+iQqkM8kuZZYw+YOYZUZYJJim0WgBROp5zHJricB7GTbX6KKnRruipmdpcaiDLetU
+K3dV2v5saE9fXlhE1w5emrt8Th18gmd5ZVYmeEPVGoISnwru6RNGMNXNskqAk23Y
+icw5ZMTES9i220fhvWM7TynrUrkn4RlX2Vbehxw7P2Cpl96R+2GrF6J6R1fWSnww
+TUP1AxGxs4IrxbhJokzEGdZHLLM8jmHx/HuAS2rV+ZdvqTpxMPiHBB9a4R+XVH/X
+9UFnz8Mm9I8NuVqUqbMMXsrKmwQ/lm9A5vQ4mHcuovuKkrCtUSduLR7COsHxqlsR
+/xggtJbzo+x7x8XeRFY0W2iqWzAWDVYbVsiqrNtQ+6XQfbce14+e/PNscv3oG/+I
+LtePHvuZNtdvn/fd+lw/fPTPs9H147fx+U7XD5/7mVbXbx54NFwehfWrIXUfUIwp
+D54hp5zDlVaDoSzs5eDR24DazMXYffN8KDPUW2JrcwBLwhi2g4zHkPcy6TAZo7my
+4LqXjIxc2sAK1S0q74ZrNokoeh2iyXNNgOgQi3Qg6yUNuGanFbrIkFfgrWaCA/uO
+B+tYbFxNlt98b6ncSrUCdl69dEDY4fKTUaG1Ued+3Uhh80oUv3m46AIwbYMcnQQk
+JQpfrISFjtPPdCmUpyvpcpRmUlvaGuvm/ao7g/LiZYQ2k2HbxJouRvEk+Qm7caGv
+sGC2Gl9wM0mLtzTryKJlDYnGSYMU5rOlJgU20BWFjIvJs7pXkfIU+ZFKTrhZZtR2
+q1PSSFpY0jsyrA2NbPH3gjKylxiqrmNYKRcDePuV5zBbQiDgLV1p2WrsbltNFr4s
+ySSR9Xux7krsTm95GRVrc9hCH/0JPEriMlJiyvkaTDndw1J55EwhrVfr2QENgC5Y
+vzTpHYcsq6qz62LYTkKlQHJHTFoyEqpZVqeQUrpXW9fcKmBm2kbpTrKUJsRzzA5X
+pN7WKfNWiFOAhxAMs1ns0vyivCUryb0m6YaoSdglX7SapEQmqTx52W41t10M2+lt
+UJJql5Sd8VLY0oV6gq+23uSXQG5Q98bYV8J2vu1ucVKKQGdVCk7ZU09A935v9SmH
+S2G7uYolTXrpUKy16mxh8i0rbJA/cuqhKD5CDetlbHmr/UmylROUBZvpcJ/EQAkL
+fArZaGT+xzz0KwooCGYPgeOrdChoA8WI8OWyVPa2CI36JJ3UjPrwG4xakpOnu659
+ZpSyGK+0BkE//stZde5cDNqtNpiXI65cjZryjdkQyg1aTckCcP0xoABlGVdidjK+
+N8QM5DtTDGlR5DVJbDa5hrpt3fVad3NC8Np1pratobN/v7JubIbQyppy6jVH/qwa
+HJ7PVLxvP4U9A+09LlOITWJRRKKouWdwpwAJeahINcB2uWNSWMiVRWGFgcJRWKK1
+S7OW9RWjLHdTURMe21Yt8cFIyxl2JLeW0YUHKd6WHWwO8bj+TN278+2tkU2MLm9q
+ClAGs/iWmknPTawvaxjP1Hy5+n37EbIP7rqGHJXvT2mheFt5aehoo856PcQvVPKr
+7bvUn7P0xPKhESJP16abAC8fFg/Jr1Tu/Ux4z5+Q2Nvynwbr6/LPlB00Nw4khbxO
+6S17y87LPVrlKxCpBVWTfg8I03m1Q6brtgE85ao1tKWN8p3a9MbqasiMkFZTS/ad
+XwOehtPbJGeatJ4J7fmbA/uXtD5YOE1NrD2w6tWTJm13vgnfmvU/roOa8+NlWZUk
+9CEB3q4jAkMZkWtRtGqFuUYszi24A7ShMRU3itxaPY+LTcimmKQ6E00iCbqryfbN
+01nGW7JVfkiPfusSlLcuZ+Wpy58JxvNFZnqSzCgU0dWag7UX9q05ZjulLE2x3i5R
+yNv0WSJFJU5vSYkyD8oAIBiykV44yPHwiteFRZIRzVV68aYFvIUt0jZ9HPaQYRb+
+C7yjRF1KkLgtuVpziWG80V2eANARj2ZD0QtoeJo6cw9mOVOuJd5TM+7MmXcsF+/u
+KUlqRMiEbhwKbT7r2FqXnVf34+nZEmLTCVc6DkkCe2tIp5MNShIQOTBGUrRAIO8O
+rTWxEPam9N6UP7Ns7NTUAbqfs8UmX8MBTGiWjDw2/15OV2rVyvhJg1O6eJboBBTf
+XgU5Z3nkeIjRBesn3HS6QAWqUG9JscqCAfxgqwTULwTvLDZs9d2hJ0NXmbLyWGZA
+GSureLxg/wuh+6EnF2wn67IlxTIWNcFqOjsqsiOrdmahePuuZNSHj955wnlCG5Ui
+pjsnIIJpM1MApC4LpmB995ynWzL4YCtCqVnmsMmUJRURd48aAZdmRShsSspniptS
+q6lKb6Z03z1w1lT+IeMkYiJRmaiu0tEvB+6Hr0y+keJS1bFhkh1tZnsPSR0vef7x
+NZrjhadrcfvhuRCradSNMGxja6yUvNoFwb95S7DyUthOTbkxSdgwytxpAsMA7J2C
+RchIdJGCPmQcXny/GLfTs8nEMUu+Tv2TfM4U9C2EJLDDwSiqb4GVqKun1Zx6BLrk
+hJVK5ezBb8zHt5LYON9CbTeVTSftOoIWA9nMtiH5dDUldvnKFCdZnQRaes865uPv
+bCUCpKZfP6E0jVRWxUaX0xxobGkdi8L1K5E7PXgdOlihRk3pxkDZy7xqyZO5LjuB
+a6E7sTbJDIEqFi9G4sWsZNukizFBdvwLFru6jVex6enZEADzMrgywzwMWPgUG4e0
+axd15GhfzpoiClIPyiXxHTYA32gfwnZ1gg02JkZ+50h8ioT+daW/itT126HVXipM
+cAqxmpE16ppJpNVfTZbnBuhthHCD6ZRfaBZrSm01JMxgDEADStfkUHspdCdOuKvN
+Fm7pWJ5Os9LUTgpUP/Q+87Vkedufq9NlI93IAkhTEwY/XLI5RpLaWb5JbAiY59XI
+3Xo3SFujwLfJ7h0OBHPZm2Is/V0JZwhtpOklnRKbDO2HgYbKqynz2vyi+Anzqudb
+YiaDCBtNmSS+qPw2YBP2izZ77xopTXOSelw61BPXuMoKT185ZDVkN5uAm2XJVsMK
+3He18FcvJcY2ysMro2+eKwkc9oVahBo/M/AeLO9ji5RIZfZa2G4bdKuuheC+1bOV
+dYC9yW1ErpqjU4qFt3WXcRWenCWY5Vkuviojly5rkBFVOZ06iyNZ0joNrGrka0lU
+326pgdkYZbYOXEqhQyiseixXXsWRpmQPvXZMgiJqaduTjN4EPOGyvF7yanCwBN2y
+h6uBOzVCt2hZI8Azki8ZgO3OWyG/OUvW14QY8LKncClypweXlLocOOqOWf5Eq/Rl
++J5sPRcvXhS9ac/10kEcW7rkPMfqjUjXl4dOte8HyapBLa8ee755Ontr6EglaQyn
+eXgCO2WoC493nBcIPkHFjc0afKTgZtJc76aRqqAFbeuOyRRN+En4xlsQeZaTsyer
+G4CLYXcEdkKEZOTooTKdPO/hOiyYMa/ePbz51tL1tNKhci4GaOoQFViaU3Kyb/Bd
+E+qyDb4SwPOjm1cHWJQ/rYyxV5LUYGNBU/Ngee9DlatKxY2fXzaA3uqGxKlP2eU9
+fFtHsoMtz069/aib5upHATISOXmv5N3ULe6QABmcjczCommhT1nOZbZtgwvWrvn9
+ArVLhv+3K8tJ04QOGO6w9sy+WceN+JIu7G7AGS33EbfLTssw91Ks7fzdcMfxEYm/
++hPI+uri6BTrLhMUJ8l7HUDK+k12SjnIrehdJnH5c3LVdNuukifM04fG/1OLtrgU
+afha2L9t6kgyv5jZ6MLfgTPsgm0AbnJVZ0da6v2WAcLVaH/7CUZ9TewyvRDZk3hZ
+y6ahswNQA69vwvghh0WmiuxEIjedrplaqSXwl71cvAXoiqTwBmSNNw7Q97xlzVHK
+GMZCu3uPUad86t0g5qPrJ/hwNcjffnNZ1G7vYTS6iU5SWtmlHFY3JQJQYDtS95qX
+Ynun1Qj0rnNmycZA6BzUYJCtdIEkQax6LaT8ua6Vsv5lfR3nPS6W1aQsk2Ab69QZ
+VtKdpS6cTbIzXI3nm8dr0jwGNSyDWHlkldQmSEh6zprYOsRR+fr8LS41Aiy1YZhG
+OsZDjgZ65ZRYHXSlQAqm21t1nyzWUi0agZDQWN/QfdlcDGCyq3FrlEsCGxeD+fat
+qBnHdeuBWpFl2LOFjU/S9O6HbfWSNvgolyL55tnQhC9TgVHNsDMZ03X+bjKEkrKy
+n9qZN0e0Zw1COdbDznlpgx2iCY8iPb7CEgQS7Gn2bKzJ9eQ+fffzkvVCrmS1zO+K
+k7TsRgQ0QrrZE2pN9lOiuEbbb3drYJ4anT16GMHeRlO0OcvmIOsQsuUl3yEv1W9W
+iSnA3Nx2ED394pY5Ja7dS9Xd0Hxy1777O6RJ6vTBUN2hu+IxlY/Zt1LGAVmv3Kg3
+5pk9/O6HtbGV5uDms2jmvQQSdM8b9CEEG59P0m9+jCQszDzsUd3KslKR8QX0HAhb
+SmOT7eSz/0yyfit5GdeWGskXYRA35GJOMkybvCwaAyiF/Ghkx1KLNYIgcd2UNWcm
+LwWncffkilRMDg/6Mcmj0kawlBexf5CbH5sVQwLsRW3Wfqcipy9ZyH4iab/ROAXi
+GXVZyh4UomIdZV/oXoN6kj8nPFDN/XTyfhOSrkoMEImVFLAymFRqJaIY8i0Ln939
+L+jXFEuWdIe2UymbjJoDXDLKsYa8KwRLYu2f3/WvE5KQGqA2YKlLRczuro08BMsW
+FFYyN7IdM5LPAWRKwLkIwGoaeMaqGdUOsyxdnVFGd+ekclkjhWFs8BU4GWpQNyc7
+cPlp94iSebFBOOxH7PZX0z8rc5haNPS1WXTQg8p3yzqo8Vl2q2629tld/iqjStkv
+QSJARfRAh52yqoFDhkLyfSrUL5c258XkYOtbU6V1bY0teZKh2TBQjQu4vrrMl9mP
+T4b77mfBdWT4M9REwC7U1XbWYImaXF3tptt1DLvFqAOmaLzsACStEHJW/x6czNsh
+UVOzjnlutj0obWtogAKfsttJhUCtH5mgtFLqLvyV4pPuc54M+d3fUKXydHhPdNlK
+zMO4VOO4LmbwogCIkzzeM2G/+0FDp9uGlVsWYKU0Q2gAN8MAttgPnwr9a6KV5Pqe
+3eRC5cxk1waTzlLdKLXKUrAoDX8u5C8H/dVPHYsXNmSvis+2Ms7SqJvrQJSiTxlt
+52WOLXx8H4n37JqHBZyanVueWUJsTgMMJHBgfZ7S6Za1bqhaJ6uD3ARmB/9tNMMv
+LRRfPhfqlxDX6ozsjGWaJZ19eC5ZSPOD5Crpunve/7afCPGrhWEkdbmiYwGdTgdJ
+Ym+1rrF4x3ofvr2dyCPd6ZBbttB56EbTJQvHiQqmccbJ+ZaN/RFCe/tIDUU2W52P
+/VDnshXW4QuMTZ65PCyMFUtJ4VD66EGiTlS7HfKQaEUzltQ9t+5q7ARBqo9hUF4l
+qKUpftLNISOkcSlQ9xhAzOSyRsU6oO+jG5q3XzWxMGRV3xMIGCYDM6DW8lBZrKs3
+bca2yl7vxent8zRwNCU22EhBzWpWU7yQVJQHQTcPw/J1wLGxoHUp4iQBJ2l5jdY0
+37uVwr9Zakkw2V4Iy1ffBZaizXJXrewIL4xUAXkuOy+nQnZt1hAkebNJga3oNmFa
+CmsQVHOKJ+kKsA5q3zX62tSqE5dMA8bU3X3XgaXRYP+KfpPRMi/Bz5Qomj1eCMvr
+V5XL+whEExKlIyJZTu3jwnVQ3nPJslWe71+YvX3eFvtjYyhpFe0WFvUmmydbt+Z8
+HoblZT4PwnX0/MqnLUIKyS3A8yLtN124ADqmHBguBOVlanIelu1b8nmSTO9F7qeT
+utTnQVad3/LY3dDRIZtWnSNoqsPkUDXaR96trjid8ZJ4TZcqhwE7Ho2LA9g7yX8Z
+ylKpM11yHcGaETz1L1AsL4TkyxeV+/ehvp0pU+qk7qPnKh9D8hnYN+q8Izr7KCBf
+niZP0H1YY0PFgSZTXQcOrgy0bc3Hh+F4NThIbDPKqEQtyBlmtdayvBmapAM18GRz
+rOZKPF4nHXeDl4L9eUUyVqsuyi6m2yHjM7jR0CUXPECS46upM0vaMJZd3rtOe44T
+NKpIC5R4E7pMLMzcTdOn0EboepLwu3wlTD4k6a1c4UKECfl1JSCvnha9G4lF5eKs
+DBQlxRQIsG5/DQVfYwkAovIoIi+PSwIg8qGfJK6wOj9H9nedAiqr8vtH7L//7Z/+
+cskuAOLPi3VWHXhtzaMDCgJgc3JB3lJyOn6/6/Hqx1BsIxS926xrERa9l6kCxR/S
+N+QjDNrevrIkNKy8HLuVWPLS2gxJqNIrESa5fJPc1ABbpxElXll2OBlOMGV/RcUJ
+y5M3QuDPKwd24GJ6R1zr8tdvQbaRTU3/ajaRxMY2YfgGc9U8egJIVFLXvYhefkWd
+tUFe2DXU3eUauAGfymRBvKM8GeZ//F9UEfca5eVZ0TWEUKBXLhk2eZ8anTQytlhq
+XNeY1tNRPn2KLzFuCmydUQvUytu+SLy1yD+tOdb8DNRwKz/5quMsyO0URmWD6kxU
+Fr8JNDg2X6ZBhKpbGubX0a0G68LUGBLFe1MnLU+FufIIdpmcHM3TQT59+1TSyEf/
+pTqGVqZw+Mn7l2u49D/GCrmn+7jw4kcslhFISdqbHfxQ5CkiAds+hGbSfhjiOxNg
+eVbBS0i0D+T6KNfLeRR7OUwtSXQBx65E9tuHh9T54dbIqWXv3ciSUgN3JPSQAX81
+GP7dNQVZKLvwZFdH1qbrO8QVlrHS15Gby+7y2BSNs6RgC3TK49DP2rqpNuyoTO3K
+QxMP0Grp374n0/XgS1eN8S025hryxGogHClCdIiQq80Y203RbcqjON5RwGV5G6Np
+/aWpxtmkvcMrriAENUVfC9/3m4r76NE/07G4j77yj5mL++i5nxqM+/aB328y7sNn
+/0xH4z5+Hz9iNu7DB39qOO6bJ56t6kuTcoLfR7dN083+bH3AdJUpZ4erNmfenYz7
++OEyipZze9eNWFsawGBZOE18lGlgEYSOWmdbZkO1ukDbQY2PFMNtkzM2JJDOnpBw
+d7htZtZq08DQoMh1eKCmfdVOkIJ3S2NAA4hpm+asx1pXg3f60onstbIGE2KGy89d
+lN5k5bYcWbl4Qz6lvlyK3unJUPbMgzR8L4Ek9Y43YDe5RD1O9y2K7zzydjBFAtN6
+a1Sj7uXmscNISzknFF0HF2kymXo5ejfPzodKodpNKR5VKFR+4MaAXfkPK9lkJWX2
+pVTDa4h8Cw11jAgCjd0Vyals/suDXeTh6Dcgt8HM1fgXXMxqGYDn18TTtyBZ8rOq
++XiDDC7vvJOQppW3GpW3Wit5TAhkWxoekWI4vFxHAoDndS12t8r0W/qsaqTcdugQ
+ma0IFSzlUHPyF2vdqVWIDVCkPgKeUBrLe4D3jWQZJu+iA5Ma/KuMy7G7fXgCwRpZ
+U6nPS+t5RUlXwBHJSNE5rytBZWk2U/JZMto66ILcq1WLoPDPd2m9dSfNqpV8NGFG
+qMOUniXYykrma++hk7LY5FXmKElwI/bxvL7zbr/0qNG4ErwG2ebMq9bESmG3wI6r
+lgVvC+RyreK9acuyDnTBz1qshU61kCx5qNTR7cN9Ma9vH3nPxyU2nhJsIoBT53Nq
+QAxE0VrfgUNeEmnyzrsaxbteMUUC2lKIZvstEuPWHVKW7wgpZOqNyVgnTymIHgYH
+Ux0hRS0BkvFtMi1R3ZG5qm8SY9BI6jhUj0ZMbkjax1Fb+dJ8ffGWXlggX/rK/NVg
+3vvuhEsNrX0vJXaq6lrBeN57kQ5X3KRCu/JF+HnvA5wDj2tyhnQFlpGhkHTMAejR
+y4PgWmhPPi8s4qgtEEE0vD8KTpPZKOV8j7XV5wrL9ZeT6klKusHY1HmpZ8gbVGJF
+IH67AczELbtxRJIaRNTI7rDDbR1oXfMOachoRNcw8hKXKTzZM4xa4ZRjmwj1UeXK
+KegOIso8qcEKDTjWkRlnmldDeeqGBzLL6t7UqFOQodMHqEqZCepcwKj20EK+Bmdu
+H9wz31z42lLEQaIl6YQKWsIKtiNe3JWnznIIiCiCxifyXBpR1SWo02itB+STYqWr
+eRnNnKp3MkEd4ImlTH4ulpTSKjE5RJhZyZS8vNn/5EIHre+jyLabPCpnn3XoELoQ
+JKhUS4TYsRSaNODVASINOFhP66B6+LWTqpV8W+VJzRsKoPWroTvZ6tQmLa3AKrZp
+6zTaFNsohp53rRt1ikRP1VwK3QnZuRQHaEtiS5LD56vKyNmQT4NU666F7lb5Wcej
+UXqfcxtWcXXUJ0AzrAT6l3oIk5eeLufRW63q7aZxMqGC7x7TWXPq6oDibVaetrAA
+1Ym2CkxYEmNdEymWGrcMNZOUmNWrKVIho0zSbzWUQ93Eq/VKemvLVc1tbClMh1Io
+u8YEwF2ACl0GMjdf+SiBsoS0fBPp0u1mqLVNg3xpwjCDAmfjpbjddqzXSMhL18/k
+wXoPeQwL4dYY4DvjqPfT8MtJzlclog3ylCozXFjgW6abQForR6hsUrKAEHsdiN75
+iHCISIyprpMoBybgXegGlLA9PIVCHHVcsovOZrpkv4euhby6VOuC9Olg0sHbd4GU
+ldrUWCMtP1lGsOLUm0westC/4LLTULcu2QMUS9Me7akqeP7qMwK0yJdsbxL3GsfD
+jfrv5VO3eTNV1tjzehF883zpYfHMKJliuUD0KnHQQ9yYNz8vUvrzkKSm0iWHKOFP
+qtCkiHcnQ2IKjLzYN6szl34Zn74deYWtdEBqBsUArXk70DpP/mjEBn5YnI7XmiaM
+e5I6CtzcG5m8101BijFCU6EWQV1Uh0kUVGf7Kq8gIze5Zi3fmW1ZAqBfeg+LLNKn
+XM5gnJeJ/ZupVHYlH9VAXuQpC2jypAEpuwANotTqrCYt7TVuf342RVTiK05ae8Gp
+Y9jpVDov0niPJl4L42lc0joNk3TZGYUGvnOk0dEhYLFqpJa/UCjB7043fvzwBURK
+TcbGVEMTQAdsrWPAeAQw+9ZJUxj6L5M12B9BIbogtqx1NfnAHeyhnBqG1XZWQ7eb
+vsuQfAoY7QFFzDV22al7YWxjYJ9RD43xMi49fWk5bxW3JAgBdwYjqLNqagCvwUAD
+9QeoQLG+FMDzDDDf3xmrSxqQjVZhpJ4AGIuLfbh6NXz/csPitku27SJmHMRB09KY
+ue1kVJKX7SQmAM/16N0Opwa4efZqIpFnVYQYT01TFIjGikmOKRIWlpGEvMqh5P+f
+urfrsTU5rvR+kaj8/rgcwAOMAc9IFybsOyE/xYZIkWDLlu1f7/W851TV3nV2ncpd
+wwYkDYZsdvfJN3dGZsSKzIi1itxv0ini0dBcdBi+yptNZSRklN4LYOhkIQApjKip
+Ze0wHVWqk22DhkL7jnK1Sff9sfFuulNpyRSO6UFgyqDB0wM8wmNF/f+piEjvyu6H
+trtZ6CpXIcQl6MmthxLPYEtaS1vPCpy6w/T+jkbHUVzkQzKwzxn0zAUJ0KJT3oZk
+SCjwf/jj9P5u8JxXkkuQV1zCh6MrbZPvobWAdp1ZBHnlRzKXevQz2S00uXvzStll
+IyEbxf6geAR/ChQhOyR4uIUP5DqLcZRwK3fIyAoKrgrZ5CSAXuxIOtrhOL2/k+WU
+28TRU8vMm4wCb887WLqBbDNLUGTpKLaz9P4uq4JpqQsbCMpljzqYTrWiIY27ymXT
+ofnu+4B4/xUebcqjU9FahazUVXuaABitAQDrdI7zm9F3XV20r7sOyJRjzkKMmZY8
+bhOgwy/IaKMeqHS9+sB7hFnImluFHuCEDTEgUhCCwEzwSs4iYj8N8kWFRiU5ZsPc
+46OWw1WYZaCQNps7NoXBYxPeT5suq9wo9Y3aOKi4pzZnFNC1fsqNJ4TXSjy8o3m3
+JOPSoq8KG8OYxtVmzfD9B+VQ+bEOxbdBj/uh6Ii2o7fcKMg1AUEvP5XdI5tkMz2K
+9UOV3Oe+pSMTtEBuslOiUFiCYs2jATaVFsDdYm3zpk0BNWqFTG2oYskRU4Y0qWaq
+vBkIhmobUP05y1VMx2JcxWqdO1b9w5QCyqFbYETDdxtW+vmT0/F6sdEd6hnukiZG
+PVafvlhekRUoW8iz+PKhtY+7rwTGe29INZHrCSkErmqFL7OHK+bQ9A8f+y26KEov
+h2ygs7Rg24ZvT6mAcEk2Fk6CjzjGTz9Si/NZrnJNcGFR4Fjw5c9Bu/jQRlsuwO7V
++6ZwV9mSRQ5bIZGLScPxVYzvMKArxgpQmjbGpn99y0OUgCyE7Rs1NqWuvULUwlOu
+U+bpazs29sOn/upIHMhAfF+oaKCblYYWThGE27oU2zTmzMqPvlAKjxxuooqzK05K
+fynHn1yWe+3t0LzvGoOyPKLzIUYBLAUSorawpysNFelAWWiuit752LLve7HGVM4a
+de56UNRW/lESV+otC+rwfKVcuiY0uyLXV1mJ4yqKxnCiWwrzqTCfSDAr5GlPLLk0
+RSgjOKskocmtCR9wdRliU5bDcJ3y4cDNpfbKsVHfN0wNQoSWoguQyZtxE6bIUZWZ
+6+9t6r4UEPI8s+e7wesQmtdODeNS82nRXy/z2WuHZ+3QL53Ud61RCmtJ2yNdL7DU
++ia0HOljLbQlrlq6cHX54ol91/eF4o78tBCUMYM+L4s2ZVeuXhQi0GCx2Ss3SHLk
+NlYlDLPKJy65KHvpaQQTsZuS0dp3EIRGnFK5XNOqKwq77oWNl5wAE59yB3gARDgK
+LC1fPLn3P8JCmoEmyxL6i40K5Co4O2N1A5lyap2UqPmvnOB3hfpDP5GKaUpeUP1a
+DhJ34UtlEqv2p8z/0oTDilUInbyztDO00RzXNlcvlLvKP2TuZz30S4F7YP8EHuWb
+klJQcG0TTXDlwjp3S8dXZw9wClVGqAgQwK/WCiKaRZNRAOp2Vf2xYoJPyvtNk9tJ
+TqjaoveVNWl6EqnmV0gMcugjIy9t0rMGfrGoCZmuP2WlNtgkgKXEKSXIJxWEW0eS
+MrjH3HSfDY1ECVI8WhOT9Q1tzSSAixJrTsM9Z8L77VGo1GjL+A0P3UAuiUrcCttu
+7EUIWvFl2fisKd9tQnB4EcxRKmkhHaD/KbrqZMMW6wyko0pvtU3ldPW5RQW5zoUi
+BETzxigzj0ggQj8Br4+A/gKolalAvKAz3INCSp2mZJOSFR43FQy2V9rlnzXp/ez7
+xSyTo5Ch6RTFFlOcHFyFJEn5bTZu0fHzlGnfNc1FTztKWwGKM6Q5heTgZLBcfLpT
+J/0XjXzr+303EGNp28yrzEBOuMaqMFzggcMjUtBnzq37/gOOy7nShTgglEQvupGp
+umJdrkXZBVQUw+cI66R8tXwoabXhcUdhbqOv7DuPLcmjQyuvSE//5LLEOPgzrC2W
+Xo4F+9gGfyF9uGcFOpyf1fcTn9l6miCDgGZ1swrOW0+Ptru6NDptYKQcZzZ9PzoE
+eJofCMSmVsMsQcED6tMSuvbKk+a0r0ABDlAFLZeJa2V4Jzy1YXL5Jj6pc2PQL3ra
+nq9fSII7Ae4oq1kjr6j0xTk3kYHOxitvTWWj65YK/VhKaRRtBZ0UdAWUo9EusFRO
+bTr2tS2UiCch3jIN3CECT8Ly9NAV7b1mnRdutop2QiM9wbLwtEFfZy7UTRHQ0M7p
+YzcFPWVXiZS6cHNZhAgv1vDnLPo6PI1CSDsl22pRHi9XjiqN8gQPD99PSrl+aOQJ
+E5le1GFnc0vnHfoKbTnvqy+kUG2Xbn560fSD+JkpNIt3ujmQKYcyoSw5cThYC43L
+CqRThnBb2FbJgl/0dEzeXlI1tKrMq82cG0Z6zlt0wfMgYejs0RZGTWhkTO6NK5lK
+OSGv7GELLPVnZvvh9y9riYxXDkB0RAlQmbTCY5Rz0q7pMW33cY76g4jeajrEgnvF
+d+XhtCHZvlgFqohK+tw0L808M8whbNF6Qs6Klugst4nEZAtQ4GnLaqOfmeZlTBi5
+6QTQFqfTfijeVZ0su2KSN67f6jm1sG7vZRHj9TpIbTqqDg2VOjCt1sUAOXNlLQSg
+bNi3tJRRJqynsNehRaJCrTXKC2CcUHjViTMnpnn9/SVapHeRiZaHkZ2VI2en4DFQ
+EZJ3gcKy7E9N8zJg6tUKlW35w2W4ThHGXgpFdi8g6PrcNN+bhDqEmnT9Crzy2EzL
+v6PVRyAIDVya46KrJ4b5NmJwWynCogU3Ewzt1u8ma7HK9RWssrIuRR74cS9ayS68
+ZeQY5V+092kX87yE1Hi1dzge/Bd6QNXK/8ZR6P+cClnagm1oA9SxeBEZMmmxaxyd
+mO96dTCtVOohtEGEtidUjN/a07MyFjsySmQhfGqU751myWzeXAPdAfoZCDsKHkNP
+oG065ucm+d7XU2WNtAdX0EFhac4uvGga8rwwn9nou03VH9nk+5DK3dqcsgiP0ML7
+edE8kQDv9CUqOdr9euOcRjurFiXKl36YIKvfDUE1SjCmQtF00EyCZglfNQuYC1bp
+XATFS0RLEw0ekcY4wc9Oe2L8eZvN+wax2aJ+ofv2FJoF9BFjUFwQVu0zUc2kDMTE
+T63y0nQ1kgnyCpDQ1ZGX08xHavniTS/r8WPUr3846czR8mnpEkwcPZvRi5kX26uH
+M2hTjDoV0tZHDZ9nHwlOEEGwL+l3OEXcpAAcIfGfnM7CjVkPxAuhWlm38EbWqFMU
+TJ9t5KFYrZCVraEC1ck3JsUdVw0Ejy7OnOsEBsJqqTMaIk2we6SuLxHpPzDd4QpN
+Y7d8Ka112joTJXN9BVFBqsgairkj+YfGPPvChPVW8EGnQohqWsVaIfvNtkbA8znz
+/rd//D9SNP/4X16yK+MjlUheQbr0IMyPwG1FF7HI3mAhgdHWn7Tvu6/QCylHqUxC
+9orZIVJaSacrld+VnqZtBCwoL+vyrRGBFuUaMNFRObDkq6oCyYZayy+hMbdo5upd
+c1KqzNu/DAx97TTK4/akO0dwS4G8KSl40sDvZi9gJBepEEY9mOZvE1wVzlYBJsEi
+SsEE5Wp6xsLvPpHnUHiogrSUoiMPDfePbBypk3ossXkz9oPeKCVKPUCam6GlRYs8
+boLpVgiFFhTurbzcp3b9cegCYb/1XnMuEMY5NDicYLymjMLoqNwBTGto4GsdNS0B
+6JZmKM4lZcHegyg91YRFlhZK9IohcjBoRXQBmSA4RhY4oBlaUFZZ6KyuqyibPzXm
+g9VQIitn1awn0k+FfQtj45qjWbp85Seyvjp+bsEfx53FjZBmHxebHO2aYfEOpG3h
+k4nuxGx/u56ojwf+D9oR9fGE/2f6oT4e9UvdUO+H+9v1Qv1k5P+gnVA/W4v/iT6o
+nwz7pS6od+Pd9+Uoy7HLURCoHGhNUycXo6VntIGCoNdWmuH2mc3uqZ119ONswp62
+RgTCaI5ZNKYUHxUilBoYoW2EwGKnwmlSWQ7VS44ryyEGGPhNSkW5BEoFKBD1PLgP
+ztEjozPCN7EmpeweEeUhuKf9UOTBhjkz2n3/k/CdEirlWFvbCCptXEQiPgvb2bUs
+medjAoWfjbstF6zojFM9N2aCUa8oBWlKH8wHLwfvB7zt9UnwD5H1AbamYHuGv0Wb
+F2oQOZ8if6QQdGi1W12esYTc5Aq29tecOmykbEGneStsapMZZOOUR6fteQhJNFF0
+q7ikWOqEwbpS096Fz5Tu08Ntu50Uugyi17T0ZPGUMCFdWJ0OPK0MRD9WYfRDgaKf
+zJg+8eUFb7Yy99rgBhpDvl2HBPoMyx1M6K6e2Oxm2EmUVsJ+yUzwACffKNtRr2+o
+rjky2R0PdVbqIMyWiqCILTyqKP0VIjFobyjPso1yRHNos9uhlWxHbc+dCWBOifcO
+cggR6WATNG25PCEoW5wctGw0Ec3JXOtxi70rNyJo8ozYu9Zwcfb3pffUdBCg6HJ9
+zrTW1jHuUO+t4S2P10qE8gyH8ey+32mCvmBjn9pNDroXfZ2Co64P+iV8hAZDPLHa
+7biNW9JmQtb2UxaugfaqlHxZhQGd3hOzPex1SlkZRkInUEsKrbOJtFzCY1eTl2kv
+IrV2Zr2HX1COFuQjjNJVswLcrUoBOqW+tN4XGpi0VagtrcrmptKB67Y90rukP7uv
+xko7oVqxys+zdXDtpX0R3nsYEqBoUnQz8vZWkKIUVGQEUlKOvZ0Z8dHM664tokt9
+aelQbuwE+7JAqo591emcsMaEkxP4aHh4cNKghFawh6dBC6U9T9Nc8M6jk3hXQFgF
+TNeiPsKZ2OXDtnJja8pGCoWc1S2UVs5MedfUE2h3a8byaGan5UEHxQFlv7MZAaKA
+yptjqyPH6SZiNAGqv0v2PjTBj0AHFmKBhhdZbTIDHYKhfFkeEz0ZXgNovljXE4tO
+coUT08xT53k746qcv86rMZBWKa5nixZWMVXnHE0kOK9NOgl4t8OSZPHyo21aBQPp
+6lQoqdqzQlzaoScmu4cSRTHtqhYq3W8hzHDh7NRyQaV5UpygJTwz2e3IyKQL51MJ
+NRXjBozailDdeC/0E8ioJ3QUmyL7qOBWTZowoSnnToKHdsKZ3sdCcCjDrJ+1/5W8
+wV21eMLzij0acTkz5XL30h+W649W+QzUckcmu1cQ0YEIFf2pmtIuZAQaMwdDh050
+ct9FiKkcmOxuWOuRReryvVarCqcVpWERfbUsf3JispvwSYeHQg1X9R5dCwU2O8ha
+taOUGg4K/JUMHR6y22Ypq+QiyFBJ+TONDwIhPI3NDJVIsMFxsU/RWb+ucpUv4Dq2
+QlaAa1aeMQ6l03FXHT25zSGDRRT4vGAI7TJAB3gH9ScdN+6B914rRFi23P+ZwW4m
+vJTlyxkKT8agXN8LwI9klqfL3slNp6E8shxFuls1EiFc6KyGGdSS6T9yMyXWrBPd
+U/DHce715uUlDEUaSzLk+HllrcKClzNfejKxbmG2lR3aBeeB7v0nYHvUqdPsFyHZ
+a58J+lAiL7TPIYmJto3q4YB16JUsbScldvqD8ifoTDR6mAxXJy0D2KNfcppak6b8
+snMBXW0t0EtTfw6VtDKLBLnm+rD892Tqbo7uETYLcABduYDyG4WTsHXqGhCJwrfj
+UPd+fAX95J3t1zOF0lbFdE9TZbCoofijU/ius4YeAVjNFIrgCiQlbsqdeLBMSQ6V
+MqBVczjMyu8Hb3CtXRVEy4+e0XKOSvGroXEFEh8FKp3DEs1Gnpa+PvomHDytFUkb
+4o8y4Ujvqlyx1pBORFQvhWjlWIVttA90hOxGZcYrUlkaSHNh3uEwMb+ftPxxEKxa
+g1Sz0x4n3wQVk7Y2FEaRNsMa10lufj9ycUMoKClD36i7espTtWPD8gaqhHVivnfa
+eqsLA9ZgkRvdnovVSUIK17ziHzwKu81D2Hk3dOD5piiiOZ4PoGvNsQ0tjRwgvAa8
+DNHCckliC0cuW3ex6N9Wnv9DENDTv39dwKB7hGhop8QMCVv9clMEZODAUMijg6fJ
+lcDvMHal2aufme5uytl4Q/zUEsj2fdJG4QKi4abahMAlsh79BK3cjVsvogL9CIWP
+7oayu9yg+3JQdMAremS2t5YaBO/g/tys6MQhO0Uh/X75t7yT18IlnsRPrfY2chCK
+p0kODjoBNq5KZvd+bASClJZeIsLcPytnb3J2RefGpN0jUa0I5S95REtGYKnkUwIo
+20OtTfaRVkZBTGmu3DAImIbeOOyiPm5dAoqnRnubsedJdfEurH0guFQogQkKUUrx
+kGwAz5r2mC/vJ8POlqsSfTuUPeIyOu0gHTXVELN+7VF6ft+hIzSinW6E03k2XDTU
+KDeGAERQPPDyKc98eqVyN7ROLO1/yG1TWaDxIuyEOgSuIsq9iovmwpfypbMiVTGU
+vnMhoEgzYW+m9Dpdd2iyin6sMXK6wn81ZuO0yaBy1TIi60VJiFHmFygCEew8Tc/v
+eCB8U+ahgzy4t42l0S2feMpQEGryvYJKlnrJg/T8bty15QrhdOA9U/5+dZ7Tin6Z
+y1qMI7O968qJtnjlcmZfPUNrT3r7qwm0Z/SEAhU9z/7QcPeDl7jlu1G97ztziuSB
+DEITLtEyOSeucC40bWhjEdRFVZkXCuV4ck9jKTGIFslVIVR/WbXOICwF+uxteAVP
+FwVzlA3IBwkHloHnFZQoox1ClfcCUQGaZTTf0pa9ILQa8CUu2c0KNFdlSsWXdGK8
+d11KUPcXLq+FsrnEHaTg1J1qO2u7fGS+41YYIhv98gFW5bC1lQ03ZD5xoxtrp3hI
+XvVjW55+qWrSAaZhZXRRnnoJqHBNIgwt7Li9Ihe1JgIFhhYLhQO4UMuwytIRAR1U
+USMDxsOM0DHsyhfXoSKmiYnML7lF8ZX+fi0bIcJBeeSYJcipfGzY4/4kQ1+6UfLn
+Ud+LmgxKmtp0vq9pV7OKiWF/dESPW7miEZCmjZUSO+FogXPaygPisPED2ZH34z8s
+1IWqrFfaF69CJmEuCoJ0tGbkubYGRd490jg09uNqaWUEiQrgSUIXDMwaUJcrYhhl
+zs2OuhtcLEE/MEMqi5iwwqhFSXOvlSmoVYxFEpeeIDnFfMksToiCtVFq0tiFe3Gt
+Po39KFds1xu1m+3QzA/nPimJpPpHNq5J6fLQqsjNkQNRIaJZ1z1KPTHwww9ow4di
+MgLQsOaOOjzEJiZbbR+f7ZFpv7fI/N2vf/CvJbsauNH/7YfntjR4LcVaBP0AsTD9
+VTuZU8M++AK4AfiQhzLrQlW7AJvtkJzAzaAUSttW63aRAgkx0sNC2nNVPEVY5GEg
+ShSjc5tG53oJHYjtuWEa8sPbKg2lJJ6GplV6qTPqj8JGFcKhWR/MfLQRJ/pFiFSj
+VRW07ZFK0N8WRO7QOqcUw4lRHwyvPalD7zeaKWUXbqQCkvM+wDm41pMmDTfV74Hb
+9Lk0YWUyIXa5nhAu0uxr0ygO/jTIfvYFTp3TmcqCisUKycgNQEDdIyVESh+1RC7l
+AldJQyBkRiuM6qkLmVfVhQKewuq1hmujKZ0Ff6663d0EuwU8DX/V4NldFG1oR7Zy
+vWMMv5426dvMK/f2csWLZikKwTL1vCFBMTtncAFZ+fWkSV+HFzTQJhZe1GlydaB9
+WVBdyFtHoDrzjAP+nkblPoJ2Mkzpi4BBoOraHZOmbmVo6VK32c853pcagN6o19h+
+ov5pZTFZAxaAPI3WP131kqhYyLtxCdG4CRcGJI/JXcjWORpSohJxSM5r8tzHCcol
+y7/mtBfc1RjXRhK6QyRulHHJEivY2ucc7ktaGRGCnJs3OBzV8hTak6u0ZHrRx8fU
+x55wtC/NXUPetfgGCJtaE0sx9irQKtDU+pHp3ldll0YrsNchXOOiT+uG8iulVsqC
+IAqUx0Dq8mODvR8xTzQl9LO8QLgZBdYOxT9yilly1bFLiMcIvAydux4RFG7XO6Wl
+Itw7bnuoRcvITfcAVw6P+81FnaVFFdFIPEt5+DHW4i5HZ6EgkCejuY/N9H6mikQU
+lio6ya1Bk9o0qAVywmlJBjxTCiV/YJwffjg6037q1zmIHKNyMblh+Qx6cm3Yn5nk
+pRrbVavtOkyVV6GUD34gnfuI1oTgnYBRUDoX++cmea3vbpSIl0qZkQAcqlZdIFve
+sAtQyMUq9zIKS77v2mAJowW1yzwCZU5OUyC/dBRxYBK/1COp5xWuhahIAZlENnka
+6ZPgtE75zH3xUu+7j+vD/p8HM5XvHLzmKCQojdec7Y5Kj+bQPkjVaydkzbDVT0zy
+MlygWNXF0rOQB2qNDWkAqtzk+qv51CTfarG7FkPZMpcViHSZiuBM1r7WmR4lKk5U
+J0RsPzfId9GPGpQBO4UIea7m93Y6FVmHkHsXGNGU1lm/Gq1IPMEaz3uDVULHfZ92
+F0+USg9oJSlytHtZo9RhhSiIW+gBSXJvK5sgj1jqdkr7gtZB/0zb0KfPzfFtnlsT
+GPIKV4+9kke5CqVlFIlSB5AQxqpCS/YTY3wbjFewDvmwAqMPS9BnKp3RWQb0Fpc/
+M8X3AuyOHoztS0BMMFB/tFl59L27gHHgvUqgX0n1gb/6PmBuiuQ6EEk5mPKzYuZo
+7Spgtjw9W0h6l6Ulb/OF5QQcDJ3ePRiT4tVvQ01DFoDW6pa+L7VhxROL/FOLEKHp
+nyF9PZePymepf9+0sZnlDs7G94k2Xme1TZKcKrwIMIVk6EjQPeKCQ/mMS658Yo2X
+QnZKtsmzkQJjTZW7C5YWOb9CMcaP5vhFaf3Pa6jvU4DMO6p3grg1ISo1BZ1bFjbK
+KAtFZUFUJ/v5yFLPfoumtoAGs7AbL/oOqSChRqMdvL6Rf+XWTKLl16Xe0MsB2ME+
+apL8G2SE8tJyeBZhdG/cEr6AmVBQMekvlc9x5BSRNJIOYrMXuxa/qDzWhHj2N2hn
+CVsiRxlkGwXeEreQqt8weMDIN/V3INR4b9+nDSOvJSe2r557ZaKCkfpp3K63Dsf0
+V0z/csdShKDcGvFyl1NxS1vAupxClgPS/+I12+6vmfyFEgQZclg+GnX/sWUh2Gh1
+dJUlKx9EKEnZRAjCgjGA/BTeFeB0cqtryuyMad20GmvM8PYovO3WrjtqHWXtD6vA
+F0JUAkW3NcJRlt5wR8OL3PDXTP1SA5iRKcyXqO+kd0LeXv8vV+5v0TbDgTy4sD79
+gPyBIj31VWm0ybsWGmkChg5iq0ciPh+P/OIw3kkXlqSkNyplDcpaixW+LW5YHQnK
+BRzIaQ37mL7p2W+ZquTGLWenQj5iKdqmEw7ouoZMVzP6lTMrpEO410NFbo4aQGVn
+NLu6GZLTeRf6dBFyJScYXgXsGtvETeeV7+VlEqRRCkeCGssjkJgyCtHjOVM//g1K
+RDY1OsgAQs6FPojSo4uXvG9432wOO5knTP74Q21QTDKh7KTsXsGp1sllsfZaKXZ+
+xfQvLDOCdHKrMF3zVueFQrSdVmhFEFU7FzZJ39zXTP7d1AKfCg3COy0oOiYdyerz
+7l1hDZ5ykzsPDk2oCyWfdvX/rImo3txbKDlt+clqCgVMKBhicIXtiNidwHeHfq0u
+NBkrbxrCLvKml2QsJF7ta6Z+EaEV2nXk5cqc5UtN00mGc03Ji1NKSevnFMD7golf
+XgpmIn7mMhDanL5k58ukUGU50+oXTPtP/+d//R/+H//Lf/2n/+Uf/vvvXz7jaNWb
+ZQqpeEVmWm1GpD8my0MpfkaXu1LuL9n50QcDUq5pIMNb9cPQWer7koLWjkKJ0+sf
+aRaVWve06oJdXxPJNfrsaVJZnb3nlLXkbnfToabXBR5YHvQpDApQGU03IkrEZDDd
+mD6FfFJzXzL6ox8yDAoI8nwCAxkOZHNVUe6a7RTMatoY0/sHTS9f+lq7esUDcmRc
+m/tGv46CoJtmoXP+1e1w+w2eEq3wsEUPVMAzQsDQyuTuJDRTmq/yuD58fS/cfq3v
+iUSw8osWQ0yCuUrvlUArt9COhNzUcoWkXFPLKoyOSpdCwKLBWnEncIWFdjcKintT
+c0HHRS9gPjoFxoWqHHonCrg1xUGJa/YORd+Vy9c3wt0u0K7ktl7pb69dTsDspig/
+8ULccMDp582DCv/nPyX4pl+p36CF6AhF6JeYym+U0xOyfWYL/Pd/+B//8L/9r//7
+f3sFEVfl6o5NvjOy4B0qfLmAOAy9hTFSbypA/Zztf/hMKjrGtngFYx1eP2toG/n1
+Ppy33DkleZy8w/L6ewshGiVMjdcwb3OvmYtRiEyKMmVz8eI4Lqingq1t+sMesscG
+pRR6zzb7AAviNlqq6iFueMroP0zfcjSUCnL/aLrwROYBl8Zy5TlTmOSCQg+4xJ/4
+xqaA2HS3B3qMXNFO/X5bLC+IPT9l5htH8iIMnuTWddac/L1LSPeZWb0pqwhsZUjw
+NoU2jwspn/pQczqrAlsUjkB3LW+ZrstAs1owXd5zQ2ILL0JxaHt4JVqLasEMxyoK
+wFOhIq5JXYbAJy1wg/qwqZCFjnPc0fC3hU+0QT3isaGUEgV+wo7PmfrBD6ihDMOz
+gaCEwxkut4UWlYmMrNzAV09d2XoGxT34ylVYozyMJwqjTGrLpw/okVYtoz2Xkz+I
+G8ovFY9Q/oZpFWqkACW2ULK3rfNOZMFf+cvmfvkQpAp0fCj4TkeJcjWes9mHuRCZ
+V0I7lXrRK0JFWE1UzXJu58yKajK+UfgeS/hvKjFN3F/lgXqj/qKi/Niudj+LQLWS
+AOeTto4VIHUtxfZlc7+uFJrHrabOp4c3giEBKu7BfdMeaPXmYUv5mrlfvjJ7ywHC
+v0S1djJJOWygGVTZrcL6eNbct1spdyjfEvzYnaes6KtStS5fmYiXMn3b6wPCsPOv
+1AvqCFn1huZ7nMbQUa4UwRnZVqcw8fiTEXWQi4+pogEejBBdWGtvtyCC5LlB4Eix
+wDkaKhP3Wk5eO1z0U7FtQZ1Zp1CC9udQ+tf6VfAwnjf07exXzWn2qExjUSZgrRGm
+MaFaj3r3NjnqFO4Sn7Ty7Sd6WQLpWTDUIwzsbNcOork2Oq16zF8x8e9fqyecAtxF
+httgwyEm92guhW7N27lMV/ezly3vvyL36Xom4sJ6QfeKciwF2DYF0XjnhhNp+TWU
+L+Q8KVburkO7rARxoNUeUrroYKFh7VpvuMG80F6IDdFsUEZrJcgNCb2EGiYEOVzn
+bphOvmbil9krTdBKV/2fMnzNVHmUGavZTjsRC4b860zhCyZ+NUNOjf7obKJ+rAL1
+oghxtt68En7/yZXL37TR+acD/0fsc/75Sny1zfmnoz7f5fzDcI8ayebW1oYdw28h
+E3ksRTmIFHlbRR5WoIea33pktoctfNlRR0LEphI+ea16QaZQqUaBlHGnSbty7zpq
+BEW5mrE3cVWgaRbF4u5ahDhZlrd0I8M85ZRXC+R7nq9icEnbC+06tK6Udq0lREsZ
+zx5H5ns0cV4GdUa4TddZLJQvs1V4wTLwzcmZ7JR9/NyMjxv4BL4q9wVTK6OdXZAj
+sihmTwWffGDO2xpSbWCFs4yWsGCFh69oCYH21EOKAiWA7mXbPDLjXTOcy005Kg7U
+K091stCUe+SWQ64VIkZBnWS8cludzGZLpyqDLhWXEctUpHWw75Uc2tSsdB4n/eQ1
+yPMPQXVFrK4D6XXWYO1DeTRkzjsvLn0dme+u31AZjZxEkzPW/JypwnNKaTdhec7h
+WnZakBg+N9ud5lmibVZr2JzXn07dKsWxjbv7aobdB+a6bSwThLwyCSX2iiSZrneI
+DrVKcbCqSpN0zB8Xw/904IpQdKASScmngEu4nI3wXw9T6efUtshO4IrXb+FVM9B9
+GDnArWkS3W0rUSZdSJ9hxTTKreRfrZ08I0eqtT04f1GBVFGzUJjqw46gnPZxCedP
+J8yjLLc/PrkwDRQ3WW5NeMBdHOndwyIKYvrUXHcMDngQnka/PT67bLzwGi/B+pCZ
+J7Httm/PzJ2popsUprNbFSeC52k07Gnpd3Ss15G1bse1qBrAluyG1lnL2HVovewv
+5KIYR3urYAXkVNDGwcbDb4F5HGmIqUPjSEIVCYxgR5pykwpbgQdr+lCsr+Xq26WD
+pY909UwHwZvrvTG1I2Pd8iBoo+5mJyoEbP3VlLqUDXFPrq0UooZR3ve5rW6lzdBF
+QH3O5wslC0srFskzBofKoj8w1R3fzuryO70KI3GHbZvAqh9l9JIuKk1aIzcKwkfG
+uhs5+qxf3JW4N2oyACLy/3TVE+WFQ7TBNnKfyXutjSOBl12dbDE8wrux0kVaTGcv
+Ok1MYKmOkPbompO5CEY8maBToiDYsBPVxLKtcnidjSNz3c147K4EVU51oCW74Rq3
+8L2FDP+O9oqfCjvx4HDdUxqhEaO0mOcmuYxAQUCWh8iDmzFXT6HI3U3CC8yxii5C
+dgrztspyJi2tR6sCkSAEYXB5xhDXOR559BWthtaYONZ8ajNFGt/yhDxTK2YQZqxU
+pAlbka3XqIiCiEagsbIp74c4r8ngiisQziqrLoIjqBlrx3WTlRdoXaZ1+uMbrbKx
+glw7UjteUPQclDyavaH5OBn6nhxNehCvokNthhJ++pyrkpxc/CEyefQJJcZaFl5p
+riYd9PO2i/IcVdi6pXlq4pubwZdTxFXspUNnETVTUMm8NFLaYDNPnk7pbS3h3MA/
+fkML0JDF9QbCiCJ8LMgYaI8rdEjbdXFd2aF/SehkBOjhYoAX17qKbKB87+Z6EV3F
+aqnFGrsoOCmKkHIMBa2g86+9WHgY3RT2bO8DfNQyyLl5f5w7Aj9eTr1DwTwj70SF
+A7GRJUwOQb+elFkcGveBARTFS9XONqkpzAseKNyjMbJnlQniSd73ruFVOxDGojSV
+aG3Bj67FkUO8QH2lCwuHa/1Z6nc/tnz5FnyUIbk/oYhWjpKhuWsZQUlddq245AVS
+/I5Cm+hz6n8ry+NF3GvltJGVLESldi1pNHCN/mhWuuiiEEaENLxQFp10iCAtK8ob
+07BVYOks+7uf8/JzaLBlBHlbS1RMCT0VYyFQ1D7z6AbPB7Jknw2ssEOHhlcgb0Ke
+3OVahAf31qYRjjox3RvV2abCABwffawbIvS2q8ym/AM9d3g2dRg+v4d5P25WsgZi
+2YUeWcEaJdXbXsqtdipT6Jb7+QYdZkCZRH/DUp2RABabC0SlBPALxEr9hLOpEAJr
+8FyzUYQ2wYcynuzdDRe2JfB0FSmTzmew5ma+TDQq65RHN/AhyA0owilOIs680HZB
+9ya7A3O9DZooCvY8CptG9NjUIhjlZ5sejD2+ECN//5o7Lhp8NzF4pIoArVmVm1Hf
+jCnOCM53qGC+FCN//6bU3VGVDpP+76lUoWxlqrtFehVTEX6MUzh0C5UKQ1xMAinG
+tpUQwZQ+vUmZKxA0ypCWkDueZo2UkZYL8vWKr3JADbVoo82m3L74uWiLn2nV+qUY
++fs3L5csar7onbiijbZMVEiI9KPlhASL8qFdzPMx8vdvcpdKnuSix0UUG4wRLBHS
+ErrTXm7GPmPie3SCMu3Isa1BZ1noScix60Pwc6LUi/ilcvLn7Hv3CUpJNOMOhQCX
+GitYtBEEk+v1xFKEVxFxtOaSKVg6a45nwiD0mp1+qpODEyJLpa2i4J0FcKNCeKZm
+0ciXhAVRtRWIyJB68bC16kVyB2/Tes64d1NvWmuZVV4vCc/6yDPQDmgWDH06N9pO
+gpnrCcvejQ9rGNehvRefN+gBOmd4K8mbnXvWrL9/g23yYIKxLm2F4Jo1WV9ps+kh
+ozck0DMBQ8+b9fUThD40VV2uDu1Z5OWQcOw6p9N7N9pEktm1ScmM6XXJN6deYLOW
+rSK3WjXAf5yn/lbVMjTZUeheCx190a6hVTciIwA5/HQdZueuYLxr9f15s75OXaFH
+GYpC9CAe7KBz1HpZPZFhrgWJr2K/zU+a9W381cjMhoKOQsbc8CTL7VMba9dDGoof
+Br7jR0jCE2YLhAgBbi2c4hpV8BD56Tcoa1tbAGuf4dh7RgdwgoHKX26XR6dkMueM
+Voc6unxuRBRXZqzK5xRcSCULyuvKeuWH015l1u47OhWoJcsBJlj6FM0npXu2wzxx
+gfvkjf6wXDJXwJZe/+qOjHivoasYHKy216YJo5suROGoYs6XiF8tSAHvB83VPx+W
+10WFishzEFf7aCROJWfKXhcdYEcmu2GggJ5qLR0/KHQi+nxlN7gmVxVEE74uSgEP
+U8vbgV3R1tSZ49qxKddbXKkrffQwV8tFQp1E1TrE3II4vSLPnfSzrv9Bbkv3xBSw
+cYIvvm5kWAUVC8wYbskZRwoiIxRRSjN7bBpT8SGsCvGOOTTY24S7F4a2qL07yJ5J
+Smu9+Cd5XhGEr9e7gj+x180ypJRryB1UKVgZFe8VgO1SqIAg7ORK+44XQUaBYyDD
+aacDEdAXT9W2KNRX5cB45VEwOUsr7sknik4PbYlhh5bWhnaLOkjzTYR1Ihwj4ClY
+ucBA3FdfikNoQSjgB4jp9CM9FQ5cUtmlEyqIGvuIUwFSR3AmGpbCktFDovq0ReXQ
+OS79mrPody/wq1QZcTLEPuWDm0LUWrxXulSFTTWvFYvi7OcWuxuW5C81njim4T0T
+WdgpRDfKJZBwkubfcbrmDj/0opIUTChvpNAv0C6E6mj20z/UGllzZrK7e+JQOnRN
+AhDWQ2yVs1ZgKbWfiOUsamir1QGMiN1pbF72ymgQxJtJi7OSsQEM7LBjIX7VtUPl
+CqCysDClurA9rFBWIIYClrY2ktrKC4YvZya7nbFQA65W0ddUjzqCV8pX5G6cAh0k
+M1WfG/ngkN0NKyCtP951MlCXU561/BCEgw4su5JPUOctpetqShaSgpevtuqYKoOQ
+B7eaONOU4fS/wm7pzGI3AzdqT+gy7whJIaVuAQkdPc6aytXuEG2VGzMuIxUk/2NR
+7TFoThWKJRT06lxJHlQ+KSd5SNl+8qedYsCSAzQZbow4hJIbvPERb+kpDjs8YzcT
+dqzkMjV0CPEpyxKEvaThQ7p6Ahf3LqYe2Ot2VPkHTd7TCSOfYAiJyv9cEH4WyEon
+5rrjcs06+5qVoVm5oO2sANtgDRaC07aobskLx8MTdjuyfqZQF2aR8fvopGLes0Ut
+b4gKYA61U4duu8BgUN7Tm9/QnsiEAiYG0kHF2DwKXeq+8ybZrbY5dRUjCEJq9lM7
+dyAEYGoL4EmazaGPPTPY7YyVgypBKfI5Q75L+8MK1Qp7WPpqKi343duQ24HF7piD
+E/JjVM21FZLsPyfSozpv0AflkwTgHUUMyjECMT7N2KgSVEanLRV53RZSbEsbH2KP
+Q6Pdj60TO30KKVPsTK2KjJjR6kXT0myFMB29JZxDE7JVtFeWTg4i06La1bowSBkL
+QjWjgwWNDdyLVdlyXGamGvTnBL/kaWrnpmFcsjgtCYwqiT57lXg356wzQaVNKU2Z
+h4E7xSmKdfk27hX2pbbY5gHWfzewfkfUz5PXXUXpbF3CSFqCUpYQWZgfPdPedauP
++dc//+nvL8YB+d3f/fLrn7+10u6LHVATpCU1RmVAUMIaJ9xGL+l0Rpvu4xfbg29c
+ZcWyFneWwnyI6ipdq4JVTtmQp2It0Iuv/K2a1oNvq6GyKP8inJ0QFsu066Aeva3y
+1ezRLBDytwgE5g1dk1IKWCzpEKSpS4kKr1STW/4PTXkwdx0UBB8U5N3VxlYEdxQ7
+L++uuGp3czxKfHDfcvCByRWnYrs+48zSwRfWGhaCAqKHy8+Z9mVUuTYd9ovBh0f3
+jiTvsM3w0lo2hJq+yXOFZ836Mn5Ujr+4lNORNHDf6jQhMwpRgTI5H7iqUJKgH+IV
+KrqQuWZgITmGZE9JX2lFJwRJUAN9GU2zPV/9rmVcrVmNtK0qMZq0Ea8tqLV5h5jo
+uTxr0td5h719kmeieYZafZ1VOA6gddKWybUOJOXyU+Z8GTxNHtGUdFCSR5TRb1Dk
+RsEpu77iiSn3H//8l7/8v6+7xP5u//pNYe/Kg4UKLEcUlimbrQDtgqhFYHFVapXL
+mT0/+EhR9tGElClQMJMrEvnb1pWehWzgyaJZgpp/6A43PC3cT0F7It+pFLxEbtPm
+3LVRKrhD1S5W1jHltLe8IVTvXVBaccF6ehlMmYJTcJuP2k04M+oHk99uFpLnWRp1
+ecJQsubgbk/QX8FYB7kPgeQDy37wBe/Az1fpsxC6fFaNyiyF0ejPaHV/wbzu+9BC
+h0rPdshKdq6HMlpJwobbnfxgUlctR9i+ZN6Xj/g2fb7utyKXgE05nqBhnXWkVuE6
+y/Uq5ofZVtAr9DaqWTq2UcAJzjQaHyjuElhSypPR/ktyfShLT8tu15BDKHfBvdW1
+5J6bNrTTBYiq/ZJ5Xya/svCycjoFDeEBoYpCC8K6OiE9LPfaWUK55nnzvnzBDqpq
+NbKnQIEWkoocKPo7hvvwL5jXfx/amItNVeirWFQweOHiKPUqeC+nNjZUfd19ybwv
+H2nDVfkC/evy/cWXaBdkrajjCdF0zsGq9E8rcCI7pjmkhKRqjUotBIEXPJBWSYqJ
+ywu7QqacerS8oRqrxRYYq7AKK3IoB6Kqyy06mwXT9Kkvmfdl8twI0ujvUVmOqSr5
+9wrn1dGeMgI+g2YJ97x5X5cHCmlYsoTaIQ0zAtG02svFKQ60/gXzhu9Dp1kpIEdL
+JQmctCL8W2Diuvqha6IOF12pL5n35SMFxdIVFFAiUsUB+AphovMQiSIer2CqLNcI
+7mJ1uTqdDsXKxXWYYpvAxdTpRYUXMSwlKQKPity7xqY4pQCrme+p+Gy7fpGSrauy
+A65K/avtS+Z9XaFA4bmch92G0ggavxI8KnvqPHt4s5qWKjxv3pcv1JLKUEhaShcW
+zXfz4sFtcJAoYfuKeeOL67E8AinGVfl8BOUCzzHw3HUgUIzapSjnfsm8Lx/JJWqD
+9xqQY5O/Vywzynhg/3IKrZqCh7GYg2YG98c1aDfQxZCdva5QlSwLDlycTK0OoxzH
+JV4Kg1xyakXeW1kpOi+9UInn5dK05L45YNrXzPsyecTnnS9myJAZPqkyBR5mox+4
+rEzkz/yy58378oWrBSfKsQ0lrcIVSjKFIRFgSHIN4Vlo9RLSaxTUrH5e6tep7kti
+mTcs4pdOSORmS0D8adO+fKBzP9qVCxqqYgOlHNrxUNfDZAwLTR+0dS/wsRnVUxO6
+UL+TuZWUFniKbY3ZXjSlFRBjy1wC9jwVIoKtfx8Ny7Q50MqHUtXBor8yCF4/bdZX
+sFNcafQDQuRurNVxRROK6z25FKhuU0lyzM+Z9BVpejy8E9pMRXBWMIf6XMEqLmOU
+6j1pzt8cRv2nhVC/LXz6jaDTbw6b/tNCpt8WLv1GUOk3h0n/aSHSbwuPfiNo9JvD
+ov+0kOi3hUN/Syj0Iwf4v/zpz/M7FWJdvA0bX8LW9tYpiRWtG8jS06rh6vg/REQf
+fwcVyHJdWa0NCTDlyVyowGYs39MHgjVb8dFYqjDmJYAnq5WiaFti8G6m7S//QeOc
+gk1NXF2FwaXvJUzTNPOF5Cn7ocq1UFY6qwYs4zCSfjx/x8nUoNzGVSiGLo7RDS+k
+EAKKxYrbO5xcJP7kIxsAARUgciLa63Y4eflmy+X715mpfx1//5c9f/n1X/5t/O7/
+++Uv3yt51xyXfITO1OwFNc98VYhR7rPpwjYj9lMrP/iEo3+GFwvXtY/MVWsmFxu2
+vGmPvBRfL2baZ2sKe8ect9uUxKbqBAI5NEUepSH2vvVvQOLO80oUZHdxRTmzkFHn
+TIDhUoWRsy1dLrnJo7d9auBHU+cEuAWDma+mC5gFFKp8ptq3Bm2oMLirP7Ltg/G9
+4J9OVzFzaePXunme4s1Rq9Gd98dmnX/+9bp/VqJ04aWLW7QZW60ffSoaCkQWZx1d
+k5QCKKbHXeoTVn33hcQT6nWJrzOmAN4VOL13lppmo8VavI4OpShILuqo8hM5ssaG
+Mq5Sw7qQWKAgJ6UGiQgz9EXuW2g9jEXqJfS1Ls7qic6eIrTCVZaVV3rCqO9mznOs
+a0XnxyK4kuyqHe3jUGpcDg8kZy30dGrTd8PTTtPksGLLgzJSE+R7Ug5IOoHSnjyp
+v5t/Ht9Cd6HCJsessQO6mg7+FQoT01D8UqhbVcjp6XP68gG6rWumHqCZaVe/5Evo
+JheuTUOzN66gnSWPWotPkRcH4Qjfg/um5kOtfkDWFp6/JnxIcYOlZW5rwJLSQMVD
+m2NuC9et0aJMAUGlTTTGPH1KX1dGUG2OzoPCTKXyFJf92n1U6pSRT53E2PrcGX0Z
+PQ+qboyH1kZxVr9kd1QZYtsGbednzfmd3n1lgQK4zqswncwJmz1FDdqLVRBK293A
+KVufN+f3D+jQXTz0SNduuRPIuYVBFhx9kKgrIm1h1d6VlC55HIEIyHKM78rqhbc2
+DJho3glQJOQ0FJFrKxDG9jl5JRO68ko59A0K/2a8MpqqE64z/JM62c8mHpTEdJgh
+do/TKiOFONy2MIUBjTLLtlt16eiZ9cHoaSlUdAtJWiMX2Jmi/4xKJPXhT5zO/2dx
+6v/pl+bd7/ov/3odITvMCJTw5Eb7PBqHaxAjPDJB1P6O0GZ6xqgPPhNg1ieXaXTo
+p1BKpOwrr1ZcUdKtZNRCwpOomvVmIuQSNsp78nbDOqefXaDvIZlVsOUoBsXRDUOM
+khcK5rm8gBt9WZd8H5fatlauKfEtz5j2wfQzGu7yDe6iCexGLsa0QWCaUUA2VgqJ
+lEodG/jBN2Cik5HdIJcs5FECNWvnteKwIc1jM/+1/ftfNeyLAEnQmvPQ2lsnfZ25
+RRTOtWEhtcrGDG+EVZ4w8P0HqC5KtOXwIuoFvJRhZnQlvEWfociNya0a1GuLUzrh
+PUAJInDuA2WboQRnFMV9hVGfaCT1uXuEiTmeOuYCAukiKw4Luqdt3Ug6tGMJs5rx
+hGnfrYxchNLhnWbrnopWoY6IrJWAZdFmKwGuhFFOjXo/eqP3rSyk/6JC3bQ9QNYw
+KJ73s4+nzPnLv63fjW+eRrs7T55xub2h2F+hf++tnCJUqPOpG8n5SWu+ji9IauWz
+lBdYgdHeZbxBF5hvgdu9LfwbYKP0Ff3S5EunK4sQr39w5YzkoxusT8OwhhAuFlxR
+BiC3PZemJkdTGw3zRQGkrrqzfG9F40qpwZPGfFsXF6K1gohQuljEr7JyY613MX5D
+rCZQ7UMzz9jydXD8OaQoW0mSF6ToXKV1hW7KM0f0T5vyBb4oz9uhotGu5dDuphrV
+d6s8IwjSBUvZ5JzlC8b8/oWhsyVsk5XLzJkjLAWhzCUv1qfS+FjMHuQscs6TLs7I
+AgoxKUR6qEGckFWBgqd6ujv3nrNT+yLkRpEupRDKamuE7r7Cmak8mJbBJgDtg/mK
+Ob/PvChh9hfhprG7CgasvekGR+PYyC/mRqe8mc8a9Pvwxpg0lJ8KPeysk9oRJU/D
+bQht8khPm/T7qS8sCLWwhULCwYUVAg8W9vUNLRXskeUnLPWffiELk0IKCusUUuNy
+WV5pl9LhLDQsZ9aVyFt6lLlLnU1YScES4e2QdgPypGHQ9FQ+U/qmnM2OpJzUOEV6
+eaoc0S6hkMsMpI+3nG9cAgWbVl/zBZN+n7lSoyx8DmFUoxW/F50qOZRufNDh0iaT
+TxHOe9akLwszgYgtVKpCldBADi/0YDbiEErVPzDpe9mVBKOz/JQLJVHA7r2FQNRG
+IdwueCkfk701H1vw/YDNR8E05QsGRaS2q52CQlrs3K3AIuERpJjlJjvkcVkunSnM
+GJLVwQwBuviEfpUcmayAcnbNXseurAbPWVJI38pWHQ2tymZRddc5bLPYXD7OOt9P
+tAtTR/n/oCkKrqKCwUl3tKPP3J1wuE5h/uDIvR8tRiQ40avflp6MaqBzGLY525Vx
+pU/M8SK5om3h5H2b0EK+ZFfkwJC7aNkqc+pF4UXbPJhPzfEyILTse/gk1KNAFLg1
+XVsg3eknW0jJakD1E7mnZJ02D8FvTRTYwoByMMshcQ1flkFuE38ITfelZtaVBc0i
+z6UvN6gU9A9GpFu06lC5bvvn5niZqFxJ1/H1OxalyVwPmcmpcQtySlrMTKQa/+fm
+eBmtGf3xlKC29Qrvyq1CG7FO7cAugG0/Mcc30ZUi0+XNQ4VibJ1uR0sDogI+apRI
+0AnG2/m5Mb4L4eBuYVqiTTHUHKMgQMtoBNUhUKEjAqeLcAJbYKKThxCE33JUBEut
+p7LyTCGx8ghuW0kIeDcxLlxoZOnfzCt6iOU6V1U6RU5fExroP3mPfKdbI6gCEzc9
+hAFtgGx7qbUUnbjRN2kGpND754b4NpYlaSsEscaxTlXwvvvWtEGGneOzU/Gi3WLl
+n6rRQZUTafrhyoC/QeeVO7lhofo45k/t8H08JINHV2iaCoQpokE3remCaku7pFPh
+vJVId/nBcPEwTvSb9jQIi9hWeXcYsAcEAcfd0A5OcFnIkenEU616CcJNT/24jl+z
+MBAKP8a0hxzEp4b4Pk+HeJAXRE8J8sVa2c3yBW3YjAROEJRMe9ufW+L7YPBPOZ1N
+RSOaSmJSPGorGR3hi5XngSn6n/713399RhtFkChCOxEEkXqHs05+I+ScglxWYbLa
+Am0/zq6f/pqBDGUr2JD86lAEBXm5jULDQYNweK2LfQNibMHjbDOiaLDlBvnBTisq
+b4MmofDE9ZOATMgQLZSuU2O6lUk311RyZNozadeOmO5aE1b1x9wAT/+KCMPNRo9e
+6aQ8XISSqXCPlToathHpa1ceHLenP8UFdqe78yr8hWQjjK2Nq+APqDVf2wIvvYGI
+FxsQlEUzcI3s6YETEqe50dSa5Dnz/KrpXyjVWtlByFgQQE5JoKDCO1ZobiKvWIFW
+qWyqUS6Bx6Dtd9WrRrpvoS4Iz+vVwxssdBtFOU5UYDUtex2z3HVEcw8ANR0527l2
+67EKYEE8m75q8u8dODqrzHwIdm59CJDsG9I6ym5HVzzgiWT4L5n6OytW2GHunhy6
+uGELHSmn18oIhxb0uD4z8Y88W7vvpHMBSbtTNBH8mjkQTRWVdYqsMcOVuvrnhn3A
+4VW0xy2idAKyTqEM1SGvBM1fumKyjKvI2GV/cXsMnQMjVy2oqH+RdoQY3Lza/uXE
+ig6RyzlTdI+ASEu7h2mGkvQESZ01EdGdQcwO5Pr14AQ/WI8JWL1u37XUPTohsmiV
+YVCeAxWqkSGnN58Y8ceBa81NAV2H3kLtVTCZ4JdXoHJ2hXxkuhvyF8XsDjpD9LNo
+AamR6AIdKdrBk6dRbJcvzoeGuxk5XMxVpAdGp8JsdCYFW3RElAg3hXVnsxmZLlz9
+96JMBGLuQU+RUqsKHW6KdSRv5Rl05GjaUe7roswoj2vlvBHi1PagiRYl59xnoglb
+PtzGQ7PdzHhY1MATDFPBdk+tU0a7ymhs7eSg/zmhIT4x2s2wkx3guiK8r8pFWxDa
+12/g19Hz1M5M9rfiL/750P8hGYw/WY0vcxj/fNwvsBj/OOBdC3vP+oUB9nVljQos
+1Q6rhVYyY3chV92r6N9Ih3a777qvCqPCnjjd2qYwC6nS7mbViISe/KZSFGGghXZj
+NRcpUoWoTGuf5Smz0cafoBtBH+FJ5WfdJTrxmtPmt1SNVsWNrDSuQ1E7C4V7vrhB
+L/6h4e7mHBR0aEXKwy6ZkAZqT+M8VkSqnie0KOBxYrl7rgD5FjjjlJLCJznmkAcR
+LvNEOG29M9PdtbLrRE14NDVTzVOeihuKGBRH2mgwYijwrBhOTXfHF6DsUHkcJLJB
+SFhRbgq14CmNdkVV/hiHRR6bY2XgrkFGk9OCCvDi5XY2+uCjAC0tmfpzwj1GacqV
+fSsH0hnJwqN+Kewh26UtmCiB8CV8cHn1yZzN2N/EiqwSN5T2qMxpCqyzwl1ShYBT
+NI944z4ZOPQWDKz6bgidbeThhdkgk4oKcLufme62R1p+0UKDOJUA+zITUmKKNdvQ
+FotIzczoB51GuLuxBzrCZseo2aWtNAkdcwENt2mmFCbSumhtVrtkD6wVbIHUaxkP
+M6cQ41USPqghJpUcq+0Ny5J8aEQUiDLK5eV6RkF6gxRm+Yu6Q7af1Z+a7q5nvBvb
+oHBdXnuFmo4ZdYKXrAX9q8CsvIbi1ZHpbgfWj7VRS+nclUPB0uMU/4uQtWtyP2em
+u++SNhGdnAWDoBlK12KDasYp33JVeALavdzstKfGux/d8jbdqN9vW7tBoL8hpj6E
+LakIls/MsDsbrriGPLWQAY/w3q3hotbILuVHy60JPVk0FYYPNN2mbb3S8Dx5ex/4
+XaMktwJcdb5hLbRoYJya711Luj7grtuOXlhtefM2BZ/gtmzwO89aVx77yID3Q3ul
+wRaa4AbrVJW/0HFUyMhGIbU8lC39ccxHHPKoVAQFPw2Yk69cqmdX46KaH26j7BVq
+tWSHdnwoD4BAthL9YXTOtdJFW5CCbu3pIewyLeQQyvuJBV4nc0xl0voDhZvkpvQO
+lizHE6ISRvmboCANiXgQslkebdIYqe1qQYfDClAM+M9d9Vb/GoV1Z8Z8yN+vpEO4
+V+ml8ysqOZFvhfmpyAkk/axSY0vdlhOLPhpfRyXBRmWuRKT0S7C3UdC7uYB1R2a9
+DbBWu792bX8IymBc14n3fbsoS/ZtkoAiLCinSOZ26DyUJgow6wBlbTvtESUlQrp5
+Dh6Kk2DYtIbX8C37VBB/jLwoN/gUqG1YC0BJWcLiUhZ5J6g97G5ynh2a8gw/baBY
+qXIFn7Q4HdpmaJMOzXg7ZWHbqEkLFxfIJgRnFG9b1+7uBZkyJ/SgrbhOzHe3ytON
+0asNNvPuYJvydLMUtfS3lilnMOYuuIZKbaUS6Ia+MhW2VqlxnKTVSgG7Ur+a/Gni
+cE9jrwWYSIkp+m/Bi7Ys7y8uBJiPvOPdhuuyHUOSN5ADuyLZHmEIcQZ6LuxSVNZG
+Kor6dQvwZD8hCzGKslCH8IgFBUTinlph17sUFAjSFuQ5NNvtlCFSVgSR/6yNC4Gg
+46e0WvlMtIrK0xG5OR0HZrsdt2j3RzTGQkHHp651vV3JkySbhJePzHbDy8Ot/oy8
+t8vNKwaVqMmSYA3lgU2BRVmx8tN5aLVbxh+o9SciCaN5hb8IvX+AN1/+siFzQEvX
+CLMIOPMEHoIS4wk/Zhy04mt/zrQ1K6F3WORrQZDT6eTDH4P0K3W9udPAdineGa8/
+XMwQeN4fEB/9fMYR+lK7FYChSx1KbVAL8JMXSSQHnJtLSP/EZrdyAehoKbUblL4J
+eHqEcKMr2opKHto4S9HvGZCFUUypCjnRlqQ5hS0gYFe2TXgO5kP4DtMHTDqfjq7U
+VMdFsN+FjVw6F11CRyug/ICGwrq4R/Rfw4cheCAQrKyq8Ns2NzJVGz5Hrk4g19aa
+ZoE29FC2F2iDSdhvziz6l8oTtRRsMjOgt1vr+Hbl3ZqMBQF84sYAZYpR5CNDHDUI
+dsJ73nDn8yjje8/sLaxm5R4G5GI8gwainryI9ndu3R+Z8I7TERw+BH+6heScEiud
+ZaWl8gva2CHVIti82zg04N3Ys042rm28F/ZWKFKavItwzQTrFuWHkz5SAZdAYaM2
++U6lO+qNNAXHO2i8VBmaS8q+ai0KfA6dxAVvC6LXrOu0/F2jj/kUp5ySU0Ddh+Z7
+R50ZKJ9ftGq0memwaVqFDLmS4HPXHreKq0fXY3cDxwHLIxX6nh6v7YftwwZlQ4KH
+24dD073RO3rY9OjC5IltRh1EhYvqYkDEXnsdVjMhwX5subehc7HK6NCT4UV1Vreo
+mG6kAGNyuUdZrpzflRhQ23lVcYyVdZhkdCULMJPpAMHuV5Vz0dSn1IEC+emms44O
+1O5jhl5FcYRXRe9rF7JCGOXYcG9TRuiiJ010Un+fPJJQPaYQI6zhTsedxziTzux2
+Q6IZtem8BrDFXdtToRz5RoThEU4+y/duvLBCXJHJO8FO4AyVCnq96limKW9StpPk
+Q/0+TfZu44awonLTKHQDY6hpXnm/IpWlRynJX6DGCxG87KQEHf6smUZL+E5fszBz
+EtKlqEhZvmJcSwqAChkOXV06Q3fjTcZoX/GmREotqB0UR3SEdzg9b7dT3igEm9p9
+1mg+QC8snJNTsz4KT8y2/GhamaM072ZcyF69PLsTVLZKoJXrVSWkl/R3UsR/YLY/
+tX9ev/7929/5u/anmcLffa8++t0vf/rnV4n5jhh7UbqrKBTgILR2QP+b2L5Bk15C
+b4/T9eOvLG6feMSZsgJXp1w8JXp49CHZSr9IGV9UcFFQTOEitod4UuAUos+mP2xg
+iC9KR2PQ8gq1hKiQscYSGpWHc+Q0ifLJ0AVV6nJwJvflmhLFx1jziTXiArUqlhrf
+5eJ7bplXMmcbhAA5L8GouR50hp5/IrbmVq2wv+1ktTMFRNzmPVEI7GEs/HHs8ee/
+/qtLL0RYXntQqSOvLqBBLagREJCv8vAWwDEbe5BZDi17P7jSEaFabRiBToR/IDRL
+vMsH7RcdTh3UQdMZ5XYNAKpMQAdDsLXIcyYKziHH3lzRByX/8H1pnzkayFJR4j6V
+MER9wXAJqv9WrF3Wb2j/l5LhQ4PeT3p2WmW8VoRDqeTaC2VtancbTG+CMqbPPsyJ
+He9HHgqvwyqy6qhmkK0iin5QoUJaP7Yem8+7V/K4Do1E8xO9C6FdMuU1UZWZSRCx
+I9YpV/6M+d4GL4PyaJnEUbvnaYmVOWKq8n7RayEaBS/dKbPiAQHl8CTUuXNRDtCF
+KBWf89JJhmUsQ6V9scTJydKbhwRxTRkRW6e/QdSsXo5c4NbR9/3BBfZnk45IWIXk
+UfIIJflK1kdDTRT+QEAbYlH01w7N9zbyWjvlCF/hirYpqlxVtEt4MQmdu3hkvj/+
+5Q/t9XjsLFBHL412lZZtQMyZDaXt1Dwil5xNLvHQeLdDC6MMGPMUAYZy82KsfvR1
+vbXrZUvjWp0Z2fAQYUjlvqiYaIaBLGQrCGVuHQNl95bL63FVQ1eY+KtOwF5R4DlT
+Iz2MUKPOZuvcnm6Cbjg03e2Uo2nIldQSaKzQngnQgKIG4JOQVBKyprTInxjubina
+2KOXYnMSIh9uFAGauGyK2mVyOydmm39d7U+j/frKHzgFBjRV7vanHKf8vXaBTUUA
+XpmlXaEYQfXuz0z3w/CbtkpB3Iubg1RgK4gPC0GNvL4SYuNKi0J5viOfuHWu6BmB
+0LH6yhXn9vRzriKAOhQCuQvdVjkYLi0IBNHi41ZXvmg7Wsi1dmPK6EoiNe8z8/0w
+7Zz8VdUb2ViluIlOwyh0KwVHuTx6GW67AxP+MLbVvg3oH1OyXLUaQd6FtjnvVpwP
+NTEex9XXyQofCE0ookYoYKAu5fJD8FmZJtUKPstXt/gEpnk1X6iaaVk6N1RBseq8
+SV2a2V24WmD4YgFSCHNmR/L0gBRZq5YuP3PJeimzWcYuZedJ9o4WuoYFO77Ql1Xu
+kKAm0Z6OhVr17Ont8VA5fFB2+8lq6DM8ZoxWqBeKjctkBVchd6WFE28vmLHbKXp5
+JZS1kY5vxWrexluq8hn6KdsYlMqaOTPbL//8epxzKzbaJMzuXCXF2dRqJgSwF8KF
+/lKnnvvUbDdDKwrFYBM8poKEfQtS9RwnzeWm0/E8qs1UAiekMeCdiKtgPlifaxQk
+tnRMy9VSmolgNrK0LqySDdd7gx7v0Hm83nsqr9oCiNpiFMQiWXFqttvVoINOqYi2
+WZtQmhejTF7R38lpR0/PWBekjkdmu12K7ugrmK062DoDtAkCtkOepcpx9iOz/XW8
+DGdkKDleGqTITL1fQyu2ApWCWhbNV2hh5nVotLeB0yWHGS3PnpprsznyGiss5KiE
+y8oTdGQEbHlRq840RL4Qg+aJYSMZ2XQkIwIJhveJS42DfVUGDPFdyYisy6VeGX6F
+LMtPqm6TidQVnp60twkLM7gJ0+lswn1VCQJ92lrRFVrJOOCKXNWJi7wZtQVlrIoX
+it5h5Ulf/5CfVOYRhwY7c47/1v76y+uxla+KlfY9JU8IZWsfU46D5lGD1QNd3OFP
+nePt0PArRUsB6qbIwEHrNuGapRZ+0kYX6sXFFTPYsiIdPJeWBcwoC0DtsxY3d1Xe
+6mqeDJ26Tf14uSgUdSJs/4vc0ZegBEYOVq58yTVC83Fmstspw1FClWOXO9Yko6WW
+lvQgC7TAQzdhDbb7xGi344YwlBEWxyW1IIowpXJToS4lutoLDxXafhhwtH/79XVp
+7TYx0t1ZIYfRXyvZGt3T0aRkDqKsTZPbmdVuR87tqg4yS27FcwEgP9ghGJgFTn4e
+VyNy0twLmOgQeIq7IrmdUM9ReqffZ4o31JvxJ/KI8Upke9ksa7/U9eTEBUD8gCvP
+hELvzyJlGmdGu52xk1looUBdZkB7AEPWsP1a2szTitU+i/bAZrfDKoqBxSh6pJ0w
+a5IphsntxCBdOjLZn3v74xuUjEppwUuCqUsRIbkY3HBraL0zEufaw4K/h3cr92O7
+YuG/guFJv7/R0yMoOBBtUuyaTpivQepnixDJtNzNBlMiTwXO+opjoiww+IsRryl7
+U7IehZn0Xw1dnY3kodZ50+ncEUQpeU0o3ikIPXSP79ZjopytABq5HDVWniAl7lB3
+QL6MLludvpVPDHc3cKyZZvCRbUSugC53C4XXsEPYdIUT060//fKX171gRm2KGgs2
+izTrRQvWlMIhoB31l5lyjWgOneTd0HALcgIafi4oe63ZOWSlI/e8udhVtw608jIv
+iwppFKr55RYnKlzLKJpB2kQxYOaxyCAKSP5HjXzyWyCv7KsofuZAtappLpi8+1Wf
+Nw9vTu6mrLC2LJUzKUBzCTv54Ba6yRcZGIXsVlrS1oHd7sadEe4abu6CQCRtsBQC
+U23poFVPR2b7v3v7643IAVmD4vDVcK+NvNHsqMJPcsRN7kapr1PWcmi3u7EVelpQ
+FpuM8ENudBej16SsGIaJWuhMRs++UmvZAtXpS3hWgGJRamuWE7KYyOAg5BiLV/4g
+N7DNcCkPMmFleXTKATIRYuCs6sBES5eSPUy8360HpbbyXYr3OgfCk4In2iNzhT3o
+OtLnZViXTix3N7DtPF/pLCwFHdccRfJ7DW1VR21aPzQdu+Hv+A+Bm/56+PZeTUdY
+EV8bzc5YIFBAsThp9w+loZumqXRsxIdfcbwyyjla2hoTKvZCw4uEU45IpglWKEk/
+R+BjzNLkr+UM9c/kB0KnazDIfZtIRzeNB7CwcA/aLw61uYyJ6HZOIRpFTO0QuVxF
+UxS8ecw1+dicD2dvJ5WnjRu2EmdAXHexWp3+zUq525KrKOXMsA8/kZQnUHUljEG7
+GuqJyk4Fjgw6Y31/wcR/fD1L3Wy6y6dAYhasmSRf4A25PkFdE/PQYnXzJRP/8Q2R
+z0mZmFABRoq7QRNjUDeXOVxyNOIrrsHa22WSOSbVNNa63epoOnTKPHVQhoLkN9E8
+27otNJZbagjlshK7aCYN4y0iCgLmg55I75QdfsnEr7MXvLueumYaC3Lb1rHpTkno
+ROm24FcJFEM9b+LXT3juKDydXTvJolRoKdrJ0MJPTeZ51sRvm2cIkgbaJxHQlofb
+mzwD6OErr2CxCh8j8PO0gW/8hPIqeEKnHHBZSF8FyrudDrOQd/fZe/0KRRUEbZUv
+cxEalCxCR6i/9vBBjGFaVqbujbCfNoCVAZUPaK684uv0Z3p1Ik8xQoYJETSHkDeA
+93nz3pxf5QXaX/pSXlRlN5f0fwKGqdHVY7jVRSnxSeO+faDFtotxNbaofaMQsJzS
+BYWdKBTxPR9/yrR/fMv4bYzyhPKaOzpkijo8Y9RUh4mkouCineELZ/ftG4L48HN8
+g99LyIaHGv2HcAdduT4KKtCm3RwXfEHwwVukTBJVg6bwZDFyKltpEd1ScldoDutg
+Nouf7nWzDjK/Bss67VtYTigf18lbgP2CaV/nzs32mnNSma0c1kKBNITC6oKBeDVK
+lqqb9VnTvp1a+lwaOFeI0G9lXrw+ZpowAIunp/Yvf3m9ZOiXbOHYrVNc73Lxuekg
+JE29yGM2ihlcj+cmvRk7XSQeFL0tSyM1anq7wrcSBP+ju7p/WveCVRMBZ7nXKQs0
+JWDWReWSQrYVUXdrr2cw5Xkr7abTLgdJA/uq3I/VqQCF9pScOJfHQ/4Yvap2bMqb
+OYcBO7K5iFSqsK3yrJCSpoLaqFIYyO3gpDwz4e3AsSNfmdNFDF3k3RGnD447DePP
+rgU04q9/8H+n//922qNFwYrek1FCuzxdu570FLNdqLyLa4d7d2zAH74wCrV2215C
+qaXv3eyKipZFmXah1sxCASSzKdDC/pXj2vW6Fk0J+lCFUItv3tyJonAKkSgpC6K0
+8uQXo4Cywqmk1FjqJATMKm1XQ39/nZvxh5kbyBS46lyJVjlBSCp8lOZP5EkF0GpM
+WW7yzJg/LgwMAYJ21OvM4XLuNNx5oxxmK47OJ036esrZ0XQxlmwapOZQflJLVmnP
+68wfufnonzbpGzwS5jKUGYKy0XwzCSKEHLNbdNUil9WV3ghgyqlaqFQcAleD+yJe
+WHjihZOCZEVbDmqgIe/pqwvQewUF3a3kU/AdleIsNGx9ubiiKYvrT5v0zcUqf5IT
+ELyAICvbXV1GUtU6lHE7QclkRYrnTPq2MF6+VM6E9kfIBAcFQrS90nesrxyZ9N9/
+DcWYu0sFBzmGrYL/SjJCm757T/s2NUfCqVkgeAqNHlr0wQcEJ+Ya8tqZqwXKsFpY
+ArjDoZQF4/ooinJFNvO2Z6e/E7V8c0+zeSLG6qlMt6JcavMuKrfLF63ECkGpLQzp
+QqU9yqfnFJVL0oK+vLZHUJZzaNAfJ95p3Ef+MRVYNxQHuDdUqtHQ05Y7dwLyzR8d
+0R9Hl6NNWt6AO1e8HDjeQqxzLlBteWLOP/xFmOw1AOusDwUuozCJHmInA8vakAph
+WzN1lKVZ184MeTe0kxtPiWwaeiHudb1sg6tSEIQ035ngm+ynOHQxGmjnyHPqhI6L
+DzFC7SjLByjeam8wmNlB86i8hSLprIqyTufYUAWYL/Xk4OvFMbmV/J6Z8G7KRdCr
+B4Ue17ZQMmG3zsa1vh1j6ecIK680Tq7Q78bFUZDOKgDE5OclpjxIppO8lVLqM7Pl
+twGVYQajuGUc15DdT570PE1ORelK1wbckNnGU7PdDO0d3RKLUmZYQeGS1F+gJCP3
+6XXoBSxzFxqpdPYqy43BxFK0i8jjFQWFVtaqcNLYQCGYM9fvXk0O4bpucpcjpeqv
+QXOQlL3q/MJwswRWTs12M2UryKAVCFW7RxlBlR+oOnSCCxDlF+4yWlmjHJntZlyF
+w+u9tstqDlZ57VRBueg10SGwema2cXvx1jZS1qh9QoPk4DKWb1aelhdKwtyEKA0/
+Pm63Y3vHDWRRONkcuE7j7WxD39Bq4BOdFjp24XnXu9KGZARPcuqITQvgwHqjzbiE
+uxs3uF0pEWKTBkJS/evCRmlZC4eYYK7QjAysrcYrSoF9fJ8a7nbOtQkr7x6RUNBm
+2fIWtXHhEwS6JrQ4yyUIdU8sdzvwpQA/B9XhhqrjAJOA7JZmTPGxRsWjEe+ujmE1
+rhEqq5ih8VmhgpFKyHKVAZVSK9Daj213O3jWoVBowvl4uq8VQFuC0IfzBz1GorZ3
+8Hpou2LjKHT51HV1x8+cr67Xi8jQzjKrDOx0ZLnzcaUneM9cQTHImByW5zU/h8yT
+SDNJZ9keG+8u1snscu76XOS1SX89qZ1UoBXOc2gw2QVD2Jn1bkfeA7oNWID0w7XI
+dlEOO1efUUfw7AFLQ/76h7dLXt9mUG4lXwWBDrpOY27SLFS1FfpDqgJIx8Z7G1p4
+XANrY8VkYJZvsyvOOSX2XgDOygVpb9CpX5Hz8dC4t9KVKMkiyu8N1GMJnoq9FWwa
+zQHO7Evl6eIoVHhXioj6VEWfIGXYTORllRfJZZ5ClbspwwViAqhkIKjqkCVaCz+s
+c68kA9KJ6vvhsXsbdzRhKzSCcTXKZC1XufrByw/LW+uJ2SAGe1BVrAOcptcKoRYb
+3cUMNuSMlhLuoESbzAJm7DMDfvARmckuBVBFa9Nz2FsOZC6leAKSKHqnmM3YBhbb
+igKFMIHlAXRWaNgV1p3OQqYivA/vjINXW0d4W8oH3PAUKfVLekZJ7L54srm5U/pp
+db7d4UX6B5MHd/Z00brp4MGlAS2LktUpOARgyFBZzpNM/4MvoA0TrpqFTFOoB8ot
+7+miNmOcFSky9E3uU0aYkR5CszQy5TCekg3IM5blhUfgwp/b9PUBHO88ERsWmnUG
+mRDKucuOlAPTemm3Ut3NBWWSK82BakAqZfVNuTPlvGY5ypSF4Y2SfQhblePnNjba
+Ed3sqGQDZQwoWWaHWGdE+IH1kbXPDfl6ndLWntnlKuBZuZ+PhqyQt7kKT8owxcJU
+e2i91wDbNWWdSop/eaNcq6WZZokjdgWYsxN5tXS81eAlkmP9JwIDpisbnsYJIGhB
+lK6ieuVW94cXbPdjC7jKVIQ07VtlZQonjTXRtwIck5m2pj7QQ6pIZwl6uqV/jcjn
+ldxRwddSiRT/JPQ9FDsHrf5K8LIys6zgOmk8F0w1nZPcml0ZHlRKiA5fOe7nDGlU
+kbeQR5Xz51kMomFjC33eYfY9FnenJ+DzfmDqo2IPkHaZoTzkulLXb5B3pvjhyHR/
+/L/+VevxL69z7UqYI8SbwWWvmDeo4oKobhqtqKHJMPlyWMXxbvB0eU/5ZjSUUhL2
+nPI8CgAbzr0ttJSaQW1ghxAF9fyaGV7makIoyvaUnQsdy50LRfUB6Yx1OUFZ4mif
+6Yp8/f+n7t2aLDuy5Lxf1MW4Xx5JkWai2bQkI/k+Flc2bAYXodBUU79e/u2qRJ1T
+mZUZJwsjA2esb0Ah9j47ItZyj1jL/ZMUlpnXJaXQTY6KSc60LLxwNnlfvbR4AxYF
+CpTcs3P2J5CrAMRVRh4jdOVDvcFJIf5XI+szCyqKh2lZOhrKyorNctCD8VjPJ9P3
+o/bZlxGd088zaVLvWGfuKV0oTwRMjExxzO2M2c3hyehXY6PdXVvX5NFaAu5XWkWC
+cerDpJXRb1ISEZci+s8QR8ekx4fdjdDLQEajVGWgRmtmxjCEYw7cxKr4tKKtgI6Q
+q1/VUxdbjTBdzi30TvHO2eTdv3Mvg4uUIW7eBX7r1a2njYd6c2uRg58kVHcSMu8H
+DkKzGzsr8SmaE+30HcKmOOe1b/zh1N0cljd9vjwoWp8FKwlL3ckoAkqtTmv1obQp
+hCWOp+72xqN5S3uiuYpffZkDNZhEHbavl3bh0L5yibstbfKNxrwIwNUyiSThQlOL
+TlKuNmlR45ZCgE0h1VFGRhmTV04aiqHw4Dq0LZVVqQGoyonHU3fzzugVoTOkTNGo
+/UMj1Q3u9VrmxxSlrBD3Opu6m4FHc8p1aLvakKhp1z72ozjq0JszR0fYEJHx8+/7
+eHtNj6VYRhgd1YPJufhOdIyLGFuHcP1p/dT92Ep21qKm4EdqXpkZ0wi0h8slCKR8
+VwoV3qOkQp9sp8k+D4eLK1pEC9+6OsNEp2ugop20i7cwpt7KierhDxwo9mmRuy+R
+xGnRTVNgasOe7rq7dy40l44dxDevVuFkxf7RZlhGe34IFKc1qUs6mLq7gXHsVULy
++tg+W63kylvWpCVhsEA9mrr/8eO63cjizKaMyD2r/l9sJ1RF/CyKZS+phkQv5zrd
+dveD43SbEwXWuwi77iFAv7XXirE7rIqNVmiKn1X0QEg30+7mDZdPeh8zwxKAqYF+
+jglrUprxpcZKd5MRyKqav76pGFLQQF9c6AprWK6qQh6nJcJfvTT9VusqmaIVAUAx
+zFDu85SWDYeQ2wQYn8ze/cgVQcUcoajKSsoASGOlhghNJ1+dTt/NZuaXohtncZ9S
+ACWVtmmbvrq+uWixVrI3vZ1P321INhgUVowXnJJE2Hr5mvXvw/NZlGTRr24ehTag
+HGedwiC9UWeRQqdX3mhSjH4yV6D6gMqMynhL/FnfUP8ZNVmUYLSAk4CChIIoVciV
+v3Y+fTcvXeclb+K9Nd1pI3a85wLCVlwMoIqgINWnP5y+24g89EHx3UjJdYHvbTsV
+XkGRZAiuHfUN/rT+n4+3+Rkh6kCTmKJ7wH2o0ARxObZx4mHF9IQDD5nC14NTAoHE
+vdgjfX7ckQknKmrktpF4EaMLVC2IgFdF0KhsxZmXEZhRGsa4cNE6Pye+G81zGaGE
+hN/R1F7lmganRoF6UIRQ1pzYf3OMlPWT6tn0ffXSxkxoC6eztHPsoAyVcMgTIG/U
+GlqRKIWHg+n7amQMfKKjbzIhDSlWOuFkFnOAFmw6nb7bQ7hqxyUhKILlWheFThhj
+itGUrZRdUAvFknCfz9/dVVZBLx/24ZZDUQpvD1TjccoQs6ydKm3KogI1xMoIirVG
+EXEpu682uEM2+fIFjChVtAXc1G4WLh3UYIvQd/r0uxLfHIGiOWFkQ6WjCcmcT+Dd
+N+E8RYgL73qq5XaKGLanSVgW1hCLpNS+Hc7g7dADeoTIL3Yx2uOTErYotIalxDir
+hfl532xpXB1FyKlv2Know3LYmS+tyByCQnXYkc14Nn93Q+exm6JnpwV4oJAZ14Sb
+eDG+uXKdValb+40uXeunRw4FGS5CrK02xy5OiEgqdG7q73T8pgT6vAj0BrqI8mGR
+toNiv0GtpAvbaGIp37aHwfPulcVLoqGNxQrmLoTrlY+RSsOjIGMlvhFXP9l7d+MS
+9YUlTNkKvg5HD0x5lAvd8mO7o0OxX35s//g96YEG97LICQxR5MStTlQSWp+c5zj2
+19apZ7N2O3IqXDBoqU4NQqmEyPQlANRE0heqeWm4iD8lhwKsRf3p5A2nLGTDpD+k
+UMWvw5CMRjU65y+ASheiTTRfdQXdSO7wbUcuNQym3UP08mzSbt+4azj9Zq/8s/A2
+0KoKIh9XjZTz4nZ6QY9H2dtzdjuspt7iFSt0iLuh1l7UTuP8yGOwenQ59Muv65ff
+YbxVWum4B9eAGXGlnEWLf9KJuRaVmDmtelghejsyKjnhUlAm14fQKGBT1uKTCM2a
+0BUvsh/i0PQFRtuQ+p608465hXFDpqobz+NkosP+vewdiJbktGbXhHChUdmipxpG
+yGJsyn8V5drh3cLtG3tcsSPHFLs6O3pKNHN113eGJWCpEo09arC4HdYNZBxo5hsI
+FSdEJLkAUKjEsOWoBvRj+2n+8vMPP/3ea5NmSUlBEhFxBHK13DzuTb7jORIU2xq3
+WocA5fnwKyGnJIa/BBxscMgP5EAkczErKxvcYi7ZgyCAubVQ8m6iCGZnDphb1b63
+XBeL9imfz6hgjV1vHCKHJoho4dkppEYtOAp0iANxlDcDoqBnk/fstRuijI4e1Onp
+hs5cvHnsGH0ec6KWnewuJ0diz8Yu7ZOraVLybslotQ5M2LriMG4WRzfqH//7D7dp
+cyHqs7C+RUzH4qvGOQU3FWVhgcT+yeZ0Eu8HF5pEC9I5xa+koH41clNXi3eLQr2W
+zVhWE0fJsBfTrmGY0in1U16ABQjLCKFsWKIQiP5PZHZVTiX0TYVSpsCq3d2OJUrX
+XVUULjXZEj2aAYdTeP/SHZCDKRYk7/IWHOKlWJxp9dEUaCYmuCfnYl+NrEgTlCgS
+SrEizkWIdXlhQ8w6q09HZ5of/9Z+/Zeb8jSrHUJjYRQKtyIbHApyije5jtVC58Ds
+MNndDV2twMWcUS+sYEcNOseWTejSQ/AQRZxttJ1xTdGs2s1NK06LQpt+I8m7RYVy
+HOiyzK7Y6qc4vGmIr1VHZ1QMpLyIl/BwtBKK1demZFpPQ+fdK5dCZQxuCkgDayFp
+4IjkWxoRGyeON+NsJ+T8blycS/TLkYzA5zVzTKuoo6wqUL/SEUT5+PPffx3rS3me
+4lhN0GTlksktvUAvjjq4NurVLZoRp/oG92MreCk4bMFL2zUucoMCVgKT22BfVSka
+q2LfzheP/0rD+B1dYfE6HDvThfdNCQsNVEsNe6JPwIbl0LgQ5bx06rMRcUeIRABm
+i44JFFSlqNM9d/89DKNiY31pbovTFKGjgMxfCUVZT//e91Edy/3AQYxGWEsQWIBK
+4E/7WhhTudopSuR2dCj28ZebJnx9njFbn5nuWb0ytcqiiGm5nrKFL9tWQzg8U7kb
+GiMBnOwoN8I02XiluFJw3EwYKHMVvuKikDslRNMME60UqWDnhDCb1oy3Wk9a99ui
+7bXyRjRBYXHRwZyyn7jkKXoFnIcxsjUK+Hkgd3dYw3L3yuIVUyRXT0/iHbXTHYuT
+HZpeyJIqlC4OGE7m7XZcbYSYS8FULCNIlYJFLxjnBMeN6fG0fdEoaZfjQ8ScbqGa
+r/UllKlgIQyLTmpGnl9U/YGJ+zJ4NOLGKMYuKmwzutSW6gWFQ80VWknWQw4Q9dTm
+qcKRoGWCh/aQcAcO09f5U6+ibHXoDyQgL7Eded6GWhJS1dRriNe1UPFHUQwW0DKP
+TN2Xl+4FM3q9l9EL0tM4hln0pnIaVzgqX4XWztPJ+zLynBz/KKZFrLlSdfrEyka1
+Cgvpj52hzb//9EUAbXDWOLKQsNEHhLcMavRiov1DW0LhQbz2sNDhduTpMxcD6D9y
+VdqAhEHP6RMSV6fWCz2gnAIomhphFP0wx/FJ1Fb02pYkK5N6SfjQCV4ubMFdMOiq
+WYQqxDJcRlsnUdNllOSG0uNAFKMd3iDcvnFojoJdLjGGFq/gGQbceoSrGVuB6SzO
+PUfo5GZYCqK5aUz0KqPLvBWB+uxpulXS2cWPxvNfBPY830eJrjbRjlJLaPtS/q6+
+CKZX3Nn6NsdT9vvIIzSKoikbSKxQ2s8K6ldOS0MAQxvbcUnnqBOG+ImoausoWmMD
+U73Ynx1if542ezww2xSnQJWuik4ouiOvRbVVoc7fuYyyo7AnRtwt93g8Zf6mizlt
+j1MCHcG5ZqS32wLwCjBR90CTuA9nU/Zl2OAQSbDTIAgfKHhL17pDs+Nla6pn4/2P
+L6y+bKHphQdIpEVDSUSRSS+blI9jCqIHWmB2HOqK3AxMMRILyyLAE7ZxFJuI6QuH
+JMftWpuV1tDiI5fOHqqLHeKgjoh2F70GhwGiC0Rsg3Z6EWGHKHCdPCGAVL1fJfLB
+EsCoLuqIQLRyuMduXpijNfGSGtAo5E5KyUzgDzuULCq0DNdIuA28PV+3o4pzimUJ
+cimoc2A7RL1jMchGUcx9Ml3/uD0Md8RXfZo1yOA9NR9BA7nSR9fwXKPc/LCH5G5k
+NF9LomGH81RnaIvvlNor4AoPcrIsAIm2dd/BiGmEoV3XrBbdZayt3SSAhN+DmJ1I
+iRbUuI7q6f5qWCpM4x2uSzZWbqB2QNqOc4NQzSH0v31jjJiRwRQXNA1hMAEgf7XX
+NDOoDWatKPMfzNjtsMg1GvxlANL0nV6dkXugfcnt+8mU/b/t77/+/eMX5Yj8SQpq
+JLoXEkqbwud4c27hdfQZuc48BP73Yys5llDRImlm4u9RKsUlaaeimfJoymph2zw2
+AutNQVkZTampYtuknKFvGLguVgqzVQt000+dlbW0CfJqeufYqFspWmvb0T/LcRm2
+MHrePD1Uvn/nq9tWsN9o4jvWmH3GreiVtb1Xog1fdMC1k/uArz60Yqpxyjbg34Ks
+TMte2XFYTpDKS5ztf/780w//ODL59LHQY0sLHu3I1YdYzXSJy+jktZJBPO1lKHn8
+FPGfq3xbK9qWXERklcni1TU2atZO5z7HLyr+EnUr3EVjnx2vm9c6eaumDKuAQCmY
+/qZSY0K+ohuOxIuYsb5P4n6VFJq5fBaspF9hrW+4rB+/vR0cXnvMBzSXi6PwJnQM
+ApxaOcEWboTNCzH0+BHiL964qRyROVfSXqKAWTSHne6Xf2uKn/tzigE7hRGl1AL6
+S2gUiDP0QbGdoJyjwVpU8u2JfT42DtFcmZpgBSv91F5y+G1Pwc7E8V1RVmhZ/xXv
+Wv1rYJpSVxT8aBTLKJAKnHmE0wqCzsIuXbkUqUEhwsw/puinYEI2JdGK/VF0jdn7
+sAfT+fydXV/orME1xL8b3uh7i39mpdXVMZ1XtBcRfWMSXzBCvYzeEUPhZIn2p5xN
+HTRwI1rSj6bujzJCfXXkP6UR6qtv/H4j1FeHfYcR6gvj/VFGqK8P/ac0Qn3ja7zb
+CPX1cd9hhPp8wDt/zoKXvD4CLW9cKG8x5tGIlBP8ETKXMfkboh9vjJ1BiooCCYzR
+c++Zq6osditKHoUYKTSikHRlFxX9hFQ426SlKQblv2Cv8qEWqVIXp0CPNPS5yZ9p
+xRK5GLJad9fJJrqSCS1Kn2bSbvvG2eUb72zF3RQjZqydDsICztq2Qz9H7hvDGYGD
+lzrQ3xg4Ckdr+XplUgpyMofCiQnMOGr0ejZ1d+ZWkzatVigM88LnmkEjNJqDdoPf
++vc0ELc5DZP33p/WcqfGzYA3AltbTNxyjCuMgdvjJC2Lu4uAN+xSqKrNFckSr52m
+VDXo/YgUmiBD7Dgk2aUJnxpaHBXAvHCzGONQdm5NzAQhPmRBlJRma6dTd/c9nBNq
+w8vIICg/uEmripTKFw0eTcys4g5HU3dnqKakjf0Sm8IVq4yf9R2S1nHpghJn0OTO
+AkVviggRzWUGNdnIBWMXi7JBCJT2+NZ7caczd2tV0lHbsmLoDUeZra8rWuDoN+4b
+UZWFZ1TWX6pUPgqbi7Vqw199zLMDkLTLnOUUSiwPCcOERUe2tVT+VMcPSMETtXqx
+CK9p9ks0zep5AjGnE3fzysrvi6I10QS+c7/qRo1vlFpZLuqpFXWxHs3brbtKimNv
+/BbdyJw36CfMYvTrGvW+62za7jxmUVNVGkbDb1GzJoidi0CKYnFQop7ajHP5cTpv
+t2PT3iM4uHdGfEMof0aM2bCro2tAPHVSRmOwHKw5YaYyvGfidoXfOT1+xjnpjKUI
+ctEspQkKK2rniofh4ojEG3p7IgjNbUoHhOoDPtSniPLez1ehckdMBdcoCMMYZTZw
+cA0pClDVsimrHUczdztw55rEK9JqKYsVBIcqUMVYZl5CI2dTd2+oGsbYa4usUIeC
+yHdJRgOXIqYs5F24+eCM5XTy7kcvlLMaVO7joCcZSwGBSpEzAYs9vaWOeCZ0uiIT
+yylX86P6baZWvfiUY+oHNht4QyrCUNE5xEkLsnBUvW0fRl6uIqwTRRA8xUv6g0Eg
+8XT6vvomxusjBH2HhIyLEj1XTALbOQxNod9CRGO85OH35tAKFrQ6dVT6hr67CKOQ
+kALd6Mr94wxhvuSgKmwSAxW+IlJ5XeceVqFeQay7pihSEL3Txzqcx5ceYTgOs4FL
+bDOXG6HbRXzcsyP12HYQ4h/Uglol2m0ikmT4i2mNthDQyE76kIqemugIxJxD3GKK
+POtr14HLgnKkAIbXllyQQe55LWrNVVj1cDJfevXApivV4eK2WxMOrqhpkwTzzMli
+IpGDXScz+qI/7tgYVdSOsnBU8qsrJCJOL3RSnO3MO8fWKqiNG1wRwN/ipKNzhFWG
+cAbdJbY2Kkzs4XTeQS7X9UqNa9KJ6xUnnwWcmZkNHzRtKJjNLGCj3alAqMSJYTpi
+HAXxFJwdtcy0qIoyflaWzlFIJSJF6Jr3uYjv6wMEcRsBOkG5sER3DOI5pR9O4x1k
+VtSM6PrWqEiaVkFVQlQHd3Nho2KalpZQ+sn03Y0buK9aQ4i26TfT4RC84L3w8ypi
+t0fTdouJWhcP0YoyCasIYfQYKTUWnNlpWm0crmtEig+n7XZoh4NVqbNMWg99jmKl
+8+p8iJN7396paxIKEfm2wp+ouxdLXF2taUeN6yBNmDjrC2IfswU2neHqQ1811ImK
+sqCOmAYJ1orfUCONNrxYSjmlDXdfI1JCrzXSomKo+FQJC85vxKYuZRGq1pZzJ9N2
+hzz1BZagvFhoV36y2tn6CgpxbXJ0ccb3biBRdjUgVysoK24sHpoxANeA+gyXgFQf
+XRzlFHje4k6rzIV3FN1KlFcuIoVioebBCQmQWVpuhB5LyfXGWljRdU6Rq5GSVndB
+O4MWnFyjRYCYTRm5eB8jxO6VlPzoJXWuxhSbm4bwqWpTCDQeTtotPEQRZl0iiMKw
+w0/T3RrJdyXhHNDWyEsJxpzM2c2wUwx/4YUsZI0P7BLvTzRMCp0hX3l2snJvqCqi
+WLdrioyNQjpu1CzFdZPa+I2xsVfSLu30cOV+9IJOmVYuDob6IsqtONgK4Q+729Xh
+uq5zC44zE13RjiPUOHc0m82FpipaHxOnzxEoBlOo9A6hz6SIZc0lDMMr0uaF11sQ
+ckESSSApHp+v3L81JaAIgeh5XQEAIYNmRBtmW+IPSiAR4QB/FCm/Gtoq7yj6pKsc
+T7vCc/hOx2hIyFCeUfU7W1VFW5HeJuiKOSvGIUHvSoOH47wN3+QWYgiHE3g3thIl
+1+cKMpqNmRpqK4n2gk2JdBTs6BZpdCJnqYMqb2EB7XzXHZKuaWLDuOnQ2n7VIJhd
+ULASk9eMcao3kBTYVhSsp9y0XyNeWUZ7G5mrw+m7e+dkF+7DU8hYKKrQhreVTB3l
+guIRQsua1DSPqPr9x1Da1aYYwhLC3JWm116RLbFohk57OHVfnFWRqati+V1ZrgZa
+qcX/YhcqLCWKo1DT42c5n7kvQ0NxK4rxoB1xMy6cKjVz2LPR69F7FdsWBpgBdZWN
+m8/2lUJIhw2m13xpVykrittYqlKmuCGJfUQsDSIXk6babm0qyYaGObFDn97vcnyu
+eeczy8mgtY7aQlxDtDv6rvrieuepb9M8zlFv3gM998XFaJZWFMobNyoyS2zEoAWW
+4anPp+1f20/zh4//8vLN0n/+P/7rf/v3//RPHz7+zx/7z//68cOT0bOYTlMaQjZ4
+tb0vu5w1XEpTaUVhEEWwl++D3vG4KsAlICRibPFXE9O21W7QUUzKDg5SJMwccB63
+BWfGsjKNJlvTPVHCKbiNdSrh4+YkVogGZdbEQc11B9+GNiFOiRhNoHUmCoGornj4
+fJHQv+NnJAVyrR+CttG/CfRfpiTOcrks0uJN6nR6PJvydzyrY6qbgmiwvoqQDmeP
+fqbSHGedrj24DL6659XMhx4UvwIt9WKNlds0gpDz1BYICNph3cPT/9VjxOKw+Jx1
+xIE0yajIiIwrsiKC66J294i5YAIhCKN1Tyfvp7LkjNSN/pE2NZsmZOH1IjhE+1+4
+qPNUAMg9c3Ycd184U5FXURos6OX0h6f9/vXxpNc0WLS1RSKZCE4PoxN5b5dIXxZZ
+9f6x6b5/Bs2/Qu7ej+bxt4zTt4KaxqTQ3ZZ37vbPhuMi6CiI483BdZ7iVbOc+yb8
++rg8zTlid/neXf75N+wWMJq+Oro56dlxR1aW0iX+SFE/RJwiwbvjp5sELbKgXS8u
+MpRP9bOJpgJUU/lVE726x5FCkBbRb0Kp0q32+xTUChvrQ1HkxIEEy+Tdu/vJiHzi
+b7GEBRz3q526XOQcskWUUwuq6j98f9+u/gyjxCuFoVEfyWZ5Gh2LJZhszbtw5JvT
+/EfeC78x9J/xYviNV373zfAb4z5+NfzigH/Q3fBbY/8ZL4ff/B7vvR1+a+DHr4df
+GvHFY8WFXjYiicsLJl3VgULrYPUJ8jOCA3Q7nE7hiwe7OQUcjlGzQJNjDO/oBMMT
+emciaWqpoxkhMtl93xxP69d5xYJLRlhBnuaQlktI02GARguMEYDcmytmhxlH4Vgx
+63X1YxweWoLdO4j45tOpfOndM7aiejstqYTpaK3jKt3BAYADJxtgq3McTemLD3Au
+La1OrfaCi6poTsAuEwijX3c4tXdHgki6T4rR9rraKXD2E20kdiVxB6pFFQWPo+nt
+2HviD0pYrLRINp+xE1GADNUL10AXshBkdwo1RQzCrkF7W1eSpr3XYF6ufz7RFiCe
+pRH0JQvtItrn1qyWt5AolX8Z2Xqnv4iYmHaSsm82/XQqb9+54gQVvaBz5QydS/4c
+0vAeS0t9+qsyT/n6aApvB54oLqaivGBjHwL6cYlhG6ThvUidO5u622PB3fHbWHxL
+sU+loZhyFTEYo0bcCfzSjo9HTObZ2FgU05SwuNFMnGOha5l73OglJiQThc9n6eID
+uRbh1h6t53x8U0kcg6KY0KzCqL6aV1TNxaNQbzilwO0eMwvtWGcveXOh2VUNxhn0
+gO68Tqfu7p23sJ3pyV5lylZIMnFDcUm1+dFFkhq+Felo6m4HFk7Lyxqq5cSgq166
+cyXh6dYSg4xnU3d78x85sHMwpoFDqZ9B7zVo618mO4Nr+Ojenc7c7QksineLGwrk
+kSo+RNfxuRPYEr5WGhzR7qlMK+iHaqWtDoekjB2vjaPuGbfFyqZY/ULRSDhFwcxa
+G9Z1o+ydJtc1rSNrWccGVSNEmIOm/XTibl65KdvBMqjuDga1oG7IgwN5lSqCo98g
+mLeP5u1m3OqARDReGVNIBLbtrh+uvKDZXIc77q7GMUVthYSuGBYB2LINRaEqHoP8
+qZiL9ksbLzvpvDn4jhRiC5ukC2VEtw2XCChoawFSa0CzX2mT0zcbkZCHKguxiHtb
+5c0EOSi4W6fcug36o74gg7d7iDbpn1eqgyRmbdRGjzUdk8KqFR+mcjp191WfGkcT
+5IQ0KR/r3uBQuUTfq/ZKq4u0vVw+mrz7kXfMuCo3mvlc9S7rhe0UtBdLsi8pzb8I
+jO4Pda+eM0+oiYXWokZjpbahG4rppuHgIRRzjmC+Gl7zJnIuWFGvCx/t82A56V7c
+LZq+EWcQ5l3lQmZDQQCFHLE5NOM5JqdBBpkp1M316faadFpx9o7BVCiKb4pkvq1O
+8TCNJ2NkZQDRfiXvdoxD71+70yXUqv5dO2aNJZpaOCi5XLRolWiXQ5o9g6L3Y2cE
+anHVsxhnWSG0TMpA/dv7FxutXxr07ngX36e9qRWibtoWfAxLGKiFKwHUlJRkBHvD
+6STeH9Ibi5NBRvhK+WJc5uSKR5waFsETbTr9fzUTBckQUqWIS7sA7+aBlLoyH0il
+KHvqm+2GGfYV16KbOKoN4dOm/Lxno00I+b3lEPI1XoE2nU7h3UtrwJmNU67GLmsK
+ccVylWJrlXVt8lgK11xnIfRu5IxSkjZy672hh7ur1kFS2hKYCcqxp9P35ZRXmWl5
+ZJG8VpVWHn08lCWhS9w46bz0qVw/n72bc3qPgfhAe5hrRzOxUjG+o0bZfZi2XZ3n
+qM5ywDyUhsEdABcEBRG9o4xRaSIgpBy5ixT+LCbVjR4y9qp9OYri/CDc7k0vtzZo
+Vt6043zyvryzUBDbPK0oQIHaPD6kA1GM0UxsyK554/I4nLsvA++2vJ3IE63roCJR
+QZCMcLXrY7502//SiHflq1gNe2RJSnc7CYXvjVufeJomTJDepKkMs9vp3N0NXn0b
+yn3afgKVg3YPLWIaTrAk8iMkzaCojx0Cc9qMI3P/Er0V4dJ/EKJQhxGjE3AVhtzU
+Lcb+yRU3KzsKvrUMrhWjXElUSoSkoHfYhXJSP8acdy+9clpzdrBLFa6iJbJlKnJ7
+Lm5ZZEEyPhBHs3c38saxaa5BmeXUj0KcLHAy3OEldR1O3z2qXwUDEZSHtAshk37G
+idEQfNvTmm+GOyZ7d4NTjmGURmObTnSBK7iIAWm5TFcElWsU+hJ1tWLrNN2JtWu3
+26LEE4UmE9Jo2MYqMMSFXjgKIyIZRK6AeUJECoH8H8ecy4rJa1UPEokdph5P3+1L
+++uG0Me0khP60kLaIFAkgkWsPcezYjQunk3fXf3KDE2oYlEdPZ1WtZ6RaZhVRvBm
+1sPpu8GzRpshYPSc9daVA+bc8TLWBtl6TLHNTmVWfzx7dyUhkz4gDrdGRaFKSdpf
+4vqXeFXyewHB0+iKTtW0yA4t9BYnXy1nb/pDqLzRoSQo2lvNl3irAvvcoSkUFa9l
+awRGqaS3lkqR3anX2WGd772bd74qWIQrrLDmdq1k9FUWE2jW9pY2/sXBxtnc3Qzs
+DaawoAwNoWSQEqYoRkt0aUuXfjh1t6WsSiBOK4KOsF0V4KzT5yiRylwjYBACcOsb
+hrlvDh4KFKSKf1Gj4HNdXt9CiDBUCHooegS51dJbbxRMAtXa1F5Ez1lPwpOTk5em
+DIFaDLcYzaaGUa4B4RuPTrD2he+T7mZrRQKteGC6hB1PJ++u0pmLOKvfTVkbejMp
+zCqAeJG0lDCLH5eF0tHs3X1rfWRfO0fyyHZfR7XcUxaHQ/xLQiMvDnlfyLqHtzQf
+K+IEgT9beyf7ax/spMQtOkUbcT2fwK8Kh3fZniLviiumUnSoqwZxgkhZE2q8xSGc
+p42oANKG/sLUXlTupSxAKyqAf0X+0r5u1Chjspjj+JHFlpQv9MaZcqE2kDiM6M5A
+HJaoG0rEp1P41WsnVO6pUQ7ULIpShoTPrF59UzijvSg+W+rZJN6P7frCsm7rKywn
+1K0crqSvT1MnzmWvwJfPLi3ttx9+/uk6Gf93/eeff/uwP35SSOmC752qPKr+cO5t
+/upPQQ1JVFaoonVnX5vIVx9QNEPCkWJydXFsFIa2dyviyIjdi7+5dYnTrF6oxVk1
+u0RFcLS0dq9go5YRR9wK6KgeKEEZfYClcfWywYDjRIzF1BR+szIfd0yWFqlUsjjL
+a1P56otr4RiFBtwqai20Wm08BExposYVcZYmWDO+fRv46uhaIA39S6EvksCq1D/g
+NIHKu1DN4XRyx6hBP+naKz7o0/akHCC0h4twRp/QApCuLiU0Uv3xTN6MzT2xjbUC
+P7BL76unohRrA5RuKgk217itQvxPtLmhZiP2uQrdwIqLmuegjIj7n98YEYpDRnwH
+tugZt7eMLUbYOsKFopc7z8rPoWgwp+NJvHnn2TiPRT1FgX5fsrLa/CIxbePgyF7V
+q79ydP3NgZ1WcgaOZ4M4dBIcL/jn9KhN+drUPV0F/+23H//1Uy22/o9tbJVk6GyY
+tItolYmF2YnZM0A8v3rw+fWY1M0LH25xkNqdi6V6DnOSvrLhPlefAkkGdBC0G9HY
+CSuaXVAjjHFaoUqtFc7ciAtorui36o9x2t2VPvvlA2g52AtLnJ46XCFYrQgnMFde
+DZ3P3rVQODd8DsJGCYPyzKUwXXpaRiKaTnu5m/bNKfp6QOHpwhHTEEftpWakFYxI
+iE9O7+/321Pz48+/rk+uLzPRZFkNsjWLInPRuqlIJi69uWOzSAocTc3TmMGmaEW8
+CodUnXJupP6rUJvTfsEZatDKpCCn+YplCQG1WunPp46+6iPRNNo0NSMYpREnlo0z
+cb0qrXEe0ZoXcLkujlzIRchUwGrb0ZSruzuZmqd31evQNRgdiRUfVbrPFMMNZkj+
+knOhXiO+OTVPAxKML5lm6vuQVzeuCM8odedC78DbU/PLx0+3D0FhUgHCc6WC6QWO
+8DlUrsJEcytO2q7Vk4n5NGLzAa1Lb4PCcMsLiXS9VxX7WiYKmSfFMvgxKkTUVtAz
+oj/u0HvgPkCwcjR8AoTQoAfC82FPPOEQPqDIWxNDx2EWDqiVthjW/MycZcR0Mi2f
+3rQURTDNg3Bioo61Cx0OxGOH52KnKGBU7BDenJRPwylmKcsPoeQUFXGUp0NFgF/M
+U2B05ben5Ld/XBERPTcBeTy0BEdmo4Wuljb0Soq7ERPBjgPzyZw8DSnUp0hABQOF
+FqIffShI6fcqgs26N8ruPlO4SwOYMhLNe9tQ62fHZWmmXcJpX8so8Tjr4MUiXkFA
+bKJ9tLk68Fs4zfaORl1Ki4NJtwUDTybl86v6LHgt8h1jdopgOJ9S5D1SF4JwfnZ7
++XfbN2fl83jEwHBpP0WF3j6UFIbig+XOUFD1pVqTT75SD1UwTuRtqGDwFEEnBMr1
+xatWEkqEeJWISNeXr24ef1zsoUYaNPGZychDDcMN+6RvhUPwRblBFh66BLNCTHQj
+xXap9U079TkdgU4BY6OjEYiLbaO6qxApxisa0ON1eViw62xjCvQMKhmAPi+67b3j
+ZygSGto2hGiUXFwVqVBmESLF0U/gHCH+lvcLUfEdz4q7oZkuPtW4DY1laF6umix8
+SO2Dy+CpdKL9/PffnmrRBKvDZT+J5ZbQv/AG5lBR07JxQ/BVkGmEh9fAC8/aK4yt
+mReARBdsaKciBusKJyFWj1HADG4qsU6xHKs4Xjq8vTflSOf7J43lSENMnEHLtWj2
+OanG1nr7gOzPEKclx6CoKWCH9vcYI3L3Ox9eAC/8BmHbMpu+RMxNU7/9FLpYVLZs
+rdSEo5It2vKPzf5LE6OlFYJXJrEZox89Q0u/4IKh5JH9O6f+86/wKXkFVq2motgf
+vePEb9XBTgl4PeOlV8q7Z/3z8hVXEGAqWH23lCeqaYbq/iWmow1aRBN2s0lhQYRC
+hCAhdVnpxBZfFCuYYurFaA6V1Ebl3B8T6IKUgSiqQLyPBR1z00M0RcE2Zm3G4DCT
+adu+e8Kfzit9QntvcxGqkKINLpJSuBIts9OxoxgwXtBNeOAZg+rqIQZVlgiS4XDV
+oAfMIWu2bb4z0N8spEXj78J7Ye8caFRyGAUXDBsWrgalcWic3h3lb57VMLOldAJZ
+JoOukhge5cV6VJ+i+H2KUneqp4VjsKisCt1OC1HEQXMmOLkmPKBPlEdj5epX/Fjc
+c3n9OVHZor3tFZaKILDlqqFz77IpdG3p3SH+5jeYqXAbg3Z54G5AcB3+2DlUUjYU
+Bmel7Zdufh98kLvucVrAclbASzub7yOKfLVn7frOqX8yQrbZoQEszi6gvWm239Tq
+ivhGbsCUUFtZ8d2z/nTXszRoGwToplgVml+NgxIrTL4RyChzNe3/0ebwdMx7bDqq
+/nenXVgEYFJtID5AneL2nFo4qjvEKxZ3/kHEsiq3L6O/HJGzUa7VP7AABOvdE/55
+90WPiPtEpSJqieZUaKekQrjgrmc3giQxvW+un/QrtJ5pacCoWHG10c5DBunJpWnf
+nubndSCcWld9aLGgTRuvEO7GotQLeyooKURyHJ3rweS+oOCWuX8XUt+ik9lTPVg4
+6r6w6BIqpQxfzDV65DgnKVaRWetKkXzGWnuj/I3u1SKUHQdSEhQIJBxOFa7LWMoB
+ndSfEf8uWEgoaws/1R3KSZZ+4YssU2GoVFasC2b6bWJV5EEqGP9QRSVRurcm8vnI
+ohRJPPMS6dZPqehiDBx7FNZaesky66Uh/6hi/deH/lMW67/+yu8v1n993HcU6780
+4B9VrP/G2H/KYv23vse7i/XfGPgdxfovjHhfOLC1vkYpFbXgTIm+8p9ryvJJhJLe
+bH3A1I4D5n2RRsPPOKB91RDlEfFELM6LKqBNlFNPWLv0YLm2MruYwCb3SpkUuPRl
+FyBDQ6SKeHLYys9Z6DLXxdlfojrK63P2oKgpWMWZSC/c+4+RnT+dvLuX1uTs6Fem
+TVJvq4lS6FTcGZYCLK99w7e2Z/vubuSGiA9dnDbiKOMWarFNTGA5RHsO891Lpf5z
+KLmZ5TbaaCXg9z2VZBYaELnmsdZVdHK8A196RuQSesTJzf42dSvch2rQXem2iIN7
+0W/NoICq46C/Kp8Zl7IvJIQrcKZLs7a0GJGrX9hRdK/kiPlu95Om8aWgpg+tqFvx
+mVvFiw9VJPPz6WS++H2q8IyA9AjYLgeRqeaEarziCUqrOJdoD411NKcvPUC/nd5u
+WzXeEoo3yBp0wTl/qdjNs6m9XSxdnyHQ096Ei5oLc4lboZKC3lfh0Mc1fFVPp/RO
+5ebyg7ObQ8nUyXtLVHOJ/RROj3D7mV6sC8gN3ls46AT9ETrPk0lDHIWjhBUUQGNW
+TFLI15ZENLcjub31TatXdsJP2Q4k4TopGKM0pc7TqbxriRBwWbUHg6ef4t9uYoc9
+JPF0VPmzUPLUz2hHU3inJpSisraCC0cmM3vnKKDNmNaLhoV9NnW31TwDhs6Rwdq+
+QcJD1BeeBncBJHxjx0fxZXOft8bu+pDYwcRGrRGn2kGJUQkO0aNCX//y2CwJ81kC
+jdKv4m/x3HUNg6I+1Vz6B+hNUFzNSDaa6oI4r+/Y4GJZkTAUVWZ1ZSgSI8kVaTsQ
+gj2duvvvIa4gfhv1Ejiw5T1LpQ3dI2HYcVF2Jqx6NHV3A5vBxe0EalFBFsWFtEJq
+UO4VoDmEMreVTdpXPZqmTzQh1UIEdglyQka3InfrRn+j2NOZuxm6JE2RwmUwJk+l
+w42V1hbxCfR2pxl92+ixD19wf1ra2z3lGkpAGydXfT6qJrjDd7iQNXHVgmWbZlpr
+12A/6WKIc1fUcPzIqGMqEwjhKveu04m7VVnUP+131bamVis6fLoFwZY2iPJuD9yQ
+XrJpJ/N2M+5goMtO1gHsBLS9MNcm4mPCYQ8R6H3pOFZtStqz+WQ0Z90qNqWJ6lPA
+LXxQWN7SPicP98NTZ9qVtFdfGMF5TJcynlKKcm2QEAPpraN+w2UXxyHa8ml4o0Uq
+7FM6f1c5OGPAiBA4FzNVtFfTuqaCvV7Z17G4F5o9171E+kdTIKae5RiHfiXUYxTZ
+SiyiCmKVS/kI7Z8eOJpNXnBscORg0hkU/UrzRlhM/KyGiadPFfKKIkquKAsMzNfO
+pvGugBwbySVmo2A2GvJBWhpbYNrVFR2lsqvnpXh2Ool3g+MGG32gAEs5riyBCyt6
+oQRVdxHBFjZdiq1bj79KlV1t2oj6OQLZ3va5aQ7TEkp0r4owmWmaaeHSi6lDm4LO
+w+vedVWNIDggMtFaptBC6KaeTuF9sX4cYiNOIY366YjUXI1FPEKYqXQKKJEN2P1o
+Au9G1ieY+sVirQ43i7hoLpmcKBkMdsbp9H2pIec77l4jRruiXukS6WoR8yd6W/aE
+Uptczmfvpj7dKQIHoQt9jDTBLnBfhT8uOUSwY58cpxff6QuLZSFZj6+iuEFuAjm9
+oXRUc64i1ttmbogTJ6QU43gDysJGoOHIExSmuV0ZSKcmJBX2+eTdvLMC0coorAo4
+J+tW0ZT51paLg95Fi9vfNqdz92XgoZ8bt979OqJWSMp0Ck3X8IqNL7mAvshN7qq9
+WeCOXawA4a2whaim4nKig8Pqew19DWvDMQ+8HVw4UvGwO5QcuiiUvn7k97fLXyA5
+4XGlQIU5j/iJsEJ1jhKAOrG71cIBwRjeb4t8VGUkFBcVh4VewnAObWFjo/VIFjZK
+9/U/DeJponA5H0/e/RfBP2ZSKkyxEUrDK3svAi/kJRIojog0Xj/LfncjKycgwNMS
+vt+eQnoxwDTb7l2/NB8izrsiZD6QYhR1BV57kAIl/c+NXvoQvxQyblyaHM/ebeU0
+B12tedH2ilMpgFKhv7gk9tBmoi5E5K9MxRBNr0Bemhh30/dI3/0YAiJNrzcEG9CO
+H1jLt0alj1awNh7VuwKEaWuXFFFtTbnypjJh7Pn86OyuQp06GMw/nZgCSgCLS1LN
+5iU1iBppoX/ycO5uy+pXXFupPhRPqb5SFb3jCknKhUt75nDqbiuQFXPQorQuF4xh
+Q7TdV+NWn3rPqXA1tiawn++828Hx320aQuBCxJzwI+AZhGOvmKFEDaDNBKmI7OJS
+vFJgdILRLSlsbk1cDGMibzgmPWfKFoI51UI3UPsVZaLiSoxUc2cthXPJLv2aodQ0
+jmHL3UvXXrnDttoc4tD7umjKFH8rFlFIoK+/tjD02ezdjoxNGm5jXSs2YAcqHhU4
+XeU8UBTocPq+qmuO9WqK8VUk2ZGQtXojZ7db4chly8ZUJjqewPvhxUCWPnXQbtL6
+0IQO47UFkezluJIu0GAwNgjOt+m23mRQltdHy5gti4LiLCtAI/qGO2fpAiuiIVuD
+cNCnuV/7UomeNDEq+TuBuoW87ljumPF99dpWPHNxadsr9FPcPeFicF1pzCz+sDjS
+DmfI8+tPEs3OV5/ianXTU4yAHz12FV2IF6bxR2H0N66d/+t/+N++6EHRsWcRtaDx
+lvOQggGuNk0XTqdETRHlxQl96EEVtXWUvJ0Q6d51K1IhyaD0W3tW4sXFOIFmBFf1
+g2F7paQE2BQuQfVwCZxmEBwdbtqDFX8LOxC/oCU/l66EWPDwjWVaagsKtao2KAC+
+eKT20A8gPOg7IRTtLUW+irWdksgtTqB1RSUozczPJvmhpwiNKZp4pwwRp3F0NAs2
+ifCvul4WkD4Y/qnSS1hP8cWGmYQoK/JogtO2LF+9UBr3AFQ0x3fO9eenKKtV1PC0
+//Rp8nVORidEH6khhJ/qWh6LLKFQ06nHE/RcEW/ElJhXK+4xRisF+fxWFXLK5iq2
+a4Q5fRrYy36qf6VC1lKL0RW+Ef+1s71zop+u4/GTHByTUqGAZk+IOaa8aK1okUtu
+IYGR3jPLH37nZj5SxSZMgcJl1AfqblUayjB7fWuK/9ib4LfG/jNeBL/5Pd57D/zW
+wI9fA78w4h90C/z6yH/GS+DX3/jdd8CvD/v4FfBL4/1BN8BvDP1nvAB+62u89/73
+jXEfv/59YcA7Jrqsx9ivUJYWwYGVInItVte1OfCADh4h+sN5ux9bnEOcj69uBG7W
+LkIeTmBhUauIIYbIFGchcSBSI8gikp295tL6QsNAwGaUHtIoAE2d6jRdP7tpA3eU
+861+eKuu0ogtaENjj+auemRZhJUOJ+6rDm/RI7j4VILgJG9rZ5uq1YAZVDZTsE+g
+zZzM3L3RFMej5IDYLb2r1XlxA5uioLByQDybulvNeDc0/YouYsxcTGszT+GkmB3y
+RdoG3tdd+jyduZuhA50AIUWxZMOhYJyKFlOsUYwpWNfo/egiGJYKb9CGQ/NDD6aw
+n2NSbm/b1DrVzlXIalc3ytiKNs4XhU6xOEWLJNhiaJSL8P6A+ohHoPY0TN698hDp
+EvrUaoso5/dUA+7aWPfiX3wJ8894tOPuO931hck9bSCaTFIQzxNF2hBkF86m7ZaB
+ar+2MHrOlPYpXtpu4jJcBSlMck3uYp32ZUGTt8YWBnGVFnT9YC7VsyBaQiFawY8W
+esehSE+plaS9PWlPFyhSXF5oihi81OiNrwIe4ooaaZWpUBA0PwJOmjbhEwGZTemv
+XrNgvoUUy1KMQ//kdOLuTj/ctl5wpNZgVkqJ1hSrZWDsotxA4W7Q3RqPZu7u5GOI
+SSlTNgUhzkb1FZrHa7mNqmHPguVLV/36GqOEqN/du+D5ar1Vn5s2t3Ip3rMZweVm
+D2fwZVlLX3Kl3nNwD8gZLzbUvbXUJr0/+ium2CxWZACGArnc0SFaH1dq2ky4y4oY
+U8qqMJyU0SpHE8EmX3wfRgA1CwWmnIWIlslx9OUpFx8CSOVwIl96dUcTM4qIIs/F
+DYTjBOqxYymBi2dRe1HYVk7m80VVUfFh6+kU346L6+xRF+BEp2whaH80rXealsY1
+tBYx1TNuUAvhBBUse8Bcipb6kmLYh9N5b5RJiYUNTm86MsKIyyoc5ab96YT3WTqm
+09YzhG4KPc7oEK3iOecOY/gcq8jgFiLelzPi1v+5xmWpSLC+ZNZHrZPto7+9qVwS
+0lGenIrP5XQa77wsS3CCUHQhrkCmVrRORplgIJ9lN3JJM7gjwHmnfLNQBRSSNRTZ
+l6bFXPUvLNqUMew8mrb7M/QYm355wE9gOM44MZOxFFRtfK1FzMQbT/Pf3cF/4cyi
+bfwvEmfqaStXBRGzkEjZA6HYOTotKLGNrK+DZoviutcmEtaneElYzydtz4LMmJ+F
+Iqas3LedNgG3bPjUJ5Su9Zej3Tg3BedZGIfTdodbLPaN2IQqhBpP5b+yQM8cYCCl
+4hpqoi/cNL0xLsV2bQh1WuUNy1E3RzBNCT6L8a0zonCr3ui0XLF6QbTdXalPrF/f
+tXNfOPTlF4IKp6T8trzC+ya0GZYRnuXyoW4b8F9pQhyLE3qTBcm5DehtD98jlRfC
+YQ4amLIQwxTPUuCsqMqKQKyCvoMRgLB0AKUrjlJTt7WhNVEIx7ROEZn+wClouTUT
+ulK+EIDhxLhQP5byqBqxGyrjuDPLikEnc3ZbXJH0TQV9UGdSrhcdF/lI6+L5WrDr
+4bzHOdzvJ92KX9Ery9GkyxVKVaiqOQpDuIqOq8JzN/kdqe/2KUnEDEa3iIbAR42t
+qNircgvnfxihIphIH1S0Qui0Grecy+wb1WSh9a4oprQv2DdK4vC9WZGwpNQs/qVd
+i1C9pk1rIwQtloUTo5jrQEf/Hdnv5u33LvRfBuGWvbwITeEUahmtn67XFbzRSsyt
+P5oAbx6hEEoWqRzYG6ffG7kK1YrlxD23M1T6VTFHW0qfrYlGcsOg3aCFXRb6dcIE
+rVGlow8ejk9dvipD8SMpjFL9Z4MHgHkMr676gxSVzGeb0XZqdRRW9e2cpXFVmOVq
+D++XfElCdhuz0J5miOKPiGLgTutdoMh1DOQYloJ0QOGUJuY1cVDa9ZTEf+UXFVCG
+0PQ57rpin8rUu8I5BctiK3EhRejaEY//SlpUy6+J1Fajj2Dr7J6TCsUlf93k7KMp
+vCvniNwH8EqlKEqJRCsQotprfRIyDXWhcVFdO5zAew3NIG6uiIm+g0PRSxha3E8E
+Hc2HrZ0qKoqws+PyL45hBcmi0oXHrZlqXgrY2lR4oz5oi0MNykfrQEycatmKpROX
+E4JCwWpVDM7itAB9rW0dTt+9FuXU7ImXJqVAPaYGzBkFeEtQ2ODivgsgJG9PJu9+
+4EAV0Cd1pdg2lT5KKkhTmdVCqIdT96WaY3IAZdG3U/zRL1/iKil2McHcS8F1I3Ga
+vI5n7svQOC5xdphFz8ylPz171XNMjCaSJbW5UxMlWlH53YrSb21LG9uKTlkaQjNC
+C5w1dJpQL70vg7apcl8UdqHVu3HFjOUU5XV+i/k7rGiCz/N44r68svCKyFWNyARk
+hZ+IA3wo3Nq34vXPutS4TDybtxu/KKNt5TMXMUrdlzt37BRI0hVtyyGVvyvnr2Iy
+U6t87KCBLIpyjXtCYTwXI+bGcOZTInjfOVG1bt0QAkdGaeUt1DIDchYri6+R2wQk
+abHWRFYUhFzXNxcjXbW4ZQAVvmlvxeJnXZ3mCOVG7xMi70qApXVvUBEyac/LC2Hr
+IyvsXuJtpzvu7p3pkJ+KmcobGhzhLQKcAvZSWlZsKAIzwlxHO+5u4BQgCU6T37wS
+hFiDCD3N/jYGgf8z8vC1YJj1CDUhxdqMIk2zYaeBDSA6n0Kh+lR1+9MT669Gnz1G
+ZTJOSjwlqUpOQvxWaRAH4lmU7NZ1bVKi6wpwl0SSwHoffqMWxGkKpaMo5mOHIPKv
+7ZcVOUVFuF9S/hM5vA4q88xBP0TU2pe+FpJAp/nuq7f2GGcavWIT1B0ab82CTrF4
+sUEwjttWjoiOJvB+aLzmFv3MCh+OXM95IWbDBkOy+e3zzzuZKf7HiTiE4FWISiT6
+fBMjtKtE3GWBr53QPjY2Dq398crkvuu5XCZkJfKoKdGEcksbqBQqPVcv+OeFnvUB
+FONFQZKtu3a9Jm6BuLOJcCKUY4vj/iFQS6vt7SOHNmJvovRtBEGmPYRiadIa1GnE
+2nOO5eqneWXa3/V73HaQ0hq1TTixTrjMWZe9GVrAoq2GyvTmvrUg3vVQCIYIPX64
+5tKZ4gfP2rGo3Mj3fOdSeTJprIFwZfF7UHTUZEwlBmUfgQT9RX1Xbin89y+RJ83G
+gclt0XLE2FtROi9DuUatNuoXU0COxq6+LiUAA2Zj9m7YgAtx7I7kVKlpxbAUUqlQ
+QP4BA0wvmNC24ox2qahAQQslR0ObkEKynkGTxPcvjSdlnKlQthUmaduOiloeGXWx
+eJ/1DkU4XFFz5+9cEk9ljYGTAtzCxdwBnl2jKPCBTEr63qUApfpqwSc8f2K3Hck9
+0TeB/8l9ndinp45/KBFb4757VTx/tDGeVgBNOh1U85KIN3jXxIpQ/fZXl6D+firi
+YzEZ20yr+mdMcnRzjZ67DZYa9pWVYxpNBVtYzmspBEUKhzJI5oSYUqZwqXgJQSAy
+pMhSv3uBPP9JZSscTmqBusgfCrlhIyYmqKtVPpEqwqypfd9aeWEWtUwCiguZHkI3
+qeSJypRF2CREV/+AZfPko8u1sUgbRQ/DDnHTVKgwrxjKBOHWLp668x+yXJ5OjbjA
+DqhhNmyL5xook4n2V0qjHeViLU6Ey/sSAEzranW0c14Fmi1hB48kk0K5lotH/l6Y
+ryi8DvbXxhhoQu/IQMr/xkdxMIeum7hb+EOWyVNJf9KaTcKdQWhWEDfRkGYwcXE0
+Q9WNYtj3hpIvz3NT8TQlLIM1TU6AydrWr2Pa6md0Z8vixx9++uHXn3/+7ff/8mH/
+nrkGNlUKVsI5ClhiRtgKURM6k2Hp6X+L5LfT5fDKo7qwolhXQkN+NifmaCi3NvqA
+SaADnTYTM3Yzwtx+LFpFJwXcWRljpkZTmaBzRPiwaBKS4hxVQH7iOy1+IPzpRGYM
+nS0bNS+U8ARUlJpyj8fR4o2vtanVpxlqCRPuCIU0TqGttORN4o7NhqPpf+U5woKV
+RsmRKf4oAk2+eQXYTP3kSv102j+Of/fx1/Hv/vOnv7p+/Wf7wf73D/pLHz6u9uFv
+//c/rlMYPnRLNiNk2EbFILv0JDbG7ba1lzSof5XLv+exQrQwW4UgY4wgr2Cio8wF
+Gdoobqe0LIyQFZZCVihQYNLfUSjM4gpO1GwaIRGaKBMV7YaD+RmQ+Oxbe0appKdY
+wo4ctnXvTEiV3k3B+TBKHft8ORz9nOlY28ZwWjj1H7ntaHGRQDZXdIiWUYH7ebg0
+zmZuUpM8BalcvVSXN25NmTvpFtocDy6T/6A1uH51H8wH85fPT/q0PgKlm8oavnbO
+/+vE3YyOZpGt6TnvXnHYh9fHN57HTdbojoPKHmh0QrVrjam8tRQBFwX9dP12g1uH
+0TwL1G3xGJsmWpENoTKOW7G7VnIJq8cumJppxOauiT6YSi2HMh1i3uayRspRLNaU
+7R9eGN/4HXU7WkaV/HJYopAGx4RAye4UlcIxaeOVux9bEd94GIbCEWmmMvtYwusO
+uashbq2I2qL9nojxt6/XnW/iqOUqg0nc3Vij/bn8BL/PqfTUjA+jfmfEePZYMVCc
+6RWELwm0aCMVM4rA3JEIOrFihOQTf64rPVplkRENh09D/5CyptEHt9w69EGNhbCe
+krW2y+pUv20Km2fN1CnoF2nKMDKkS0jrL4TwfRHj2c8RVM5av9hxGLMXSgM1ikCL
+MIeMYLvbUfnEfUfEeP7MLVDducETHKdoXExIVBIBx8sl88Fl8td/2R/1nJC/ekwG
+q3CwbmmG0Xaz0yPxm2izNEJrmaockx9eIN964MBPJSIxMAYuZ0Vo3QtkxrpsbmKY
+a4ivTmzb5qJjfbeqBLQCltxT9KIHcVNjbY7o1ImrzqRZ597fiLWhqyA6wqi9K//2
+JcYFfnWTWvVXuxIe+yHCkDxXeWomPWeWZkKoBZzTucRMJaKkuh5bFN96WkKOb2Z9
+mO59UgwtE5/UzjvoQzyCM/QH/vmv19/8508h6kP/4acPf//7J51sr7RrtQ8XRzEK
+GzObLWzHPFFaU72jeCU8tB5efaK+VopmjCbsoPwoRMNZMd40nHAKVQMghnhITiY7
+IQX86KdNRZFgi1Sgn4MhmKhQtML4igpWfzcITcSZ6b3Sf6FebWQ0fWkTLpXaZszP
+xUkeWhCv/pJk++x2j1yjsi9eu4VLfbdHLbTZCd6g6/1AGnn9wynBKyYJZouWFxdE
+FbFE5iDN1+DS9y6JT60lNeA0N7eIfwrwXMKygF7G1qr4gIPjMt+/HD5JQPqlf9HQ
+aW11thtL17HQ9OyiCUpXOwlgWq0P0BsXbXb7kS7X3jKmQVwz4+ujAOGUSvQvL+Cg
+bGGtvpPAZHRXZTDa+ko98xK5TkKzW0nff/9SuLZQtUEY3Y2cB3TZOYqQOFLLdZs+
+q/ddFHh85zL4ZGCXKVT3kYPduBe1J6LpGc3aHvMjSeLX9fEva/7w21/aT/MvP//2
+t/Xrx6fYg70heqA0O9uYw0QtSPAhzFX9poJbe9Sn/tAieOV5QgYFYZjV4LizsK5L
+R7J2bhqqQtfypuww0VXhjRYMTnulK285rQGRTGO4+RgUfk8Xh4t2YIo4m0ih6FkR
+H9kipVrRSRNlTDBYUyBW0VZ9aBm88jvsdbcWtemXMGQXR1M22xTa+UsxXaRxr1Ie
+iAevPCzTHVKjXxz4WixxoxX8n6GMGPxDeOHTGvvL//7f/vpPf/mx/fT39q9/se7D
+b+3XT0ooeMaISy+uFlBH1rM0/6Fb47cWYUXFK5bHIsJrT7wOFoJf2a5VC334De2a
+RPXb8LZbjFYoJxHLUCIp+qIYbuCyLr4Mi8zJaXuHTunaVYHItlmxjBUiTg0zNZPR
+6BWIwCWNf94B9sKwsT0WFV77JWspu9qudG00VZCmq2rKjz60oPVfo3KhaQ/gyFcf
+hwkn7XRc7w5/+UlOBXS8mJKYV3x4SVxc5nceE20u2lljUGIYlOrE1ET4lp4kgrfS
+mFoZYbxjIdw9ZzdcjDhqXlWfTEiRqkGq8aaAcQ8Bfd1hMfLchi+pnTUaChbCjLUj
+WA6V41RBNKPztj3VWg18o4qL4AEf8PLYQGGggwDxDrgGKtWkd0z/3fsjClL02nhg
+OS3jvVZRAtPed7j0KKdNbBLMo5N+9xCjjJacOGqg9uUKN+LgRbRBBErh7eGp/uu1
+mD58/O0fvz0lGycisBpdhEpnHj3p1KOzs1BBX/QxjcAozqOPT/gLT7OlUqVsshB9
+tHMh86/d6VvUuspu1YrHjDMiQ2LthZ2uCcTLvtiqsC/MELcRblVi0jJY1ilFuaLs
+mBICglTHKvorwSifKGBa1GmwtESDKSTzjml/4Vd4RXjbFH+qGGrpnfcUdckdhUkn
+hiy+Kli4H538Fx6FN7nWUrFsCyWBSgmNnqflriRT6/cugSfYqQ9kcAMgiFhtNWWy
+YEXARyhey2Lo+bTMpe9fBk9PzAr7CpoRyypvJibZRckHlaJt6A2KIyoMYbWIhpkw
+oLsqwLgHX6O5ZdCNGPTweSHEpdAf/RDmywoVdE0VNNpF48as4lfZBu1+LS+kmZqe
++v1L4emXrIlfUNJvEKfiZkLvI2DlG3J6gm7aUFjAzu9cDk+PQ29IfABOTEsg9fCa
+t1IJQULu+4El8fthxR2XTy3hirLsvhgCGmSXKTM+4fovl9N4jvWhpfDik+LGJl1M
+R4sL0Y6h/+mQN0/DXG1gSwjbTrMUxpciH5W7ZI2qv+wqGmpaM43rcEX7QSHTSmVq
+LSzMDksXs9RKGvpKVDZFfGMEB5Qr9E/55h7DAC/+Ak0DF6iIsDh+BYo/jqMvF/TL
+coMYKj2386l/8TFI0uWg1KiYF5RhcGToLosshYEW3Hum/POJth7yOytUqkxxo5mW
+S1OC1VNTHKsnRVO6ygc52r1v3p89LkSvrSh8ZJGS8ZBq4fVSUgaDopPks8CBMryn
+Q40dTuWnqLiCbe3FddEV/bto4t50hzRBSeMLt1LT7JD7tHEmc9Voebobtg90qxc8
+y0N53+Q/+xnRiG7YbPzyVDleBjn4Z0zvAyjAId0Xi3vHCnj2rNW8ELGAjFJPEfSd
+KcNsNEH6a37271sGn9caCp76Qa0GGg3FN/GQrQpp9HXkYOaio7qY710GT0dgC6cw
+NLgMOqVb2d8PwXT6sf3E07aVYhE1XClrr3NgxJU1Jgw5iYtTGiUgoak0rvi5RcyC
+/jnR8zldV6am7WcKSBVOHPLslPxH2yYmM71/7zL4/DOChWY6lzC3FcbE751TbySI
+pn6EEpuAnA/ftQw+P8sNZwM+f0Ebwzgq3vWjq1NeC0a8+r3L4G+3a03v38S2F6bu
++K+hvSokLcRdjAIbJJucO9+/DO4eR6fz9IgLmzr81mr2llIEMZ3tFP2F8BRGBbWi
+D7iNVbopuWlTuHXYo6Cfi8q2/nISvRtxL5wa11WNL5Do3VxF4dIOlDZwjigKMlFo
+Ez3A9P5lcP8zRAAUwqJrWoSi6jGMmjLKvnUq81hL91ke5Z3L4O5ZqHFsgQtB4KDc
+4za5epoysaiuZn/fMvj/BQw8e9z/mojg2c/4N4QFz571B2KD368pbpcZUlxbWNon
+DAnnpq2U82HCXIRz2ZaQf3toBbz4pN29fkXemVJ1MULo71yrjS32hsk4lz2awGyx
+Ltox4O2KFesoBvkQj07ymAi0zDZtL7s3ZS7D4YiSgKKlKGHAvqx1S29/3tiDzuz6
+ov7tocl/8ResTpjCthY9wxKaGzFsJVDbLN26AUxQRz+f9xcfQ0tlUqoRS98xFyW/
+Ygu6vGJFufb44JTfrqblxKabL3W4ulZvU2z2qudWNh4UbXbOIPx8eLbvdrlxmp2C
+ZoGioubxKjPziHXmaHwWbFPCH0J5yqkbYBfKUOjnui9xbaRd5WLQKojIBy+LC3Gw
+4kV9allsZPRqT4qIWg5NCX/UMLuZGl4wsDw+0bcvrxVkSxtX0Xysek9hTYvalYI9
+SkF+j7BPS9BefEJDjyPSBLEQM46pFMGbWvEdbiM/kt//y3/69//xr//pU/Gy1WfJ
+qJPgIpV2o5l4Z9R802w20gwdtn9oYr8Mr/iaplbJpe5BFgpL5AEdApOpDRC4n0rx
+ylQLoRiFEVvF4zm5GQ34vN118tw6rvNaYRqPip54WV4J8VaxXdQJWqIvt42p7RRt
+0BoSBrLzoSn98troZkTFF9OXQR03dUzS9IRqtJWLoUqk7fAAbLv54qaIkFAyRShy
+ij64G2pFazGGPsy7A/O/9VZ99qT/5fbrs1/wb7Npnz3mD9y5n/7MP/+X//OvHz7+
+8NuXor06aOPRzrL6VJTOIztksjBuC9SDCc/kuB+a85cf1bCZR8x/Oa5vu5JXUwq2
+A59BbddsY8h1iUJtrb5Lt6x1jtaTNbbmFdYCszXEzaK+9XUFg9a3EbrfxSoXo90s
+iAS210RQVy7WlytWCnY8NOkv/4Q0sYfR8+KydeY8Pb4zWo1tI70Lbsh0ZZ7P+ree
+U2uh1YbKBT0T/5YATO6CFuJmDwfsD58OAC8ALhjcjfPYP8QQBF8GpfHCq8r/iudh
+EFB8fkfcvnlK1wPoLMI4sycAd+cQZtqCqinyrl3bVWAv4v7sa7Dec+Kq75iv7vQI
+oqKHaazohL0G4hqZrqRCv50WpWnWdiNupA9fRR21iLFdv+TzwzvC983bKywF42cX
+IxrBKnKngvaJAkmjP43aQmeoQH4wit88QpCdyfWin2aPiKwrzgJTsDiHFuzjU/w7
+ov+UPlcwuDTa1ANX5HVVWHdCDYTWAOHtos3znlm+e1CudqHgayOCq1cnnXWLinCz
+UP4ZCoarb46rIy1EU3vTN8V6TtwW1ry94fWiYJoI35kWCa9cbYufWfzMNdsEMWjh
+tnZrSoYLE5GgLOxh0nsm+u4HbC3/4pX3LY1t3Pos7nyM1p/vaLgjbPDQxdtLT0GC
+cXkjboPFfNY/OZtWf8PrRR+qPTDd6x+/rZ8+6n9+/PBj++U6K2pxizOliY0S7unK
+FL4skJM2HIatWdgjPBbEnz9GSx9hkF2H6DIWGTGNmvzazk4v+mCS4A2dHKJbCTvN
+FagXzNy7J2T8ysqXU1PA2wA5GG8V/mNiAzvxa9xQ9dqb2m+Xe65RRKdXZVkAz2NT
+/fz1N9rgCP8b33oUoBG7UUoatHcX8f+OK/yqD3Do58+IBl0ZgYPmRGEFTcQUESyo
+NYtFmkeI1I8/z+XdX/KH+MTS0uoA2S68vYRlI4pQWp/4xCNTPpId24f8GHF+/hib
+ttLy1aylGIiApULvrDNcWsTsVRe0T31SCizIpLqNDmin/jlFxOjxV0K5sfriRYip
+qnKCxT2ZiY9sKSHSRopIJz2OLeofWYsbQUXzx/L089fvaOZEZQN9JJoEcYpT8OHG
+V39BKSdPpY9HDk6fP8NTjoFapXIpZs1l6IcuPECwkkjhfdP8VEcVsbIWkuy9KmUG
+UQrjFS7cGl7jI9ctEOvse6f5CcFOjnxDUeqtNlvj3LLO4JmG9CwCk5ezCfOaENMd
+WlkNoZuhla1pXLZoI298FPwV1o0VOKPVq3GaqnxWMXVUyDAzCs9kp/VDm4EIYs8P
+FlQ+f/0kijWF+jv3uwJ6ZS3fMJn2TlQlF/1Nwdkx3jXNv1eY2bC7wp4JTqngMllA
+zEdIBjWu9cA0/zJ/+Pgvd8h++BSUHx2XFRZlfU+vLUWhDiUmsVp0TB6L2c+fEoMg
+s+YMdZqm9KZU2qo1OdtdRK/3jtd2MClRBAt00kdgj5oWlcQF12JxRttaC14AsQyD
+Gik3BXPsGXARoZVjKfCJW2nPZ8E5tDOEjterEg5Hb++19Ogg0rcQSRHC8AER80wd
+uOB2QMFzPAC3nz0CPf1LR1JZS7MMC0JRhONhKre/vZOfmoT/9tuP//pJlmrtFnoJ
+Rl9maKFobaJKuoVyuB+0eFzFV7Xgvh5SSMggPOQEPJUHkWs3ZTWBH5GoKPofRdcy
+AZjOTyG6hnkS1Z1c5+ifWw4bUu1g+rqN0oaI0rJrrlKa1RuG6pJHo3+Xy1hmBtS/
+owCXIsJ+bfK+flVlIUtNcctcmI229AYVGN96T0Mriartnr6pffrsp4tYa6F1ITyt
+Sxwl9N6Yh7SiPFTtm9Py48+/XrUNn7wgozLkFOtZIjZBASziCRur80Z0J2CQdTAt
+T0MuQHS8XGOSN2UKyKWmJa8vhhusa17QW0C1kkX7HuI1QfuJSqO+uGfYzXA8MSda
+7B35E4w0+/DaRkLIeGxWR4V61j9fECJaZi0BJ+0uheeDaXl6Vf0x/U7xics1bJZs
+k9evVeAXZBPcpdSFI7a3puVpPIT9Z9KE7oRX4xysPrqtgnLu7m9Pyy8fPwnLVF4C
+3USMM1xUABTZ9z2EPAtuoJqlvk8m5dOAc7etTBY1JX5N7zpmn0N5wQsaY1axSAVd
+i0lxqSKAWTG58LjPBEd4aZdkVEm9hjGc9pCvVwuFWI3C53XBsoJ2DM8J1IIhcuOQ
+E015nOyUTy+akbpGydINtF9QSkVhXiEYifFWzNRfLiO+NSGfRqOI32lXuaKQYwWv
+FYASU6uFGFbub07Hb//47fp8lmfSZIOCD04uxnrsVzaGuA2ZyTZDKAfz8XlEbIgS
+cltBCaN2lPTQQBHSrgvjH84ZllAiAh7aHfozLYdCtBcrhXFhVudNNCQuEf5CR/Y0
+nP05msC1f2wzKHs7nHSS8KTYjl58Okw6+sGEfH5Tv/Bjsw71dS1vbQ1fa9DqoDCU
+69B8yeCYt2bk6YfPsD09Pno6hfblMiwWIDHcbaeXIcMvv4xX/Sn++a//8St1AdAh
+fQyNioCaryM7zHH72kPfxaH7rpjyrcP3xx/olW3wEc4b6bz6aV70K6eW69JmunhU
+EM9verNGq1syfitoBcRnMhsvjrXjolHTeoVAfeOgTUkHhuLI4kAC0ofbQERBlZrI
+QkEeCe5bE/r4D5lKgV5YVInKalFWyqyVO5PXfyBotLNHCfvF2rp3zJNZ3CqmioNj
+QLGya86EFHYuQjbtXcvhw1//rye9DmWS2HIUt0Rw0lY3bdMW0xezqSE6QTPcN6Xz
+zx80h2sGRZiNUl5BMP6S/FGIdPqKnQ7fCGIUSRG4nBhDLoRWY0kD88LL8WleEn3B
+uxF2bqZlBRZBLdRMC5fYDv/fUsUrqarebiqXakMrRb1z+r/8AIXzUqKPe2+BXTry
+aLgY09s6SJFFWErhb79n2m+eEqwoLlZn+lAiTk1kSvlo2mgu6Pa+6f6srSgy68Wr
+cDRqyP+mVbkbac76ht1lyBZt5PfO9Wc9jIz3pAB2Vo7EyroliwhC51pcjFEM0G2U
+TQeG0gp14g4KlTHgV+E7DkH6jF64T+RQmdevPRH/sRj4psmaWEWpYUy7kXIOrl4C
+4IXaFvtNp4vDt3fK4h7rHjNESNquyytmNdRWXfblunaay7R3zfKTpKM+uGZYbAGt
+CLF90ILC4hRs08PeHeCfXMVq2Mq+/IfCpLbPTvSemLhC1V/pVRQo5f0dgf3J2j2V
+Kb4u+FVpph4VfaE6BGZFD403QmVONFcwraPabsRt8tCu6fqqFnkfNo0r/rr2bUuB
+R3l7Glz9iuUMxhmN7MVqMVBcO8fRhgL9GlUxw39HQP88EWOlHMyikws4HTlsqNib
+CyVXLb8C2bXpvYH8847GQG+IerqBrZgJtHSLTkT85MM3XN6+Ofw3xMaWp0lt4Rc+
+Q+09iDJs0/X5tXEWJtUIkbZH5/zlpw0lb7SId6sCXWP1IuStfYiNcM/A3YkvLJhv
+NMSbOENQrpwRU/N8GazlpG0spoelUC8UpyutCQkLMHuLVYJyj3i6YHWmc6L6uDCb
+rYLO+9GJf/lXCOdmMdwJSQxhl0iNvzJSxqyuoqR/2c7nh2b/mx+sC7Uqqhm30ZfG
+DosyuaVfn1x83xL4rGSWLDAucPhwGYfTW7TipA4B0aYgZOKiNe+d+icXnKldlxEh
+b5q/bWh+jdEZ70d0SztbpN1QOD2Ev4Llv4gkiW/jUyZwjsmxAD1IGygzlM6HUyZF
+nQKTmnzd3i506QO3sNVaQoYolfExxfdO+ZMM6fKa5lQUuzOOPXO55Rw1g35yQZCU
+DGew75rqJ59IvbSg6RxQpyxsxpW7GL6oHtejb03xc0MymtEq9ec+OcoaQpo5WG0p
+L4Ixu8WQvYhivj2xz8cWRe4B27im6RSBHUMz4U3CAUQbLeBet1AQFS5AFM847dBp
+tYERiRUQicGh/r+raPDlvaJ9Qy9QGDgk4Ktjxpgh0StpTQRcDi0ItJbRpHt7Ol/4
+HsJyC9WcaPH9is7Rr5VQskewnc7aKLpu3pjE5wPXKuAY9c7Kygo3mMwLyWVcEBQ7
+Qz6auj/O+e2Vkf+kzm+vvPH3OL+9Muy7nN+ejffHOb+9NvSf1Pnt1a/xHc5vr437
+Lue3rwe8s9MRb/rdA862sKzyn9XGxfjL9HWdSukzrawgh0RpMIcz+I2nVG1glH63
+dlUOsShiCLDSnu5Lq80qwinoC+RiG5tFfQqe8KJv003NjWjtbBjcZLf1CeOovc2C
+JNVCvG7YXbUoZtKwovzKfcENd7VuU3EsUHc4md94+1hirlRd+oAxAm2oQmiO85/c
+ruI3zmVKOJnXbz1C9CIqBVhHxYOy1AyXi7bSiRNcCEdTfCdPTqzqIjLijBnvUfE9
+Da3NakYDtYt22NlPd+adOnkWEnVlzJ4iHqaXrOLGcUOoZrhhOqX/2gRbC1S4gXZK
+Ki/0ibJCr5BJqgq4s3AaRTHRNhxwDcF6Q1GoTyKoGkc7kqAruN+6R7i/cioxzOFk
+3r7yQIbZ2Ejnu968TI9XkBs2ZhHunCZFQQrmJzN4J3rul1bxEIwvrix+TRmU6tNU
+bMs+m7Zbyx2XTOmK/ZHjsXadLTm6AKir9MFqa+yG6O/htN0NvdNSXGva0RhCp1IQ
+I9EnFaLR1wAYLcP3MMIKxbutzaV8I2RCIhb41pZFZnxTqqG91fVSQRtYibmV7JCZ
+N6tq+neElQojTZMvn27xhH48bbevHK/Lx5gCZ+CK2Qr42Etns8SIc6/BYLhW1sm0
+3Xk8NTDPHpzapVaU5wtOdNYWZZkS59G03RoQusYtuyKn4hJXj5de9l5Gr08fYdOU
+6i/Vw1m7Gfm6Q1JE9ALchdLggaF7oX2rUcxBvZTXtBkv0uoxcBNdMrGtS5LjOqFq
+FKsIpWrDOyVj1rnBX1gRNqFIvfrQLhYZisNNpbBaGj7zCj7JuMNJu7Wm3NhSBlol
+95px1S2oHLWVRykZD62N4eM+mrNb76jmi1JU8E60M3Zvlf1n4l4pN8HD9ngO/N3k
+CjFJxEXWjn0jXKREkv10wogKZAuT7bDrexLgEwRHUfz/Y+5ddnRJkuTMNyra/bIc
+YGZBDDiLITEAVwO7EgV0dxZYhWn2288nHify/B4nLvZH5SJZ7O6szJMeHq5mqiJm
+qiIagApGCg1SXgbPrzylpTqX9BaJRtP9f87eyONAXupzUiDFeF0CAfIN9wbhWPg8
+RNVG4zT/JhH2pMbNDnuSnABpk7eWf3jRqKdK1Heq3+tOqRqy2pcydeLdc5JsQSwS
+KFxO3gRJY2Tl6dL3usNln2GkMSjR8jgbi0Y2WJS/QtJxZ4j07q7T3YDrdE9a9tLg
+NcPApPncJL4ZpErWKef5NIe+ebobe8qJgcxsYrKd1yzKyhQsyceTrkgDKRR4OjBS
+c73y+OsEoxqJs8tBqMPsriYBdh3Ed3VqvQXgL0MZknXK4rvLYtPyvkbDgQ0AKEhd
+8ykuvb91Fbcsq9fYpCxOSZXslSdN1KxRDECglYbLETS9PzpKT6uzLy14wPXqLgbk
+7dCE8VhnO/PmsSPvvSSIwa8+duq1mAESLIFEygcE/MpZsp8G8PbsGoLIA7Vpy6Cl
+q73V1TrAwBWAELqOsSZ4b07+0CCDTfagZV8lMmgQuXBSTXZquFmGlMmfAwlOyqRU
+jIJUUXWBRun0PPqSzwUYCQ1YF06R6FvPoSxT4yrzniF4UGJY3su2LkW5zbsgV5+T
+4N0eLAdiQ5YR1zWi3vzWUzo1AQS+vj5g+8VmhxVlFuiSpOOldNvThq3kPHRrnLKu
+TEhOYR9H7sEZKIHYcjNQgA6p0jTx2CrdlNgicSvBQzMGu0ZuJc1Tk3XVFHRgSE0P
+oDLXm2SWNszJVhXm6lfuZGO/CHSpS23+wxMvpwsWwHhbMKztNB19GriHVwZry7dT
+L+i9VL6amYlX7Ll41lqNCz46zVncHiyjKjEv8BEqrayWo5Utnpr7Bgi/76Ow3T12
+PJ+ErARVBcrO6zSXtyeBstEs3wFQECCeh3G7GwOVOksXedVJRpqaoiRGISkZ92hk
+PrQLJLCS+Iufl3IszIeM4hv4TBHIeUqVVtakA/i5jWVdxdVIahUOr85uULimlfzm
+L3UPqtZoUPiHmvWfvrOXpCIAPASTk3cq1SGwKaqVorpc/EoaH0x/fv4xFtQnbic/
+WHCMukWcbvHlOjTS4XnnzVtcFrFyeJNIa4AwRcCoHZr1AevlTUSXF+g6Dd3NZlW6
+fXPNTkIHfwCXnQwoijy+NRoyWXyWzzOBHJ3UmVbzchy+tjkfsINhgOexNbVABZ0M
+jk2ArFK6BGXh6VG3em7C4T1wi1qZWGhqcW32tNbd3jnAw6I8nmUfouma7KBlcisx
+MOnNcnHqsDkL3eODt4A830FDjdTp6nTKB4Wa8udx5YzrPdqLxwbhAlmqTyHKzkfa
+rlMn4ZfJ7oxyYTAfqoF/9mhWb1tdVj1WPXPkTN0zFvJOgqM7OEq3q8MsLpXFSG2T
+b3TSoTa8amZ2Ts1dnRqUuzJ0+5wNdF0mVTKyJIWmPUJvLQBHc5vE3S9ZX0Ivxoez
+IZ+9sjrZpBo7bQkbzuhsCteEIvWe3ZYkPCxF56O4PRqtZsCzxslJ83bIPAUQ3V0k
+VRq3ZzoL283EHVCjPhrC7/S9qCo2wO+KUo7vltzsQ5ruNG43Q/Qsu+GkRh3WboY0
+aUL/arbycmK6LITYNr6tvEowJNcQJmBLxu4Ngm+DlJZLgRpV68BhWZ4n3jv+TTYC
+Wad0dRKYwp9eDlyh5ouoZkTn5/GOe3xnXQBoOiWyZWe3QCcZx5MdpnpgV0mmuDby
+0eHK7cE5uqKGWYAgK7Zt6ZZdnWdFxqrrcMfdrcgCaZvFLDynNCzt7rWqWsSCRBH4
+zB2W4I433RtfOQPiN0X3ihRMkvygVnRyooBrdhI1cDKjoMapQ1ROoqQqcqQdMEQA
+unQZvJFLPTAaVA54KS6WVOdQE/8kqmnWTaXMQu66WCLGvekku+xTpvfmrSV6e0GI
+aNeUbSd1ibUFqu27qf+VbCc1zqMAvnF+c8Gq1ZSFADBsy6k3besufzpq6scnLbcO
+8v0vv/3tb//xn/pvv/3D/mX//UVQEXJbpCwJPW8Spw/yIm2ugWXlcyFRtbLXJ3H8
+6keAO0oQa+LXnwbeO+BiFDJgpwXPO3U5rKITbF0osjnVH9krzEW+0RRj6i+oqsEI
+KYNwZy3jmLpcvy1fmI3XF1zH5UE+JurLQ6S0MUv0/tMk+tWrQ8bY62TyQqWFdG4K
+7LrURlmJHdowErz7Y/zy1fM9T9h84ggkYqnqXKl1eAOVsYHE7dNhdT8efDkADdJY
+DXuR8sPWlCDZ3xRfc7VpqG87lW+E9fVHOLmb2J0yG0xdSlb25lbu39D02cNQZ5xm
+KGATFD1VHuPksce23CRJwi1fdVeWZnTIshkmETWjc/lMW9Y2BQaYyPrk9WU4yicH
+QcvmtVf7jbC+vnpdLKgJv+4WfF6jl+yuD9nBd6arsoMu0Pr1bFjd75sKoiINrl69
+POknAC/p1sz4q6f0LKy/7X/XQ/+y/mW/TJ9L1VVOXBQqlg2pJHV4kMbS2KpT510h
+xnka0jePn5C7BPplW7Yp0/MZG7vKdHCpDEmBlZPsALj0fH81UXlJZcgTFbxpok5K
+a1S/RBOM8x5U5qRMznLQLIdtXprdMVF7V1QbKfs21qYuPE91Pg3nm9euYqfsdtPJ
+CuxWMYHiB+WT1+g28o/JLcYchfLNs/nSmqvRCVL00kJYtUqkQUrr5Jj1XBj/13gJ
+o1WroxQirExk+dCFqiB37jQNSKUDOAH57tkw/ni8+vk7iKRreEfTT8NKFFgxrCXB
+aRZgCA4dOx+9iS8ZShLF0Vr4IjFa4PHVZA4DSAXpU1gBZWSlQH6atW3yuMaZuyhI
+1gVnaWIDhk3vQ3w2jD9e24JQ1XUlH+gJsu7dBSksDcrPgDw156E6LT8Vxh/PLhqI
+0HXECsA5v7LmAWXJI1iYiv8wjG9neipAaiz1CwLrLwl2PlMOJkC+ZO3sIKPyLfkk
+dG8fmUF6IBZ5uoKGyTvsE9LglB/egH8lKT8U2MXWDa6v0KWo2cTdVEbtzpbUK5Gj
+HiT7vq+pqKHBY/KnC9V234Gjl2tAXeRkQ9GVX2xRmu2f3Uu8fdUue0TriMfO7ICY
+AHuVlcRWK1bjW2VlMLz7KERvn+f1hkAmr+tM+fPKgRfUy4+QhejXYXmd6ZHTO1gA
+jKv6ADWJLW9ATKYcTT4aW4yFvsJBWH5/ZGP9rcJnNR3WsK0FZ3ZLTVWfgMYbKXds
+G9Oi7REwKjQAM7SXYjxcr+WWnRRWds6Siaf2dngekZQaY9cZrzrlpoi0NUBcPqFa
+frcuatM6CMvP3354q+M4WaNK/tMOV413kGCpBcamPm5A6Fdh+X3erFlyXpLY4DCu
+Z+NehAuy/CTa7l+G5ceEFFyuXt13oKYRJHqjUXUXJNJVLsNW6Se3g6D8eKDk3eXL
+BoJgpwD3t59hEVwyWt6SypSVQpILoaea8x8+RDPqp1HplMYK5KksaZHLhln0UytH
+p+sGxslnMglWMV3Q+cSoap+rgsF1TXMSkpcXXVN3vM4bpUMQjhryWBxAWUmJLwP+
+spOf+VVAXp4Gt4KoVnZX7FKS0K2VMq/VnQn568twvI715BVjh/ACXinte5gCym7T
+aFWqu1yDZyTJg3j8eKL64EJyg8UGeguQsZhIKSKDsnQn+7AkZWYUdIC/7aDo8zdG
+8VI1b/K3AvuatBv4utqos8IAGgD8bTUbGdaKBRyo/UFoozS17FAiik3AqHIQkB9v
+yp7w82UICvJnZO0TAXlVhzjwQ2rbhAyH/FVEXgeubFVVWp50pwHJrnlI76QFQ/at
+713U/PVvfx+/fd7HucZve7827GYfMwlNqumpyxmmKvJZ4q2GtVMjBc2U9+9Sn/xZ
+lLPdpd1epTRMIIfU232y0htlL7nsqVE6YgOthDyS2gY012TVZbkoVYQ1zpSkfaNe
+vxUly09hkkMGCfPytGv6YzzmmrLdZVjKcKZmuPdh/JO/gwVNDqk/eUiaJ187iaE5
+KlZjuVkx/aWuxF8D/GxgHDh4JjVuyP+VXCsPAj6MzUNC58+F/j6XQQ2V81durcsU
+MsuVFkxF7tUNClwC0hydMc8G/f5TVhouF1DB8OQl6/O6bnumzr/IDJpy9lPKOnIe
+hGCTFShe0Db1iWmmRjN63maI2bJLTRHSvoWnZa9jmOR0WUTVA/Xrak+WFEBJeL9Z
+qnbh2XC/+UZVYgaAL0l1DHneVPUfVrK2xBR4Wwp28v2pQN9/xBRmymqnTiSz6qS+
+G1hOcjgv5V3BsoNF9KYhf2vIMOmiF3SRNCqxKf2XlggfMWvOfZmQv7u/7z9tWT7+
+jqaDVAEyZHnW14A7tgzlDjoaHkGaHHaTI/cSuLWXliw0ZwW+c9TAtXpcgf5L2A/A
+Eox8bvn8JZRlKinQ1dpXUhsfFcCrE5L/lfP+7g6//xYS06IcFBKIJvcKdZEU2ORs
+IkfEBsTQEkvf2uP3H6X7KsmqApPhJXUH2G2eFCw1TfVRv7cEfjwbiFaBlyGmqAGz
+pmlN6J+8RrLcbWU7v8b+buhf+/Q2pKCbBQwEMwEUUrMUZ0vGdQs0CLMFCxjAyJIP
+mQ1sXyP/iFYECKDUkkFyVAEdxZAcYlRnVwD2d+fUycpOpF7rC40UL1MpSbskAyzO
+4bsh/3FeLYW8wRYIQABKtAXWSeQFcqwBnCjFWPK7/VaoXxuudc0AoJTfEilsdTVj
+do3FTRDJ/irE78wHRAmqxAudhJ3YGzKKYcUYyLckPEUSYeJfB/bXZ8tOSzZhVqdU
+e0nyXnOssyXqkDTEbCxmwwH5aTrS529SO5r67PsM2barvQGK6nmI7vCk/i/zwMiy
+6NK7KepGciFIQWVrooaNvcOgFgHbDmr0r+8MoAMPmZjLBFDIGawKe5oNrdC1WpDu
+M5DhiyD++mDXZ5SSPHGbOw5SdE4Q3OF3HhIvPgrdHzUv8emT/5TzEp++8ffnJT59
+7DfmJd553h81L/H5o/+U8xJffI1vz0t8/txvzEv8+sBb28YsVl6AObaqkUtnrW0G
+5pDLtlt9dCQ2sOg4jNvt2boio1bsMZfarmIzzbFv1dtUAiCB7W1FKiGZuV3cwGka
+2Kghsw3ZUsxGQoH2SL1FbUEZ7pJL6mOwdwlWKls9IA4Gqwv/0XUhzk9TC4DZh4G7
+vbN6sJKR/7u6G9WpDzcGdbJ06syejzRkKB5PInf/GPIMIdWD1YXuZqpxBjktsENm
+MGf17d7DAiigCi25BnbZntstZXcYKexci7nIbq/u09Ddnp1jNSZrgt5YQcqeyrWt
+2H9Jul/LrdwhE/I19WQTKTYOkjbLyQd/2V1GHRpL/ndO2XPBw2UxEIctqzo1tYEY
+S5bPBVRWkq2Qk+QjTPGD7uwv3rnLf86lPHpaFi4sIKcLq2yAxnJZl8k3H+wodI8P
+VsfxulT4RAA9pc7GnSX3M/g1vDsL3eP9/9D547SwNiodZJWtIIdtW+XF5dh0nXzM
+HjkN3a23IIUoV+rtd0gQMODyaBp3NZW/s9hdXpZGgUIYrGPzWE3NtBexrrHLnLvz
+AkUnjPXSCJy+yL02USYomJJ9IlwT8ERWNerdH6OySnpwjqx7GrrHd+6+SRcJDFWI
+m+MVtUJgD76TJjWw4Yq0mI5C9/jgNttQg/K8BgZ4yTiGfMbZKlktb2ehu9/8Jwko
+rDQz9LomLVkrxW71joFNcu7S3AU1nAbv/vSoHs/t1Hq2JMftohOiBLUk0OUiAnF1
+YZA8CCykkZ1lsl2ypG+ARAm6Q/K21rpzE9i7gVCFHaspG4LkgXlW9/QakhopsUjA
+PxGMtQa5/jR897c2al1MSYLuEUyU+S/Ua8AJ2Q0U1eR3Z1KoRwF802gxp6YCnCxw
+ggftQHE21XWZUXwtZ4nzvQ79Anl1LP+6qqQkZOdpAAbQq7WG479LSAtWeBjH936E
+kyVklP5wVgKtJI8EGqnTriYTzrGk8tYc5SsWgL25JMbtBJRS3RMpYs+cDXDP1Ex1
+jgDsl26ZpivU1K20rSMbea0gplqJJrXywhvuA8egs1c3FGvbdcIZ0lCXqB/ORXUM
+aJIhJHXyyLr2JKLvfv2os0blFamorbnYlmEkkPZUr+c6CuutAbVBIVvYOjNh2ZOj
+JPazgWJLDWYe5B9Wtqd07/HRRpSxamilCxx5k4Yv/Igcr6GRXTTO6KbS6s4e4Dh0
+k9G9ehB7TTVtxUp9+bMZMOWSOBEfcYJSdE1JInJlSyaMLO2kc1TBsbXpdFmW14dh
+vPX5ygPtOoGVzRAL3TtdcFMGNcrfFy+3YtjlJHw3vMjvZDrfdZOA1Ixk+VWGBhtF
++Io/CttjcV0N1jSHFB4rBSpVI9povI28IhzCQNR1yX8YtsdHN3V7uxJXVPN7VPMb
+P82p4wzgIgdWMJ4vbUxroeAzUoMuXw+CYtViypovOvmP4bJrI/eQhoE6l/srLziA
+YG0PSz6Szj38B+ogvE80Y6+HYbvhrqATLflWTInCbjvlECf5RtK/Jqr4B/yJo7Dd
+RiRJm86BryFO01/Dq+B8NVJDYHM8C9vjXKDubUhrMpKVH3sXdNG1L7UL7kfapI77
+2A6j9vBkcpuTb24MfUJvhsQVl1r3TJSZQEoxTHJECm7kJv88qx68a440VddJVLHZ
+7SUgmWW5N9ltYCqTKJLkr0siHuZVqH7AF52Xaou6liU6x3I7DNpjS3JPeVU5mvUS
+k0a+QFKEa4qq83egZmraPorZw2MzJGcs6ZNAYqmA6t3JIpHLEDt3SNHvE00WAknV
+t3IZ0eAUW3kHoAK0lCUnWSW+WA7HJyv3p0vqdSX5L5LCWB0NzlZGiWJtwUkJr22g
+HV/dk41NV76gTCm2LG6yABABFOM0N5+rUmCAgaYyw4Ym2NkimzOUriETwE7fDhJJ
+tEfUuOCYp0T9/tY+CLvKPbDo28wSWCrew0VAR7IA0m07ieGIq98frSkdJ+Xo5kKX
+3c2uMWrgkT2cgk1HIbzNNUVXOryOTTJfDO81XMA25v+wp3VqBSbsHzgefvHs3YEX
+cwIopVgpN5I9L8tzy+qACAcqqQwXIAqVHAK0Uwd6dXnksKZsP5InwwwqA6iYX1FN
++pr97LN2Hcao56f5IekrycZK8dapx+2aQprrMHy3dw4qR1s/Tsd2E5Dly9WPCiqS
+F1sBWkEdjlDK7cHNCox5yj70lywBQNZkldrVrTQxD0P3c7TJqGEjyMAAjp6lxi23
+bN6e1Qd+0/6wMuA7jtzPR0MXRsxFxqISNS0ars/ERtrfYGZXNyj8Ig1wqIvAOl1X
+s3Fygdz1RjpYVr3AxSXZXPNrdqpkLNZY+TyEqGkZCrHz/GVqow/ZiFb+YsN0jgP3
+85Up8zsENm1kH0sEktqUs1ebxnbRdI0aTlPKWdwevnInwe0G3IlyNZqtBICy8kVY
+shw443uPQxbFhUyK0oGu/CUhTpQ12cxOK6sbp4Gg6Y8PWR4fLd9IX69OW6+DWPia
+W8Ao9rGa+UMvJkQIXYigS9kduMwns6GRmKgJJdjo25rZ64aaUgF6BEuRIdUlmGeS
+kD6kWqbvaZflsmltQfVVHFs/JuoPrwyzUF9bTrW8XOxrnFl9u1P2TrLuKKPm98QQ
+P3/urMVJeG1J53xHNS72naikL61sHyfKW5ehhNj/+q/tf6yff/V6f7U1wbzVgO5J
+9cDLUqTl2AihxCFG8BPIsj6J4uFPYkVbiJiFMFDOdP1JvtA5RuxS7apJ/dRq+JRa
+Fxgzy1siRnV3BBOmPMUm/6JPo0selc/ay6R+QscIvHoHoQQQMbubkYCiiU0OVRPc
+6oAF5ZOgHv4GFBin9qOSdDHSoo4RQitJw2AejG4K+wp6+lGMD3+McSlojkvnRn5P
+bc+iQgJsK3LyOAu5rhJ/++0fD09/TTCSmJnqndE8X5GTlt/qG3Bum1ku9VgSjTmN
++Ic/KHSCZ6x0pmuTJLOvdsGGvCPSzejojCABaHWYI5YAJuw6+RvNTPY3wObqESyN
+xRjzLIvXixeIlZkMyGw51oqX+HI3YYGM+TfUMCDJbzdOA/7hL6AjPsp6ZrvZAKEh
+92RppMiGljfwYQrL93EU7w9/Si9Q4RFcrnyACsVKEtSU68JMvb1bT/91/cc66Q+p
+cEVJy0q6b8kXgJ2mQR9X83UeptQJ/nz/HOf0h7Bf1aOsaxY12dSkri9nLUzyarNr
+uenSiVrhr6TVWBAwrSF3j1WgjIk/FpKT36sUqqNGy3RODsk00kBMNYK5WEcTLrpb
+Ee+T6LfyR/kgzKcvn2fLck+Qu8Z1/QxqAj4bmQxAlUaZA8rb3jkZP/0J4jciUWPN
+lFmW6ugsmdpW5eXT7Bfh/fVO2ecFwTYVfAC7g2F7yIBk+eaM5CIIcZYGvP8yqL8+
+WhqvrQvx13RhGXBOg6lIrjFTVHcgPaQlhR7wn8l59O6gtEG3rdUCjSrR89J6jny4
+mqjdurqo/Cm1mS475QDcqIjBZHH3ZOfV4dh0l/R1KN/5GlASo1NeTddTDiJwXPKS
+0hJbWavLXYc7nwfwnTaGy2SD/c3qy53MAqiRqNGLtYU1J2H7oy7uP3vwn/Le/rMX
+/v61/WdP/cat/a+P+6Mu7T998p/yzv7zb/HtK/tPH/uNG/tfnne7R47AprGg11k8
+Oi6d/bNdgWleeoEeLLXLrod77H73DbqkMANc1DntJeThhGeIV50igFFzMR2OryTP
++rOA/W1q2xK11d9oRcdovBcvB5Joke1OSqH4xLBZa1SCvp265ln8rC6Aa9IJV6l8
+CnMWtNsrA1sgC8Ub2+USUGOjtEZNIjc1NMmMz+lQ9iBqt+fyPr3P7tvgd5NVncZi
+jBzMpP1mjhLj7Q45ugTDLc3qzMvAdJO0kflcEqDTLDwYT9Pth2F7fLS8mqwOcYGE
+fEt+DODDN4k5wdaihBxWSCZtXYoXEtsCw8wdawXbtSovgQTolBnXIsMM/pFTb4Gu
+y6WjK3HnuSjFZG8NwoKmJD+y53BrQVsOw3aTsmhyA9imrNrHrupuhs7WARDUtbi6
+ILOLaZ+E7XbiT45RC8Sq5I0gg8Sepm5VZMXV31Ut/PWBD7y0UsQGS2Ff53WS+ul8
+WnlaCYSD3TOVY+xxGLXHY26N+mUKgbHStrcOWi5dirZ0I09NrhrdhRZFaaBEtVc0
+qp4aGGfWZJbODuACCVg6CSHgYlPIx2oUWkrXJgM7eW6RFeXmKEOKRRzJnCnHUA6D
+9vDGSfJ7ZDKARxJ3AwcPqaeAWDXdBCXxTkptJzF7lL+TTEgX3nKhBt3Jdj4z1UO/
+o6/uKGSPV/4waYmkQC2v1unFetYFz+iscT4Iy2pKgMAexuzWptBZVCGGy+5MI78t
+SfZIl0ZF6iMd3AvKV6/n7BVUVrKmuy14EybdiudfKi1pmldnb33DB8NK1QBS+pQr
+5jQGjK5LGrFsap06673VbiZxHgbt8ZUXGxVAw5P4ecHJYUWjShpFLIaXkl2gSUdA
+5N5YUdRnoxYYL5cVDZ1ICwDwpfsfewT43/ZVjBn4NQ15Qd3xMgINeWk2GRItvisf
+Q/PBTeBXDweCRNlFAHKXU69EvKbQ/AJZmEtuayZ5ksx9WWMGghRD6ItMKSUb3/hM
+utQFwpI7pZ4lqw7JrXctLWnIg3TlBdKDDvaC28QN5BuMpGROa9v9pfOS7FwBjmiy
+h1or+3I1zS3NbDc5IrIcZz8J3v3JLergSL7cJKDGQ52V9Ji/ZEJN3Sfhe+9Wf8nE
+3gpmO7bI9dH7dVs6ZNENItQF4fKH6OTdloo6NZ/GskhWNuDVJWe8xLSilErJpXlY
+ox697WI2LTjHvnRDuipTioQky9KCnGHkRDL5z+WfNq6pTTeisZPEIRdI8QmddmpS
+FwA/83KlngXyvTdn+xXKvVinTOTkI1sBUl5eIAHCNGqq221zEM33Hp8gcYAdGEsr
+V6moAqxk6Bn8CP1oRz5CIF3DLoBVHd3bLfGFBi4IMnJI0TipGct9/RCx3HoIYmUl
+yGXBZqGSqVYqbZKgMFL6+ae955QuyVe5TatJSXY/w2rufQbKhY8ScBmyhUnwbhHA
+UqV3rAljNqvvTUqNxfGmE2YLSzSgoGL6Ye27vTFIJZAxCj9f098t5BlhGuDcxvKG
+0E0pTOSD0N2aNFgEEsQGwOu30drgvw8SYU0FiHgSspv6Lzsr+bimhX/KsADoECBV
+4OxWKIQZYt/EYY5Cdusf0MXjZnMDf+HDQ2VQh/6RImDGZYrEDtlqG60QMn4jw57P
+7CfyYzCShAODNt2d+CFXlaFGP03tdaMRxxX2JbXps5u+857TkFyL5A4Hj2tnIbsB
+bitnTMkSssZI1pYtzJpqqqsTUp6H9G3SSe68NWjI+ZRs1reMv6Tst/ilWYexaMox
+n4TsUSktB0/5r0YOmKwvHZ7ZnClNfNZILWQpQMfSWcQeHizNlK1WiuAArBNu0QzM
+s5GEawUFZQku6/yjwccWMDIFGU7ZKLs9tUW4OoDgcmwK0jVMFpYto2VZjI7KWwuh
+gLJrmND0LgsSIxovJcj8Qe/1p1+CSg8tJEClCQ36XHSPVUvuqq8SJgpjz5Ps+Kgy
+DYgmoUgggBINM9LVM9DQLcku1HF0YnK/1J/pEruVfHAhd5k1SI4DsALkBlR5p96z
+/oHL8lcP32pC2rK4b9lOiVZdtzpWMpJqO+Jn9ghelpC847PLqZ38kZbTVXXXoSU0
+h4wkUxUyiQQ0WapAPOleN2OaJ7Dpsl3ucrOSLkzUWQcIKJyeTb55aYDv5CdL5V6i
+N4FcAw/t0oNepF8jLbnIEjs5OnnzrSVElJvtckaAQJNGRnRXb4EkJI7Iwe1a3+k2
+eIwADpTGdBnJxqXhT6kkzdzkr5lc7mfBuz0a6EiZArkbV2Sd13f3e/V8uQtryGFQ
+7br6QaOhUEMgIb7S1HdDHZ9Qb1tkSpEnzI9NuPLlwOpYYZAEHuMvibEm2eSk5sEi
+SjjUCRVlyH0WunvHB8Vmx24taCFJWUMHoTLXKpTSIX8yU8FA5SBw9+YJifoPnSXn
+wPup/TpudnPQ+ED09SxsP2/1L1M8o3FZqQgJKEQp2vplmmxvycO2BveBJ+WnTzaD
+UmNH1FYol2Sp1ErYyvlieF4OVFU+AkQUGALYqNT56Zw8Kpv6YSt4U2sc1AwWWWAM
+SnlTNltN/VoexOQ1vqn2QxYdDJFFIbtFvsg+DdrPN3axSFe9X8YjRGrO2oZ0EFlx
+wF7dR0Huqj2K2cNjg12e7KtODBK+k2E7eyKwENQu9+HR8i8aMkZzuQY07mTKR/z5
+TwZUi0FVNeg4Pkv55Ej57RNBDQbcQjWgFPItzXVXvnixHWSCSfCc9wU8qkyow2ao
+XIURsEPg2mT77WuT2fBSoxmgk1DwnZYUAZVUBqs9ORKmZD1kOFhFQmEx8kKfn6TE
+t2+69lS9NauPslzvFN2l0xeoFk8q0tXhC7uPQvP2cXCYAAACLFN92UxqZtp+D7UV
+WIjEVyF51Y/hG4HBdJILnYxRHRpx1V4XCxwoFDVssUNuX4fk9YmaJA8S3iNbDOjW
+ZJNLNQsSk+GSM+reo6RC0ob2XXqq1skal6Ij7VOXagA/BNvjArLWZvj/vUwLrYYh
+Ot1FgP9ml6mrDgaByboBXzIP8Dl/HZLff/fCqw47BnA6Gu8lWRmdhOIXCwA0vyLY
+PacvQvL6ODJYl2dPI8BB5nEbBi4Jqq2j3bC+CskPj22QdJK+UrS+pyUdyRHVt2NI
+M1k6QSu2H+2Bnwfk5XmpWp0rs9i3JIFXABnIyNrOJIPcCKQEpUCGo8kSx/DeL4mB
+ZIm4J5DLMiNPyJGR/VuWZDGfvlXdXje+uM0BgDtHVSsnVCLqUsDJcVfdf8t9HY5X
+b3EpmPcmT8WgC1wq8dZYTmxEupki0x0I3hfB+KE+VNReKlK3HOyZLQ/1ATU6fusQ
+2pcJ64d0DFxT18yaDJoxS+7QOZDVtTLVTjDGVCPB+joWrw8c1l9D1jYG4MQSHITw
+Sw1Mcn2SS+yVyh835IkqJuQlVf2yasiLrCNTPav+LVmop63GeGcagBwODLyUqLTS
+KeCvXBrioHnIVtJBVY8pfR2MV/0hE9XAHan+ltRZDT9eByTSbw2eYu2u8bGvovH6
+NM9CYw/3oiNteJ5GAgrZFlQo2853wvH//euS2/lBdwGru6lHuYCRuoSRWpO5ZJ1A
+n8VKXFTgGT7Qkz7/MU4eUtpHRlddOtEWQIKMUCZAx5rqUoEkllXt7j2D8mBX0Ex1
+TzuJTS+JZ8PdIUabxT3VktqzhAWtOjHBAXptzyKxEnAoW2P9OpiX2NK7oTt//VgT
+ddDuOKVEHuS7qiwlN0Qhkaq/hi68k+vOf0bR4YvYT9F1QO9GFrnjGt28breeDPP/
+81/+DxvyqyqK2p0WgIrkk+0Ch3kzwFl8IFkvlC5Nk49Q3vFPyZEMF6PPvjtHYQSk
+hAzF0OSzleq7jqY0e2FkmJxrkNf48iNEGTNI97AvV6vjX7/sS6AnPVpqu4ZqNAHL
+C5NESSiWyKcdixWOL50/pTOip4P85ht58lsrV9sw8Krr7MnrlnVP3lbN6xrF9c/F
++PYjbJS6jFN5yD7BD1emskDrqvR8ZvhGiJN7bRMKVoclrQ2NuXbRxQnrzDPrAlt9
+U+DX7cK3Qvzzp+yqq+Ua5X4brNPWzJQ3q5HylLLU4huMaqh/EtrD5gPLsHP5bevu
+bGCTWQyRd1SCyVV6GZpLCcVJKk76zKZqLnOsKLU06+DrPuiwtZvpvhXi399+SsbV
+AdD435JLzXJXUtecZiBNYo9Y8dT0fIh/fqDhVaDEduOlcyPB2CX/KhdZ1PU7IX5d
+ProcS73LU0INAhT34gDDQBFf1N46JEs2nPteiF9/iveXuMpqJInoSMAaQIi9ezEy
+YkQa1OnxkqgthSlLeaXLfwkMfsl0ildHvZY0SKuIj4x9CrkMcEgqg56TdYLkxPRP
+YlceDU4T7hqv/16IX99etzfAIM2eTpKNF3xkrSlrLG0DARDwwzd28c8foXIpgwBZ
+kOjeWEfkG7a8NAO1v7OL8+/LxwJTM18L3FTkhASkXE6ddMsCOLecdnRX/K0Q//5T
+UlwmSUJYW1PdSL3phN/CRuUE4KqhwFZI9IDxif1lmQDyXwXklrA5gFIYdsM7lpwt
++CK6EWDVyGGajRr51iuD22XmUeEpTSUGCJ5Tjd8K8e9vLyW3tOWel/2OUn0CCYkN
+LmUJ3ZoScOPn8yH+GQZJVbHaPWDS6CC5q9FjRy9hTn6j74T49zpTNF2Qh9pWTU5A
+CajnIHnDky8zgeVW+2GB9XyIfy81GuPKpAMJGV7BUvd/4Ydul2tRn3RRm9TeQL0N
+zKVsSEyuTtlF6Fx7NbV9uT3VSixmL63EuJOEEPkGuqLaErmEMVNa2u5QN8o0qIwl
+k78X4te3L1UYf5Tq5NjUPDhxDUgWLwbXd2NftkP7OyH+Hazk6TyYv+nmVC6XkIsK
+Q9bZoEYAvgzxOypQaa3qVwsQ/6YLTlGuqVo3Cig25gl8h9UeRPbXh1OsQgUSOeFc
+Fn5K6i3ewRS1n4yQZOnFYtI8kSSjYKW1NZm4NmiPesuMNCdkQ6aztyFFZ9JKT0Zf
+mbI7lgweNVWWqzRhSgItFuk+1x3KPAjoO19Ek0+16rBOMlsRHgk309i0pGdzo7Yn
+/vH+Ko6/Prk0J3nrAiFVLxrZsnSSlrOQwZbenf9755F/VIPt54/+U7bYfv7K32+y
+/fy532izfe+Bf1Sj7RfP/lO22n71Pb7dbPvFg7/RbvvOE980y1g1sEyjmfQk3xpW
+MUVGHk5q9yJpLGAIhP40em+1U6qd5IZQp2k78v/2WsM4k6LT2xfNDLXV+SRgxtis
+vBp1HKSrQLJrJkiaK91qiZGIiBog5TeQ/dKjZQ4VyJ3y1JDcubqJDPCS+l6lN3gc
+wLfeOktNWrCgrAG15GX6CqqVhhMAcwJyJPRk1lEM3zy7C5mDadQZo5aGIt9MtjLk
+bVHC61kY323CidsVB+EBGkCkNF1eRysJ2u+Nk+qmTVSwfRrL936GlZQRPGeGTAxH
+DyA0qK0hGyZgppCJ7mtqlG9HVN92i2omG0PTYGmKnfJli6SxurR0q7QWXmZjZf+R
+MtXV2hdpphbZt7DOqhtEt0zvx6n03XdvUxqjl244ZChJIyRLjDaMOv1KQ6K0/j0h
+n9MAhEt7EqAALNfTk3eVDRUvha25zkJ7U1Yj31GQdtRAsYFiqrVYUvst9Sh9epKZ
+adOdhvSm/OJIi2odVVsVhc7LbgEK8rLX+otIp84lK2VQsiEav8+dhDOKmno9lWms
+tKUcZiTITiallKqLt5ooG55d67DAWkptbIH6vmsgebNcdEB+GsrHd87VGbWnVFAU
+MMmrr8pcEmuScI+ydQXQZHsUwtuHrgXkCG+hGmS1TuqQUVZubrJJTT4L3WM3jSU6
+EtTp112zmtLjDFXiL6Oyzru8pSRYdhq6x2dnI5usUV4cGIidSQDr1NVQtOrqkubI
+e4LEnCTocrRqjvZNZyyXKEjRX+Xutt2iGbKTlX8DRSVKeJn/OF3ReXljLXhezpeT
+YNwRElnaaehuffE1wxokhNO6buKpZSxsKhn1Rj22kJcS4uHuu/VvBVB4lZfuUrNK
+kmeZvDkkG576sGehexQ90YVDZltlKooPI4O/1+Wf000dlOFBhrMfdAd+/mgriwJz
+jaTJyENewEsueezFSPlbDhAFbDFNB92acqjbheTYiWlIYWvqCHxpWpOtJe+cePWl
+jV4MexPkCcCoGgDmR3j2q1xT2CjUK5gulPE0cI9aLbBJoCaEoZfaPPVV4zIbVLqB
+0qQ3eaQ7f1YLHz8FPNw6QLksuFPxQzmFlci20e11e6IO/jjjfQVgsk8EdFU2wbJe
+DsG1bI3OzCm/oqCrcLvqU2Xw/iMk9EJ+00gotQPkaywca4ZAgb3c8pLa00j5pkIw
+JE3oWtiaOIn8Hd2XNx3NJ9ktujSlcBb8ClNno2apRXzDeRaw5sI/UFc28qpRblgu
+5vBUFby/urNiolHToMMk+cx19nmA2vA/Oymvd4kfnhfB+/MjBRTaptlQ6lSYEHpL
+ZgaTSPM6zSfDmtxPXcmklrGWh2YddldzS12sGsoJ6U0d6nmZ2J4O688fYZ3JcPLe
+5YQpSckqe6voUgqenwfAMV2CR/w3m/eoGVjvoizBlIvH7DJr5z1b9nH1WD0JhDwX
+oC0wcGjSytKBnfwC00tY2uQN+2etDBhvz0+H9eHrbHV+KleQVguo2tVqssQ8YZAC
+XrI3Tys+F9afz5fBj8a5AX5mCOHJMmDF5nWJReJ9Nqw/d6uRc6YhT4cl6z3Ht54r
+EEt1R/KJAnSsdfN8WPODXgLlbRqdB7EPybqra1ZPLupdXidstlR0vCsNgi0NKRCN
+4IX6xEkb5hKmBHGE4eJ1exyWmHlTC6PUBKbukSSZ4ouoZIvXkFetZG8AyfNhzT+b
+BIPEO7IkX1iHFrAWANCOvbRcJsTqOFq1PRnW/FMgwbN7wL1Vbn6bpDRlxRFAr4Vq
+Ep8Ma3Y/JYFYguBsuQxI5cGBU4sGEvaSHPOKVRmwlqfD+vNHDC95NxKo2HBqwFQ5
+c7cwW5fErI7IC6COysIvoptcl16U01JxUaqS0iGU+PGMtRS+rCR7SePdB2VvMyHy
+6hGsl7YcSA4uNXaXz7nx/Nmnw/rz1WUekkARIFbJnpB2a2SxXMXCD+q8JX1QX58L
+68/nU6nHJUwlaZbiigSk06xRqvyFtfNsWH8Wvton6L/UUKhhVWfYTaNcBuqXvGxT
+Z6f4PZ+Ef/6IFNilcTdIvFzoQszNAOtHsw6kN/mNYA9EdQ7NdAZ+sQRdEQ/ZS5/Q
+m16DWxo7kzoQrNfLyTyYnZrRwb7ZOYRNBQbUrsvcHlgAQ5XgxUdti2evrgO1riJO
+lbKNiEb4ELwNQpi9JqyW07xjejKs+adnc2eBTokRFfnPA/dsU3uQvGhqPT1zvfch
+x5CBJOp5A42TBGWDLXshqd4CGjXtZOIOxzv1zePlHygHer40GyoDSh1ltsQ5BgUc
+aBDqVkuEcKXuj0zPuzYA0AyzTNPYCJbCZrvshxsEz8sIekTgVlt2eSkFX0y+BVvs
+NHKAAEY3/WmQ2THifasmSPUJkPaqo7FW9AmcI3rGqjc7X/qm0dezg/O3X3x6akTL
+2kQAeJ0kbfnmpV2MUMVZGO8N2lUXY0N2RM5IvRWS1pM8HNkJml/RMANg8jSIt4dn
+ao6E9GtK5PFdqH/kRZB1tsCuJjkNTWGxvSpMoaq/y7CauvSo+E5JsjJD1sbsQ/BR
+KpqIARLyy7vdepXnFLDUug25L17Om630wk5eJUJbTkN4/yKaBvAO6jQuWToIjPFK
+8KDfscblOkViOAvg7cnLQ9ZYuSxIQ/ZOlGj15ZkuV7OQ2mn4HhTjbPeyQcwjyP5U
+TnHT6yC95VxY68MuKsZ5sbw1P9de5RYpf12Zc2oQNKkXn5/mt0x25P0GsS0UbJnm
+Fgki+rD5bVhUeZSsA5W+o05ll6Av2EMZY/k8SBeV70nN1UkaSATO1VkD5Ch+HUX5
+PHg/3xn8zPaN8qi1suCLfsjRUS2Z+knJsBZXfG9e5osHSyGUl528KnA7yHeTemao
+6eLI7RDF3tQUmudDFN3fU2xBHimDJ6Okkg0fMAM4k/zpjk/obg8nCMR/v5yNkIep
+KBqrK1YNUs5sdSi0lT2lUXQ8q11wUXlkpjWX1D5lfgm4W4tnyHfQRl5Q1gEsrkUx
+bxqQBfIlabjJrafMCrcxvksQ4/j4/CZWPTr7wdt9FVcVKdaMTy5aPlMEKmzJ/tmz
+6N0NPdrSCKDOQbyE/sMl5t9TapKbe1fp971HPh4ebVawaalIWVTy401K/6XFsUTr
+2QhFMrrlmH7cHp7YP4RoqmPLFBZKG0lz3yPtqY5KNeEHlp2OQrIBQ+l4zMZgUlZ7
+XbtuNdifIHOXKgB0diAoSWtVzfUmvSFgKQ0dBZEwVpWGJwjMVvWpHCPU20uD4Ox1
+YE+FZX0kowZamZvKUl3emFTrBPk+C9/jk4GLIPPe66KMSr3fjmHq1V5a1ad7GL7H
+M6TWHPnSF2lSd9Naibpf0kEgxLeyKJLcEc5vrx6fDfODjsq0UDIpbBmbkvMtQ0md
+ZO+ucY0UJmxQ4EV0rPsUr8G1TQI1mlXmb8s3wUS5lkEiZG3gZtzWukJ9m5K21ayd
+JqyAjnwht6uc69dx8B5HAqNRf6wO53iSvKq0KsplocCrwvZgriufFb2biCW/Qg2X
+FFwJOtCQFALFPJmsztF9GLpHlQUgG5tAXiGgBX79rVyWJO6xpFXgIhgrWXu+8x4f
+TsqcJbJ9dRugcUa3N7WZjLnX1qRTa3BzU7SJgvOTJdS6rIKDDAoyHGZXdUJDBZes
+OiLbkjwWAd78a7E7VnJVAy+Lzy3opxtVxrNq1REbPQ7e7YtYlV992uHY0iS6Hbra
+cdvylm/f+Psl1sPE+fhkykIS9Q7SCwoi4PA1yRevkiggnxzK3RQQ//Wv//bX/ykJ
+xNe/+Mv+3TBRkqBbNgDggayjbWFAd2kJBnA9dK5QzdJn0Tz9WSRG6tk1VZ2D9dau
+nZ1h10uc3kOlZQ/Ir2abl460AUFoPGsD/q7r8+LZjWZKbD1CJka8/OqgtQl2WXl5
+sOq8BGng/RAK1oLuoCHUFJ8RPu2BPf0d2tL/s01XTEVKHBGyGAfbQJ2eQ7eTva/2
+8QnA6Q+qXa2vq8Clo46i23RS2nPZ8QpUnMPQv4pf/vi/L/NHhbpliiZ0wzItZhCa
+k28Q0GOzp0eXePY8Dvk7PyPJcrsDVKOcM4K5ppIr0ZzEb1P0ZIrlbE5NGqsrBLna
+QyIM7M1Kd6JcmkZVbTg7aqwZRMu/ZPrWJDh8v7A6lRCWpNvJv0B6mCVLY0gb6jjU
+77z7vjqBbBrqXyQh6V4HpirrU23lVmT1mXc8C/E7P2CBgVm3mv+qO6lVwzgZPlC0
+Warz2dD+/ffAsn/kbm7TAoJXULKumOVqpfMGyXxPZY/4dGB//wl9zJRAqyyVaKZG
+mgrL38BOAAf8GmnOtGAnGejRu9Su81APHGQyxKSBsjJMKpLiTGsZ6bNVEjAv3UgO
+RmTdy5UtbN0aNN2vZWqjRl6B0m48Hda///zm5BWZALipolGMDhzBLpfUr12X6+QG
+pz4X1J8fZlL+kzdwH9YMxRxkq57IS+KiVXcY0n+0v60XaWI9+O//eOn8EoUgxw3q
+W46XKmhZDk6RNoURyKtJlF2Po/reD1G9NQbKsvfK1vJ82E+CaK2WKJdxWUlC8eOc
+LtfhiqUkObU7GEHpSyJTMV3k0crmWTfD0cscdiZ1UZBmSNu1Dk0HU6cDC5X1A8bW
+oR94+Diw7718LnxncuUsm+3fdDQLMoXPUcuUNjcYQEobZ7F99yc4s7IpaoCQbjJo
+iu+e1bNbr+6zp8P7o7H2//7f/sv//p//6//5xlkY0l9JdINMbwZsV52DAbLBvtZU
+gOZtHERtfyPin/5cicn1JUtWM5Idobt1jQ2DiQGOHRQgUV4d10YRZ2gNWSXLeyYt
+qm+ohrcKGggM/VoWYrz8T9NQn9pN5+jed2qLOiM9q0nuNWrNhSpJWP/5RfDp7xPq
+Xla6e+ABqdmos9FBFeHckddd1W4vw/Jn18WnP9SXLHRT1XzB7pR31tQ861Sf6hzr
+n10qP5ZIFk1PAN+khZ/3pJrnCGTuNi8gHLXSEcp/fom89hzVBYDOE9YtgV8vkY6k
+/uREVayVzCnN6eznAJfWWiRGQ36Nl06KXNx03N1kTcSarpcyyR4lgp+u6TH2aq7W
+arIaOsHiYdU7ucQXfhP+zz+/NF713CTkIuMQEGVSydnRe9iDVLTF0HnfmD6ZVXvm
+hwEhKkiLrAqDjlYNrlLmKZQdDxebTy+Fv//EV9FJHDouirvOHarM2cmlDmhk1ZJZ
+glpm5zfi//BDfNLUkTyItIVl3ReVgkC4o4YRvUYAyOS9ZNZ85z2qzkoAApnwFzkC
+kCc1x0ShylQKeTpC8y/jD9PVap3k2Q3DbtRLwB2s0oByl617OvuNoP98efF0nTDI
+ViJsaZnz9msbcOiYrMfOV0vlPdeq05+g/kNgeRlg5gZnIRkaiBooxzRpOXwc3l9E
+Grz0RuP2ntoZrOB+KUMAEUhSedWcaqLMfxbNt88kD0Ros3yr0pD+jbPWgcJin72R
+GuQYM6Mdk4RswtUdJfwNcbc6v6fayJd7zChDALC4l+sIO5t8A8Ks0mrkL3OXM6QX
+ebSz5K0+KA04fl7R377rTNL9IzZyOCSVFNnTAbPt1ZSosfPBusofF/C3DwSmFj7n
+usQZZZcTSf0QwaH21WkOQvOqrlB0Zb/r7lLlmBrvG8ETni7xDs1TQwkkrXMSmtdn
+SqJSUiQ2gYZ1ENys+pb5UbYUjTKtwrIylOHlfTNykK19udnygg752rIGucDQQxwZ
+Spj5x+BwjZWu0LV7sgW/heZ1ly+RWJhpNJLY0KDSSWhe3zXXcFlJbK8c5iFy0t6d
+hp3TdOkVbc68Y/0yNK8PlKKJ0+yCONYMWX7sFErYuu67Zvs6NC9aC5oyrpc8fDGg
+pKj74lFqkR6Oy1X2olGiBieBeXmifOeNSprmUDt8GIDiQbKkWDXPyn0Ydlbk8yY1
+2GyEkmalxi2N0CxpjrAeUhAsXzaDpXcjx2huXCyHtayLYA+AX16uvdED6dvwjQo0
+UjsJy4835ZNVXx2vqftOD9VQAjI1quPPq20UpBa+3i8/PiVbH6hkyGSZbM8ikq+L
+8+SIYYbbX4fkh+DCdJK00wl01Zi897FfXgaJt2L75SY1oGrnSUx+PDIWNcRvO6pT
+7y1FDs4GczRTZogRzNDUteXgomz2pfaXmNTpWDMQvQ+rgQW1QOaeNJG4IQfDbEM6
+TCS96JcaRpoZkkZyvkxdZk/Zixm37VlQfryqjpbZX+CywVLyPLbrmjvpigMYwzbW
+YfnyX0blx/OGnLFC8lE527vNb2CptwQ98Q38B/Dhb38bJ6IJgbQtDQhAqs7LWPLS
+9A26xJi64i6gSDmWfBSqwx8D9tOoVQ4ZgrzZIUu+1yBE2T3tpWlX8GsXFQAcJeh4
+kdTM6EZDeCnMDW7WWNIeIheQsFbIHdYFG4Zaa1npK7Zss9pvBSRAl8PJnLO0Xj8M
+3+HrS51Jk9CUzciaC2nJ9q8u1pQ1Tl38XcfT72+0w5+RdeS5lBsAJcRkNQOY1qU9
+v2x07csw/zrjJ7/4qpttL38n9kbiC6oZwEsSsVv5PEkm+CC4vz6cDEhJmfJbbxKz
+H2MHCkOqHhZHdZSXq0xLKAuxRmCLK2ZPKcjwBxsMOmrOne1ZWRli7NQvsH/kn1P3
+0pasMCkkyEwITBhDnZHsKnESjf/Vg5C+80WmxrXVnWU1SBedU7sgC0pKJJrFAntS
+ksxXgfz1yRC9JptNCDoQgV97bqoQAHgpUYV8Fr4/cJ7yk0f/WecpP3nlf2qe8pPn
+fm+e8pcH/oHzlJ89+886T/np9/hn5ik/e/D35infPvHWoCDtXxuSOmQEGQRi1Dnj
+t1g73Aw8V/gT6TR2t4eDeDava5SBK7QhF90b734Zq1+GalCpCkxankBoIDuROYeF
+tcjnBFBmpARa2X+jACRKhC45cKVOmdkDuiQONahXEf64eQqQmJ3sixuRCnkavLuJ
+SZ9WFhN56NzRVqLm+bb+cpK2RtCbrB/zUfRuT2Z12WKSSjX0qQ6ZIRvZrw3t5D4P
+w3drUGBnTc+uEGuF3FcnEUU1SNo2mkx8qUMrhuPw3ebBJAYeFT4JSINd2uzlypqa
+8K/X9R/bLFzbi/wKn24i1sXqdGyxWdXZzDeMpY0sL3mJyhUpSGs8AWAokwXpnPlF
+GYQDg74Tf5zvWyiwx+G7qW6PLe+/Mm3Q8I90SqgaVFp5SwdXh660zO5n4buNg/UW
+dFHc3DBrbsnaePXJDLaLs7sfhu92f56tJfJq3hcCv46GKD3QTKGIbqhP1O59XPFu
+DyflWW92jDI+3hL+jZI4p67J8QagxKfh8yzJrOj4Q9cWwLBlfNM1K/RXLSGDl3J8
+T5mZgGP5F8mnUQcCMi5Zl4dwudwwSbwL3jOiDFFgh8fhe3xpTWvJl1pn7z5JdmTG
+KIq21S0zepe5OOXrLHw3J5LerMTYoeC5ZyePa92xS+lPgyKnyfPNtHhsLG1yO59t
+tCFtUXa422u7CsSIdbbc7LTHAXwz6141gEgOJWlMeQrX5qB6GoOiLrLZqbBRhpQx
+1UusZUhffYtHyLcXGDYlu7TIwSKBhH42TXFPC0VYjeKcrPVDORjaZqoALft8avwT
+qn8ewjdOGfwE10jpTqqIzpHa2wRTtcTfBiLAjCTUu8+CeH82FFUGymzDqalaMkfX
+SazPkmMuLZ6F8b1ZaDmo1GvAGnpl9l7QaT5yZ7WRyXSXw/oLpp3G8l1biLXIiaSj
+fkliWThKl60CvwRgbAYPUtjT5AUbgsfIToGK2GBaS5Zi8l0As0QNBBkH8QfT7LRB
+NeOl7U5rpRXI/gC4Dr536uzXbHns1MXPaUDfe/di1CzM8tpeY7YU8UvloPqiARyZ
+JLHKWIZHUX3XTETNJTIyL2Gor1Dd1tKHknwtn96fhfY2Iz2lSAlOVBcDDIxVl6LA
+KY/Txp3Lxp28Pw3prY0WdEDQ2HNaipa/yjBXieN0krmO2rvha5FIK0tdw4RV1hoR
+1gRKyTqbbLrTBojCRZb84skbRh5WefdJSfWSouR787p1D+AQqWrpHqGttPZpKG8I
+hM9Zl/TASKnNS1YzGIkqqtsz6h4fVNz6WQhv3hlBi0Dd4ABqdWfL5zWvHjSy1Oth
+bby1ubLhwDat9l10ue6h0bJtmsktvtu6xuzaLqehu7lRkO+l5ATKpGi1DJYUmXAt
+Zid1SKlSyDLHERojQdxt1CzUAe7bOeMyNFFlRArKhuLviLo1wjPbNKd7KVUpqbLB
+iwWr2dfkwil1Sk05nobu8Z0XYMNRfeEPRkdFnuVA5XXsxijtNacxCrDaUehuENKD
+kBLYzLetajJ1yMOayMKoJL6z0D2OX7tKnc1yAKIUssqaC6B0abEDoIOmsJLMEk4j
+9+ijoRkR8NxcUksuouckoUw495RABz+NT5Tr8NK0ypSHbZcbHhDKttnX3AdUiWXk
+r64S1UGKySRqVvbQMVRZb5BDl4Q+dEKoqQHpDFYdcp4G7tFazspsIDnJK4OUSwWq
+V42iumHHWgBVw2f/oKfqk+eyMvmieQXYkJ1DCheJfKlbXeB6Odxxb0ef1JYAS7XS
+kOXT8GZBtlr8AlU2AhJhdjEeh+7N42XHValZrIZ5dR1rTHbkTKBA0Q7KVZwOGg3o
+zMlGHb5nq0wB4DgspkDwA+tTmHs6ECwoxXR+WydbObKjrDi9TiNs111ztf06OdC8
+Bzx5HJP5+2sHD8GcMsGhRNtBos4SGbKFJJ7UNNIC+a6NMz7/5pNkGVA2F4fGioEX
+kjYxHrQut8N0uPtu0z61Z9k9TJjygnDyTWwnSUWqk6Zftpwx8hrHpOL2cGnnSsdz
+8G2hxDs5o/lqcE1mi8y+t0y1AadyqdprpFbydUnlJHliKMMg06Q7Kwpdd9Bp/YHL
+SjqyDaGHsj6Xq4+a2LfagFkR6pykErIFT0N4HwcjU/Ag3krEk8Iq+5bQirqyrJSZ
+V5VKiDsK4O3JM6lfLF/z9JWNUigSurtwAWBKLjoN34MHhqTgW/SeajSyZmK8mkez
+jBCqpMnBRK34fh69h2EiTY1qdAHCU4q85TaYxQfdako/Pim7GkOo3KXGW2XCV/Ky
+Ya0pS5ZJKWa7+WEdRUJ9N0XuFnInbdILmga8DHOre6qaDPCEI+KzTHmah/Pg/a8H
+y8Sm85isefgRewR18USJiGTpvJBEa+AH78PYPYyZOekRNRWJWXqwjggOna9FdWy1
+Q7R58yfV7DYUWF5WXQ7hmrngi7AcVill8Qmq2jKOyeDDs41aZSWcW1wuPYE2wGne
+svfKlgmJrH7ZfJtVbviz6u2k3srhpm/rjXrOdGJdZNwAv5A0RJzwJ5cspTPqbCux
+jNeltDNbGDICCDJ7zzKvO2eCD++8pc6s1gpJPEA3p9e2cHbI8amraWp1mdad0cCH
+B4OAqJteois2jtSdWvGiTuMNsPq9obh/W//497/+21z/8+juCzQ8VgALQQJZ25vQ
+aZxI1jJz9mphYSzBd28In/tBdpZr9g1UEKQEvIzmNAx0PwyY/pZTnvJW36FZPpkM
+76U7Z8tVg7xofKRCRyudOra3kQGjZrHUpjos+ALo4twFgMAhsiLexZU0r8uV94L6
+3C/gwGHG8xJXU0TO0ByZYJI7ciW8TvdZvf+6OZ/6KZbvH1ufzmmmEGpUa6MqSAzd
+ZOftQbh/vb3i27vedSdfQPQ1Oesp81HT5Gv2GJ2m8o0pR0F+R3vVykcCVB1snVFy
+OMGVYtw0vev2tpHE5bs8aiK3y93STK9+8Cbn5+oAAlYGViBSsj1PUHelJPF0aGf4
+yPpXyALuQr2phC0GadZYHqRr01Fof31t11e8DAVjFFCPVr56ECN1Xy8CCbBeEhX8
+OqDv3BfqZjsB86TC1iPrUiNao0Jp+VXf44jvP/QPujH88uF/xjvDL1/627eGXz75
++XvDDx75B90cfv30P+Pd4cE3+e7t4dePfv7+8P1nvnd45zcUTVPTXeQb+C97Fb8a
+RavkQXXWf1g156F894gQBNH0wak1aSVlxgEPAb7JLQSaCD5Uh9mQQa5Zl5rgBMPU
+7JTA+HveyC3OSjB/g1c1bRskBArRZ0dTfLM614fEHKAIQ30w5OaurB13Pg/pu2qb
+3S/QmDqMINismNx2qTrXdTCdrtN9D5Hqh6F990fAk50HEuxLoqJcn5+9r99aInun
+Ib7N9C+N3jeSlGVnDLjDJuvOmDQMHhdkkzjb/ESpvA3f78GWgVZrwCZEu6Qll/zU
+EZtrAeS886YauhnIom4FXVTwrSBEIpTR8A9j8X6qs8WokO7dapdQkkRzMksdrhl5
++xW7JARk3OmhEaAkSaach/R2S7wu2fepBmHZok8ztkZx1BjtIkhc1s/lOJS3K3nI
+LmmvXvpnO2mSwjYP+vRDikDxNIS3W9HULbyMV5ISUl+63HHyXOO7yKRGbZ2UB3ce
+wsen+y0jBdB+hp1eb5sD2WuBpIJcWNinEru7hBsmwFVyl1ZKZF4zUKAiUhqLyRu4
+P7gml6Ssq0ZoaHpVVewhAUHmKLlsvrBOHaZO/eRz6/p5CG8qnHZrt4+VvFE/PpRY
+I46d7y77rEAUwYNmHIbw9rm7s3LisLz8kC9Ei1Mqp51N3mzMpyF84DyJf3XLnRpi
+ArRnaU3jB6y9eqlkCQGBud8XZ/3y4eqe9sZLTWlGgdSkJvfO165Wqsfbgy4jaZL/
+N9PV6G6KNFftjFARJ5cZUoBugjX/IuclkH8K/M+ykECyG0Ch+eF092FaI8RFB0dB
+yj/ziUr58NJsCTW1gpfDatIlg4T0IKuDoBt1gLdE00Y5jN8jcYXzhZhs8ZcoTLtE
+qEksiycvN4934JuzvqxrH9BBUq/jchI79WlBy4zd7AONOoIj4jNo5/4D6grkPp2V
+7umWN1pqa4BVV9n64NRONWpDo+AQpBVylppI1Vaau8aXbNGBxd5W3dSy5liZIJKS
+2Rd2k0rlU+2XNNQkDJaNgZ8ayctC5qt7AvDcXxyMXhL5yXaAKvVwA6IlJyflHEse
+UaOQkRXSIea5P331yHeffspRCoBpg04gWyyi1WC103DeTv5YuWIHRrbKpE85PKbI
+D+J/V8oN+35vePo8D+bt8aZ6uXcAqvaU/WaTRSV1kQ20ZUtcoA8yOUlWWg9ZMGX5
+0WRrIzEWMoJ1K1Y56Jh2ncZWG1bXrw4OkEecn4NHbGqppga8ZO6zJMJGlzH1eSjv
+J63TZKkYkphI2n1JsOdFq2BnslXt2Qjbm8NA3p4tMYQKrLy0vNbLKbRXN+2Q2pvN
+52F8OBEdvJYDNMF7ITPGwalhOS4EHQiWosFNBx1+Joo/nz66qCH4aNa4+iUmPimQ
+YvzZAUejz01HYmTyEIio13XpSFkd3tFpwnHCMeVSDOySyxx0xpHkpA0pzZRo2eds
+V8desVJL1sF/CaPB99To80wQH06gjcTsspvd6ABTKhhB6t0GCOF0M5+k1G32cQx/
+Pjq4IB8vaCgowShNmZjCdfjIasnHIby11aUkKXzXrIQLEklDwhjkDF3YCjUUKjn5
++4nKeO+QhC4PQ6ocPJuk3UGamjq/ZIHYlXZEX9QSzv/NamAHNJAM2GiEbYytPm6Z
+HXtNeCVNkWqOzA2IYmgSM68+td5ka+gAueAjyz8OGkGMxqQnduLtta93rAUiWvkC
+Vv5cgITKApffpSZI+mUYfBjF27Ojd77Ikvmyok0mWY0KuD6AwrmEYx55b9xb7IPK
+2s4trTJ1NAbGh/xa4+pWC6nl+/UnEurt8R3ml4LPJJFCymiAA8mKTJl183tI5gue
+I3G4URKQmM2oLrRoQKTS9tS897yaSCT706VKxu88dSXPLw4uIKGukljKpEDSVNOV
+gmvKsMlBiZ8I460Nggwha7E2pOukm1MDud2yS0yxCLouyQau0zDenk3yKTFIYLVD
+waT4ObS11U6lCn8cxgfoFMA1U1J41o4p7wBdJgC0K//rkhGjQvUS1hNRfHi6rAPN
+rkWiMNQXA8UHqzlDCufHmAiijE7eyTtB+dNS41No01jdJxNm6SXvTuYsV6g8YZ5D
+nYvR1tCgKVWzrJobzfJ+AbLmqiM/qyuc/f6c/tdvrUsETd+K84ueV2ey2ymuefk/
+uEv9ao9Trni7CdlT/yYLYQOdRtCVKtkG1jRi6Pb4UO7WKdmro7yC4ocUGFTHW9R0
+1PZWwnyTncrXmPuJGN4aMU2ULmAXubLwdvWEWxJKDiBuEjhQYWk2Eoo3h/zGzZJ6
+V9RlfglshDUBXeRP+LFarATUO29GBuaDgg28UX9OBh1JM6mwFfO2BJRvZbvzTwTx
+8bUNPzsuyZ9WyJx65LuubuqKznlyhwpmd/MU2tyfTQUHAmznL2GNHqZsTkr36o4w
++Xwn3nslY1ZHb49Jw9SsY0ABpUCuOqvtXJvMtmF89olAvnEGoprD1MlGzUMITElV
+/Cupv11UUNK2EjOC4qjrOJIcJM4Qrkbk3uH8sMNtS5UvivoTVgkSVIVpyDcyS/xt
+ACiLhpiapHCkIWBWhcXI3++JUL75MtC5qIE8o1ayIY9gWFmGPzpqplRUJF3gTrnj
+m6fPojbJFcl+Lu6inompwXY1HAPj373p+Pe/f2X6/P/+t//8f/33v7z2diczLPse
+PA2Z1Hm1FKYXxJcsJm9I11Wc34/scz9rNk1X6FySYhaL3K2kypWcTqo3nxF6ZuXm
+KcVXsGgvBVTuNOet+e1EGFluXk1VQZ5RLUcvqZ1KhVU3sjpKs+asd8lLvoIOVk82
+AO+zjNIHlfO530HGwRQF9Q4s3l77dZLbZS5NCXWSU10DTvROvJ/8WDuOpivzKMX1
+bcoKUhyUb6GRS8D3Qv+qjJZAbJrU1uTlrDqWAZQD08tqSdYxWYq4NX036q9SIVIs
+VTvZCpBa+XRKAKfV4mQHOpMJmmAFAsWiu+umI7nJTtXt6VXzN9QlbksNYRWSdYED
+akSQHKzAU1KvCHsi6ApQI4PSCWVRWJJ5bal/N+B/eS1frejUIsA3kxAaZV4sb8hU
+QRp2Go/2a3wr1q+jqxJ/sW3WAgiWh7L8NyCldl6W2enJML/OP98Fda5TTj6eJ5t0
+OHX004I7iwUS8gP97pk1YNzT4X7/xwXqTlXz3fZ8JjKIVCPLliiwV99b7WxtgItL
+NsOxKKa8glwYSlLvPbV5AqCnXB4ovL1uDdZrngO4FeeQgDNfHcIEpfWydV5+1dyA
+/JDtnfbTYX//1/BSW5Hwx5JNAlXCzq6eyHFVluvSB6psw3Phf/9nGckuGDlulOZq
+i0O0LkyfZBTVnfvmMvh9jekmIZE4ipr3Cyisb7utBh9MtkIG5NX97fD/+DFNR0og
+PpIz9NaPXZqRxhrVV93hsCSotV+xTu3zpqnt4E1wjhqv47oZ+Ht8X1KFPGioqJoE
+WrJxkCwckNdNSFSTi9GSn32N2aqlQAqqIX077K+r1siTS1PykxcgDup1kYqXk9A7
++KHAxlf+Xrh/fKIFSWgJgGKBxYCX1Qr5Sz9TdmDmyzD/sca/Xz78z2j8+/UX+a7x
+75dPft74971H/mFtJ58++s/ZdPLpK/8TLSefPvc7DSfvPPAPazf5/Nl/zmaTL77H
+91tNPn/wdxpNfn3iH2j8e/D4P6Px78Frf9v49+DZzxv/vvfQd+cgAWDt2o3qXhar
+l0ZqyTr6cX4PDRXHkcppLN/7GetqqJQ3YEge+jmCOj4BC5V9XgkPxa5Ifm9QB1Lv
+0FHKWhxXAwPR1RRMAtPCfcsoJujsUQXPSsSHf4UNWYC4JL8E7wHrkq018BT37jv4
+44C+9+45kKR1WDPYLWxG5yQe2kwk72umTBhM6/Uoqu8GQMarGrfRTbf8qkD+S+d8
+zVBwsz8L7a2PJ4jH6dQEIpHyqGyH7DIERXbKJDUghiyYT0N6u8yQ/7HOaL2+c4Nv
+DT4LxZsqPEkqlJ9J+qJSaiZndv1DC2+FZOwmp4zqAJwrydAtlCXRbzLrpSwImZGX
+oXFypghFTQsrysQy6ZrHpTapw6ehvHVNjdBkljDkCibf42V1rTitrFlJYuQVK/h3
+FMLb7QtpRs6OVAbpBLIPmyul8Ckiv1hfZ6G7uX50MqsaS0aXQkOUt46WuKQj4MtJ
+A3tw5nkaultvUJSCROwaiFhN8voaFF4ujlnXpRsd5fOkw0IQUw9TRoHJyfRMQuHO
+FglZTDWnwOey/k25m0BSHSAVJlLaDDL85SU3zL++dIYljdpO6Nlp6B7fmQ8pIxhr
+bTF59qETara6zqWmq2EFGKuq8VHobi1HzrPSZpMh9s5EqyTlVdIrv0f3h6G7XYjE
+zToYcg/R0TcszPPClphJKI2sbfhndp9G7vEmJysXWplEwHi8DpokGdGlPGY0SVS7
+3LjBI4nN7YCgoemQDVLQye2+GpDM6urnI2JbLQwuQw5qcFXH6OzNKHs/K51qNf0Z
+nTGR+aOXtWU4Ddzj5Kncg430C4HEtgMMthsgHE/ukBqopP4lpH8Ut8f2KC9tSfhH
+LJnipyWgkX2ovq86sH6+Dr4cGf6us1KNBSeykSHdht0ttFR8dE06KEUX2TCs+p1i
+ePtBToecauiXKJgdzUjpwQI0neoby9Fo4kVjVmlRgaJ8pmDvW1I80VNyZGHBe8KE
+pdUSZaYKJ7YlysIpkZ6rbKqsPEeARWEOL8JIkSm2xo+aSp74BSKlCZLhNCyv01v4
+W9MamqTs3qeX7Y3GNp4ui7efsmeg2vD7afK1CnjLwrSCETxMqpwSj7f2fCXO7Td1
+nE+1V+tFOrQgRwnCy168SVyvH3OPN3OkS1uNhbmhukHdllEKlnMBAmWylCm+wUvX
+SEe2lCaZlTVtSM+fg7oYk6ZXM+is0ok0PgmZmbBycXk1JUC2rldDmLu6ZgLEJsNl
++JNuHVP+t61ZHtoFCYqL0kty1+Ws71Gyoa4sSmchk7PpzhjIm2cHCf7JMa5TWorG
+zUjiRYZFvUw/zsJ4H60tFN404LaNzySbEiPFYCPtTSkCs1Eni9GfBvH28GhKlqhB
+agQgaUgIggjY8ax5dXTbJc341gYhIZjUZJVWJ42mVspg67LCxCw35aUFYO3KMM/s
+wB0VxjtnU3cnBLUSN9flUVGFM6eT5Zs7DeG9Ty2N6+DQmk0M177MG2e5kGCNubC2
+mguHpza3JyewuG/ylJd4DKhclmGa8JbjmDSyD8P3MEoKlEsGIibHl8736OyOSxl5
+TqpPmlcLps3n0XtoJItDylDBZjCm0ZX+3LElEQGJltYxu0le0u6scPkUR9iDyQPG
+6ifk3mq81rasyUvisnSVSqourLQsEwyKpXgJybi50bdkUdtlHcLaIEmt8+A9tKcJ
+SfLABgSx2ZJAXYIuOc26s2SiJHqgqe4wdg+jtaYoKW8I2OaTg0gkbeJzbCGZdgpz
+bi1HtZcqQ9w4mixxSEfQC7noNbA0fE7dFCOkc/J/a+ZvsGbptY6tBw8rvfrsqfjs
+qrFKUn8uaIeE16zuX2QX6BoIAJQhIxjKNDWxlO6g+GVfPXzReLJmSs0ukP5wunhy
+G6aupj4SvnwKslsxrWOMentpYIGndEhVqQ0IDalZYFh9ohPkKgVzYIo74xf3jrcE
+FNB4jBAvhR0I0CxZYkvXs454GL4bw/Ayj/VZmqgVzFBLlI+e5M6BqMXI7ADCdQxx
+bg93EVJePMUuwSAquZESqHZlyK1Rxkz6m06Xv/CK1tRBmUA+FGKdNFwC44QwlZ6c
+xASbzOwk6dP4+3WCiIJZ8Bg+x7ZqwdVVq26tqFnAW3Mcvpuei9bRolTPwhsUOCv4
+KY61WTWuSjTGXz6RZ+F7fPIoOQvKGcrAlHSbcdLMAb31JT+Kw/A94uoEyqMmSVte
+qg0NuLXVwuEuj0FQoESN3TF2eXw2GK6qJ0tKjk4fXm0X13x/ChJh3DriBN04Pnmd
+OnIDRI0BRoZexLJYVktHOQZAAz0cOn6XLYMFw3XTuvMuafKibbg3P0iGasBttcFf
+aOA4eI8NXZXEPGCsCUxVJdbAftMZ7rKLZQOGrsUnexi7x48hbcm9LFVjtcB+9k0S
+b9RtfkgrhzXvLjEYjNdqKrLIWPJx5q1JUENt2myNoevYXo65/e3hEHBvSWyGHFyM
+X8NCwwMIC7APFjF2axrQggzY45rHW9R03Wdo3J1/g7JIlQBElm0hgoBKapzzVpPq
+RTxF6sSgwiBRQACAUZNeT3ZueUG1fBy8W3tbXlblpLGXJRUKw9J0G4wLMDvlMUip
+JjOfRe/xySxDaUHOLK3ynWuGCjsWLtDCsrU/4Yk3y439L7/97W//cZkw/WW/6NQ3
+TV27rZEk2VcA4Hl/t8T+s6zVvZHr8qc0/6sfIbg8SYvuEgIZmZqXpEhZ1PCXYH7Z
+Rd7DsQt1H2N7XVEZdMmdF+YApdFgQr0UCK1vGheKffSxtIH7IO3Do0wZV6KXTFaQ
+ln82WpXh01B+8eoQWLIRP6zplwDdLjeGziCSeDr7EtwEevgYg37xfDmUkAH5IkkK
+bmZLbpU1rJszmZV+HNa37hw6BIVNJkcB2R2WZi99sah5oxRY8VIHa9t8Fse3z4zV
+spnlRWWzxiOlC5HkdWoXfNhTzJyNXYfpRWavziyz+dCkFE/unnLMC7o9qateNjfB
+JSOTYpCEzPRkit1llQK48M4AO1OCBFKeIgyED/xZ4N6+azM6j1U1CSKba6g5UfC2
++wifBIwn9QF9TPd++aBVAJtfA5pe1OQjd+XcEzVeK6B+HZpXd47Z86w9aUzqyjQ9
+qvnCRU+NdsDgLDuYlu1JaF6f2bqsE8vSJJCMDg2pFkI03TARfiBp5QFfKtox0iKS
+AhlFxUmwtqu/HiRwqR7BpvyUWkTnQU2jabpgUrP8tlbmBUPqdfxZfgt2no86bK7j
+JDS///4JZqkWowiBKwEm+gPuhEaQwfFBIit7fRma1weGAdeRbp5uWqYaW+EaZEIn
+Y5d6EpoXjw4x3JQ1wdRH3lIWymWJ/TrCRAmRmCvFPZ0E5uWJzulUY1+iRFY93iQw
+CnjxEOoGWLBk7S1YCgBU3tZP1r25pLpAgZ14hDYhaq7zAtC3zd8n0CMSwMsaFWzS
+tsivZAOH9MHAoxOUZ02w/iQsL29aktq/+JVLEpGeO1P/gJxT2rtJSIyKSUn/Migv
+jwvbmapSy34HC4E15kzkBDUWZfjN1yH5YdAhcVj4+co5y4PiEvQzMnrXJ2hd8shX
+j/tJTH73EGFBZ7Y/NYK85XQdNZdu5me/TrRWLPB2dqJzkWcP3WxS97ZGIABMMgLy
+o1ISAXvyPwSuQhB71vALtYh4sYZknKJx49qW/CAmEdkaiw/xJCg/XtUN2WXLvpz8
+tyqIlNwhRRNj3K46lymZxdG+jMqP50E7d6omJEqsrdBOyVztIJMqO/9/5t6tx7Yk
+OdL7R6O4X171KggDSBhAb0RcBw2J7AKbwHD+vT5bJ7MrV56duSOzzgCHZLOq67L2
+3ssj3M0i3M2s++Cg6l//9sc/vtSrtkwTM3Qyk6AGQ+aMWiFFRLXou1pMamkfxeyr
+n2fZCtKCy7oWrxoZIH5d22OrM6LHLbNldhokyjUoysV+qNVr1wjVt45tCBU3BF4S
+jUFmKlOKv5RPCP8lUalm0wmwBEBkzWiQZbI0l6P9kJV99XcoxNEngr7rJXftdHNl
+NlVWHcPsyi4lafsw2l8O0iyiFU4tWK4V+cP2JMCutgTf3FeXwr1rdfJ+glPCLH5m
+zV/olkui+2woGRQNnVOM/fUlcP8cE6d6rQFMQhyztySti8v6RDPj3Wd2MYQRFGLm
+VJOXTu63fOs0WeY1FN5tzLwM6Hoi3Q+1xJCotRrUXNM04TcmHFllFFbQdtM8q+yd
+R/166N/JWkmyNy19ZBu6RQ6XI42Am1U+F131fc4vhvydqlXXGQ1fswQTryZSiLCT
+IryRUlT77q5/nbSEMjRe9ZyS48qAD11l1ibFgB78AGHM6Pb3d/sLFQYuOskoOFA3
+u9LIlBNaFwC2/BjZGqQIOpe7xLDXQJ2TAab8EsnGidUIHU8D7JkoZFs3hH56WeQ6
+L0kWSbX7rK4o4APpSX1aUqwrXtPr+/u7/JVxU1hWUmtIANUak9jtQAOeGSflSB6O
+VKH0zd39KpOm06VcItzEF5lCtxVlGNuMDp/z81A/8PVRCmczgeF94FuyoeWzNrr0
+G6FdQiNtf0wlPn8673ZDvJsV/CXVkcsBH7rDbbDlbeTpQArsgc/LItFAPPaLug67
+JlhBBJr69l3zieRyNnYXopWDh24QG5gQ2OGCTAZ03HhdtO0AyJGPgD0J64MWUk3i
+sqs0dkSloeZc7tbqJJAQXQtBLm9xPw3mI2G0qU7ZoTGvreEgp3bnMrwm1ZwphyH8
+hU2knz37d+0i/ew7/6U20s8e/L0+0p+f+AsbST99+O/aSfr5G/krraSfPvl7vaQ/
+PfJhl11X58rmlbbRt9zbqmwRdRI/pbCpsaVVPu57OvoQyohOV7rEXoRuqSYuFXXS
+QOaq0l2lIEi3THd+YYyise4kwRLJmhkFLm6AumUHs4/DJo9JfyVCYclEUrRK0jQu
+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
+0EbuVRbNvuqeIyzPHtaZBRUy5fhekE8fJfe2bSQElczwIC5wY3ckJtlshwUhHc0V
+6dixqqqkB03uzdpOuSp16zjYs1iCISPbEs1iJ2mgNxaygRW7D+WQpJfeURNJlaKT
+teyFzVbo74X69BOWDqel4WZj8i2RnsZh9dS9BfBuJ01RlYw3An76HL2l5rxvRleH
+uqYHo+RQu+6j4Mnvhf2f/nv4p7/7tUNE1kawvVo7gIoSNuAB0jCAiQ+d0MnVJb0b
+9puPgkcKtkhuIAcdkxAK0OrWnMjoY5ETy2pqsJONyMhNfguHsOXSob/MKrSbvXPh
+uD5coU+pvrajLZxUkewxbX+g29UKPGOyFX2lQq+VzLthv/kJMRXJSHRxlwywWyCv
+47oidguz9TY1D+mcb4X95nMyK7noaESKmuqy7pI1A07lxNv41A3j/gf81//5T//w
+j18fDB2AeYriiHeyp5qOEyW+oOlgUmrr5pvi/Avhvv0Iy0bQyRUwF8rbu5WqvwCd
+/BIPsdd9EH/pKFvHRzqZ29SSi5WrSWyHCxq5SM25OS6Ac5yasxQHTw3cJg2jCES3
+JQ8y6xS/tFFiakZ3nK+F+farS6dBLbGFfNLlrZx1YJtWYxmyE0qXwW6Z6ZXw3j4f
+2laUrCWrs2WIO5p0nyOPXG0V+1JY/9v//E//4+///j//519vLFgYvKWkQ6plvJfd
+JXxd4gHZ7hbVQEDpfDGyHz7FfvEOS5qRmmxVAFklWoQXGt+XIpUkFT+tukrc1vWJ
+Lor3MaEaR9vgnjyDhC7VEwZzXxp7Am57ie0VFgD/XtrkVM1ueV6/Y4FIMko9fy8G
+98O37+QIvq92LCSlSe9vFl7SlPI26FqOVeCa/Ep8P3yEJM2dm8blEPhxuoANZGrZ
+HVPKSnsrxP/8P/7+//kWgCI/vuGmVXsx5MPqzYUGxhfnz8doNlvlzTDffFIiD1MX
+dGs657JykipqqZ1xQ4hSLUkld0JsReODJrShJk7uhXX7YKTRA7rdzslDIEsWiARe
+mpFPNxyPPwNvWP4BG3jKIQ+u3NUj2ADlY70Z6ptfsFvXKSN7YpbSJC4qffgaHWsP
+yt+0usZ8DXd/8jFy92MJFXErCalQOouASUkCOp/6Ddw+/w8d3Hr04B9ycOvRF35/
+cOvRU98Y3Pr94/6owa2HT/4hB7cev4u3B7cePvaNwa3fPe800wBr/tXTi4erTX7z
++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
+U/o9Sm1r56e/gN/ulLvyMsZPONUwbMCMlre0xtm1YsKkim4T2i5Ukq9uO2yLM4Zt
+UCkR2CFepQt0dPlIcGhhe6F/FTJ9SKJB/gfz499IgnNIEunP6gU293Twf/sFC1jD
+LIwxA+H0TqbvifEXgdVEixlKck/G/bfbOL2EiZ8Lw2dpKbOnWGgZmUFvwaRvhvxl
+xW+EwQuKG4p4R0VFOC+Ka1llFUUhF/pz3Lfj/come/IDm3QtVEEaFeFER5Bgq2f2
+pymOKBnXmJSm8XlbGd0zRb1gkVD1Pu1lmuDyWKIG2IW5jftcwlssm23EgZuCjQS9
+mH+IU5cvMSOEur8d7NceYpFUfaWMRS3PLCS+mIJVTpwsuGBUZpnN/V6kX7a8w0w7
+CSS4EvJKO2LNhXHfyFlwZn4zwb+Qyb2UTumxEUkyWC2AWgTDo9abwUbWqaTv8e3E
+/rKmmersfY6NRhrz1AMpRz1/7UkcKjXf0XtnWBJbheV3NK4LovWrX7YpbALhZrPq
+tdz32F7cC1iPztFe9MDo46/oji7BMd1N5Hu65JUCW/h2Qn/Z4kYaCimMKUiytKSt
+KaoVwo6T42p9Sq1bP/L3EvnravY7Ny24yXlfS9EzFiuWNZL+x65fhvkPV/b5+NJ/
+tto+Hz/y/566z8fX/aa+z9sL/pEKP59c+89W4+ez9/G/pfLzyYW/qfPz5oq3wd6/
++3e/ZvD80quKWy8klShUdilL6PvXDYfKApZF8ZOewLPbOEbYVQ61vAp1v2nR4Uy7
+xZVX5HSyqWpcJwk4QgcMneqEZwanou4nJ6kelVfT/aA/Hj3liA+b6mRr+jiSvvBW
+LWPFeuGqzXpF7I8EnENPA/rB4/uMT+Fm0mLYrOx9zUxYfXeKjNZoV4JX0jpblR/c
+I5uZ7ArIQxS9KvJhStOgia/fZNdZmB+btcWBOKQXac3CmWEWn9zqYuwisioRU8Gg
++pjT2N4azPH/SPR3gVCwfsZsnYOTLELLPsBiTL7pntfs4mzbF6PirX8SYxuYKaKQ
+U/RfWnjVrCsbCZ13fQhpLIU7bfwvMNSdGbata64LZXhznFpvOkU+GubLPO1m6Ogg
+bm9aqVE3Skxg6HmTj0dRvL9oDNH1jsfI+lExhcuBeXcXWm4fylu8ueLj7La+c3h8
+pC3eeKPKuui5a0ooClyqkQErVcXT0N1UhThajN4IG8SOXlUbNSmbGNWXNe0aPQQf
+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
+63c/sI/ST4/uP3o073xx/8aDm+HLr38bX5V47dcHz2u62b6zz0f+/vY/3/vxYf/P
+90+fPPzllzvzw/FjdD9c/+fNx/Gbn6//+lX7/BMfvjS3W3ny4vdP7z/76scv71xL
+dz+5+8v9B789/+H6jY++8f/qD5/867tvf/v1vbvP4/Wv8r3nn62n//zhy2dPzZ1b
+X//7s0dPv8wf/+fn8u+b8fntj3+pz679+HG4ux798uv2y7f3y70Pknn69cOfPv3h
+obt/68EHd776bdz843n/6ZPtm4fzwW/XP37+6fNfvvnm2b343c/Xn4YX9vtrX3zz
+2U+Pv3/85fxo3rz/9ffX/xjLfPPi92d/rJ8+eXr39+/urC/y9+/d/c+PH7XH1/+1
+nt6+c/uLfHM9fHAvXQ9ffPjztce3bt2xjx494P6s3Pn27vXfb/vb7bv1zdMb9vH2
+5Na/f/rnJy/K7x8+/+TO/burfPX8n/67B5+37x+/mA+++/Wzm9f+Yz//9tvf/C/x
+0U3/6ON79Yu7f3ypiPC5+f7bh09vvBf79a/uvffVk5+efGDufdp+/fDZD7999/TO
+i7r9/uzzX839G9duf5TN3X/a+3cf3Lz707I37j364vtfPv3xt3+t35W6Xe/6bfnx
+/V/e++3x7Yc/fPHj7Wc3Xnx076MH6+GjP8rPX975+doH//7i+bOP/p3vv7jR4s9P
+zQfun59tN756+tuzm7d+/DLdjvX6oxg+/Ohbc7/Gr/8I9cUq929/9MX12+3FXD9+
+cu36XXvj0zuPXPz9h9/6oz8++LLceTpvP/sgmE8e/7g9efLRk5u/vLiRf/rsl/DA
+3X04f/vpAz9/efrTN0/lc9972q+ZB1/f//zZjU9a/P73p4+/IF15+OT2rVuf3r31
+3Yzxu/7Tg3L/0xeP37t+3z76z40H9sObn3//6EF58Um7/ezu7XvX4h/3fnh+45O7
+5fP5xwfmgf3mvV8/uvZ/H33yXT/ZJLc+v3neFvn/qZKFEe79DQA=
+====
EOF
- cat > expected16 << EOF
-Good signature for b.gpg made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ gunzip NetBSD-6.0_hashes.asc.gz
+ uudecode << EOF
+begin-base64 644 expected16
+R29vZCBzaWduYXR1cmUgZm9yIGIuZ3BnIG1hZGUgTW9uIFNlcCAxMCAwMDoxNToz
+OCAyMDEyCnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2lnbikg
+MWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAgZDQxNSA5
+ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAKdWlk
+ICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29rcy5j
+b20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3JjLm9y
+Zz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRic2Qub3Jn
+Pgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZsaXguY29t
+PgoK
+====
EOF
- cat >expected17 <<EOF
-Good signature for a.gpg made Sun Sep 9 17:44:11 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected17
+R29vZCBzaWduYXR1cmUgZm9yIGEuZ3BnIG1hZGUgU3VuIFNlcCAgOSAxNzo0NDox
+MSAyMDEyCnNpZ25hdHVyZSAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2lnbikgMWI2
+OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50OiAgZDQxNSA5ZGVi
+IDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAKdWlkICAg
+ICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29rcy5j
+b20+CnVpZCAgICAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3Jj
+Lm9yZz4KdWlkICAgICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRi
+c2Qub3JnPgp1aWQgICAgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5l
+dGZsaXguY29tPgplbmNyeXB0aW9uIDIwNDgvUlNBIChFbmNyeXB0IG9yIFNpZ24p
+IDc5ZGViNjFlNDg4ZWVlNzQgMjAwNC0wMS0xMgpmaW5nZXJwcmludDogIDU3YzAg
+YzFlNiBiZjcxIDg4NDUgNDE2YiA5NTIyIDc5ZGUgYjYxZSA0ODhlIGVlNzQgCgo=
+====
EOF
- cat >expected18 <<EOF
-Good signature for gpgsigned-a.gpg made Sun Sep 9 17:43:01 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected18
+R29vZCBzaWduYXR1cmUgZm9yIGEuZ3BnIG1hZGUgVHVlIE1heSAzMSAyMzoyOTox
+MCAyMDE2CnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2lnbikg
+MWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAgZDQxNSA5
+ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAKdWlk
+ICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29rcy5j
+b20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3JjLm9y
+Zz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRic2Qub3Jn
+Pgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZsaXguY29t
+PgoK
+====
EOF
- cat >expected19 <<EOF
-Good signature for NetBSD-6.0_RC2_hashes.asc made Wed Sep 19 07:53:18 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected19
+R29vZCBzaWduYXR1cmUgZm9yIE5ldEJTRC02LjBfUkMyX2hhc2hlcy5hc2MgbWFk
+ZSBXZWQgU2VwIDE5IDA3OjUzOjE4IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAo
+RW5jcnlwdCBvciBTaWduKSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmlu
+Z2VycHJpbnQ6ICBkZGVlIDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDcz
+YWMgNGM0YSA3MDZlIAp1aWQgICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBP
+ZmZpY2VyIDxzZWN1cml0eS1vZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24g
+NDA5Ni9SU0EgKEVuY3J5cHQgb3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5
+LTA2LTIzIFtFeHBpcnkgMjAxOS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4
+MDEgZmJkOCBmNDVkIDg5ZjIgMDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- cat >expected20 <<EOF
-1. tag & 0x3f
-2. len
-
-one pass (tag 4)
-========
-b version:3
-b sig type
-b hash alg
-b pubkey alg
-8b keyid
-
-literal data (tag 11)
-=============
-b binary/text
-b length
-c string
-L mtime
-text
+ uudecode << EOF
+begin-base64 644 expected20
+MS4gdGFnICYgMHgzZgoyLiBsZW4KCm9uZSBwYXNzICh0YWcgNCkKPT09PT09PT0K
+YiB2ZXJzaW9uOjMKYiBzaWcgdHlwZQpiIGhhc2ggYWxnCmIgcHVia2V5IGFsZwo4
+YiBrZXlpZAoKbGl0ZXJhbCBkYXRhICh0YWcgMTEpCj09PT09PT09PT09PT0KYiBi
+aW5hcnkvdGV4dApiIGxlbmd0aApjIHN0cmluZwpMIG10aW1lCnRleHQK
+====
EOF
- cat >expected21 <<EOF
-Good signature for [stdin] made Sun Sep 9 17:44:11 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected21
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBUdWUgTWF5IDMxIDIzOjI5
+OjEwIDIwMTYKc2lnbmF0dXJlICAgICAyMDQ4L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAxYjY4ZGNmY2MwNTk2ODIzIDIwMDQtMDEtMTIKZmluZ2VycHJpbnQgICBkNDE1
+IDlkZWIgMzM2ZCBlNGNjIGNkZmEgMDBjZCAxYjY4IGRjZmMgYzA1OSA2ODIzIAp1
+aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQGFsaXN0YWlyY3Jvb2tz
+LmNvbT4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0Bwa2dzcmMu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGJzZC5v
+cmc+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAbmV0ZmxpeC5j
+b20+Cgo=
+====
EOF
- cat >expected22 <<EOF
-Good signature for [stdin] made Sun Sep 30 10:50:20 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected22
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBTdW4gU2VwIDMwIDEwOjUw
+OjIwIDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAxYjY4ZGNmY2MwNTk2ODIzIDIwMDQtMDEtMTIKZmluZ2VycHJpbnQgICBkNDE1
+IDlkZWIgMzM2ZCBlNGNjIGNkZmEgMDBjZCAxYjY4IGRjZmMgYzA1OSA2ODIzIAp1
+aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQGFsaXN0YWlyY3Jvb2tz
+LmNvbT4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0Bwa2dzcmMu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGJzZC5v
+cmc+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAbmV0ZmxpeC5j
+b20+Cgo=
+====
EOF
- cat >expected23 <<EOF
-Good signature for [stdin] made Wed Sep 19 07:53:18 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected23
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBXZWQgU2VwIDE5IDA3OjUz
+OjE4IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAoRW5jcnlwdCBvciBTaWduKSAw
+NjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2VycHJpbnQ6ICBkZGVlIDJi
+ZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMgNGM0YSA3MDZlIAp1aWQg
+ICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZpY2VyIDxzZWN1cml0eS1v
+ZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24gNDA5Ni9SU0EgKEVuY3J5cHQg
+b3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5LTA2LTIzIFtFeHBpcnkgMjAx
+OS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4MDEgZmJkOCBmNDVkIDg5ZjIg
+MDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- cat >expected24 <<EOF
-Good signature for [stdin] made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected24
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBNb24gU2VwIDEwIDAwOjE1
+OjM4IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAxYjY4ZGNmY2MwNTk2ODIzIDIwMDQtMDEtMTIKZmluZ2VycHJpbnQgICBkNDE1
+IDlkZWIgMzM2ZCBlNGNjIGNkZmEgMDBjZCAxYjY4IGRjZmMgYzA1OSA2ODIzIAp1
+aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQGFsaXN0YWlyY3Jvb2tz
+LmNvbT4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0Bwa2dzcmMu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGJzZC5v
+cmc+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAbmV0ZmxpeC5j
+b20+Cgo=
+====
EOF
- cat >expected25 <<EOF
-Good signature for NetBSD-6.0_RC1_hashes.gpg made Tue Oct 16 08:12:16 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected25
+R29vZCBzaWduYXR1cmUgZm9yIE5ldEJTRC02LjBfUkMxX2hhc2hlcy5ncGcgbWFk
+ZSBUdWUgT2N0IDE2IDA4OjEyOjE2IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAo
+RW5jcnlwdCBvciBTaWduKSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmlu
+Z2VycHJpbnQ6ICBkZGVlIDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDcz
+YWMgNGM0YSA3MDZlIAp1aWQgICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBP
+ZmZpY2VyIDxzZWN1cml0eS1vZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24g
+NDA5Ni9SU0EgKEVuY3J5cHQgb3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5
+LTA2LTIzIFtFeHBpcnkgMjAxOS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4
+MDEgZmJkOCBmNDVkIDg5ZjIgMDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- cat >expected26 <<EOF
-Good signature for [stdin] made Tue Oct 16 08:12:16 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected26
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBUdWUgT2N0IDE2IDA4OjEy
+OjE2IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAoRW5jcnlwdCBvciBTaWduKSAw
+NjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2VycHJpbnQ6ICBkZGVlIDJi
+ZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMgNGM0YSA3MDZlIAp1aWQg
+ICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZpY2VyIDxzZWN1cml0eS1v
+ZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24gNDA5Ni9SU0EgKEVuY3J5cHQg
+b3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5LTA2LTIzIFtFeHBpcnkgMjAx
+OS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4MDEgZmJkOCBmNDVkIDg5ZjIg
+MDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- cat >expected27 <<EOF
-Good signature for [stdin] made Mon Oct 15 09:28:54 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected27
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBNb24gT2N0IDE1IDA5OjI4
+OjU0IDIwMTIKc2lnbmF0dXJlICAgICA0MDk2L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2VycHJpbnQgICBkZGVl
+IDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMgNGM0YSA3MDZlIAp1
+aWQgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZpY2VyIDxzZWN1cml0eS1v
+ZmZpY2VyQE5ldEJTRC5vcmc+Cgo=
+====
EOF
- cat >expected28 <<EOF
-Good signature for NetBSD-6.0_hashes.asc made Mon Oct 15 09:28:54 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected28
+R29vZCBzaWduYXR1cmUgZm9yIE5ldEJTRC02LjBfaGFzaGVzLmFzYyBtYWRlIE1v
+biBPY3QgMTUgMDk6Mjg6NTQgMjAxMgpzaWduYXR1cmUgICAgIDQwOTYvUlNBIChF
+bmNyeXB0IG9yIFNpZ24pIDA2NDk3M2FjNGM0YTcwNmUgMjAwOS0wNi0yMwpmaW5n
+ZXJwcmludCAgIGRkZWUgMmJkYiA5Yzk4IGEwZDEgZDRmYiBkYmY3IDA2NDkgNzNh
+YyA0YzRhIDcwNmUgCnVpZCAgICAgICAgICAgTmV0QlNEIFNlY3VyaXR5IE9mZmlj
+ZXIgPHNlY3VyaXR5LW9mZmljZXJATmV0QlNELm9yZz4KCg==
+====
EOF
- cat >expected29 <<EOF
-Good signature for NetBSD-6.0_RC1_hashes_ascii.gpg made Sun Sep 9 17:41:24 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected29
+R29vZCBzaWduYXR1cmUgZm9yIE5ldEJTRC02LjBfUkMxX2hhc2hlc19hc2NpaS5n
+cGcgbWFkZSBTdW4gU2VwICA5IDE3OjQxOjI0IDIwMTIKc2lnbmF0dXJlICA0MDk2
+L1JTQSAoRW5jcnlwdCBvciBTaWduKSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYt
+MjMKZmluZ2VycHJpbnQ6ICBkZGVlIDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAw
+NjQ5IDczYWMgNGM0YSA3MDZlIAp1aWQgICAgICAgICAgICAgIE5ldEJTRCBTZWN1
+cml0eSBPZmZpY2VyIDxzZWN1cml0eS1vZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5
+cHRpb24gNDA5Ni9SU0EgKEVuY3J5cHQgb3IgU2lnbikgOWZmMmMyNGZkZjJjZTYy
+MCAyMDA5LTA2LTIzIFtFeHBpcnkgMjAxOS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAx
+OTE1IDA4MDEgZmJkOCBmNDVkIDg5ZjIgMDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIw
+IAoK
+====
EOF
- cat >expected30 <<EOF
-Good signature for [stdin] made Sun Sep 9 17:41:24 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected30
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBTdW4gU2VwICA5IDE3OjQx
+OjI0IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAoRW5jcnlwdCBvciBTaWduKSAw
+NjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2VycHJpbnQ6ICBkZGVlIDJi
+ZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMgNGM0YSA3MDZlIAp1aWQg
+ICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZpY2VyIDxzZWN1cml0eS1v
+ZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24gNDA5Ni9SU0EgKEVuY3J5cHQg
+b3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5LTA2LTIzIFtFeHBpcnkgMjAx
+OS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4MDEgZmJkOCBmNDVkIDg5ZjIg
+MDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
- uudecode <<EOF
+ uudecode << EOF
begin-base64 644 expected31
UFJPRz1wClNSQ1M9cGFyc2UuYwpXQVJOUz01Ck1LTUFOPW5vCkNQUEZMQUdTKz0t
ZyAtTzAKTERGTEFHUys9LWcgLU8wCgouaW5jbHVkZSA8YnNkLnByb2cubWs+Cgp0
@@ -8595,39 +7128,36 @@ Ci5pbmNsdWRlIDxic2QucHJvZy5taz4KCnQ6ICR7UFJPR30KCS4vJHtQUk9HfSBn
cGdzaWduZWQtYS5ncGcK
====
EOF
- cat >expected32 <<EOF
-Good signature for b.gpg made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
-Good signature for b.gpg made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
-Good signature for b.gpg made Mon Sep 10 00:15:38 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected32
+R29vZCBzaWduYXR1cmUgZm9yIGIuZ3BnIG1hZGUgTW9uIFNlcCAxMCAwMDoxNToz
+OCAyMDEyCnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2lnbikg
+MWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAgZDQxNSA5
+ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAKdWlk
+ICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29rcy5j
+b20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3JjLm9y
+Zz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRic2Qub3Jn
+Pgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZsaXguY29t
+PgoKR29vZCBzaWduYXR1cmUgZm9yIGIuZ3BnIG1hZGUgTW9uIFNlcCAxMCAwMDox
+NTozOCAyMDEyCnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3IgU2ln
+bikgMWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAgZDQx
+NSA5ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgyMyAK
+dWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNyb29r
+cy5jb20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtnc3Jj
+Lm9yZz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRic2Qu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZsaXgu
+Y29tPgoKR29vZCBzaWduYXR1cmUgZm9yIGIuZ3BnIG1hZGUgTW9uIFNlcCAxMCAw
+MDoxNTozOCAyMDEyCnNpZ25hdHVyZSAgICAgMjA0OC9SU0EgKEVuY3J5cHQgb3Ig
+U2lnbikgMWI2OGRjZmNjMDU5NjgyMyAyMDA0LTAxLTEyCmZpbmdlcnByaW50ICAg
+ZDQxNSA5ZGViIDMzNmQgZTRjYyBjZGZhIDAwY2QgMWI2OCBkY2ZjIGMwNTkgNjgy
+MyAKdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BhbGlzdGFpcmNy
+b29rcy5jb20+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAcGtn
+c3JjLm9yZz4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0BuZXRi
+c2Qub3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGZs
+aXguY29tPgoK
+====
EOF
- uudecode <<EOF
+ uudecode << EOF
begin-base64 644 expected33
UFJPRz1wClNSQ1M9cGFyc2UuYwpXQVJOUz01Ck1LTUFOPW5vCkNQUEZMQUdTKz0t
ZyAtTzAKTERGTEFHUys9LWcgLU8wCgouaW5jbHVkZSA8YnNkLnByb2cubWs+Cgp0
@@ -8641,44 +7171,35 @@ IC1PMAoKLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgoKdDogJHtQUk9HfQoJLi8ke1BS
T0d9IGdwZ3NpZ25lZC1hLmdwZwo=
====
EOF
- cat >expected34 <<EOF
-Good signature for det.sig made Thu Oct 18 02:12:33 2012
-signature 2048/RSA (Encrypt or Sign) 1b68dcfcc0596823 2004-01-12
-fingerprint: d415 9deb 336d e4cc cdfa 00cd 1b68 dcfc c059 6823
-uid Alistair Crooks <agc@alistaircrooks.com>
-uid Alistair Crooks <agc@pkgsrc.org>
-uid Alistair Crooks <agc@netbsd.org>
-uid Alistair Crooks <agc@netflix.com>
-encryption 2048/RSA (Encrypt or Sign) 79deb61e488eee74 2004-01-12
-fingerprint: 57c0 c1e6 bf71 8845 416b 9522 79de b61e 488e ee74
-
+ uudecode << EOF
+begin-base64 644 expected34
+R29vZCBzaWduYXR1cmUgZm9yIGRldC5zaWcgbWFkZSBUaHUgT2N0IDE4IDAyOjEy
+OjMzIDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L1JTQSAoRW5jcnlwdCBvciBTaWdu
+KSAxYjY4ZGNmY2MwNTk2ODIzIDIwMDQtMDEtMTIKZmluZ2VycHJpbnQgICBkNDE1
+IDlkZWIgMzM2ZCBlNGNjIGNkZmEgMDBjZCAxYjY4IGRjZmMgYzA1OSA2ODIzIAp1
+aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQGFsaXN0YWlyY3Jvb2tz
+LmNvbT4KdWlkICAgICAgICAgICBBbGlzdGFpciBDcm9va3MgPGFnY0Bwa2dzcmMu
+b3JnPgp1aWQgICAgICAgICAgIEFsaXN0YWlyIENyb29rcyA8YWdjQG5ldGJzZC5v
+cmc+CnVpZCAgICAgICAgICAgQWxpc3RhaXIgQ3Jvb2tzIDxhZ2NAbmV0ZmxpeC5j
+b20+Cgo=
+====
EOF
- cat >expected35 <<EOF
-To Do
-=====
-tests with -k sig
-detached sigs
-DSA
-
-Done
+ uudecode << EOF
+begin-base64 644 expected35
+VG8gRG8KPT09PT0KdGVzdHMgd2l0aCAtayBzaWcKZGV0YWNoZWQgc2lncwpEU0EK
+CkRvbmUKPT09PQpiYXNpY3MKbG9jYWxpc2UgcGdwX3JlYWRfcGFja2V0cwpmaXgg
+bGludApXQVJOUz01CmxpYiBtYW4gcGFnZQpwcm9nIG1hbiBwYWdlCmRvIHdlIGRv
+IGl0IHN0YXRpY2FsbHkgbGlua2VkIGFzIHdlbGw/Cm11bHRpcGxlIGZpbGVzIGlu
+IG5ldHBncHZlcmlmeQo=
====
-basics
-localise pgp_read_packets
-fix lint
-WARNS=5
-lib man page
-prog man page
-do we do it statically linked as well?
-multiple files in netpgpverify
EOF
atf_check -s eq:0 -o file:expected16 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c verify b.gpg
- #atf_check -s eq:0 -o file:expected17 -e empty netpgpverify -c verify a.gpg
- #atf_check -s eq:0 -o file:expected18 -e empty netpgpverify -c verify gpgsigned-a.gpg
- #atf_check -s eq:0 -o file:expected19 -e empty netpgpverify -c verify NetBSD-6.0_RC2_hashes.asc
+ atf_check -s eq:0 -o file:expected18 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c verify a.gpg
+# atf_check -s eq:0 -o file:expected19 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c verify NetBSD-6.0_RC2_hashes.asc
atf_check -s eq:0 -o file:expected20 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat jj.asc
- #atf_check -s eq:0 -o file:expected21 -e empty netpgpverify < a.gpg
+ atf_check -s eq:0 -o file:expected21 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < a.gpg
atf_check -s eq:0 -o file:expected22 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < jj.asc
- #atf_check -s eq:0 -o file:expected23 -e empty netpgpverify < NetBSD-6.0_RC2_hashes.asc
+# atf_check -s eq:0 -o file:expected23 -e empty env TZ=US/Pacific netpgpverify < NetBSD-6.0_RC2_hashes.asc
atf_check -s eq:0 -o file:expected24 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg < b.gpg
#atf_check -s eq:0 -o file:expected25 -e empty netpgpverify NetBSD-6.0_RC1_hashes.gpg
#atf_check -s eq:0 -o file:expected26 -e empty netpgpverify < NetBSD-6.0_RC1_hashes.gpg
@@ -8690,18 +7211,19 @@ EOF
atf_check -s eq:0 -o file:expected32 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg b.gpg b.gpg b.gpg
atf_check -s eq:0 -o file:expected33 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat b.gpg jj.asc b.gpg
atf_check -s eq:0 -o file:expected34 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg det.sig
- atf_check -s eq:0 -o file:expected35 -e empty env TZ=US/Pacific netpgpverify -c cat -k pubring.gpg det.sig
+ atf_check -s eq:0 -o file:expected35 -e empty env TZ=US/Pacific netpgpverify -k pubring.gpg -c cat det.sig
#atf_check -s eq:0 -o file:expected46 -e empty netpgpverify -k problem-pubring.gpg NetBSD-6.0_hashes.asc
-
}
-atf_test_case netpgpverify_dsa
-netpgpverify_dsa_head() {
- atf_set "descr" "DSA signatures for netpgpverify"
+# Test set 2 (dsa_signatures) for netpgpverify
+atf_test_case netpgpverify_testset_2_dsa_signatures
+
+netpgpverify_testset_2_dsa_signatures_head() {
+ atf_set "descr" "Test set 2 (dsa_signatures) for netpgpverify"
}
-netpgpverify_dsa_body() {
+netpgpverify_testset_2_dsa_signatures_body() {
uudecode << EOF
-begin-base64 600 dsa-pubring.gpg
+begin-base64 644 dsa-pubring.gpg
mQMuBFCEe2cRCACCpppLdv4Ku5vSFNOp4Qrjc0bO28aoVK77w2lJiPS7F9OAWYg0
N7AzamDMZolNdanmm4QZv8txwQC/d8XDB3viLmNDgi4D8/MNPvyL3PJ8AWi4ulkz
/D6e4DPvLvjZzOH+ZroqIwiixzfIx50crLJdbCM3c5A/dzRSY9IIAthdQsNNIVvX
@@ -8748,23 +7270,18 @@ DIIcDGysTCBXMHBxCsBct0iSkWHa0k9iZ5i+mtQ43zvsb7nA9sWeSrvwubEbQw0P
MNe3Vuky/C+59v/fFbGv5ofnzRSY/ld6vkfIxCtxoVEnvHZVrZeeb60BAA==
====
EOF
- cat > in1.asc << EOF
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA256
-
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.11 (NetBSD)
-
-iF4EAREIAAYFAlCFMdYACgkQJj/nhWLi/H7CkQEAgDQrFwPD76JC+6FnOKEz/9DP
-H7WjRRMoIQNTGC3ZXRsA/1xah8eFePQDmTO1sQGnINbgX9vZ7GAFOgTjW7+tVb7H
-=wtKb
------END PGP SIGNATURE-----
+ uudecode << EOF
+begin-base64 644 in1.asc
+LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQpIYXNoOiBTSEEyNTYK
+CiMJLk5ldEJTRDogTWFrZWZpbGUsdiAxLjUuMTAuMSAyMDEyLzA1LzA2IDE4OjE0
+OjE2IGFnYyBFeHAgLgoKU1VCRElSKz0JbGliIC5XQUlUClNVQkRJUis9CWJpbgoK
+LmluY2x1ZGUgPGJzZC5zdWJkaXIubWs+Ci0tLS0tQkVHSU4gUEdQIFNJR05BVFVS
+RS0tLS0tClZlcnNpb246IEdudVBHIHYxLjQuMTEgKE5ldEJTRCkKCmlGNEVBUkVJ
+QUFZRkFsQ0ZNZFlBQ2drUUpqL25oV0xpL0g3Q2tRRUFnRFFyRndQRDc2SkMrNkZu
+T0tFei85RFAKSDdXalJSTW9JUU5UR0MzWlhSc0EvMXhhaDhlRmVQUURtVE8xc1FH
+bklOYmdYOXZaN0dBRk9nVGpXNyt0VmI3SAo9d3RLYgotLS0tLUVORCBQR1AgU0lH
+TkFUVVJFLS0tLS0K
+====
EOF
uudecode << EOF
begin-base64 644 in2.gpg
@@ -8775,119 +7292,120 @@ LAyCHAxsrEwgZzBwcQrAnFfzjeGv9GtuvQj7X/Kv5IQ8f2s9n/36yaOmu9HPs8/V
8pg+SdfaxMhwdEOjtLVOGtuaizmXnJ8oa4fN/bfL0WfP1smOn38vsLFlBQA=
====
EOF
- cat > in2.asc << EOF
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA256
-
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.11 (NetBSD)
-
-iF4EAREIAAYFAlCFSQoACgkQJj/nhWLi/H6aKAD9HCLTwY8CwiqTXrzKxHZ5lHQn
-qEZbcbXjkCxlk+m/PHUA/2Whlc0t5ZtmI221LQy5inTnzpu1U75E5lJvw0YMTdXJ
-=v788
------END PGP SIGNATURE-----
+ uudecode << EOF
+begin-base64 644 in2.asc
+LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQpIYXNoOiBTSEEyNTYK
+CiMJLk5ldEJTRDogTWFrZWZpbGUsdiAxLjUuMTAuMSAyMDEyLzA1LzA2IDE4OjE0
+OjE2IGFnYyBFeHAgLiAKClNVQkRJUis9CWxpYiAuV0FJVApTVUJESVIrPQliaW4K
+Ci5pbmNsdWRlIDxic2Quc3ViZGlyLm1rPgotLS0tLUJFR0lOIFBHUCBTSUdOQVRV
+UkUtLS0tLQpWZXJzaW9uOiBHbnVQRyB2MS40LjExIChOZXRCU0QpCgppRjRFQVJF
+SUFBWUZBbENGU1FvQUNna1FKai9uaFdMaS9INmFLQUQ5SENMVHdZOEN3aXFUWHJ6
+S3hIWjVsSFFuCnFFWmJjYlhqa0N4bGsrbS9QSFVBLzJXaGxjMHQ1WnRtSTIyMUxR
+eTVpblRuenB1MVU3NUU1bEp2dzBZTVRkWEoKPXY3ODgKLS0tLS1FTkQgUEdQIFNJ
+R05BVFVSRS0tLS0tCg==
+====
EOF
- cat > expected36 << EOF
-Good signature for in1.gpg made Mon Oct 22 04:45:41 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected36
+R29vZCBzaWduYXR1cmUgZm9yIGluMS5ncGcgbWFkZSBNb24gT2N0IDIyIDA0OjQ1
+OjQxIDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected37 <<EOF
-Good signature for [stdin] made Mon Oct 22 04:45:41 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected37
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBNb24gT2N0IDIyIDA0OjQ1
+OjQxIDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected38 <<EOF
-Good signature for in1.asc made Mon Oct 22 04:45:26 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected38
+R29vZCBzaWduYXR1cmUgZm9yIGluMS5hc2MgbWFkZSBNb24gT2N0IDIyIDA0OjQ1
+OjI2IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected39 <<EOF
-Good signature for [stdin] made Mon Oct 22 04:45:26 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected39
+R29vZCBzaWduYXR1cmUgZm9yIFtzdGRpbl0gbWFkZSBNb24gT2N0IDIyIDA0OjQ1
+OjI2IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected40 <<EOF
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
+ uudecode << EOF
+begin-base64 644 expected40
+IwkuTmV0QlNEOiBNYWtlZmlsZSx2IDEuNS4xMC4xIDIwMTIvMDUvMDYgMTg6MTQ6
+MTYgYWdjIEV4cCAuCgpTVUJESVIrPQlsaWIgLldBSVQKU1VCRElSKz0JYmluCgou
+aW5jbHVkZSA8YnNkLnN1YmRpci5taz4K
+====
EOF
- cat >expected41 <<EOF
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
+ uudecode << EOF
+begin-base64 644 expected41
+IwkuTmV0QlNEOiBNYWtlZmlsZSx2IDEuNS4xMC4xIDIwMTIvMDUvMDYgMTg6MTQ6
+MTYgYWdjIEV4cCAuCgpTVUJESVIrPQlsaWIgLldBSVQKU1VCRElSKz0JYmluCgou
+aW5jbHVkZSA8YnNkLnN1YmRpci5taz4K
+====
EOF
- cat >expected42 <<EOF
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
+ uudecode << EOF
+begin-base64 644 expected42
+IwkuTmV0QlNEOiBNYWtlZmlsZSx2IDEuNS4xMC4xIDIwMTIvMDUvMDYgMTg6MTQ6
+MTYgYWdjIEV4cCAuCgpTVUJESVIrPQlsaWIgLldBSVQKU1VCRElSKz0JYmluCgou
+aW5jbHVkZSA8YnNkLnN1YmRpci5taz4K
+====
EOF
- cat >expected43 <<EOF
-# .NetBSD: Makefile,v 1.5.10.1 2012/05/06 18:14:16 agc Exp .
-
-SUBDIR+= lib .WAIT
-SUBDIR+= bin
-
-.include <bsd.subdir.mk>
+ uudecode << EOF
+begin-base64 644 expected43
+IwkuTmV0QlNEOiBNYWtlZmlsZSx2IDEuNS4xMC4xIDIwMTIvMDUvMDYgMTg6MTQ6
+MTYgYWdjIEV4cCAuCgpTVUJESVIrPQlsaWIgLldBSVQKU1VCRElSKz0JYmluCgou
+aW5jbHVkZSA8YnNkLnN1YmRpci5taz4K
+====
EOF
- cat >expected44 <<EOF
-Good signature for in2.gpg made Mon Oct 22 06:24:09 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected44
+R29vZCBzaWduYXR1cmUgZm9yIGluMi5ncGcgbWFkZSBNb24gT2N0IDIyIDA2OjI0
+OjA5IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected45 <<EOF
-Good signature for in2.asc made Mon Oct 22 06:24:26 2012
-signature 2048/DSA 263fe78562e2fc7e 2012-10-21
-fingerprint: d2e5 07b6 5d59 33d3 9c8d a618 263f e785 62e2 fc7e
-uid David Armstrong (Test DSA key - do not use) <dsa@dsa.com>
-encryption 2048/Elgamal (Encrypt Only) 53d1f21240f293c6 2012-10-21 [Expiry 2014-10-21]
-fingerprint: 6a83 d4aa 791f d8af a967 5e44 53d1 f212 40f2 93c6
-
+ uudecode << EOF
+begin-base64 644 expected45
+R29vZCBzaWduYXR1cmUgZm9yIGluMi5hc2MgbWFkZSBNb24gT2N0IDIyIDA2OjI0
+OjI2IDIwMTIKc2lnbmF0dXJlICAgICAyMDQ4L0RTQSAyNjNmZTc4NTYyZTJmYzdl
+IDIwMTItMTAtMjEKZmluZ2VycHJpbnQgICBkMmU1IDA3YjYgNWQ1OSAzM2QzIDlj
+OGQgYTYxOCAyNjNmIGU3ODUgNjJlMiBmYzdlIAp1aWQgICAgICAgICAgIERhdmlk
+IEFybXN0cm9uZyAoVGVzdCBEU0Ega2V5IC0gZG8gbm90IHVzZSkgPGRzYUBkc2Eu
+Y29tPgoK
+====
EOF
- cat >expected46 <<EOF
-Ignoring unusual/reserved signature subpacket 18
-Good signature for NetBSD-6.0_hashes.asc made Mon Oct 15 09:28:54 2012
-signature 4096/RSA (Encrypt or Sign) 064973ac4c4a706e 2009-06-23
-fingerprint: ddee 2bdb 9c98 a0d1 d4fb dbf7 0649 73ac 4c4a 706e
-uid NetBSD Security Officer <security-officer@NetBSD.org>
-encryption 4096/RSA (Encrypt or Sign) 9ff2c24fdf2ce620 2009-06-23 [Expiry 2019-06-21]
-fingerprint: 1915 0801 fbd8 f45d 89f2 0205 9ff2 c24f df2c e620
-
+ uudecode << EOF
+begin-base64 644 expected46
+SWdub3JpbmcgdW51c3VhbC9yZXNlcnZlZCBzaWduYXR1cmUgc3VicGFja2V0IDE4
+Ckdvb2Qgc2lnbmF0dXJlIGZvciBOZXRCU0QtNi4wX2hhc2hlcy5hc2MgbWFkZSBN
+b24gT2N0IDE1IDA5OjI4OjU0IDIwMTIKc2lnbmF0dXJlICA0MDk2L1JTQSAoRW5j
+cnlwdCBvciBTaWduKSAwNjQ5NzNhYzRjNGE3MDZlIDIwMDktMDYtMjMKZmluZ2Vy
+cHJpbnQ6ICBkZGVlIDJiZGIgOWM5OCBhMGQxIGQ0ZmIgZGJmNyAwNjQ5IDczYWMg
+NGM0YSA3MDZlIAp1aWQgICAgICAgICAgICAgIE5ldEJTRCBTZWN1cml0eSBPZmZp
+Y2VyIDxzZWN1cml0eS1vZmZpY2VyQE5ldEJTRC5vcmc+CmVuY3J5cHRpb24gNDA5
+Ni9SU0EgKEVuY3J5cHQgb3IgU2lnbikgOWZmMmMyNGZkZjJjZTYyMCAyMDA5LTA2
+LTIzIFtFeHBpcnkgMjAxOS0wNi0yMV0KZmluZ2VycHJpbnQ6ICAxOTE1IDA4MDEg
+ZmJkOCBmNDVkIDg5ZjIgMDIwNSA5ZmYyIGMyNGYgZGYyYyBlNjIwIAoK
+====
EOF
atf_check -s eq:0 -o file:expected36 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in1.gpg
atf_check -s eq:0 -o file:expected37 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg < in1.gpg
@@ -8901,7 +7419,9 @@ EOF
atf_check -s eq:0 -o file:expected45 -e empty env TZ=US/Pacific netpgpverify -k dsa-pubring.gpg in2.asc
}
+# all test sets
atf_init_test_cases() {
- atf_add_test_case netpgpverify_rsa
- atf_add_test_case netpgpverify_dsa
+ atf_add_test_case netpgpverify_testset_1_rsa_signatures
+ atf_add_test_case netpgpverify_testset_2_dsa_signatures
}
+
diff --git a/contrib/netbsd-tests/usr.bin/sed/t_sed.sh b/contrib/netbsd-tests/usr.bin/sed/t_sed.sh
index 892feb9..cf535a8 100755
--- a/contrib/netbsd-tests/usr.bin/sed/t_sed.sh
+++ b/contrib/netbsd-tests/usr.bin/sed/t_sed.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_sed.sh,v 1.5 2013/03/14 06:03:44 jmmv Exp $
+# $NetBSD: t_sed.sh,v 1.6 2016/04/05 00:48:53 christos Exp $
#
# Copyright (c) 2012 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -119,9 +119,26 @@ rangeselection_body() {
-x "printf 'A\nB\nA\nC\nD\nC\n' | sed '/A/,/C/d'"
}
+atf_test_case preserve_leading_ws_ia
+preserve_leading_ws_ia_head() {
+ atf_set "descr" "Test that sed(1) preserves leading whitespace " \
+ "in insert and append (PR bin/49872)"
+}
+
+preserve_leading_ws_ia_body() {
+ atf_expect_fail "fails on ^/stable/10"
+
+ atf_check -o inline:" 1 2 3\n4 5 6\n 7 8 9\n\n" \
+ -x 'echo | sed -e "/^$/i\\
+ 1 2 3\\
+4 5 6\\
+ 7 8 9"'
+}
+
atf_init_test_cases() {
atf_add_test_case c2048
atf_add_test_case emptybackref
atf_add_test_case longlines
atf_add_test_case rangeselection
+ atf_add_test_case preserve_leading_ws_ia
}
diff --git a/contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txt b/contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txt
index a435545..610c470 100644
--- a/contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txt
+++ b/contrib/netbsd-tests/usr.bin/sort/d_any_char_dflag_out.txt
Binary files differ
diff --git a/contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txt b/contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txt
index a435545..2bfbda8 100644
--- a/contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txt
+++ b/contrib/netbsd-tests/usr.bin/sort/d_any_char_fflag_out.txt
Binary files differ
diff --git a/contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txt b/contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txt
index a435545..99d3ae6 100644
--- a/contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txt
+++ b/contrib/netbsd-tests/usr.bin/sort/d_any_char_iflag_out.txt
Binary files differ
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_struct.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_struct.c
new file mode 100644
index 0000000..367b56f
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_struct.c
@@ -0,0 +1,26 @@
+/* Anonymous struct test */
+
+typedef int type;
+
+struct point {
+ int x;
+ int y;
+};
+
+struct bar {
+ struct {
+ struct point top_left;
+ struct point bottom_right;
+ };
+ type z;
+};
+
+
+int
+main(void)
+{
+ struct bar b;
+ b.top_left.x = 1;
+ return 0;
+}
+
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_union.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_union.c
new file mode 100644
index 0000000..508bcc9
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_anon_union.c
@@ -0,0 +1,16 @@
+/* struct with only anonymous members */
+
+struct foo {
+ union {
+ long loo;
+ double doo;
+ };
+};
+
+int
+main(void) {
+
+ struct foo *f = 0;
+ printf("%p\n", &f[1]);
+ return 0;
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_compound_literal_comma.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_compound_literal_comma.c
new file mode 100644
index 0000000..ca70694
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_compound_literal_comma.c
@@ -0,0 +1,14 @@
+struct bintime {
+ unsigned long long sec;
+ unsigned long long frac;
+};
+
+struct bintime
+us2bintime(unsigned long long us)
+{
+
+ return (struct bintime) {
+ .sec = us / 1000000U,
+ .frac = (((us % 1000000U) >> 32)/1000000U) >> 32,
+ };
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_flex_array_packed.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_flex_array_packed.c
new file mode 100644
index 0000000..e7b8756
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_flex_array_packed.c
@@ -0,0 +1,6 @@
+/* Allow packed c99 flexible arrays */
+struct {
+ int x;
+ char y[0];
+} __packed foo;
+
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_nested_struct.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_nested_struct.c
new file mode 100644
index 0000000..15410c8
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_nested_struct.c
@@ -0,0 +1,25 @@
+/* C99 nested struct init with named and non-named initializers */
+typedef struct pthread_mutex_t {
+ unsigned int ptm_magic;
+ char ptm_errorcheck;
+
+ char ptm_pad1[3];
+
+ char ptm_interlock;
+
+ char ptm_pad2[3];
+
+ volatile void * ptm_owner;
+ void * volatile ptm_waiters;
+ unsigned int ptm_recursed;
+ void *ptm_spare2;
+} pthread_mutex_t;
+
+
+struct arc4random_global {
+
+ pthread_mutex_t lock;
+} arc4random_global = {
+
+ .lock = { 0x33330003, 0, { 0, 0, 0 }, 0, { 0, 0, 0 }, ((void *)0), ((void *)0), 0, ((void *)0) },
+};
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_cast.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_cast.c
new file mode 100644
index 0000000..31628b4
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_cast.c
@@ -0,0 +1,18 @@
+/* union cast */
+
+struct bar {
+ int a;
+ int b;
+};
+
+union foo {
+ struct bar *a;
+ int b;
+};
+
+void
+foo(void) {
+ struct bar *a;
+
+ ((union foo)a).a;
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_init4.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_init4.c
new file mode 100644
index 0000000..f73b113
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_c99_union_init4.c
@@ -0,0 +1,15 @@
+/* test .data.l[x] */
+typedef struct {
+ int type;
+ union {
+ char b[20];
+ short s[10];
+ long l[5];
+ } data;
+} foo;
+
+
+foo bar = {
+ .type = 3,
+ .data.l[0] = 4
+};
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_cast_fun_array_param.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_cast_fun_array_param.c
new file mode 100644
index 0000000..345c783
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_cast_fun_array_param.c
@@ -0,0 +1,9 @@
+
+static void f(void *b[4]) {
+ (void)&b;
+}
+
+void *
+foo(void *fn) {
+ return fn == 0 ? f : (void (*)(void *[4])) fn;
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_type_question_colon.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_type_question_colon.c
new file mode 100644
index 0000000..00f69cd
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_type_question_colon.c
@@ -0,0 +1,14 @@
+/* the type of the ?: expression should be the more specific type */
+
+struct foo {
+ int bar;
+};
+
+void
+test(void) {
+ int i;
+ struct foo *ptr = 0;
+
+ for (i = (ptr ? ptr : (void *)0)->bar; i < 10; i++)
+ test();
+}
diff --git a/contrib/netbsd-tests/usr.bin/xlint/lint1/d_typefun.c b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_typefun.c
new file mode 100644
index 0000000..ad69c51
--- /dev/null
+++ b/contrib/netbsd-tests/usr.bin/xlint/lint1/d_typefun.c
@@ -0,0 +1,22 @@
+/* typedef of function parameter */
+
+typedef void (*free_func) (void * opaque, void* address);
+typedef struct stack_st
+{
+ int num;
+ char **data;
+ int sorted;
+
+ int num_alloc;
+ int (*comp)(const void *, const void *);
+} _STACK; /* Use STACK_OF(...) instead */
+
+typedef void *OPENSSL_BLOCK;
+struct stack_st_OPENSSL_BLOCK { _STACK stack; };
+typedef void *d2i_of_void(void **,const unsigned char **,long); typedef int i2d_of_void(void *,unsigned char **);
+
+struct stack_st_OPENSSL_BLOCK *d2i_ASN1_SET(struct stack_st_OPENSSL_BLOCK **a,
+ const unsigned char **pp,
+ long length, d2i_of_void *d2i,
+ void (*free_func)(OPENSSL_BLOCK), int ex_tag,
+ int ex_class);
diff --git a/contrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh b/contrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh
index cc2b2f4..7727683 100755
--- a/contrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh
+++ b/contrib/netbsd-tests/usr.sbin/traceroute/t_traceroute.sh
@@ -1,4 +1,4 @@
-# $NetBSD: t_traceroute.sh,v 1.5 2013/02/19 21:08:25 joerg Exp $
+# $NetBSD: t_traceroute.sh,v 1.6 2016/08/10 23:17:35 kre Exp $
#
# Copyright (c) 2010 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -26,7 +26,7 @@
#
netserver=\
-"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif"
+"rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev"
atf_test_case basic cleanup
basic_head()
diff --git a/contrib/zlib/ChangeLog b/contrib/zlib/ChangeLog
index f22aaba..30199a6 100644
--- a/contrib/zlib/ChangeLog
+++ b/contrib/zlib/ChangeLog
@@ -1,10 +1,53 @@
ChangeLog file for zlib
+Changes in 1.2.11 (15 Jan 2017)
+- Fix deflate stored bug when pulling last block from window
+- Permit immediate deflateParams changes before any deflate input
+
+Changes in 1.2.10 (2 Jan 2017)
+- Avoid warnings on snprintf() return value
+- Fix bug in deflate_stored() for zero-length input
+- Fix bug in gzwrite.c that produced corrupt gzip files
+- Remove files to be installed before copying them in Makefile.in
+- Add warnings when compiling with assembler code
+
+Changes in 1.2.9 (31 Dec 2016)
+- Fix contrib/minizip to permit unzipping with desktop API [Zouzou]
+- Improve contrib/blast to return unused bytes
+- Assure that gzoffset() is correct when appending
+- Improve compress() and uncompress() to support large lengths
+- Fix bug in test/example.c where error code not saved
+- Remedy Coverity warning [Randers-Pehrson]
+- Improve speed of gzprintf() in transparent mode
+- Fix inflateInit2() bug when windowBits is 16 or 32
+- Change DEBUG macro to ZLIB_DEBUG
+- Avoid uninitialized access by gzclose_w()
+- Allow building zlib outside of the source directory
+- Fix bug that accepted invalid zlib header when windowBits is zero
+- Fix gzseek() problem on MinGW due to buggy _lseeki64 there
+- Loop on write() calls in gzwrite.c in case of non-blocking I/O
+- Add --warn (-w) option to ./configure for more compiler warnings
+- Reject a window size of 256 bytes if not using the zlib wrapper
+- Fix bug when level 0 used with Z_HUFFMAN or Z_RLE
+- Add --debug (-d) option to ./configure to define ZLIB_DEBUG
+- Fix bugs in creating a very large gzip header
+- Add uncompress2() function, which returns the input size used
+- Assure that deflateParams() will not switch functions mid-block
+- Dramatically speed up deflation for level 0 (storing)
+- Add gzfread(), duplicating the interface of fread()
+- Add gzfwrite(), duplicating the interface of fwrite()
+- Add deflateGetDictionary() function
+- Use snprintf() for later versions of Microsoft C
+- Fix *Init macros to use z_ prefix when requested
+- Replace as400 with os400 for OS/400 support [Monnerat]
+- Add crc32_z() and adler32_z() functions with size_t lengths
+- Update Visual Studio project files [AraHaan]
+
Changes in 1.2.8 (28 Apr 2013)
- Update contrib/minizip/iowin32.c for Windows RT [Vollant]
- Do not force Z_CONST for C++
-- Clean up contrib/vstudio [Ro§]
+- Clean up contrib/vstudio [Roß]
- Correct spelling error in zlib.h
- Fix mixed line endings in contrib/vstudio
@@ -34,7 +77,7 @@ Changes in 1.2.7.1 (24 Mar 2013)
- Clean up the usage of z_const and respect const usage within zlib
- Clean up examples/gzlog.[ch] comparisons of different types
- Avoid shift equal to bits in type (caused endless loop)
-- Fix unintialized value bug in gzputc() introduced by const patches
+- Fix uninitialized value bug in gzputc() introduced by const patches
- Fix memory allocation error in examples/zran.c [Nor]
- Fix bug where gzopen(), gzclose() would write an empty file
- Fix bug in gzclose() when gzwrite() runs out of memory
@@ -194,7 +237,7 @@ Changes in 1.2.5.2 (17 Dec 2011)
- Add a transparent write mode to gzopen() when 'T' is in the mode
- Update python link in zlib man page
- Get inffixed.h and MAKEFIXED result to match
-- Add a ./config --solo option to make zlib subset with no libary use
+- Add a ./config --solo option to make zlib subset with no library use
- Add undocumented inflateResetKeep() function for CAB file decoding
- Add --cover option to ./configure for gcc coverage testing
- Add #define ZLIB_CONST option to use const in the z_stream interface
@@ -564,7 +607,7 @@ Changes in 1.2.3.1 (16 August 2006)
- Update make_vms.com [Zinser]
- Use -fPIC for shared build in configure [Teredesai, Nicholson]
- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen]
-- Use fdopen() (not _fdopen()) for Interix in zutil.h [BŠck]
+- Use fdopen() (not _fdopen()) for Interix in zutil.h [Bäck]
- Add some FAQ entries about the contrib directory
- Update the MVS question in the FAQ
- Avoid extraneous reads after EOF in gzio.c [Brown]
@@ -1178,7 +1221,7 @@ Changes in 1.0.6 (19 Jan 1998)
386 asm code replacing longest_match().
contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
A C++ I/O streams interface to the zlib gz* functions
- contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
+ contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
Another C++ I/O streams interface
contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
A very simple tar.gz file extractor using zlib
@@ -1267,7 +1310,7 @@ Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
- fix array overlay in deflate.c which sometimes caused bad compressed data
- fix inflate bug with empty stored block
- fix MSDOS medium model which was broken in 0.99
-- fix deflateParams() which could generated bad compressed data.
+- fix deflateParams() which could generate bad compressed data.
- Bytef is define'd instead of typedef'ed (work around Borland bug)
- added an INDEX file
- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
diff --git a/contrib/zlib/README b/contrib/zlib/README
index 5ca9d12..51106de 100644
--- a/contrib/zlib/README
+++ b/contrib/zlib/README
@@ -1,6 +1,6 @@
ZLIB DATA COMPRESSION LIBRARY
-zlib 1.2.8 is a general purpose data compression library. All the code is
+zlib 1.2.11 is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by RFCs
(Request for Comments) 1950 to 1952 in the files
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
@@ -31,7 +31,7 @@ Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
issue of Dr. Dobb's Journal; a copy of the article is available at
http://marknelson.us/1997/01/01/zlib-engine/ .
-The changes made in version 1.2.8 are documented in the file ChangeLog.
+The changes made in version 1.2.11 are documented in the file ChangeLog.
Unsupported third party contributions are provided in directory contrib/ .
@@ -84,7 +84,7 @@ Acknowledgments:
Copyright notice:
- (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ (C) 1995-2017 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
diff --git a/contrib/zlib/adler32.c b/contrib/zlib/adler32.c
index a868f07..d0be438 100644
--- a/contrib/zlib/adler32.c
+++ b/contrib/zlib/adler32.c
@@ -1,5 +1,5 @@
/* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2011 Mark Adler
+ * Copyright (C) 1995-2011, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -7,11 +7,9 @@
#include "zutil.h"
-#define local static
-
local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
-#define BASE 65521 /* largest prime smaller than 65536 */
+#define BASE 65521U /* largest prime smaller than 65536 */
#define NMAX 5552
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
@@ -62,10 +60,10 @@ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
#endif
/* ========================================================================= */
-uLong ZEXPORT adler32(adler, buf, len)
+uLong ZEXPORT adler32_z(adler, buf, len)
uLong adler;
const Bytef *buf;
- uInt len;
+ z_size_t len;
{
unsigned long sum2;
unsigned n;
@@ -133,6 +131,15 @@ uLong ZEXPORT adler32(adler, buf, len)
}
/* ========================================================================= */
+uLong ZEXPORT adler32(adler, buf, len)
+ uLong adler;
+ const Bytef *buf;
+ uInt len;
+{
+ return adler32_z(adler, buf, len);
+}
+
+/* ========================================================================= */
local uLong adler32_combine_(adler1, adler2, len2)
uLong adler1;
uLong adler2;
@@ -156,7 +163,7 @@ local uLong adler32_combine_(adler1, adler2, len2)
sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
if (sum1 >= BASE) sum1 -= BASE;
if (sum1 >= BASE) sum1 -= BASE;
- if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
+ if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1);
if (sum2 >= BASE) sum2 -= BASE;
return sum1 | (sum2 << 16);
}
diff --git a/contrib/zlib/compress.c b/contrib/zlib/compress.c
index 6e97626..e2db404 100644
--- a/contrib/zlib/compress.c
+++ b/contrib/zlib/compress.c
@@ -1,5 +1,5 @@
/* compress.c -- compress a memory buffer
- * Copyright (C) 1995-2005 Jean-loup Gailly.
+ * Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -28,16 +28,11 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
{
z_stream stream;
int err;
+ const uInt max = (uInt)-1;
+ uLong left;
- stream.next_in = (z_const Bytef *)source;
- stream.avail_in = (uInt)sourceLen;
-#ifdef MAXSEG_64K
- /* Check for source > 64K on 16-bit machine: */
- if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-#endif
- stream.next_out = dest;
- stream.avail_out = (uInt)*destLen;
- if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+ left = *destLen;
+ *destLen = 0;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
@@ -46,15 +41,26 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
err = deflateInit(&stream, level);
if (err != Z_OK) return err;
- err = deflate(&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- deflateEnd(&stream);
- return err == Z_OK ? Z_BUF_ERROR : err;
- }
- *destLen = stream.total_out;
+ stream.next_out = dest;
+ stream.avail_out = 0;
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = 0;
+
+ do {
+ if (stream.avail_out == 0) {
+ stream.avail_out = left > (uLong)max ? max : (uInt)left;
+ left -= stream.avail_out;
+ }
+ if (stream.avail_in == 0) {
+ stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen;
+ sourceLen -= stream.avail_in;
+ }
+ err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH);
+ } while (err == Z_OK);
- err = deflateEnd(&stream);
- return err;
+ *destLen = stream.total_out;
+ deflateEnd(&stream);
+ return err == Z_STREAM_END ? Z_OK : err;
}
/* ===========================================================================
diff --git a/contrib/zlib/contrib/README.contrib b/contrib/zlib/contrib/README.contrib
index c66349b..a411d5c 100644
--- a/contrib/zlib/contrib/README.contrib
+++ b/contrib/zlib/contrib/README.contrib
@@ -38,7 +38,7 @@ inflate86/ by Chris Anderson <christop@charm.net>
iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
A C++ I/O streams interface to the zlib gz* functions
-iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
+iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
Another C++ I/O streams interface
iostream3/ by Ludwig Schwardt <schwardt@sun.ac.za>
@@ -58,7 +58,7 @@ masmx86/ by Gilles Vollant <info@winimage.com>
minizip/ by Gilles Vollant <info@winimage.com>
Mini zip and unzip based on zlib
Includes Zip64 support by Mathias Svensson <mathias@result42.com>
- See http://www.winimage.com/zLibDll/unzip.html
+ See http://www.winimage.com/zLibDll/minizip.html
pascal/ by Bob Dellaca <bobdl@xtra.co.nz> et al.
Support for Pascal
diff --git a/contrib/zlib/crc32.c b/contrib/zlib/crc32.c
index 979a719..9580440 100644
--- a/contrib/zlib/crc32.c
+++ b/contrib/zlib/crc32.c
@@ -1,5 +1,5 @@
/* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
+ * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*
* Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
@@ -30,17 +30,15 @@
#include "zutil.h" /* for STDC and FAR definitions */
-#define local static
-
/* Definitions for doing the crc four data bytes at a time. */
#if !defined(NOBYFOUR) && defined(Z_U4)
# define BYFOUR
#endif
#ifdef BYFOUR
local unsigned long crc32_little OF((unsigned long,
- const unsigned char FAR *, unsigned));
+ const unsigned char FAR *, z_size_t));
local unsigned long crc32_big OF((unsigned long,
- const unsigned char FAR *, unsigned));
+ const unsigned char FAR *, z_size_t));
# define TBLS 8
#else
# define TBLS 1
@@ -201,10 +199,10 @@ const z_crc_t FAR * ZEXPORT get_crc_table()
#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
/* ========================================================================= */
-unsigned long ZEXPORT crc32(crc, buf, len)
+unsigned long ZEXPORT crc32_z(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
- uInt len;
+ z_size_t len;
{
if (buf == Z_NULL) return 0UL;
@@ -235,8 +233,29 @@ unsigned long ZEXPORT crc32(crc, buf, len)
return crc ^ 0xffffffffUL;
}
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ uInt len;
+{
+ return crc32_z(crc, buf, len);
+}
+
#ifdef BYFOUR
+/*
+ This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit
+ integer pointer type. This violates the strict aliasing rule, where a
+ compiler can assume, for optimization purposes, that two pointers to
+ fundamentally different types won't ever point to the same memory. This can
+ manifest as a problem only if one of the pointers is written to. This code
+ only reads from those pointers. So long as this code remains isolated in
+ this compilation unit, there won't be a problem. For this reason, this code
+ should not be copied and pasted into a compilation unit in which other code
+ writes to the buffer that is passed to these routines.
+ */
+
/* ========================================================================= */
#define DOLIT4 c ^= *buf4++; \
c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
@@ -247,7 +266,7 @@ unsigned long ZEXPORT crc32(crc, buf, len)
local unsigned long crc32_little(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
- unsigned len;
+ z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR *buf4;
@@ -278,7 +297,7 @@ local unsigned long crc32_little(crc, buf, len)
}
/* ========================================================================= */
-#define DOBIG4 c ^= *++buf4; \
+#define DOBIG4 c ^= *buf4++; \
c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
@@ -287,7 +306,7 @@ local unsigned long crc32_little(crc, buf, len)
local unsigned long crc32_big(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
- unsigned len;
+ z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR *buf4;
@@ -300,7 +319,6 @@ local unsigned long crc32_big(crc, buf, len)
}
buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
- buf4--;
while (len >= 32) {
DOBIG32;
len -= 32;
@@ -309,7 +327,6 @@ local unsigned long crc32_big(crc, buf, len)
DOBIG4;
len -= 4;
}
- buf4++;
buf = (const unsigned char FAR *)buf4;
if (len) do {
diff --git a/contrib/zlib/deflate.c b/contrib/zlib/deflate.c
index 6969577..1ec7614 100644
--- a/contrib/zlib/deflate.c
+++ b/contrib/zlib/deflate.c
@@ -1,5 +1,5 @@
/* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -52,7 +52,7 @@
#include "deflate.h"
const char deflate_copyright[] =
- " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and Mark Adler ";
+ " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -73,6 +73,8 @@ typedef enum {
typedef block_state (*compress_func) OF((deflate_state *s, int flush));
/* Compression function. Returns the block state after the call. */
+local int deflateStateCheck OF((z_streamp strm));
+local void slide_hash OF((deflate_state *s));
local void fill_window OF((deflate_state *s));
local block_state deflate_stored OF((deflate_state *s, int flush));
local block_state deflate_fast OF((deflate_state *s, int flush));
@@ -84,15 +86,16 @@ local block_state deflate_huff OF((deflate_state *s, int flush));
local void lm_init OF((deflate_state *s));
local void putShortMSB OF((deflate_state *s, uInt b));
local void flush_pending OF((z_streamp strm));
-local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
+local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
#ifdef ASMV
+# pragma message("Assembler code may have bugs -- use at your own risk")
void match_init OF((void)); /* asm code initialization */
uInt longest_match OF((deflate_state *s, IPos cur_match));
#else
local uInt longest_match OF((deflate_state *s, IPos cur_match));
#endif
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
local void check_match OF((deflate_state *s, IPos start, IPos match,
int length));
#endif
@@ -148,21 +151,14 @@ local const config configuration_table[10] = {
* meaning.
*/
-#define EQUAL 0
-/* result of memcmp for equal strings */
-
-#ifndef NO_DUMMY_DECL
-struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
-#endif
-
/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
-#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0))
/* ===========================================================================
* Update a hash value with the given input byte
- * IN assertion: all calls to to UPDATE_HASH are made with consecutive
- * input characters, so that a running hash key can be computed from the
- * previous key instead of complete recalculation each time.
+ * IN assertion: all calls to UPDATE_HASH are made with consecutive input
+ * characters, so that a running hash key can be computed from the previous
+ * key instead of complete recalculation each time.
*/
#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
@@ -173,9 +169,9 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
* the previous length of the hash chain.
* If this file is compiled with -DFASTEST, the compression level is forced
* to 1, and no hash chains are maintained.
- * IN assertion: all calls to to INSERT_STRING are made with consecutive
- * input characters and the first MIN_MATCH bytes of str are valid
- * (except for the last MIN_MATCH-1 bytes of the input file).
+ * IN assertion: all calls to INSERT_STRING are made with consecutive input
+ * characters and the first MIN_MATCH bytes of str are valid (except for
+ * the last MIN_MATCH-1 bytes of the input file).
*/
#ifdef FASTEST
#define INSERT_STRING(s, str, match_head) \
@@ -197,6 +193,37 @@ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
s->head[s->hash_size-1] = NIL; \
zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+/* ===========================================================================
+ * Slide the hash table when sliding the window down (could be avoided with 32
+ * bit values at the expense of memory usage). We slide even when level == 0 to
+ * keep the hash table consistent if we switch back to level > 0 later.
+ */
+local void slide_hash(s)
+ deflate_state *s;
+{
+ unsigned n, m;
+ Posf *p;
+ uInt wsize = s->w_size;
+
+ n = s->hash_size;
+ p = &s->head[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m - wsize : NIL);
+ } while (--n);
+ n = wsize;
+#ifndef FASTEST
+ p = &s->prev[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m - wsize : NIL);
+ /* If n is not on any hash chain, prev[n] is garbage but
+ * its value will never be used.
+ */
+ } while (--n);
+#endif
+}
+
/* ========================================================================= */
int ZEXPORT deflateInit_(strm, level, version, stream_size)
z_streamp strm;
@@ -270,7 +297,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
#endif
if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
- strategy < 0 || strategy > Z_FIXED) {
+ strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) {
return Z_STREAM_ERROR;
}
if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
@@ -278,14 +305,15 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
if (s == Z_NULL) return Z_MEM_ERROR;
strm->state = (struct internal_state FAR *)s;
s->strm = strm;
+ s->status = INIT_STATE; /* to pass state test in deflateReset() */
s->wrap = wrap;
s->gzhead = Z_NULL;
- s->w_bits = windowBits;
+ s->w_bits = (uInt)windowBits;
s->w_size = 1 << s->w_bits;
s->w_mask = s->w_size - 1;
- s->hash_bits = memLevel + 7;
+ s->hash_bits = (uInt)memLevel + 7;
s->hash_size = 1 << s->hash_bits;
s->hash_mask = s->hash_size - 1;
s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
@@ -319,6 +347,31 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
return deflateReset(strm);
}
+/* =========================================================================
+ * Check for a valid deflate stream state. Return 0 if ok, 1 if not.
+ */
+local int deflateStateCheck (strm)
+ z_streamp strm;
+{
+ deflate_state *s;
+ if (strm == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
+ return 1;
+ s = strm->state;
+ if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE &&
+#ifdef GZIP
+ s->status != GZIP_STATE &&
+#endif
+ s->status != EXTRA_STATE &&
+ s->status != NAME_STATE &&
+ s->status != COMMENT_STATE &&
+ s->status != HCRC_STATE &&
+ s->status != BUSY_STATE &&
+ s->status != FINISH_STATE))
+ return 1;
+ return 0;
+}
+
/* ========================================================================= */
int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
z_streamp strm;
@@ -331,7 +384,7 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
unsigned avail;
z_const unsigned char *next;
- if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+ if (deflateStateCheck(strm) || dictionary == Z_NULL)
return Z_STREAM_ERROR;
s = strm->state;
wrap = s->wrap;
@@ -389,13 +442,34 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
}
/* ========================================================================= */
+int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength)
+ z_streamp strm;
+ Bytef *dictionary;
+ uInt *dictLength;
+{
+ deflate_state *s;
+ uInt len;
+
+ if (deflateStateCheck(strm))
+ return Z_STREAM_ERROR;
+ s = strm->state;
+ len = s->strstart + s->lookahead;
+ if (len > s->w_size)
+ len = s->w_size;
+ if (dictionary != Z_NULL && len)
+ zmemcpy(dictionary, s->window + s->strstart + s->lookahead - len, len);
+ if (dictLength != Z_NULL)
+ *dictLength = len;
+ return Z_OK;
+}
+
+/* ========================================================================= */
int ZEXPORT deflateResetKeep (strm)
z_streamp strm;
{
deflate_state *s;
- if (strm == Z_NULL || strm->state == Z_NULL ||
- strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+ if (deflateStateCheck(strm)) {
return Z_STREAM_ERROR;
}
@@ -410,7 +484,11 @@ int ZEXPORT deflateResetKeep (strm)
if (s->wrap < 0) {
s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
}
- s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+ s->status =
+#ifdef GZIP
+ s->wrap == 2 ? GZIP_STATE :
+#endif
+ s->wrap ? INIT_STATE : BUSY_STATE;
strm->adler =
#ifdef GZIP
s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
@@ -440,8 +518,8 @@ int ZEXPORT deflateSetHeader (strm, head)
z_streamp strm;
gz_headerp head;
{
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
- if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm) || strm->state->wrap != 2)
+ return Z_STREAM_ERROR;
strm->state->gzhead = head;
return Z_OK;
}
@@ -452,7 +530,7 @@ int ZEXPORT deflatePending (strm, pending, bits)
int *bits;
z_streamp strm;
{
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
if (pending != Z_NULL)
*pending = strm->state->pending;
if (bits != Z_NULL)
@@ -469,7 +547,7 @@ int ZEXPORT deflatePrime (strm, bits, value)
deflate_state *s;
int put;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
return Z_BUF_ERROR;
@@ -494,9 +572,8 @@ int ZEXPORT deflateParams(strm, level, strategy)
{
deflate_state *s;
compress_func func;
- int err = Z_OK;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
#ifdef FASTEST
@@ -510,13 +587,22 @@ int ZEXPORT deflateParams(strm, level, strategy)
func = configuration_table[s->level].func;
if ((strategy != s->strategy || func != configuration_table[level].func) &&
- strm->total_in != 0) {
+ s->high_water) {
/* Flush the last buffer: */
- err = deflate(strm, Z_BLOCK);
- if (err == Z_BUF_ERROR && s->pending == 0)
- err = Z_OK;
+ int err = deflate(strm, Z_BLOCK);
+ if (err == Z_STREAM_ERROR)
+ return err;
+ if (strm->avail_out == 0)
+ return Z_BUF_ERROR;
}
if (s->level != level) {
+ if (s->level == 0 && s->matches != 0) {
+ if (s->matches == 1)
+ slide_hash(s);
+ else
+ CLEAR_HASH(s);
+ s->matches = 0;
+ }
s->level = level;
s->max_lazy_match = configuration_table[level].max_lazy;
s->good_match = configuration_table[level].good_length;
@@ -524,7 +610,7 @@ int ZEXPORT deflateParams(strm, level, strategy)
s->max_chain_length = configuration_table[level].max_chain;
}
s->strategy = strategy;
- return err;
+ return Z_OK;
}
/* ========================================================================= */
@@ -537,12 +623,12 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
{
deflate_state *s;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
- s->good_match = good_length;
- s->max_lazy_match = max_lazy;
+ s->good_match = (uInt)good_length;
+ s->max_lazy_match = (uInt)max_lazy;
s->nice_match = nice_length;
- s->max_chain_length = max_chain;
+ s->max_chain_length = (uInt)max_chain;
return Z_OK;
}
@@ -569,14 +655,13 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
{
deflate_state *s;
uLong complen, wraplen;
- Bytef *str;
/* conservative upper bound for compressed data */
complen = sourceLen +
((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
/* if can't get parameters, return conservative bound plus zlib wrapper */
- if (strm == Z_NULL || strm->state == Z_NULL)
+ if (deflateStateCheck(strm))
return complen + 6;
/* compute wrapper length */
@@ -588,9 +673,11 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
case 1: /* zlib wrapper */
wraplen = 6 + (s->strstart ? 4 : 0);
break;
+#ifdef GZIP
case 2: /* gzip wrapper */
wraplen = 18;
if (s->gzhead != Z_NULL) { /* user-supplied gzip header */
+ Bytef *str;
if (s->gzhead->extra != Z_NULL)
wraplen += 2 + s->gzhead->extra_len;
str = s->gzhead->name;
@@ -607,6 +694,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
wraplen += 2;
}
break;
+#endif
default: /* for compiler happiness */
wraplen = 6;
}
@@ -634,10 +722,10 @@ local void putShortMSB (s, b)
}
/* =========================================================================
- * Flush as much pending output as possible. All deflate() output goes
- * through this function so some applications may wish to modify it
- * to avoid allocating a large strm->next_out buffer and copying into it.
- * (See also read_buf()).
+ * Flush as much pending output as possible. All deflate() output, except for
+ * some deflate_stored() output, goes through this function so some
+ * applications may wish to modify it to avoid allocating a large
+ * strm->next_out buffer and copying into it. (See also read_buf()).
*/
local void flush_pending(strm)
z_streamp strm;
@@ -654,13 +742,23 @@ local void flush_pending(strm)
strm->next_out += len;
s->pending_out += len;
strm->total_out += len;
- strm->avail_out -= len;
- s->pending -= len;
+ strm->avail_out -= len;
+ s->pending -= len;
if (s->pending == 0) {
s->pending_out = s->pending_buf;
}
}
+/* ===========================================================================
+ * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1].
+ */
+#define HCRC_UPDATE(beg) \
+ do { \
+ if (s->gzhead->hcrc && s->pending > (beg)) \
+ strm->adler = crc32(strm->adler, s->pending_buf + (beg), \
+ s->pending - (beg)); \
+ } while (0)
+
/* ========================================================================= */
int ZEXPORT deflate (strm, flush)
z_streamp strm;
@@ -669,230 +767,229 @@ int ZEXPORT deflate (strm, flush)
int old_flush; /* value of flush param for previous deflate call */
deflate_state *s;
- if (strm == Z_NULL || strm->state == Z_NULL ||
- flush > Z_BLOCK || flush < 0) {
+ if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) {
return Z_STREAM_ERROR;
}
s = strm->state;
if (strm->next_out == Z_NULL ||
- (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+ (strm->avail_in != 0 && strm->next_in == Z_NULL) ||
(s->status == FINISH_STATE && flush != Z_FINISH)) {
ERR_RETURN(strm, Z_STREAM_ERROR);
}
if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
- s->strm = strm; /* just in case */
old_flush = s->last_flush;
s->last_flush = flush;
+ /* Flush as much pending output as possible */
+ if (s->pending != 0) {
+ flush_pending(strm);
+ if (strm->avail_out == 0) {
+ /* Since avail_out is 0, deflate will be called again with
+ * more output space, but possibly with both pending and
+ * avail_in equal to zero. There won't be anything to do,
+ * but this is not an error situation so make sure we
+ * return OK instead of BUF_ERROR at next call of deflate:
+ */
+ s->last_flush = -1;
+ return Z_OK;
+ }
+
+ /* Make sure there is something to do and avoid duplicate consecutive
+ * flushes. For repeated and useless calls with Z_FINISH, we keep
+ * returning Z_STREAM_END instead of Z_BUF_ERROR.
+ */
+ } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
+ flush != Z_FINISH) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
+ /* User must not provide more input after the first FINISH: */
+ if (s->status == FINISH_STATE && strm->avail_in != 0) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
/* Write the header */
if (s->status == INIT_STATE) {
-#ifdef GZIP
- if (s->wrap == 2) {
- strm->adler = crc32(0L, Z_NULL, 0);
- put_byte(s, 31);
- put_byte(s, 139);
- put_byte(s, 8);
- if (s->gzhead == Z_NULL) {
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, 0);
- put_byte(s, s->level == 9 ? 2 :
- (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
- 4 : 0));
- put_byte(s, OS_CODE);
- s->status = BUSY_STATE;
- }
- else {
- put_byte(s, (s->gzhead->text ? 1 : 0) +
- (s->gzhead->hcrc ? 2 : 0) +
- (s->gzhead->extra == Z_NULL ? 0 : 4) +
- (s->gzhead->name == Z_NULL ? 0 : 8) +
- (s->gzhead->comment == Z_NULL ? 0 : 16)
- );
- put_byte(s, (Byte)(s->gzhead->time & 0xff));
- put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
- put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
- put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
- put_byte(s, s->level == 9 ? 2 :
- (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
- 4 : 0));
- put_byte(s, s->gzhead->os & 0xff);
- if (s->gzhead->extra != Z_NULL) {
- put_byte(s, s->gzhead->extra_len & 0xff);
- put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
- }
- if (s->gzhead->hcrc)
- strm->adler = crc32(strm->adler, s->pending_buf,
- s->pending);
- s->gzindex = 0;
- s->status = EXTRA_STATE;
- }
- }
+ /* zlib header */
+ uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+ uInt level_flags;
+
+ if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+ level_flags = 0;
+ else if (s->level < 6)
+ level_flags = 1;
+ else if (s->level == 6)
+ level_flags = 2;
else
-#endif
- {
- uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
- uInt level_flags;
-
- if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
- level_flags = 0;
- else if (s->level < 6)
- level_flags = 1;
- else if (s->level == 6)
- level_flags = 2;
- else
- level_flags = 3;
- header |= (level_flags << 6);
- if (s->strstart != 0) header |= PRESET_DICT;
- header += 31 - (header % 31);
+ level_flags = 3;
+ header |= (level_flags << 6);
+ if (s->strstart != 0) header |= PRESET_DICT;
+ header += 31 - (header % 31);
+
+ putShortMSB(s, header);
+ /* Save the adler32 of the preset dictionary: */
+ if (s->strstart != 0) {
+ putShortMSB(s, (uInt)(strm->adler >> 16));
+ putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ }
+ strm->adler = adler32(0L, Z_NULL, 0);
+ s->status = BUSY_STATE;
+
+ /* Compression must start with an empty pending buffer */
+ flush_pending(strm);
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
+ }
+ }
+#ifdef GZIP
+ if (s->status == GZIP_STATE) {
+ /* gzip header */
+ strm->adler = crc32(0L, Z_NULL, 0);
+ put_byte(s, 31);
+ put_byte(s, 139);
+ put_byte(s, 8);
+ if (s->gzhead == Z_NULL) {
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, OS_CODE);
s->status = BUSY_STATE;
- putShortMSB(s, header);
- /* Save the adler32 of the preset dictionary: */
- if (s->strstart != 0) {
- putShortMSB(s, (uInt)(strm->adler >> 16));
- putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ /* Compression must start with an empty pending buffer */
+ flush_pending(strm);
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
+ }
+ }
+ else {
+ put_byte(s, (s->gzhead->text ? 1 : 0) +
+ (s->gzhead->hcrc ? 2 : 0) +
+ (s->gzhead->extra == Z_NULL ? 0 : 4) +
+ (s->gzhead->name == Z_NULL ? 0 : 8) +
+ (s->gzhead->comment == Z_NULL ? 0 : 16)
+ );
+ put_byte(s, (Byte)(s->gzhead->time & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, s->gzhead->os & 0xff);
+ if (s->gzhead->extra != Z_NULL) {
+ put_byte(s, s->gzhead->extra_len & 0xff);
+ put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
}
- strm->adler = adler32(0L, Z_NULL, 0);
+ if (s->gzhead->hcrc)
+ strm->adler = crc32(strm->adler, s->pending_buf,
+ s->pending);
+ s->gzindex = 0;
+ s->status = EXTRA_STATE;
}
}
-#ifdef GZIP
if (s->status == EXTRA_STATE) {
if (s->gzhead->extra != Z_NULL) {
- uInt beg = s->pending; /* start of bytes to update crc */
-
- while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
- if (s->pending == s->pending_buf_size) {
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- flush_pending(strm);
- beg = s->pending;
- if (s->pending == s->pending_buf_size)
- break;
+ ulg beg = s->pending; /* start of bytes to update crc */
+ uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex;
+ while (s->pending + left > s->pending_buf_size) {
+ uInt copy = s->pending_buf_size - s->pending;
+ zmemcpy(s->pending_buf + s->pending,
+ s->gzhead->extra + s->gzindex, copy);
+ s->pending = s->pending_buf_size;
+ HCRC_UPDATE(beg);
+ s->gzindex += copy;
+ flush_pending(strm);
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
}
- put_byte(s, s->gzhead->extra[s->gzindex]);
- s->gzindex++;
- }
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- if (s->gzindex == s->gzhead->extra_len) {
- s->gzindex = 0;
- s->status = NAME_STATE;
+ beg = 0;
+ left -= copy;
}
+ zmemcpy(s->pending_buf + s->pending,
+ s->gzhead->extra + s->gzindex, left);
+ s->pending += left;
+ HCRC_UPDATE(beg);
+ s->gzindex = 0;
}
- else
- s->status = NAME_STATE;
+ s->status = NAME_STATE;
}
if (s->status == NAME_STATE) {
if (s->gzhead->name != Z_NULL) {
- uInt beg = s->pending; /* start of bytes to update crc */
+ ulg beg = s->pending; /* start of bytes to update crc */
int val;
-
do {
if (s->pending == s->pending_buf_size) {
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
+ HCRC_UPDATE(beg);
flush_pending(strm);
- beg = s->pending;
- if (s->pending == s->pending_buf_size) {
- val = 1;
- break;
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
}
+ beg = 0;
}
val = s->gzhead->name[s->gzindex++];
put_byte(s, val);
} while (val != 0);
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- if (val == 0) {
- s->gzindex = 0;
- s->status = COMMENT_STATE;
- }
+ HCRC_UPDATE(beg);
+ s->gzindex = 0;
}
- else
- s->status = COMMENT_STATE;
+ s->status = COMMENT_STATE;
}
if (s->status == COMMENT_STATE) {
if (s->gzhead->comment != Z_NULL) {
- uInt beg = s->pending; /* start of bytes to update crc */
+ ulg beg = s->pending; /* start of bytes to update crc */
int val;
-
do {
if (s->pending == s->pending_buf_size) {
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
+ HCRC_UPDATE(beg);
flush_pending(strm);
- beg = s->pending;
- if (s->pending == s->pending_buf_size) {
- val = 1;
- break;
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
}
+ beg = 0;
}
val = s->gzhead->comment[s->gzindex++];
put_byte(s, val);
} while (val != 0);
- if (s->gzhead->hcrc && s->pending > beg)
- strm->adler = crc32(strm->adler, s->pending_buf + beg,
- s->pending - beg);
- if (val == 0)
- s->status = HCRC_STATE;
+ HCRC_UPDATE(beg);
}
- else
- s->status = HCRC_STATE;
+ s->status = HCRC_STATE;
}
if (s->status == HCRC_STATE) {
if (s->gzhead->hcrc) {
- if (s->pending + 2 > s->pending_buf_size)
+ if (s->pending + 2 > s->pending_buf_size) {
flush_pending(strm);
- if (s->pending + 2 <= s->pending_buf_size) {
- put_byte(s, (Byte)(strm->adler & 0xff));
- put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
- strm->adler = crc32(0L, Z_NULL, 0);
- s->status = BUSY_STATE;
+ if (s->pending != 0) {
+ s->last_flush = -1;
+ return Z_OK;
+ }
}
+ put_byte(s, (Byte)(strm->adler & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+ strm->adler = crc32(0L, Z_NULL, 0);
}
- else
- s->status = BUSY_STATE;
- }
-#endif
+ s->status = BUSY_STATE;
- /* Flush as much pending output as possible */
- if (s->pending != 0) {
+ /* Compression must start with an empty pending buffer */
flush_pending(strm);
- if (strm->avail_out == 0) {
- /* Since avail_out is 0, deflate will be called again with
- * more output space, but possibly with both pending and
- * avail_in equal to zero. There won't be anything to do,
- * but this is not an error situation so make sure we
- * return OK instead of BUF_ERROR at next call of deflate:
- */
+ if (s->pending != 0) {
s->last_flush = -1;
return Z_OK;
}
-
- /* Make sure there is something to do and avoid duplicate consecutive
- * flushes. For repeated and useless calls with Z_FINISH, we keep
- * returning Z_STREAM_END instead of Z_BUF_ERROR.
- */
- } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
- flush != Z_FINISH) {
- ERR_RETURN(strm, Z_BUF_ERROR);
- }
-
- /* User must not provide more input after the first FINISH: */
- if (s->status == FINISH_STATE && strm->avail_in != 0) {
- ERR_RETURN(strm, Z_BUF_ERROR);
}
+#endif
/* Start a new block or continue the current one.
*/
@@ -900,9 +997,10 @@ int ZEXPORT deflate (strm, flush)
(flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
block_state bstate;
- bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
- (s->strategy == Z_RLE ? deflate_rle(s, flush) :
- (*(configuration_table[s->level].func))(s, flush));
+ bstate = s->level == 0 ? deflate_stored(s, flush) :
+ s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+ s->strategy == Z_RLE ? deflate_rle(s, flush) :
+ (*(configuration_table[s->level].func))(s, flush);
if (bstate == finish_started || bstate == finish_done) {
s->status = FINISH_STATE;
@@ -944,7 +1042,6 @@ int ZEXPORT deflate (strm, flush)
}
}
}
- Assert(strm->avail_out > 0, "bug2");
if (flush != Z_FINISH) return Z_OK;
if (s->wrap <= 0) return Z_STREAM_END;
@@ -981,18 +1078,9 @@ int ZEXPORT deflateEnd (strm)
{
int status;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
status = strm->state->status;
- if (status != INIT_STATE &&
- status != EXTRA_STATE &&
- status != NAME_STATE &&
- status != COMMENT_STATE &&
- status != HCRC_STATE &&
- status != BUSY_STATE &&
- status != FINISH_STATE) {
- return Z_STREAM_ERROR;
- }
/* Deallocate in reverse order of allocations: */
TRY_FREE(strm, strm->state->pending_buf);
@@ -1023,7 +1111,7 @@ int ZEXPORT deflateCopy (dest, source)
ushf *overlay;
- if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+ if (deflateStateCheck(source) || dest == Z_NULL) {
return Z_STREAM_ERROR;
}
@@ -1073,7 +1161,7 @@ int ZEXPORT deflateCopy (dest, source)
* allocating a large strm->next_in buffer and copying from it.
* (See also flush_pending()).
*/
-local int read_buf(strm, buf, size)
+local unsigned read_buf(strm, buf, size)
z_streamp strm;
Bytef *buf;
unsigned size;
@@ -1097,7 +1185,7 @@ local int read_buf(strm, buf, size)
strm->next_in += len;
strm->total_in += len;
- return (int)len;
+ return len;
}
/* ===========================================================================
@@ -1151,9 +1239,9 @@ local uInt longest_match(s, cur_match)
{
unsigned chain_length = s->max_chain_length;/* max hash chain length */
register Bytef *scan = s->window + s->strstart; /* current string */
- register Bytef *match; /* matched string */
+ register Bytef *match; /* matched string */
register int len; /* length of current match */
- int best_len = s->prev_length; /* best match length so far */
+ int best_len = (int)s->prev_length; /* best match length so far */
int nice_match = s->nice_match; /* stop if match long enough */
IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
s->strstart - (IPos)MAX_DIST(s) : NIL;
@@ -1188,7 +1276,7 @@ local uInt longest_match(s, cur_match)
/* Do not look for matches beyond the end of the input. This is necessary
* to make deflate deterministic.
*/
- if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+ if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead;
Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
@@ -1349,7 +1437,11 @@ local uInt longest_match(s, cur_match)
#endif /* FASTEST */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
/* ===========================================================================
* Check that the match at match_start is indeed a match.
*/
@@ -1375,7 +1467,7 @@ local void check_match(s, start, match, length)
}
#else
# define check_match(s, start, match, length)
-#endif /* DEBUG */
+#endif /* ZLIB_DEBUG */
/* ===========================================================================
* Fill the window when the lookahead becomes insufficient.
@@ -1390,8 +1482,7 @@ local void check_match(s, start, match, length)
local void fill_window(s)
deflate_state *s;
{
- register unsigned n, m;
- register Posf *p;
+ unsigned n;
unsigned more; /* Amount of free space at the end of the window. */
uInt wsize = s->w_size;
@@ -1418,35 +1509,11 @@ local void fill_window(s)
*/
if (s->strstart >= wsize+MAX_DIST(s)) {
- zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+ zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more);
s->match_start -= wsize;
s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
s->block_start -= (long) wsize;
-
- /* Slide the hash table (could be avoided with 32 bit values
- at the expense of memory usage). We slide even when level == 0
- to keep the hash table consistent if we switch back to level > 0
- later. (Using level 0 permanently is not an optimal usage of
- zlib, so we don't care about this pathological case.)
- */
- n = s->hash_size;
- p = &s->head[n];
- do {
- m = *--p;
- *p = (Pos)(m >= wsize ? m-wsize : NIL);
- } while (--n);
-
- n = wsize;
-#ifndef FASTEST
- p = &s->prev[n];
- do {
- m = *--p;
- *p = (Pos)(m >= wsize ? m-wsize : NIL);
- /* If n is not on any hash chain, prev[n] is garbage but
- * its value will never be used.
- */
- } while (--n);
-#endif
+ slide_hash(s);
more += wsize;
}
if (s->strm->avail_in == 0) break;
@@ -1552,70 +1619,199 @@ local void fill_window(s)
if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
}
+/* Maximum stored block length in deflate format (not including header). */
+#define MAX_STORED 65535
+
+/* Minimum of a and b. */
+#define MIN(a, b) ((a) > (b) ? (b) : (a))
+
/* ===========================================================================
* Copy without compression as much as possible from the input stream, return
* the current block state.
- * This function does not insert new strings in the dictionary since
- * uncompressible data is probably not useful. This function is used
- * only for the level=0 compression option.
- * NOTE: this function should be optimized to avoid extra copying from
- * window to pending_buf.
+ *
+ * In case deflateParams() is used to later switch to a non-zero compression
+ * level, s->matches (otherwise unused when storing) keeps track of the number
+ * of hash table slides to perform. If s->matches is 1, then one hash table
+ * slide will be done when switching. If s->matches is 2, the maximum value
+ * allowed here, then the hash table will be cleared, since two or more slides
+ * is the same as a clear.
+ *
+ * deflate_stored() is written to minimize the number of times an input byte is
+ * copied. It is most efficient with large input and output buffers, which
+ * maximizes the opportunites to have a single copy from next_in to next_out.
*/
local block_state deflate_stored(s, flush)
deflate_state *s;
int flush;
{
- /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
- * to pending_buf_size, and each stored block has a 5 byte header:
+ /* Smallest worthy block size when not flushing or finishing. By default
+ * this is 32K. This can be as small as 507 bytes for memLevel == 1. For
+ * large input and output buffers, the stored block size will be larger.
*/
- ulg max_block_size = 0xffff;
- ulg max_start;
-
- if (max_block_size > s->pending_buf_size - 5) {
- max_block_size = s->pending_buf_size - 5;
- }
+ unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size);
- /* Copy as much as possible from input to output: */
- for (;;) {
- /* Fill the window as much as possible: */
- if (s->lookahead <= 1) {
-
- Assert(s->strstart < s->w_size+MAX_DIST(s) ||
- s->block_start >= (long)s->w_size, "slide too late");
+ /* Copy as many min_block or larger stored blocks directly to next_out as
+ * possible. If flushing, copy the remaining available input to next_out as
+ * stored blocks, if there is enough space.
+ */
+ unsigned len, left, have, last = 0;
+ unsigned used = s->strm->avail_in;
+ do {
+ /* Set len to the maximum size block that we can copy directly with the
+ * available input data and output space. Set left to how much of that
+ * would be copied from what's left in the window.
+ */
+ len = MAX_STORED; /* maximum deflate stored block length */
+ have = (s->bi_valid + 42) >> 3; /* number of header bytes */
+ if (s->strm->avail_out < have) /* need room for header */
+ break;
+ /* maximum stored block length that will fit in avail_out: */
+ have = s->strm->avail_out - have;
+ left = s->strstart - s->block_start; /* bytes left in window */
+ if (len > (ulg)left + s->strm->avail_in)
+ len = left + s->strm->avail_in; /* limit len to the input */
+ if (len > have)
+ len = have; /* limit len to the output */
+
+ /* If the stored block would be less than min_block in length, or if
+ * unable to copy all of the available input when flushing, then try
+ * copying to the window and the pending buffer instead. Also don't
+ * write an empty block when flushing -- deflate() does that.
+ */
+ if (len < min_block && ((len == 0 && flush != Z_FINISH) ||
+ flush == Z_NO_FLUSH ||
+ len != left + s->strm->avail_in))
+ break;
- fill_window(s);
- if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+ /* Make a dummy stored block in pending to get the header bytes,
+ * including any pending bits. This also updates the debugging counts.
+ */
+ last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0;
+ _tr_stored_block(s, (char *)0, 0L, last);
+
+ /* Replace the lengths in the dummy stored block with len. */
+ s->pending_buf[s->pending - 4] = len;
+ s->pending_buf[s->pending - 3] = len >> 8;
+ s->pending_buf[s->pending - 2] = ~len;
+ s->pending_buf[s->pending - 1] = ~len >> 8;
+
+ /* Write the stored block header bytes. */
+ flush_pending(s->strm);
+
+#ifdef ZLIB_DEBUG
+ /* Update debugging counts for the data about to be copied. */
+ s->compressed_len += len << 3;
+ s->bits_sent += len << 3;
+#endif
- if (s->lookahead == 0) break; /* flush the current block */
+ /* Copy uncompressed bytes from the window to next_out. */
+ if (left) {
+ if (left > len)
+ left = len;
+ zmemcpy(s->strm->next_out, s->window + s->block_start, left);
+ s->strm->next_out += left;
+ s->strm->avail_out -= left;
+ s->strm->total_out += left;
+ s->block_start += left;
+ len -= left;
}
- Assert(s->block_start >= 0L, "block gone");
-
- s->strstart += s->lookahead;
- s->lookahead = 0;
-
- /* Emit a stored block if pending_buf will be full: */
- max_start = s->block_start + max_block_size;
- if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
- /* strstart == 0 is possible when wraparound on 16-bit machine */
- s->lookahead = (uInt)(s->strstart - max_start);
- s->strstart = (uInt)max_start;
- FLUSH_BLOCK(s, 0);
+
+ /* Copy uncompressed bytes directly from next_in to next_out, updating
+ * the check value.
+ */
+ if (len) {
+ read_buf(s->strm, s->strm->next_out, len);
+ s->strm->next_out += len;
+ s->strm->avail_out -= len;
+ s->strm->total_out += len;
}
- /* Flush if we may have to slide, otherwise block_start may become
- * negative and the data will be gone:
+ } while (last == 0);
+
+ /* Update the sliding window with the last s->w_size bytes of the copied
+ * data, or append all of the copied data to the existing window if less
+ * than s->w_size bytes were copied. Also update the number of bytes to
+ * insert in the hash tables, in the event that deflateParams() switches to
+ * a non-zero compression level.
+ */
+ used -= s->strm->avail_in; /* number of input bytes directly copied */
+ if (used) {
+ /* If any input was used, then no unused input remains in the window,
+ * therefore s->block_start == s->strstart.
*/
- if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
- FLUSH_BLOCK(s, 0);
+ if (used >= s->w_size) { /* supplant the previous history */
+ s->matches = 2; /* clear hash */
+ zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);
+ s->strstart = s->w_size;
}
+ else {
+ if (s->window_size - s->strstart <= used) {
+ /* Slide the window down. */
+ s->strstart -= s->w_size;
+ zmemcpy(s->window, s->window + s->w_size, s->strstart);
+ if (s->matches < 2)
+ s->matches++; /* add a pending slide_hash() */
+ }
+ zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);
+ s->strstart += used;
+ }
+ s->block_start = s->strstart;
+ s->insert += MIN(used, s->w_size - s->insert);
}
- s->insert = 0;
- if (flush == Z_FINISH) {
- FLUSH_BLOCK(s, 1);
+ if (s->high_water < s->strstart)
+ s->high_water = s->strstart;
+
+ /* If the last block was written to next_out, then done. */
+ if (last)
return finish_done;
+
+ /* If flushing and all input has been consumed, then done. */
+ if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
+ s->strm->avail_in == 0 && (long)s->strstart == s->block_start)
+ return block_done;
+
+ /* Fill the window with any remaining input. */
+ have = s->window_size - s->strstart - 1;
+ if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
+ /* Slide the window down. */
+ s->block_start -= s->w_size;
+ s->strstart -= s->w_size;
+ zmemcpy(s->window, s->window + s->w_size, s->strstart);
+ if (s->matches < 2)
+ s->matches++; /* add a pending slide_hash() */
+ have += s->w_size; /* more space now */
}
- if ((long)s->strstart > s->block_start)
- FLUSH_BLOCK(s, 0);
- return block_done;
+ if (have > s->strm->avail_in)
+ have = s->strm->avail_in;
+ if (have) {
+ read_buf(s->strm, s->window + s->strstart, have);
+ s->strstart += have;
+ }
+ if (s->high_water < s->strstart)
+ s->high_water = s->strstart;
+
+ /* There was not enough avail_out to write a complete worthy or flushed
+ * stored block to next_out. Write a stored block to pending instead, if we
+ * have enough input for a worthy block, or if flushing and there is enough
+ * room for the remaining input as a stored block in the pending buffer.
+ */
+ have = (s->bi_valid + 42) >> 3; /* number of header bytes */
+ /* maximum stored block length that will fit in pending: */
+ have = MIN(s->pending_buf_size - have, MAX_STORED);
+ min_block = MIN(have, s->w_size);
+ left = s->strstart - s->block_start;
+ if (left >= min_block ||
+ ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH &&
+ s->strm->avail_in == 0 && left <= have)) {
+ len = MIN(left, have);
+ last = flush == Z_FINISH && s->strm->avail_in == 0 &&
+ len == left ? 1 : 0;
+ _tr_stored_block(s, (charf *)s->window + s->block_start, len, last);
+ s->block_start += len;
+ flush_pending(s->strm);
+ }
+
+ /* We've done all we can with the available input and output. */
+ return last ? finish_started : need_more;
}
/* ===========================================================================
@@ -1892,7 +2088,7 @@ local block_state deflate_rle(s, flush)
prev == *++scan && prev == *++scan &&
prev == *++scan && prev == *++scan &&
scan < strend);
- s->match_length = MAX_MATCH - (int)(strend - scan);
+ s->match_length = MAX_MATCH - (uInt)(strend - scan);
if (s->match_length > s->lookahead)
s->match_length = s->lookahead;
}
diff --git a/contrib/zlib/deflate.h b/contrib/zlib/deflate.h
index ce0299e..23ecdd3 100644
--- a/contrib/zlib/deflate.h
+++ b/contrib/zlib/deflate.h
@@ -1,5 +1,5 @@
/* deflate.h -- internal compression state
- * Copyright (C) 1995-2012 Jean-loup Gailly
+ * Copyright (C) 1995-2016 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -51,13 +51,16 @@
#define Buf_size 16
/* size of bit buffer in bi_buf */
-#define INIT_STATE 42
-#define EXTRA_STATE 69
-#define NAME_STATE 73
-#define COMMENT_STATE 91
-#define HCRC_STATE 103
-#define BUSY_STATE 113
-#define FINISH_STATE 666
+#define INIT_STATE 42 /* zlib header -> BUSY_STATE */
+#ifdef GZIP
+# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */
+#endif
+#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */
+#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */
+#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */
+#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */
+#define BUSY_STATE 113 /* deflate -> FINISH_STATE */
+#define FINISH_STATE 666 /* stream complete */
/* Stream status */
@@ -83,7 +86,7 @@ typedef struct static_tree_desc_s static_tree_desc;
typedef struct tree_desc_s {
ct_data *dyn_tree; /* the dynamic tree */
int max_code; /* largest code with non zero frequency */
- static_tree_desc *stat_desc; /* the corresponding static tree */
+ const static_tree_desc *stat_desc; /* the corresponding static tree */
} FAR tree_desc;
typedef ush Pos;
@@ -100,10 +103,10 @@ typedef struct internal_state {
Bytef *pending_buf; /* output still pending */
ulg pending_buf_size; /* size of pending_buf */
Bytef *pending_out; /* next pending byte to output to the stream */
- uInt pending; /* nb of bytes in the pending buffer */
+ ulg pending; /* nb of bytes in the pending buffer */
int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
gz_headerp gzhead; /* gzip header information to write */
- uInt gzindex; /* where in extra, name, or comment */
+ ulg gzindex; /* where in extra, name, or comment */
Byte method; /* can only be DEFLATED */
int last_flush; /* value of flush param for previous deflate call */
@@ -249,7 +252,7 @@ typedef struct internal_state {
uInt matches; /* number of string matches in current block */
uInt insert; /* bytes at end of window left to insert */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
ulg compressed_len; /* total bit length of compressed file mod 2^32 */
ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
#endif
@@ -275,7 +278,7 @@ typedef struct internal_state {
/* Output a byte on the stream.
* IN assertion: there is enough room in pending_buf.
*/
-#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);}
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
@@ -309,7 +312,7 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
* used.
*/
-#ifndef DEBUG
+#ifndef ZLIB_DEBUG
/* Inline versions of _tr_tally for speed: */
#if defined(GEN_TREES_H) || !defined(STDC)
@@ -328,8 +331,8 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
flush = (s->last_lit == s->lit_bufsize-1); \
}
# define _tr_tally_dist(s, distance, length, flush) \
- { uch len = (length); \
- ush dist = (distance); \
+ { uch len = (uch)(length); \
+ ush dist = (ush)(distance); \
s->d_buf[s->last_lit] = dist; \
s->l_buf[s->last_lit++] = len; \
dist--; \
diff --git a/contrib/zlib/gzguts.h b/contrib/zlib/gzguts.h
index d87659d..990a4d2 100644
--- a/contrib/zlib/gzguts.h
+++ b/contrib/zlib/gzguts.h
@@ -1,5 +1,5 @@
/* gzguts.h -- zlib internal header definitions for gz* operations
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -25,6 +25,10 @@
# include <stdlib.h>
# include <limits.h>
#endif
+
+#ifndef _POSIX_SOURCE
+# define _POSIX_SOURCE
+#endif
#include <fcntl.h>
#ifdef _WIN32
@@ -35,6 +39,10 @@
# include <io.h>
#endif
+#if defined(_WIN32) || defined(__CYGWIN__)
+# define WIDECHAR
+#endif
+
#ifdef WINAPI_FAMILY
# define open _open
# define read _read
@@ -95,18 +103,19 @@
# endif
#endif
-/* unlike snprintf (which is required in C99, yet still not supported by
- Microsoft more than a decade later!), _snprintf does not guarantee null
- termination of the result -- however this is only used in gzlib.c where
+/* unlike snprintf (which is required in C99), _snprintf does not guarantee
+ null termination of the result -- however this is only used in gzlib.c where
the result is assured to fit in the space provided */
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && _MSC_VER < 1900
# define snprintf _snprintf
#endif
#ifndef local
# define local static
#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
+/* since "static" is used to mean two completely different things in C, we
+ define "local" for the non-static meaning of "static", for readability
+ (compile with -Dlocal if your debugger can't find static symbols) */
/* gz* functions always use library allocation functions */
#ifndef STDC
@@ -170,7 +179,7 @@ typedef struct {
char *path; /* path or fd for error messages */
unsigned size; /* buffer size, zero if not allocated yet */
unsigned want; /* requested buffer size, default is GZBUFSIZE */
- unsigned char *in; /* input buffer */
+ unsigned char *in; /* input buffer (double-sized when writing) */
unsigned char *out; /* output buffer (double-sized when reading) */
int direct; /* 0 if processing gzip, 1 if transparent */
/* just for reading */
diff --git a/contrib/zlib/gzlib.c b/contrib/zlib/gzlib.c
index d8dbb7e..b4cb5e4 100644
--- a/contrib/zlib/gzlib.c
+++ b/contrib/zlib/gzlib.c
@@ -1,5 +1,5 @@
/* gzlib.c -- zlib functions common to reading and writing gzip files
- * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -8,7 +8,7 @@
#include "gzguts.h"
#include "zutil.h"
-#if defined(_WIN32) && !defined(__BORLANDC__)
+#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__)
# define LSEEK _lseeki64
#else
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
@@ -97,7 +97,7 @@ local gzFile gz_open(path, fd, mode)
const char *mode;
{
gz_statep state;
- size_t len;
+ z_size_t len;
int oflag;
#ifdef O_CLOEXEC
int cloexec = 0;
@@ -191,10 +191,10 @@ local gzFile gz_open(path, fd, mode)
}
/* save the path name for error messages */
-#ifdef _WIN32
+#ifdef WIDECHAR
if (fd == -2) {
len = wcstombs(NULL, path, 0);
- if (len == (size_t)-1)
+ if (len == (z_size_t)-1)
len = 0;
}
else
@@ -205,7 +205,7 @@ local gzFile gz_open(path, fd, mode)
free(state);
return NULL;
}
-#ifdef _WIN32
+#ifdef WIDECHAR
if (fd == -2)
if (len)
wcstombs(state->path, path, len + 1);
@@ -214,7 +214,7 @@ local gzFile gz_open(path, fd, mode)
else
#endif
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(state->path, len + 1, "%s", (const char *)path);
+ (void)snprintf(state->path, len + 1, "%s", (const char *)path);
#else
strcpy(state->path, path);
#endif
@@ -242,7 +242,7 @@ local gzFile gz_open(path, fd, mode)
/* open the file with the appropriate flags (or just use fd) */
state->fd = fd > -1 ? fd : (
-#ifdef _WIN32
+#ifdef WIDECHAR
fd == -2 ? _wopen(path, oflag, 0666) :
#endif
open((const char *)path, oflag, 0666));
@@ -251,8 +251,10 @@ local gzFile gz_open(path, fd, mode)
free(state);
return NULL;
}
- if (state->mode == GZ_APPEND)
+ if (state->mode == GZ_APPEND) {
+ LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */
state->mode = GZ_WRITE; /* simplify later checks */
+ }
/* save the current position for rewinding (only if reading) */
if (state->mode == GZ_READ) {
@@ -294,7 +296,7 @@ gzFile ZEXPORT gzdopen(fd, mode)
if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
return NULL;
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
+ (void)snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd);
#else
sprintf(path, "<fd:%d>", fd); /* for debugging */
#endif
@@ -304,7 +306,7 @@ gzFile ZEXPORT gzdopen(fd, mode)
}
/* -- see zlib.h -- */
-#ifdef _WIN32
+#ifdef WIDECHAR
gzFile ZEXPORT gzopen_w(path, mode)
const wchar_t *path;
const char *mode;
@@ -332,6 +334,8 @@ int ZEXPORT gzbuffer(file, size)
return -1;
/* check and set requested size */
+ if ((size << 1) < size)
+ return -1; /* need to be able to double it */
if (size < 2)
size = 2; /* need two bytes to check magic header */
state->want = size;
@@ -607,14 +611,13 @@ void ZLIB_INTERNAL gz_error(state, err, msg)
return;
}
#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
- "%s%s%s", state->path, ": ", msg);
+ (void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
+ "%s%s%s", state->path, ": ", msg);
#else
strcpy(state->msg, state->path);
strcat(state->msg, ": ");
strcat(state->msg, msg);
#endif
- return;
}
#ifndef INT_MAX
diff --git a/contrib/zlib/gzread.c b/contrib/zlib/gzread.c
index a8292ea..1ba184f 100644
--- a/contrib/zlib/gzread.c
+++ b/contrib/zlib/gzread.c
@@ -1,5 +1,5 @@
/* gzread.c -- zlib functions for reading gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -15,6 +15,7 @@ local int gz_look OF((gz_statep));
local int gz_decomp OF((gz_statep));
local int gz_fetch OF((gz_statep));
local int gz_skip OF((gz_statep, z_off64_t));
+local z_size_t gz_read OF((gz_statep, voidp, z_size_t));
/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
state->fd, and update state->eof, state->err, and state->msg as appropriate.
@@ -27,13 +28,17 @@ local int gz_load(state, buf, len, have)
unsigned *have;
{
int ret;
+ unsigned get, max = ((unsigned)-1 >> 2) + 1;
*have = 0;
do {
- ret = read(state->fd, buf + *have, len - *have);
+ get = len - *have;
+ if (get > max)
+ get = max;
+ ret = read(state->fd, buf + *have, get);
if (ret <= 0)
break;
- *have += ret;
+ *have += (unsigned)ret;
} while (*have < len);
if (ret < 0) {
gz_error(state, Z_ERRNO, zstrerror());
@@ -97,10 +102,8 @@ local int gz_look(state)
state->in = (unsigned char *)malloc(state->want);
state->out = (unsigned char *)malloc(state->want << 1);
if (state->in == NULL || state->out == NULL) {
- if (state->out != NULL)
- free(state->out);
- if (state->in != NULL)
- free(state->in);
+ free(state->out);
+ free(state->in);
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
@@ -287,33 +290,17 @@ local int gz_skip(state, len)
return 0;
}
-/* -- see zlib.h -- */
-int ZEXPORT gzread(file, buf, len)
- gzFile file;
+/* Read len bytes into buf from file, or less than len up to the end of the
+ input. Return the number of bytes read. If zero is returned, either the
+ end of file was reached, or there was an error. state->err must be
+ consulted in that case to determine which. */
+local z_size_t gz_read(state, buf, len)
+ gz_statep state;
voidp buf;
- unsigned len;
+ z_size_t len;
{
- unsigned got, n;
- gz_statep state;
- z_streamp strm;
-
- /* get internal structure */
- if (file == NULL)
- return -1;
- state = (gz_statep)file;
- strm = &(state->strm);
-
- /* check that we're reading and that there's no (serious) error */
- if (state->mode != GZ_READ ||
- (state->err != Z_OK && state->err != Z_BUF_ERROR))
- return -1;
-
- /* since an int is returned, make sure len fits in one, otherwise return
- with an error (this avoids the flaw in the interface) */
- if ((int)len < 0) {
- gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
- return -1;
- }
+ z_size_t got;
+ unsigned n;
/* if len is zero, avoid unnecessary operations */
if (len == 0)
@@ -323,32 +310,38 @@ int ZEXPORT gzread(file, buf, len)
if (state->seek) {
state->seek = 0;
if (gz_skip(state, state->skip) == -1)
- return -1;
+ return 0;
}
/* get len bytes to buf, or less than len if at the end */
got = 0;
do {
+ /* set n to the maximum amount of len that fits in an unsigned int */
+ n = -1;
+ if (n > len)
+ n = len;
+
/* first just try copying data from the output buffer */
if (state->x.have) {
- n = state->x.have > len ? len : state->x.have;
+ if (state->x.have < n)
+ n = state->x.have;
memcpy(buf, state->x.next, n);
state->x.next += n;
state->x.have -= n;
}
/* output buffer empty -- return if we're at the end of the input */
- else if (state->eof && strm->avail_in == 0) {
+ else if (state->eof && state->strm.avail_in == 0) {
state->past = 1; /* tried to read past end */
break;
}
/* need output data -- for small len or new stream load up our output
buffer */
- else if (state->how == LOOK || len < (state->size << 1)) {
+ else if (state->how == LOOK || n < (state->size << 1)) {
/* get more output, looking for header if required */
if (gz_fetch(state) == -1)
- return -1;
+ return 0;
continue; /* no progress yet -- go back to copy above */
/* the copy above assures that we will leave with space in the
output buffer, allowing at least one gzungetc() to succeed */
@@ -356,16 +349,16 @@ int ZEXPORT gzread(file, buf, len)
/* large len -- read directly into user buffer */
else if (state->how == COPY) { /* read directly */
- if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
- return -1;
+ if (gz_load(state, (unsigned char *)buf, n, &n) == -1)
+ return 0;
}
/* large len -- decompress directly into user buffer */
else { /* state->how == GZIP */
- strm->avail_out = len;
- strm->next_out = (unsigned char *)buf;
+ state->strm.avail_out = n;
+ state->strm.next_out = (unsigned char *)buf;
if (gz_decomp(state) == -1)
- return -1;
+ return 0;
n = state->x.have;
state->x.have = 0;
}
@@ -377,8 +370,75 @@ int ZEXPORT gzread(file, buf, len)
state->x.pos += n;
} while (len);
- /* return number of bytes read into user buffer (will fit in int) */
- return (int)got;
+ /* return number of bytes read into user buffer */
+ return got;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzread(file, buf, len)
+ gzFile file;
+ voidp buf;
+ unsigned len;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids a flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_STREAM_ERROR, "request does not fit in an int");
+ return -1;
+ }
+
+ /* read len or fewer bytes to buf */
+ len = gz_read(state, buf, len);
+
+ /* check for an error */
+ if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR)
+ return -1;
+
+ /* return the number of bytes read (this is assured to fit in an int) */
+ return (int)len;
+}
+
+/* -- see zlib.h -- */
+z_size_t ZEXPORT gzfread(buf, size, nitems, file)
+ voidp buf;
+ z_size_t size;
+ z_size_t nitems;
+ gzFile file;
+{
+ z_size_t len;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return 0;
+
+ /* compute bytes to read -- error on overflow */
+ len = nitems * size;
+ if (size && len / size != nitems) {
+ gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
+ return 0;
+ }
+
+ /* read len or fewer bytes to buf, return the number of full items read */
+ return len ? gz_read(state, buf, len) / size : 0;
}
/* -- see zlib.h -- */
@@ -411,8 +471,8 @@ int ZEXPORT gzgetc(file)
return *(state->x.next)++;
}
- /* nothing there -- try gzread() */
- ret = gzread(file, buf, 1);
+ /* nothing there -- try gz_read() */
+ ret = gz_read(state, buf, 1);
return ret < 1 ? -1 : buf[0];
}
@@ -454,7 +514,7 @@ int ZEXPORT gzungetc(c, file)
if (state->x.have == 0) {
state->x.have = 1;
state->x.next = state->out + (state->size << 1) - 1;
- state->x.next[0] = c;
+ state->x.next[0] = (unsigned char)c;
state->x.pos--;
state->past = 0;
return c;
@@ -476,7 +536,7 @@ int ZEXPORT gzungetc(c, file)
}
state->x.have++;
state->x.next--;
- state->x.next[0] = c;
+ state->x.next[0] = (unsigned char)c;
state->x.pos--;
state->past = 0;
return c;
diff --git a/contrib/zlib/gzwrite.c b/contrib/zlib/gzwrite.c
index 99cb3c2..8b38834 100644
--- a/contrib/zlib/gzwrite.c
+++ b/contrib/zlib/gzwrite.c
@@ -1,5 +1,5 @@
/* gzwrite.c -- zlib functions for writing gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * Copyright (C) 2004-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -12,17 +12,19 @@
local int gz_init OF((gz_statep));
local int gz_comp OF((gz_statep, int));
local int gz_zero OF((gz_statep, z_off64_t));
+local z_size_t gz_write OF((gz_statep, voidpc, z_size_t));
/* Initialize state for writing a gzip file. Mark initialization by setting
- state->size to non-zero. Return -1 on failure or 0 on success. */
+ state->size to non-zero. Return -1 on a memory allocation failure, or 0 on
+ success. */
local int gz_init(state)
gz_statep state;
{
int ret;
z_streamp strm = &(state->strm);
- /* allocate input buffer */
- state->in = (unsigned char *)malloc(state->want);
+ /* allocate input buffer (double size for gzprintf) */
+ state->in = (unsigned char *)malloc(state->want << 1);
if (state->in == NULL) {
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
@@ -50,6 +52,7 @@ local int gz_init(state)
gz_error(state, Z_MEM_ERROR, "out of memory");
return -1;
}
+ strm->next_in = NULL;
}
/* mark state as initialized */
@@ -65,17 +68,17 @@ local int gz_init(state)
}
/* Compress whatever is at avail_in and next_in and write to the output file.
- Return -1 if there is an error writing to the output file, otherwise 0.
- flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH,
- then the deflate() state is reset to start a new gzip stream. If gz->direct
- is true, then simply write to the output file without compressing, and
- ignore flush. */
+ Return -1 if there is an error writing to the output file or if gz_init()
+ fails to allocate memory, otherwise 0. flush is assumed to be a valid
+ deflate() flush value. If flush is Z_FINISH, then the deflate() state is
+ reset to start a new gzip stream. If gz->direct is true, then simply write
+ to the output file without compressing, and ignore flush. */
local int gz_comp(state, flush)
gz_statep state;
int flush;
{
- int ret, got;
- unsigned have;
+ int ret, writ;
+ unsigned have, put, max = ((unsigned)-1 >> 2) + 1;
z_streamp strm = &(state->strm);
/* allocate memory if this is the first time through */
@@ -84,12 +87,16 @@ local int gz_comp(state, flush)
/* write directly if requested */
if (state->direct) {
- got = write(state->fd, strm->next_in, strm->avail_in);
- if (got < 0 || (unsigned)got != strm->avail_in) {
- gz_error(state, Z_ERRNO, zstrerror());
- return -1;
+ while (strm->avail_in) {
+ put = strm->avail_in > max ? max : strm->avail_in;
+ writ = write(state->fd, strm->next_in, put);
+ if (writ < 0) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ strm->avail_in -= (unsigned)writ;
+ strm->next_in += writ;
}
- strm->avail_in = 0;
return 0;
}
@@ -100,17 +107,21 @@ local int gz_comp(state, flush)
doing Z_FINISH then don't write until we get to Z_STREAM_END */
if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
(flush != Z_FINISH || ret == Z_STREAM_END))) {
- have = (unsigned)(strm->next_out - state->x.next);
- if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
- (unsigned)got != have)) {
- gz_error(state, Z_ERRNO, zstrerror());
- return -1;
+ while (strm->next_out > state->x.next) {
+ put = strm->next_out - state->x.next > (int)max ? max :
+ (unsigned)(strm->next_out - state->x.next);
+ writ = write(state->fd, state->x.next, put);
+ if (writ < 0) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ state->x.next += writ;
}
if (strm->avail_out == 0) {
strm->avail_out = state->size;
strm->next_out = state->out;
+ state->x.next = state->out;
}
- state->x.next = strm->next_out;
}
/* compress */
@@ -132,7 +143,8 @@ local int gz_comp(state, flush)
return 0;
}
-/* Compress len zeros to output. Return -1 on error, 0 on success. */
+/* Compress len zeros to output. Return -1 on a write error or memory
+ allocation failure by gz_comp(), or 0 on success. */
local int gz_zero(state, len)
gz_statep state;
z_off64_t len;
@@ -164,32 +176,14 @@ local int gz_zero(state, len)
return 0;
}
-/* -- see zlib.h -- */
-int ZEXPORT gzwrite(file, buf, len)
- gzFile file;
+/* Write len bytes from buf to file. Return the number of bytes written. If
+ the returned value is less than len, then there was an error. */
+local z_size_t gz_write(state, buf, len)
+ gz_statep state;
voidpc buf;
- unsigned len;
+ z_size_t len;
{
- unsigned put = len;
- gz_statep state;
- z_streamp strm;
-
- /* get internal structure */
- if (file == NULL)
- return 0;
- state = (gz_statep)file;
- strm = &(state->strm);
-
- /* check that we're writing and that there's no error */
- if (state->mode != GZ_WRITE || state->err != Z_OK)
- return 0;
-
- /* since an int is returned, make sure len fits in one, otherwise return
- with an error (this avoids the flaw in the interface) */
- if ((int)len < 0) {
- gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
- return 0;
- }
+ z_size_t put = len;
/* if len is zero, avoid unnecessary operations */
if (len == 0)
@@ -212,14 +206,15 @@ int ZEXPORT gzwrite(file, buf, len)
do {
unsigned have, copy;
- if (strm->avail_in == 0)
- strm->next_in = state->in;
- have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+ if (state->strm.avail_in == 0)
+ state->strm.next_in = state->in;
+ have = (unsigned)((state->strm.next_in + state->strm.avail_in) -
+ state->in);
copy = state->size - have;
if (copy > len)
copy = len;
memcpy(state->in + have, buf, copy);
- strm->avail_in += copy;
+ state->strm.avail_in += copy;
state->x.pos += copy;
buf = (const char *)buf + copy;
len -= copy;
@@ -229,19 +224,83 @@ int ZEXPORT gzwrite(file, buf, len)
}
else {
/* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
return 0;
/* directly compress user buffer to file */
- strm->avail_in = len;
- strm->next_in = (z_const Bytef *)buf;
- state->x.pos += len;
- if (gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
+ state->strm.next_in = (z_const Bytef *)buf;
+ do {
+ unsigned n = (unsigned)-1;
+ if (n > len)
+ n = len;
+ state->strm.avail_in = n;
+ state->x.pos += n;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ len -= n;
+ } while (len);
+ }
+
+ /* input was all buffered or compressed */
+ return put;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzwrite(file, buf, len)
+ gzFile file;
+ voidpc buf;
+ unsigned len;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids a flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return 0;
+ }
+
+ /* write len bytes from buf (the return value will fit in an int) */
+ return (int)gz_write(state, buf, len);
+}
+
+/* -- see zlib.h -- */
+z_size_t ZEXPORT gzfwrite(buf, size, nitems, file)
+ voidpc buf;
+ z_size_t size;
+ z_size_t nitems;
+ gzFile file;
+{
+ z_size_t len;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* compute bytes to read -- error on overflow */
+ len = nitems * size;
+ if (size && len / size != nitems) {
+ gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
+ return 0;
}
- /* input was all buffered or compressed (put will fit in int) */
- return (int)put;
+ /* write len bytes to buf, return the number of full items written */
+ return len ? gz_write(state, buf, len) / size : 0;
}
/* -- see zlib.h -- */
@@ -278,7 +337,7 @@ int ZEXPORT gzputc(file, c)
strm->next_in = state->in;
have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
if (have < state->size) {
- state->in[have] = c;
+ state->in[have] = (unsigned char)c;
strm->avail_in++;
state->x.pos++;
return c & 0xff;
@@ -286,8 +345,8 @@ int ZEXPORT gzputc(file, c)
}
/* no room in buffer or not initialized, use gz_write() */
- buf[0] = c;
- if (gzwrite(file, buf, 1) != 1)
+ buf[0] = (unsigned char)c;
+ if (gz_write(state, buf, 1) != 1)
return -1;
return c & 0xff;
}
@@ -298,11 +357,21 @@ int ZEXPORT gzputs(file, str)
const char *str;
{
int ret;
- unsigned len;
+ z_size_t len;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return -1;
/* write string */
- len = (unsigned)strlen(str);
- ret = gzwrite(file, str, len);
+ len = strlen(str);
+ ret = gz_write(state, str, len);
return ret == 0 && len != 0 ? -1 : ret;
}
@@ -312,63 +381,73 @@ int ZEXPORT gzputs(file, str)
/* -- see zlib.h -- */
int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
{
- int size, len;
+ int len;
+ unsigned left;
+ char *next;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
- return -1;
+ return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
- return 0;
+ return Z_STREAM_ERROR;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
- return 0;
+ return state->err;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return 0;
+ return state->err;
}
- /* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
-
- /* do the printf() into the input buffer, put length in len */
- size = (int)(state->size);
- state->in[size - 1] = 0;
+ /* do the printf() into the input buffer, put length in len -- the input
+ buffer is double-sized just for this function, so there is guaranteed to
+ be state->size bytes available after the current contents */
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in);
+ next[state->size - 1] = 0;
#ifdef NO_vsnprintf
# ifdef HAS_vsprintf_void
- (void)vsprintf((char *)(state->in), format, va);
- for (len = 0; len < size; len++)
- if (state->in[len] == 0) break;
+ (void)vsprintf(next, format, va);
+ for (len = 0; len < state->size; len++)
+ if (next[len] == 0) break;
# else
- len = vsprintf((char *)(state->in), format, va);
+ len = vsprintf(next, format, va);
# endif
#else
# ifdef HAS_vsnprintf_void
- (void)vsnprintf((char *)(state->in), size, format, va);
- len = strlen((char *)(state->in));
+ (void)vsnprintf(next, state->size, format, va);
+ len = strlen(next);
# else
- len = vsnprintf((char *)(state->in), size, format, va);
+ len = vsnprintf(next, state->size, format, va);
# endif
#endif
/* check that printf() results fit in buffer */
- if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0)
return 0;
- /* update buffer and position, defer compression until needed */
- strm->avail_in = (unsigned)len;
- strm->next_in = state->in;
+ /* update buffer and position, compress first half if past that */
+ strm->avail_in += (unsigned)len;
state->x.pos += len;
+ if (strm->avail_in >= state->size) {
+ left = strm->avail_in - state->size;
+ strm->avail_in = state->size;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return state->err;
+ memcpy(state->in, state->in + state->size, left);
+ strm->next_in = state->in;
+ strm->avail_in = left;
+ }
return len;
}
@@ -393,73 +472,82 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
{
- int size, len;
+ unsigned len, left;
+ char *next;
gz_statep state;
z_streamp strm;
/* get internal structure */
if (file == NULL)
- return -1;
+ return Z_STREAM_ERROR;
state = (gz_statep)file;
strm = &(state->strm);
/* check that can really pass pointer in ints */
if (sizeof(int) != sizeof(void *))
- return 0;
+ return Z_STREAM_ERROR;
/* check that we're writing and that there's no error */
if (state->mode != GZ_WRITE || state->err != Z_OK)
- return 0;
+ return Z_STREAM_ERROR;
/* make sure we have some buffer space */
if (state->size == 0 && gz_init(state) == -1)
- return 0;
+ return state->error;
/* check for seek request */
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return 0;
+ return state->error;
}
- /* consume whatever's left in the input buffer */
- if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
- return 0;
-
- /* do the printf() into the input buffer, put length in len */
- size = (int)(state->size);
- state->in[size - 1] = 0;
+ /* do the printf() into the input buffer, put length in len -- the input
+ buffer is double-sized just for this function, so there is guaranteed to
+ be state->size bytes available after the current contents */
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ next = (char *)(strm->next_in + strm->avail_in);
+ next[state->size - 1] = 0;
#ifdef NO_snprintf
# ifdef HAS_sprintf_void
- sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
- a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12,
+ a13, a14, a15, a16, a17, a18, a19, a20);
for (len = 0; len < size; len++)
- if (state->in[len] == 0) break;
+ if (next[len] == 0)
+ break;
# else
- len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
- a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,
+ a12, a13, a14, a15, a16, a17, a18, a19, a20);
# endif
#else
# ifdef HAS_snprintf_void
- snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
- a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
- len = strlen((char *)(state->in));
+ snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9,
+ a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = strlen(next);
# else
- len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
- a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
- a19, a20);
+ len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
# endif
#endif
/* check that printf() results fit in buffer */
- if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ if (len == 0 || len >= state->size || next[state->size - 1] != 0)
return 0;
- /* update buffer and position, defer compression until needed */
- strm->avail_in = (unsigned)len;
- strm->next_in = state->in;
+ /* update buffer and position, compress first half if past that */
+ strm->avail_in += len;
state->x.pos += len;
- return len;
+ if (strm->avail_in >= state->size) {
+ left = strm->avail_in - state->size;
+ strm->avail_in = state->size;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return state->err;
+ memcpy(state->in, state->in + state->size, left);
+ strm->next_in = state->in;
+ strm->avail_in = left;
+ }
+ return (int)len;
}
#endif
@@ -473,7 +561,7 @@ int ZEXPORT gzflush(file, flush)
/* get internal structure */
if (file == NULL)
- return -1;
+ return Z_STREAM_ERROR;
state = (gz_statep)file;
/* check that we're writing and that there's no error */
@@ -488,11 +576,11 @@ int ZEXPORT gzflush(file, flush)
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return -1;
+ return state->err;
}
/* compress remaining data with requested flush */
- gz_comp(state, flush);
+ (void)gz_comp(state, flush);
return state->err;
}
@@ -523,13 +611,13 @@ int ZEXPORT gzsetparams(file, level, strategy)
if (state->seek) {
state->seek = 0;
if (gz_zero(state, state->skip) == -1)
- return -1;
+ return state->err;
}
/* change compression parameters for subsequent input */
if (state->size) {
/* flush previous input with previous parameters before changing */
- if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
+ if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1)
return state->err;
deflateParams(strm, level, strategy);
}
diff --git a/contrib/zlib/infback.c b/contrib/zlib/infback.c
index f3833c2..59679ec 100644
--- a/contrib/zlib/infback.c
+++ b/contrib/zlib/infback.c
@@ -1,5 +1,5 @@
/* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2011 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -61,7 +61,7 @@ int stream_size;
Tracev((stderr, "inflate: allocated\n"));
strm->state = (struct internal_state FAR *)state;
state->dmax = 32768U;
- state->wbits = windowBits;
+ state->wbits = (uInt)windowBits;
state->wsize = 1U << windowBits;
state->window = window;
state->wnext = 0;
diff --git a/contrib/zlib/inffast.c b/contrib/zlib/inffast.c
index bda59ce..0dbd1db 100644
--- a/contrib/zlib/inffast.c
+++ b/contrib/zlib/inffast.c
@@ -1,5 +1,5 @@
/* inffast.c -- fast decoding
- * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
+ * Copyright (C) 1995-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -8,26 +8,9 @@
#include "inflate.h"
#include "inffast.h"
-#ifndef ASMINF
-
-/* Allow machine dependent optimization for post-increment or pre-increment.
- Based on testing to date,
- Pre-increment preferred for:
- - PowerPC G3 (Adler)
- - MIPS R5000 (Randers-Pehrson)
- Post-increment preferred for:
- - none
- No measurable difference:
- - Pentium III (Anderson)
- - M68060 (Nikl)
- */
-#ifdef POSTINC
-# define OFF 0
-# define PUP(a) *(a)++
+#ifdef ASMINF
+# pragma message("Assembler code may have bugs -- use at your own risk")
#else
-# define OFF 1
-# define PUP(a) *++(a)
-#endif
/*
Decode literal, length, and distance codes and write out the resulting
@@ -96,9 +79,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
/* copy state to local variables */
state = (struct inflate_state FAR *)strm->state;
- in = strm->next_in - OFF;
+ in = strm->next_in;
last = in + (strm->avail_in - 5);
- out = strm->next_out - OFF;
+ out = strm->next_out;
beg = out - (start - strm->avail_out);
end = out + (strm->avail_out - 257);
#ifdef INFLATE_STRICT
@@ -119,9 +102,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
input data or output space */
do {
if (bits < 15) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
here = lcode[hold & lmask];
@@ -134,14 +117,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
"inflate: literal '%c'\n" :
"inflate: literal 0x%02x\n", here.val));
- PUP(out) = (unsigned char)(here.val);
+ *out++ = (unsigned char)(here.val);
}
else if (op & 16) { /* length base */
len = (unsigned)(here.val);
op &= 15; /* number of extra bits */
if (op) {
if (bits < op) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
len += (unsigned)hold & ((1U << op) - 1);
@@ -150,9 +133,9 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
}
Tracevv((stderr, "inflate: length %u\n", len));
if (bits < 15) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
here = dcode[hold & dmask];
@@ -165,10 +148,10 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
dist = (unsigned)(here.val);
op &= 15; /* number of extra bits */
if (bits < op) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
if (bits < op) {
- hold += (unsigned long)(PUP(in)) << bits;
+ hold += (unsigned long)(*in++) << bits;
bits += 8;
}
}
@@ -196,30 +179,30 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
if (len <= op - whave) {
do {
- PUP(out) = 0;
+ *out++ = 0;
} while (--len);
continue;
}
len -= op - whave;
do {
- PUP(out) = 0;
+ *out++ = 0;
} while (--op > whave);
if (op == 0) {
from = out - dist;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--len);
continue;
}
#endif
}
- from = window - OFF;
+ from = window;
if (wnext == 0) { /* very common case */
from += wsize - op;
if (op < len) { /* some from window */
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
from = out - dist; /* rest from output */
}
@@ -230,14 +213,14 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
if (op < len) { /* some from end of window */
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
- from = window - OFF;
+ from = window;
if (wnext < len) { /* some from start of window */
op = wnext;
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
from = out - dist; /* rest from output */
}
@@ -248,35 +231,35 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
if (op < len) { /* some from window */
len -= op;
do {
- PUP(out) = PUP(from);
+ *out++ = *from++;
} while (--op);
from = out - dist; /* rest from output */
}
}
while (len > 2) {
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
+ *out++ = *from++;
+ *out++ = *from++;
+ *out++ = *from++;
len -= 3;
}
if (len) {
- PUP(out) = PUP(from);
+ *out++ = *from++;
if (len > 1)
- PUP(out) = PUP(from);
+ *out++ = *from++;
}
}
else {
from = out - dist; /* copy direct from output */
do { /* minimum length is three */
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
- PUP(out) = PUP(from);
+ *out++ = *from++;
+ *out++ = *from++;
+ *out++ = *from++;
len -= 3;
} while (len > 2);
if (len) {
- PUP(out) = PUP(from);
+ *out++ = *from++;
if (len > 1)
- PUP(out) = PUP(from);
+ *out++ = *from++;
}
}
}
@@ -313,8 +296,8 @@ unsigned start; /* inflate()'s starting value for strm->avail_out */
hold &= (1U << bits) - 1;
/* update state and return */
- strm->next_in = in + OFF;
- strm->next_out = out + OFF;
+ strm->next_in = in;
+ strm->next_out = out;
strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));
diff --git a/contrib/zlib/inflate.c b/contrib/zlib/inflate.c
index b51a8a5..ac333e8 100644
--- a/contrib/zlib/inflate.c
+++ b/contrib/zlib/inflate.c
@@ -1,5 +1,5 @@
/* inflate.c -- zlib decompression
- * Copyright (C) 1995-2012 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -92,6 +92,7 @@
#endif
/* function prototypes */
+local int inflateStateCheck OF((z_streamp strm));
local void fixedtables OF((struct inflate_state FAR *state));
local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
unsigned copy));
@@ -101,12 +102,26 @@ local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
unsigned len));
+local int inflateStateCheck(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (strm == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
+ return 1;
+ state = (struct inflate_state FAR *)strm->state;
+ if (state == Z_NULL || state->strm != strm ||
+ state->mode < HEAD || state->mode > SYNC)
+ return 1;
+ return 0;
+}
+
int ZEXPORT inflateResetKeep(strm)
z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
strm->total_in = strm->total_out = state->total = 0;
strm->msg = Z_NULL;
@@ -131,7 +146,7 @@ z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
state->wsize = 0;
state->whave = 0;
@@ -147,7 +162,7 @@ int windowBits;
struct inflate_state FAR *state;
/* get the state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
/* extract wrap request from windowBits parameter */
@@ -156,7 +171,7 @@ int windowBits;
windowBits = -windowBits;
}
else {
- wrap = (windowBits >> 4) + 1;
+ wrap = (windowBits >> 4) + 5;
#ifdef GUNZIP
if (windowBits < 48)
windowBits &= 15;
@@ -210,7 +225,9 @@ int stream_size;
if (state == Z_NULL) return Z_MEM_ERROR;
Tracev((stderr, "inflate: allocated\n"));
strm->state = (struct internal_state FAR *)state;
+ state->strm = strm;
state->window = Z_NULL;
+ state->mode = HEAD; /* to pass state test in inflateReset2() */
ret = inflateReset2(strm, windowBits);
if (ret != Z_OK) {
ZFREE(strm, state);
@@ -234,17 +251,17 @@ int value;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (bits < 0) {
state->hold = 0;
state->bits = 0;
return Z_OK;
}
- if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+ if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR;
value &= (1L << bits) - 1;
- state->hold += value << state->bits;
- state->bits += bits;
+ state->hold += (unsigned)value << state->bits;
+ state->bits += (uInt)bits;
return Z_OK;
}
@@ -625,7 +642,7 @@ int flush;
static const unsigned short order[19] = /* permutation of code lengths */
{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
- if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+ if (inflateStateCheck(strm) || strm->next_out == Z_NULL ||
(strm->next_in == Z_NULL && strm->avail_in != 0))
return Z_STREAM_ERROR;
@@ -645,6 +662,8 @@ int flush;
NEEDBITS(16);
#ifdef GUNZIP
if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
+ if (state->wbits == 0)
+ state->wbits = 15;
state->check = crc32(0L, Z_NULL, 0);
CRC2(state->check, hold);
INITBITS();
@@ -672,7 +691,7 @@ int flush;
len = BITS(4) + 8;
if (state->wbits == 0)
state->wbits = len;
- else if (len > state->wbits) {
+ if (len > 15 || len > state->wbits) {
strm->msg = (char *)"invalid window size";
state->mode = BAD;
break;
@@ -699,14 +718,16 @@ int flush;
}
if (state->head != Z_NULL)
state->head->text = (int)((hold >> 8) & 1);
- if (state->flags & 0x0200) CRC2(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC2(state->check, hold);
INITBITS();
state->mode = TIME;
case TIME:
NEEDBITS(32);
if (state->head != Z_NULL)
state->head->time = hold;
- if (state->flags & 0x0200) CRC4(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC4(state->check, hold);
INITBITS();
state->mode = OS;
case OS:
@@ -715,7 +736,8 @@ int flush;
state->head->xflags = (int)(hold & 0xff);
state->head->os = (int)(hold >> 8);
}
- if (state->flags & 0x0200) CRC2(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC2(state->check, hold);
INITBITS();
state->mode = EXLEN;
case EXLEN:
@@ -724,7 +746,8 @@ int flush;
state->length = (unsigned)(hold);
if (state->head != Z_NULL)
state->head->extra_len = (unsigned)hold;
- if (state->flags & 0x0200) CRC2(state->check, hold);
+ if ((state->flags & 0x0200) && (state->wrap & 4))
+ CRC2(state->check, hold);
INITBITS();
}
else if (state->head != Z_NULL)
@@ -742,7 +765,7 @@ int flush;
len + copy > state->head->extra_max ?
state->head->extra_max - len : copy);
}
- if (state->flags & 0x0200)
+ if ((state->flags & 0x0200) && (state->wrap & 4))
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
@@ -761,9 +784,9 @@ int flush;
if (state->head != Z_NULL &&
state->head->name != Z_NULL &&
state->length < state->head->name_max)
- state->head->name[state->length++] = len;
+ state->head->name[state->length++] = (Bytef)len;
} while (len && copy < have);
- if (state->flags & 0x0200)
+ if ((state->flags & 0x0200) && (state->wrap & 4))
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
@@ -782,9 +805,9 @@ int flush;
if (state->head != Z_NULL &&
state->head->comment != Z_NULL &&
state->length < state->head->comm_max)
- state->head->comment[state->length++] = len;
+ state->head->comment[state->length++] = (Bytef)len;
} while (len && copy < have);
- if (state->flags & 0x0200)
+ if ((state->flags & 0x0200) && (state->wrap & 4))
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
@@ -796,7 +819,7 @@ int flush;
case HCRC:
if (state->flags & 0x0200) {
NEEDBITS(16);
- if (hold != (state->check & 0xffff)) {
+ if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
strm->msg = (char *)"header crc mismatch";
state->mode = BAD;
break;
@@ -1177,11 +1200,11 @@ int flush;
out -= left;
strm->total_out += out;
state->total += out;
- if (out)
+ if ((state->wrap & 4) && out)
strm->adler = state->check =
UPDATE(state->check, put - out, out);
out = left;
- if ((
+ if ((state->wrap & 4) && (
#ifdef GUNZIP
state->flags ? hold :
#endif
@@ -1240,10 +1263,10 @@ int flush;
strm->total_in += in;
strm->total_out += out;
state->total += out;
- if (state->wrap && out)
+ if ((state->wrap & 4) && out)
strm->adler = state->check =
UPDATE(state->check, strm->next_out - out, out);
- strm->data_type = state->bits + (state->last ? 64 : 0) +
+ strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
(state->mode == TYPE ? 128 : 0) +
(state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
@@ -1255,7 +1278,7 @@ int ZEXPORT inflateEnd(strm)
z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+ if (inflateStateCheck(strm))
return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (state->window != Z_NULL) ZFREE(strm, state->window);
@@ -1273,7 +1296,7 @@ uInt *dictLength;
struct inflate_state FAR *state;
/* check state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
/* copy dictionary */
@@ -1298,7 +1321,7 @@ uInt dictLength;
int ret;
/* check state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (state->wrap != 0 && state->mode != DICT)
return Z_STREAM_ERROR;
@@ -1330,7 +1353,7 @@ gz_headerp head;
struct inflate_state FAR *state;
/* check state */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
@@ -1383,7 +1406,7 @@ z_streamp strm;
struct inflate_state FAR *state;
/* check parameters */
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
@@ -1430,7 +1453,7 @@ z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
return state->mode == STORED && state->bits == 0;
}
@@ -1445,8 +1468,7 @@ z_streamp source;
unsigned wsize;
/* check input */
- if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
- source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+ if (inflateStateCheck(source) || dest == Z_NULL)
return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)source->state;
@@ -1467,6 +1489,7 @@ z_streamp source;
/* copy state */
zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+ copy->strm = dest;
if (state->lencode >= state->codes &&
state->lencode <= state->codes + ENOUGH - 1) {
copy->lencode = copy->codes + (state->lencode - state->codes);
@@ -1488,25 +1511,51 @@ int subvert;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
- state->sane = !subvert;
#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ state->sane = !subvert;
return Z_OK;
#else
+ (void)subvert;
state->sane = 1;
return Z_DATA_ERROR;
#endif
}
+int ZEXPORT inflateValidate(strm, check)
+z_streamp strm;
+int check;
+{
+ struct inflate_state FAR *state;
+
+ if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (check)
+ state->wrap |= 4;
+ else
+ state->wrap &= ~4;
+ return Z_OK;
+}
+
long ZEXPORT inflateMark(strm)
z_streamp strm;
{
struct inflate_state FAR *state;
- if (strm == Z_NULL || strm->state == Z_NULL) return -(1L << 16);
+ if (inflateStateCheck(strm))
+ return -(1L << 16);
state = (struct inflate_state FAR *)strm->state;
- return ((long)(state->back) << 16) +
+ return (long)(((unsigned long)((long)state->back)) << 16) +
(state->mode == COPY ? state->length :
(state->mode == MATCH ? state->was - state->length : 0));
}
+
+unsigned long ZEXPORT inflateCodesUsed(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (inflateStateCheck(strm)) return (unsigned long)-1;
+ state = (struct inflate_state FAR *)strm->state;
+ return (unsigned long)(state->next - state->codes);
+}
diff --git a/contrib/zlib/inflate.h b/contrib/zlib/inflate.h
index 95f4986..a46cce6 100644
--- a/contrib/zlib/inflate.h
+++ b/contrib/zlib/inflate.h
@@ -1,5 +1,5 @@
/* inflate.h -- internal inflate state definition
- * Copyright (C) 1995-2009 Mark Adler
+ * Copyright (C) 1995-2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -18,7 +18,7 @@
/* Possible inflate modes between inflate() calls */
typedef enum {
- HEAD, /* i: waiting for magic header */
+ HEAD = 16180, /* i: waiting for magic header */
FLAGS, /* i: waiting for method and flags (gzip) */
TIME, /* i: waiting for modification time (gzip) */
OS, /* i: waiting for extra flags and operating system (gzip) */
@@ -77,11 +77,14 @@ typedef enum {
CHECK -> LENGTH -> DONE
*/
-/* state maintained between inflate() calls. Approximately 10K bytes. */
+/* State maintained between inflate() calls -- approximately 7K bytes, not
+ including the allocated sliding window, which is up to 32K bytes. */
struct inflate_state {
+ z_streamp strm; /* pointer back to this zlib stream */
inflate_mode mode; /* current inflate mode */
int last; /* true if processing last block */
- int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
+ bit 2 true to validate check value */
int havedict; /* true if dictionary provided */
int flags; /* gzip header method and flags (0 if zlib) */
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
diff --git a/contrib/zlib/inftrees.c b/contrib/zlib/inftrees.c
index 44d89cf..2ea08fc 100644
--- a/contrib/zlib/inftrees.c
+++ b/contrib/zlib/inftrees.c
@@ -1,5 +1,5 @@
/* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2013 Mark Adler
+ * Copyright (C) 1995-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,7 +9,7 @@
#define MAXBITS 15
const char inflate_copyright[] =
- " inflate 1.2.8 Copyright 1995-2013 Mark Adler ";
+ " inflate 1.2.11 Copyright 1995-2017 Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
@@ -54,7 +54,7 @@ unsigned short FAR *work;
code FAR *next; /* next available space in table */
const unsigned short FAR *base; /* base value table to use */
const unsigned short FAR *extra; /* extra bits table to use */
- int end; /* use base and extra for symbol > end */
+ unsigned match; /* use base and extra for symbol >= match */
unsigned short count[MAXBITS+1]; /* number of codes of each length */
unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
static const unsigned short lbase[31] = { /* Length codes 257..285 base */
@@ -62,7 +62,7 @@ unsigned short FAR *work;
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
- 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
@@ -181,19 +181,17 @@ unsigned short FAR *work;
switch (type) {
case CODES:
base = extra = work; /* dummy value--not used */
- end = 19;
+ match = 20;
break;
case LENS:
base = lbase;
- base -= 257;
extra = lext;
- extra -= 257;
- end = 256;
+ match = 257;
break;
- default: /* DISTS */
+ default: /* DISTS */
base = dbase;
extra = dext;
- end = -1;
+ match = 0;
}
/* initialize state for loop */
@@ -216,13 +214,13 @@ unsigned short FAR *work;
for (;;) {
/* create table entry */
here.bits = (unsigned char)(len - drop);
- if ((int)(work[sym]) < end) {
+ if (work[sym] + 1U < match) {
here.op = (unsigned char)0;
here.val = work[sym];
}
- else if ((int)(work[sym]) > end) {
- here.op = (unsigned char)(extra[work[sym]]);
- here.val = base[work[sym]];
+ else if (work[sym] >= match) {
+ here.op = (unsigned char)(extra[work[sym] - match]);
+ here.val = base[work[sym] - match];
}
else {
here.op = (unsigned char)(32 + 64); /* end of block */
diff --git a/contrib/zlib/test/example.c b/contrib/zlib/test/example.c
index 138a699..eee17ce 100644
--- a/contrib/zlib/test/example.c
+++ b/contrib/zlib/test/example.c
@@ -1,5 +1,5 @@
/* example.c -- usage example of the zlib compression library
- * Copyright (C) 1995-2006, 2011 Jean-loup Gailly.
+ * Copyright (C) 1995-2006, 2011, 2016 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -26,13 +26,13 @@
} \
}
-z_const char hello[] = "hello, hello!";
+static z_const char hello[] = "hello, hello!";
/* "hello world" would be more standard, but the repeated "hello"
* stresses the compression code better, sorry...
*/
-const char dictionary[] = "hello";
-uLong dictId; /* Adler32 value of the dictionary */
+static const char dictionary[] = "hello";
+static uLong dictId; /* Adler32 value of the dictionary */
void test_deflate OF((Byte *compr, uLong comprLen));
void test_inflate OF((Byte *compr, uLong comprLen,
@@ -59,13 +59,13 @@ void *myalloc(q, n, m)
void *q;
unsigned n, m;
{
- q = Z_NULL;
+ (void)q;
return calloc(n, m);
}
void myfree(void *q, void *p)
{
- q = Z_NULL;
+ (void)q;
free(p);
}
@@ -432,7 +432,7 @@ void test_sync(compr, comprLen, uncompr, uncomprLen)
d_stream.next_out = uncompr;
d_stream.avail_out = (uInt)uncomprLen;
- inflate(&d_stream, Z_NO_FLUSH);
+ err = inflate(&d_stream, Z_NO_FLUSH);
CHECK_ERR(err, "inflate");
d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */
@@ -573,7 +573,8 @@ int main(argc, argv)
}
#ifdef Z_SOLO
- argc = strlen(argv[0]);
+ (void)argc;
+ (void)argv;
#else
test_compress(compr, comprLen, uncompr, uncomprLen);
diff --git a/contrib/zlib/test/infcover.c b/contrib/zlib/test/infcover.c
index fe3d920..2be0164 100644
--- a/contrib/zlib/test/infcover.c
+++ b/contrib/zlib/test/infcover.c
@@ -1,5 +1,5 @@
/* infcover.c -- test zlib's inflate routines with full code coverage
- * Copyright (C) 2011 Mark Adler
+ * Copyright (C) 2011, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -237,14 +237,14 @@ local void mem_done(z_stream *strm, char *prefix)
/* Decode a hexadecimal string, set *len to length, in[] to the bytes. This
decodes liberally, in that hex digits can be adjacent, in which case two in
- a row writes a byte. Or they can delimited by any non-hex character, where
- the delimiters are ignored except when a single hex digit is followed by a
- delimiter in which case that single digit writes a byte. The returned
- data is allocated and must eventually be freed. NULL is returned if out of
- memory. If the length is not needed, then len can be NULL. */
+ a row writes a byte. Or they can be delimited by any non-hex character,
+ where the delimiters are ignored except when a single hex digit is followed
+ by a delimiter, where that single digit writes a byte. The returned data is
+ allocated and must eventually be freed. NULL is returned if out of memory.
+ If the length is not needed, then len can be NULL. */
local unsigned char *h2b(const char *hex, unsigned *len)
{
- unsigned char *in;
+ unsigned char *in, *re;
unsigned next, val;
in = malloc((strlen(hex) + 1) >> 1);
@@ -268,8 +268,8 @@ local unsigned char *h2b(const char *hex, unsigned *len)
} while (*hex++); /* go through the loop with the terminating null */
if (len != NULL)
*len = next;
- in = reallocf(in, next);
- return in;
+ re = realloc(in, next);
+ return re == NULL ? in : re;
}
/* generic inflate() run, where hex is the hexadecimal input data, what is the
diff --git a/contrib/zlib/test/minigzip.c b/contrib/zlib/test/minigzip.c
index b3025a4..e22fb08 100644
--- a/contrib/zlib/test/minigzip.c
+++ b/contrib/zlib/test/minigzip.c
@@ -1,5 +1,5 @@
/* minigzip.c -- simulate gzip using the zlib compression library
- * Copyright (C) 1995-2006, 2010, 2011 Jean-loup Gailly.
+ * Copyright (C) 1995-2006, 2010, 2011, 2016 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -40,7 +40,7 @@
# define SET_BINARY_MODE(file)
#endif
-#ifdef _MSC_VER
+#if defined(_MSC_VER) && _MSC_VER < 1900
# define snprintf _snprintf
#endif
@@ -156,14 +156,14 @@ void *myalloc(q, n, m)
void *q;
unsigned n, m;
{
- q = Z_NULL;
+ (void)q;
return calloc(n, m);
}
void myfree(q, p)
void *q, *p;
{
- q = Z_NULL;
+ (void)q;
free(p);
}
@@ -333,7 +333,7 @@ const char *gzerror(gz, err)
#endif
-char *prog;
+static char *prog;
void error OF((const char *msg));
void gz_compress OF((FILE *in, gzFile out));
@@ -500,7 +500,7 @@ void file_uncompress(file)
char *infile, *outfile;
FILE *out;
gzFile in;
- size_t len = strlen(file);
+ unsigned len = strlen(file);
if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) {
fprintf(stderr, "%s: filename too long\n", prog);
diff --git a/contrib/zlib/trees.c b/contrib/zlib/trees.c
index 1fd7759..50cf4b4 100644
--- a/contrib/zlib/trees.c
+++ b/contrib/zlib/trees.c
@@ -1,5 +1,5 @@
/* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2012 Jean-loup Gailly
+ * Copyright (C) 1995-2017 Jean-loup Gailly
* detect_data_type() function provided freely by Cosmin Truta, 2006
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -36,7 +36,7 @@
#include "deflate.h"
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
# include <ctype.h>
#endif
@@ -122,13 +122,13 @@ struct static_tree_desc_s {
int max_length; /* max bit length for the codes */
};
-local static_tree_desc static_l_desc =
+local const static_tree_desc static_l_desc =
{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
-local static_tree_desc static_d_desc =
+local const static_tree_desc static_d_desc =
{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
-local static_tree_desc static_bl_desc =
+local const static_tree_desc static_bl_desc =
{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
/* ===========================================================================
@@ -152,18 +152,16 @@ local int detect_data_type OF((deflate_state *s));
local unsigned bi_reverse OF((unsigned value, int length));
local void bi_windup OF((deflate_state *s));
local void bi_flush OF((deflate_state *s));
-local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
- int header));
#ifdef GEN_TREES_H
local void gen_trees_header OF((void));
#endif
-#ifndef DEBUG
+#ifndef ZLIB_DEBUG
# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
/* Send a code of the given tree. c and tree must not have side effects */
-#else /* DEBUG */
+#else /* !ZLIB_DEBUG */
# define send_code(s, c, tree) \
{ if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
send_bits(s, tree[c].Code, tree[c].Len); }
@@ -182,7 +180,7 @@ local void gen_trees_header OF((void));
* Send a value on a given number of bits.
* IN assertion: length <= 16 and value fits in length bits.
*/
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
local void send_bits OF((deflate_state *s, int value, int length));
local void send_bits(s, value, length)
@@ -208,12 +206,12 @@ local void send_bits(s, value, length)
s->bi_valid += length;
}
}
-#else /* !DEBUG */
+#else /* !ZLIB_DEBUG */
#define send_bits(s, value, length) \
{ int len = length;\
if (s->bi_valid > (int)Buf_size - len) {\
- int val = value;\
+ int val = (int)value;\
s->bi_buf |= (ush)val << s->bi_valid;\
put_short(s, s->bi_buf);\
s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
@@ -223,7 +221,7 @@ local void send_bits(s, value, length)
s->bi_valid += len;\
}\
}
-#endif /* DEBUG */
+#endif /* ZLIB_DEBUG */
/* the arguments must not have side effects */
@@ -317,7 +315,7 @@ local void tr_static_init()
* Genererate the file trees.h describing the static trees.
*/
#ifdef GEN_TREES_H
-# ifndef DEBUG
+# ifndef ZLIB_DEBUG
# include <stdio.h>
# endif
@@ -394,7 +392,7 @@ void ZLIB_INTERNAL _tr_init(s)
s->bi_buf = 0;
s->bi_valid = 0;
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len = 0L;
s->bits_sent = 0L;
#endif
@@ -522,12 +520,12 @@ local void gen_bitlen(s, desc)
xbits = 0;
if (n >= base) xbits = extra[n-base];
f = tree[n].Freq;
- s->opt_len += (ulg)f * (bits + xbits);
- if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+ s->opt_len += (ulg)f * (unsigned)(bits + xbits);
+ if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits);
}
if (overflow == 0) return;
- Trace((stderr,"\nbit length overflow\n"));
+ Tracev((stderr,"\nbit length overflow\n"));
/* This happens for example on obj2 and pic of the Calgary corpus */
/* Find the first bit length which could increase: */
@@ -554,9 +552,8 @@ local void gen_bitlen(s, desc)
m = s->heap[--h];
if (m > max_code) continue;
if ((unsigned) tree[m].Len != (unsigned) bits) {
- Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
- s->opt_len += ((long)bits - (long)tree[m].Len)
- *(long)tree[m].Freq;
+ Tracev((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+ s->opt_len += ((ulg)bits - tree[m].Len) * tree[m].Freq;
tree[m].Len = (ush)bits;
}
n--;
@@ -578,7 +575,7 @@ local void gen_codes (tree, max_code, bl_count)
ushf *bl_count; /* number of codes at each bit length */
{
ush next_code[MAX_BITS+1]; /* next code value for each bit length */
- ush code = 0; /* running code value */
+ unsigned code = 0; /* running code value */
int bits; /* bit index */
int n; /* code index */
@@ -586,7 +583,8 @@ local void gen_codes (tree, max_code, bl_count)
* without bit reversal.
*/
for (bits = 1; bits <= MAX_BITS; bits++) {
- next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+ code = (code + bl_count[bits-1]) << 1;
+ next_code[bits] = (ush)code;
}
/* Check that the bit counts in bl_count are consistent. The last code
* must be all ones.
@@ -599,7 +597,7 @@ local void gen_codes (tree, max_code, bl_count)
int len = tree[n].Len;
if (len == 0) continue;
/* Now reverse the bits */
- tree[n].Code = bi_reverse(next_code[len]++, len);
+ tree[n].Code = (ush)bi_reverse(next_code[len]++, len);
Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
@@ -821,7 +819,7 @@ local int build_bl_tree(s)
if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
}
/* Update opt_len to include the bit length tree and counts */
- s->opt_len += 3*(max_blindex+1) + 5+5+4;
+ s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4;
Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
s->opt_len, s->static_len));
@@ -869,11 +867,17 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
int last; /* one if this is the last block for a file */
{
send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
-#ifdef DEBUG
+ bi_windup(s); /* align on byte boundary */
+ put_short(s, (ush)stored_len);
+ put_short(s, (ush)~stored_len);
+ zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len);
+ s->pending += stored_len;
+#ifdef ZLIB_DEBUG
s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
s->compressed_len += (stored_len + 4) << 3;
+ s->bits_sent += 2*16;
+ s->bits_sent += stored_len<<3;
#endif
- copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
}
/* ===========================================================================
@@ -894,7 +898,7 @@ void ZLIB_INTERNAL _tr_align(s)
{
send_bits(s, STATIC_TREES<<1, 3);
send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
#endif
bi_flush(s);
@@ -902,7 +906,7 @@ void ZLIB_INTERNAL _tr_align(s)
/* ===========================================================================
* Determine the best encoding for the current block: dynamic trees, static
- * trees or store, and output the encoded block to the zip file.
+ * trees or store, and write out the encoded block.
*/
void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
deflate_state *s;
@@ -974,7 +978,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
send_bits(s, (STATIC_TREES<<1)+last, 3);
compress_block(s, (const ct_data *)static_ltree,
(const ct_data *)static_dtree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 3 + s->static_len;
#endif
} else {
@@ -983,7 +987,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
max_blindex+1);
compress_block(s, (const ct_data *)s->dyn_ltree,
(const ct_data *)s->dyn_dtree);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 3 + s->opt_len;
#endif
}
@@ -995,7 +999,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
if (last) {
bi_windup(s);
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->compressed_len += 7; /* align on byte boundary */
#endif
}
@@ -1090,7 +1094,7 @@ local void compress_block(s, ltree, dtree)
send_code(s, code, dtree); /* send the distance code */
extra = extra_dbits[code];
if (extra != 0) {
- dist -= base_dist[code];
+ dist -= (unsigned)base_dist[code];
send_bits(s, dist, extra); /* send the extra distance bits */
}
} /* literal or match pair ? */
@@ -1193,34 +1197,7 @@ local void bi_windup(s)
}
s->bi_buf = 0;
s->bi_valid = 0;
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
s->bits_sent = (s->bits_sent+7) & ~7;
#endif
}
-
-/* ===========================================================================
- * Copy a stored block, storing first the length and its
- * one's complement if requested.
- */
-local void copy_block(s, buf, len, header)
- deflate_state *s;
- charf *buf; /* the input data */
- unsigned len; /* its length */
- int header; /* true if block header must be written */
-{
- bi_windup(s); /* align on byte boundary */
-
- if (header) {
- put_short(s, (ush)len);
- put_short(s, (ush)~len);
-#ifdef DEBUG
- s->bits_sent += 2*16;
-#endif
- }
-#ifdef DEBUG
- s->bits_sent += (ulg)len<<3;
-#endif
- while (len--) {
- put_byte(s, *buf++);
- }
-}
diff --git a/contrib/zlib/uncompr.c b/contrib/zlib/uncompr.c
index 242e949..f03a1a8 100644
--- a/contrib/zlib/uncompr.c
+++ b/contrib/zlib/uncompr.c
@@ -1,5 +1,5 @@
/* uncompr.c -- decompress a memory buffer
- * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
+ * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -9,51 +9,85 @@
#include "zlib.h"
/* ===========================================================================
- Decompresses the source buffer into the destination buffer. sourceLen is
- the byte length of the source buffer. Upon entry, destLen is the total
- size of the destination buffer, which must be large enough to hold the
- entire uncompressed data. (The size of the uncompressed data must have
- been saved previously by the compressor and transmitted to the decompressor
- by some mechanism outside the scope of this compression library.)
- Upon exit, destLen is the actual size of the compressed buffer.
-
- uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
- enough memory, Z_BUF_ERROR if there was not enough room in the output
- buffer, or Z_DATA_ERROR if the input data was corrupted.
+ Decompresses the source buffer into the destination buffer. *sourceLen is
+ the byte length of the source buffer. Upon entry, *destLen is the total size
+ of the destination buffer, which must be large enough to hold the entire
+ uncompressed data. (The size of the uncompressed data must have been saved
+ previously by the compressor and transmitted to the decompressor by some
+ mechanism outside the scope of this compression library.) Upon exit,
+ *destLen is the size of the decompressed data and *sourceLen is the number
+ of source bytes consumed. Upon return, source + *sourceLen points to the
+ first unused input byte.
+
+ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_BUF_ERROR if there was not enough room in the output buffer, or
+ Z_DATA_ERROR if the input data was corrupted, including if the input data is
+ an incomplete zlib stream.
*/
-int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+int ZEXPORT uncompress2 (dest, destLen, source, sourceLen)
Bytef *dest;
uLongf *destLen;
const Bytef *source;
- uLong sourceLen;
+ uLong *sourceLen;
{
z_stream stream;
int err;
+ const uInt max = (uInt)-1;
+ uLong len, left;
+ Byte buf[1]; /* for detection of incomplete stream when *destLen == 0 */
- stream.next_in = (z_const Bytef *)source;
- stream.avail_in = (uInt)sourceLen;
- /* Check for source > 64K on 16-bit machine: */
- if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
- stream.next_out = dest;
- stream.avail_out = (uInt)*destLen;
- if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+ len = *sourceLen;
+ if (*destLen) {
+ left = *destLen;
+ *destLen = 0;
+ }
+ else {
+ left = 1;
+ dest = buf;
+ }
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = 0;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
+ stream.opaque = (voidpf)0;
err = inflateInit(&stream);
if (err != Z_OK) return err;
- err = inflate(&stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- inflateEnd(&stream);
- if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
- return Z_DATA_ERROR;
- return err;
- }
- *destLen = stream.total_out;
+ stream.next_out = dest;
+ stream.avail_out = 0;
- err = inflateEnd(&stream);
- return err;
+ do {
+ if (stream.avail_out == 0) {
+ stream.avail_out = left > (uLong)max ? max : (uInt)left;
+ left -= stream.avail_out;
+ }
+ if (stream.avail_in == 0) {
+ stream.avail_in = len > (uLong)max ? max : (uInt)len;
+ len -= stream.avail_in;
+ }
+ err = inflate(&stream, Z_NO_FLUSH);
+ } while (err == Z_OK);
+
+ *sourceLen -= len + stream.avail_in;
+ if (dest != buf)
+ *destLen = stream.total_out;
+ else if (stream.total_out && err == Z_BUF_ERROR)
+ left = 1;
+
+ inflateEnd(&stream);
+ return err == Z_STREAM_END ? Z_OK :
+ err == Z_NEED_DICT ? Z_DATA_ERROR :
+ err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR :
+ err;
+}
+
+int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+{
+ return uncompress2(dest, destLen, source, &sourceLen);
}
diff --git a/contrib/zlib/zconf.h b/contrib/zlib/zconf.h
index 13a2e1c..0654395 100644
--- a/contrib/zlib/zconf.h
+++ b/contrib/zlib/zconf.h
@@ -1,5 +1,5 @@
/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -17,7 +17,7 @@
#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
# define Z_PREFIX_SET
-/* all linked symbols */
+/* all linked symbols and init macros */
# define _dist_code z__dist_code
# define _length_code z__length_code
# define _tr_align z__tr_align
@@ -29,6 +29,7 @@
# define adler32 z_adler32
# define adler32_combine z_adler32_combine
# define adler32_combine64 z_adler32_combine64
+# define adler32_z z_adler32_z
# ifndef Z_SOLO
# define compress z_compress
# define compress2 z_compress2
@@ -37,10 +38,14 @@
# define crc32 z_crc32
# define crc32_combine z_crc32_combine
# define crc32_combine64 z_crc32_combine64
+# define crc32_z z_crc32_z
# define deflate z_deflate
# define deflateBound z_deflateBound
# define deflateCopy z_deflateCopy
# define deflateEnd z_deflateEnd
+# define deflateGetDictionary z_deflateGetDictionary
+# define deflateInit z_deflateInit
+# define deflateInit2 z_deflateInit2
# define deflateInit2_ z_deflateInit2_
# define deflateInit_ z_deflateInit_
# define deflateParams z_deflateParams
@@ -67,6 +72,8 @@
# define gzeof z_gzeof
# define gzerror z_gzerror
# define gzflush z_gzflush
+# define gzfread z_gzfread
+# define gzfwrite z_gzfwrite
# define gzgetc z_gzgetc
# define gzgetc_ z_gzgetc_
# define gzgets z_gzgets
@@ -78,7 +85,6 @@
# define gzopen_w z_gzopen_w
# endif
# define gzprintf z_gzprintf
-# define gzvprintf z_gzvprintf
# define gzputc z_gzputc
# define gzputs z_gzputs
# define gzread z_gzread
@@ -89,32 +95,39 @@
# define gztell z_gztell
# define gztell64 z_gztell64
# define gzungetc z_gzungetc
+# define gzvprintf z_gzvprintf
# define gzwrite z_gzwrite
# endif
# define inflate z_inflate
# define inflateBack z_inflateBack
# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit z_inflateBackInit
# define inflateBackInit_ z_inflateBackInit_
+# define inflateCodesUsed z_inflateCodesUsed
# define inflateCopy z_inflateCopy
# define inflateEnd z_inflateEnd
+# define inflateGetDictionary z_inflateGetDictionary
# define inflateGetHeader z_inflateGetHeader
+# define inflateInit z_inflateInit
+# define inflateInit2 z_inflateInit2
# define inflateInit2_ z_inflateInit2_
# define inflateInit_ z_inflateInit_
# define inflateMark z_inflateMark
# define inflatePrime z_inflatePrime
# define inflateReset z_inflateReset
# define inflateReset2 z_inflateReset2
+# define inflateResetKeep z_inflateResetKeep
# define inflateSetDictionary z_inflateSetDictionary
-# define inflateGetDictionary z_inflateGetDictionary
# define inflateSync z_inflateSync
# define inflateSyncPoint z_inflateSyncPoint
# define inflateUndermine z_inflateUndermine
-# define inflateResetKeep z_inflateResetKeep
+# define inflateValidate z_inflateValidate
# define inflate_copyright z_inflate_copyright
# define inflate_fast z_inflate_fast
# define inflate_table z_inflate_table
# ifndef Z_SOLO
# define uncompress z_uncompress
+# define uncompress2 z_uncompress2
# endif
# define zError z_zError
# ifndef Z_SOLO
@@ -224,9 +237,19 @@
# define z_const
#endif
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-# define NO_DUMMY_DECL
+#ifdef Z_SOLO
+ typedef unsigned long z_size_t;
+#else
+# define z_longlong long long
+# if defined(NO_SIZE_T)
+ typedef unsigned NO_SIZE_T z_size_t;
+# elif defined(STDC)
+# include <stddef.h>
+ typedef size_t z_size_t;
+# else
+ typedef unsigned long z_size_t;
+# endif
+# undef z_longlong
#endif
/* Maximum value for memLevel in deflateInit2 */
@@ -256,7 +279,7 @@
Of course this will generally degrade compression (there's no free lunch).
The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
for small objects.
*/
diff --git a/contrib/zlib/zconf.h.in b/contrib/zlib/zconf.h.in
index 9987a77..5e1d68a 100644
--- a/contrib/zlib/zconf.h.in
+++ b/contrib/zlib/zconf.h.in
@@ -1,5 +1,5 @@
/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -17,7 +17,7 @@
#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
# define Z_PREFIX_SET
-/* all linked symbols */
+/* all linked symbols and init macros */
# define _dist_code z__dist_code
# define _length_code z__length_code
# define _tr_align z__tr_align
@@ -29,6 +29,7 @@
# define adler32 z_adler32
# define adler32_combine z_adler32_combine
# define adler32_combine64 z_adler32_combine64
+# define adler32_z z_adler32_z
# ifndef Z_SOLO
# define compress z_compress
# define compress2 z_compress2
@@ -37,10 +38,14 @@
# define crc32 z_crc32
# define crc32_combine z_crc32_combine
# define crc32_combine64 z_crc32_combine64
+# define crc32_z z_crc32_z
# define deflate z_deflate
# define deflateBound z_deflateBound
# define deflateCopy z_deflateCopy
# define deflateEnd z_deflateEnd
+# define deflateGetDictionary z_deflateGetDictionary
+# define deflateInit z_deflateInit
+# define deflateInit2 z_deflateInit2
# define deflateInit2_ z_deflateInit2_
# define deflateInit_ z_deflateInit_
# define deflateParams z_deflateParams
@@ -67,6 +72,8 @@
# define gzeof z_gzeof
# define gzerror z_gzerror
# define gzflush z_gzflush
+# define gzfread z_gzfread
+# define gzfwrite z_gzfwrite
# define gzgetc z_gzgetc
# define gzgetc_ z_gzgetc_
# define gzgets z_gzgets
@@ -78,7 +85,6 @@
# define gzopen_w z_gzopen_w
# endif
# define gzprintf z_gzprintf
-# define gzvprintf z_gzvprintf
# define gzputc z_gzputc
# define gzputs z_gzputs
# define gzread z_gzread
@@ -89,32 +95,39 @@
# define gztell z_gztell
# define gztell64 z_gztell64
# define gzungetc z_gzungetc
+# define gzvprintf z_gzvprintf
# define gzwrite z_gzwrite
# endif
# define inflate z_inflate
# define inflateBack z_inflateBack
# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit z_inflateBackInit
# define inflateBackInit_ z_inflateBackInit_
+# define inflateCodesUsed z_inflateCodesUsed
# define inflateCopy z_inflateCopy
# define inflateEnd z_inflateEnd
+# define inflateGetDictionary z_inflateGetDictionary
# define inflateGetHeader z_inflateGetHeader
+# define inflateInit z_inflateInit
+# define inflateInit2 z_inflateInit2
# define inflateInit2_ z_inflateInit2_
# define inflateInit_ z_inflateInit_
# define inflateMark z_inflateMark
# define inflatePrime z_inflatePrime
# define inflateReset z_inflateReset
# define inflateReset2 z_inflateReset2
+# define inflateResetKeep z_inflateResetKeep
# define inflateSetDictionary z_inflateSetDictionary
-# define inflateGetDictionary z_inflateGetDictionary
# define inflateSync z_inflateSync
# define inflateSyncPoint z_inflateSyncPoint
# define inflateUndermine z_inflateUndermine
-# define inflateResetKeep z_inflateResetKeep
+# define inflateValidate z_inflateValidate
# define inflate_copyright z_inflate_copyright
# define inflate_fast z_inflate_fast
# define inflate_table z_inflate_table
# ifndef Z_SOLO
# define uncompress z_uncompress
+# define uncompress2 z_uncompress2
# endif
# define zError z_zError
# ifndef Z_SOLO
@@ -224,9 +237,19 @@
# define z_const
#endif
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-# define NO_DUMMY_DECL
+#ifdef Z_SOLO
+ typedef unsigned long z_size_t;
+#else
+# define z_longlong long long
+# if defined(NO_SIZE_T)
+ typedef unsigned NO_SIZE_T z_size_t;
+# elif defined(STDC)
+# include <stddef.h>
+ typedef size_t z_size_t;
+# else
+ typedef unsigned long z_size_t;
+# endif
+# undef z_longlong
#endif
/* Maximum value for memLevel in deflateInit2 */
@@ -256,7 +279,7 @@
Of course this will generally degrade compression (there's no free lunch).
The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ that is, 32K for windowBits=15 (default value) plus about 7 kilobytes
for small objects.
*/
diff --git a/contrib/zlib/zlib.3 b/contrib/zlib/zlib.3
index 0160e62..bda4eb0 100644
--- a/contrib/zlib/zlib.3
+++ b/contrib/zlib/zlib.3
@@ -1,4 +1,4 @@
-.TH ZLIB 3 "28 Apr 2013"
+.TH ZLIB 3 "15 Jan 2017"
.SH NAME
zlib \- compression/decompression library
.SH SYNOPSIS
@@ -48,32 +48,10 @@ Changes to this version are documented in the file
that accompanies the source.
.LP
.I zlib
-is available in Java using the java.util.zip package:
-.IP
-http://java.sun.com/developer/technicalArticles/Programming/compression/
-.LP
-A Perl interface to
-.IR zlib ,
-written by Paul Marquess (pmqs@cpan.org),
-is available at CPAN (Comprehensive Perl Archive Network) sites,
-including:
-.IP
-http://search.cpan.org/~pmqs/IO-Compress-Zlib/
-.LP
-A Python interface to
-.IR zlib ,
-written by A.M. Kuchling (amk@magnet.com),
-is available in Python 1.5 and later versions:
-.IP
-http://docs.python.org/library/zlib.html
-.LP
-.I zlib
-is built into
-.IR tcl:
-.IP
-http://wiki.tcl.tk/4610
+is built in to many languages and operating systems, including but not limited to
+Java, Python, .NET, PHP, Perl, Ruby, Swift, and Go.
.LP
-An experimental package to read and write files in .zip format,
+An experimental package to read and write files in the .zip format,
written on top of
.I zlib
by Gilles Vollant (info@winimage.com),
@@ -92,7 +70,9 @@ web site can be found at:
.IP
http://zlib.net/
.LP
-The data format used by the zlib library is described by RFC
+The data format used by the
+.I zlib
+library is described by RFC
(Request for Comments) 1950 to 1952 in the files:
.IP
http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format)
@@ -124,17 +104,35 @@ http://zlib.net/zlib_faq.html
before asking for help.
Send questions and/or comments to zlib@gzip.org,
or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).
-.SH AUTHORS
-Version 1.2.8
-Copyright (C) 1995-2013 Jean-loup Gailly (jloup@gzip.org)
-and Mark Adler (madler@alumni.caltech.edu).
-.LP
-This software is provided "as-is,"
-without any express or implied warranty.
-In no event will the authors be held liable for any damages
+.SH AUTHORS AND LICENSE
+Version 1.2.11
+.LP
+Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+.LP
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
-See the distribution directory with respect to requirements
-governing redistribution.
+.LP
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+.LP
+.nr step 1 1
+.IP \n[step]. 3
+The origin of this software must not be misrepresented; you must not
+claim that you wrote the original software. If you use this software
+in a product, an acknowledgment in the product documentation would be
+appreciated but is not required.
+.IP \n+[step].
+Altered source versions must be plainly marked as such, and must not be
+misrepresented as being the original software.
+.IP \n+[step].
+This notice may not be removed or altered from any source distribution.
+.LP
+Jean-loup Gailly Mark Adler
+.br
+jloup@gzip.org madler@alumni.caltech.edu
+.LP
The deflate format used by
.I zlib
was defined by Phil Katz.
diff --git a/contrib/zlib/zlib.h b/contrib/zlib/zlib.h
index 3e0c767..f09cdaf 100644
--- a/contrib/zlib/zlib.h
+++ b/contrib/zlib/zlib.h
@@ -1,7 +1,7 @@
/* zlib.h -- interface of the 'zlib' general purpose compression library
- version 1.2.8, April 28th, 2013
+ version 1.2.11, January 15th, 2017
- Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -37,11 +37,11 @@
extern "C" {
#endif
-#define ZLIB_VERSION "1.2.8"
-#define ZLIB_VERNUM 0x1280
+#define ZLIB_VERSION "1.2.11"
+#define ZLIB_VERNUM 0x12b0
#define ZLIB_VER_MAJOR 1
#define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 8
+#define ZLIB_VER_REVISION 11
#define ZLIB_VER_SUBREVISION 0
/*
@@ -65,7 +65,8 @@ extern "C" {
with "gz". The gzip format is different from the zlib format. gzip is a
gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
- This library can optionally read and write gzip streams in memory as well.
+ This library can optionally read and write gzip and raw deflate streams in
+ memory as well.
The zlib format was designed to be compact and fast for use in memory
and on communications channels. The gzip format was designed for single-
@@ -74,7 +75,7 @@ extern "C" {
The library does not install any signal handler. The decoder checks
the consistency of the compressed data, so the library should never crash
- even in case of corrupted input.
+ even in the case of corrupted input.
*/
typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
@@ -87,7 +88,7 @@ typedef struct z_stream_s {
uInt avail_in; /* number of bytes available at next_in */
uLong total_in; /* total number of input bytes read so far */
- Bytef *next_out; /* next output byte should be put there */
+ Bytef *next_out; /* next output byte will go here */
uInt avail_out; /* remaining free space at next_out */
uLong total_out; /* total number of bytes output so far */
@@ -98,8 +99,9 @@ typedef struct z_stream_s {
free_func zfree; /* used to free the internal state */
voidpf opaque; /* private data object passed to zalloc and zfree */
- int data_type; /* best guess about the data type: binary or text */
- uLong adler; /* adler32 value of the uncompressed data */
+ int data_type; /* best guess about the data type: binary or text
+ for deflate, or the decoding state for inflate */
+ uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */
uLong reserved; /* reserved for future use */
} z_stream;
@@ -142,7 +144,9 @@ typedef gz_header FAR *gz_headerp;
zalloc must return Z_NULL if there is not enough memory for the object.
If zlib is used in a multi-threaded application, zalloc and zfree must be
- thread safe.
+ thread safe. In that case, zlib is thread-safe. When zalloc and zfree are
+ Z_NULL on entry to the initialization function, they are set to internal
+ routines that use the standard library functions malloc() and free().
On 16-bit systems, the functions zalloc and zfree must be able to allocate
exactly 65536 bytes, but will not be required to allocate more than this if
@@ -155,7 +159,7 @@ typedef gz_header FAR *gz_headerp;
The fields total_in and total_out can be used for statistics or progress
reports. After compression, total_in holds the total size of the
- uncompressed data and may be saved for use in the decompressor (particularly
+ uncompressed data and may be saved for use by the decompressor (particularly
if the decompressor wants to decompress everything in a single step).
*/
@@ -200,7 +204,7 @@ typedef gz_header FAR *gz_headerp;
#define Z_TEXT 1
#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */
#define Z_UNKNOWN 2
-/* Possible values of the data_type field (though see inflate()) */
+/* Possible values of the data_type field for deflate() */
#define Z_DEFLATED 8
/* The deflate compression method (the only one supported in this version) */
@@ -258,11 +262,11 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
enough room in the output buffer), next_in and avail_in are updated and
processing will resume at this point for the next call of deflate().
- - Provide more output starting at next_out and update next_out and avail_out
+ - Generate more output starting at next_out and update next_out and avail_out
accordingly. This action is forced if the parameter flush is non zero.
Forcing flush frequently degrades the compression ratio, so this parameter
- should be set only when necessary (in interactive applications). Some
- output may be provided even if flush is not set.
+ should be set only when necessary. Some output may be provided even if
+ flush is zero.
Before the call of deflate(), the application should ensure that at least
one of the actions is possible, by providing more input and/or consuming more
@@ -271,7 +275,9 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
output when it wants, for example when the output buffer is full (avail_out
== 0), or after each call of deflate(). If deflate returns Z_OK and with
zero avail_out, it must be called again after making room in the output
- buffer because there might be more output pending.
+ buffer because there might be more output pending. See deflatePending(),
+ which can be used if desired to determine whether or not there is more ouput
+ in that case.
Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
decide how much data to accumulate before producing output, in order to
@@ -292,8 +298,8 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
This completes the current deflate block and follows it with an empty fixed
codes block that is 10 bits long. This assures that enough bytes are output
- in order for the decompressor to finish the block before the empty fixed code
- block.
+ in order for the decompressor to finish the block before the empty fixed
+ codes block.
If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
@@ -319,34 +325,38 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
If the parameter flush is set to Z_FINISH, pending input is processed,
pending output is flushed and deflate returns with Z_STREAM_END if there was
- enough output space; if deflate returns with Z_OK, this function must be
- called again with Z_FINISH and more output space (updated avail_out) but no
- more input data, until it returns with Z_STREAM_END or an error. After
- deflate has returned Z_STREAM_END, the only possible operations on the stream
- are deflateReset or deflateEnd.
-
- Z_FINISH can be used immediately after deflateInit if all the compression
- is to be done in a single step. In this case, avail_out must be at least the
- value returned by deflateBound (see below). Then deflate is guaranteed to
- return Z_STREAM_END. If not enough output space is provided, deflate will
- not return Z_STREAM_END, and it must be called again as described above.
-
- deflate() sets strm->adler to the adler32 checksum of all input read
- so far (that is, total_in bytes).
+ enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this
+ function must be called again with Z_FINISH and more output space (updated
+ avail_out) but no more input data, until it returns with Z_STREAM_END or an
+ error. After deflate has returned Z_STREAM_END, the only possible operations
+ on the stream are deflateReset or deflateEnd.
+
+ Z_FINISH can be used in the first deflate call after deflateInit if all the
+ compression is to be done in a single step. In order to complete in one
+ call, avail_out must be at least the value returned by deflateBound (see
+ below). Then deflate is guaranteed to return Z_STREAM_END. If not enough
+ output space is provided, deflate will not return Z_STREAM_END, and it must
+ be called again as described above.
+
+ deflate() sets strm->adler to the Adler-32 checksum of all input read
+ so far (that is, total_in bytes). If a gzip stream is being generated, then
+ strm->adler will be the CRC-32 checksum of the input read so far. (See
+ deflateInit2 below.)
deflate() may update strm->data_type if it can make a good guess about
- the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered
- binary. This field is only for information purposes and does not affect the
- compression algorithm in any manner.
+ the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is
+ considered binary. This field is only for information purposes and does not
+ affect the compression algorithm in any manner.
deflate() returns Z_OK if some progress has been made (more input
processed or more output produced), Z_STREAM_END if all input has been
consumed and all output has been produced (only when flush is set to
Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
- if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
- (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not
- fatal, and deflate() can be called again with more input and more output
- space to continue compressing.
+ if next_in or next_out was Z_NULL or the state was inadvertently written over
+ by the application), or Z_BUF_ERROR if no progress is possible (for example
+ avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and
+ deflate() can be called again with more input and more output space to
+ continue compressing.
*/
@@ -369,23 +379,21 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
Initializes the internal stream state for decompression. The fields
next_in, avail_in, zalloc, zfree and opaque must be initialized before by
- the caller. If next_in is not Z_NULL and avail_in is large enough (the
- exact value depends on the compression method), inflateInit determines the
- compression method from the zlib header and allocates all data structures
- accordingly; otherwise the allocation will be deferred to the first call of
- inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
- use default allocation functions.
+ the caller. In the current version of inflate, the provided input is not
+ read or consumed. The allocation of a sliding window will be deferred to
+ the first call of inflate (if the decompression does not complete on the
+ first call). If zalloc and zfree are set to Z_NULL, inflateInit updates
+ them to use default allocation functions.
inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
version assumed by the caller, or Z_STREAM_ERROR if the parameters are
invalid, such as a null pointer to the structure. msg is set to null if
- there is no error message. inflateInit does not perform any decompression
- apart from possibly reading the zlib header if present: actual decompression
- will be done by inflate(). (So next_in and avail_in may be modified, but
- next_out and avail_out are unused and unchanged.) The current implementation
- of inflateInit() does not process any header information -- that is deferred
- until inflate() is called.
+ there is no error message. inflateInit does not perform any decompression.
+ Actual decompression will be done by inflate(). So next_in, and avail_in,
+ next_out, and avail_out are unused and unchanged. The current
+ implementation of inflateInit() does not process any header information --
+ that is deferred until inflate() is called.
*/
@@ -401,17 +409,20 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
- Decompress more input starting at next_in and update next_in and avail_in
accordingly. If not all input can be processed (because there is not
- enough room in the output buffer), next_in is updated and processing will
- resume at this point for the next call of inflate().
+ enough room in the output buffer), then next_in and avail_in are updated
+ accordingly, and processing will resume at this point for the next call of
+ inflate().
- - Provide more output starting at next_out and update next_out and avail_out
+ - Generate more output starting at next_out and update next_out and avail_out
accordingly. inflate() provides as much output as possible, until there is
no more input data or no more space in the output buffer (see below about
the flush parameter).
Before the call of inflate(), the application should ensure that at least
one of the actions is possible, by providing more input and/or consuming more
- output, and updating the next_* and avail_* values accordingly. The
+ output, and updating the next_* and avail_* values accordingly. If the
+ caller of inflate() does not provide both available input and available
+ output space, it is possible that there will be no progress made. The
application can consume the uncompressed output when it wants, for example
when the output buffer is full (avail_out == 0), or after each call of
inflate(). If inflate returns Z_OK and with zero avail_out, it must be
@@ -428,7 +439,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
gets to the end of that block, or when it runs out of data.
The Z_BLOCK option assists in appending to or combining deflate streams.
- Also to assist in this, on return inflate() will set strm->data_type to the
+ To assist in this, on return inflate() always sets strm->data_type to the
number of unused bits in the last byte taken from strm->next_in, plus 64 if
inflate() is currently decoding the last block in the deflate stream, plus
128 if inflate() returned immediately after decoding an end-of-block code or
@@ -454,7 +465,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
this case all pending input is processed and all pending output is flushed;
avail_out must be large enough to hold all of the uncompressed data for the
operation to complete. (The size of the uncompressed data may have been
- saved by the compressor for this purpose.) The use of Z_FINISH is not
+ saved by the compressor for this purpose.) The use of Z_FINISH is not
required to perform an inflation in one step. However it may be used to
inform inflate that a faster approach can be used for the single inflate()
call. Z_FINISH also informs inflate to not maintain a sliding window if the
@@ -476,32 +487,33 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
strm->adler to the Adler-32 checksum of all output produced so far (that is,
total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
- below. At the end of the stream, inflate() checks that its computed adler32
+ below. At the end of the stream, inflate() checks that its computed Adler-32
checksum is equal to that saved by the compressor and returns Z_STREAM_END
only if the checksum is correct.
inflate() can decompress and check either zlib-wrapped or gzip-wrapped
deflate data. The header type is detected automatically, if requested when
initializing with inflateInit2(). Any information contained in the gzip
- header is not retained, so applications that need that information should
- instead use raw inflate, see inflateInit2() below, or inflateBack() and
- perform their own processing of the gzip header and trailer. When processing
+ header is not retained unless inflateGetHeader() is used. When processing
gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
- producted so far. The CRC-32 is checked against the gzip trailer.
+ produced so far. The CRC-32 is checked against the gzip trailer, as is the
+ uncompressed length, modulo 2^32.
inflate() returns Z_OK if some progress has been made (more input processed
or more output produced), Z_STREAM_END if the end of the compressed data has
been reached and all uncompressed output has been produced, Z_NEED_DICT if a
preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
corrupted (input stream not conforming to the zlib format or incorrect check
- value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
- next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
- Z_BUF_ERROR if no progress is possible or if there was not enough room in the
- output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
+ value, in which case strm->msg points to a string with a more specific
+ error), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+ next_in or next_out was Z_NULL, or the state was inadvertently written over
+ by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR
+ if no progress was possible or if there was not enough room in the output
+ buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
inflate() can be called again with more input and more output space to
continue decompressing. If Z_DATA_ERROR is returned, the application may
then call inflateSync() to look for a good compression block if a partial
- recovery of the data is desired.
+ recovery of the data is to be attempted.
*/
@@ -511,9 +523,8 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
This function discards any unprocessed input and does not flush any pending
output.
- inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
- was inconsistent. In the error case, msg may be set but then points to a
- static string (which must not be deallocated).
+ inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state
+ was inconsistent.
*/
@@ -544,16 +555,29 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
compression at the expense of memory usage. The default value is 15 if
deflateInit is used instead.
+ For the current implementation of deflate(), a windowBits value of 8 (a
+ window size of 256 bytes) is not supported. As a result, a request for 8
+ will result in 9 (a 512-byte window). In that case, providing 8 to
+ inflateInit2() will result in an error when the zlib header with 9 is
+ checked against the initialization of inflate(). The remedy is to not use 8
+ with deflateInit2() with this initialization, or at least in that case use 9
+ with inflateInit2().
+
windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
determines the window size. deflate() will then generate raw deflate data
- with no zlib header or trailer, and will not compute an adler32 check value.
+ with no zlib header or trailer, and will not compute a check value.
windowBits can also be greater than 15 for optional gzip encoding. Add
16 to windowBits to write a simple gzip header and trailer around the
compressed data instead of a zlib wrapper. The gzip header will have no
file name, no extra data, no comment, no modification time (set to zero), no
- header crc, and the operating system will be set to 255 (unknown). If a
- gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+ header crc, and the operating system will be set to the appropriate value,
+ if the operating system was determined at compile time. If a gzip stream is
+ being written, strm->adler is a CRC-32 instead of an Adler-32.
+
+ For raw deflate or gzip encoding, a request for a 256-byte window is
+ rejected as invalid, since only the zlib header provides a means of
+ transmitting the window size to the decompressor.
The memLevel parameter specifies how much memory should be allocated
for the internal compression state. memLevel=1 uses minimum memory but is
@@ -614,12 +638,12 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
addition, the current implementation of deflate will use at most the window
size minus 262 bytes of the provided dictionary.
- Upon return of this function, strm->adler is set to the adler32 value
+ Upon return of this function, strm->adler is set to the Adler-32 value
of the dictionary; the decompressor may later use this value to determine
- which dictionary has been used by the compressor. (The adler32 value
+ which dictionary has been used by the compressor. (The Adler-32 value
applies to the whole dictionary even if only a subset of the dictionary is
actually used by the compressor.) If a raw deflate was requested, then the
- adler32 value is not computed and strm->adler is not set.
+ Adler-32 value is not computed and strm->adler is not set.
deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
@@ -628,6 +652,28 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
not perform any compression: this will be done by deflate().
*/
+ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm,
+ Bytef *dictionary,
+ uInt *dictLength));
+/*
+ Returns the sliding dictionary being maintained by deflate. dictLength is
+ set to the number of bytes in the dictionary, and that many bytes are copied
+ to dictionary. dictionary must have enough space, where 32768 bytes is
+ always enough. If deflateGetDictionary() is called with dictionary equal to
+ Z_NULL, then only the dictionary length is returned, and nothing is copied.
+ Similary, if dictLength is Z_NULL, then it is not set.
+
+ deflateGetDictionary() may return a length less than the window size, even
+ when more than the window size in input has been provided. It may return up
+ to 258 bytes less in that case, due to how zlib's implementation of deflate
+ manages the sliding window and lookahead for matches, where matches can be
+ up to 258 bytes long. If the application needs the last window-size bytes of
+ input, then that would need to be saved by the application outside of zlib.
+
+ deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+ stream state is inconsistent.
+*/
+
ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
z_streamp source));
/*
@@ -648,10 +694,10 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
/*
- This function is equivalent to deflateEnd followed by deflateInit,
- but does not free and reallocate all the internal compression state. The
- stream will keep the same compression level and any other attributes that
- may have been set by deflateInit2.
+ This function is equivalent to deflateEnd followed by deflateInit, but
+ does not free and reallocate the internal compression state. The stream
+ will leave the compression level and any other attributes that may have been
+ set unchanged.
deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
stream state was inconsistent (such as zalloc or state being Z_NULL).
@@ -662,20 +708,36 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
int strategy));
/*
Dynamically update the compression level and compression strategy. The
- interpretation of level and strategy is as in deflateInit2. This can be
+ interpretation of level and strategy is as in deflateInit2(). This can be
used to switch between compression and straight copy of the input data, or
to switch to a different kind of input data requiring a different strategy.
- If the compression level is changed, the input available so far is
- compressed with the old level (and may be flushed); the new level will take
- effect only at the next call of deflate().
-
- Before the call of deflateParams, the stream state must be set as for
- a call of deflate(), since the currently available input may have to be
- compressed and flushed. In particular, strm->avail_out must be non-zero.
-
- deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
- stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
- strm->avail_out was zero.
+ If the compression approach (which is a function of the level) or the
+ strategy is changed, and if any input has been consumed in a previous
+ deflate() call, then the input available so far is compressed with the old
+ level and strategy using deflate(strm, Z_BLOCK). There are three approaches
+ for the compression levels 0, 1..3, and 4..9 respectively. The new level
+ and strategy will take effect at the next call of deflate().
+
+ If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
+ not have enough output space to complete, then the parameter change will not
+ take effect. In this case, deflateParams() can be called again with the
+ same parameters and more output space to try again.
+
+ In order to assure a change in the parameters on the first try, the
+ deflate stream should be flushed using deflate() with Z_BLOCK or other flush
+ request until strm.avail_out is not zero, before calling deflateParams().
+ Then no more input data should be provided before the deflateParams() call.
+ If this is done, the old level and strategy will be applied to the data
+ compressed before deflateParams(), and the new level and strategy will be
+ applied to the the data compressed after deflateParams().
+
+ deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream
+ state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if
+ there was not enough output space to complete the compression of the
+ available input data before a change in the strategy or approach. Note that
+ in the case of a Z_BUF_ERROR, the parameters are not changed. A return
+ value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be
+ retried with more output space.
*/
ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
@@ -793,7 +855,7 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
is for use with other formats that use the deflate compressed data format
such as zip. Those formats provide their own check values. If a custom
format is developed using the raw deflate format for compressed data, it is
- recommended that a check value such as an adler32 or a crc32 be applied to
+ recommended that a check value such as an Adler-32 or a CRC-32 be applied to
the uncompressed data as is done in the zlib, gzip, and zip formats. For
most applications, the zlib format should be used as is. Note that comments
above on the use in deflateInit2() applies to the magnitude of windowBits.
@@ -802,7 +864,10 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
32 to windowBits to enable zlib and gzip decoding with automatic header
detection, or add 16 to decode only the gzip format (the zlib format will
return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
- crc32 instead of an adler32.
+ CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see
+ below), inflate() will not automatically decode concatenated gzip streams.
+ inflate() will return Z_STREAM_END at the end of the gzip stream. The state
+ would need to be reset to continue decoding a subsequent gzip stream.
inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
@@ -823,7 +888,7 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
Initializes the decompression dictionary from the given uncompressed byte
sequence. This function must be called immediately after a call of inflate,
if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
- can be determined from the adler32 value returned by that call of inflate.
+ can be determined from the Adler-32 value returned by that call of inflate.
The compressor and decompressor must use exactly the same dictionary (see
deflateSetDictionary). For raw inflate, this function can be called at any
time to set the dictionary. If the provided dictionary is smaller than the
@@ -834,7 +899,7 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
- expected one (incorrect adler32 value). inflateSetDictionary does not
+ expected one (incorrect Adler-32 value). inflateSetDictionary does not
perform any decompression: this will be done by subsequent calls of
inflate().
*/
@@ -892,7 +957,7 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
/*
This function is equivalent to inflateEnd followed by inflateInit,
- but does not free and reallocate all the internal decompression state. The
+ but does not free and reallocate the internal decompression state. The
stream will keep attributes that may have been set by inflateInit2.
inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
@@ -904,7 +969,9 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
/*
This function is the same as inflateReset, but it also permits changing
the wrap and window size requests. The windowBits parameter is interpreted
- the same as it is for inflateInit2.
+ the same as it is for inflateInit2. If the window size is changed, then the
+ memory allocated for the window is freed, and the window will be reallocated
+ by inflate() if needed.
inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
stream state was inconsistent (such as zalloc or state being Z_NULL), or if
@@ -956,7 +1023,7 @@ ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
location in the input stream can be determined from avail_in and data_type
as noted in the description for the Z_BLOCK flush parameter for inflate.
- inflateMark returns the value noted above or -1 << 16 if the provided
+ inflateMark returns the value noted above, or -65536 if the provided
source stream state was inconsistent.
*/
@@ -1048,9 +1115,9 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
This routine would normally be used in a utility that reads zip or gzip
files and writes out uncompressed files. The utility would decode the
header and process the trailer on its own, hence this routine expects only
- the raw deflate stream to decompress. This is different from the normal
- behavior of inflate(), which expects either a zlib or gzip header and
- trailer around the deflate stream.
+ the raw deflate stream to decompress. This is different from the default
+ behavior of inflate(), which expects a zlib header and trailer around the
+ deflate stream.
inflateBack() uses two subroutines supplied by the caller that are then
called by inflateBack() for input and output. inflateBack() calls those
@@ -1059,12 +1126,12 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
parameters and return types are defined above in the in_func and out_func
typedefs. inflateBack() will call in(in_desc, &buf) which should return the
number of bytes of provided input, and a pointer to that input in buf. If
- there is no input available, in() must return zero--buf is ignored in that
- case--and inflateBack() will return a buffer error. inflateBack() will call
- out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out()
- should return zero on success, or non-zero on failure. If out() returns
- non-zero, inflateBack() will return with an error. Neither in() nor out()
- are permitted to change the contents of the window provided to
+ there is no input available, in() must return zero -- buf is ignored in that
+ case -- and inflateBack() will return a buffer error. inflateBack() will
+ call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].
+ out() should return zero on success, or non-zero on failure. If out()
+ returns non-zero, inflateBack() will return with an error. Neither in() nor
+ out() are permitted to change the contents of the window provided to
inflateBackInit(), which is also the buffer that out() uses to write from.
The length written by out() will be at most the window size. Any non-zero
amount of input may be provided by in().
@@ -1092,7 +1159,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
using strm->next_in which will be Z_NULL only if in() returned an error. If
strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
non-zero. (in() will always be called before out(), so strm->next_in is
- assured to be defined if out() returns non-zero.) Note that inflateBack()
+ assured to be defined if out() returns non-zero.) Note that inflateBack()
cannot return Z_OK.
*/
@@ -1114,7 +1181,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
7.6: size of z_off_t
Compiler, assembler, and debug options:
- 8: DEBUG
+ 8: ZLIB_DEBUG
9: ASMV or ASMINF -- use ASM code
10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
11: 0 (reserved)
@@ -1164,7 +1231,8 @@ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
the byte length of the source buffer. Upon entry, destLen is the total size
of the destination buffer, which must be at least the value returned by
compressBound(sourceLen). Upon exit, destLen is the actual size of the
- compressed buffer.
+ compressed data. compress() is equivalent to compress2() with a level
+ parameter of Z_DEFAULT_COMPRESSION.
compress returns Z_OK if success, Z_MEM_ERROR if there was not
enough memory, Z_BUF_ERROR if there was not enough room in the output
@@ -1180,7 +1248,7 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
length of the source buffer. Upon entry, destLen is the total size of the
destination buffer, which must be at least the value returned by
compressBound(sourceLen). Upon exit, destLen is the actual size of the
- compressed buffer.
+ compressed data.
compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_BUF_ERROR if there was not enough room in the output buffer,
@@ -1203,7 +1271,7 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
uncompressed data. (The size of the uncompressed data must have been saved
previously by the compressor and transmitted to the decompressor by some
mechanism outside the scope of this compression library.) Upon exit, destLen
- is the actual size of the uncompressed buffer.
+ is the actual size of the uncompressed data.
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
enough memory, Z_BUF_ERROR if there was not enough room in the output
@@ -1212,6 +1280,14 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
buffer with the uncompressed data up to that point.
*/
+ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong *sourceLen));
+/*
+ Same as uncompress, except that sourceLen is a pointer, where the
+ length of the source is *sourceLen. On return, *sourceLen is the number of
+ source bytes consumed.
+*/
+
/* gzip file access functions */
/*
@@ -1290,10 +1366,9 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
default buffer size is 8192 bytes. This function must be called after
gzopen() or gzdopen(), and before any other calls that read or write the
file. The buffer memory allocation is always deferred to the first read or
- write. Two buffers are allocated, either both of the specified size when
- writing, or one of the specified size and the other twice that size when
- reading. A larger buffer size of, for example, 64K or 128K bytes will
- noticeably increase the speed of decompression (reading).
+ write. Three times that size in buffer space is allocated. A larger buffer
+ size of, for example, 64K or 128K bytes will noticeably increase the speed
+ of decompression (reading).
The new buffer size also affects the maximum length for gzprintf().
@@ -1304,10 +1379,12 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
/*
Dynamically update the compression level or strategy. See the description
- of deflateInit2 for the meaning of these parameters.
+ of deflateInit2 for the meaning of these parameters. Previously provided
+ data is flushed before the parameter change.
- gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
- opened for writing.
+ gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not
+ opened for writing, Z_ERRNO if there is an error writing the flushed data,
+ or Z_MEM_ERROR if there is a memory allocation error.
*/
ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
@@ -1335,7 +1412,35 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
case.
gzread returns the number of uncompressed bytes actually read, less than
- len for end of file, or -1 for error.
+ len for end of file, or -1 for error. If len is too large to fit in an int,
+ then nothing is read, -1 is returned, and the error state is set to
+ Z_STREAM_ERROR.
+*/
+
+ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems,
+ gzFile file));
+/*
+ Read up to nitems items of size size from file to buf, otherwise operating
+ as gzread() does. This duplicates the interface of stdio's fread(), with
+ size_t request and return types. If the library defines size_t, then
+ z_size_t is identical to size_t. If not, then z_size_t is an unsigned
+ integer type that can contain a pointer.
+
+ gzfread() returns the number of full items read of size size, or zero if
+ the end of the file was reached and a full item could not be read, or if
+ there was an error. gzerror() must be consulted if zero is returned in
+ order to determine if there was an error. If the multiplication of size and
+ nitems overflows, i.e. the product does not fit in a z_size_t, then nothing
+ is read, zero is returned, and the error state is set to Z_STREAM_ERROR.
+
+ In the event that the end of file is reached and only a partial item is
+ available at the end, i.e. the remaining uncompressed data length is not a
+ multiple of size, then the final partial item is nevetheless read into buf
+ and the end-of-file flag is set. The length of the partial item read is not
+ provided, but could be inferred from the result of gztell(). This behavior
+ is the same as the behavior of fread() implementations in common libraries,
+ but it prevents the direct use of gzfread() to read a concurrently written
+ file, reseting and retrying on end-of-file, when size is not 1.
*/
ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
@@ -1346,19 +1451,33 @@ ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
error.
*/
+ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size,
+ z_size_t nitems, gzFile file));
+/*
+ gzfwrite() writes nitems items of size size from buf to file, duplicating
+ the interface of stdio's fwrite(), with size_t request and return types. If
+ the library defines size_t, then z_size_t is identical to size_t. If not,
+ then z_size_t is an unsigned integer type that can contain a pointer.
+
+ gzfwrite() returns the number of full items written of size size, or zero
+ if there was an error. If the multiplication of size and nitems overflows,
+ i.e. the product does not fit in a z_size_t, then nothing is written, zero
+ is returned, and the error state is set to Z_STREAM_ERROR.
+*/
+
ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
/*
Converts, formats, and writes the arguments to the compressed file under
control of the format string, as in fprintf. gzprintf returns the number of
- uncompressed bytes actually written, or 0 in case of error. The number of
- uncompressed bytes written is limited to 8191, or one less than the buffer
- size given to gzbuffer(). The caller should assure that this limit is not
- exceeded. If it is exceeded, then gzprintf() will return an error (0) with
- nothing written. In this case, there may also be a buffer overflow with
- unpredictable consequences, which is possible only if zlib was compiled with
- the insecure functions sprintf() or vsprintf() because the secure snprintf()
- or vsnprintf() functions were not available. This can be determined using
- zlibCompileFlags().
+ uncompressed bytes actually written, or a negative zlib error code in case
+ of error. The number of uncompressed bytes written is limited to 8191, or
+ one less than the buffer size given to gzbuffer(). The caller should assure
+ that this limit is not exceeded. If it is exceeded, then gzprintf() will
+ return an error (0) with nothing written. In this case, there may also be a
+ buffer overflow with unpredictable consequences, which is possible only if
+ zlib was compiled with the insecure functions sprintf() or vsprintf()
+ because the secure snprintf() or vsnprintf() functions were not available.
+ This can be determined using zlibCompileFlags().
*/
ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
@@ -1418,7 +1537,7 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
If the flush parameter is Z_FINISH, the remaining data is written and the
gzip stream is completed in the output. If gzwrite() is called again, a new
gzip stream will be started in the output. gzread() is able to read such
- concatented gzip streams.
+ concatenated gzip streams.
gzflush should be called only when strictly necessary because it will
degrade compression if called too often.
@@ -1572,7 +1691,7 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
return the updated checksum. If buf is Z_NULL, this function returns the
required initial value for the checksum.
- An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+ An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed
much faster.
Usage example:
@@ -1585,6 +1704,12 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
if (adler != original_adler) error();
*/
+ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf,
+ z_size_t len));
+/*
+ Same as adler32(), but with a size_t length.
+*/
+
/*
ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
z_off_t len2));
@@ -1614,6 +1739,12 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
if (crc != original_crc) error();
*/
+ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf,
+ z_size_t len));
+/*
+ Same as crc32(), but with a size_t length.
+*/
+
/*
ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
@@ -1644,19 +1775,35 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
unsigned char FAR *window,
const char *version,
int stream_size));
-#define deflateInit(strm, level) \
- deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit(strm) \
- inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
-#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
- deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
- (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit2(strm, windowBits) \
- inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
- (int)sizeof(z_stream))
-#define inflateBackInit(strm, windowBits, window) \
- inflateBackInit_((strm), (windowBits), (window), \
- ZLIB_VERSION, (int)sizeof(z_stream))
+#ifdef Z_PREFIX_SET
+# define z_deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+# define z_inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+# define z_inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+#else
+# define deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+# define inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+# define inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+# define inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+#endif
#ifndef Z_SOLO
@@ -1676,10 +1823,10 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
#ifdef Z_PREFIX_SET
# undef z_gzgetc
# define z_gzgetc(g) \
- ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
#else
# define gzgetc(g) \
- ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g))
#endif
/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
@@ -1737,19 +1884,16 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
#endif /* !Z_SOLO */
-/* hack for buggy compilers */
-#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
- struct internal_state {int dummy;};
-#endif
-
/* undocumented functions */
ZEXTERN const char * ZEXPORT zError OF((int));
ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void));
ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int));
+ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp));
ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
-#if defined(_WIN32) && !defined(Z_SOLO)
+#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO)
ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
const char *mode));
#endif
diff --git a/contrib/zlib/zlib.map b/contrib/zlib/zlib.map
index 55c6647..40fa9db 100644
--- a/contrib/zlib/zlib.map
+++ b/contrib/zlib/zlib.map
@@ -1,83 +1,94 @@
-ZLIB_1.2.0 {
- global:
- compressBound;
- deflateBound;
- inflateBack;
- inflateBackEnd;
- inflateBackInit_;
- inflateCopy;
- local:
- deflate_copyright;
- inflate_copyright;
- inflate_fast;
- inflate_table;
- zcalloc;
- zcfree;
- z_errmsg;
- gz_error;
- gz_intmax;
- _*;
-};
-
-ZLIB_1.2.0.2 {
- gzclearerr;
- gzungetc;
- zlibCompileFlags;
-} ZLIB_1.2.0;
-
-ZLIB_1.2.0.8 {
- deflatePrime;
-} ZLIB_1.2.0.2;
-
-ZLIB_1.2.2 {
- adler32_combine;
- crc32_combine;
- deflateSetHeader;
- inflateGetHeader;
-} ZLIB_1.2.0.8;
-
-ZLIB_1.2.2.3 {
- deflateTune;
- gzdirect;
-} ZLIB_1.2.2;
-
-ZLIB_1.2.2.4 {
- inflatePrime;
-} ZLIB_1.2.2.3;
-
-ZLIB_1.2.3.3 {
- adler32_combine64;
- crc32_combine64;
- gzopen64;
- gzseek64;
- gztell64;
- inflateUndermine;
-} ZLIB_1.2.2.4;
-
-ZLIB_1.2.3.4 {
- inflateReset2;
- inflateMark;
-} ZLIB_1.2.3.3;
-
-ZLIB_1.2.3.5 {
- gzbuffer;
- gzoffset;
- gzoffset64;
- gzclose_r;
- gzclose_w;
-} ZLIB_1.2.3.4;
-
-ZLIB_1.2.5.1 {
- deflatePending;
-} ZLIB_1.2.3.5;
-
-ZLIB_1.2.5.2 {
- deflateResetKeep;
- gzgetc_;
- inflateResetKeep;
-} ZLIB_1.2.5.1;
-
-ZLIB_1.2.7.1 {
- inflateGetDictionary;
- gzvprintf;
-} ZLIB_1.2.5.2;
+ZLIB_1.2.0 {
+ global:
+ compressBound;
+ deflateBound;
+ inflateBack;
+ inflateBackEnd;
+ inflateBackInit_;
+ inflateCopy;
+ local:
+ deflate_copyright;
+ inflate_copyright;
+ inflate_fast;
+ inflate_table;
+ zcalloc;
+ zcfree;
+ z_errmsg;
+ gz_error;
+ gz_intmax;
+ _*;
+};
+
+ZLIB_1.2.0.2 {
+ gzclearerr;
+ gzungetc;
+ zlibCompileFlags;
+} ZLIB_1.2.0;
+
+ZLIB_1.2.0.8 {
+ deflatePrime;
+} ZLIB_1.2.0.2;
+
+ZLIB_1.2.2 {
+ adler32_combine;
+ crc32_combine;
+ deflateSetHeader;
+ inflateGetHeader;
+} ZLIB_1.2.0.8;
+
+ZLIB_1.2.2.3 {
+ deflateTune;
+ gzdirect;
+} ZLIB_1.2.2;
+
+ZLIB_1.2.2.4 {
+ inflatePrime;
+} ZLIB_1.2.2.3;
+
+ZLIB_1.2.3.3 {
+ adler32_combine64;
+ crc32_combine64;
+ gzopen64;
+ gzseek64;
+ gztell64;
+ inflateUndermine;
+} ZLIB_1.2.2.4;
+
+ZLIB_1.2.3.4 {
+ inflateReset2;
+ inflateMark;
+} ZLIB_1.2.3.3;
+
+ZLIB_1.2.3.5 {
+ gzbuffer;
+ gzoffset;
+ gzoffset64;
+ gzclose_r;
+ gzclose_w;
+} ZLIB_1.2.3.4;
+
+ZLIB_1.2.5.1 {
+ deflatePending;
+} ZLIB_1.2.3.5;
+
+ZLIB_1.2.5.2 {
+ deflateResetKeep;
+ gzgetc_;
+ inflateResetKeep;
+} ZLIB_1.2.5.1;
+
+ZLIB_1.2.7.1 {
+ inflateGetDictionary;
+ gzvprintf;
+} ZLIB_1.2.5.2;
+
+ZLIB_1.2.9 {
+ inflateCodesUsed;
+ inflateValidate;
+ uncompress2;
+ gzfread;
+ gzfwrite;
+ deflateGetDictionary;
+ adler32_z;
+ crc32_z;
+} ZLIB_1.2.7.1;
diff --git a/contrib/zlib/zutil.c b/contrib/zlib/zutil.c
index 23d2ebe..a76c6b0 100644
--- a/contrib/zlib/zutil.c
+++ b/contrib/zlib/zutil.c
@@ -1,5 +1,5 @@
/* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
+ * Copyright (C) 1995-2017 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -10,21 +10,18 @@
# include "gzguts.h"
#endif
-#ifndef NO_DUMMY_DECL
-struct internal_state {int dummy;}; /* for buggy compilers */
-#endif
-
z_const char * const z_errmsg[10] = {
-"need dictionary", /* Z_NEED_DICT 2 */
-"stream end", /* Z_STREAM_END 1 */
-"", /* Z_OK 0 */
-"file error", /* Z_ERRNO (-1) */
-"stream error", /* Z_STREAM_ERROR (-2) */
-"data error", /* Z_DATA_ERROR (-3) */
-"insufficient memory", /* Z_MEM_ERROR (-4) */
-"buffer error", /* Z_BUF_ERROR (-5) */
-"incompatible version",/* Z_VERSION_ERROR (-6) */
-""};
+ (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */
+ (z_const char *)"stream end", /* Z_STREAM_END 1 */
+ (z_const char *)"", /* Z_OK 0 */
+ (z_const char *)"file error", /* Z_ERRNO (-1) */
+ (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */
+ (z_const char *)"data error", /* Z_DATA_ERROR (-3) */
+ (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */
+ (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */
+ (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */
+ (z_const char *)""
+};
const char * ZEXPORT zlibVersion()
@@ -61,7 +58,7 @@ uLong ZEXPORT zlibCompileFlags()
case 8: flags += 2 << 6; break;
default: flags += 3 << 6;
}
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
flags += 1 << 8;
#endif
#if defined(ASMV) || defined(ASMINF)
@@ -115,8 +112,8 @@ uLong ZEXPORT zlibCompileFlags()
return flags;
}
-#ifdef DEBUG
-
+#ifdef ZLIB_DEBUG
+#include <stdlib.h>
# ifndef verbose
# define verbose 0
# endif
@@ -219,9 +216,11 @@ local ptr_table table[MAX_PTR];
voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
{
- voidpf buf = opaque; /* just to make some compilers happy */
+ voidpf buf;
ulg bsize = (ulg)items*size;
+ (void)opaque;
+
/* If we allocate less than 65520 bytes, we assume that farmalloc
* will return a usable pointer which doesn't have to be normalized.
*/
@@ -244,6 +243,9 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
{
int n;
+
+ (void)opaque;
+
if (*(ush*)&ptr != 0) { /* object < 64K */
farfree(ptr);
return;
@@ -259,7 +261,6 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
next_ptr--;
return;
}
- ptr = opaque; /* just to make some compilers happy */
Assert(0, "zcfree: ptr not found");
}
@@ -278,13 +279,13 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
{
- if (opaque) opaque = 0; /* to make compiler happy */
+ (void)opaque;
return _halloc((long)items, size);
}
void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
{
- if (opaque) opaque = 0; /* to make compiler happy */
+ (void)opaque;
_hfree(ptr);
}
@@ -306,7 +307,7 @@ voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
unsigned items;
unsigned size;
{
- if (opaque) items += size - size; /* make compiler happy */
+ (void)opaque;
return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
(voidpf)calloc(items, size);
}
@@ -315,8 +316,8 @@ void ZLIB_INTERNAL zcfree (opaque, ptr)
voidpf opaque;
voidpf ptr;
{
+ (void)opaque;
free(ptr);
- if (opaque) return; /* make compiler happy */
}
#endif /* MY_ZCALLOC */
diff --git a/contrib/zlib/zutil.h b/contrib/zlib/zutil.h
index 24ab06b..b079ea6 100644
--- a/contrib/zlib/zutil.h
+++ b/contrib/zlib/zutil.h
@@ -1,5 +1,5 @@
/* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -36,7 +36,9 @@
#ifndef local
# define local static
#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
+/* since "static" is used to mean two completely different things in C, we
+ define "local" for the non-static meaning of "static", for readability
+ (compile with -Dlocal if your debugger can't find static symbols) */
typedef unsigned char uch;
typedef uch FAR uchf;
@@ -98,28 +100,38 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
#endif
#ifdef AMIGA
-# define OS_CODE 0x01
+# define OS_CODE 1
#endif
#if defined(VAXC) || defined(VMS)
-# define OS_CODE 0x02
+# define OS_CODE 2
# define F_OPEN(name, mode) \
fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
#endif
+#ifdef __370__
+# if __TARGET_LIB__ < 0x20000000
+# define OS_CODE 4
+# elif __TARGET_LIB__ < 0x40000000
+# define OS_CODE 11
+# else
+# define OS_CODE 8
+# endif
+#endif
+
#if defined(ATARI) || defined(atarist)
-# define OS_CODE 0x05
+# define OS_CODE 5
#endif
#ifdef OS2
-# define OS_CODE 0x06
+# define OS_CODE 6
# if defined(M_I86) && !defined(Z_SOLO)
# include <malloc.h>
# endif
#endif
#if defined(MACOS) || defined(TARGET_OS_MAC)
-# define OS_CODE 0x07
+# define OS_CODE 7
# ifndef Z_SOLO
# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
# include <unix.h> /* for fdopen */
@@ -131,18 +143,24 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
# endif
#endif
-#ifdef TOPS20
-# define OS_CODE 0x0a
+#ifdef __acorn
+# define OS_CODE 13
#endif
-#ifdef WIN32
-# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */
-# define OS_CODE 0x0b
-# endif
+#if defined(WIN32) && !defined(__CYGWIN__)
+# define OS_CODE 10
+#endif
+
+#ifdef _BEOS_
+# define OS_CODE 16
+#endif
+
+#ifdef __TOS_OS400__
+# define OS_CODE 18
#endif
-#ifdef __50SERIES /* Prime/PRIMOS */
-# define OS_CODE 0x0f
+#ifdef __APPLE__
+# define OS_CODE 19
#endif
#if defined(_BEOS_) || defined(RISCOS)
@@ -177,7 +195,7 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
/* common defaults */
#ifndef OS_CODE
-# define OS_CODE 0x03 /* assume Unix */
+# define OS_CODE 3 /* assume Unix */
#endif
#ifndef F_OPEN
@@ -216,7 +234,7 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
#endif
/* Diagnostic functions */
-#ifdef DEBUG
+#ifdef ZLIB_DEBUG
# include <stdio.h>
extern int ZLIB_INTERNAL z_verbose;
extern void ZLIB_INTERNAL z_error OF((char *m));
diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist
index c2a33e7..ab77f25 100644
--- a/etc/mtree/BSD.tests.dist
+++ b/etc/mtree/BSD.tests.dist
@@ -53,6 +53,168 @@
usr.bin
..
usr.sbin
+ dtrace
+ common
+ aggs
+ ..
+ arithmetic
+ ..
+ arrays
+ ..
+ assocs
+ ..
+ begin
+ ..
+ bitfields
+ ..
+ buffering
+ ..
+ builtinvar
+ ..
+ cg
+ ..
+ clauses
+ ..
+ cpc
+ ..
+ decls
+ ..
+ drops
+ ..
+ dtraceUtil
+ ..
+ end
+ ..
+ enum
+ ..
+ error
+ ..
+ exit
+ ..
+ fbtprovider
+ ..
+ funcs
+ ..
+ grammar
+ ..
+ include
+ ..
+ inline
+ ..
+ io
+ ..
+ ip
+ ..
+ java_api
+ ..
+ json
+ ..
+ lexer
+ ..
+ llquantize
+ ..
+ mdb
+ ..
+ mib
+ ..
+ misc
+ ..
+ multiaggs
+ ..
+ offsetof
+ ..
+ operators
+ ..
+ pid
+ ..
+ plockstat
+ ..
+ pointers
+ ..
+ pragma
+ ..
+ predicates
+ ..
+ preprocessor
+ ..
+ print
+ ..
+ printa
+ ..
+ printf
+ ..
+ privs
+ ..
+ probes
+ ..
+ proc
+ ..
+ profile-n
+ ..
+ providers
+ ..
+ raise
+ ..
+ rates
+ ..
+ safety
+ ..
+ scalars
+ ..
+ sched
+ ..
+ scripting
+ ..
+ sdt
+ ..
+ sizeof
+ ..
+ speculation
+ ..
+ stability
+ ..
+ stack
+ ..
+ stackdepth
+ ..
+ stop
+ ..
+ strlen
+ ..
+ strtoll
+ ..
+ struct
+ ..
+ syscall
+ ..
+ sysevent
+ ..
+ tick-n
+ ..
+ trace
+ ..
+ tracemem
+ ..
+ translators
+ ..
+ typedef
+ ..
+ types
+ ..
+ uctf
+ ..
+ union
+ ..
+ usdt
+ ..
+ ustack
+ ..
+ vars
+ ..
+ version
+ ..
+ ..
+ ..
..
..
etc
@@ -123,6 +285,8 @@
..
ssp
..
+ setjmp
+ ..
stdio
..
stdlib
@@ -148,6 +312,8 @@
..
libnv
..
+ libpam
+ ..
librt
..
libthr
@@ -206,6 +372,10 @@
..
file
..
+ fs
+ tmpfs
+ ..
+ ..
geom
class
concat
@@ -241,6 +411,8 @@
..
..
kqueue
+ libkqueue
+ ..
..
mac
bsdextended
@@ -396,8 +568,8 @@
..
..
..
- bsdcat
- ..
+ bsdcat
+ ..
calendar
..
cmp
diff --git a/etc/mtree/BSD.var.dist b/etc/mtree/BSD.var.dist
index 4082ad4..2bbc9db 100644
--- a/etc/mtree/BSD.var.dist
+++ b/etc/mtree/BSD.var.dist
@@ -28,7 +28,7 @@
/set gname=wheel
backups
..
- cache mode=0755
+ cache mode=0755
..
crash
..
diff --git a/gnu/lib/tests/Makefile b/gnu/lib/tests/Makefile
index 256e245..a0e63e5 100644
--- a/gnu/lib/tests/Makefile
+++ b/gnu/lib/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/gnu/lib
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/gnu/tests/Makefile b/gnu/tests/Makefile
index de42fae..a0e63e5 100644
--- a/gnu/tests/Makefile
+++ b/gnu/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/gnu
-
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/gnu/usr.bin/diff/tests/Makefile b/gnu/usr.bin/diff/tests/Makefile
index aa1629d..16439b3 100644
--- a/gnu/usr.bin/diff/tests/Makefile
+++ b/gnu/usr.bin/diff/tests/Makefile
@@ -1,17 +1,14 @@
# $FreeBSD$
-TESTSRC= ${.CURDIR}/../../../../contrib/netbsd-tests/usr.bin/diff
-.PATH: ${TESTSRC}
+TESTSRC= ${SRCTOP}/contrib/netbsd-tests/usr.bin/diff
-.include <bsd.own.mk>
-
-TESTSDIR= ${TESTSBASE}/gnu/usr.bin/diff
-ATF_TESTS_SH= diff_test
+NETBSD_ATF_TESTS_SH= diff_test
ATF_TESTS_SH_SED_diff_test= -e 's/t_diff/`basename $$0`/g'
-ATF_TESTS_SH_SRC_diff_test= t_diff.sh
FILESDIR= ${TESTSDIR}
FILES+= d_mallocv1.in
FILES+= d_mallocv2.in
+.include <netbsd-tests.test.mk>
+
.include <bsd.test.mk>
diff --git a/gnu/usr.bin/gdb/gdbserver/Makefile b/gnu/usr.bin/gdb/gdbserver/Makefile
index f5cfd4c..fa46e6d 100644
--- a/gnu/usr.bin/gdb/gdbserver/Makefile
+++ b/gnu/usr.bin/gdb/gdbserver/Makefile
@@ -3,7 +3,7 @@
# Not elf specific so don't install in /usr/libexec/elf
BINDIR=/usr/bin
-GDBDIR= ${.CURDIR}/../../../../contrib/gdb
+GDBDIR= ${SRCTOP}/contrib/gdb
.PATH: ${GDBDIR}/gdb/signals
.PATH: ${GDBDIR}/gdb/gdbserver
.PATH: ${GDBDIR}/gdb
diff --git a/gnu/usr.bin/tests/Makefile b/gnu/usr.bin/tests/Makefile
index eebbff6..a0e63e5 100644
--- a/gnu/usr.bin/tests/Makefile
+++ b/gnu/usr.bin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/gnu/usr.bin
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/include/stdlib.h b/include/stdlib.h
index b482302..b354673 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -298,7 +298,7 @@ void srandomdev(void);
long long
strtonum(const char *, long long, long long, const char **);
-/* Deprecated interfaces, to be removed in FreeBSD 6.0. */
+/* Deprecated interfaces, to be removed. */
__int64_t
strtoq(const char *, char **, int);
__uint64_t
diff --git a/lib/atf/libatf-c++/tests/Makefile b/lib/atf/libatf-c++/tests/Makefile
index 5f5a575..a069bb1 100644
--- a/lib/atf/libatf-c++/tests/Makefile
+++ b/lib/atf/libatf-c++/tests/Makefile
@@ -2,10 +2,9 @@
.include <bsd.init.mk>
-TESTSDIR= ${TESTSBASE}/lib/atf/libatf-c++
TESTS_SUBDIRS= detail
-ATF= ${.CURDIR:H:H:H:H}/contrib/atf
+ATF= ${SRCTOP}/contrib/atf
.PATH: ${ATF}/atf-c++
.PATH: ${ATF}/atf-c++/detail
diff --git a/lib/atf/libatf-c++/tests/detail/Makefile b/lib/atf/libatf-c++/tests/detail/Makefile
index 69c3e7b..f7d672e 100644
--- a/lib/atf/libatf-c++/tests/detail/Makefile
+++ b/lib/atf/libatf-c++/tests/detail/Makefile
@@ -4,7 +4,7 @@
TESTSDIR= ${TESTSBASE}/lib/atf/libatf-c++/detail
-ATF= ${.CURDIR:H:H:H:H:H}/contrib/atf
+ATF= ${SRCTOP}/contrib/atf
.PATH: ${ATF}/atf-c++/detail
CFLAGS+= -DATF_C_TESTS_BASE='"${TESTSBASE}/lib/atf/libatf-c"'
diff --git a/lib/atf/libatf-c/tests/Makefile b/lib/atf/libatf-c/tests/Makefile
index d5b6dc0..e864c2e 100644
--- a/lib/atf/libatf-c/tests/Makefile
+++ b/lib/atf/libatf-c/tests/Makefile
@@ -2,10 +2,9 @@
.include <bsd.init.mk>
-TESTSDIR= ${TESTSBASE}/lib/atf/libatf-c
TESTS_SUBDIRS= detail
-ATF= ${.CURDIR:H:H:H:H}/contrib/atf
+ATF= ${SRCTOP}/contrib/atf
.PATH: ${ATF}/atf-c
.PATH: ${ATF}/atf-c/detail
diff --git a/lib/atf/libatf-c/tests/detail/Makefile b/lib/atf/libatf-c/tests/detail/Makefile
index 02c1f2b..e47fd56 100644
--- a/lib/atf/libatf-c/tests/detail/Makefile
+++ b/lib/atf/libatf-c/tests/detail/Makefile
@@ -4,7 +4,7 @@
TESTSDIR= ${TESTSBASE}/lib/atf/libatf-c/detail
-ATF= ${.CURDIR:H:H:H:H:H}/contrib/atf
+ATF= ${SRCTOP}/contrib/atf
.PATH: ${ATF}/atf-c/detail
CFLAGS+= -DATF_INCLUDEDIR='"${INCLUDEDIR}"'
diff --git a/lib/atf/tests/Makefile b/lib/atf/tests/Makefile
index 7bc96c9..dc79bb3 100644
--- a/lib/atf/tests/Makefile
+++ b/lib/atf/tests/Makefile
@@ -4,7 +4,7 @@
TESTSDIR= ${TESTSBASE}/lib/atf
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
SUBDIR= test-programs
diff --git a/lib/atf/tests/test-programs/Makefile b/lib/atf/tests/test-programs/Makefile
index b0c1c23..aa30826 100644
--- a/lib/atf/tests/test-programs/Makefile
+++ b/lib/atf/tests/test-programs/Makefile
@@ -5,7 +5,7 @@
TESTSDIR= ${TESTSBASE}/lib/atf/test-programs
KYUAFILE= yes
-ATF= ${.CURDIR:H:H:H:H}/contrib/atf
+ATF= ${SRCTOP}/contrib/atf
.PATH: ${ATF}/test-programs
CFLAGS+= -I${ATF}
diff --git a/lib/csu/amd64/Makefile b/lib/csu/amd64/Makefile
index 80d14a7..7341aec 100644
--- a/lib/csu/amd64/Makefile
+++ b/lib/csu/amd64/Makefile
@@ -1,12 +1,12 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../common
+.PATH: ${.CURDIR:H}/common
SRCS= crt1.c crti.S crtn.S
OBJS= ${SRCS:N*.h:R:S/$/.o/g}
OBJS+= Scrt1.o gcrt1.o
-CFLAGS+= -I${.CURDIR}/../common \
- -I${.CURDIR}/../../libc/include
+CFLAGS+= -I${.CURDIR:H}/common \
+ -I${SRCTOP}/lib/libc/include
CFLAGS+= -fno-omit-frame-pointer
all: ${OBJS}
diff --git a/lib/csu/arm/Makefile b/lib/csu/arm/Makefile
index bf4c7b1..ca21fdb 100644
--- a/lib/csu/arm/Makefile
+++ b/lib/csu/arm/Makefile
@@ -1,12 +1,12 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../common
+.PATH: ${.CURDIR:H}/common
SRCS= crt1.c crti.S crtn.S
OBJS= ${SRCS:N*.h:R:S/$/.o/g}
OBJS+= Scrt1.o gcrt1.o
-CFLAGS+= -I${.CURDIR}/../common \
- -I${.CURDIR}/../../libc/include
+CFLAGS+= -I${.CURDIR:H}/common \
+ -I${SRCTOP}/lib/libc/include
all: ${OBJS}
diff --git a/lib/csu/i386-elf/Makefile b/lib/csu/i386-elf/Makefile
index f26db15..dd387b9 100644
--- a/lib/csu/i386-elf/Makefile
+++ b/lib/csu/i386-elf/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../common
+.PATH: ${.CURDIR:H}/common
SRCS= crti.S crtn.S
FILES= ${SRCS:N*.h:R:S/$/.o/g} gcrt1.o crt1.o Scrt1.o
@@ -8,8 +8,8 @@ FILESOWN= ${LIBOWN}
FILESGRP= ${LIBGRP}
FILESMODE= ${LIBMODE}
FILESDIR= ${LIBDIR}
-CFLAGS+= -I${.CURDIR}/../common \
- -I${.CURDIR}/../../libc/include
+CFLAGS+= -I${.CURDIR:H}/common \
+ -I${SRCTOP}/lib/libc/include
CLEANFILES= ${FILES} crt1_c.o crt1_s.o gcrt1_c.o Scrt1_c.o
CLEANFILES+= crt1_c.s gcrt1_c.s Scrt1_c.s
diff --git a/lib/csu/mips/Makefile b/lib/csu/mips/Makefile
index bf4c7b1..ca21fdb 100644
--- a/lib/csu/mips/Makefile
+++ b/lib/csu/mips/Makefile
@@ -1,12 +1,12 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../common
+.PATH: ${.CURDIR:H}/common
SRCS= crt1.c crti.S crtn.S
OBJS= ${SRCS:N*.h:R:S/$/.o/g}
OBJS+= Scrt1.o gcrt1.o
-CFLAGS+= -I${.CURDIR}/../common \
- -I${.CURDIR}/../../libc/include
+CFLAGS+= -I${.CURDIR:H}/common \
+ -I${SRCTOP}/lib/libc/include
all: ${OBJS}
diff --git a/lib/csu/powerpc/Makefile b/lib/csu/powerpc/Makefile
index bf4c7b1..ca21fdb 100644
--- a/lib/csu/powerpc/Makefile
+++ b/lib/csu/powerpc/Makefile
@@ -1,12 +1,12 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../common
+.PATH: ${.CURDIR:H}/common
SRCS= crt1.c crti.S crtn.S
OBJS= ${SRCS:N*.h:R:S/$/.o/g}
OBJS+= Scrt1.o gcrt1.o
-CFLAGS+= -I${.CURDIR}/../common \
- -I${.CURDIR}/../../libc/include
+CFLAGS+= -I${.CURDIR:H}/common \
+ -I${SRCTOP}/lib/libc/include
all: ${OBJS}
diff --git a/lib/csu/powerpc64/Makefile b/lib/csu/powerpc64/Makefile
index 123391e..b579db0 100644
--- a/lib/csu/powerpc64/Makefile
+++ b/lib/csu/powerpc64/Makefile
@@ -1,12 +1,12 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../common
+.PATH: ${.CURDIR:H}/common
SRCS= crt1.c crti.S crtn.S
OBJS= ${SRCS:N*.h:R:S/$/.o/g}
OBJS+= Scrt1.o gcrt1.o
-CFLAGS+= -I${.CURDIR}/../common \
- -I${.CURDIR}/../../libc/include \
+CFLAGS+= -I${.CURDIR:H}/common \
+ -I${SRCTOP}/lib/libc/include \
-mlongcall
all: ${OBJS}
diff --git a/lib/csu/sparc64/Makefile b/lib/csu/sparc64/Makefile
index 7f8dd7a..6561997 100644
--- a/lib/csu/sparc64/Makefile
+++ b/lib/csu/sparc64/Makefile
@@ -1,11 +1,12 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../common
+.PATH: ${.CURDIR:H}/common
SRCS= crt1.c crti.S crtn.S
OBJS= ${SRCS:N*.h:R:S/$/.o/g}
OBJS+= Scrt1.o gcrt1.o
-CFLAGS+= -I${.CURDIR}/../common -I${.CURDIR}/../../libc/include
+CFLAGS+= -I${.CURDIR:H}/common \
+ -I${SRCTOP}/lib/libc/include
all: ${OBJS}
diff --git a/lib/libalias/libalias/Makefile b/lib/libalias/libalias/Makefile
index 00b4ed8..c192bc5 100644
--- a/lib/libalias/libalias/Makefile
+++ b/lib/libalias/libalias/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../../../sys/netinet/libalias
+.PATH: ${SRCTOP}/sys/netinet/libalias
LIB= alias
SHLIBDIR?= /lib
diff --git a/lib/libalias/modules/Makefile b/lib/libalias/modules/Makefile
index dc66ad2..24333ea6 100644
--- a/lib/libalias/modules/Makefile
+++ b/lib/libalias/modules/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-.include "${.CURDIR}/../../../sys/modules/libalias/modules/modules.inc"
+.include "${SRCTOP}/sys/modules/libalias/modules/modules.inc"
SUBDIR= ${MODULES}
diff --git a/lib/libalias/modules/Makefile.inc b/lib/libalias/modules/Makefile.inc
index 23df02d..730f374 100644
--- a/lib/libalias/modules/Makefile.inc
+++ b/lib/libalias/modules/Makefile.inc
@@ -1,6 +1,6 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../../../../sys/netinet/libalias
+.PATH: ${SRCTOP}/sys/netinet/libalias
SHLIBDIR?= /lib
LIB?= alias_${NAME}
diff --git a/lib/libarchive/Makefile b/lib/libarchive/Makefile
index ffb2e97..2cf1633 100644
--- a/lib/libarchive/Makefile
+++ b/lib/libarchive/Makefile
@@ -1,7 +1,7 @@
# $FreeBSD$
.include <bsd.own.mk>
-LIBARCHIVEDIR= ${.CURDIR}/../../contrib/libarchive
+LIBARCHIVEDIR= ${SRCTOP}/contrib/libarchive
LIB= archive
DPADD= ${LIBZ} ${LIBBZ2} ${LIBLZMA} ${LIBPTHREAD} ${LIBBSDXML}
diff --git a/lib/libarchive/config_freebsd.h b/lib/libarchive/config_freebsd.h
index c82c8cc..24e2d75 100644
--- a/lib/libarchive/config_freebsd.h
+++ b/lib/libarchive/config_freebsd.h
@@ -39,6 +39,7 @@
#define HAVE_ACL_SET_FILE 1
#define HAVE_ACL_SET_LINK_NP 1
#define HAVE_ACL_USER 1
+#define HAVE_ACL_TYPE_NFS4 1
#define HAVE_ARC4RANDOM_BUF 1
#define HAVE_EXTATTR_GET_FILE 1
#define HAVE_EXTATTR_LIST_FILE 1
diff --git a/lib/libarchive/tests/Makefile b/lib/libarchive/tests/Makefile
index 58c642e..eed7b97 100644
--- a/lib/libarchive/tests/Makefile
+++ b/lib/libarchive/tests/Makefile
@@ -21,11 +21,12 @@ CFLAGS+= -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1
.PATH: ${LIBARCHIVEDIR}/libarchive/test
TESTS_SRCS= \
- test_acl_freebsd_nfs4.c \
- test_acl_freebsd_posix1e.c \
test_acl_nfs4.c \
test_acl_pax.c \
+ test_acl_platform_nfs4.c \
+ test_acl_platform_posix1e.c \
test_acl_posix1e.c \
+ test_acl_text.c \
test_archive_api_feature.c \
test_archive_clear_error.c \
test_archive_cmdline.c \
@@ -74,7 +75,7 @@ TESTS_SRCS= \
test_compat_plexus_archiver_tar.c \
test_compat_solaris_tar_acl.c \
test_compat_solaris_pax_sparse.c \
- test_compat_star_acl_posix1e.c \
+ test_compat_star_acl.c \
test_compat_tar_hardlink.c \
test_compat_uudecode.c \
test_compat_uudecode_large.c \
@@ -319,7 +320,8 @@ list.h: ${TESTS_SRCS} Makefile
CLEANFILES+= list.h list.h.tmp
FILES+= README
-FILES+= test_acl_pax.tar.uu
+FILES+= test_acl_pax_posix1e.tar.uu
+FILES+= test_acl_pax_nfs4.tar.uu
FILES+= test_archive_string_conversion.txt.Z.uu
FILES+= test_compat_bzip2_1.tbz.uu
FILES+= test_compat_bzip2_2.tbz.uu
@@ -327,6 +329,7 @@ FILES+= test_compat_cpio_1.cpio.uu
FILES+= test_compat_gtar_1.tar.uu
FILES+= test_compat_gtar_2.tar.uu
FILES+= test_compat_gzip_1.tgz.uu
+FILES+= test_compat_gzip_2.tgz.uu
FILES+= test_compat_lz4_1.tar.lz4.uu
FILES+= test_compat_lz4_2.tar.lz4.uu
FILES+= test_compat_lz4_3.tar.lz4.uu
@@ -339,7 +342,6 @@ FILES+= test_compat_lz4_B6.tar.lz4.uu
FILES+= test_compat_lz4_B6BD.tar.lz4.uu
FILES+= test_compat_lz4_B7.tar.lz4.uu
FILES+= test_compat_lz4_B7BD.tar.lz4.uu
-FILES+= test_compat_gzip_2.tgz.uu
FILES+= test_compat_lzip_1.tlz.uu
FILES+= test_compat_lzip_2.tlz.uu
FILES+= test_compat_lzma_1.tlz.uu
@@ -356,6 +358,7 @@ FILES+= test_compat_plexus_archiver_tar.tar.uu
FILES+= test_compat_solaris_pax_sparse_1.pax.Z.uu
FILES+= test_compat_solaris_pax_sparse_2.pax.Z.uu
FILES+= test_compat_solaris_tar_acl.tar.uu
+FILES+= test_compat_star_acl_nfs4.tar.uu
FILES+= test_compat_star_acl_posix1e.tar.uu
FILES+= test_compat_tar_hardlink_1.tar.uu
FILES+= test_compat_uudecode_large.tar.Z.uu
@@ -486,7 +489,7 @@ FILES+= test_read_format_rar_compress_normal.rar.uu
FILES+= test_read_format_rar_encryption_data.rar.uu
FILES+= test_read_format_rar_encryption_header.rar.uu
FILES+= test_read_format_rar_encryption_partially.rar.uu
-FILES+= test_read_format_rar_invalid1.rar.uu
+FILES+= test_read_format_rar_invalid1.rar.uu
FILES+= test_read_format_rar_multi_lzss_blocks.rar.uu
FILES+= test_read_format_rar_multivolume.part0001.rar.uu
FILES+= test_read_format_rar_multivolume.part0002.rar.uu
@@ -521,7 +524,7 @@ FILES+= test_read_format_zip_filename_koi8r.zip.uu
FILES+= test_read_format_zip_filename_utf8_jp.zip.uu
FILES+= test_read_format_zip_filename_utf8_ru.zip.uu
FILES+= test_read_format_zip_filename_utf8_ru2.zip.uu
-FILES+= test_read_format_zip_high_compression.zip.uu
+FILES+= test_read_format_zip_high_compression.zip.uu
FILES+= test_read_format_zip_jar.jar.uu
FILES+= test_read_format_zip_length_at_end.zip.uu
FILES+= test_read_format_zip_mac_metadata.zip.uu
@@ -547,6 +550,7 @@ FILES+= test_read_large_splitted_rar_ab.uu
FILES+= test_read_large_splitted_rar_ac.uu
FILES+= test_read_large_splitted_rar_ad.uu
FILES+= test_read_large_splitted_rar_ae.uu
+FILES+= test_read_pax_schily_xattr.tar.uu
FILES+= test_read_splitted_rar_aa.uu
FILES+= test_read_splitted_rar_ab.uu
FILES+= test_read_splitted_rar_ac.uu
diff --git a/lib/libauditd/Makefile b/lib/libauditd/Makefile
index cee1850..0c93cc6 100644
--- a/lib/libauditd/Makefile
+++ b/lib/libauditd/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
#
-OPENBSMDIR= ${.CURDIR}/../../contrib/openbsm
+OPENBSMDIR= ${SRCTOP}/contrib/openbsm
LIBAUDITDDIR= ${OPENBSMDIR}/libauditd
LIBBSMDIR= ${OPENBSMDIR}/libbsm
diff --git a/lib/libbegemot/Makefile b/lib/libbegemot/Makefile
index 27baf56..0f917c6 100644
--- a/lib/libbegemot/Makefile
+++ b/lib/libbegemot/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-LIBBEGEMOT_DIR=${.CURDIR}/../../contrib/libbegemot
+LIBBEGEMOT_DIR=${SRCTOP}/contrib/libbegemot
.PATH: ${LIBBEGEMOT_DIR}
diff --git a/lib/libblocksruntime/Makefile b/lib/libblocksruntime/Makefile
index 01a78fe..3dee852 100644
--- a/lib/libblocksruntime/Makefile
+++ b/lib/libblocksruntime/Makefile
@@ -5,7 +5,7 @@ SHLIB_MAJOR=0
CFLAGS+=-I${.CURDIR}
WARNS?= 2
-.PATH: ${.CURDIR}/../../contrib/compiler-rt/BlocksRuntime
+.PATH: ${SRCTOP}/contrib/compiler-rt/BlocksRuntime
INCS= Block.h Block_private.h
SRCS= data.c runtime.c
diff --git a/lib/libbluetooth/Makefile b/lib/libbluetooth/Makefile
index 7e21892..7a2e134 100644
--- a/lib/libbluetooth/Makefile
+++ b/lib/libbluetooth/Makefile
@@ -5,7 +5,7 @@ LIB= bluetooth
MAN= bluetooth.3
WARNS?= 2
-CFLAGS+= -I${.CURDIR} -I${.CURDIR}/../../sys
+CFLAGS+= -I${.CURDIR} -I${SRCTOP}/sys
SHLIB_MAJOR= 4
diff --git a/lib/libbsm/Makefile b/lib/libbsm/Makefile
index 2e0dbe1..90fbc27 100644
--- a/lib/libbsm/Makefile
+++ b/lib/libbsm/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
#
-OPENBSMDIR= ${.CURDIR}/../../contrib/openbsm
+OPENBSMDIR= ${SRCTOP}/contrib/openbsm
LIBBSMDIR= ${OPENBSMDIR}/libbsm
LIB= bsm
diff --git a/lib/libbsnmp/libbsnmp/Makefile b/lib/libbsnmp/libbsnmp/Makefile
index a756f90..708e3ee 100644
--- a/lib/libbsnmp/libbsnmp/Makefile
+++ b/lib/libbsnmp/libbsnmp/Makefile
@@ -4,7 +4,7 @@
.include <bsd.own.mk>
-CONTRIB= ${.CURDIR}/../../../contrib/bsnmp/lib
+CONTRIB= ${SRCTOP}/contrib/bsnmp/lib
.PATH: ${CONTRIB}
LIB= bsnmp
diff --git a/lib/libbz2/Makefile b/lib/libbz2/Makefile
index b505927..2521009 100644
--- a/lib/libbz2/Makefile
+++ b/lib/libbz2/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-BZ2DIR= ${.CURDIR}/../../contrib/bzip2
+BZ2DIR= ${SRCTOP}/contrib/bzip2
.PATH: ${BZ2DIR}
LIB= bz2
diff --git a/lib/libc++/Makefile b/lib/libc++/Makefile
index 8c804a3..48cfe27 100644
--- a/lib/libc++/Makefile
+++ b/lib/libc++/Makefile
@@ -2,9 +2,9 @@
.include <bsd.own.mk>
-LIBCXXRTDIR= ${.CURDIR}/../../contrib/libcxxrt
-HDRDIR= ${.CURDIR}/../../contrib/libc++/include
-SRCDIR= ${.CURDIR}/../../contrib/libc++/src
+LIBCXXRTDIR= ${SRCTOP}/contrib/libcxxrt
+HDRDIR= ${SRCTOP}/contrib/libc++/include
+SRCDIR= ${SRCTOP}/contrib/libc++/src
CXXINCLUDEDIR= ${INCLUDEDIR}/c++/v${SHLIB_MAJOR}
.PATH: ${SRCDIR}
diff --git a/lib/libc/db/hash/hash_page.c b/lib/libc/db/hash/hash_page.c
index 8040419..f9a7289 100644
--- a/lib/libc/db/hash/hash_page.c
+++ b/lib/libc/db/hash/hash_page.c
@@ -572,7 +572,9 @@ __get_page(HTAB *hashp, char *p, u_int32_t bucket, int is_bucket, int is_disk,
int
__put_page(HTAB *hashp, char *p, u_int32_t bucket, int is_bucket, int is_bitmap)
{
- int fd, page, size, wsize;
+ int fd, page, size;
+ ssize_t wsize;
+ char pbuf[MAX_BSIZE];
size = hashp->BSIZE;
if ((hashp->fp == -1) && open_temp(hashp))
@@ -582,15 +584,18 @@ __put_page(HTAB *hashp, char *p, u_int32_t bucket, int is_bucket, int is_bitmap)
if (hashp->LORDER != BYTE_ORDER) {
int i, max;
+ memcpy(pbuf, p, size);
if (is_bitmap) {
max = hashp->BSIZE >> 2; /* divide by 4 */
for (i = 0; i < max; i++)
- M_32_SWAP(((int *)p)[i]);
+ M_32_SWAP(((int *)pbuf)[i]);
} else {
- max = ((u_int16_t *)p)[0] + 2;
+ uint16_t *bp = (uint16_t *)(void *)pbuf;
+ max = bp[0] + 2;
for (i = 0; i <= max; i++)
- M_16_SWAP(((u_int16_t *)p)[i]);
+ M_16_SWAP(bp[i]);
}
+ p = pbuf;
}
if (is_bucket)
page = BUCKET_TO_PAGE(bucket);
diff --git a/lib/libc/gen/nice.3 b/lib/libc/gen/nice.3
index 9c39b78..8ce13af 100644
--- a/lib/libc/gen/nice.3
+++ b/lib/libc/gen/nice.3
@@ -28,7 +28,7 @@
.\" @(#)nice.3 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
-.Dd June 4, 1993
+.Dd February 28, 2015
.Dt NICE 3
.Os
.Sh NAME
@@ -48,20 +48,48 @@ This interface is obsoleted by
.Pp
The
.Fn nice
-function obtains the scheduling priority of the process
-from the system and sets it to the priority value specified in
-.Fa incr .
+function adds
+.Fa incr
+to the scheduling priority of the process.
The priority is a value in the range -20 to 20.
The default priority is 0; lower priorities cause more favorable scheduling.
Only the super-user may lower priorities.
.Pp
Children inherit the priority of their parent processes via
.Xr fork 2 .
+.Sh RETURN VALUES
+Upon successful completion,
+.Fn nice
+returns 0, and
+.Va errno
+is unchanged.
+Otherwise, \-1 is returned, the process' nice value is not changed, and
+.Va errno
+is set to indicate the error.
+.Sh ERRORS
+The
+.Fn nice
+function will fail if:
+.Bl -tag -width Er
+.It Bq Er EPERM
+The
+.Fa incr
+argument is negative and the caller does not have appropriate privileges.
+.El
.Sh SEE ALSO
.Xr nice 1 ,
.Xr fork 2 ,
.Xr setpriority 2 ,
.Xr renice 8
+.Sh STANDARDS
+The
+.Fn nice
+function conforms to
+.St -p1003.1-2008
+except for the return value.
+This implementation returns 0 upon successful completion but
+the standard requires returning the new nice value,
+which could be \-1.
.Sh HISTORY
A
.Fn nice
diff --git a/lib/libc/gen/nice.c b/lib/libc/gen/nice.c
index e8375e8..ba9524b 100644
--- a/lib/libc/gen/nice.c
+++ b/lib/libc/gen/nice.c
@@ -43,14 +43,20 @@ __FBSDID("$FreeBSD$");
* Backwards compatible nice.
*/
int
-nice(incr)
- int incr;
+nice(int incr)
{
- int prio;
+ int saverrno, prio;
+ saverrno = errno;
errno = 0;
prio = getpriority(PRIO_PROCESS, 0);
- if (prio == -1 && errno)
+ if (prio == -1 && errno != 0)
return (-1);
- return (setpriority(PRIO_PROCESS, 0, prio + incr));
+ if (setpriority(PRIO_PROCESS, 0, prio + incr) == -1) {
+ if (errno == EACCES)
+ errno = EPERM;
+ return (-1);
+ }
+ errno = saverrno;
+ return (0);
}
diff --git a/lib/libc/string/memmem.3 b/lib/libc/string/memmem.3
index 73c267c..fb341f4 100644
--- a/lib/libc/string/memmem.3
+++ b/lib/libc/string/memmem.3
@@ -26,7 +26,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd August 24, 2005
+.Dd May 26, 2015
.Dt MEMMEM 3
.Os
.Sh NAME
@@ -51,14 +51,12 @@ in the byte string
.Fa big .
.Sh RETURN VALUES
If
-.Fa big_len
-is smaller than
-.Fa little_len ,
-if
.Fa little_len
-is 0, if
-.Fa big_len
-is 0 or if
+is zero
+.Fa big
+is returned (that is, an empty little is deemed to match at the beginning of
+big);
+if
.Fa little
occurs nowhere in
.Fa big ,
@@ -84,3 +82,11 @@ function first appeared in
.Sh BUGS
This function was broken in Linux libc up to and including version 5.0.9
and in GNU libc prior to version 2.1.
+Prior to
+.Fx 11.0
+.Nm
+returned
+.Dv NULL
+when
+.Fa little_len
+equals 0.
diff --git a/lib/libc/string/memmem.c b/lib/libc/string/memmem.c
index 72e6517..3fd05df 100644
--- a/lib/libc/string/memmem.c
+++ b/lib/libc/string/memmem.c
@@ -42,9 +42,9 @@ memmem(const void *l, size_t l_len, const void *s, size_t s_len)
const char *cl = (const char *)l;
const char *cs = (const char *)s;
- /* we need something to compare */
- if (l_len == 0 || s_len == 0)
- return NULL;
+ /* empty "s" matches the beginning of "l" */
+ if (s_len == 0)
+ return (void *)cl;
/* "s" must be smaller or equal to "l" */
if (l_len < s_len)
diff --git a/lib/libc/sys/recv.2 b/lib/libc/sys/recv.2
index e0a1f04..7ad7aa7 100644
--- a/lib/libc/sys/recv.2
+++ b/lib/libc/sys/recv.2
@@ -28,7 +28,7 @@
.\" @(#)recv.2 8.3 (Berkeley) 2/21/94
.\" $FreeBSD$
.\"
-.Dd March 19, 2013
+.Dd February 3, 2017
.Dt RECV 2
.Os
.Sh NAME
@@ -218,57 +218,10 @@ with no data buffer provided immediately after an
.Fn accept
system call.
.Pp
-Open file descriptors are now passed as ancillary data for
+With
.Dv AF_UNIX
-domain sockets, with
-.Fa cmsg_level
-set to
-.Dv SOL_SOCKET
-and
-.Fa cmsg_type
-set to
-.Dv SCM_RIGHTS .
-The close-on-exec flag on received descriptors is set according to the
-.Dv MSG_CMSG_CLOEXEC
-flag passed to
-.Fn recvmsg .
-.Pp
-Process credentials can also be passed as ancillary data for
-.Dv AF_UNIX
-domain sockets using a
-.Fa cmsg_type
-of
-.Dv SCM_CREDS .
-In this case,
-.Fa cmsg_data
-should be a structure of type
-.Fa cmsgcred ,
-which is defined in
-.In sys/socket.h
-as follows:
-.Bd -literal
-struct cmsgcred {
- pid_t cmcred_pid; /* PID of sending process */
- uid_t cmcred_uid; /* real UID of sending process */
- uid_t cmcred_euid; /* effective UID of sending process */
- gid_t cmcred_gid; /* real GID of sending process */
- short cmcred_ngroups; /* number or groups */
- gid_t cmcred_groups[CMGROUP_MAX]; /* groups */
-};
-.Ed
-.Pp
-If a sender supplies ancillary data with enough space for the above struct
-tagged as
-.Dv SCM_CREDS
-control message type to the
-.Fn sendmsg
-system call, then kernel will fill in the credential information of the
-sending process and deliver it to the receiver.
-Since receiver usually has no control over a sender, this method of retrieving
-credential information isn't reliable.
-For reliable retrieval of remote side credentials it is advised to use the
-.Dv LOCAL_CREDS
-socket option on the receiving socket.
+domain sockets, ancillary data can be used to pass file descriptors and
+process credentials.
See
.Xr unix 4
for details.
diff --git a/lib/libc/tests/Makefile b/lib/libc/tests/Makefile
index 9b89152..3a7adc4 100644
--- a/lib/libc/tests/Makefile
+++ b/lib/libc/tests/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc
-
SUBDIR= tls_dso
TESTS_SUBDIRS= c063
@@ -17,6 +15,7 @@ TESTS_SUBDIRS+= nss
TESTS_SUBDIRS+= regex
TESTS_SUBDIRS+= resolv
TESTS_SUBDIRS+= rpc
+TESTS_SUBDIRS+= setjmp
TESTS_SUBDIRS+= stdio
TESTS_SUBDIRS+= stdlib
TESTS_SUBDIRS+= string
diff --git a/lib/libc/tests/Makefile.netbsd-tests b/lib/libc/tests/Makefile.netbsd-tests
index 56472fb..18b0276 100644
--- a/lib/libc/tests/Makefile.netbsd-tests
+++ b/lib/libc/tests/Makefile.netbsd-tests
@@ -1,8 +1,8 @@
# $FreeBSD$
-OBJTOP?= ${.OBJDIR:H:H:H:H}
-SRCTOP?= ${.CURDIR:H:H:H:H}
-TESTSRC?= ${SRCTOP}/contrib/netbsd-tests/lib/libc/${.CURDIR:T}
+TESTSRC:= ${SRCTOP}/contrib/netbsd-tests/${RELDIR:C/libc\/tests/libc/}
+
+TESTSDIR:= ${TESTSBASE}/${RELDIR:C/libc\/tests/libc/}
WARNS?= 2
diff --git a/lib/libc/tests/c063/Makefile b/lib/libc/tests/c063/Makefile
index b81f575..c890eda 100644
--- a/lib/libc/tests/c063/Makefile
+++ b/lib/libc/tests/c063/Makefile
@@ -1,8 +1,6 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/lib/libc/c063
-
-#TODO: t_o_search, t_utimensat
+#TODO: t_o_search
NETBSD_ATF_TESTS_C= faccessat_test
NETBSD_ATF_TESTS_C+= fchmodat_test
@@ -18,6 +16,7 @@ NETBSD_ATF_TESTS_C+= readlinkat_test
NETBSD_ATF_TESTS_C+= renameat_test
NETBSD_ATF_TESTS_C+= symlinkat_test
NETBSD_ATF_TESTS_C+= unlinkat_test
+NETBSD_ATF_TESTS_C+= utimensat
CFLAGS+= -D_INCOMPLETE_XOPEN_C063
diff --git a/lib/libc/tests/db/Makefile b/lib/libc/tests/db/Makefile
index ed1d6ca..c056384 100644
--- a/lib/libc/tests/db/Makefile
+++ b/lib/libc/tests/db/Makefile
@@ -1,18 +1,20 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/lib/libc/db
-
BINDIR= ${TESTSDIR}
PROGS= h_db
+PROGS+= h_lfsr
FILESDIR= ${TESTSDIR}
-FILES= README
+FILES+= README
+NETBSD_ATF_TESTS_C+= db_hash_seq_test
NETBSD_ATF_TESTS_SH+= db_test
ATF_TESTS_SH_SED_db_test= -e 's,/bin/csh,/bin/cat,g'
+CFLAGS+= -I${SRCTOP}/lib/libc/db/btree
+
.include "../Makefile.netbsd-tests"
.include <bsd.test.mk>
diff --git a/lib/libc/tests/gen/Makefile b/lib/libc/tests/gen/Makefile
index 91097ef..ac9f8e0 100644
--- a/lib/libc/tests/gen/Makefile
+++ b/lib/libc/tests/gen/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/gen
-
ATF_TESTS_C+= arc4random_test
ATF_TESTS_C+= fmtcheck2_test
ATF_TESTS_C+= fmtmsg_test
@@ -14,10 +12,20 @@ ATF_TESTS_C+= popen_test
ATF_TESTS_C+= posix_spawn_test
ATF_TESTS_C+= wordexp_test
-# TODO: t_closefrom, t_cpuset, t_fmtcheck, t_randomid, t_sleep
+# TODO: t_closefrom, t_cpuset, t_fmtcheck, t_randomid,
# TODO: t_siginfo (fixes require further inspection)
# TODO: t_sethostname_test (consistently screws up the hostname)
+CFLAGS+= -DTEST_LONG_DOUBLE
+
+# Not sure why this isn't defined for all architectures, since most
+# have long double.
+.if ${MACHINE_CPUARCH} == "aarch64" || \
+ ${MACHINE_CPUARCH} == "amd64" || \
+ ${MACHINE_CPUARCH} == "i386"
+CFLAGS+= -D__HAVE_LONG_DOUBLE
+.endif
+
NETBSD_ATF_TESTS_C= alarm_test
NETBSD_ATF_TESTS_C+= assert_test
NETBSD_ATF_TESTS_C+= basedirname_test
diff --git a/lib/libc/tests/gen/execve/Makefile b/lib/libc/tests/gen/execve/Makefile
index 2106a15..5e8bc6f 100644
--- a/lib/libc/tests/gen/execve/Makefile
+++ b/lib/libc/tests/gen/execve/Makefile
@@ -1,13 +1,7 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR:H:H:H:H:H}
-SRCTOP= ${.CURDIR:H:H:H:H:H}
-TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libc/gen/${.CURDIR:T}
-
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/gen/execve
-
NETBSD_ATF_TESTS_C= execve_test
.include "../../Makefile.netbsd-tests"
diff --git a/lib/libc/tests/gen/posix_spawn/Makefile b/lib/libc/tests/gen/posix_spawn/Makefile
index f20bbd7..9bb2cf1 100644
--- a/lib/libc/tests/gen/posix_spawn/Makefile
+++ b/lib/libc/tests/gen/posix_spawn/Makefile
@@ -1,13 +1,7 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR:H:H:H:H:H}
-SRCTOP= ${.CURDIR:H:H:H:H:H}
-TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libc/gen/${.CURDIR:T}
-
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/gen/posix_spawn
-
BINDIR= ${TESTSDIR}
NETBSD_ATF_TESTS_C= fileactions_test
diff --git a/lib/libc/tests/hash/Makefile b/lib/libc/tests/hash/Makefile
index 4c64c70..7fb8fb6 100644
--- a/lib/libc/tests/hash/Makefile
+++ b/lib/libc/tests/hash/Makefile
@@ -2,11 +2,11 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/hash
-
NETBSD_ATF_TESTS_C=
.if ${MK_OPENSSL} != "no"
+# XXX: doesn't compile
+#NETBSD_ATF_TESTS_C+= hmac_test
NETBSD_ATF_TESTS_C+= sha2_test
.endif
@@ -29,8 +29,8 @@ LDADD+= -lmd
DPADD.sha2_test+= ${LIBCRYPTO}
LDADD.sha2_test+= -lcrypto
-CFLAGS.sha2_test+= -I${.CURDIR}/../../../../crypto/openssh/openbsd-compat
-CFLAGS.sha2_test+= -I${.CURDIR}/../../../../crypto/openssh
+CFLAGS.sha2_test+= -I${SRCTOP}/crypto/openssh/openbsd-compat
+CFLAGS.sha2_test+= -I${SRCTOP}/crypto/openssh
.include "../Makefile.netbsd-tests"
diff --git a/lib/libc/tests/inet/Makefile b/lib/libc/tests/inet/Makefile
index a15b96a..fa4499c 100644
--- a/lib/libc/tests/inet/Makefile
+++ b/lib/libc/tests/inet/Makefile
@@ -2,9 +2,8 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/inet
-
-NETBSD_ATF_TESTS_C= inet_network_test
+NETBSD_ATF_TESTS_C+= inet_addr_test
+NETBSD_ATF_TESTS_C+= inet_network_test
.include "../Makefile.netbsd-tests"
diff --git a/lib/libc/tests/locale/Makefile b/lib/libc/tests/locale/Makefile
index d15fd5e..e05cbae 100644
--- a/lib/libc/tests/locale/Makefile
+++ b/lib/libc/tests/locale/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/locale
-
ATF_TESTS_C+= btowc_test
ATF_TESTS_C+= c16rtomb_test
ATF_TESTS_C+= iswctype_test
diff --git a/lib/libc/tests/net/Makefile b/lib/libc/tests/net/Makefile
index fb76f26..bee179f 100644
--- a/lib/libc/tests/net/Makefile
+++ b/lib/libc/tests/net/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/lib/libc/net
-
ATF_TESTS_C+= ether_test
ATF_TESTS_C+= eui64_aton_test
ATF_TESTS_C+= eui64_ntoa_test
diff --git a/lib/libc/tests/net/getaddrinfo/Makefile b/lib/libc/tests/net/getaddrinfo/Makefile
index a6b9eb1..d21d336 100644
--- a/lib/libc/tests/net/getaddrinfo/Makefile
+++ b/lib/libc/tests/net/getaddrinfo/Makefile
@@ -1,13 +1,9 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR:H:H:H:H:H}
-SRCTOP= ${.CURDIR:H:H:H:H:H}
TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libc/net/${.CURDIR:T}
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/net/getaddrinfo
-
BINDIR= ${TESTSDIR}
.error "This testcase needs to be ported to FreeBSD (the output from getaddrinfo_test differs from NetBSD)"
diff --git a/lib/libc/tests/regex/Makefile b/lib/libc/tests/regex/Makefile
index 37b3277..fa60f6e 100644
--- a/lib/libc/tests/regex/Makefile
+++ b/lib/libc/tests/regex/Makefile
@@ -4,8 +4,6 @@
BINDIR= ${TESTSDIR}
-TESTSDIR= ${TESTSBASE}/lib/libc/regex
-
IMPLEMENTATION?= -DREGEX_SPENCER
CFLAGS.h_regex+=-I${TESTSRC} -I${.CURDIR:H:H}/regex
diff --git a/lib/libc/tests/rpc/Makefile b/lib/libc/tests/rpc/Makefile
index 153626b..f9819d3 100644
--- a/lib/libc/tests/rpc/Makefile
+++ b/lib/libc/tests/rpc/Makefile
@@ -1,6 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/lib/libc/rpc
SRCS.xdr_test= ${RPCSRC:.x=_xdr.c} t_xdr.c ${RPCSRC:.x=.h} \
h_testbits.h
diff --git a/lib/libc/tests/setjmp/Makefile b/lib/libc/tests/setjmp/Makefile
index e303726..ac962c2 100644
--- a/lib/libc/tests/setjmp/Makefile
+++ b/lib/libc/tests/setjmp/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/lib/libc/setjmp
-
NETBSD_ATF_TESTS_C= setjmp_test
NETBSD_ATF_TESTS_C+= threadjmp_test
@@ -10,4 +8,6 @@ LDADD.threadjmp_test+= -lpthread
WARNS?= 4
+.include "../Makefile.netbsd-tests"
+
.include <bsd.test.mk>
diff --git a/lib/libc/tests/ssp/Makefile b/lib/libc/tests/ssp/Makefile
index cf767ce..ec7a82a 100644
--- a/lib/libc/tests/ssp/Makefile
+++ b/lib/libc/tests/ssp/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/ssp
-
NO_WERROR=
WARNS?= 2
@@ -26,7 +24,11 @@ PROGS+= h_getcwd
PROGS+= h_memcpy
PROGS+= h_memmove
PROGS+= h_memset
+# This testcase doesn't run properly when not compiled with -fsantize=bounds
+# with clang, which is currently contingent on a compiler_rt update
+.if ${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} < 30500
PROGS+= h_raw
+.endif
PROGS+= h_read
PROGS+= h_readlink
PROGS+= h_snprintf
diff --git a/lib/libc/tests/stdio/Makefile b/lib/libc/tests/stdio/Makefile
index 06ceb46..495bb17 100644
--- a/lib/libc/tests/stdio/Makefile
+++ b/lib/libc/tests/stdio/Makefile
@@ -2,15 +2,13 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/stdio
-
ATF_TESTS_C+= fdopen_test
ATF_TESTS_C+= fmemopen2_test
ATF_TESTS_C+= fopen2_test
ATF_TESTS_C+= freopen_test
ATF_TESTS_C+= getdelim_test
ATF_TESTS_C+= mkostemp_test
-ATF_TESTS_C+= open_memstream_test
+ATF_TESTS_C+= open_memstream2_test
ATF_TESTS_C+= open_wmemstream_test
ATF_TESTS_C+= perror_test
ATF_TESTS_C+= print_positional_test
@@ -26,6 +24,7 @@ NETBSD_ATF_TESTS_C+= fmemopen_test
NETBSD_ATF_TESTS_C+= fopen_test
NETBSD_ATF_TESTS_C+= fputc_test
NETBSD_ATF_TESTS_C+= mktemp_test
+NETBSD_ATF_TESTS_C+= open_memstream_test
NETBSD_ATF_TESTS_C+= popen_test
NETBSD_ATF_TESTS_C+= printf_test
NETBSD_ATF_TESTS_C+= scanf_test
diff --git a/lib/libc/tests/stdio/open_memstream_test.c b/lib/libc/tests/stdio/open_memstream2_test.c
index 3c9e3ec..3c9e3ec 100644
--- a/lib/libc/tests/stdio/open_memstream_test.c
+++ b/lib/libc/tests/stdio/open_memstream2_test.c
diff --git a/lib/libc/tests/stdio/printbasic_test.c b/lib/libc/tests/stdio/printbasic_test.c
index 7f7c6cb..322e747 100644
--- a/lib/libc/tests/stdio/printbasic_test.c
+++ b/lib/libc/tests/stdio/printbasic_test.c
@@ -78,22 +78,19 @@ _testfmt(const char *result, const char *argstr, const char *fmt,...)
va_copy(ap2, ap);
smash_stack();
vsnprintf(s, sizeof(s), fmt, ap);
- if (strcmp(result, s) != 0) {
- atf_tc_fail(
- "printf(\"%s\", %s) ==> [%s], expected [%s]",
- fmt, argstr, s, result);
- }
+ ATF_CHECK_MSG(strcmp(result, s) == 0,
+ "printf(\"%s\", %s) ==> [%s], expected [%s]",
+ fmt, argstr, s, result);
smash_stack();
mbstowcs(ws, s, BUF - 1);
mbstowcs(wfmt, fmt, BUF - 1);
mbstowcs(wresult, result, BUF - 1);
vswprintf(ws, sizeof(ws) / sizeof(ws[0]), wfmt, ap2);
- if (wcscmp(wresult, ws) != 0) {
- atf_tc_fail(
- "wprintf(\"%ls\", %s) ==> [%ls], expected [%ls]",
- wfmt, argstr, ws, wresult);
- }
+ ATF_CHECK_MSG(wcscmp(wresult, ws) == 0,
+ "wprintf(\"%ls\", %s) ==> [%ls], expected [%ls]",
+ wfmt, argstr, ws, wresult);
+
va_end(ap);
va_end(ap2);
}
@@ -114,6 +111,11 @@ ATF_TC_BODY(int_within_limits, tc)
testfmt("-1", "%jd", (intmax_t)-1);
testfmt(S_UINT64MAX, "%ju", UINT64_MAX);
+ if (sizeof(ptrdiff_t) != sizeof(uintmax_t))
+ atf_tc_expect_fail("the %%t qualifier is broken on 32-bit "
+ "platforms where there's a mismatch between ptrdiff_t and "
+ "uintmax_t's type width; bug # 191674");
+
testfmt("-1", "%td", (ptrdiff_t)-1);
testfmt(S_SIZEMAX, "%tu", (size_t)-1);
diff --git a/lib/libc/tests/stdio/printfloat_test.c b/lib/libc/tests/stdio/printfloat_test.c
index 8c02bec..6655680 100644
--- a/lib/libc/tests/stdio/printfloat_test.c
+++ b/lib/libc/tests/stdio/printfloat_test.c
@@ -70,22 +70,19 @@ _testfmt(const char *result, const char *argstr, const char *fmt,...)
va_copy(ap2, ap);
smash_stack();
vsnprintf(s, sizeof(s), fmt, ap);
- if (strcmp(result, s) != 0) {
- atf_tc_fail(
- "printf(\"%s\", %s) ==> [%s], expected [%s]",
- fmt, argstr, s, result);
- }
+ ATF_CHECK_MSG(strcmp(result, s) == 0,
+ "printf(\"%s\", %s) ==> [%s], expected [%s]",
+ fmt, argstr, s, result);
smash_stack();
mbstowcs(ws, s, BUF - 1);
mbstowcs(wfmt, fmt, BUF - 1);
mbstowcs(wresult, result, BUF - 1);
vswprintf(ws, sizeof(ws) / sizeof(ws[0]), wfmt, ap2);
- if (wcscmp(wresult, ws) != 0) {
- atf_tc_fail(
- "wprintf(\"%ls\", %s) ==> [%ls], expected [%ls]",
- wfmt, argstr, ws, wresult);
- }
+ ATF_CHECK_MSG(wcscmp(wresult, ws) == 0,
+ "wprintf(\"%ls\", %s) ==> [%ls], expected [%ls]",
+ wfmt, argstr, ws, wresult);
+
va_end(ap);
va_end(ap2);
}
@@ -318,7 +315,7 @@ ATF_TC_BODY(hexadecimal_floating_point, tc)
testfmt("0x1p-1074", "%a", 0x1p-1074);
testfmt("0x1.2345p-1024", "%a", 0x1.2345p-1024);
-#if (LDBL_MANT_DIG == 64) && !defined(__i386__)
+#if (LDBL_MANT_DIG == 64)
testfmt("0x1.921fb54442d18468p+1", "%La", 0x3.243f6a8885a308dp0L);
testfmt("0x1p-16445", "%La", 0x1p-16445L);
testfmt("0x1.30ecap-16381", "%La", 0x9.8765p-16384L);
diff --git a/lib/libc/tests/stdlib/Makefile b/lib/libc/tests/stdlib/Makefile
index 15d8cbc..1548fac 100644
--- a/lib/libc/tests/stdlib/Makefile
+++ b/lib/libc/tests/stdlib/Makefile
@@ -10,9 +10,15 @@ ATF_TESTS_CXX+= cxa_thread_atexit_test
ATF_TESTS_CXX+= cxa_thread_atexit_nothr_test
.endif
-TESTSDIR= ${TESTSBASE}/lib/libc/stdlib
+# Not sure why this isn't defined for all architectures, since most
+# have long double.
+.if ${MACHINE_CPUARCH} == "aarch64" || \
+ ${MACHINE_CPUARCH} == "amd64" || \
+ ${MACHINE_CPUARCH} == "i386"
+CFLAGS+= -D__HAVE_LONG_DOUBLE
+.endif
-# TODO: t_getenv_thread, t_mi_vector_hash
+# TODO: t_getenv_thread, t_mi_vector_hash, t_strtoi
NETBSD_ATF_TESTS_C+= abs_test
NETBSD_ATF_TESTS_C+= atoi_test
NETBSD_ATF_TESTS_C+= div_test
diff --git a/lib/libc/tests/string/Makefile b/lib/libc/tests/string/Makefile
index 3f97edc..14044f4 100644
--- a/lib/libc/tests/string/Makefile
+++ b/lib/libc/tests/string/Makefile
@@ -5,8 +5,6 @@ ATF_TESTS_C+= strerror2_test
ATF_TESTS_C+= wcscasecmp_test
ATF_TESTS_C+= wcsnlen_test
-TESTSDIR= ${TESTSBASE}/lib/libc/string
-
# TODO: popcount, stresep
NETBSD_ATF_TESTS_C+= memchr_test
diff --git a/lib/libc/tests/sys/Makefile b/lib/libc/tests/sys/Makefile
index 39aec1f..be2f4e7 100644
--- a/lib/libc/tests/sys/Makefile
+++ b/lib/libc/tests/sys/Makefile
@@ -2,13 +2,12 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/sys
-
ATF_TESTS_C+= queue_test
# TODO: clone, lwp_create, lwp_ctl, posix_fadvise, recvmmsg,
# swapcontext
NETBSD_ATF_TESTS_C+= access_test
+NETBSD_ATF_TESTS_C+= bind_test
NETBSD_ATF_TESTS_C+= chroot_test
NETBSD_ATF_TESTS_C+= clock_gettime_test
NETBSD_ATF_TESTS_C+= connect_test
@@ -21,6 +20,7 @@ NETBSD_ATF_TESTS_C+= getlogin_test
NETBSD_ATF_TESTS_C+= getpid_test
NETBSD_ATF_TESTS_C+= getrusage_test
NETBSD_ATF_TESTS_C+= getsid_test
+NETBSD_ATF_TESTS_C+= getsockname_test
NETBSD_ATF_TESTS_C+= gettimeofday_test
NETBSD_ATF_TESTS_C+= issetugid_test
NETBSD_ATF_TESTS_C+= kevent_test
@@ -43,6 +43,7 @@ NETBSD_ATF_TESTS_C+= nanosleep_test
NETBSD_ATF_TESTS_C+= pipe_test
NETBSD_ATF_TESTS_C+= pipe2_test
NETBSD_ATF_TESTS_C+= poll_test
+NETBSD_ATF_TESTS_C+= posix_fallocate_test
NETBSD_ATF_TESTS_C+= revoke_test
NETBSD_ATF_TESTS_C+= select_test
NETBSD_ATF_TESTS_C+= setrlimit_test
@@ -57,6 +58,9 @@ NETBSD_ATF_TESTS_C+= truncate_test
NETBSD_ATF_TESTS_C+= ucontext_test
NETBSD_ATF_TESTS_C+= umask_test
NETBSD_ATF_TESTS_C+= unlink_test
+NETBSD_ATF_TESTS_C+= wait_test
+NETBSD_ATF_TESTS_C+= wait_noproc_test
+NETBSD_ATF_TESTS_C+= wait_noproc_wnohang_test
NETBSD_ATF_TESTS_C+= write_test
DPADD.getpid_test+= ${LIBPTHREAD}
@@ -64,8 +68,13 @@ LDADD.getpid_test+= -lpthread
DPADD.timer_create_test+= ${LIBRT}
LDADD.timer_create_test+= -lrt
+CSTD?= c99
+
.include "../Makefile.netbsd-tests"
+SRCS.mlock_test+= mlock_helper.c
+SRCS.setrlimit_test+= mlock_helper.c
+
.if ${COMPILER_TYPE} == "gcc"
WARNS?= 3
.else
diff --git a/lib/libc/tests/sys/mlock_helper.c b/lib/libc/tests/sys/mlock_helper.c
new file mode 100644
index 0000000..7fa40d1
--- /dev/null
+++ b/lib/libc/tests/sys/mlock_helper.c
@@ -0,0 +1,114 @@
+/*-
+ * Copyright (C) 2016 Bryan Drewery <bdrewery@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Helper for mlock(3) to avoid EAGAIN errors
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
+#include <atf-c.h>
+#include <errno.h>
+#include <stdio.h>
+#include <limits.h>
+
+#define VM_MAX_WIRED "vm.max_wired"
+
+static void
+vm_max_wired_sysctl(int *old_value, int *new_value)
+{
+ size_t old_len;
+ size_t new_len = (new_value == NULL ? 0 : sizeof(int));
+
+ if (old_value == NULL)
+ printf("Setting the new value to %d\n", *new_value);
+ else {
+ ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, NULL, &old_len,
+ new_value, new_len) == 0,
+ "sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno));
+ }
+
+ ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, old_value, &old_len,
+ new_value, new_len) == 0,
+ "sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno));
+
+ if (old_value != NULL)
+ printf("Saved the old value (%d)\n", *old_value);
+}
+
+void
+set_vm_max_wired(int new_value)
+{
+ FILE *fp;
+ int old_value;
+
+ fp = fopen(VM_MAX_WIRED, "w");
+ if (fp == NULL) {
+ atf_tc_skip("could not open %s for writing: %s",
+ VM_MAX_WIRED, strerror(errno));
+ return;
+ }
+
+ vm_max_wired_sysctl(&old_value, NULL);
+
+ ATF_REQUIRE_MSG(fprintf(fp, "%d", old_value) > 0,
+ "saving %s failed", VM_MAX_WIRED);
+
+ fclose(fp);
+
+ vm_max_wired_sysctl(NULL, &new_value);
+}
+
+void
+restore_vm_max_wired(void)
+{
+ FILE *fp;
+ int saved_max_wired;
+
+ fp = fopen(VM_MAX_WIRED, "r");
+ if (fp == NULL) {
+ perror("fopen failed\n");
+ return;
+ }
+
+ if (fscanf(fp, "%d", &saved_max_wired) != 1) {
+ perror("fscanf failed\n");
+ fclose(fp);
+ return;
+ }
+
+ fclose(fp);
+ printf("old value in %s: %d\n", VM_MAX_WIRED, saved_max_wired);
+
+ if (saved_max_wired == 0) /* This will cripple the test host */
+ return;
+
+ vm_max_wired_sysctl(NULL, &saved_max_wired);
+}
diff --git a/lib/libc/tests/termios/Makefile b/lib/libc/tests/termios/Makefile
index 9a3fd66..0495d68 100644
--- a/lib/libc/tests/termios/Makefile
+++ b/lib/libc/tests/termios/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/termios
-
NETBSD_ATF_TESTS_C= tcsetpgrp_test
.include "../Makefile.netbsd-tests"
diff --git a/lib/libc/tests/time/Makefile b/lib/libc/tests/time/Makefile
index c2a55df..feb543d 100644
--- a/lib/libc/tests/time/Makefile
+++ b/lib/libc/tests/time/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/time
-
NETBSD_ATF_TESTS_C= mktime_test
NETBSD_ATF_TESTS_C+= strptime_test
diff --git a/lib/libc/tests/tls/Makefile b/lib/libc/tests/tls/Makefile
index e224895..b6b6719 100644
--- a/lib/libc/tests/tls/Makefile
+++ b/lib/libc/tests/tls/Makefile
@@ -2,7 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/tls
.if !defined(NO_PIC)
SUBDIR+= dso
.endif
diff --git a/lib/libc/tests/tls/dso/Makefile b/lib/libc/tests/tls/dso/Makefile
index 466f950..9b698cd 100644
--- a/lib/libc/tests/tls/dso/Makefile
+++ b/lib/libc/tests/tls/dso/Makefile
@@ -1,7 +1,6 @@
# $FreeBSD$
OBJTOP= ${.OBJDIR:H:H:H:H:H}
-SRCTOP= ${.CURDIR:H:H:H:H:H}
TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libc/tls/${.CURDIR:T}
LIB= h_tls_dlopen
diff --git a/lib/libc/tests/ttyio/Makefile b/lib/libc/tests/ttyio/Makefile
index a1f320d..242f332 100644
--- a/lib/libc/tests/ttyio/Makefile
+++ b/lib/libc/tests/ttyio/Makefile
@@ -2,8 +2,6 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib/libc/ttyio
-
# TODO: ptm_test
NETBSD_ATF_TESTS_C= ttyio_test
diff --git a/lib/libc_nonshared/Makefile b/lib/libc_nonshared/Makefile
index 4c2a945..d32f365 100644
--- a/lib/libc_nonshared/Makefile
+++ b/lib/libc_nonshared/Makefile
@@ -6,7 +6,7 @@
# bsd.lib.mk doesn't have an easy way to express that.
NO_PROFILE?=
.include <bsd.own.mk>
-NO_PIC=
+NO_PIC=
# -fpic on some platforms, -fPIC on others.
CFLAGS+=${PICFLAG} -DPIC -fvisibility=hidden
@@ -18,9 +18,9 @@ LIBC_NONSHARED_SRCS=
SRCS= __stub.c
.if ${MK_ICONV} == "yes"
-.PATH: ${.CURDIR}/../libc/iconv
+.PATH: ${SRCTOP}/lib/libc/iconv
.include "Makefile.iconv"
-CFLAGS+=-I${.CURDIR}/../libc/iconv
+CFLAGS+=-I${SRCTOP}/lib/libc/iconv
.endif
SRCS+= ${LIBC_NONSHARED_SRCS}
diff --git a/lib/libcam/Makefile b/lib/libcam/Makefile
index 9a21dde..af28912 100644
--- a/lib/libcam/Makefile
+++ b/lib/libcam/Makefile
@@ -36,11 +36,10 @@ MLINKS+= cam.3 cam_open_device.3 \
cam_cdbparse.3 csio_encode_visit.3 \
cam_cdbparse.3 buff_encode_visit.3
-.PATH: ${.CURDIR}/../../sys/cam/scsi ${.CURDIR}/../../sys/cam/ata \
- ${.CURDIR}/../../sys/cam
+.PATH: ${SRCTOP}/sys/cam/scsi ${SRCTOP}/sys/cam/ata \
+ ${SRCTOP}/sys/cam
-SDIR= ${.CURDIR}/../../sys
-CFLAGS+= -I${.CURDIR} -I${SDIR}
+CFLAGS+= -I${.CURDIR} -I${SRCTOP}/sys
SHLIB_MAJOR= 6
diff --git a/lib/libcom_err/Makefile b/lib/libcom_err/Makefile
index 78014ad..c19b2a8 100644
--- a/lib/libcom_err/Makefile
+++ b/lib/libcom_err/Makefile
@@ -4,7 +4,7 @@ LIB= com_err
SRCS= com_err.c error.c
INCS= ${COM_ERRDIR}/com_err.h ${COM_ERRDIR}/com_right.h
MAN= com_err.3
-COM_ERRDIR= ${.CURDIR}/../../contrib/com_err
+COM_ERRDIR= ${SRCTOP}/contrib/com_err
CFLAGS+= -I${COM_ERRDIR}
LDFLAGS= -Wl,--no-undefined
diff --git a/lib/libcompat/Makefile b/lib/libcompat/Makefile
index fca86c7..a7d56a7 100644
--- a/lib/libcompat/Makefile
+++ b/lib/libcompat/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
LIB= compat
-CFLAGS+=-DLIBC_SCCS -DSYSLIBC_SCCS -I${.CURDIR}/../libc/locale
+CFLAGS+=-DLIBC_SCCS -DSYSLIBC_SCCS -I${SRCTOP}/lib/libc/locale
NO_PIC=
WARNS?= 0
diff --git a/lib/libcrypt/tests/Makefile b/lib/libcrypt/tests/Makefile
index 65ebd66..8e3fc2e 100644
--- a/lib/libcrypt/tests/Makefile
+++ b/lib/libcrypt/tests/Makefile
@@ -4,8 +4,6 @@ SRCTOP= ${.CURDIR:H:H:H}
OBJTOP= ${.OBJDIR:H:H:H}
TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libcrypt
-TESTSDIR= ${TESTSBASE}/lib/libcrypt
-
NETBSD_ATF_TESTS_C+= crypt_test
CFLAGS+= -I${.CURDIR:H}
diff --git a/lib/libcxxrt/Makefile b/lib/libcxxrt/Makefile
index d197361..1d14cfe 100644
--- a/lib/libcxxrt/Makefile
+++ b/lib/libcxxrt/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-SRCDIR= ${.CURDIR}/../../contrib/libcxxrt
+SRCDIR= ${SRCTOP}/contrib/libcxxrt
SHLIB_MAJOR= 1
SHLIBDIR?= /lib
diff --git a/lib/libexecinfo/Makefile b/lib/libexecinfo/Makefile
index 81fa82a..15520c2 100644
--- a/lib/libexecinfo/Makefile
+++ b/lib/libexecinfo/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-LIBEXECINFO= ${.CURDIR}/../../contrib/libexecinfo
+LIBEXECINFO= ${SRCTOP}/contrib/libexecinfo
LIB= execinfo
SHLIB_MAJOR= 1
diff --git a/lib/libexpat/Makefile b/lib/libexpat/Makefile
index 9b641c1..389453d 100644
--- a/lib/libexpat/Makefile
+++ b/lib/libexpat/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-EXPAT= ${.CURDIR}/../../contrib/expat
+EXPAT= ${SRCTOP}/contrib/expat
LIB= bsdxml
SHLIBDIR?= /lib
diff --git a/lib/libgssapi/Makefile b/lib/libgssapi/Makefile
index 3f016b4..3094631 100644
--- a/lib/libgssapi/Makefile
+++ b/lib/libgssapi/Makefile
@@ -2,7 +2,7 @@
LIB= gssapi
SHLIB_MAJOR= 10
-VERSION_DEF= ${.CURDIR}/../libc/Versions.def
+VERSION_DEF= ${SRCTOP}/lib/libc/Versions.def
SYMBOL_MAPS= ${.CURDIR}/Symbol.map
SRCS=
diff --git a/lib/libiconv_modules/Makefile.inc b/lib/libiconv_modules/Makefile.inc
index 3b25374..d24c616 100644
--- a/lib/libiconv_modules/Makefile.inc
+++ b/lib/libiconv_modules/Makefile.inc
@@ -1,10 +1,10 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../../libc/iconv
+.PATH: ${SRCTOP}/lib/libc/iconv
SHLIB_MAJOR= 4
WARNS?= 6
-CFLAGS+= -I${.CURDIR}/../../libc/iconv
+CFLAGS+= -I${SRCTOP}/lib/libc/iconv
CFLAGS+= -Dbool=_Bool
diff --git a/lib/libiconv_modules/mapper_parallel/Makefile b/lib/libiconv_modules/mapper_parallel/Makefile
index b79c3ad..0008665 100644
--- a/lib/libiconv_modules/mapper_parallel/Makefile
+++ b/lib/libiconv_modules/mapper_parallel/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../mapper_serial
+.PATH: ${.CURDIR:H}/mapper_serial
SHLIB= mapper_parallel
SRCS+= citrus_mapper_serial.c
diff --git a/lib/libkiconv/Makefile b/lib/libkiconv/Makefile
index bda505e..650f7e0 100644
--- a/lib/libkiconv/Makefile
+++ b/lib/libkiconv/Makefile
@@ -16,7 +16,7 @@ MLINKS+= kiconv.3 kiconv_add_xlat16_cspair.3 \
kiconv.3 kiconv_add_xlat16_cspairs.3 \
kiconv.3 kiconv_add_xlat16_table.3
-CFLAGS+= -I${.CURDIR}/../../sys
+CFLAGS+= -I${SRCTOP}/sys
WARNS?= 1
diff --git a/lib/libldns/Makefile b/lib/libldns/Makefile
index db4b989..5c9eed4 100644
--- a/lib/libldns/Makefile
+++ b/lib/libldns/Makefile
@@ -1,7 +1,7 @@
# $FreeBSD$
# Vendor sources and generated files
-LDNSDIR = ${.CURDIR}/../../contrib/ldns
+LDNSDIR = ${SRCTOP}/contrib/ldns
.PATH: ${LDNSDIR} ${LDNSDIR}/compat
diff --git a/lib/liblzma/Makefile b/lib/liblzma/Makefile
index c78933a..24ed42c 100644
--- a/lib/liblzma/Makefile
+++ b/lib/liblzma/Makefile
@@ -1,9 +1,9 @@
# $FreeBSD$
LIB= lzma
-LZMADIR= ${.CURDIR}/../../contrib/xz/src/liblzma
+LZMADIR= ${SRCTOP}/contrib/xz/src/liblzma
-.PATH: ${LZMADIR}/../common
+.PATH: ${LZMADIR:H}/common
SRCS+= tuklib_physmem.c tuklib_cpucores.c
.PATH: ${LZMADIR}/api/lzma
@@ -144,7 +144,7 @@ CFLAGS+= -DHAVE_CONFIG_H \
-I${LZMADIR}/lzma \
-I${LZMADIR}/delta \
-I${LZMADIR}/simple \
- -I${LZMADIR}/../common
+ -I${LZMADIR:H}/common
DPADD+= ${LIBPTHREAD}
LDADD+= -lpthread
diff --git a/lib/libmagic/Makefile b/lib/libmagic/Makefile
index 935a0ef..08ad9b4 100644
--- a/lib/libmagic/Makefile
+++ b/lib/libmagic/Makefile
@@ -1,7 +1,7 @@
# $FreeBSD$
# Copyright (c) David E. O'Brien, 2000-2004, 2006, 2009
-CONTRDIR= ${.CURDIR}/../../contrib/file
+CONTRDIR= ${SRCTOP}/contrib/file
.PATH: ${CONTRDIR}/src
.PATH: ${CONTRDIR}/doc
diff --git a/lib/libmilter/Makefile b/lib/libmilter/Makefile
index 0e625d0..00c0548 100644
--- a/lib/libmilter/Makefile
+++ b/lib/libmilter/Makefile
@@ -2,7 +2,7 @@
.include <bsd.own.mk>
-SENDMAIL_DIR=${.CURDIR}/../../contrib/sendmail
+SENDMAIL_DIR=${SRCTOP}/contrib/sendmail
.PATH: ${SENDMAIL_DIR}/libmilter ${SENDMAIL_DIR}/libsm
CFLAGS+=-I${SENDMAIL_DIR}/src -I${SENDMAIL_DIR}/include -I.
diff --git a/lib/libmp/Makefile b/lib/libmp/Makefile
index 67f6edd..08a52f5 100644
--- a/lib/libmp/Makefile
+++ b/lib/libmp/Makefile
@@ -10,9 +10,9 @@ MAN= libmp.3
INCS= mp.h
SRCS= mpasbn.c
-CFLAGS+= -I${.CURDIR}/../../crypto
+CFLAGS+= -I${SRCTOP}/crypto
-VERSION_DEF= ${.CURDIR}/../libc/Versions.def
+VERSION_DEF= ${SRCTOP}/lib/libc/Versions.def
SYMBOL_MAPS= ${.CURDIR}/Symbol.map
.if ${MK_TESTS} != "no"
diff --git a/lib/libmp/tests/Makefile b/lib/libmp/tests/Makefile
index 0f591eb..d556347 100644
--- a/lib/libmp/tests/Makefile
+++ b/lib/libmp/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/lib/libmp
-
TAP_TESTS_C+= legacy_test
DPADD+= ${LIBCRYPTO} ${LIBMP}
diff --git a/lib/libngatm/Makefile b/lib/libngatm/Makefile
index 85294b0..47dc716 100644
--- a/lib/libngatm/Makefile
+++ b/lib/libngatm/Makefile
@@ -7,8 +7,8 @@ SHLIB_MAJOR= 4
MAN= libngatm.3 uniaddr.3 unifunc.3 unimsg.3 unisap.3 unistruct.3
# source of the library lives in contrib
-SDIR= ${.CURDIR}/../../sys
-CTRB= ${.CURDIR}/../../contrib/ngatm
+SDIR= ${SRCTOP}/sys
+CTRB= ${SRCTOP}/contrib/ngatm
LIBBASE= ${SDIR}/contrib/ngatm
CFLAGS+= -I${LIBBASE} -I${.OBJDIR} -I${CTRB}/libngatm
diff --git a/lib/libnv/tests/Makefile b/lib/libnv/tests/Makefile
index d8e0904..870b7df 100644
--- a/lib/libnv/tests/Makefile
+++ b/lib/libnv/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/lib/libnv
-
ATF_TESTS_CXX= \
dnv_tests \
nv_tests \
diff --git a/lib/libopie/Makefile b/lib/libopie/Makefile
index 647bfee..dd21192 100644
--- a/lib/libopie/Makefile
+++ b/lib/libopie/Makefile
@@ -2,7 +2,7 @@
#
# $FreeBSD$
#
-OPIE_DIST?= ${.CURDIR}/../../contrib/opie
+OPIE_DIST?= ${SRCTOP}/contrib/opie
DIST_DIR= ${OPIE_DIST}/${.CURDIR:T}
SHLIB_MAJOR= 7
diff --git a/lib/libpam/libpam/Makefile b/lib/libpam/libpam/Makefile
index 105748e..8f11ac2 100644
--- a/lib/libpam/libpam/Makefile
+++ b/lib/libpam/libpam/Makefile
@@ -35,7 +35,7 @@
#
# $FreeBSD$
-OPENPAM= ${.CURDIR}/../../../contrib/openpam
+OPENPAM= ${SRCTOP}/contrib/openpam
.PATH: ${OPENPAM}/include ${OPENPAM}/lib/libpam ${OPENPAM}/doc/man
LIB= pam
@@ -198,4 +198,8 @@ DPSRCS= openpam_static.c
INCS= ${HEADERS} ${ADD_HEADERS}
INCSDIR= ${INCLUDEDIR}/security
+.if ${MK_TESTS} != "no"
+SUBDIR+= tests
+.endif
+
.include <bsd.lib.mk>
diff --git a/lib/libpam/libpam/tests/Makefile b/lib/libpam/libpam/tests/Makefile
new file mode 100644
index 0000000..a581392
--- /dev/null
+++ b/lib/libpam/libpam/tests/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+OPENPAM= ${SRCTOP}/contrib/openpam
+.PATH: ${OPENPAM}/t
+
+TESTSDIR = ${TESTSBASE}/lib/libpam
+
+COMMONSRC = t_file.c t_main.c
+.for test in t_openpam_ctype t_openpam_readlinev t_openpam_readword
+TAP_TESTS_C += ${test}
+SRCS.${test} = ${test}.c ${COMMONSRC}
+.endfor
+CFLAGS +=-I${OPENPAM}/include -I${OPENPAM}/lib/libpam -I${OPENPAM}/t
+WARNS ?= 6
+
+DPADD = ${LIBPAM}
+LDADD = ${MINUSLPAM}
+
+.include <bsd.test.mk>
diff --git a/lib/libpam/modules/Makefile.inc b/lib/libpam/modules/Makefile.inc
index 8ff6ca6..f11c4ca 100644
--- a/lib/libpam/modules/Makefile.inc
+++ b/lib/libpam/modules/Makefile.inc
@@ -1,11 +1,11 @@
# $FreeBSD$
-PAMDIR= ${.CURDIR}/../../../../contrib/openpam
+PAMDIR= ${SRCTOP}/contrib/openpam
NO_INSTALLLIB=
NO_PROFILE=
-CFLAGS+= -I${PAMDIR}/include -I${.CURDIR}/../../libpam
+CFLAGS+= -I${PAMDIR}/include -I${SRCTOP}/lib/libpam
# This is nasty.
# For the static case, libpam.a depends on the modules.
diff --git a/lib/libpam/modules/pam_passwdqc/Makefile b/lib/libpam/modules/pam_passwdqc/Makefile
index c9cc30e..97bffeb 100644
--- a/lib/libpam/modules/pam_passwdqc/Makefile
+++ b/lib/libpam/modules/pam_passwdqc/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-SRCDIR= ${.CURDIR}/../../../../contrib/pam_modules/pam_passwdqc
+SRCDIR= ${SRCTOP}/contrib/pam_modules/pam_passwdqc
.PATH: ${SRCDIR}
LIB= pam_passwdqc
diff --git a/lib/libpam/modules/pam_ssh/Makefile b/lib/libpam/modules/pam_ssh/Makefile
index 56f3781..8cb4cb9 100644
--- a/lib/libpam/modules/pam_ssh/Makefile
+++ b/lib/libpam/modules/pam_ssh/Makefile
@@ -1,7 +1,7 @@
# PAM module for SSH
# $FreeBSD$
-SSHDIR= ${.CURDIR}/../../../../crypto/openssh
+SSHDIR= ${SRCTOP}/crypto/openssh
LIB= pam_ssh
MAN= pam_ssh.8
diff --git a/lib/libpcap/Makefile b/lib/libpcap/Makefile
index e7401a85..d9d9b4fe 100644
--- a/lib/libpcap/Makefile
+++ b/lib/libpcap/Makefile
@@ -110,7 +110,7 @@ SHLIB_MAJOR= 8
#
# Magic to grab sources out of src/contrib
#
-PCAP_DISTDIR?=${.CURDIR}/../../contrib/libpcap
+PCAP_DISTDIR?=${SRCTOP}/contrib/libpcap
CFLAGS+=-I${PCAP_DISTDIR}
.PATH: ${PCAP_DISTDIR}
.PATH: ${PCAP_DISTDIR}/bpf/net
diff --git a/lib/libprocstat/zfs/Makefile b/lib/libprocstat/zfs/Makefile
index 9200f02..a58f298 100644
--- a/lib/libprocstat/zfs/Makefile
+++ b/lib/libprocstat/zfs/Makefile
@@ -1,21 +1,21 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/..
+.PATH: ${.CURDIR:H}
SRCS= zfs.c
OBJS= zfs.o
WARNS?= 1
-CFLAGS+= -I${.CURDIR}/../../../sys/cddl/compat/opensolaris
-CFLAGS+= -I${.CURDIR}/../../../cddl/compat/opensolaris/include
-CFLAGS+= -I${.CURDIR}/../../../cddl/compat/opensolaris/lib/libumem
-CFLAGS+= -I${.CURDIR}/../../../cddl/contrib/opensolaris/lib/libzpool/common
-CFLAGS+= -I${.CURDIR}/../../../sys/cddl/contrib/opensolaris/common/zfs
-CFLAGS+= -I${.CURDIR}/../../../sys/cddl/contrib/opensolaris/uts/common/fs/zfs
-CFLAGS+= -I${.CURDIR}/../../../sys/cddl/contrib/opensolaris/uts/common
-CFLAGS+= -I${.CURDIR}/../../../sys/cddl/contrib/opensolaris/uts/common/sys
-CFLAGS+= -I${.CURDIR}/../../../cddl/contrib/opensolaris/head
-CFLAGS+= -I${.CURDIR}/..
+CFLAGS+= -I${SRCTOP}/sys/cddl/compat/opensolaris
+CFLAGS+= -I${SRCTOP}/cddl/compat/opensolaris/include
+CFLAGS+= -I${SRCTOP}/cddl/compat/opensolaris/lib/libumem
+CFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/lib/libzpool/common
+CFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/common/zfs
+CFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
+CFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/uts/common
+CFLAGS+= -I${SRCTOP}/sys/cddl/contrib/opensolaris/uts/common/sys
+CFLAGS+= -I${SRCTOP}/cddl/contrib/opensolaris/head
+CFLAGS+= -I${.CURDIR:H}
CFLAGS+= -DNEED_SOLARIS_BOOLEAN
all: ${OBJS}
diff --git a/lib/librpcsec_gss/Makefile b/lib/librpcsec_gss/Makefile
index cc14a7b..223b684 100644
--- a/lib/librpcsec_gss/Makefile
+++ b/lib/librpcsec_gss/Makefile
@@ -8,11 +8,11 @@ SRCS+= rpcsec_gss.c rpcsec_gss_prot.c rpcsec_gss_conf.c rpcsec_gss_misc.c \
DPADD+= ${LIBGSSAPI}
LDADD+= -lgssapi
-VERSION_DEF= ${.CURDIR}/../libc/Versions.def
+VERSION_DEF= ${SRCTOP}/lib/libc/Versions.def
SYMBOL_MAPS= ${.CURDIR}/Symbol.map
-CFLAGS+= -I${.CURDIR}/../../include
-CFLAGS+= -I${.CURDIR}/../../libc_rpc
+CFLAGS+= -I${SRCTOP}/include
+CFLAGS+= -I${SRCTOP}/lib/libc_rpc
NO_PROFILE=
MAN= rpcsec_gss.3
diff --git a/lib/librpcsvc/Makefile b/lib/librpcsvc/Makefile
index 9c9e3ae..0bce2a8 100644
--- a/lib/librpcsvc/Makefile
+++ b/lib/librpcsvc/Makefile
@@ -3,7 +3,7 @@
.include <bsd.own.mk>
-.PATH: ${.CURDIR}/../../include/rpcsvc
+.PATH: ${SRCTOP}/include/rpcsvc
LIB= rpcsvc
diff --git a/lib/librt/tests/Makefile b/lib/librt/tests/Makefile
index 224f52e..3d3f98c 100644
--- a/lib/librt/tests/Makefile
+++ b/lib/librt/tests/Makefile
@@ -1,11 +1,5 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR:H:H:H}
-SRCTOP= ${.CURDIR:H:H:H}
-TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/librt
-
-TESTSDIR= ${TESTSBASE}/lib/librt
-
DPADD+= ${LIBRT}
LDADD+= -lrt
diff --git a/lib/libsbuf/Makefile b/lib/libsbuf/Makefile
index 98ceeb6..260ae81 100644
--- a/lib/libsbuf/Makefile
+++ b/lib/libsbuf/Makefile
@@ -9,6 +9,6 @@ SHLIB_MAJOR = 6
SYMBOL_MAPS= ${.CURDIR}/Symbol.map
VERSION_DEF= ${.CURDIR}/Version.def
-.PATH: ${.CURDIR}/../../sys/kern
+.PATH: ${SRCTOP}/sys/kern
.include <bsd.lib.mk>
diff --git a/lib/libsm/Makefile b/lib/libsm/Makefile
index 012e033..6e9516e 100644
--- a/lib/libsm/Makefile
+++ b/lib/libsm/Makefile
@@ -2,7 +2,7 @@
.include <bsd.own.mk>
-SENDMAIL_DIR=${.CURDIR}/../../contrib/sendmail
+SENDMAIL_DIR=${SRCTOP}/contrib/sendmail
.PATH: ${SENDMAIL_DIR}/libsm
CFLAGS+=-I${SENDMAIL_DIR}/src -I${SENDMAIL_DIR}/include -I.
diff --git a/lib/libsmb/Makefile b/lib/libsmb/Makefile
index e464a8f..5644a83 100644
--- a/lib/libsmb/Makefile
+++ b/lib/libsmb/Makefile
@@ -2,7 +2,7 @@
.include <bsd.own.mk>
-CONTRIBDIR= ${.CURDIR}/../../contrib/smbfs
+CONTRIBDIR= ${SRCTOP}/contrib/smbfs
.PATH: ${CONTRIBDIR}/lib/smb
LIB= smb
diff --git a/lib/libsmdb/Makefile b/lib/libsmdb/Makefile
index 976282c..0116634 100644
--- a/lib/libsmdb/Makefile
+++ b/lib/libsmdb/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-SENDMAIL_DIR=${.CURDIR}/../../contrib/sendmail
+SENDMAIL_DIR=${SRCTOP}/contrib/sendmail
.PATH: ${SENDMAIL_DIR}/libsmdb
CFLAGS+=-I${SENDMAIL_DIR}/src -I${SENDMAIL_DIR}/include -I.
diff --git a/lib/libsmutil/Makefile b/lib/libsmutil/Makefile
index b7e5a69..32f8a5d 100644
--- a/lib/libsmutil/Makefile
+++ b/lib/libsmutil/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-SENDMAIL_DIR=${.CURDIR}/../../contrib/sendmail
+SENDMAIL_DIR=${SRCTOP}/contrib/sendmail
.PATH: ${SENDMAIL_DIR}/libsmutil
CFLAGS+=-I${SENDMAIL_DIR}/src -I${SENDMAIL_DIR}/include -I.
diff --git a/lib/libstdthreads/Makefile b/lib/libstdthreads/Makefile
index 544eeb0..d2eed8a 100644
--- a/lib/libstdthreads/Makefile
+++ b/lib/libstdthreads/Makefile
@@ -35,7 +35,7 @@ MLINKS= thrd_create.3 call_once.3 \
DPADD= ${LIBPTHREAD}
LDADD= -lpthread
-VERSION_DEF= ${.CURDIR}/../libc/Versions.def
+VERSION_DEF= ${SRCTOP}/lib/libc/Versions.def
SYMBOL_MAPS= ${.CURDIR}/Symbol.map
.include <bsd.lib.mk>
diff --git a/lib/libtelnet/Makefile b/lib/libtelnet/Makefile
index 1cf52a0..bab5fa9 100644
--- a/lib/libtelnet/Makefile
+++ b/lib/libtelnet/Makefile
@@ -3,7 +3,7 @@
.include <bsd.own.mk>
-TELNETDIR= ${.CURDIR}/../../contrib/telnet
+TELNETDIR= ${SRCTOP}/contrib/telnet
.PATH: ${TELNETDIR}/libtelnet
LIB= telnet
diff --git a/lib/libthr/Makefile b/lib/libthr/Makefile
index 8b333dd..a7d2868 100644
--- a/lib/libthr/Makefile
+++ b/lib/libthr/Makefile
@@ -17,13 +17,13 @@ LIB=thr
SHLIB_MAJOR= 3
WARNS?= 3
CFLAGS+=-DPTHREAD_KERNEL
-CFLAGS+=-I${.CURDIR}/../libc/include -I${.CURDIR}/thread \
- -I${.CURDIR}/../../include
+CFLAGS+=-I${SRCTOP}/lib/libc/include -I${.CURDIR}/thread \
+ -I${SRCTOP}/include
CFLAGS+=-I${.CURDIR}/arch/${MACHINE_CPUARCH}/include
CFLAGS+=-I${.CURDIR}/sys
-CFLAGS+=-I${.CURDIR}/../../libexec/rtld-elf
-CFLAGS+=-I${.CURDIR}/../../libexec/rtld-elf/${MACHINE_CPUARCH}
-CFLAGS+=-I${.CURDIR}/../libthread_db
+CFLAGS+=-I${SRCTOP}/libexec/rtld-elf
+CFLAGS+=-I${SRCTOP}/libexec/rtld-elf/${MACHINE_CPUARCH}
+CFLAGS+=-I${SRCTOP}/lib/libthread_db
CFLAGS+=-Winline
.ifndef NO_THREAD_UNWIND_STACK
@@ -33,7 +33,7 @@ CFLAGS+=-D_PTHREAD_FORCED_UNWIND
LDFLAGS+=-Wl,-znodelete
-VERSION_DEF=${.CURDIR}/../libc/Versions.def
+VERSION_DEF=${SRCTOP}/lib/libc/Versions.def
SYMBOL_MAPS=${.CURDIR}/pthread.map
MAN= libthr.3
diff --git a/lib/libthr/support/Makefile.inc b/lib/libthr/support/Makefile.inc
index 35a15f8..14b3131 100644
--- a/lib/libthr/support/Makefile.inc
+++ b/lib/libthr/support/Makefile.inc
@@ -1,15 +1,15 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/support ${.CURDIR}/../libc/gen ${.CURDIR}/../libc/string
+.PATH: ${.CURDIR}/support ${SRCTOP}/lib/libc/gen ${SRCTOP}/lib/libc/string
# libc must search machine_arch, then machine_cpuarch, but libthr has all its
# code implemented in machine_cpuarch. Cope.
-.if exists(${.CURDIR}/../libc/${MACHINE_ARCH}/sys)
-.PATH: ${.CURDIR}/../libc/${MACHINE_ARCH}/sys
-CFLAGS+= -I${.CURDIR}/../libc/${MACHINE_ARCH}
+.if exists(${SRCTOP}/lib/libc/${MACHINE_ARCH}/sys)
+.PATH: ${SRCTOP}/lib/libc/${MACHINE_ARCH}/sys
+CFLAGS+= -I${SRCTOP}/lib/libc/${MACHINE_ARCH}
.else
-.PATH: ${.CURDIR}/../libc/${MACHINE_CPUARCH}/sys
-CFLAGS+= -I${.CURDIR}/../libc/${MACHINE_CPUARCH}
+.PATH: ${SRCTOP}/lib/libc/${MACHINE_CPUARCH}/sys
+CFLAGS+= -I${SRCTOP}/lib/libc/${MACHINE_CPUARCH}
.endif
SYSCALLS= thr_new
diff --git a/lib/libthr/tests/Makefile b/lib/libthr/tests/Makefile
index 50f07f0..cd8f868 100644
--- a/lib/libthr/tests/Makefile
+++ b/lib/libthr/tests/Makefile
@@ -1,11 +1,7 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR:H:H:H}
-SRCTOP= ${.CURDIR:H:H:H}
TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libpthread
-TESTSDIR= ${TESTSBASE}/lib/libthr
-
# TODO: t_name (missing pthread_getname_np support in FreeBSD)
NETBSD_ATF_TESTS_C= barrier_test
NETBSD_ATF_TESTS_C+= cond_test
@@ -26,6 +22,7 @@ NETBSD_ATF_TESTS_C+= sigsuspend_test
NETBSD_ATF_TESTS_C+= siglongjmp_test
NETBSD_ATF_TESTS_C+= sleep_test
NETBSD_ATF_TESTS_C+= swapcontext_test
+NETBSD_ATF_TESTS_C+= timedmutex_test
NETBSD_ATF_TESTS_SH= atexit_test
NETBSD_ATF_TESTS_SH+= cancel_test
diff --git a/lib/libthr/tests/dlopen/Makefile b/lib/libthr/tests/dlopen/Makefile
index 0764bfa..0893192 100644
--- a/lib/libthr/tests/dlopen/Makefile
+++ b/lib/libthr/tests/dlopen/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR:H:H:H:H}
-SRCTOP= ${.CURDIR:H:H:H:H}
TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libpthread/dlopen
.include <bsd.own.mk>
diff --git a/lib/libthr/tests/dlopen/dso/Makefile b/lib/libthr/tests/dlopen/dso/Makefile
index 080dec9..dce7d38 100644
--- a/lib/libthr/tests/dlopen/dso/Makefile
+++ b/lib/libthr/tests/dlopen/dso/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR:H:H:H:H:H}
-SRCTOP= ${.CURDIR:H:H:H:H:H}
TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libpthread/dlopen/dso
SHLIB= h_pthread_dlopen
diff --git a/lib/libthread_db/Makefile b/lib/libthread_db/Makefile
index b612f4f..b5e18747 100644
--- a/lib/libthread_db/Makefile
+++ b/lib/libthread_db/Makefile
@@ -14,7 +14,7 @@ CFLAGS+=-I. -I${.CURDIR}
SYM_MAPS+=${.CURDIR}/Symbol.map
SYMBOL_MAPS=${SYM_MAPS}
-VERSION_DEF=${.CURDIR}/../libc/Versions.def
+VERSION_DEF=${SRCTOP}/lib/libc/Versions.def
# Unfortunately, clang gives an incorrect warning about alignment in
# arch/i386/libpthread_md.c, so turn that off for now.
diff --git a/lib/libufs/Makefile b/lib/libufs/Makefile
index 78832d8..c809241 100644
--- a/lib/libufs/Makefile
+++ b/lib/libufs/Makefile
@@ -17,7 +17,7 @@ MLINKS+= ufs_disk_close.3 ufs_disk_fillout.3
MLINKS+= ufs_disk_close.3 ufs_disk_fillout_blank.3
MLINKS+= ufs_disk_close.3 ufs_disk_write.3
-.PATH: ${.CURDIR}/../../sys/ufs/ffs
+.PATH: ${SRCTOP}/sys/ufs/ffs
WARNS?= 2
diff --git a/lib/libulog/Makefile b/lib/libulog/Makefile
index 074d9db..b5de8f0 100644
--- a/lib/libulog/Makefile
+++ b/lib/libulog/Makefile
@@ -22,7 +22,7 @@ MLINKS+=ulog_login.3 ulog_login_pseudo.3 \
DPADD= ${LIBMD}
LDADD= -lmd
-VERSION_DEF= ${.CURDIR}/../libc/Versions.def
+VERSION_DEF= ${SRCTOP}/lib/libc/Versions.def
SYMBOL_MAPS= ${.CURDIR}/Symbol.map
.if ${MK_INSTALLLIB} != "no"
diff --git a/lib/libunbound/Makefile b/lib/libunbound/Makefile
index 3c66181..e2471bf 100644
--- a/lib/libunbound/Makefile
+++ b/lib/libunbound/Makefile
@@ -1,8 +1,8 @@
# $FreeBSD$
# Vendor sources and generated files
-LDNSDIR= ${.CURDIR}/../../contrib/ldns
-UNBOUNDDIR= ${.CURDIR}/../../contrib/unbound
+LDNSDIR= ${SRCTOP}/contrib/ldns
+UNBOUNDDIR= ${SRCTOP}/contrib/unbound
# Hold my beer and watch this
.PATH: ${UNBOUNDDIR} ${UNBOUNDDIR}/compat ${UNBOUNDDIR}/dns64 ${UNBOUNDDIR}/iterator ${UNBOUNDDIR}/sldns ${UNBOUNDDIR}/libunbound ${UNBOUNDDIR}/services ${UNBOUNDDIR}/services/cache ${UNBOUNDDIR}/util ${UNBOUNDDIR}/util/data ${UNBOUNDDIR}/util/storage ${UNBOUNDDIR}/validator
diff --git a/lib/libutil/Makefile b/lib/libutil/Makefile
index 4e10729..11ebb3f 100644
--- a/lib/libutil/Makefile
+++ b/lib/libutil/Makefile
@@ -24,7 +24,7 @@ CFLAGS+= -DLIBC_SCCS
CFLAGS+= -DINET6
.endif
-CFLAGS+= -I${.CURDIR} -I${.CURDIR}/../libc/gen/
+CFLAGS+= -I${.CURDIR} -I${SRCTOP}/lib/libc/gen/
MAN+= expand_number.3 flopen.3 fparseln.3 hexdump.3 \
humanize_number.3 kinfo_getallproc.3 kinfo_getfile.3 \
diff --git a/lib/libutil/tests/Makefile b/lib/libutil/tests/Makefile
index 31b6c54..92540c9 100644
--- a/lib/libutil/tests/Makefile
+++ b/lib/libutil/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/lib/libutil
-
TAP_TESTS_C+= flopen_test
TAP_TESTS_C+= grp_test
TAP_TESTS_C+= humanize_number_test
diff --git a/lib/libypclnt/Makefile b/lib/libypclnt/Makefile
index 2e302f1..636c9b6 100644
--- a/lib/libypclnt/Makefile
+++ b/lib/libypclnt/Makefile
@@ -23,9 +23,9 @@ GENSRCS=yp.h \
yppasswd_private_xdr.c
RPCGEN= RPCGEN_CPP=${CPP:Q} rpcgen -C
-RPCSRC= ${.CURDIR}/../../include/rpcsvc/yp.x
-RPCSRC_PW= ${.CURDIR}/../../include/rpcsvc/yppasswd.x
-RPCSRC_PRIV= ${.CURDIR}/../../usr.sbin/rpc.yppasswdd/yppasswd_private.x
+RPCSRC= ${SRCTOP}/include/rpcsvc/yp.x
+RPCSRC_PW= ${SRCTOP}/include/rpcsvc/yppasswd.x
+RPCSRC_PRIV= ${SRCTOP}/usr.sbin/rpc.yppasswdd/yppasswd_private.x
yp.h: ${RPCSRC}
${RPCGEN} -h -o ${.TARGET} ${RPCSRC}
diff --git a/lib/libz/Symbol.map b/lib/libz/Symbol.map
index b117cdd..abff432 100644
--- a/lib/libz/Symbol.map
+++ b/lib/libz/Symbol.map
@@ -2,6 +2,17 @@
* $FreeBSD: head/lib/libz/Symbol.map 206709 2010-04-16 20:07:24Z delphij $
*/
+ZLIB_1.2.9 {
+ inflateCodesUsed;
+ inflateValidate;
+ uncompress2;
+ gzfread;
+ gzfwrite;
+ deflateGetDictionary;
+ adler32_z;
+ crc32_z;
+};
+
ZLIB_1.2.7.1 {
inflateGetDictionary;
gzvprintf;
diff --git a/lib/libz/Versions.def b/lib/libz/Versions.def
index f8e6425..12df26e 100644
--- a/lib/libz/Versions.def
+++ b/lib/libz/Versions.def
@@ -9,6 +9,9 @@ ZLIB_1.2.7.0 {
ZLIB_1.2.7.1 {
} ZLIB_1.2.7.0;
+ZLIB_1.2.9 {
+} ZLIB_1.2.7.1;
+
FBSD_1.2 {
} ZLIB_1.2.4.0;
diff --git a/lib/libz/zlib.pc b/lib/libz/zlib.pc
index 63a214f..b9ad734 100644
--- a/lib/libz/zlib.pc
+++ b/lib/libz/zlib.pc
@@ -7,7 +7,7 @@ includedir=${prefix}/include
Name: zlib
Description: zlib compression library
-Version: 1.2.8
+Version: 1.2.10
Requires:
Libs: -L${libdir} -L${sharedlibdir} -lz
diff --git a/lib/msun/tests/Makefile b/lib/msun/tests/Makefile
index a82f29f..318fc7b 100644
--- a/lib/msun/tests/Makefile
+++ b/lib/msun/tests/Makefile
@@ -1,13 +1,11 @@
# $FreeBSD$
-OBJTOP= ${.OBJDIR:H:H:H}
-SRCTOP= ${.CURDIR:H:H:H}
TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libm
-TESTSDIR= ${TESTSBASE}/lib/msun
-
# All architectures on FreeBSD have fenv.h
CFLAGS+= -DHAVE_FENV_H
+# For isqemu.h
+CFLAGS+= -I${TESTSRC:H}/libc/gen
.if ${MACHINE} == "amd64" || ${MACHINE} == "i386"
CFLAGS+= -D__HAVE_LONG_DOUBLE
@@ -18,12 +16,15 @@ NETBSD_ATF_TESTS_C+= asin_test
NETBSD_ATF_TESTS_C+= atan_test
NETBSD_ATF_TESTS_C+= cbrt_test
NETBSD_ATF_TESTS_C+= ceil_test
+NETBSD_ATF_TESTS_C+= casinh_test
NETBSD_ATF_TESTS_C+= cos_test
NETBSD_ATF_TESTS_C+= cosh_test
NETBSD_ATF_TESTS_C+= erf_test
NETBSD_ATF_TESTS_C+= exp_test
NETBSD_ATF_TESTS_C+= fmod_test
+NETBSD_ATF_TESTS_C+= fe_round_test
NETBSD_ATF_TESTS_C+= infinity_test
+NETBSD_ATF_TESTS_C+= ilogb_test
NETBSD_ATF_TESTS_C+= ldexp_test
NETBSD_ATF_TESTS_C+= log_test
NETBSD_ATF_TESTS_C+= pow_test
@@ -44,7 +45,7 @@ TAP_TESTS_C+= exponential_test
TAP_TESTS_C+= fenv_test
TAP_TESTS_C+= fma_test
TAP_TESTS_C+= fmaxmin_test
-TAP_TESTS_C+= ilogb_test
+TAP_TESTS_C+= ilogb2_test
TAP_TESTS_C+= invtrig_test
TAP_TESTS_C+= invctrig_test
TAP_TESTS_C+= logarithm_test
@@ -70,6 +71,8 @@ DPADD+= ${LIBM}
IGNORE_PRAGMA=
+SRCS.ilogb2_test= ilogb_test.c
+
# Copied from lib/msun/Makefile
.if ${MACHINE_CPUARCH} == "i386"
ARCH_SUBDIR= i387
diff --git a/lib/msun/tests/fmaxmin_test.c b/lib/msun/tests/fmaxmin_test.c
index 7ddcc87..24056b0 100644
--- a/lib/msun/tests/fmaxmin_test.c
+++ b/lib/msun/tests/fmaxmin_test.c
@@ -86,6 +86,8 @@ testall_r(long double big, long double small)
return (ok);
}
+const char *comment = NULL;
+
/*
* Test all the functions: fmaxf, fmax, fmaxl, fminf, fmin, and fminl,
* in all rounding modes and with the arguments in different orders.
@@ -107,10 +109,18 @@ testall(int testnum, long double big, long double small)
break;
}
}
- printf("%sok %d - big = %.20Lg, small = %.20Lg\n",
- (i == 4) ? "" : "not ", testnum, big, small);
+ printf("%sok %d - big = %.20Lg, small = %.20Lg%s\n",
+ (i == 4) ? "" : "not ", testnum, big, small,
+ comment == NULL ? "" : comment);
}
+/* Clang 3.8.0+ fails the invariants for testcase 6, 7, 10, and 11. */
+#if defined(__clang__) && \
+ ((__clang_major__ > 3)) || \
+ ((__clang_major__ == 3 && __clang_minor__ >= 8))
+#define affected_by_bug_208703
+#endif
+
int
main(int argc, char *argv[])
{
@@ -122,15 +132,23 @@ main(int argc, char *argv[])
testall(3, nextafterf(42.0, INFINITY), 42.0);
testall(4, -5.0, -5.0);
testall(5, -3.0, -4.0);
+#ifdef affected_by_bug_208703
+ comment = "# TODO: testcase 6-7 fails invariant with clang 3.8+ (bug 208703)";
+#endif
testall(6, 1.0, NAN);
testall(7, INFINITY, NAN);
+ comment = NULL;
testall(8, INFINITY, 1.0);
testall(9, -3.0, -INFINITY);
testall(10, 3.0, -INFINITY);
+#ifdef affected_by_bug_208703
+ comment = "# TODO: testcase 11-12 fails invariant with clang 3.8+ (bug 208703)";
+#endif
testall(11, NAN, NAN);
/* This test isn't strictly required to work by C99. */
testall(12, 0.0, -0.0);
+ comment = NULL;
return (0);
}
diff --git a/lib/ncurses/config.mk b/lib/ncurses/config.mk
index d01e17a..d15be86 100644
--- a/lib/ncurses/config.mk
+++ b/lib/ncurses/config.mk
@@ -2,25 +2,25 @@
# This Makefile is shared by libncurses, libform, libmenu, libpanel.
-NCURSES_DIR= ${.CURDIR}/../../../contrib/ncurses
+NCURSES_DIR= ${SRCTOP}/contrib/ncurses
.if defined(ENABLE_WIDEC)
LIB_SUFFIX= w
CFLAGS+= -D_XOPEN_SOURCE_EXTENDED -DENABLE_WIDEC
-NCURSES_CFG_H= ${.CURDIR}/../ncurses/ncurses_cfg.h
+NCURSES_CFG_H= ${.CURDIR:H}/ncurses/ncurses_cfg.h
.else
LIB_SUFFIX=
NCURSES_CFG_H= ${.CURDIR}/ncurses_cfg.h
.endif
CFLAGS+= -I.
-.if exists(${.OBJDIR}/../ncurses${LIB_SUFFIX})
-CFLAGS+= -I${.OBJDIR}/../ncurses${LIB_SUFFIX}
+.if exists(${.OBJDIR:H}/ncurses${LIB_SUFFIX})
+CFLAGS+= -I${.OBJDIR:H}/ncurses${LIB_SUFFIX}
.endif
-CFLAGS+= -I${.CURDIR}/../ncurses${LIB_SUFFIX}
+CFLAGS+= -I${.CURDIR:H}/ncurses${LIB_SUFFIX}
# for ${NCURSES_CFG_H}
-CFLAGS+= -I${.CURDIR}/../ncurses
+CFLAGS+= -I${.CURDIR:H}/ncurses
CFLAGS+= -I${NCURSES_DIR}/include
CFLAGS+= -I${NCURSES_DIR}/ncurses
diff --git a/lib/ncurses/form/Makefile b/lib/ncurses/form/Makefile
index b79dc41..5af3d2a 100644
--- a/lib/ncurses/form/Makefile
+++ b/lib/ncurses/form/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-.include "${.CURDIR}/../config.mk"
+.include "${.CURDIR:H}/config.mk"
SRCDIR= ${NCURSES_DIR}/form
diff --git a/lib/ncurses/formw/Makefile b/lib/ncurses/formw/Makefile
index 5488503..3ec7637 100644
--- a/lib/ncurses/formw/Makefile
+++ b/lib/ncurses/formw/Makefile
@@ -2,4 +2,4 @@
ENABLE_WIDEC=
-.include "${.CURDIR}/../form/Makefile"
+.include "${.CURDIR:H}/form/Makefile"
diff --git a/lib/ncurses/menu/Makefile b/lib/ncurses/menu/Makefile
index 3aac081..fb5afd2 100644
--- a/lib/ncurses/menu/Makefile
+++ b/lib/ncurses/menu/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-.include "${.CURDIR}/../config.mk"
+.include "${.CURDIR:H}/config.mk"
SRCDIR= ${NCURSES_DIR}/menu
diff --git a/lib/ncurses/menuw/Makefile b/lib/ncurses/menuw/Makefile
index d5a100f..d6df563 100644
--- a/lib/ncurses/menuw/Makefile
+++ b/lib/ncurses/menuw/Makefile
@@ -2,4 +2,4 @@
ENABLE_WIDEC=
-.include "${.CURDIR}/../menu/Makefile"
+.include "${.CURDIR:H}/menu/Makefile"
diff --git a/lib/ncurses/ncurses/Makefile b/lib/ncurses/ncurses/Makefile
index ee4d89e..afd0f40 100644
--- a/lib/ncurses/ncurses/Makefile
+++ b/lib/ncurses/ncurses/Makefile
@@ -8,7 +8,7 @@ NO_MAN=
.include <bsd.own.mk>
-.include "${.CURDIR}/../config.mk"
+.include "${.CURDIR:H}/config.mk"
LIB= ncurses${LIB_SUFFIX}
SHLIB_MAJOR= 8
diff --git a/lib/ncurses/ncursesw/Makefile b/lib/ncurses/ncursesw/Makefile
index 277c90b..5f6040e 100644
--- a/lib/ncurses/ncursesw/Makefile
+++ b/lib/ncurses/ncursesw/Makefile
@@ -2,6 +2,6 @@
ENABLE_WIDEC=
-.PATH: ${.CURDIR}/../ncurses
+.PATH: ${.CURDIR:H}/ncurses
-.include "${.CURDIR}/../ncurses/Makefile"
+.include "${.CURDIR:H}/ncurses/Makefile"
diff --git a/lib/ncurses/panel/Makefile b/lib/ncurses/panel/Makefile
index 7929aed..881f31a 100644
--- a/lib/ncurses/panel/Makefile
+++ b/lib/ncurses/panel/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-.include "${.CURDIR}/../config.mk"
+.include "${.CURDIR:H}/config.mk"
SRCDIR= ${NCURSES_DIR}/panel
diff --git a/lib/ncurses/panelw/Makefile b/lib/ncurses/panelw/Makefile
index 7642e34..2585738 100644
--- a/lib/ncurses/panelw/Makefile
+++ b/lib/ncurses/panelw/Makefile
@@ -2,4 +2,4 @@
ENABLE_WIDEC=
-.include "${.CURDIR}/../panel/Makefile"
+.include "${.CURDIR:H}/panel/Makefile"
diff --git a/lib/tests/Makefile b/lib/tests/Makefile
index 935fd70..a0e63e5 100644
--- a/lib/tests/Makefile
+++ b/lib/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/lib
-
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/libexec/atf/atf-check/tests/Makefile b/libexec/atf/atf-check/tests/Makefile
index 43a7498..87b26cb 100644
--- a/libexec/atf/atf-check/tests/Makefile
+++ b/libexec/atf/atf-check/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.init.mk>
-TESTSDIR= ${TESTSBASE}/libexec/atf/atf-check
-
-ATF= ${.CURDIR:H:H:H:H}/contrib/atf
+ATF= ${SRCTOP}/contrib/atf
.PATH: ${ATF}/atf-sh
ATF_TESTS_SH= atf-check_test
diff --git a/libexec/atf/atf-sh/tests/Makefile b/libexec/atf/atf-sh/tests/Makefile
index 3360b97..9ccd6a7 100644
--- a/libexec/atf/atf-sh/tests/Makefile
+++ b/libexec/atf/atf-sh/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.init.mk>
-TESTSDIR= ${TESTSBASE}/libexec/atf/atf-sh
-
-ATF= ${.CURDIR:H:H:H:H}/contrib/atf
+ATF= ${SRCTOP}/contrib/atf
.PATH: ${ATF}/atf-sh
ATF_TESTS_SH+= atf_check_test
diff --git a/libexec/atf/tests/Makefile b/libexec/atf/tests/Makefile
index 7aa9601..a0e63e5 100644
--- a/libexec/atf/tests/Makefile
+++ b/libexec/atf/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/libexec/atf
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/libexec/tests/Makefile b/libexec/tests/Makefile
index 665efab..a0e63e5 100644
--- a/libexec/tests/Makefile
+++ b/libexec/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/libexec
-
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/sbin/devd/tests/Makefile b/sbin/devd/tests/Makefile
index ee679ce..e06928c 100644
--- a/sbin/devd/tests/Makefile
+++ b/sbin/devd/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/sbin/devd
-
ATF_TESTS_C= client_test
TEST_METADATA.client_test= required_programs="devd"
TEST_METADATA.client_test+= required_user="root"
diff --git a/sbin/dhclient/tests/Makefile b/sbin/dhclient/tests/Makefile
index a460f7f..45cc8c2 100644
--- a/sbin/dhclient/tests/Makefile
+++ b/sbin/dhclient/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/sbin/dhclient
-
.PATH: ${.CURDIR}/..
PLAIN_TESTS_C= option-domain-search_test
diff --git a/sbin/growfs/tests/Makefile b/sbin/growfs/tests/Makefile
index 7a6a831..6a3208d 100644
--- a/sbin/growfs/tests/Makefile
+++ b/sbin/growfs/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/sbin/growfs
-
TAP_TESTS_PERL= legacy_test
.include <bsd.test.mk>
diff --git a/sbin/kldload/kldload.c b/sbin/kldload/kldload.c
index 3891f33..fc8c8c4 100644
--- a/sbin/kldload/kldload.c
+++ b/sbin/kldload/kldload.c
@@ -41,9 +41,6 @@ __FBSDID("$FreeBSD$");
#define PATHCTL "kern.module_path"
-static int path_check(const char *, int);
-static void usage(void);
-
/*
* Check to see if the requested module is specified as a filename with no
* path. If so and if a file by the same name exists in the module path,
@@ -52,43 +49,37 @@ static void usage(void);
static int
path_check(const char *kldname, int quiet)
{
- int mib[5], found;
- size_t miblen, pathlen;
- char kldpath[MAXPATHLEN];
char *path, *tmppath, *element;
struct stat sb;
+ int mib[5];
+ char kldpath[MAXPATHLEN];
+ size_t miblen, pathlen;
dev_t dev;
ino_t ino;
+ int found;
- if (strchr(kldname, '/') != NULL) {
+ if (strchr(kldname, '/') != NULL)
return (0);
- }
- if (strstr(kldname, ".ko") == NULL) {
+ if (strstr(kldname, ".ko") == NULL)
return (0);
- }
- if (stat(kldname, &sb) != 0) {
+ if (stat(kldname, &sb) != 0)
return (0);
- }
found = 0;
dev = sb.st_dev;
ino = sb.st_ino;
miblen = sizeof(mib) / sizeof(mib[0]);
- if (sysctlnametomib(PATHCTL, mib, &miblen) != 0) {
+ if (sysctlnametomib(PATHCTL, mib, &miblen) != 0)
err(1, "sysctlnametomib(%s)", PATHCTL);
- }
- if (sysctl(mib, miblen, NULL, &pathlen, NULL, 0) == -1) {
+ if (sysctl(mib, miblen, NULL, &pathlen, NULL, 0) == -1)
err(1, "getting path: sysctl(%s) - size only", PATHCTL);
- }
path = malloc(pathlen + 1);
- if (path == NULL) {
+ if (path == NULL)
err(1, "allocating %lu bytes for the path",
(unsigned long)pathlen + 1);
- }
- if (sysctl(mib, miblen, path, &pathlen, NULL, 0) == -1) {
+ if (sysctl(mib, miblen, path, &pathlen, NULL, 0) == -1)
err(1, "getting path: sysctl(%s)", PATHCTL);
- }
tmppath = path;
while ((element = strsep(&tmppath, ";")) != NULL) {
@@ -97,39 +88,36 @@ path_check(const char *kldname, int quiet)
strlcat(kldpath, "/", MAXPATHLEN);
}
strlcat(kldpath, kldname, MAXPATHLEN);
-
- if (stat(kldpath, &sb) == -1) {
+
+ if (stat(kldpath, &sb) == -1)
continue;
- }
found = 1;
if (sb.st_dev != dev || sb.st_ino != ino) {
- if (!quiet) {
+ if (!quiet)
warnx("%s will be loaded from %s, not the "
"current directory", kldname, element);
- }
break;
- } else if (sb.st_dev == dev && sb.st_ino == ino) {
+ } else if (sb.st_dev == dev && sb.st_ino == ino)
break;
- }
}
free(path);
-
+
if (!found) {
- if (!quiet) {
+ if (!quiet)
warnx("%s is not in the module path", kldname);
- }
return (-1);
}
-
+
return (0);
}
static void
usage(void)
{
+
fprintf(stderr, "usage: kldload [-nqv] file ...\n");
exit(1);
}
@@ -138,17 +126,17 @@ int
main(int argc, char** argv)
{
int c;
+ int check_loaded;
int errors;
int fileid;
- int verbose;
int quiet;
- int check_loaded;
+ int verbose;
errors = 0;
verbose = 0;
quiet = 0;
check_loaded = 0;
-
+
while ((c = getopt(argc, argv, "nqv")) != -1) {
switch (c) {
case 'q':
@@ -204,9 +192,8 @@ main(int argc, char** argv)
printf("Loaded %s, id=%d\n", argv[0],
fileid);
}
- } else {
+ } else
errors++;
- }
argv++;
}
diff --git a/sbin/mdconfig/tests/Makefile b/sbin/mdconfig/tests/Makefile
index 08a9e47..6c179fc 100644
--- a/sbin/mdconfig/tests/Makefile
+++ b/sbin/mdconfig/tests/Makefile
@@ -1,10 +1,7 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/sbin/mdconfig
-
ATF_TESTS_SH= mdconfig_test
-
TEST_METADATA.mdconfig_test+= required_user="root"
.include <bsd.test.mk>
diff --git a/sbin/tests/Makefile b/sbin/tests/Makefile
index a298f87..a0e63e5 100644
--- a/sbin/tests/Makefile
+++ b/sbin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/sbin
-
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/secure/lib/tests/Makefile b/secure/lib/tests/Makefile
index cd6bcff..a0e63e5 100644
--- a/secure/lib/tests/Makefile
+++ b/secure/lib/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/secure/lib
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/secure/libexec/tests/Makefile b/secure/libexec/tests/Makefile
index 6debef8..a0e63e5 100644
--- a/secure/libexec/tests/Makefile
+++ b/secure/libexec/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/secure/libexec
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/secure/tests/Makefile b/secure/tests/Makefile
index 2e6dbc4..a0e63e5 100644
--- a/secure/tests/Makefile
+++ b/secure/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/secure
-
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/secure/usr.bin/tests/Makefile b/secure/usr.bin/tests/Makefile
index 1c06699..a0e63e5 100644
--- a/secure/usr.bin/tests/Makefile
+++ b/secure/usr.bin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/secure/usr.bin
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/secure/usr.sbin/tests/Makefile b/secure/usr.sbin/tests/Makefile
index 25e95f0..a0e63e5 100644
--- a/secure/usr.sbin/tests/Makefile
+++ b/secure/usr.sbin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/secure/usr.sbin
-
-.PATH: ${.CURDIR:H:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/share/examples/tests/Makefile b/share/examples/tests/Makefile
index 387b806..a091b2d 100644
--- a/share/examples/tests/Makefile
+++ b/share/examples/tests/Makefile
@@ -2,11 +2,9 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/share/examples
-
SUBDIR= tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
-.PATH: ${.CURDIR:H:H:H}/tests
.include <bsd.test.mk>
diff --git a/share/man/man4/alc.4 b/share/man/man4/alc.4
index 1fff8ba..b1feab5 100644
--- a/share/man/man4/alc.4
+++ b/share/man/man4/alc.4
@@ -124,6 +124,8 @@ Atheros AR8172 PCI Express Fast Ethernet controller
Killer E2200 Gigabit Ethernet controller
.It
Killer E2400 Gigabit Ethernet controller
+.It
+Killer E2500 Gigabit Ethernet controller
.El
.Sh LOADER TUNABLES
Tunables can be set at the
diff --git a/share/man/man4/unix.4 b/share/man/man4/unix.4
index c53cc42..0e8470f 100644
--- a/share/man/man4/unix.4
+++ b/share/man/man4/unix.4
@@ -32,7 +32,7 @@
.\" @(#)unix.4 8.1 (Berkeley) 6/9/93
.\" $FreeBSD$
.\"
-.Dd March 19, 2013
+.Dd February 3, 2017
.Dt UNIX 4
.Os
.Sh NAME
@@ -123,12 +123,12 @@ of a
or
.Xr sendto 2
must be writable.
-.Sh PASSING FILE DESCRIPTORS
+.Sh CONTROL MESSAGES
The
.Ux Ns -domain
sockets support the communication of
.Ux
-file descriptors through the use of the
+file descriptors and process credentials through the use of the
.Va msg_control
field in the
.Fa msg
@@ -136,13 +136,12 @@ argument to
.Xr sendmsg 2
and
.Xr recvmsg 2 .
-.Pp
-Any valid descriptor may be sent in a message.
-The file descriptor(s) to be passed are described using a
+The items to be passed are described using a
.Vt "struct cmsghdr"
that is defined in the include file
.In sys/socket.h .
-The type of the message is
+.Pp
+To send file descriptors, the type of the message is
.Dv SCM_RIGHTS ,
and the data portion of the messages is an array of integers
representing the file descriptors to be passed.
@@ -165,6 +164,39 @@ call.
Descriptors that are awaiting delivery, or that are
purposely not received, are automatically closed by the system
when the destination socket is closed.
+.Pp
+Credentials of the sending process can be transmitted explicitly using a
+control message of type
+.Dv SCM_CREDS
+with a data portion of type
+.Vt "struct cmsgcred" ,
+defined in
+.In sys/socket.h
+as follows:
+.Bd -literal
+struct cmsgcred {
+ pid_t cmcred_pid; /* PID of sending process */
+ uid_t cmcred_uid; /* real UID of sending process */
+ uid_t cmcred_euid; /* effective UID of sending process */
+ gid_t cmcred_gid; /* real GID of sending process */
+ short cmcred_ngroups; /* number of groups */
+ gid_t cmcred_groups[CMGROUP_MAX]; /* groups */
+};
+.Ed
+.Pp
+The sender should pass a zeroed buffer which will be filled in by the system.
+.Pp
+The group list is truncated to at most
+.Dv CMGROUP_MAX
+GIDs.
+.Pp
+The process ID
+.Fa cmcred_pid
+should not be looked up (such as via the
+.Dv KERN_PROC_PID
+sysctl) for making security decisions.
+The sending process could have exited and its process ID already been
+reused for a new process.
.Sh SOCKET OPTIONS
.Tn UNIX
domain sockets support a number of socket options which can be set with
@@ -180,7 +212,13 @@ or a
.Dv SOCK_STREAM
socket.
This option provides a mechanism for the receiver to
-receive the credentials of the process as a
+receive the credentials of the process calling
+.Xr write 2 ,
+.Xr send 2 ,
+.Xr sendto 2
+or
+.Xr sendmsg 2
+as a
.Xr recvmsg 2
control message.
The
@@ -205,6 +243,10 @@ struct sockcred {
};
.Ed
.Pp
+The current implementation truncates the group list to at most
+.Dv CMGROUP_MAX
+groups.
+.Pp
The
.Fn SOCKCREDSIZE
macro computes the size of the
@@ -225,7 +267,28 @@ On
and
.Dv SOCK_SEQPACKET
sockets credentials are passed only on the first read from a socket,
-then system clears the option on socket.
+then the system clears the option on the socket.
+.Pp
+This option and the above explicit
+.Vt "struct cmsgcred"
+both use the same value
+.Dv SCM_CREDS
+but incompatible control messages.
+If this option is enabled and the sender attached a
+.Dv SCM_CREDS
+control message with a
+.Vt "struct cmsgcred" ,
+it will be discarded and a
+.Vt "struct sockcred"
+will be included.
+.Pp
+Many setuid programs will
+.Xr write 2
+data at least partially controlled by the invoker,
+such as error messages.
+Therefore, a message accompanied by a particular
+.Fa sc_euid
+value should not be trusted as being from that user.
.It Dv LOCAL_CONNWAIT
Used with
.Dv SOCK_STREAM
diff --git a/share/man/man7/build.7 b/share/man/man7/build.7
index 912d146..d405e17 100644
--- a/share/man/man7/build.7
+++ b/share/man/man7/build.7
@@ -107,6 +107,16 @@ section below, and by the variables documented in
The following list provides the names and actions for the targets
supported by the build system:
.Bl -tag -width ".Cm cleandepend"
+.It Cm check
+Run tests for a given subdirectory.
+The default directory used is
+.Pa ${.OBJDIR} ,
+but the check directory can be changed with
+.Pa ${CHECKDIR} .
+.It Cm checkworld
+Run the
+.Fx
+test suite on installed world.
.It Cm clean
Remove any files created during the build process.
.It Cm cleandepend
@@ -653,6 +663,7 @@ make TARGET=sparc64 DESTDIR=/clients/sparc64 installworld
.Xr mergemaster 8 ,
.Xr portsnap 8 ,
.Xr reboot 8 ,
-.Xr shutdown 8
+.Xr shutdown 8 ,
+.Xr tests 7
.Sh AUTHORS
.An Mike W. Meyer Aq mwm@mired.org .
diff --git a/share/mk/bsd.README b/share/mk/bsd.README
index ea46202..6ec9716 100644
--- a/share/mk/bsd.README
+++ b/share/mk/bsd.README
@@ -492,6 +492,17 @@ It has seven targets:
all:
build the test programs.
+ check:
+ runs the test programs from CHECKDIR with kyua test.
+
+ The beforecheck and aftercheck targets will be invoked, if
+ defined, to execute commands before and after the realcheck
+ target has been executed, respectively.
+
+ The devel/kyua package must be installed before invoking this
+ target.
+
+ See CHECKDIR for more details.
clean:
remove the test programs and any object files.
cleandir:
@@ -510,12 +521,6 @@ It has seven targets:
run lint on the source files.
tags:
create a tags file for the source files.
- test:
- runs the test programs from the object directory; if the
- Makefile does not itself define the target test, the
- targets beforetest and aftertest may also be used to
- cause actions immediately before and after the test
- target is executed.
It sets/uses the following variables, among many others:
@@ -529,6 +534,10 @@ TESTSDIR Path to the installed tests. Must be a subdirectory of
${TESTSBASE}/${RELDIR:H} , e.g. /usr/tests/bin/ls when
included from bin/ls/tests .
+CHECKDIR The directory that 'make check' executes tests from.
+
+ The value of CHECKDIR defaults to .OBJDIR.
+
KYUAFILE If 'auto' (the default), generate a Kyuafile out of the
test programs defined in the Makefile. If 'yes', then a
manually-crafted Kyuafile must be supplied with the
diff --git a/share/mk/bsd.subdir.mk b/share/mk/bsd.subdir.mk
index 9d2eb17..82ff2e3 100644
--- a/share/mk/bsd.subdir.mk
+++ b/share/mk/bsd.subdir.mk
@@ -24,9 +24,9 @@
# This is a variant of install, which will
# put the stuff into the right "distribution".
#
-# afterinstall, all, all-man, beforeinstall, checkdpadd, clean,
+# afterinstall, all, all-man, beforeinstall, check, checkdpadd, clean,
# cleandepend, cleandir, cleanilinks depend, install, lint,
-# maninstall, manlint, obj, objlink, realinstall, regress, tags
+# maninstall, manlint, obj, objlink, realinstall, tags
#
.if !target(__<bsd.subdir.mk>__)
@@ -45,7 +45,7 @@ distribute: .MAKE
_SUBDIR: .USE .MAKE
.if defined(SUBDIR) && !empty(SUBDIR) && !defined(NO_SUBDIR)
- @${_+_}set -e; for entry in ${SUBDIR:N.WAIT}; do \
+ @${_+_}for entry in ${SUBDIR:N.WAIT}; do \
if test -d ${.CURDIR}/$${entry}.${MACHINE_ARCH}; then \
${ECHODIR} "===> ${DIRPRFX}$${entry}.${MACHINE_ARCH} (${.TARGET:S,realinstall,install,:S,^_sub.,,})"; \
edir=$${entry}.${MACHINE_ARCH}; \
@@ -70,9 +70,9 @@ ${SUBDIR:N.WAIT}: .PHONY .MAKE
# Work around parsing of .if nested in .for by putting .WAIT string into a var.
__wait= .WAIT
-.for __target in all all-man checkdpadd clean cleandepend cleandir \
+.for __target in all all-man check checkdpadd clean cleandepend cleandir \
cleanilinks depend distribute lint maninstall manlint obj objlink \
- realinstall regress tags ${SUBDIR_TARGETS}
+ realinstall tags ${SUBDIR_TARGETS}
.ifdef SUBDIR_PARALLEL
__subdir_targets=
.for __dir in ${SUBDIR}
@@ -86,8 +86,7 @@ __deps+= ${__target}_subdir_${__dep}
.endfor
${__target}_subdir_${__dir}: .PHONY .MAKE ${__deps}
.if !defined(NO_SUBDIR)
- @${_+_}set -e; \
- if test -d ${.CURDIR}/${__dir}.${MACHINE_ARCH}; then \
+ @${_+_}if test -d ${.CURDIR}/${__dir}.${MACHINE_ARCH}; then \
${ECHODIR} "===> ${DIRPRFX}${__dir}.${MACHINE_ARCH} (${__target:realinstall=install})"; \
edir=${__dir}.${MACHINE_ARCH}; \
cd ${.CURDIR}/$${edir}; \
@@ -118,7 +117,7 @@ _sub.${__stage}${__target}: _SUBDIR
.endfor
.if !target(${__target})
${__target}: .MAKE
- ${_+_}set -e; cd ${.CURDIR}; ${MAKE} build${__target}; ${MAKE} install${__target}
+ ${_+_}cd ${.CURDIR}; ${MAKE} build${__target}; ${MAKE} install${__target}
.endif
.endfor
diff --git a/share/mk/bsd.sys.mk b/share/mk/bsd.sys.mk
index b36e1ba..6a2db01 100644
--- a/share/mk/bsd.sys.mk
+++ b/share/mk/bsd.sys.mk
@@ -158,11 +158,11 @@ CFLAGS+= ${CWARNFLAGS} ${CWARNFLAGS.${.IMPSRC:T}}
# or expect to ever be up-to-date.
PHONY_NOTMAIN = afterdepend afterinstall all beforedepend beforeinstall \
beforelinking build build-tools buildfiles buildincludes \
- checkdpadd clean cleandepend cleandir cleanobj configure \
+ check checkdpadd clean cleandepend cleandir cleanobj configure \
depend dependall distclean distribute exe extract \
html includes install installfiles installincludes lint \
obj objlink objs objwarn realall realdepend \
- realinstall regress subdir-all subdir-depend subdir-install \
+ realinstall subdir-all subdir-depend subdir-install \
tags whereobj
.if defined(PORTNAME)
diff --git a/share/mk/bsd.test.mk b/share/mk/bsd.test.mk
index 0809803..b2c8f91 100644
--- a/share/mk/bsd.test.mk
+++ b/share/mk/bsd.test.mk
@@ -68,11 +68,16 @@ _TESTS=
.include <plain.test.mk>
.include <tap.test.mk>
+# kyua automatically descends directories; only run make check on the
+# top-level directory
+.if !make(check)
.for ts in ${TESTS_SUBDIRS}
.if empty(SUBDIR:M${ts})
SUBDIR+= ${ts}
.endif
.endfor
+SUBDIR_PARALLEL= t
+.endif
# it is rare for test cases to have man pages
.if !defined(MAN)
@@ -83,18 +88,13 @@ MAN=
.include <suite.test.mk>
.endif
-.if !target(realtest)
-realtest: .PHONY
+.if !target(realcheck)
+realcheck: .PHONY
@echo "$@ not defined; skipping"
.endif
-test: .PHONY
-.ORDER: beforetest realtest
-test: beforetest realtest
-
-.if target(aftertest)
-.ORDER: realtest aftertest
-test: aftertest
-.endif
+beforecheck realcheck aftercheck check: .PHONY
+.ORDER: beforecheck realcheck aftercheck
+check: beforecheck realcheck aftercheck
.include <bsd.progs.mk>
diff --git a/share/mk/suite.test.mk b/share/mk/suite.test.mk
index 0d48950..90e1687 100644
--- a/share/mk/suite.test.mk
+++ b/share/mk/suite.test.mk
@@ -30,12 +30,19 @@ KYUAFILE?= auto
# Kyua as this is later encoded in the Kyuafile test program definitions.
#TEST_INTERFACE.<test-program>= interface-name
+# Metadata properties applicable to all test programs.
+#
+# All the variables for a test program defined in the Makefile are appended
+# to the test program's definition in the Kyuafile. This feature can be
+# used to avoid having to explicitly supply a Kyuafile in the source
+# directory, allowing the caller Makefile to rely on the KYUAFILE=auto
+# behavior defined here.
+#TEST_METADATA+= key="value"
+
# Per-test program metadata properties as a list of key/value pairs.
#
-# All the variables for a particular program are appended to the program's
-# definition in the Kyuafile. This feature can be used to avoid having to
-# explicitly supply a Kyuafile in the source directory, allowing the caller
-# Makefile to rely on the KYUAFILE=auto behavior defined here.
+# These per-test program settings _extend_ the values provided in the
+# unqualified TEST_METADATA variable.
#TEST_METADATA.<test-program>+= key="value"
.if ${KYUAFILE:tl} != "no"
@@ -43,11 +50,12 @@ FILES+= Kyuafile
FILESDIR_Kyuafile= ${TESTSDIR}
.endif
-.if ${KYUAFILE:tl} == "auto"
-CLEANFILES+= Kyuafile Kyuafile.tmp
-.endif
+.for _T in ${_TESTS}
+_TEST_METADATA.${_T}= ${TEST_METADATA} ${TEST_METADATA.${_T}}
+.endfor
.if ${KYUAFILE:tl} == "auto"
+CLEANFILES+= Kyuafile Kyuafile.tmp
Kyuafile: Makefile
@{ \
echo '-- Automatically generated by bsd.test.mk.'; \
@@ -59,11 +67,11 @@ Kyuafile: Makefile
} > ${.TARGET}.tmp
.for _T in ${_TESTS}
.if defined(.PARSEDIR)
- @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${TEST_METADATA.${_T}:C/$/,/:tW:C/^/, /W:C/,$//W}}' \
+ @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${_TEST_METADATA.${_T}:C/$/,/:tW:C/^/, /W:C/,$//W}}' \
>>${.TARGET}.tmp
.else
- @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${TEST_METADATA.${_T}:C/^/, /:Q:S/\\ ,/,/g:S,\\,,g}}' \
- >>Kyuafile.auto.tmp
+ @echo '${TEST_INTERFACE.${_T}}_test_program{name="${_T}"${_TEST_METADATA.${_T}:C/^/, /:Q:S/\\ ,/,/g:S,\\,,g}}' \
+ >>${.TARGET}.tmp
.endif
.endfor
.for _T in ${TESTS_SUBDIRS:N.WAIT}
@@ -72,9 +80,11 @@ Kyuafile: Makefile
@mv ${.TARGET}.tmp ${.TARGET}
.endif
+CHECKDIR?= ${DESTDIR}${TESTSDIR}
+
KYUA= ${LOCALBASE}/bin/kyua
-.if exists(${KYUA})
-# Definition of the "make test" target and supporting variables.
+
+# Definition of the "make check" target and supporting variables.
#
# This target, by necessity, can only work for native builds (i.e. a FreeBSD
# host building a release for the same system). The target runs Kyua, which is
@@ -83,36 +93,15 @@ KYUA= ${LOCALBASE}/bin/kyua
# Due to the dependencies of the binaries built by the source tree and how they
# are used by tests, it is highly possible for a execution of "make test" to
# report bogus results unless the new binaries are put in place.
-realtest: .PHONY
- @echo "*** WARNING: make test is experimental"
- @echo "***"
- @echo "*** Using this test does not preclude you from running the tests"
- @echo "*** installed in ${TESTSBASE}. This test run may raise false"
- @echo "*** positives and/or false negatives."
- @echo
- @set -e; \
- ${KYUA} test -k ${DESTDIR}${TESTSDIR}/Kyuafile; \
- result=0; \
- echo; \
- echo "*** Once again, note that "make test" is unsupported."; \
- test $${result} -eq 0
-.endif
-beforetest: .PHONY
-.if defined(TESTSDIR)
-.if ${TESTSDIR} == ${TESTSBASE}
-# Forbid running from ${TESTSBASE}. It can cause false positives/negatives and
-# it does not cover all the tests (e.g. it misses testing software in external).
- @echo "*** Sorry, you cannot use make test from src/tests. Install the"
- @echo "*** tests into their final location and run them from ${TESTSBASE}"
- @false
-.else
- @echo "*** Using this test does not preclude you from running the tests"
- @echo "*** installed in ${TESTSBASE}. This test run may raise false"
- @echo "*** positives and/or false negatives."
-.endif
-.else
- @echo "*** No TESTSDIR defined; nothing to do."
- @false
-.endif
- @echo
+realcheck: .PHONY
+ @if [ ! -x ${KYUA} ]; then \
+ echo; \
+ echo "kyua binary not installed at expected location (${.TARGET})"; \
+ echo; \
+ echo "Please install via pkg install, or specify the path to the kyua"; \
+ echo "package via the \$${LOCALBASE} variable, e.g. "; \
+ echo "LOCALBASE=\"${LOCALBASE}\""; \
+ false; \
+ fi
+ @${KYUA} test -k ${CHECKDIR}/Kyuafile
diff --git a/share/tests/Makefile b/share/tests/Makefile
index 2c63621..e070571 100644
--- a/share/tests/Makefile
+++ b/share/tests/Makefile
@@ -4,7 +4,7 @@
TESTSDIR= ${TESTSBASE}/share
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c
index 1b3a57f..a7ac7f9 100644
--- a/sys/cam/ctl/ctl.c
+++ b/sys/cam/ctl/ctl.c
@@ -12393,6 +12393,9 @@ ctl_datamove(union ctl_io *io)
if (io->io_hdr.flags & CTL_FLAG_DELAY_DONE) {
io->io_hdr.flags &= ~CTL_FLAG_DELAY_DONE;
} else {
+ struct ctl_lun *lun;
+
+ lun = CTL_LUN(io);
if ((lun != NULL)
&& (lun->delay_info.datamove_delay > 0)) {
diff --git a/sys/cam/ctl/ctl_backend_ramdisk.c b/sys/cam/ctl/ctl_backend_ramdisk.c
index b743bc6..ba3fa1c 100644
--- a/sys/cam/ctl/ctl_backend_ramdisk.c
+++ b/sys/cam/ctl/ctl_backend_ramdisk.c
@@ -1120,8 +1120,10 @@ ctl_backend_ramdisk_create(struct ctl_be_ramdisk_softc *softc,
STAILQ_INIT(&be_lun->cont_queue);
sx_init(&be_lun->page_lock, "cram page lock");
- if (be_lun->cap_bytes == 0)
+ if (be_lun->cap_bytes == 0) {
+ be_lun->indir = 0;
be_lun->pages = malloc(be_lun->pblocksize, M_RAMDISK, M_WAITOK);
+ }
be_lun->zero_page = malloc(be_lun->pblocksize, M_RAMDISK,
M_WAITOK|M_ZERO);
mtx_init(&be_lun->queue_lock, "cram queue lock", NULL, MTX_DEF);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
index a087e6e..cb12cee 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
@@ -155,7 +155,7 @@ int dtrace_destructive_disallow = 0;
dtrace_optval_t dtrace_nonroot_maxsize = (16 * 1024 * 1024);
size_t dtrace_difo_maxsize = (256 * 1024);
dtrace_optval_t dtrace_dof_maxsize = (8 * 1024 * 1024);
-size_t dtrace_global_maxsize = (16 * 1024);
+size_t dtrace_statvar_maxsize = (16 * 1024);
size_t dtrace_actions_max = (16 * 1024);
size_t dtrace_retain_max = 1024;
dtrace_optval_t dtrace_helper_actions_max = 128;
@@ -699,13 +699,33 @@ dtrace_canstore_statvar(uint64_t addr, size_t sz,
dtrace_statvar_t **svars, int nsvars)
{
int i;
+ size_t maxglobalsize, maxlocalsize;
+
+ if (nsvars == 0)
+ return (0);
+
+ maxglobalsize = dtrace_statvar_maxsize;
+ maxlocalsize = (maxglobalsize + sizeof (uint64_t)) * NCPU;
for (i = 0; i < nsvars; i++) {
dtrace_statvar_t *svar = svars[i];
+ uint8_t scope;
+ size_t size;
- if (svar == NULL || svar->dtsv_size == 0)
+ if (svar == NULL || (size = svar->dtsv_size) == 0)
continue;
+ scope = svar->dtsv_var.dtdv_scope;
+
+ /*
+ * We verify that our size is valid in the spirit of providing
+ * defense in depth: we want to prevent attackers from using
+ * DTrace to escalate an orthogonal kernel heap corruption bug
+ * into the ability to store to arbitrary locations in memory.
+ */
+ VERIFY((scope == DIFV_SCOPE_GLOBAL && size < maxglobalsize) ||
+ (scope == DIFV_SCOPE_LOCAL && size < maxlocalsize));
+
if (DTRACE_INRANGE(addr, sz, svar->dtsv_data, svar->dtsv_size))
return (1);
}
@@ -4455,7 +4475,8 @@ dtrace_dif_subr(uint_t subr, uint_t rd, uint64_t *regs,
if (!dtrace_destructive_disallow &&
dtrace_priv_proc_control(state) &&
- !dtrace_istoxic(kaddr, size)) {
+ !dtrace_istoxic(kaddr, size) &&
+ dtrace_canload(kaddr, size, mstate, vstate)) {
DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
dtrace_copyout(kaddr, uaddr, size, flags);
DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
@@ -4470,7 +4491,8 @@ dtrace_dif_subr(uint_t subr, uint_t rd, uint64_t *regs,
if (!dtrace_destructive_disallow &&
dtrace_priv_proc_control(state) &&
- !dtrace_istoxic(kaddr, size)) {
+ !dtrace_istoxic(kaddr, size) &&
+ dtrace_strcanload(kaddr, size, mstate, vstate)) {
DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
dtrace_copyoutstr(kaddr, uaddr, size, flags);
DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
@@ -6458,6 +6480,11 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
regs[r2] ? regs[r2] :
dtrace_strsize_default) + 1;
} else {
+ if (regs[r2] > LONG_MAX) {
+ *flags |= CPU_DTRACE_ILLOP;
+ break;
+ }
+
tupregs[ttop].dttk_size = regs[r2];
}
@@ -9919,9 +9946,10 @@ dtrace_difo_validate(dtrace_difo_t *dp, dtrace_vstate_t *vstate, uint_t nregs,
break;
}
- if (v->dtdv_scope == DIFV_SCOPE_GLOBAL &&
- vt->dtdt_size > dtrace_global_maxsize) {
- err += efunc(i, "oversized by-ref global\n");
+ if ((v->dtdv_scope == DIFV_SCOPE_GLOBAL ||
+ v->dtdv_scope == DIFV_SCOPE_LOCAL) &&
+ vt->dtdt_size > dtrace_statvar_maxsize) {
+ err += efunc(i, "oversized by-ref static\n");
break;
}
}
@@ -10265,6 +10293,9 @@ dtrace_difo_chunksize(dtrace_difo_t *dp, dtrace_vstate_t *vstate)
if (srd == 0)
return;
+ if (sval > LONG_MAX)
+ return;
+
tupregs[ttop++].dttk_size = sval;
}
@@ -10326,6 +10357,19 @@ dtrace_difo_chunksize(dtrace_difo_t *dp, dtrace_vstate_t *vstate)
*/
size = P2ROUNDUP(size, sizeof (uint64_t));
+ /*
+ * Before setting the chunk size, check that we're not going
+ * to set it to a negative value...
+ */
+ if (size > LONG_MAX)
+ return;
+
+ /*
+ * ...and make certain that we didn't badly overflow.
+ */
+ if (size < ksize || size < sizeof (dtrace_dynvar_t))
+ return;
+
if (size > vstate->dtvs_dynvars.dtds_chunksize)
vstate->dtvs_dynvars.dtds_chunksize = size;
}
@@ -13945,6 +13989,8 @@ dtrace_dstate_init(dtrace_dstate_t *dstate, size_t size)
if ((dstate->dtds_chunksize = chunksize) == 0)
dstate->dtds_chunksize = DTRACE_DYNVAR_CHUNKSIZE;
+ VERIFY(dstate->dtds_chunksize < LONG_MAX);
+
if (size < (min = dstate->dtds_chunksize + sizeof (dtrace_dynhash_t)))
size = min;
@@ -13985,6 +14031,9 @@ dtrace_dstate_init(dtrace_dstate_t *dstate, size_t size)
((uintptr_t)base + hashsize * sizeof (dtrace_dynhash_t));
limit = (uintptr_t)base + size;
+ VERIFY((uintptr_t)start < limit);
+ VERIFY((uintptr_t)start >= (uintptr_t)base);
+
maxper = (limit - (uintptr_t)start) / NCPU;
maxper = (maxper / dstate->dtds_chunksize) * dstate->dtds_chunksize;
@@ -14010,7 +14059,7 @@ dtrace_dstate_init(dtrace_dstate_t *dstate, size_t size)
start = (dtrace_dynvar_t *)limit;
}
- ASSERT(limit <= (uintptr_t)base + size);
+ VERIFY(limit <= (uintptr_t)base + size);
for (;;) {
next = (dtrace_dynvar_t *)((uintptr_t)dvar +
@@ -14019,6 +14068,8 @@ dtrace_dstate_init(dtrace_dstate_t *dstate, size_t size)
if ((uintptr_t)next + dstate->dtds_chunksize >= limit)
break;
+ VERIFY((uintptr_t)dvar >= (uintptr_t)base &&
+ (uintptr_t)dvar <= (uintptr_t)base + size);
dvar->dtdv_next = next;
dvar = next;
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
index d6ccf3d..a6904de 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
@@ -709,7 +709,6 @@ typedef struct arc_stats {
kstat_named_t arcstat_l2_size;
kstat_named_t arcstat_l2_asize;
kstat_named_t arcstat_l2_hdr_size;
- kstat_named_t arcstat_l2_padding_needed;
kstat_named_t arcstat_l2_write_trylock_fail;
kstat_named_t arcstat_l2_write_passed_headroom;
kstat_named_t arcstat_l2_write_spa_mismatch;
@@ -807,7 +806,6 @@ static arc_stats_t arc_stats = {
{ "l2_size", KSTAT_DATA_UINT64 },
{ "l2_asize", KSTAT_DATA_UINT64 },
{ "l2_hdr_size", KSTAT_DATA_UINT64 },
- { "l2_padding_needed", KSTAT_DATA_UINT64 },
{ "l2_write_trylock_fail", KSTAT_DATA_UINT64 },
{ "l2_write_passed_headroom", KSTAT_DATA_UINT64 },
{ "l2_write_spa_mismatch", KSTAT_DATA_UINT64 },
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
index 9eaa7d2..9ac5fc2 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
@@ -1604,16 +1604,21 @@ zfsctl_snapshot_vptocnp(struct vop_vptocnp_args *ap)
}
if (sep == NULL) {
mutex_exit(&sdp->sd_lock);
- error = ENOENT;
+ error = SET_ERROR(ENOENT);
} else {
size_t len;
len = strlen(sep->se_name);
- *ap->a_buflen -= len;
- bcopy(sep->se_name, ap->a_buf + *ap->a_buflen, len);
- mutex_exit(&sdp->sd_lock);
- vref(dvp);
- *ap->a_vpp = dvp;
+ if (*ap->a_buflen < len) {
+ mutex_exit(&sdp->sd_lock);
+ error = SET_ERROR(ENOMEM);
+ } else {
+ *ap->a_buflen -= len;
+ bcopy(sep->se_name, ap->a_buf + *ap->a_buflen, len);
+ mutex_exit(&sdp->sd_lock);
+ vref(dvp);
+ *ap->a_vpp = dvp;
+ }
}
VN_RELE(dvp);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
index fa22523..bdab09e 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
@@ -5984,6 +5984,10 @@ zfs_vptocnp(struct vop_vptocnp_args *ap)
error = zfs_znode_parent_and_name(zp, &dzp, name);
if (error == 0) {
len = strlen(name);
+ if (*ap->a_buflen < len)
+ error = SET_ERROR(ENOMEM);
+ }
+ if (error == 0) {
*ap->a_buflen -= len;
bcopy(name, ap->a_buf + *ap->a_buflen, len);
*ap->a_vpp = ZTOV(dzp);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace_impl.h b/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace_impl.h
index a65d1ae..1ec9091 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace_impl.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace_impl.h
@@ -1317,16 +1317,19 @@ extern void dtrace_copystr(uintptr_t, uintptr_t, size_t, volatile uint16_t *);
/*
* DTrace Assertions
*
- * DTrace calls ASSERT from probe context. To assure that a failed ASSERT
- * does not induce a markedly more catastrophic failure (e.g., one from which
- * a dump cannot be gleaned), DTrace must define its own ASSERT to be one that
- * may safely be called from probe context. This header file must thus be
- * included by any DTrace component that calls ASSERT from probe context, and
- * _only_ by those components. (The only exception to this is kernel
- * debugging infrastructure at user-level that doesn't depend on calling
- * ASSERT.)
+ * DTrace calls ASSERT and VERIFY from probe context. To assure that a failed
+ * ASSERT or VERIFY does not induce a markedly more catastrophic failure (e.g.,
+ * one from which a dump cannot be gleaned), DTrace must define its own ASSERT
+ * and VERIFY macros to be ones that may safely be called from probe context.
+ * This header file must thus be included by any DTrace component that calls
+ * ASSERT and/or VERIFY from probe context, and _only_ by those components.
+ * (The only exception to this is kernel debugging infrastructure at user-level
+ * that doesn't depend on calling ASSERT.)
*/
#undef ASSERT
+#undef VERIFY
+#define VERIFY(EX) ((void)((EX) || \
+ dtrace_assfail(#EX, __FILE__, __LINE__)))
#ifdef DEBUG
#define ASSERT(EX) ((void)((EX) || \
dtrace_assfail(#EX, __FILE__, __LINE__)))
diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c
index db5e45d..f1ad912 100644
--- a/sys/compat/freebsd32/freebsd32_misc.c
+++ b/sys/compat/freebsd32/freebsd32_misc.c
@@ -598,7 +598,8 @@ freebsd32_mmap(struct thread *td, struct freebsd32_mmap_args *uap)
#ifdef COMPAT_FREEBSD6
int
-freebsd6_freebsd32_mmap(struct thread *td, struct freebsd6_freebsd32_mmap_args *uap)
+freebsd6_freebsd32_mmap(struct thread *td,
+ struct freebsd6_freebsd32_mmap_args *uap)
{
struct freebsd32_mmap_args ap;
diff --git a/sys/contrib/ipfilter/netinet/ip_fil.h b/sys/contrib/ipfilter/netinet/ip_fil.h
index 01ccd1d..170cc53 100644
--- a/sys/contrib/ipfilter/netinet/ip_fil.h
+++ b/sys/contrib/ipfilter/netinet/ip_fil.h
@@ -11,6 +11,10 @@
#ifndef __IP_FIL_H__
#define __IP_FIL_H__
+#if !defined(linux) || !defined(_KERNEL)
+# include <netinet/in.h>
+#endif
+
#include "netinet/ip_compat.h"
#include "netinet/ipf_rb.h"
#if NETBSD_GE_REV(104040000)
@@ -24,10 +28,6 @@
# endif
#endif
-#if !defined(linux) || !defined(_KERNEL)
-# include <netinet/in.h>
-#endif
-
#ifndef SOLARIS
# if defined(sun) && (defined(__svr4__) || defined(__SVR4))
# define SOLARIS 1
diff --git a/sys/dev/alc/if_alc.c b/sys/dev/alc/if_alc.c
index 76e4614..e789a1d 100644
--- a/sys/dev/alc/if_alc.c
+++ b/sys/dev/alc/if_alc.c
@@ -122,6 +122,8 @@ static struct alc_ident alc_ident_table[] = {
"Killer E2200 Gigabit Ethernet" },
{ VENDORID_ATHEROS, DEVICEID_ATHEROS_E2400, 9 * 1024,
"Killer E2400 Gigabit Ethernet" },
+ { VENDORID_ATHEROS, DEVICEID_ATHEROS_E2500, 9 * 1024,
+ "Killer E2500 Gigabit Ethernet" },
{ 0, 0, 0, NULL}
};
@@ -1082,6 +1084,7 @@ alc_phy_down(struct alc_softc *sc)
case DEVICEID_ATHEROS_AR8161:
case DEVICEID_ATHEROS_E2200:
case DEVICEID_ATHEROS_E2400:
+ case DEVICEID_ATHEROS_E2500:
case DEVICEID_ATHEROS_AR8162:
case DEVICEID_ATHEROS_AR8171:
case DEVICEID_ATHEROS_AR8172:
@@ -1401,6 +1404,7 @@ alc_attach(device_t dev)
switch (sc->alc_ident->deviceid) {
case DEVICEID_ATHEROS_E2200:
case DEVICEID_ATHEROS_E2400:
+ case DEVICEID_ATHEROS_E2500:
sc->alc_flags |= ALC_FLAG_E2X00;
/* FALLTHROUGH */
case DEVICEID_ATHEROS_AR8161:
@@ -1479,7 +1483,8 @@ alc_attach(device_t dev)
if (alc_dma_burst[sc->alc_dma_wr_burst] > 1024)
sc->alc_dma_wr_burst = 3;
/*
- * Force maximum payload size to 128 bytes for E2200/E2400.
+ * Force maximum payload size to 128 bytes for
+ * E2200/E2400/E2500.
* Otherwise it triggers DMA write error.
*/
if ((sc->alc_flags & ALC_FLAG_E2X00) != 0)
diff --git a/sys/dev/alc/if_alcreg.h b/sys/dev/alc/if_alcreg.h
index ae63084..29d877d 100644
--- a/sys/dev/alc/if_alcreg.h
+++ b/sys/dev/alc/if_alcreg.h
@@ -50,6 +50,7 @@
#define DEVICEID_ATHEROS_AR8172 0x10A0
#define DEVICEID_ATHEROS_E2200 0xE091
#define DEVICEID_ATHEROS_E2400 0xE0A1
+#define DEVICEID_ATHEROS_E2500 0xE0B1
#define ATHEROS_AR8152_B_V10 0xC0
#define ATHEROS_AR8152_B_V11 0xC1
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 6b6b791..e9ab2f6 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -5156,7 +5156,7 @@ em_enable_intr(struct adapter *adapter)
u32 ims_mask = IMS_ENABLE_MASK;
if (hw->mac.type == e1000_82574) {
- E1000_WRITE_REG(hw, EM_EIAC, adapter->ims);
+ E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK);
ims_mask |= adapter->ims;
}
E1000_WRITE_REG(hw, E1000_IMS, ims_mask);
diff --git a/sys/dev/hyperv/include/hyperv.h b/sys/dev/hyperv/include/hyperv.h
index 0eda9f0..f0161fc 100644
--- a/sys/dev/hyperv/include/hyperv.h
+++ b/sys/dev/hyperv/include/hyperv.h
@@ -79,9 +79,17 @@ struct hyperv_guid {
#define HYPERV_GUID_STRLEN 40
-int hyperv_guid2str(const struct hyperv_guid *, char *, size_t);
+typedef uint64_t (*hyperv_tc64_t)(void);
-extern u_int hyperv_features; /* CPUID_HV_MSR_ */
+int hyperv_guid2str(const struct hyperv_guid *, char *,
+ size_t);
+
+/*
+ * hyperv_tc64 could be NULL, if there were no suitable Hyper-V
+ * specific timecounter.
+ */
+extern hyperv_tc64_t hyperv_tc64;
+extern u_int hyperv_features; /* CPUID_HV_MSR_ */
#endif /* _KERNEL */
diff --git a/sys/dev/hyperv/netvsc/hn_nvs.c b/sys/dev/hyperv/netvsc/hn_nvs.c
index aa61a33..b4e9b1a 100644
--- a/sys/dev/hyperv/netvsc/hn_nvs.c
+++ b/sys/dev/hyperv/netvsc/hn_nvs.c
@@ -500,6 +500,8 @@ hn_nvs_conf_ndis(struct hn_softc *sc, int mtu)
conf.nvs_type = HN_NVS_TYPE_NDIS_CONF;
conf.nvs_mtu = mtu;
conf.nvs_caps = HN_NVS_NDIS_CONF_VLAN;
+ if (sc->hn_nvs_ver >= HN_NVS_VERSION_5)
+ conf.nvs_caps |= HN_NVS_NDIS_CONF_SRIOV;
/* NOTE: No response. */
error = hn_nvs_req_send(sc, &conf, sizeof(conf));
@@ -719,3 +721,15 @@ hn_nvs_send_rndis_ctrl(struct vmbus_channel *chan,
return hn_nvs_send_rndis_sglist(chan, HN_NVS_RNDIS_MTYPE_CTRL,
sndc, gpa, gpa_cnt);
}
+
+void
+hn_nvs_set_datapath(struct hn_softc *sc, uint32_t path)
+{
+ struct hn_nvs_datapath dp;
+
+ memset(&dp, 0, sizeof(dp));
+ dp.nvs_type = HN_NVS_TYPE_SET_DATAPATH;
+ dp.nvs_active_path = path;
+
+ hn_nvs_req_send(sc, &dp, sizeof(dp));
+}
diff --git a/sys/dev/hyperv/netvsc/hn_nvs.h b/sys/dev/hyperv/netvsc/hn_nvs.h
index 49b03e0..f716abf 100644
--- a/sys/dev/hyperv/netvsc/hn_nvs.h
+++ b/sys/dev/hyperv/netvsc/hn_nvs.h
@@ -100,6 +100,7 @@ void hn_nvs_sent_xact(struct hn_nvs_sendctx *sndc,
int hn_nvs_send_rndis_ctrl(struct vmbus_channel *chan,
struct hn_nvs_sendctx *sndc, struct vmbus_gpa *gpa,
int gpa_cnt);
+void hn_nvs_set_datapath(struct hn_softc *sc, uint32_t path);
extern struct hn_nvs_sendctx hn_nvs_sendctx_none;
diff --git a/sys/dev/hyperv/netvsc/if_hn.c b/sys/dev/hyperv/netvsc/if_hn.c
index 8750ab0..8e99eef 100644
--- a/sys/dev/hyperv/netvsc/if_hn.c
+++ b/sys/dev/hyperv/netvsc/if_hn.c
@@ -77,6 +77,7 @@ __FBSDID("$FreeBSD$");
#include <sys/systm.h>
#include <sys/taskqueue.h>
#include <sys/buf_ring.h>
+#include <sys/eventhandler.h>
#include <machine/atomic.h>
#include <machine/in_cksum.h>
@@ -85,6 +86,7 @@ __FBSDID("$FreeBSD$");
#include <net/ethernet.h>
#include <net/if.h>
#include <net/if_arp.h>
+#include <net/if_dl.h>
#include <net/if_media.h>
#include <net/if_types.h>
#include <net/if_var.h>
@@ -211,6 +213,11 @@ struct hn_rxinfo {
uint32_t hash_value;
};
+struct hn_update_vf {
+ struct hn_rx_ring *rxr;
+ struct ifnet *vf;
+};
+
#define HN_RXINFO_VLAN 0x0001
#define HN_RXINFO_CSUM 0x0002
#define HN_RXINFO_HASHINF 0x0004
@@ -287,8 +294,9 @@ static int hn_txagg_pkts_sysctl(SYSCTL_HANDLER_ARGS);
static int hn_txagg_pktmax_sysctl(SYSCTL_HANDLER_ARGS);
static int hn_txagg_align_sysctl(SYSCTL_HANDLER_ARGS);
static int hn_polling_sysctl(SYSCTL_HANDLER_ARGS);
+static int hn_vf_sysctl(SYSCTL_HANDLER_ARGS);
-static void hn_stop(struct hn_softc *);
+static void hn_stop(struct hn_softc *, bool);
static void hn_init_locked(struct hn_softc *);
static int hn_chan_attach(struct hn_softc *,
struct vmbus_channel *);
@@ -696,7 +704,8 @@ hn_rxfilter_config(struct hn_softc *sc)
HN_LOCK_ASSERT(sc);
- if (ifp->if_flags & IFF_PROMISC) {
+ if ((ifp->if_flags & IFF_PROMISC) ||
+ (sc->hn_flags & HN_FLAG_VF)) {
filter = NDIS_PACKET_TYPE_PROMISCUOUS;
} else {
filter = NDIS_PACKET_TYPE_DIRECTED;
@@ -883,6 +892,122 @@ hn_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
ifmr->ifm_active |= IFM_10G_T | IFM_FDX;
}
+static void
+hn_update_vf_task(void *arg, int pending __unused)
+{
+ struct hn_update_vf *uv = arg;
+
+ uv->rxr->hn_vf = uv->vf;
+}
+
+static void
+hn_update_vf(struct hn_softc *sc, struct ifnet *vf)
+{
+ struct hn_rx_ring *rxr;
+ struct hn_update_vf uv;
+ struct task task;
+ int i;
+
+ HN_LOCK_ASSERT(sc);
+
+ TASK_INIT(&task, 0, hn_update_vf_task, &uv);
+
+ for (i = 0; i < sc->hn_rx_ring_cnt; ++i) {
+ rxr = &sc->hn_rx_ring[i];
+
+ if (i < sc->hn_rx_ring_inuse) {
+ uv.rxr = rxr;
+ uv.vf = vf;
+ vmbus_chan_run_task(rxr->hn_chan, &task);
+ } else {
+ rxr->hn_vf = vf;
+ }
+ }
+}
+
+static void
+hn_set_vf(struct hn_softc *sc, struct ifnet *ifp, bool vf)
+{
+ struct ifnet *hn_ifp;
+
+ HN_LOCK(sc);
+
+ if (!(sc->hn_flags & HN_FLAG_SYNTH_ATTACHED))
+ goto out;
+
+ hn_ifp = sc->hn_ifp;
+
+ if (ifp == hn_ifp)
+ goto out;
+
+ if (ifp->if_alloctype != IFT_ETHER)
+ goto out;
+
+ /* Ignore lagg/vlan interfaces */
+ if (strcmp(ifp->if_dname, "lagg") == 0 ||
+ strcmp(ifp->if_dname, "vlan") == 0)
+ goto out;
+
+ if (bcmp(IF_LLADDR(ifp), IF_LLADDR(hn_ifp), ETHER_ADDR_LEN) != 0)
+ goto out;
+
+ /* Now we're sure 'ifp' is a real VF device. */
+ if (vf) {
+ if (sc->hn_flags & HN_FLAG_VF)
+ goto out;
+
+ sc->hn_flags |= HN_FLAG_VF;
+ hn_rxfilter_config(sc);
+ } else {
+ if (!(sc->hn_flags & HN_FLAG_VF))
+ goto out;
+
+ sc->hn_flags &= ~HN_FLAG_VF;
+ if (sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING)
+ hn_rxfilter_config(sc);
+ else
+ hn_set_rxfilter(sc, NDIS_PACKET_TYPE_NONE);
+ }
+
+ hn_nvs_set_datapath(sc,
+ vf ? HN_NVS_DATAPATH_VF : HN_NVS_DATAPATH_SYNTHETIC);
+
+ hn_update_vf(sc, vf ? ifp : NULL);
+
+ if (vf) {
+ hn_suspend_mgmt(sc);
+ sc->hn_link_flags &=
+ ~(HN_LINK_FLAG_LINKUP | HN_LINK_FLAG_NETCHG);
+ if_link_state_change(sc->hn_ifp, LINK_STATE_DOWN);
+ } else {
+ hn_resume_mgmt(sc);
+ }
+
+ devctl_notify("HYPERV_NIC_VF", if_name(hn_ifp),
+ vf ? "VF_UP" : "VF_DOWN", NULL);
+
+ if (bootverbose)
+ if_printf(hn_ifp, "Data path is switched %s %s\n",
+ vf ? "to" : "from", if_name(ifp));
+out:
+ HN_UNLOCK(sc);
+}
+
+static void
+hn_ifnet_event(void *arg, struct ifnet *ifp, int event)
+{
+ if (event != IFNET_EVENT_UP && event != IFNET_EVENT_DOWN)
+ return;
+
+ hn_set_vf(arg, ifp, event == IFNET_EVENT_UP);
+}
+
+static void
+hn_ifaddr_event(void *arg, struct ifnet *ifp)
+{
+ hn_set_vf(arg, ifp, ifp->if_flags & IFF_UP);
+}
+
/* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */
static const struct hyperv_guid g_net_vsc_device_type = {
.hv_guid = {0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46,
@@ -1111,6 +1236,9 @@ hn_attach(device_t dev)
CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_MPSAFE, sc, 0,
hn_polling_sysctl, "I",
"Polling frequency: [100,1000000], 0 disable polling");
+ SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "vf",
+ CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, sc, 0,
+ hn_vf_sysctl, "A", "Virtual Function's name");
/*
* Setup the ifmedia, which has been initialized earlier.
@@ -1204,6 +1332,12 @@ hn_attach(device_t dev)
sc->hn_mgmt_taskq = sc->hn_mgmt_taskq0;
hn_update_link_status(sc);
+ sc->hn_ifnet_evthand = EVENTHANDLER_REGISTER(ifnet_event,
+ hn_ifnet_event, sc, EVENTHANDLER_PRI_ANY);
+
+ sc->hn_ifaddr_evthand = EVENTHANDLER_REGISTER(ifaddr_event,
+ hn_ifaddr_event, sc, EVENTHANDLER_PRI_ANY);
+
return (0);
failed:
if (sc->hn_flags & HN_FLAG_SYNTH_ATTACHED)
@@ -1218,6 +1352,11 @@ hn_detach(device_t dev)
struct hn_softc *sc = device_get_softc(dev);
struct ifnet *ifp = sc->hn_ifp;
+ if (sc->hn_ifaddr_evthand != NULL)
+ EVENTHANDLER_DEREGISTER(ifaddr_event, sc->hn_ifaddr_evthand);
+ if (sc->hn_ifnet_evthand != NULL)
+ EVENTHANDLER_DEREGISTER(ifnet_event, sc->hn_ifnet_evthand);
+
if (sc->hn_xact != NULL && vmbus_chan_is_revoked(sc->hn_prichan)) {
/*
* In case that the vmbus missed the orphan handler
@@ -1230,7 +1369,7 @@ hn_detach(device_t dev)
HN_LOCK(sc);
if (sc->hn_flags & HN_FLAG_SYNTH_ATTACHED) {
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
- hn_stop(sc);
+ hn_stop(sc, true);
/*
* NOTE:
* hn_stop() only suspends data, so managment
@@ -2113,20 +2252,15 @@ static int
hn_rxpkt(struct hn_rx_ring *rxr, const void *data, int dlen,
const struct hn_rxinfo *info)
{
- struct ifnet *ifp = rxr->hn_ifp;
+ struct ifnet *ifp;
struct mbuf *m_new;
int size, do_lro = 0, do_csum = 1;
int hash_type = M_HASHTYPE_OPAQUE;
- if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
- return (0);
+ /* If the VF is active, inject the packet through the VF */
+ ifp = rxr->hn_vf ? rxr->hn_vf : rxr->hn_ifp;
- /*
- * Bail out if packet contains more data than configured MTU.
- */
- if (dlen > (ifp->if_mtu + ETHER_HDR_LEN)) {
- return (0);
- } else if (dlen <= MHLEN) {
+ if (dlen <= MHLEN) {
m_new = m_gethdr(M_NOWAIT, MT_DATA);
if (m_new == NULL) {
if_inc_counter(ifp, IFCOUNTER_IQDROPS, 1);
@@ -2434,7 +2568,7 @@ hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
}
} else {
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
- hn_stop(sc);
+ hn_stop(sc, false);
}
sc->hn_if_flags = ifp->if_flags;
@@ -2524,7 +2658,7 @@ hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
}
static void
-hn_stop(struct hn_softc *sc)
+hn_stop(struct hn_softc *sc, bool detaching)
{
struct ifnet *ifp = sc->hn_ifp;
int i;
@@ -2545,6 +2679,13 @@ hn_stop(struct hn_softc *sc)
atomic_clear_int(&ifp->if_drv_flags, IFF_DRV_OACTIVE);
for (i = 0; i < sc->hn_tx_ring_inuse; ++i)
sc->hn_tx_ring[i].hn_oactive = 0;
+
+ /*
+ * If the VF is active, make sure the filter is not 0, even if
+ * the synthetic NIC is down.
+ */
+ if (!detaching && (sc->hn_flags & HN_FLAG_VF))
+ hn_rxfilter_config(sc);
}
static void
@@ -3071,6 +3212,22 @@ hn_rss_hash_sysctl(SYSCTL_HANDLER_ARGS)
}
static int
+hn_vf_sysctl(SYSCTL_HANDLER_ARGS)
+{
+ struct hn_softc *sc = arg1;
+ char vf_name[128];
+ struct ifnet *vf;
+
+ HN_LOCK(sc);
+ vf_name[0] = '\0';
+ vf = sc->hn_rx_ring[0].hn_vf;
+ if (vf != NULL)
+ snprintf(vf_name, sizeof(vf_name), "%s", if_name(vf));
+ HN_UNLOCK(sc);
+ return sysctl_handle_string(oidp, vf_name, sizeof(vf_name), req);
+}
+
+static int
hn_check_iplen(const struct mbuf *m, int hoff)
{
const struct ip *ip;
@@ -4297,6 +4454,7 @@ hn_chan_attach(struct hn_softc *sc, struct vmbus_channel *chan)
KASSERT((rxr->hn_rx_flags & HN_RX_FLAG_ATTACHED) == 0,
("RX ring %d already attached", idx));
rxr->hn_rx_flags |= HN_RX_FLAG_ATTACHED;
+ rxr->hn_chan = chan;
if (bootverbose) {
if_printf(sc->hn_ifp, "link RX ring %d to chan%u\n",
@@ -4855,7 +5013,8 @@ hn_suspend(struct hn_softc *sc)
/* Disable polling. */
hn_polling(sc, 0);
- if (sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if ((sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING) ||
+ (sc->hn_flags & HN_FLAG_VF))
hn_suspend_data(sc);
hn_suspend_mgmt(sc);
}
@@ -4944,9 +5103,18 @@ static void
hn_resume(struct hn_softc *sc)
{
- if (sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING)
+ if ((sc->hn_ifp->if_drv_flags & IFF_DRV_RUNNING) ||
+ (sc->hn_flags & HN_FLAG_VF))
hn_resume_data(sc);
- hn_resume_mgmt(sc);
+
+ /*
+ * When the VF is activated, the synthetic interface is changed
+ * to DOWN in hn_set_vf(). Here, if the VF is still active, we
+ * don't call hn_resume_mgmt() until the VF is deactivated in
+ * hn_set_vf().
+ */
+ if (!(sc->hn_flags & HN_FLAG_VF))
+ hn_resume_mgmt(sc);
/*
* Re-enable polling if this interface is running and
diff --git a/sys/dev/hyperv/netvsc/if_hnreg.h b/sys/dev/hyperv/netvsc/if_hnreg.h
index a3b2b8b..a964b4f 100644
--- a/sys/dev/hyperv/netvsc/if_hnreg.h
+++ b/sys/dev/hyperv/netvsc/if_hnreg.h
@@ -133,6 +133,17 @@ struct hn_nvs_ndis_init {
} __packed;
CTASSERT(sizeof(struct hn_nvs_ndis_init) >= HN_NVS_REQSIZE_MIN);
+#define HN_NVS_DATAPATH_SYNTHETIC 0
+#define HN_NVS_DATAPATH_VF 1
+
+/* No response */
+struct hn_nvs_datapath {
+ uint32_t nvs_type; /* HN_NVS_TYPE_SET_DATAPATH */
+ uint32_t nvs_active_path;/* HN_NVS_DATAPATH_* */
+ uint32_t nvs_rsvd[6];
+} __packed;
+CTASSERT(sizeof(struct hn_nvs_datapath) >= HN_NVS_REQSIZE_MIN);
+
struct hn_nvs_rxbuf_conn {
uint32_t nvs_type; /* HN_NVS_TYPE_RXBUF_CONN */
uint32_t nvs_gpadl; /* RXBUF vmbus GPADL */
diff --git a/sys/dev/hyperv/netvsc/if_hnvar.h b/sys/dev/hyperv/netvsc/if_hnvar.h
index 7d5d912..9c39830 100644
--- a/sys/dev/hyperv/netvsc/if_hnvar.h
+++ b/sys/dev/hyperv/netvsc/if_hnvar.h
@@ -59,6 +59,7 @@ struct hn_tx_ring;
struct hn_rx_ring {
struct ifnet *hn_ifp;
+ struct ifnet *hn_vf; /* SR-IOV VF */
struct hn_tx_ring *hn_txr;
void *hn_pktbuf;
int hn_pktbuf_len;
@@ -85,6 +86,8 @@ struct hn_rx_ring {
void *hn_br; /* TX/RX bufring */
struct hyperv_dma hn_br_dma;
+
+ struct vmbus_channel *hn_chan;
} __aligned(CACHE_LINE_SIZE);
#define HN_TRUST_HCSUM_IP 0x0001
@@ -233,6 +236,9 @@ struct hn_softc {
int hn_rss_ind_size;
uint32_t hn_rss_hash; /* NDIS_HASH_ */
struct ndis_rssprm_toeplitz hn_rss;
+
+ eventhandler_tag hn_ifaddr_evthand;
+ eventhandler_tag hn_ifnet_evthand;
};
#define HN_FLAG_RXBUF_CONNECTED 0x0001
@@ -243,6 +249,7 @@ struct hn_softc {
#define HN_FLAG_NO_SLEEPING 0x0020
#define HN_FLAG_RXBUF_REF 0x0040
#define HN_FLAG_CHIM_REF 0x0080
+#define HN_FLAG_VF 0x0100
#define HN_FLAG_ERRORS (HN_FLAG_RXBUF_REF | HN_FLAG_CHIM_REF)
diff --git a/sys/dev/hyperv/utilities/vmbus_timesync.c b/sys/dev/hyperv/utilities/vmbus_timesync.c
index 7610027..66b1e48 100644
--- a/sys/dev/hyperv/utilities/vmbus_timesync.c
+++ b/sys/dev/hyperv/utilities/vmbus_timesync.c
@@ -52,8 +52,7 @@ __FBSDID("$FreeBSD$");
VMBUS_ICVER_LE(VMBUS_IC_VERSION(4, 0), (sc)->ic_msgver)
#define VMBUS_TIMESYNC_DORTT(sc) \
- (VMBUS_TIMESYNC_MSGVER4((sc)) &&\
- (hyperv_features & CPUID_HV_MSR_TIME_REFCNT))
+ (VMBUS_TIMESYNC_MSGVER4((sc)) && hyperv_tc64 != NULL)
static int vmbus_timesync_probe(device_t);
static int vmbus_timesync_attach(device_t);
@@ -117,7 +116,7 @@ vmbus_timesync(struct vmbus_ic_softc *sc, uint64_t hvtime, uint64_t sent_tc,
uint64_t hv_ns, vm_ns, rtt = 0;
if (VMBUS_TIMESYNC_DORTT(sc))
- rtt = rdmsr(MSR_HV_TIME_REF_COUNT) - sent_tc;
+ rtt = hyperv_tc64() - sent_tc;
hv_ns = (hvtime - VMBUS_ICMSG_TS_BASE + rtt) * HYPERV_TIMER_NS_FACTOR;
nanotime(&vm_ts);
diff --git a/sys/dev/hyperv/vmbus/amd64/hyperv_machdep.c b/sys/dev/hyperv/vmbus/amd64/hyperv_machdep.c
index 9caed81..118178f 100644
--- a/sys/dev/hyperv/vmbus/amd64/hyperv_machdep.c
+++ b/sys/dev/hyperv/vmbus/amd64/hyperv_machdep.c
@@ -118,8 +118,8 @@ hyperv_tsc_mmap(struct cdev *dev __unused, vm_ooffset_t offset,
}
#define HYPERV_TSC_TIMECOUNT(fence) \
-static u_int \
-hyperv_tsc_timecount_##fence(struct timecounter *tc) \
+static uint64_t \
+hyperv_tc64_tsc_##fence(void) \
{ \
struct hyperv_reftsc *tsc_ref = hyperv_ref_tsc.tsc_ref; \
uint32_t seq; \
@@ -150,6 +150,13 @@ hyperv_tsc_timecount_##fence(struct timecounter *tc) \
/* Fallback to the generic timecounter, i.e. rdmsr. */ \
return (rdmsr(MSR_HV_TIME_REF_COUNT)); \
} \
+ \
+static u_int \
+hyperv_tsc_timecount_##fence(struct timecounter *tc __unused) \
+{ \
+ \
+ return (hyperv_tc64_tsc_##fence()); \
+} \
struct __hack
HYPERV_TSC_TIMECOUNT(lfence);
@@ -158,6 +165,7 @@ HYPERV_TSC_TIMECOUNT(mfence);
static void
hyperv_tsc_tcinit(void *dummy __unused)
{
+ hyperv_tc64_t tc64 = NULL;
uint64_t val, orig;
if ((hyperv_features &
@@ -170,11 +178,13 @@ hyperv_tsc_tcinit(void *dummy __unused)
case CPU_VENDOR_AMD:
hyperv_tsc_timecounter.tc_get_timecount =
hyperv_tsc_timecount_mfence;
+ tc64 = hyperv_tc64_tsc_mfence;
break;
case CPU_VENDOR_INTEL:
hyperv_tsc_timecounter.tc_get_timecount =
hyperv_tsc_timecount_lfence;
+ tc64 = hyperv_tc64_tsc_lfence;
break;
default:
@@ -199,6 +209,10 @@ hyperv_tsc_tcinit(void *dummy __unused)
/* Register "enlightened" timecounter. */
tc_init(&hyperv_tsc_timecounter);
+ /* Install 64 bits timecounter method for other modules to use. */
+ KASSERT(tc64 != NULL, ("tc64 is not set"));
+ hyperv_tc64 = tc64;
+
/* Add device for mmap(2). */
make_dev(&hyperv_tsc_cdevsw, 0, UID_ROOT, GID_WHEEL, 0444,
HYPERV_REFTSC_DEVNAME);
diff --git a/sys/dev/hyperv/vmbus/hyperv.c b/sys/dev/hyperv/vmbus/hyperv.c
index 2df313b..144bff5 100644
--- a/sys/dev/hyperv/vmbus/hyperv.c
+++ b/sys/dev/hyperv/vmbus/hyperv.c
@@ -77,6 +77,8 @@ u_int hyperv_recommends;
static u_int hyperv_pm_features;
static u_int hyperv_features3;
+hyperv_tc64_t hyperv_tc64;
+
static struct timecounter hyperv_timecounter = {
.tc_get_timecount = hyperv_get_timecount,
.tc_poll_pps = NULL,
@@ -96,6 +98,13 @@ hyperv_get_timecount(struct timecounter *tc __unused)
return rdmsr(MSR_HV_TIME_REF_COUNT);
}
+static uint64_t
+hyperv_tc64_rdmsr(void)
+{
+
+ return (rdmsr(MSR_HV_TIME_REF_COUNT));
+}
+
uint64_t
hypercall_post_message(bus_addr_t msg_paddr)
{
@@ -232,6 +241,12 @@ hyperv_init(void *dummy __unused)
if (hyperv_features & CPUID_HV_MSR_TIME_REFCNT) {
/* Register Hyper-V timecounter */
tc_init(&hyperv_timecounter);
+
+ /*
+ * Install 64 bits timecounter method for other modules
+ * to use.
+ */
+ hyperv_tc64 = hyperv_tc64_rdmsr;
}
}
SYSINIT(hyperv_initialize, SI_SUB_HYPERVISOR, SI_ORDER_FIRST, hyperv_init,
diff --git a/sys/dev/hyperv/vmbus/vmbus_et.c b/sys/dev/hyperv/vmbus/vmbus_et.c
index 1e0c746..93f2ffa 100644
--- a/sys/dev/hyperv/vmbus/vmbus_et.c
+++ b/sys/dev/hyperv/vmbus/vmbus_et.c
@@ -50,13 +50,10 @@ __FBSDID("$FreeBSD$");
MSR_HV_STIMER_CFG_SINT_MASK)
/*
- * Two additionally required features:
+ * Additionally required feature:
* - SynIC is needed for interrupt generation.
- * - Time reference counter is needed to set ABS reference count to
- * STIMER0_COUNT.
*/
-#define CPUID_HV_ET_MASK (CPUID_HV_MSR_TIME_REFCNT | \
- CPUID_HV_MSR_SYNIC | \
+#define CPUID_HV_ET_MASK (CPUID_HV_MSR_SYNIC | \
CPUID_HV_MSR_SYNTIMER)
static void vmbus_et_identify(driver_t *, device_t);
@@ -104,7 +101,7 @@ vmbus_et_start(struct eventtimer *et __unused, sbintime_t first,
{
uint64_t current;
- current = rdmsr(MSR_HV_TIME_REF_COUNT);
+ current = hyperv_tc64();
current += hyperv_sbintime2count(first);
wrmsr(MSR_HV_STIMER0_COUNT, current);
@@ -133,7 +130,8 @@ vmbus_et_identify(driver_t *driver, device_t parent)
{
if (device_get_unit(parent) != 0 ||
device_find_child(parent, VMBUS_ET_NAME, -1) != NULL ||
- (hyperv_features & CPUID_HV_ET_MASK) != CPUID_HV_ET_MASK)
+ (hyperv_features & CPUID_HV_ET_MASK) != CPUID_HV_ET_MASK ||
+ hyperv_tc64 == NULL)
return;
device_add_child(parent, VMBUS_ET_NAME, -1);
@@ -189,9 +187,8 @@ vmbus_et_attach(device_t dev)
vmbus_et.et_start = vmbus_et_start;
/*
- * Delay a bit to make sure that MSR_HV_TIME_REF_COUNT will
- * not return 0, since writing 0 to STIMER0_COUNT will disable
- * STIMER0.
+ * Delay a bit to make sure that hyperv_tc64 will not return 0,
+ * since writing 0 to STIMER0_COUNT will disable STIMER0.
*/
DELAY(100);
smp_rendezvous(NULL, vmbus_et_config, NULL, NULL);
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c
index 9d38f60..c77bda5 100644
--- a/sys/dev/isp/isp.c
+++ b/sys/dev/isp/isp.c
@@ -4451,11 +4451,7 @@ isp_start(XS_T *xs)
if (XS_TAG_P(xs)) {
ttype = XS_TAG_TYPE(xs);
} else {
- if (XS_CDBP(xs)[0] == 0x3) {
- ttype = REQFLAG_HTAG;
- } else {
- ttype = REQFLAG_STAG;
- }
+ ttype = REQFLAG_STAG;
}
if (ttype == REQFLAG_OTAG) {
ttype = FCP_CMND_TASK_ATTR_ORDERED;
@@ -4479,14 +4475,7 @@ isp_start(XS_T *xs)
if (XS_TAG_P(xs)) {
((ispreqt2_t *)reqp)->req_flags = XS_TAG_TYPE(xs);
} else {
- /*
- * If we don't know what tag to use, use HEAD OF QUEUE
- * for Request Sense or Simple.
- */
- if (XS_CDBP(xs)[0] == 0x3) /* REQUEST SENSE */
- ((ispreqt2_t *)reqp)->req_flags = REQFLAG_HTAG;
- else
- ((ispreqt2_t *)reqp)->req_flags = REQFLAG_STAG;
+ ((ispreqt2_t *)reqp)->req_flags = REQFLAG_STAG;
}
} else {
sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs));
diff --git a/sys/dev/nand/nand_geom.c b/sys/dev/nand/nand_geom.c
index 98373aa..913958a 100644
--- a/sys/dev/nand/nand_geom.c
+++ b/sys/dev/nand/nand_geom.c
@@ -416,7 +416,7 @@ create_geom_disk(struct nand_chip *chip)
snprintf(rdisk->d_ident, sizeof(rdisk->d_ident),
"nand_raw: Man:0x%02x Dev:0x%02x", chip->id.man_id,
chip->id.dev_id);
- disk->d_rotation_rate = DISK_RR_NON_ROTATING;
+ rdisk->d_rotation_rate = DISK_RR_NON_ROTATING;
disk_create(rdisk, DISK_VERSION);
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index 26cf526..d36f4cc 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -269,13 +269,14 @@ static const struct pci_quirk pci_quirks[] = {
{ 0x43851002, PCI_QUIRK_UNMAP_REG, 0x14, 0 },
/*
- * Atheros AR8161/AR8162/E2200/E2400 Ethernet controllers have a
- * bug that MSI interrupt does not assert if PCIM_CMD_INTxDIS bit
+ * Atheros AR8161/AR8162/E2200/E2400/E2500 Ethernet controllers have
+ * a bug that MSI interrupt does not assert if PCIM_CMD_INTxDIS bit
* of the command register is set.
*/
{ 0x10911969, PCI_QUIRK_MSI_INTX_BUG, 0, 0 },
{ 0xE0911969, PCI_QUIRK_MSI_INTX_BUG, 0, 0 },
{ 0xE0A11969, PCI_QUIRK_MSI_INTX_BUG, 0, 0 },
+ { 0xE0B11969, PCI_QUIRK_MSI_INTX_BUG, 0, 0 },
{ 0x10901969, PCI_QUIRK_MSI_INTX_BUG, 0, 0 },
/*
diff --git a/sys/dev/ppbus/vpo.c b/sys/dev/ppbus/vpo.c
index a4f5226..f508275 100644
--- a/sys/dev/ppbus/vpo.c
+++ b/sys/dev/ppbus/vpo.c
@@ -316,7 +316,7 @@ vpo_action(struct cam_sim *sim, union ccb *ccb)
}
#ifdef VP0_DEBUG
device_printf(vpo->vpo_dev, "XPT_SCSI_IO (0x%x) request\n",
- scsiio_cdb_ptr(csio));
+ *scsiio_cdb_ptr(csio));
#endif
vpo_intr(vpo, csio);
diff --git a/sys/fs/devfs/devfs_devs.c b/sys/fs/devfs/devfs_devs.c
index 288e7bc..ad7a034 100644
--- a/sys/fs/devfs/devfs_devs.c
+++ b/sys/fs/devfs/devfs_devs.c
@@ -208,7 +208,7 @@ devfs_newdirent(char *name, int namelen)
struct dirent d;
d.d_namlen = namelen;
- i = sizeof (*de) + GENERIC_DIRSIZ(&d);
+ i = sizeof(*de) + GENERIC_DIRSIZ(&d);
de = malloc(i, M_DEVFS3, M_WAITOK | M_ZERO);
de->de_dirent = (struct dirent *)(de + 1);
de->de_dirent->d_namlen = namelen;
@@ -246,7 +246,8 @@ devfs_parent_dirent(struct devfs_dirent *de)
}
struct devfs_dirent *
-devfs_vmkdir(struct devfs_mount *dmp, char *name, int namelen, struct devfs_dirent *dotdot, u_int inode)
+devfs_vmkdir(struct devfs_mount *dmp, char *name, int namelen,
+ struct devfs_dirent *dotdot, u_int inode)
{
struct devfs_dirent *dd;
struct devfs_dirent *de;
diff --git a/sys/fs/nfsserver/nfs_nfsdkrpc.c b/sys/fs/nfsserver/nfs_nfsdkrpc.c
index 0b2333f..5c47447 100644
--- a/sys/fs/nfsserver/nfs_nfsdkrpc.c
+++ b/sys/fs/nfsserver/nfs_nfsdkrpc.c
@@ -554,18 +554,16 @@ nfsrvd_init(int terminating)
nfsd_master_proc = NULL;
NFSD_UNLOCK();
nfsrv_freeallbackchannel_xprts();
- svcpool_destroy(nfsrvd_pool);
- nfsrvd_pool = NULL;
+ svcpool_close(nfsrvd_pool);
+ NFSD_LOCK();
+ } else {
+ NFSD_UNLOCK();
+ nfsrvd_pool = svcpool_create("nfsd",
+ SYSCTL_STATIC_CHILDREN(_vfs_nfsd));
+ nfsrvd_pool->sp_rcache = NULL;
+ nfsrvd_pool->sp_assign = fhanew_assign;
+ nfsrvd_pool->sp_done = fha_nd_complete;
NFSD_LOCK();
}
-
- NFSD_UNLOCK();
-
- nfsrvd_pool = svcpool_create("nfsd", SYSCTL_STATIC_CHILDREN(_vfs_nfsd));
- nfsrvd_pool->sp_rcache = NULL;
- nfsrvd_pool->sp_assign = fhanew_assign;
- nfsrvd_pool->sp_done = fha_nd_complete;
-
- NFSD_LOCK();
}
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index c383f34..8e51753 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -1257,8 +1257,10 @@ pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva, boolean_t force)
sfence();
} else if ((cpu_feature & CPUID_CLFSH) != 0 &&
eva - sva < PMAP_CLFLUSH_THRESHOLD) {
+#ifdef DEV_APIC
if (pmap_kextract(sva) == lapic_paddr)
return;
+#endif
/*
* Writes are ordered by CLFLUSH on Intel CPUs.
*/
diff --git a/sys/kern/kern_lockf.c b/sys/kern/kern_lockf.c
index a0a3789..1740d85 100644
--- a/sys/kern/kern_lockf.c
+++ b/sys/kern/kern_lockf.c
@@ -687,7 +687,7 @@ retry_setlock:
break;
}
-#ifdef INVARIANTS
+#ifdef DIAGNOSTIC
/*
* Check for some can't happen stuff. In this case, the active
* lock list becoming disordered or containing mutually
@@ -915,7 +915,7 @@ lf_add_edge(struct lockf_entry *x, struct lockf_entry *y)
struct lockf_edge *e;
int error;
-#ifdef INVARIANTS
+#ifdef DIAGNOSTIC
LIST_FOREACH(e, &x->lf_outedges, le_outlink)
KASSERT(e->le_to != y, ("adding lock edge twice"));
#endif
diff --git a/sys/modules/ath/Makefile b/sys/modules/ath/Makefile
index 33a1650..1bd2eb9 100644
--- a/sys/modules/ath/Makefile
+++ b/sys/modules/ath/Makefile
@@ -31,8 +31,8 @@
ATH_RATE?= sample # tx rate control algorithm
-.PATH: ${.CURDIR}/../../dev/ath
-.PATH: ${.CURDIR}/../../dev/ath/ath_hal
+.PATH: ${SRCTOP}/sys/dev/ath
+.PATH: ${SRCTOP}/sys/dev/ath/ath_hal
KMOD= if_ath
SRCS= if_ath.c if_ath_alq.c if_ath_debug.c if_ath_keycache.c if_ath_sysctl.c
@@ -46,7 +46,7 @@ SRCS+= device_if.h bus_if.h pci_if.h opt_inet.h opt_ath.h opt_ah.h opt_wlan.h
#
# AR5210 support; these are first generation 11a-only devices.
#
-.PATH: ${.CURDIR}/../../dev/ath/ath_hal/ar5210
+.PATH: ${SRCTOP}/sys/dev/ath/ath_hal/ar5210
SRCS+= ah_eeprom_v1.c \
ar5210_attach.c ar5210_beacon.c ar5210_interrupts.c \
ar5210_keycache.c ar5210_misc.c ar5210_phy.c ar5210_power.c \
@@ -56,7 +56,7 @@ SRCS+= ah_eeprom_v1.c \
# AR5211 support; these are second generation 11b/g/a devices
# (but 11g was OFDM only and is not supported).
#
-.PATH: ${.CURDIR}/../../dev/ath/ath_hal/ar5211
+.PATH: ${SRCTOP}/sys/dev/ath/ath_hal/ar5211
SRCS+= ar5211_attach.c ar5211_beacon.c ar5211_interrupts.c \
ar5211_keycache.c ar5211_misc.c ar5211_phy.c ar5211_power.c \
ar5211_recv.c ar5211_reset.c ar5211_xmit.c
@@ -64,7 +64,7 @@ SRCS+= ar5211_attach.c ar5211_beacon.c ar5211_interrupts.c \
#
# AR5212 support; this covers all other pci/cardbus legacy parts.
#
-.PATH: ${.CURDIR}/../../dev/ath/ath_hal/ar5212
+.PATH: ${SRCTOP}/sys/dev/ath/ath_hal/ar5212
SRCS+= ar5212_ani.c ar5212_attach.c ar5212_beacon.c ar5212_eeprom.c \
ar5212_gpio.c ar5212_interrupts.c ar5212_keycache.c ar5212_misc.c \
ar5212_phy.c ar5212_power.c ar5212_recv.c ar5212_reset.c \
@@ -85,7 +85,7 @@ SRCS+= ar5413.c
# NB: 9160 depends on 5416 but 5416 does not require 9160
#
# + 5416 (Owl)
-.PATH: ${.CURDIR}/../../dev/ath/ath_hal/ar5416
+.PATH: ${SRCTOP}/sys/dev/ath/ath_hal/ar5416
SRCS+= ah_eeprom_v14.c ah_eeprom_v4k.c \
ar5416_ani.c ar5416_attach.c ar5416_beacon.c ar5416_btcoex.c \
ar5416_cal.c ar5416_cal_iq.c ar5416_cal_adcgain.c ar5416_cal_adcdc.c \
@@ -97,7 +97,7 @@ SRCS+= ah_eeprom_v14.c ah_eeprom_v4k.c \
SRCS+= ar2133.c
# + AR9160 (Sowl)
-.PATH: ${.CURDIR}/../../dev/ath/ath_hal/ar9001
+.PATH: ${SRCTOP}/sys/dev/ath/ath_hal/ar9001
SRCS+= ar9160_attach.c
# + AR9130 - (Sowl) - Embedded (AR913x SoC)
@@ -111,7 +111,7 @@ SRCS+= ar9130_attach.c ar9130_eeprom.c ar9130_phy.c
# AR9002 series chips
# + AR9220/AR9280 - Merlin
-.PATH: ${.CURDIR}/../../dev/ath/ath_hal/ar9002
+.PATH: ${SRCTOP}/sys/dev/ath/ath_hal/ar9002
SRCS+= ar9280.c ar9280_attach.c ar9280_olc.c
# + AR9285 - Kite
@@ -119,13 +119,13 @@ SRCS+= ar9285.c ar9285_reset.c ar9285_attach.c ar9285_cal.c ar9285_phy.c
SRCS+= ar9285_diversity.c ar9285_btcoex.c
# + AR9287 - Kiwi
-.PATH: ${.CURDIR}/../../dev/ath/ath_hal
+.PATH: ${SRCTOP}/sys/dev/ath/ath_hal
SRCS+= ah_eeprom_9287.c
-.PATH: ${.CURDIR}/../../dev/ath/ath_hal/ar9002
+.PATH: ${SRCTOP}/sys/dev/ath/ath_hal/ar9002
SRCS+= ar9287.c ar9287_reset.c ar9287_attach.c ar9287_cal.c ar9287_olc.c
# + AR9300 HAL
-.PATH: ${.CURDIR}/../../contrib/dev/ath/ath_hal/ar9300
+.PATH: ${SRCTOP}/sys/contrib/dev/ath/ath_hal/ar9300
SRCS+= ar9300_interrupts.c ar9300_radar.c ar9300_ani.c ar9300_keycache.c
SRCS+= ar9300_radio.c ar9300_xmit.c ar9300_attach.c ar9300_mci.c ar9300_stub.c
SRCS+= ar9300_xmit_ds.c ar9300_beacon.c ar9300_misc.c ar9300_recv.c
@@ -135,22 +135,22 @@ SRCS+= ar9300_power.c ar9300_timer.c
# NB: rate control is bound to the driver by symbol names so only pick one
.if ${ATH_RATE} == "sample"
-.PATH: ${.CURDIR}/../../dev/ath/ath_rate/sample
+.PATH: ${SRCTOP}/sys/dev/ath/ath_rate/sample
SRCS+= sample.c
.elif ${ATH_RATE} == "onoe"
-.PATH: ${.CURDIR}/../../dev/ath/ath_rate/onoe
+.PATH: ${SRCTOP}/sys/dev/ath/ath_rate/onoe
SRCS+= onoe.c
.elif ${ATH_RATE} == "amrr"
-.PATH: ${.CURDIR}/../../dev/ath/ath_rate/amrr
+.PATH: ${SRCTOP}/sys/dev/ath/ath_rate/amrr
SRCS+= amrr.c
.endif
# DFS
-.PATH: ${.CURDIR}/../../dev/ath/ath_dfs/null
+.PATH: ${SRCTOP}/sys/dev/ath/ath_dfs/null
SRCS+= dfs_null.c
-CFLAGS+= -I. -I${.CURDIR}/../../dev/ath -I${.CURDIR}/../../dev/ath/ath_hal
-CFLAGS+= -I. -I${.CURDIR}/../../contrib/dev/ath/ath_hal/
+CFLAGS+= -I. -I${SRCTOP}/sys/dev/ath -I${SRCTOP}/sys/dev/ath/ath_hal
+CFLAGS+= -I. -I${SRCTOP}/sys/contrib/dev/ath/ath_hal/
.if !defined(KERNBUILDDIR)
opt_ah.h:
diff --git a/sys/net/if.c b/sys/net/if.c
index 881cd60..625b6d0 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -2183,6 +2183,7 @@ void
if_down(struct ifnet *ifp)
{
+ EVENTHANDLER_INVOKE(ifnet_event, ifp, IFNET_EVENT_DOWN);
if_unroute(ifp, IFF_UP, AF_UNSPEC);
}
@@ -2195,6 +2196,7 @@ if_up(struct ifnet *ifp)
{
if_route(ifp, IFF_UP, AF_UNSPEC);
+ EVENTHANDLER_INVOKE(ifnet_event, ifp, IFNET_EVENT_UP);
}
/*
@@ -2266,7 +2268,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
{
struct ifreq *ifr;
struct ifstat *ifs;
- int error = 0;
+ int error = 0, do_ifup = 0;
int new_flags, temp_flags;
size_t namelen, onamelen;
size_t descrlen;
@@ -2394,7 +2396,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
if_down(ifp);
} else if (new_flags & IFF_UP &&
(ifp->if_flags & IFF_UP) == 0) {
- if_up(ifp);
+ do_ifup = 1;
}
/* See if permanently promiscuous mode bit is about to flip */
if ((ifp->if_flags ^ new_flags) & IFF_PPROMISC) {
@@ -2413,6 +2415,8 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
if (ifp->if_ioctl) {
(void) (*ifp->if_ioctl)(ifp, cmd, data);
}
+ if (do_ifup)
+ if_up(ifp);
getmicrotime(&ifp->if_lastchange);
break;
diff --git a/sys/net/if_var.h b/sys/net/if_var.h
index 01ca26c..1456793 100644
--- a/sys/net/if_var.h
+++ b/sys/net/if_var.h
@@ -424,6 +424,11 @@ EVENTHANDLER_DECLARE(ifnet_departure_event, ifnet_departure_event_handler_t);
/* Interface link state change event */
typedef void (*ifnet_link_event_handler_t)(void *, struct ifnet *, int);
EVENTHANDLER_DECLARE(ifnet_link_event, ifnet_link_event_handler_t);
+/* Interface up/down event */
+#define IFNET_EVENT_UP 0
+#define IFNET_EVENT_DOWN 1
+typedef void (*ifnet_event_fn)(void *, struct ifnet *ifp, int event);
+EVENTHANDLER_DECLARE(ifnet_event, ifnet_event_fn);
/*
* interface groups
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index 46bebf6..3546920 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -646,13 +646,13 @@ udp_input(struct mbuf *m, int off)
INPLOOKUP_RLOCKPCB, ifp, m);
if (inp == NULL) {
if (udp_log_in_vain) {
- char buf[4*sizeof "123"];
+ char src[INET_ADDRSTRLEN];
+ char dst[INET_ADDRSTRLEN];
- strcpy(buf, inet_ntoa(ip->ip_dst));
log(LOG_INFO,
"Connection attempt to UDP %s:%d from %s:%d\n",
- buf, ntohs(uh->uh_dport), inet_ntoa(ip->ip_src),
- ntohs(uh->uh_sport));
+ inet_ntoa_r(ip->ip_dst, dst), ntohs(uh->uh_dport),
+ inet_ntoa_r(ip->ip_src, src), ntohs(uh->uh_sport));
}
UDPSTAT_INC(udps_noport);
if (m->m_flags & (M_BCAST | M_MCAST)) {
diff --git a/sys/netpfil/ipfw/dn_heap.h b/sys/netpfil/ipfw/dn_heap.h
index c95473a..d51d9b0 100644
--- a/sys/netpfil/ipfw/dn_heap.h
+++ b/sys/netpfil/ipfw/dn_heap.h
@@ -85,7 +85,7 @@ enum {
* HEAP_TOP() returns a pointer to the top element of the heap,
* but makes no checks on its existance (XXX should we change ?)
*
- * heap_extract() removes the entry at the top, returing the pointer.
+ * heap_extract() removes the entry at the top, returning the pointer.
* (the key should have been read before).
*
* heap_scan() invokes a callback on each entry of the heap.
diff --git a/sys/rpc/svc.c b/sys/rpc/svc.c
index ff25ee4..c6a70ea 100644
--- a/sys/rpc/svc.c
+++ b/sys/rpc/svc.c
@@ -75,6 +75,7 @@ static void svc_new_thread(SVCGROUP *grp);
static void xprt_unregister_locked(SVCXPRT *xprt);
static void svc_change_space_used(SVCPOOL *pool, long delta);
static bool_t svc_request_space_available(SVCPOOL *pool);
+static void svcpool_cleanup(SVCPOOL *pool);
/* *************** SVCXPRT related stuff **************** */
@@ -174,8 +175,12 @@ svcpool_create(const char *name, struct sysctl_oid_list *sysctl_base)
return pool;
}
-void
-svcpool_destroy(SVCPOOL *pool)
+/*
+ * Code common to svcpool_destroy() and svcpool_close(), which cleans up
+ * the pool data structures.
+ */
+static void
+svcpool_cleanup(SVCPOOL *pool)
{
SVCGROUP *grp;
SVCXPRT *xprt, *nxprt;
@@ -211,6 +216,15 @@ svcpool_destroy(SVCPOOL *pool)
mtx_lock(&pool->sp_lock);
}
mtx_unlock(&pool->sp_lock);
+}
+
+void
+svcpool_destroy(SVCPOOL *pool)
+{
+ SVCGROUP *grp;
+ int g;
+
+ svcpool_cleanup(pool);
for (g = 0; g < SVC_MAXGROUPS; g++) {
grp = &pool->sp_groups[g];
@@ -226,6 +240,30 @@ svcpool_destroy(SVCPOOL *pool)
}
/*
+ * Similar to svcpool_destroy(), except that it does not destroy the actual
+ * data structures. As such, "pool" may be used again.
+ */
+void
+svcpool_close(SVCPOOL *pool)
+{
+ SVCGROUP *grp;
+ int g;
+
+ svcpool_cleanup(pool);
+
+ /* Now, initialize the pool's state for a fresh svc_run() call. */
+ mtx_lock(&pool->sp_lock);
+ pool->sp_state = SVCPOOL_INIT;
+ mtx_unlock(&pool->sp_lock);
+ for (g = 0; g < SVC_MAXGROUPS; g++) {
+ grp = &pool->sp_groups[g];
+ mtx_lock(&grp->sg_lock);
+ grp->sg_state = SVCPOOL_ACTIVE;
+ mtx_unlock(&grp->sg_lock);
+ }
+}
+
+/*
* Sysctl handler to get the present thread count on a pool
*/
static int
diff --git a/sys/rpc/svc.h b/sys/rpc/svc.h
index 80285ec..2ecd1a9 100644
--- a/sys/rpc/svc.h
+++ b/sys/rpc/svc.h
@@ -729,6 +729,12 @@ extern SVCPOOL* svcpool_create(const char *name,
extern void svcpool_destroy(SVCPOOL *pool);
/*
+ * Close a service pool. Similar to svcpool_destroy(), but it does not
+ * free the data structures. As such, the pool can be used again.
+ */
+extern void svcpool_close(SVCPOOL *pool);
+
+/*
* Transport independent svc_create routine.
*/
extern int svc_create(SVCPOOL *, void (*)(struct svc_req *, SVCXPRT *),
diff --git a/sys/sys/syscallsubr.h b/sys/sys/syscallsubr.h
index e038c98..046e048 100644
--- a/sys/sys/syscallsubr.h
+++ b/sys/sys/syscallsubr.h
@@ -158,8 +158,8 @@ int kern_mknod(struct thread *td, char *path, enum uio_seg pathseg,
int kern_mknodat(struct thread *td, int fd, char *path,
enum uio_seg pathseg, int mode, int dev);
int kern_msgctl(struct thread *, int, int, struct msqid_ds *);
-int kern_msgsnd(struct thread *, int, const void *, size_t, int, long);
int kern_msgrcv(struct thread *, int, void *, size_t, long, int, long *);
+int kern_msgsnd(struct thread *, int, const void *, size_t, int, long);
int kern_nanosleep(struct thread *td, struct timespec *rqt,
struct timespec *rmt);
int kern_ogetdirentries(struct thread *td, struct ogetdirentries_args *uap,
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c
index b4bf117..5ac0eee 100644
--- a/sys/vm/vm_mmap.c
+++ b/sys/vm/vm_mmap.c
@@ -113,14 +113,8 @@ struct sbrk_args {
};
#endif
-/*
- * MPSAFE
- */
-/* ARGSUSED */
int
-sys_sbrk(td, uap)
- struct thread *td;
- struct sbrk_args *uap;
+sys_sbrk(struct thread *td, struct sbrk_args *uap)
{
/* Not yet implemented */
return (EOPNOTSUPP);
@@ -132,14 +126,8 @@ struct sstk_args {
};
#endif
-/*
- * MPSAFE
- */
-/* ARGSUSED */
int
-sys_sstk(td, uap)
- struct thread *td;
- struct sstk_args *uap;
+sys_sstk(struct thread *td, struct sstk_args *uap)
{
/* Not yet implemented */
return (EOPNOTSUPP);
@@ -153,11 +141,9 @@ struct getpagesize_args {
#endif
int
-ogetpagesize(td, uap)
- struct thread *td;
- struct getpagesize_args *uap;
+ogetpagesize(struct thread *td, struct getpagesize_args *uap)
{
- /* MP SAFE */
+
td->td_retval[0] = PAGE_SIZE;
return (0);
}
@@ -189,9 +175,6 @@ struct mmap_args {
};
#endif
-/*
- * MPSAFE
- */
int
sys_mmap(td, uap)
struct thread *td;
@@ -519,9 +502,6 @@ struct msync_args {
int flags;
};
#endif
-/*
- * MPSAFE
- */
int
sys_msync(td, uap)
struct thread *td;
@@ -574,9 +554,6 @@ struct munmap_args {
size_t len;
};
#endif
-/*
- * MPSAFE
- */
int
sys_munmap(td, uap)
struct thread *td;
@@ -650,9 +627,6 @@ struct mprotect_args {
int prot;
};
#endif
-/*
- * MPSAFE
- */
int
sys_mprotect(td, uap)
struct thread *td;
@@ -692,13 +666,8 @@ struct minherit_args {
int inherit;
};
#endif
-/*
- * MPSAFE
- */
int
-sys_minherit(td, uap)
- struct thread *td;
- struct minherit_args *uap;
+sys_minherit(struct thread *td, struct minherit_args *uap)
{
vm_offset_t addr;
vm_size_t size, pageoff;
@@ -733,13 +702,8 @@ struct madvise_args {
};
#endif
-/*
- * MPSAFE
- */
int
-sys_madvise(td, uap)
- struct thread *td;
- struct madvise_args *uap;
+sys_madvise(struct thread *td, struct madvise_args *uap)
{
vm_offset_t start, end;
vm_map_t map;
@@ -791,13 +755,8 @@ struct mincore_args {
};
#endif
-/*
- * MPSAFE
- */
int
-sys_mincore(td, uap)
- struct thread *td;
- struct mincore_args *uap;
+sys_mincore(struct thread *td, struct mincore_args *uap)
{
vm_offset_t addr, first_addr;
vm_offset_t end, cend;
@@ -1050,13 +1009,8 @@ struct mlock_args {
size_t len;
};
#endif
-/*
- * MPSAFE
- */
int
-sys_mlock(td, uap)
- struct thread *td;
- struct mlock_args *uap;
+sys_mlock(struct thread *td, struct mlock_args *uap)
{
return (vm_mlock(td->td_proc, td->td_ucred, uap->addr, uap->len));
@@ -1122,13 +1076,8 @@ struct mlockall_args {
};
#endif
-/*
- * MPSAFE
- */
int
-sys_mlockall(td, uap)
- struct thread *td;
- struct mlockall_args *uap;
+sys_mlockall(struct thread *td, struct mlockall_args *uap)
{
vm_map_t map;
int error;
@@ -1199,13 +1148,8 @@ struct munlockall_args {
};
#endif
-/*
- * MPSAFE
- */
int
-sys_munlockall(td, uap)
- struct thread *td;
- struct munlockall_args *uap;
+sys_munlockall(struct thread *td, struct munlockall_args *uap)
{
vm_map_t map;
int error;
@@ -1240,9 +1184,6 @@ struct munlock_args {
size_t len;
};
#endif
-/*
- * MPSAFE
- */
int
sys_munlock(td, uap)
struct thread *td;
@@ -1397,8 +1338,6 @@ done:
/*
* vm_mmap_cdev()
*
- * MPSAFE
- *
* Helper function for vm_mmap. Perform sanity check specific for mmap
* operations on cdevs.
*/
diff --git a/tests/etc/Makefile b/tests/etc/Makefile
index 9aad25c..1e49666 100644
--- a/tests/etc/Makefile
+++ b/tests/etc/Makefile
@@ -4,7 +4,7 @@
TESTSDIR= ${TESTSBASE}/etc
-.PATH: ${.CURDIR:H}
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
SUBDIR+= rc.d
diff --git a/tests/sys/Makefile b/tests/sys/Makefile
index 18a24a4..88881f2 100644
--- a/tests/sys/Makefile
+++ b/tests/sys/Makefile
@@ -8,6 +8,7 @@ TESTS_SUBDIRS+= acl
TESTS_SUBDIRS+= aio
TESTS_SUBDIRS+= fifo
TESTS_SUBDIRS+= file
+TESTS_SUBDIRS+= fs
TESTS_SUBDIRS+= geom
TESTS_SUBDIRS+= kern
TESTS_SUBDIRS+= kqueue
@@ -22,6 +23,4 @@ TESTS_SUBDIRS+= vm
# Items not integrated into kyua runs by default
SUBDIR+= pjdfstest
-SUBDIR_PARALLEL=
-
.include <bsd.test.mk>
diff --git a/tests/sys/fs/Makefile b/tests/sys/fs/Makefile
new file mode 100644
index 0000000..9ed47c0
--- /dev/null
+++ b/tests/sys/fs/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/sys/fs
+
+TESTSRC= ${SRCTOP}/contrib/netbsd-tests/fs
+
+#TESTS_SUBDIRS+= nullfs # XXX: needs rump
+TESTS_SUBDIRS+= tmpfs
+
+FILES+= h_funcs.subr
+FILESDIR= ${TESTSDIR}
+
+CLEANFILES+= h_funcs.subr
+CLEANFILES+= h_funcs.subr.tmp
+
+h_funcs.subr: ${TESTSRC}/h_funcs.subr
+ cat ${.ALLSRC} | \
+ sed -e '/atf_require_prog mount_$${name}/d' >>${.TARGET}.tmp
+ mv ${.TARGET}.tmp ${.TARGET}
+
+.include <bsd.test.mk>
diff --git a/tests/sys/fs/tmpfs/Makefile b/tests/sys/fs/tmpfs/Makefile
new file mode 100644
index 0000000..78702dd
--- /dev/null
+++ b/tests/sys/fs/tmpfs/Makefile
@@ -0,0 +1,56 @@
+# $FreeBSD$
+
+PACKAGE= tests
+
+FILESYSTEM?= ${.CURDIR:T}
+
+TESTSDIR= ${TESTSBASE}/sys/fs/${FILESYSTEM}
+
+TESTSRC= ${SRCTOP}/contrib/netbsd-tests/fs/${FILESYSTEM}
+
+# XXX: uses /dev/MAKEDEV to create pseudo /dev/{null,zero} character devices
+#NETBSD_ATF_TESTS_SH+= devices_test
+NETBSD_ATF_TESTS_SH+= create_test
+NETBSD_ATF_TESTS_SH+= read_write_test
+NETBSD_ATF_TESTS_SH+= dots_test
+NETBSD_ATF_TESTS_SH+= exec_test
+NETBSD_ATF_TESTS_SH+= link_test
+NETBSD_ATF_TESTS_SH+= mkdir_test
+NETBSD_ATF_TESTS_SH+= mknod_test
+NETBSD_ATF_TESTS_SH+= mount_test
+# XXX: need to replace `mknod ... p` with something more sensible
+#NETBSD_ATF_TESTS_SH+= pipes_test
+NETBSD_ATF_TESTS_SH+= trail_slash_test
+NETBSD_ATF_TESTS_SH+= readdir_test
+NETBSD_ATF_TESTS_SH+= remove_test
+NETBSD_ATF_TESTS_SH+= rename_test
+NETBSD_ATF_TESTS_SH+= rmdir_test
+NETBSD_ATF_TESTS_SH+= setattr_test
+NETBSD_ATF_TESTS_SH+= sizes_test
+NETBSD_ATF_TESTS_SH+= sockets_test
+NETBSD_ATF_TESTS_SH+= statvfs_test
+NETBSD_ATF_TESTS_SH+= symlink_test
+NETBSD_ATF_TESTS_SH+= times_test
+NETBSD_ATF_TESTS_SH+= truncate_test
+NETBSD_ATF_TESTS_SH+= vnd_test
+NETBSD_ATF_TESTS_SH+= vnode_leak_test
+
+FILES+= h_funcs.subr
+FILESDIR= ${TESTSDIR}
+
+PROGS+= h_tools
+BINDIR.h_tools= ${TESTSDIR}
+
+ATF_TESTS_SH_SED_mount_test= \
+ -e 's,-o -g,-o gid=,g' \
+ -e 's,-o -m,-o mode=,g' \
+ -e 's,-o -s,-o size=,g' \
+ -e 's,-o -u,-o uid=,g' \
+ -e 's,mount_${FILESYSTEM},mount -t ${FILESYSTEM},g'
+ATF_TESTS_SH_SED_sizes_test= -e 's,-o -s,-o size=,g'
+ATF_TESTS_SH_SED_statvfs_test= -e 's,-o -s,-o size=,g'
+ATF_TESTS_SH_SED_vnode_leak_test= -e 's,-o -s,-o size=,g'
+
+.include <netbsd-tests.test.mk>
+
+.include <bsd.test.mk>
diff --git a/tests/sys/geom/class/gate/1_test.sh b/tests/sys/geom/class/gate/1_test.sh
deleted file mode 100644
index ba573bb..0000000
--- a/tests/sys/geom/class/gate/1_test.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-. `dirname $0`/conf.sh
-
-echo '1..2'
-
-base=`basename $0`
-us=0
-while [ -c /dev/ggate${us} ]; do
- : $(( us += 1 ))
-done
-pidfile=ggated.$$.pid
-conf=`mktemp $base.XXXXXX` || exit 1
-port=33080
-
-work=$(attach_md -t malloc -s 1M)
-src=$(attach_md -t malloc -s 1M)
-
-test_cleanup()
-{
- ggatec destroy -f -u $us
- pkill -F $pidfile
- geom_test_cleanup
-}
-trap test_cleanup ABRT EXIT INT TERM
-
-dd if=/dev/random of=/dev/$work bs=1m count=1 conv=sync
-dd if=/dev/random of=/dev/$src bs=1m count=1 conv=sync
-src_checksum=$(md5 -q /dev/$src)
-
-echo "127.0.0.1 RW /dev/$work" > $conf
-
-if ! ggated -p $port -F $pidfile $conf; then
- echo 'ggated failed to start'
- echo 'Bail out!'
- exit 1
-fi
-sleep 1
-if ! ggatec create -p $port -u $us 127.0.0.1 /dev/$work; then
- echo 'ggatec create failed'
- echo 'Bail out!'
- exit 1
-fi
-sleep 1
-
-dd if=/dev/${src} of=/dev/ggate${us} bs=1m count=1
-sleep 1
-
-work_checksum=$(md5 -q /dev/$work)
-if [ "$work_checksum" != "$src_checksum" ]; then
- echo "not ok 1 - md5 checksums didn't match ($work_checksum != $src_checksum)"
- echo "not ok 2 # SKIP"
-else
- echo 'ok 1 - md5 checksum'
-
- ggate_checksum=$(md5 -q /dev/ggate${us})
- if [ "$ggate_checksum" != "$src_checksum" ]; then
- echo "not ok 2 - md5 checksums didn't match ($ggate_checksum != $src_checksum)"
- else
- echo 'ok 2 - md5 checksum'
- fi
-fi
diff --git a/tests/sys/geom/class/gate/2_test.sh b/tests/sys/geom/class/gate/2_test.sh
deleted file mode 100644
index be89acc..0000000
--- a/tests/sys/geom/class/gate/2_test.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-. `dirname $0`/conf.sh
-
-base=`basename $0`
-us=46
-work=`mktemp -u $base.XXXXXX` || exit 1
-src=`mktemp -u $base.XXXXXX` || exit 1
-
-test_cleanup()
-{
- ggatel destroy -f -u $us
- rm -f $work $src
-
- geom_test_cleanup
-}
-trap test_cleanup ABRT EXIT INT TERM
-
-dd if=/dev/random of=$work bs=1m count=1 conv=sync
-dd if=/dev/random of=$src bs=1m count=1 conv=sync
-
-if ! ggatel create -u $us $work; then
- echo 'ggatel create failed'
- echo 'Bail out!'
- exit 1
-fi
-
-dd if=${src} of=/dev/ggate${us} bs=1m count=1
-sleep 1
-
-echo '1..2'
-
-src_checksum=$(md5 -q $src)
-work_checksum=$(md5 -q $work)
-if [ "$work_checksum" != "$src_checksum" ]; then
- echo "not ok 1 - md5 checksums didn't match ($work_checksum != $src_checksum) # TODO: bug 204616"
- echo 'not ok 2 # SKIP'
-else
- echo 'ok 1 - md5 checksum'
-
- ggate_checksum=$(md5 -q /dev/ggate${us})
- if [ "$ggate_checksum" != "$src_checksum" ]; then
- echo "not ok 2 - md5 checksums didn't match ($ggate_checksum != $src_checksum)"
- else
- echo 'ok 2 - md5 checksum'
- fi
-fi
diff --git a/tests/sys/geom/class/gate/3_test.sh b/tests/sys/geom/class/gate/3_test.sh
deleted file mode 100644
index 3511df7..0000000
--- a/tests/sys/geom/class/gate/3_test.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-. `dirname $0`/conf.sh
-
-base=`basename $0`
-us=47
-
-test_cleanup()
-{
- ggatel destroy -f -u $us
-
- geom_test_cleanup
-}
-trap test_cleanup ABRT EXIT INT TERM
-
-work=$(attach_md -t malloc -s 1M)
-src=$(attach_md -t malloc -s 1M)
-
-dd if=/dev/random of=/dev/$work bs=1m count=1 conv=sync
-dd if=/dev/random of=/dev/$src bs=1m count=1 conv=sync
-src_checksum=$(md5 -q /dev/$src)
-
-if ! ggatel create -u $us /dev/$work; then
- echo 'ggatel create failed'
- echo 'Bail out!'
- exit 1
-fi
-
-sleep 1
-dd if=/dev/${src} of=/dev/ggate${us} bs=1m count=1 conv=sync
-sleep 1
-
-echo '1..2'
-
-work_checksum=$(md5 -q /dev/$work)
-if [ "$work_checksum" != "$src_checksum" ]; then
- echo "not ok 1 - md5 checksums didn't match ($work_checksum != $src_checksum)"
- echo 'not ok 2 # SKIP'
-else
- echo 'ok 1 - md5 checksum'
-
- ggate_checksum=$(md5 -q /dev/ggate${us})
- if [ "$ggate_checksum" != "$src_checksum" ]; then
- echo "not ok 2 - md5 checksums didn't match ($ggate_checksum != $src_checksum)"
- else
- echo 'ok 2 - md5 checksum'
- fi
-fi
diff --git a/tests/sys/geom/class/gate/Makefile b/tests/sys/geom/class/gate/Makefile
index 11ceb94..0b84248 100644
--- a/tests/sys/geom/class/gate/Makefile
+++ b/tests/sys/geom/class/gate/Makefile
@@ -2,16 +2,6 @@
TESTSDIR= ${TESTSBASE}/sys/geom/class/${.CURDIR:T}
-TAP_TESTS_SH+= 1_test
-TAP_TESTS_SH+= 2_test
-TAP_TESTS_SH+= 3_test
-
-FILES+= conf.sh
-FILESNAME_conf.sh= conf.sh
-FILESDIR= ${TESTSDIR}
-
-.for t in ${TAP_TESTS_SH}
-TEST_METADATA.$t+= required_user="root"
-.endfor
+ATF_TESTS_SH+= ggate_test
.include <bsd.test.mk>
diff --git a/tests/sys/geom/class/gate/conf.sh b/tests/sys/geom/class/gate/conf.sh
deleted file mode 100755
index 7e22ce4..0000000
--- a/tests/sys/geom/class/gate/conf.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-# $FreeBSD$
-
-name="$(mktemp -u gate.XXXXXX)"
-class="gate"
-base=`basename $0`
-
-. `dirname $0`/../geom_subr.sh
diff --git a/tests/sys/geom/class/gate/ggate_test.sh b/tests/sys/geom/class/gate/ggate_test.sh
new file mode 100755
index 0000000..18b4214
--- /dev/null
+++ b/tests/sys/geom/class/gate/ggate_test.sh
@@ -0,0 +1,207 @@
+# $FreeBSD$
+
+PIDFILE=ggated.pid
+PLAINFILES=plainfiles
+PORT=33080
+CONF=gg.exports
+
+atf_test_case ggated cleanup
+ggated_head()
+{
+ atf_set "descr" "ggated can proxy geoms"
+ atf_set "require.progs" "ggatec ggated"
+ atf_set "require.user" "root"
+ atf_set "timeout" 60
+}
+
+ggated_body()
+{
+ us=$(alloc_ggate_dev)
+ work=$(alloc_md)
+ src=$(alloc_md)
+
+ atf_check -e ignore -o ignore \
+ dd if=/dev/random of=/dev/$work bs=1m count=1 conv=notrunc
+ atf_check -e ignore -o ignore \
+ dd if=/dev/random of=/dev/$src bs=1m count=1 conv=notrunc
+
+ echo $CONF >> $PLAINFILES
+ echo "127.0.0.1 RW /dev/$work" > $CONF
+
+ atf_check ggated -p $PORT -F $PIDFILE $CONF
+ atf_check ggatec create -p $PORT -u $us 127.0.0.1 /dev/$work
+
+ ggate_dev=/dev/ggate${us}
+
+ wait_for_ggate_device ${ggate_dev}
+
+ atf_check -e ignore -o ignore \
+ dd if=/dev/${src} of=${ggate_dev} bs=1m count=1 conv=notrunc
+
+ checksum /dev/$src /dev/$work
+}
+
+ggated_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case ggatel_file cleanup
+ggatel_file_head()
+{
+ atf_set "descr" "ggatel can proxy files"
+ atf_set "require.progs" "ggatel"
+ atf_set "require.user" "root"
+ atf_set "timeout" 15
+}
+
+ggatel_file_body()
+{
+ us=$(alloc_ggate_dev)
+
+ echo src work >> ${PLAINFILES}
+ dd if=/dev/random of=work bs=1m count=1
+ dd if=/dev/random of=src bs=1m count=1
+
+ atf_check ggatel create -u $us work
+
+ ggate_dev=/dev/ggate${us}
+
+ wait_for_ggate_device ${ggate_dev}
+
+ atf_check -e ignore -o ignore \
+ dd if=src of=${ggate_dev} bs=1m count=1 conv=notrunc
+
+ checksum src work
+}
+
+ggatel_file_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case ggatel_md cleanup
+ggatel_md_head()
+{
+ atf_set "descr" "ggatel can proxy files"
+ atf_set "require.progs" "ggatel"
+ atf_set "require.user" "root"
+ atf_set "timeout" 15
+}
+
+ggatel_md_body()
+{
+ us=$(alloc_ggate_dev)
+ work=$(alloc_md)
+ src=$(alloc_md)
+
+ atf_check -e ignore -o ignore \
+ dd if=/dev/random of=$work bs=1m count=1 conv=notrunc
+ atf_check -e ignore -o ignore \
+ dd if=/dev/random of=$src bs=1m count=1 conv=notrunc
+
+ atf_check ggatel create -u $us /dev/$work
+
+ ggate_dev=/dev/ggate${us}
+
+ wait_for_ggate_device ${ggate_dev}
+
+ atf_check -e ignore -o ignore \
+ dd if=/dev/$src of=${ggate_dev} bs=1m count=1 conv=notrunc
+
+ checksum /dev/$src /dev/$work
+}
+
+ggatel_md_cleanup()
+{
+ common_cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case ggated
+ atf_add_test_case ggatel_file
+ atf_add_test_case ggatel_md
+}
+
+alloc_ggate_dev()
+{
+ local us
+
+ us=0
+ while [ -c /dev/ggate${us} ]; do
+ : $(( us += 1 ))
+ done
+ echo ${us} > ggate.devs
+ echo ${us}
+}
+
+alloc_md()
+{
+ local md
+
+ md=$(mdconfig -a -t malloc -s 1M) || \
+ atf_fail "failed to allocate md device"
+ echo ${md} >> md.devs
+ echo ${md}
+}
+
+checksum()
+{
+ local src work
+ src=$1
+ work=$2
+
+ src_checksum=$(dd if=${src} bs=1m | md5 -q)
+ work_checksum=$(dd if=${work} bs=1m | md5 -q)
+
+ if [ "$work_checksum" != "$src_checksum" ]; then
+ atf_fail "work md5 checksum didn't match"
+ fi
+
+ ggate_checksum=$(dd if=/dev/ggate${us} bs=1m | md5 -q)
+ if [ "$ggate_checksum" != "$src_checksum" ]; then
+ atf_fail "ggate md5 checksum didn't match"
+ fi
+}
+
+common_cleanup()
+{
+ if [ -f "ggate.devs" ]; then
+ while read test_ggate; do
+ ggatec destroy -f -u $test_ggate >/dev/null
+ done < ggate.devs
+ rm ggate.devs
+ fi
+
+ if [ -f "$PIDFILE" ]; then
+ pkill -F "$PIDFILE"
+ rm $PIDFILE
+ fi
+
+ if [ -f "PLAINFILES" ]; then
+ while read f; do
+ rm -f ${f}
+ done < ${PLAINFILES}
+ rm ${PLAINFILES}
+ fi
+
+ if [ -f "md.devs" ]; then
+ while read test_md; do
+ mdconfig -d -u $test_md 2>/dev/null
+ done < md.devs
+ rm md.devs
+ fi
+ true
+}
+
+# Bug 204616: ggatel(8) creates /dev/ggate* asynchronously if `ggatel create`
+# isn't called with `-v`.
+wait_for_ggate_device()
+{
+ ggate_device=$1
+
+ while [ ! -c $ggate_device ]; do
+ sleep 0.5
+ done
+}
diff --git a/tests/sys/kqueue/Makefile b/tests/sys/kqueue/Makefile
index 43277ca..40f892d 100644
--- a/tests/sys/kqueue/Makefile
+++ b/tests/sys/kqueue/Makefile
@@ -1,26 +1,20 @@
# $FreeBSD$
-#
-# svn://mark.heily.com/libkqueue/trunk/test
-# Last update: r114
-#
-# libkqueue and test suite by Mark Heily <mark@heily.com>
-#
-TAP_TESTS_SH= kqueue_test
+TESTSRC= ${SRCTOP}/contrib/netbsd-tests/kernel/kqueue
TESTSDIR= ${TESTSBASE}/sys/kqueue
BINDIR= ${TESTSDIR}
-PROGS= kqtest
+NETBSD_ATF_TESTS_C= proc1_test
+# XXX: fails `ke.fflags & NOTE_TRACKERR` invariant
+#NETBSD_ATF_TESTS_C+= proc2_test
+NETBSD_ATF_TESTS_C+= proc3_test
+NETBSD_ATF_TESTS_C+= sig_test
+NETBSD_ATF_TESTS_C+= vnode_test
-SRCS.kqtest= \
- main.c \
- read.c \
- timer.c \
- vnode.c \
- proc.c \
- signal.c \
- user.c
-WARNS?= 2
+WARNS?= 3
+TESTS_SUBDIRS+= libkqueue
+
+.include <netbsd-tests.test.mk>
.include <bsd.test.mk>
diff --git a/tests/sys/kqueue/libkqueue/Makefile b/tests/sys/kqueue/libkqueue/Makefile
new file mode 100644
index 0000000..94d198b
--- /dev/null
+++ b/tests/sys/kqueue/libkqueue/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/sys/kqueue/libkqueue
+BINDIR= ${TESTSDIR}
+
+# libkqueue and test suite by Mark Heily <mark@heily.com>
+TAP_TESTS_SH= kqueue_test
+
+PROGS= kqtest
+
+SRCS.kqtest= \
+ main.c \
+ read.c \
+ timer.c \
+ vnode.c \
+ proc.c \
+ signal.c \
+ user.c
+WARNS?= 2
+
+.include <bsd.test.mk>
diff --git a/tests/sys/kqueue/libkqueue/Makefile.depend b/tests/sys/kqueue/libkqueue/Makefile.depend
new file mode 100644
index 0000000..3646e2e
--- /dev/null
+++ b/tests/sys/kqueue/libkqueue/Makefile.depend
@@ -0,0 +1,18 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tests/sys/kqueue/common.h b/tests/sys/kqueue/libkqueue/common.h
index 89a4029..89a4029 100644
--- a/tests/sys/kqueue/common.h
+++ b/tests/sys/kqueue/libkqueue/common.h
diff --git a/tests/sys/kqueue/config.h b/tests/sys/kqueue/libkqueue/config.h
index a204092..a204092 100644
--- a/tests/sys/kqueue/config.h
+++ b/tests/sys/kqueue/libkqueue/config.h
diff --git a/tests/sys/kqueue/kqueue_test.sh b/tests/sys/kqueue/libkqueue/kqueue_test.sh
index 62a7e23..3185d82 100755
--- a/tests/sys/kqueue/kqueue_test.sh
+++ b/tests/sys/kqueue/libkqueue/kqueue_test.sh
@@ -1,8 +1,8 @@
#!/bin/sh
+# $FreeBSD$
-cd $(dirname $0)
i=1
-./kqtest | while read line; do
+"$(dirname $0)/kqtest" | while read line; do
echo $line | grep -q passed
if [ $? -eq 0 ]; then
echo "ok - $i $line"
diff --git a/tests/sys/kqueue/libkqueue/main.c b/tests/sys/kqueue/libkqueue/main.c
new file mode 100644
index 0000000..26e8f91
--- /dev/null
+++ b/tests/sys/kqueue/libkqueue/main.c
@@ -0,0 +1,323 @@
+/*
+ * Copyright (c) 2009 Mark Heily <mark@heily.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/types.h>
+
+#include "config.h"
+#include "common.h"
+
+int testnum = 1;
+char *cur_test_id = NULL;
+int kqfd;
+
+extern void test_evfilt_read();
+extern void test_evfilt_signal();
+extern void test_evfilt_vnode();
+extern void test_evfilt_timer();
+extern void test_evfilt_proc();
+#if HAVE_EVFILT_USER
+extern void test_evfilt_user();
+#endif
+
+/* Checks if any events are pending, which is an error. */
+void
+test_no_kevents(void)
+{
+ int nfds;
+ struct timespec timeo;
+ struct kevent kev;
+
+ puts("confirming that there are no events pending");
+ memset(&timeo, 0, sizeof(timeo));
+ nfds = kevent(kqfd, NULL, 0, &kev, 1, &timeo);
+ if (nfds != 0) {
+ puts("\nUnexpected event:");
+ puts(kevent_to_str(&kev));
+ errx(1, "%d event(s) pending, but none expected:", nfds);
+ }
+}
+
+/* Retrieve a single kevent */
+struct kevent *
+kevent_get(int kqfd)
+{
+ int nfds;
+ struct kevent *kev;
+
+ if ((kev = calloc(1, sizeof(*kev))) == NULL)
+ err(1, "out of memory");
+
+ nfds = kevent(kqfd, NULL, 0, kev, 1, NULL);
+ if (nfds < 1)
+ err(1, "kevent(2)");
+
+ return (kev);
+}
+
+/* Retrieve a single kevent, specifying a maximum time to wait for it. */
+struct kevent *
+kevent_get_timeout(int kqfd, int seconds)
+{
+ int nfds;
+ struct kevent *kev;
+ struct timespec timeout = {seconds, 0};
+
+ if ((kev = calloc(1, sizeof(*kev))) == NULL)
+ err(1, "out of memory");
+
+ nfds = kevent(kqfd, NULL, 0, kev, 1, &timeout);
+ if (nfds < 0) {
+ err(1, "kevent(2)");
+ } else if (nfds == 0) {
+ free(kev);
+ kev = NULL;
+ }
+
+ return (kev);
+}
+
+char *
+kevent_fflags_dump(struct kevent *kev)
+{
+ char *buf;
+
+#define KEVFFL_DUMP(attrib) \
+ if (kev->fflags & attrib) \
+ strncat(buf, #attrib" ", 64);
+
+ if ((buf = calloc(1, 1024)) == NULL)
+ abort();
+
+ /* Not every filter has meaningful fflags */
+ if (kev->filter == EVFILT_PROC) {
+ snprintf(buf, 1024, "fflags = %x (", kev->fflags);
+ KEVFFL_DUMP(NOTE_EXIT);
+ KEVFFL_DUMP(NOTE_FORK);
+ KEVFFL_DUMP(NOTE_EXEC);
+ KEVFFL_DUMP(NOTE_CHILD);
+ KEVFFL_DUMP(NOTE_TRACKERR);
+ KEVFFL_DUMP(NOTE_TRACK);
+ buf[strlen(buf) - 1] = ')';
+ } else if (kev->filter == EVFILT_VNODE) {
+ snprintf(buf, 1024, "fflags = %x (", kev->fflags);
+ KEVFFL_DUMP(NOTE_DELETE);
+ KEVFFL_DUMP(NOTE_WRITE);
+ KEVFFL_DUMP(NOTE_EXTEND);
+#if HAVE_NOTE_TRUNCATE
+ KEVFFL_DUMP(NOTE_TRUNCATE);
+#endif
+ KEVFFL_DUMP(NOTE_ATTRIB);
+ KEVFFL_DUMP(NOTE_LINK);
+ KEVFFL_DUMP(NOTE_RENAME);
+#if HAVE_NOTE_REVOKE
+ KEVFFL_DUMP(NOTE_REVOKE);
+#endif
+ buf[strlen(buf) - 1] = ')';
+ } else {
+ snprintf(buf, 1024, "fflags = %x", kev->fflags);
+ }
+
+ return (buf);
+}
+
+char *
+kevent_flags_dump(struct kevent *kev)
+{
+ char *buf;
+
+#define KEVFL_DUMP(attrib) \
+ if (kev->flags & attrib) \
+ strncat(buf, #attrib" ", 64);
+
+ if ((buf = calloc(1, 1024)) == NULL)
+ abort();
+
+ snprintf(buf, 1024, "flags = %d (", kev->flags);
+ KEVFL_DUMP(EV_ADD);
+ KEVFL_DUMP(EV_ENABLE);
+ KEVFL_DUMP(EV_DISABLE);
+ KEVFL_DUMP(EV_DELETE);
+ KEVFL_DUMP(EV_ONESHOT);
+ KEVFL_DUMP(EV_CLEAR);
+ KEVFL_DUMP(EV_EOF);
+ KEVFL_DUMP(EV_ERROR);
+#if HAVE_EV_DISPATCH
+ KEVFL_DUMP(EV_DISPATCH);
+#endif
+#if HAVE_EV_RECEIPT
+ KEVFL_DUMP(EV_RECEIPT);
+#endif
+ buf[strlen(buf) - 1] = ')';
+
+ return (buf);
+}
+
+/* Copied from ../kevent.c kevent_dump() and improved */
+const char *
+kevent_to_str(struct kevent *kev)
+{
+ char buf[512];
+
+ snprintf(&buf[0], sizeof(buf),
+ "[ident=%d, filter=%d, %s, %s, data=%d, udata=%p]",
+ (u_int) kev->ident,
+ kev->filter,
+ kevent_flags_dump(kev),
+ kevent_fflags_dump(kev),
+ (int) kev->data,
+ kev->udata);
+
+ return (strdup(buf));
+}
+
+void
+kevent_add(int kqfd, struct kevent *kev,
+ uintptr_t ident,
+ short filter,
+ u_short flags,
+ u_int fflags,
+ intptr_t data,
+ void *udata)
+{
+ EV_SET(kev, ident, filter, flags, fflags, data, NULL);
+ if (kevent(kqfd, kev, 1, NULL, 0, NULL) < 0) {
+ printf("Unable to add the following kevent:\n%s\n",
+ kevent_to_str(kev));
+ err(1, "kevent(): %s", strerror(errno));
+ }
+}
+
+void
+kevent_cmp(struct kevent *k1, struct kevent *k2)
+{
+/* XXX-
+ Workaround for inconsistent implementation of kevent(2)
+ */
+#ifdef __FreeBSD__
+ if (k1->flags & EV_ADD)
+ k2->flags |= EV_ADD;
+#endif
+ if (memcmp(k1, k2, sizeof(*k1)) != 0) {
+ printf("kevent_cmp: mismatch:\n %s !=\n %s\n",
+ kevent_to_str(k1), kevent_to_str(k2));
+ abort();
+ }
+}
+
+void
+test_begin(const char *func)
+{
+ if (cur_test_id)
+ free(cur_test_id);
+ cur_test_id = strdup(func);
+ if (!cur_test_id)
+ err(1, "strdup failed");
+
+ printf("\n\nTest %d: %s\n", testnum++, func);
+}
+
+void
+success(void)
+{
+ printf("%-70s %s\n", cur_test_id, "passed");
+ free(cur_test_id);
+ cur_test_id = NULL;
+}
+
+void
+test_kqueue(void)
+{
+ test_begin("kqueue()");
+ if ((kqfd = kqueue()) < 0)
+ err(1, "kqueue()");
+ test_no_kevents();
+ success();
+}
+
+void
+test_kqueue_close(void)
+{
+ test_begin("close(kq)");
+ if (close(kqfd) < 0)
+ err(1, "close()");
+ success();
+}
+
+int
+main(int argc, char **argv)
+{
+ int test_proc = 1;
+ int test_socket = 1;
+ int test_signal = 1;
+ int test_vnode = 1;
+ int test_timer = 1;
+#ifdef __FreeBSD__
+ int test_user = 1;
+#else
+ /* XXX-FIXME temporary */
+ int test_user = 0;
+#endif
+
+ while (argc) {
+ if (strcmp(argv[0], "--no-proc") == 0)
+ test_proc = 0;
+ if (strcmp(argv[0], "--no-socket") == 0)
+ test_socket = 0;
+ if (strcmp(argv[0], "--no-timer") == 0)
+ test_timer = 0;
+ if (strcmp(argv[0], "--no-signal") == 0)
+ test_signal = 0;
+ if (strcmp(argv[0], "--no-vnode") == 0)
+ test_vnode = 0;
+ if (strcmp(argv[0], "--no-user") == 0)
+ test_user = 0;
+ argv++;
+ argc--;
+ }
+
+ /*
+ * Some tests fork. If output is fully buffered,
+ * the children inherit some buffered data and flush
+ * it when they exit, causing some data to be printed twice.
+ * Use line buffering to avoid this problem.
+ */
+ setlinebuf(stdout);
+ setlinebuf(stderr);
+
+ test_kqueue();
+ test_kqueue_close();
+
+ if (test_socket)
+ test_evfilt_read();
+ if (test_signal)
+ test_evfilt_signal();
+ if (test_vnode)
+ test_evfilt_vnode();
+#if HAVE_EVFILT_USER
+ if (test_user)
+ test_evfilt_user();
+#endif
+ if (test_timer)
+ test_evfilt_timer();
+ if (test_proc)
+ test_evfilt_proc();
+
+ printf("\n---\n"
+ "+OK All %d tests completed.\n", testnum - 1);
+ return (0);
+}
diff --git a/tests/sys/kqueue/proc.c b/tests/sys/kqueue/libkqueue/proc.c
index 79b8d35..79b8d35 100644
--- a/tests/sys/kqueue/proc.c
+++ b/tests/sys/kqueue/libkqueue/proc.c
diff --git a/tests/sys/kqueue/libkqueue/read.c b/tests/sys/kqueue/libkqueue/read.c
new file mode 100644
index 0000000..2837144
--- /dev/null
+++ b/tests/sys/kqueue/libkqueue/read.c
@@ -0,0 +1,326 @@
+/*
+ * Copyright (c) 2009 Mark Heily <mark@heily.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include "common.h"
+
+int kqfd;
+int sockfd[2];
+
+static void
+kevent_socket_drain(void)
+{
+ char buf[1];
+
+ /* Drain the read buffer, then make sure there are no more events. */
+ puts("draining the read buffer");
+ if (read(sockfd[0], &buf[0], 1) < 1)
+ err(1, "read(2)");
+}
+
+static void
+kevent_socket_fill(void)
+{
+ puts("filling the read buffer");
+ if (write(sockfd[1], ".", 1) < 1)
+ err(1, "write(2)");
+}
+
+
+void
+test_kevent_socket_add(void)
+{
+ const char *test_id = "kevent(EVFILT_READ, EV_ADD)";
+ struct kevent kev;
+
+ test_begin(test_id);
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ success();
+}
+
+void
+test_kevent_socket_get(void)
+{
+ const char *test_id = "kevent(EVFILT_READ) wait";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ kevent_socket_fill();
+
+ kev.data = 1;
+ kevent_cmp(&kev, kevent_get(kqfd));
+
+ kevent_socket_drain();
+ test_no_kevents();
+
+ kev.flags = EV_DELETE;
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ success();
+}
+
+void
+test_kevent_socket_clear(void)
+{
+ const char *test_id = "kevent(EVFILT_READ, EV_CLEAR)";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ test_no_kevents();
+
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ kevent_socket_fill();
+ kevent_socket_fill();
+
+ kev.data = 2;
+ kevent_cmp(&kev, kevent_get(kqfd));
+
+ /* We filled twice, but drain once. Edge-triggered would not generate
+ additional events.
+ */
+ kevent_socket_drain();
+ test_no_kevents();
+
+ kevent_socket_drain();
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ success();
+}
+
+void
+test_kevent_socket_disable_and_enable(void)
+{
+ const char *test_id = "kevent(EVFILT_READ, EV_DISABLE)";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ /*
+ * Write to the socket before adding the event. This way we can verify that
+ * enabling a triggered kevent causes the event to be returned immediately.
+ */
+ kevent_socket_fill();
+
+ /* Add a disabled event. */
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD | EV_DISABLE, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ test_no_kevents();
+
+ /* Re-enable the knote, then see if an event is generated */
+ kev.flags = EV_ENABLE;
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+ kev.flags = EV_ADD;
+ kev.data = 1;
+ kevent_cmp(&kev, kevent_get(kqfd));
+
+ kevent_socket_drain();
+
+ kev.flags = EV_DELETE;
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ success();
+}
+
+void
+test_kevent_socket_del(void)
+{
+ const char *test_id = "kevent(EVFILT_READ, EV_DELETE)";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ kevent_socket_fill();
+ test_no_kevents();
+ kevent_socket_drain();
+
+ success();
+}
+
+void
+test_kevent_socket_oneshot(void)
+{
+ const char *test_id = "kevent(EVFILT_READ, EV_ONESHOT)";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ /* Re-add the watch and make sure no events are pending */
+ puts("-- re-adding knote");
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD | EV_ONESHOT, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+ test_no_kevents();
+
+ puts("-- getting one event");
+ kevent_socket_fill();
+ kev.data = 1;
+ kevent_cmp(&kev, kevent_get(kqfd));
+
+ puts("-- checking knote disabled");
+ test_no_kevents();
+
+ /* Try to delete the knote, it should already be deleted */
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) == 0)
+ err(1, "%s", test_id);
+
+ kevent_socket_drain();
+
+ success();
+}
+
+
+#if HAVE_EV_DISPATCH
+void
+test_kevent_socket_dispatch(void)
+{
+ const char *test_id = "kevent(EVFILT_READ, EV_DISPATCH)";
+
+ test_begin(test_id);
+
+ struct kevent kev;
+
+ /* Re-add the watch and make sure no events are pending */
+ puts("-- re-adding knote");
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD | EV_DISPATCH, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+ test_no_kevents();
+
+ /* The event will occur only once, even though EV_CLEAR is not
+ specified. */
+ kevent_socket_fill();
+ kev.data = 1;
+ kevent_cmp(&kev, kevent_get(kqfd));
+ test_no_kevents();
+
+ /* Since the knote is disabled, the EV_DELETE operation succeeds. */
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ kevent_socket_drain();
+
+ success();
+}
+#endif /* HAVE_EV_DISPATCH */
+
+#if BROKEN
+void
+test_kevent_socket_lowat(void)
+{
+ const char *test_id = "kevent(EVFILT_READ, NOTE_LOWAT)";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ /* Re-add the watch and make sure no events are pending */
+ puts("-- re-adding knote, setting low watermark to 2 bytes");
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD | EV_ONESHOT, NOTE_LOWAT, 2, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+ test_no_kevents();
+
+ puts("-- checking that one byte does not trigger an event..");
+ kevent_socket_fill();
+ test_no_kevents();
+
+ puts("-- checking that two bytes triggers an event..");
+ kevent_socket_fill();
+ if (kevent(kqfd, NULL, 0, &kev, 1, NULL) != 1)
+ err(1, "%s", test_id);
+ KEV_CMP(kev, sockfd[0], EVFILT_READ, 0);
+ test_no_kevents();
+
+ kevent_socket_drain();
+ kevent_socket_drain();
+
+ success();
+}
+#endif
+
+void
+test_kevent_socket_eof(void)
+{
+ const char *test_id = "kevent(EVFILT_READ, EV_EOF)";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ /* Re-add the watch and make sure no events are pending */
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+ test_no_kevents();
+
+ if (close(sockfd[1]) < 0)
+ err(1, "close(2)");
+
+ kev.flags |= EV_EOF;
+ kevent_cmp(&kev, kevent_get(kqfd));
+
+ /* Delete the watch */
+ EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+ err(1, "%s", test_id);
+
+ success();
+}
+
+void
+test_evfilt_read()
+{
+ /* Create a connected pair of full-duplex sockets for testing socket events */
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockfd) < 0)
+ abort();
+
+ kqfd = kqueue();
+ test_kevent_socket_add();
+ test_kevent_socket_del();
+ test_kevent_socket_get();
+ test_kevent_socket_disable_and_enable();
+ test_kevent_socket_oneshot();
+ test_kevent_socket_clear();
+#if HAVE_EV_DISPATCH
+ test_kevent_socket_dispatch();
+#endif
+ test_kevent_socket_eof();
+ close(kqfd);
+}
diff --git a/tests/sys/kqueue/signal.c b/tests/sys/kqueue/libkqueue/signal.c
index 14e751d..14e751d 100644
--- a/tests/sys/kqueue/signal.c
+++ b/tests/sys/kqueue/libkqueue/signal.c
diff --git a/tests/sys/kqueue/timer.c b/tests/sys/kqueue/libkqueue/timer.c
index 766125d..766125d 100644
--- a/tests/sys/kqueue/timer.c
+++ b/tests/sys/kqueue/libkqueue/timer.c
diff --git a/tests/sys/kqueue/user.c b/tests/sys/kqueue/libkqueue/user.c
index 9ba25f9..9ba25f9 100644
--- a/tests/sys/kqueue/user.c
+++ b/tests/sys/kqueue/libkqueue/user.c
diff --git a/tests/sys/kqueue/vnode.c b/tests/sys/kqueue/libkqueue/vnode.c
index dfa0b5e..55d5b3f 100644
--- a/tests/sys/kqueue/vnode.c
+++ b/tests/sys/kqueue/libkqueue/vnode.c
@@ -25,12 +25,12 @@ void
test_kevent_vnode_add(void)
{
const char *test_id = "kevent(EVFILT_VNODE, EV_ADD)";
- const char *testfile = "/tmp/kqueue-test.tmp";
+ const char *testfile = "./kqueue-test.tmp";
struct kevent kev;
test_begin(test_id);
- system("touch /tmp/kqueue-test.tmp");
+ system("touch ./kqueue-test.tmp");
vnode_fd = open(testfile, O_RDONLY);
if (vnode_fd < 0)
err(1, "open of %s", testfile);
@@ -57,7 +57,7 @@ test_kevent_vnode_note_delete(void)
if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
err(1, "%s", test_id);
- if (unlink("/tmp/kqueue-test.tmp") < 0)
+ if (unlink("./kqueue-test.tmp") < 0)
err(1, "unlink");
kevent_cmp(&kev, kevent_get(kqfd));
@@ -77,7 +77,7 @@ test_kevent_vnode_note_write(void)
if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
err(1, "%s", test_id);
- if (system("echo hello >> /tmp/kqueue-test.tmp") < 0)
+ if (system("echo hello >> ./kqueue-test.tmp") < 0)
err(1, "system");
/* BSD kqueue adds NOTE_EXTEND even though it was not requested */
@@ -102,7 +102,7 @@ test_kevent_vnode_note_attrib(void)
if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
err(1, "%s", test_id);
- if (system("touch /tmp/kqueue-test.tmp") < 0)
+ if (system("touch ./kqueue-test.tmp") < 0)
err(1, "system");
nfds = kevent(kqfd, NULL, 0, &kev, 1, NULL);
@@ -130,7 +130,7 @@ test_kevent_vnode_note_rename(void)
if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
err(1, "%s", test_id);
- if (system("mv /tmp/kqueue-test.tmp /tmp/kqueue-test2.tmp") < 0)
+ if (system("mv ./kqueue-test.tmp ./kqueue-test2.tmp") < 0)
err(1, "system");
nfds = kevent(kqfd, NULL, 0, &kev, 1, NULL);
@@ -142,7 +142,7 @@ test_kevent_vnode_note_rename(void)
err(1, "%s - incorrect event (sig=%u; filt=%d; flags=%d)",
test_id, (unsigned int)kev.ident, kev.filter, kev.flags);
- if (system("mv /tmp/kqueue-test2.tmp /tmp/kqueue-test.tmp") < 0)
+ if (system("mv ./kqueue-test2.tmp ./kqueue-test.tmp") < 0)
err(1, "system");
success();
@@ -183,7 +183,7 @@ test_kevent_vnode_disable_and_enable(void)
err(1, "%s", test_id);
/* Confirm that the watch is disabled */
- if (system("touch /tmp/kqueue-test.tmp") < 0)
+ if (system("touch ./kqueue-test.tmp") < 0)
err(1, "system");
test_no_kevents();
@@ -191,7 +191,7 @@ test_kevent_vnode_disable_and_enable(void)
kev.flags = EV_ENABLE;
if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
err(1, "%s", test_id);
- if (system("touch /tmp/kqueue-test.tmp") < 0)
+ if (system("touch ./kqueue-test.tmp") < 0)
err(1, "system");
nfds = kevent(kqfd, NULL, 0, &kev, 1, NULL);
if (nfds < 1)
@@ -221,7 +221,7 @@ test_kevent_vnode_dispatch(void)
if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
err(1, "%s", test_id);
- if (system("touch /tmp/kqueue-test.tmp") < 0)
+ if (system("touch ./kqueue-test.tmp") < 0)
err(1, "system");
nfds = kevent(kqfd, NULL, 0, &kev, 1, NULL);
@@ -235,7 +235,7 @@ test_kevent_vnode_dispatch(void)
/* Confirm that the watch is disabled automatically */
puts("-- checking that watch is disabled");
- if (system("touch /tmp/kqueue-test.tmp") < 0)
+ if (system("touch ./kqueue-test.tmp") < 0)
err(1, "system");
test_no_kevents();
diff --git a/tests/sys/mqueue/Makefile b/tests/sys/mqueue/Makefile
index 5af8b25..63741d2 100644
--- a/tests/sys/mqueue/Makefile
+++ b/tests/sys/mqueue/Makefile
@@ -6,7 +6,7 @@ ATF_TESTS_SH= mqueue_test
BINDIR= ${TESTSDIR}
-CFLAGS+= -I${.CURDIR:H:H}
+CFLAGS+= -I${SRCTOP}/tests
PROGS+= mqtest1
PROGS+= mqtest2
diff --git a/tests/sys/pjdfstest/tests/Makefile b/tests/sys/pjdfstest/tests/Makefile
index 917b01a..95b4bbe 100644
--- a/tests/sys/pjdfstest/tests/Makefile
+++ b/tests/sys/pjdfstest/tests/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-PJDFSTEST_SRCDIR= ${.CURDIR:H:H:H:H}/contrib/pjdfstest
+PJDFSTEST_SRCDIR= ${SRCTOP}/contrib/pjdfstest
TESTSDIR= ${TESTSBASE}/sys/pjdfstest
@@ -36,6 +36,4 @@ TESTS_SUBDIRS+= symlink
TESTS_SUBDIRS+= truncate
TESTS_SUBDIRS+= unlink
-SUBDIR_PARALLEL=
-
.include <bsd.test.mk>
diff --git a/tools/test/dtrace/Makefile b/tools/test/dtrace/Makefile
index c82d6f7..4b3842b 100644
--- a/tools/test/dtrace/Makefile
+++ b/tools/test/dtrace/Makefile
@@ -59,7 +59,6 @@ IGNORE= \
${TESTSRCDIR}/tst/common/proc/tst.discard.ksh \
${TESTSRCDIR}/tst/common/proc/tst.signal.ksh \
${TESTSRCDIR}/tst/common/proc/tst.startexit.ksh \
- ${TESTSRCDIR}/tst/common/profile-n/tst.ufuncsort.c \
${TESTSRCDIR}/tst/common/scalars/tst.misc.d \
${TESTSRCDIR}/tst/common/scalars/tst.selfarray2.d \
${TESTSRCDIR}/tst/common/sysevent/tst.post.c \
@@ -115,10 +114,6 @@ NOTWORK+= \
${TESTSRCDIR}/tst/common/profile-n/tst.func.ksh \
${TESTSRCDIR}/tst/common/profile-n/tst.mod.ksh \
${TESTSRCDIR}/tst/common/profile-n/tst.sym.ksh \
- ${TESTSRCDIR}/tst/common/profile-n/tst.ufunc.ksh \
- ${TESTSRCDIR}/tst/common/profile-n/tst.ufuncsort.ksh \
- ${TESTSRCDIR}/tst/common/profile-n/tst.umod.ksh \
- ${TESTSRCDIR}/tst/common/profile-n/tst.usym.ksh \
${TESTSRCDIR}/tst/common/safety/tst.basename.d \
${TESTSRCDIR}/tst/common/safety/tst.caller.d \
${TESTSRCDIR}/tst/common/safety/tst.cleanpath.d \
diff --git a/usr.bin/apply/tests/Makefile b/usr.bin/apply/tests/Makefile
index 332bf7d..5ff6c28 100644
--- a/usr.bin/apply/tests/Makefile
+++ b/usr.bin/apply/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/apply
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/atm/sscop/Makefile b/usr.bin/atm/sscop/Makefile
index 36d3dcf..1ffa473 100644
--- a/usr.bin/atm/sscop/Makefile
+++ b/usr.bin/atm/sscop/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-CONTRIB= ${.CURDIR}/../../../contrib/ngatm/sscop
+CONTRIB= ${SRCTOP}/contrib/ngatm/sscop
.PATH: ${CONTRIB}
diff --git a/usr.bin/awk/Makefile b/usr.bin/awk/Makefile
index 6538636..7e4c997 100644
--- a/usr.bin/awk/Makefile
+++ b/usr.bin/awk/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-AWKSRC= ${.CURDIR}/../../contrib/one-true-awk
+AWKSRC= ${SRCTOP}/contrib/one-true-awk
.PATH: ${AWKSRC}
PROG= awk
@@ -25,6 +25,6 @@ proctab.c: maketab
./maketab > proctab.c
build-tools: maketab
-maketab: ytab.h ${AWKSRC}/maketab.c
+maketab: ytab.h maketab.c
.include <bsd.prog.mk>
diff --git a/usr.bin/basename/tests/Makefile b/usr.bin/basename/tests/Makefile
index 32dedab..bad7b28 100644
--- a/usr.bin/basename/tests/Makefile
+++ b/usr.bin/basename/tests/Makefile
@@ -1,12 +1,7 @@
# $FreeBSD$
-TESTSRC= ${.CURDIR}/../../../contrib/netbsd-tests/usr.bin/basename
-.PATH: ${TESTSRC}
+NETBSD_ATF_TESTS_SH= basename_test
-.include <bsd.own.mk>
-
-TESTSDIR= ${TESTSBASE}/usr.bin/basename
-ATF_TESTS_SH= basename_test
-ATF_TESTS_SH_SRC_basename_test= t_basename.sh
+.include <netbsd-tests.test.mk>
.include <bsd.test.mk>
diff --git a/usr.bin/bluetooth/Makefile.inc b/usr.bin/bluetooth/Makefile.inc
index c0e05cf..363f1e6 100644
--- a/usr.bin/bluetooth/Makefile.inc
+++ b/usr.bin/bluetooth/Makefile.inc
@@ -1,4 +1,4 @@
# $FreeBSD$
-.include "${.CURDIR}/../../Makefile.inc"
+.include "${SRCTOP}/usr.bin/Makefile.inc"
diff --git a/usr.bin/bmake/tests/Makefile.inc b/usr.bin/bmake/tests/Makefile.inc
new file mode 100644
index 0000000..b2201e4
--- /dev/null
+++ b/usr.bin/bmake/tests/Makefile.inc
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+SUBDIR_PARALLEL= t
diff --git a/usr.bin/bsdcat/Makefile b/usr.bin/bsdcat/Makefile
index da1c43f..f3dd812 100644
--- a/usr.bin/bsdcat/Makefile
+++ b/usr.bin/bsdcat/Makefile
@@ -2,10 +2,10 @@
.include <bsd.own.mk>
-_LIBARCHIVEDIR= ${.CURDIR}/../../contrib/libarchive
-_LIBARCHIVECONFDIR= ${.CURDIR}/../../lib/libarchive
+_LIBARCHIVEDIR= ${SRCTOP}/contrib/libarchive
+_LIBARCHIVECONFDIR= ${SRCTOP}/lib/libarchive
-PROG= bsdcat
+PROG= bsdcat
BSDCAT_VERSION_STRING= 3.2.2
.PATH: ${_LIBARCHIVEDIR}/cat
diff --git a/usr.bin/calendar/tests/Makefile b/usr.bin/calendar/tests/Makefile
index f3d592e..b9b0607 100644
--- a/usr.bin/calendar/tests/Makefile
+++ b/usr.bin/calendar/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/calendar
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/cmp/tests/Makefile b/usr.bin/cmp/tests/Makefile
index 1c054c6..bfae46c 100644
--- a/usr.bin/cmp/tests/Makefile
+++ b/usr.bin/cmp/tests/Makefile
@@ -1,12 +1,9 @@
# $FreeBSD$
-TESTSRC= ${.CURDIR}/../../../contrib/netbsd-tests/usr.bin/cmp
-.PATH: ${TESTSRC}
-
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/usr.bin/cmp
-ATF_TESTS_SH= cmp_test
-ATF_TESTS_SH_SRC_cmp_test= t_cmp.sh
+NETBSD_ATF_TESTS_SH= cmp_test
+
+.include <netbsd-tests.test.mk>
.include <bsd.test.mk>
diff --git a/usr.bin/col/tests/Makefile b/usr.bin/col/tests/Makefile
index 43838e9..cf02083 100644
--- a/usr.bin/col/tests/Makefile
+++ b/usr.bin/col/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/col
-
ATF_TESTS_SH= col
FILES= rlf.in \
diff --git a/usr.bin/comm/tests/Makefile b/usr.bin/comm/tests/Makefile
index 172943d..065b3b4 100644
--- a/usr.bin/comm/tests/Makefile
+++ b/usr.bin/comm/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/comm
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/cut/tests/Makefile b/usr.bin/cut/tests/Makefile
index b324a78..c1abcc7 100644
--- a/usr.bin/cut/tests/Makefile
+++ b/usr.bin/cut/tests/Makefile
@@ -1,13 +1,9 @@
# $FreeBSD$
-TESTSRC= ${.CURDIR}/../../../contrib/netbsd-tests/usr.bin/cut
-.PATH: ${TESTSRC}
-
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/usr.bin/cut
-ATF_TESTS_SH= cut_test
-ATF_TESTS_SH_SRC_cut_test= t_cut.sh
+ATF_TESTS_SH+= cut2_test
+NETBSD_ATF_TESTS_SH= cut_test
FILESDIR= ${TESTSDIR}
FILES= d_basic.out
@@ -18,4 +14,6 @@ FILES+= d_latin1.in
FILES+= d_sflag.out
FILES+= d_utf8.in
+.include <netbsd-tests.test.mk>
+
.include <bsd.test.mk>
diff --git a/usr.bin/cut/tests/cut2_test.sh b/usr.bin/cut/tests/cut2_test.sh
new file mode 100755
index 0000000..e5aaa9a
--- /dev/null
+++ b/usr.bin/cut/tests/cut2_test.sh
@@ -0,0 +1,51 @@
+#
+# Copyright (c) 2017 Dell EMC
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+
+atf_test_case s_flag
+s_flag_head()
+{
+ atf_set "descr" "Check -s flag"
+}
+
+s_flag_body()
+{
+ cat >input<<EOF
+a,b,c,d
+b,c,d
+c,d
+d
+EOF
+ atf_check -o inline:'a\nb\nc\n' cut -d, -f 1 -s < input
+ atf_check -o inline:'d\n\n\n' cut -d, -f 4 -s < input
+ atf_check -o inline:'a,b,\nb,\n\n' cut -d 'c' -f 1 -s < input
+ atf_check -o empty cut -d'!' -f 1 -s < input
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case s_flag
+}
diff --git a/usr.bin/dirname/tests/Makefile b/usr.bin/dirname/tests/Makefile
index 5b84c57..6688e0d 100644
--- a/usr.bin/dirname/tests/Makefile
+++ b/usr.bin/dirname/tests/Makefile
@@ -1,12 +1,9 @@
# $FreeBSD$
-TESTSRC= ${.CURDIR}/../../../contrib/netbsd-tests/usr.bin/dirname
-.PATH: ${TESTSRC}
-
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/usr.bin/dirname
-ATF_TESTS_SH= dirname_test
-ATF_TESTS_SH_SRC_dirname_test= t_dirname.sh
+NETBSD_ATF_TESTS_SH= dirname_test
+
+.include <netbsd-tests.test.mk>
.include <bsd.test.mk>
diff --git a/usr.bin/file2c/tests/Makefile b/usr.bin/file2c/tests/Makefile
index 8854eb4..50267f0 100644
--- a/usr.bin/file2c/tests/Makefile
+++ b/usr.bin/file2c/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/file2c
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/grep/tests/Makefile b/usr.bin/grep/tests/Makefile
index 59b948c..7744fcb 100644
--- a/usr.bin/grep/tests/Makefile
+++ b/usr.bin/grep/tests/Makefile
@@ -1,14 +1,8 @@
# $FreeBSD$
-TESTSRC= ${.CURDIR}/../../../contrib/netbsd-tests/usr.bin/grep
-.PATH: ${TESTSRC}
-
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/usr.bin/grep
-
-ATF_TESTS_SH= grep_test
-ATF_TESTS_SH_SRC_grep_test= t_grep.sh
+NETBSD_ATF_TESTS_SH= grep_test
FILESDIR= ${TESTSDIR}
FILES= d_basic.out
@@ -38,4 +32,6 @@ FILES+= d_whole_line.out
FILES+= d_word_regexps.out
FILES+= d_zgrep.out
+.include <netbsd-tests.test.mk>
+
.include <bsd.test.mk>
diff --git a/usr.bin/gzip/tests/Makefile b/usr.bin/gzip/tests/Makefile
index 155d739..03a5852 100644
--- a/usr.bin/gzip/tests/Makefile
+++ b/usr.bin/gzip/tests/Makefile
@@ -1,12 +1,9 @@
# $FreeBSD$
-TESTSRC= ${.CURDIR}/../../../contrib/netbsd-tests/usr.bin/gzip
-.PATH: ${TESTSRC}
-
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/usr.bin/gzip
-ATF_TESTS_SH= gzip_test
-ATF_TESTS_SH_SRC_gzip_test= t_gzip.sh
+NETBSD_ATF_TESTS_SH= gzip_test
+
+.include <netbsd-tests.test.mk>
.include <bsd.test.mk>
diff --git a/usr.bin/join/tests/Makefile b/usr.bin/join/tests/Makefile
index 2d5580f..16f522f 100644
--- a/usr.bin/join/tests/Makefile
+++ b/usr.bin/join/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/join
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/jot/tests/Makefile b/usr.bin/jot/tests/Makefile
index ef20eb2..63f7631 100644
--- a/usr.bin/jot/tests/Makefile
+++ b/usr.bin/jot/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/jot
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/lastcomm/tests/Makefile b/usr.bin/lastcomm/tests/Makefile
index d357648..71e8395 100644
--- a/usr.bin/lastcomm/tests/Makefile
+++ b/usr.bin/lastcomm/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/lastcomm
-
TAP_TESTS_SH= legacy_test
TEST_METADATA.legacy_test+= allowed_architectures="amd64 i386 sparc64"
diff --git a/usr.bin/m4/tests/Makefile b/usr.bin/m4/tests/Makefile
index 2eebc07..6a48677 100644
--- a/usr.bin/m4/tests/Makefile
+++ b/usr.bin/m4/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/m4
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/ncal/tests/Makefile b/usr.bin/ncal/tests/Makefile
index 170caac..23b235f 100644
--- a/usr.bin/ncal/tests/Makefile
+++ b/usr.bin/ncal/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/ncal
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/printf/tests/Makefile b/usr.bin/printf/tests/Makefile
index da3f533..5ed5c00 100644
--- a/usr.bin/printf/tests/Makefile
+++ b/usr.bin/printf/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/printf
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/sed/tests/Makefile b/usr.bin/sed/tests/Makefile
index 02d2b89..5bceaf8 100644
--- a/usr.bin/sed/tests/Makefile
+++ b/usr.bin/sed/tests/Makefile
@@ -1,7 +1,6 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/sed
-
+NETBSD_ATF_TESTS_SH+= sed_test
TAP_TESTS_SH= legacy_test
TAP_TESTS_SH+= multi_test
TEST_METADATA.multi_test+= required_files="/usr/share/dict/words"
@@ -33,7 +32,10 @@ FILES+= regress.s5.out
FILES+= regress.sg.out
FILES+= regress.sh
FILES+= regress.y.out
+ATF_TESTS_SH_SED_sed_test+= -e 's,atf_expect_fail "PR bin/28126",,g'
+FILES+= d_c2048.in
SUBDIR= regress.multitest.out
+.include <netbsd-tests.test.mk>
.include <bsd.test.mk>
diff --git a/usr.bin/svn/Makefile.inc b/usr.bin/svn/Makefile.inc
index 353bb0f..15d0045 100644
--- a/usr.bin/svn/Makefile.inc
+++ b/usr.bin/svn/Makefile.inc
@@ -10,35 +10,33 @@ SVNLITE?= lite
.if !defined(SVNDIR)
-SVNDIR= ${.CURDIR}/../../../contrib/subversion/subversion
-APRU= ${.CURDIR}/../../../contrib/apr-util
-APR= ${.CURDIR}/../../../contrib/apr
+SVNDIR= ${SRCTOP}/contrib/subversion/subversion
+APRU= ${SRCTOP}/contrib/apr-util
+APR= ${SRCTOP}/contrib/apr
SQLITE= ${.CURDIR}/../../../contrib/sqlite3
WARNS?= 0 # definitely not warns friendly
-.if exists(${.CURDIR}/../../Makefile.inc)
-.include "${.CURDIR}/../../Makefile.inc"
-.endif
-
-LIBAPRDIR= ${.OBJDIR}/../lib/libapr
-LIBAPR_UTILDIR= ${.OBJDIR}/../lib/libapr_util
-LIBSQLITEDIR= ${.OBJDIR}/../lib/libsqlite3
-LIBSERFDIR= ${.OBJDIR}/../lib/libserf
-
-LIBSVN_CLIENTDIR= ${.OBJDIR}/../lib/libsvn_client
-LIBSVN_DELTADIR= ${.OBJDIR}/../lib/libsvn_delta
-LIBSVN_DIFFDIR= ${.OBJDIR}/../lib/libsvn_diff
-LIBSVN_FSDIR= ${.OBJDIR}/../lib/libsvn_fs
-LIBSVN_FS_FSDIR= ${.OBJDIR}/../lib/libsvn_fs_fs
-LIBSVN_FS_UTILDIR= ${.OBJDIR}/../lib/libsvn_fs_util
-LIBSVN_FS_XDIR= ${.OBJDIR}/../lib/libsvn_fs_x
-LIBSVN_RADIR= ${.OBJDIR}/../lib/libsvn_ra
-LIBSVN_RA_LOCALDIR= ${.OBJDIR}/../lib/libsvn_ra_local
-LIBSVN_RA_SVNDIR= ${.OBJDIR}/../lib/libsvn_ra_svn
-LIBSVN_RA_SERFDIR= ${.OBJDIR}/../lib/libsvn_ra_serf
-LIBSVN_REPOSDIR= ${.OBJDIR}/../lib/libsvn_repos
-LIBSVN_SUBRDIR= ${.OBJDIR}/../lib/libsvn_subr
-LIBSVN_WCDIR= ${.OBJDIR}/../lib/libsvn_wc
+.sinclude "${.CURDIR:H:H}/Makefile.inc"
+
+LIBAPRDIR= ${.OBJDIR:H}/lib/libapr
+LIBAPR_UTILDIR= ${.OBJDIR:H}/lib/libapr_util
+LIBSQLITEDIR= ${.OBJDIR:H}/lib/libsqlite3
+LIBSERFDIR= ${.OBJDIR:H}/lib/libserf
+
+LIBSVN_CLIENTDIR= ${.OBJDIR:H}/lib/libsvn_client
+LIBSVN_DELTADIR= ${.OBJDIR:H}/lib/libsvn_delta
+LIBSVN_DIFFDIR= ${.OBJDIR:H}/lib/libsvn_diff
+LIBSVN_FSDIR= ${.OBJDIR:H}/lib/libsvn_fs
+LIBSVN_FS_FSDIR= ${.OBJDIR:H}/lib/libsvn_fs_fs
+LIBSVN_FS_UTILDIR= ${.OBJDIR:H}/lib/libsvn_fs_util
+LIBSVN_FS_XDIR= ${.OBJDIR:H}/lib/libsvn_fs_x
+LIBSVN_RADIR= ${.OBJDIR:H}/lib/libsvn_ra
+LIBSVN_RA_LOCALDIR= ${.OBJDIR:H}/lib/libsvn_ra_local
+LIBSVN_RA_SVNDIR= ${.OBJDIR:H}/lib/libsvn_ra_svn
+LIBSVN_RA_SERFDIR= ${.OBJDIR:H}/lib/libsvn_ra_serf
+LIBSVN_REPOSDIR= ${.OBJDIR:H}/lib/libsvn_repos
+LIBSVN_SUBRDIR= ${.OBJDIR:H}/lib/libsvn_subr
+LIBSVN_WCDIR= ${.OBJDIR:H}/lib/libsvn_wc
LIBAPR= ${LIBAPRDIR}/libapr.a
LIBAPR_UTIL= ${LIBAPR_UTILDIR}/libapr-util.a
diff --git a/usr.bin/svn/svn/Makefile b/usr.bin/svn/svn/Makefile
index 3c6ac0c..174213e 100644
--- a/usr.bin/svn/svn/Makefile
+++ b/usr.bin/svn/svn/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svn
@@ -19,11 +19,11 @@ SRCS= add-cmd.c auth-cmd.c blame-cmd.c cat-cmd.c changelist-cmd.c \
resolved-cmd.c revert-cmd.c status-cmd.c similarity.c status.c \
svn.c switch-cmd.c unlock-cmd.c update-cmd.c upgrade-cmd.c util.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svnadmin/Makefile b/usr.bin/svn/svnadmin/Makefile
index 3b1f142..46b687f 100644
--- a/usr.bin/svn/svnadmin/Makefile
+++ b/usr.bin/svn/svnadmin/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svnadmin
@@ -10,11 +10,11 @@ PROG= svn${SVNLITE}admin
SRCS= svnadmin.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svnbench/Makefile b/usr.bin/svn/svnbench/Makefile
index 8fb6ef8..1c4e6ad 100644
--- a/usr.bin/svn/svnbench/Makefile
+++ b/usr.bin/svn/svnbench/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svnbench
@@ -11,11 +11,11 @@ PROG= svn${SVNLITE}bench
SRCS= help-cmd.c notify.c null-blame-cmd.c null-export-cmd.c \
null-info-cmd.c null-list-cmd.c null-log-cmd.c svnbench.c util.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svndumpfilter/Makefile b/usr.bin/svn/svndumpfilter/Makefile
index 17968a1..bbc44a4 100644
--- a/usr.bin/svn/svndumpfilter/Makefile
+++ b/usr.bin/svn/svndumpfilter/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svndumpfilter
@@ -10,11 +10,11 @@ PROG= svn${SVNLITE}dumpfilter
SRCS= svndumpfilter.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svnfsfs/Makefile b/usr.bin/svn/svnfsfs/Makefile
index 3f056dc..416ed02 100644
--- a/usr.bin/svn/svnfsfs/Makefile
+++ b/usr.bin/svn/svnfsfs/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svnfsfs
@@ -10,11 +10,11 @@ PROG= svn${SVNLITE}fsfs
SRCS= dump-index-cmd.c load-index-cmd.c stats-cmd.c svnfsfs.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svnlook/Makefile b/usr.bin/svn/svnlook/Makefile
index 60d4a2e..e067faf 100644
--- a/usr.bin/svn/svnlook/Makefile
+++ b/usr.bin/svn/svnlook/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svnlook
@@ -10,11 +10,11 @@ PROG= svn${SVNLITE}look
SRCS= svnlook.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svnmucc/Makefile b/usr.bin/svn/svnmucc/Makefile
index 5beb308..d7a993a 100644
--- a/usr.bin/svn/svnmucc/Makefile
+++ b/usr.bin/svn/svnmucc/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svnmucc
@@ -10,11 +10,11 @@ PROG= svn${SVNLITE}mucc
SRCS= svnmucc.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svnrdump/Makefile b/usr.bin/svn/svnrdump/Makefile
index b6e91ce..3c23629 100644
--- a/usr.bin/svn/svnrdump/Makefile
+++ b/usr.bin/svn/svnrdump/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svnrdump
@@ -10,11 +10,11 @@ PROG= svn${SVNLITE}rdump
SRCS= dump_editor.c load_editor.c svnrdump.c util.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svnserve/Makefile b/usr.bin/svn/svnserve/Makefile
index 4133c27..0b475e2 100644
--- a/usr.bin/svn/svnserve/Makefile
+++ b/usr.bin/svn/svnserve/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svnserve
@@ -10,11 +10,11 @@ PROG= svn${SVNLITE}serve
SRCS= cyrus_auth.c log-escape.c logger.c serve.c svnserve.c winservice.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svnsync/Makefile b/usr.bin/svn/svnsync/Makefile
index f6be876..60864a6 100644
--- a/usr.bin/svn/svnsync/Makefile
+++ b/usr.bin/svn/svnsync/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svnsync
@@ -10,11 +10,11 @@ PROG= svn${SVNLITE}sync
SRCS= svnsync.c sync.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/svn/svnversion/Makefile b/usr.bin/svn/svnversion/Makefile
index b6ca826..7212c50 100644
--- a/usr.bin/svn/svnversion/Makefile
+++ b/usr.bin/svn/svnversion/Makefile
@@ -2,7 +2,7 @@
MAN=
-.include "${.CURDIR}/../Makefile.inc"
+.include "${.CURDIR:H}/Makefile.inc"
.PATH: ${SVNDIR}/svnversion
@@ -10,11 +10,11 @@ PROG= svn${SVNLITE}version
SRCS= svnversion.c
-CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR}/.. \
- -I${.CURDIR}/../lib/libapr \
+CFLAGS+=-I${SVNDIR}/include -I${SVNDIR} -I${.CURDIR:H} \
+ -I${.CURDIR:H}/lib/libapr \
-I${APR}/include/arch/unix \
-I${APR}/include \
- -I${.CURDIR}/../lib/libapr_util \
+ -I${.CURDIR:H}/lib/libapr_util \
-I${APRU}/include/private \
-I${APRU}/include
diff --git a/usr.bin/tests/Makefile b/usr.bin/tests/Makefile
index af7a8bf..08b47bc 100644
--- a/usr.bin/tests/Makefile
+++ b/usr.bin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/usr.bin
-
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/truncate/tests/Makefile b/usr.bin/truncate/tests/Makefile
index bfa15db..82cd606 100644
--- a/usr.bin/truncate/tests/Makefile
+++ b/usr.bin/truncate/tests/Makefile
@@ -1,6 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/truncate
-ATF_TESTS_SH= truncate_test
+ATF_TESTS_SH= truncate_test
.include <bsd.test.mk>
diff --git a/usr.bin/uudecode/tests/Makefile b/usr.bin/uudecode/tests/Makefile
index 5fda16b..efd3f92 100644
--- a/usr.bin/uudecode/tests/Makefile
+++ b/usr.bin/uudecode/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/uudecode
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/uuencode/tests/Makefile b/usr.bin/uuencode/tests/Makefile
index ca7088e..a36ef6c 100644
--- a/usr.bin/uuencode/tests/Makefile
+++ b/usr.bin/uuencode/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/uuencode
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/xargs/tests/Makefile b/usr.bin/xargs/tests/Makefile
index cd14813..c8ef2c9 100644
--- a/usr.bin/xargs/tests/Makefile
+++ b/usr.bin/xargs/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.bin/xargs
-
TAP_TESTS_SH= legacy_test
FILESDIR= ${TESTSDIR}
diff --git a/usr.bin/yacc/tests/Makefile b/usr.bin/yacc/tests/Makefile
index 2e157ec..ad3abaa 100644
--- a/usr.bin/yacc/tests/Makefile
+++ b/usr.bin/yacc/tests/Makefile
@@ -2,12 +2,10 @@
.include <bsd.own.mk>
-TEST_DIR= ${.CURDIR}/../../../contrib/byacc/test
+TEST_DIR= ${SRCTOP}/contrib/byacc/test
.PATH: ${TEST_DIR} ${TEST_DIR}/yacc
-TESTSDIR= ${TESTSBASE}/usr.bin/yacc
-
PLAIN_TESTS_SH= yacc_tests
# NOTE: due to caveats with how permissions are handled on FreeBSD
# with root, this must be run as a non-privileged user; otherwise
diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c
index eefde75..60079d4 100644
--- a/usr.sbin/arp/arp.c
+++ b/usr.sbin/arp/arp.c
@@ -48,7 +48,6 @@ __FBSDID("$FreeBSD$");
* arp - display, set, and delete arp table entries
*/
-
#include <sys/param.h>
#include <sys/file.h>
#include <sys/socket.h>
@@ -80,8 +79,8 @@ __FBSDID("$FreeBSD$");
#include <strings.h>
#include <unistd.h>
-typedef void (action_fn)(struct sockaddr_dl *sdl,
- struct sockaddr_in *s_in, struct rt_msghdr *rtm);
+typedef void (action_fn)(struct sockaddr_dl *sdl, struct sockaddr_in *s_in,
+ struct rt_msghdr *rtm);
static int search(u_long addr, action_fn *action);
static action_fn print_entry;
@@ -320,7 +319,7 @@ set(int argc, char **argv)
return (1);
doing_proxy = flags = expire_time = 0;
while (argc-- > 0) {
- if (strncmp(argv[0], "temp", 4) == 0) {
+ if (strcmp(argv[0], "temp") == 0) {
struct timespec tp;
int max_age;
size_t len = sizeof(max_age);
@@ -330,10 +329,10 @@ set(int argc, char **argv)
&max_age, &len, NULL, 0) != 0)
err(1, "sysctlbyname");
expire_time = tp.tv_sec + max_age;
- } else if (strncmp(argv[0], "pub", 3) == 0) {
+ } else if (strcmp(argv[0], "pub") == 0) {
flags |= RTF_ANNOUNCE;
doing_proxy = 1;
- if (argc && strncmp(argv[1], "only", 3) == 0) {
+ if (argc && strcmp(argv[1], "only") == 0) {
/*
* Compatibility: in pre FreeBSD 8 times
* the "only" keyword used to mean that
@@ -342,27 +341,28 @@ set(int argc, char **argv)
*/
argc--; argv++;
}
- } else if (strncmp(argv[0], "blackhole", 9) == 0) {
+ } else if (strcmp(argv[0], "blackhole") == 0) {
if (flags & RTF_REJECT) {
- printf("Choose one of blackhole or reject, not both.\n");
+ errx(1, "Choose one of blackhole or reject, "
+ "not both.");
}
flags |= RTF_BLACKHOLE;
- } else if (strncmp(argv[0], "reject", 6) == 0) {
+ } else if (strcmp(argv[0], "reject") == 0) {
if (flags & RTF_BLACKHOLE) {
- printf("Choose one of blackhole or reject, not both.\n");
+ errx(1, "Choose one of blackhole or reject, "
+ "not both.");
}
flags |= RTF_REJECT;
- } else if (strncmp(argv[0], "trail", 5) == 0) {
- /* XXX deprecated and undocumented feature */
- printf("%s: Sending trailers is no longer supported\n",
- host);
+ } else {
+ warnx("Invalid parameter '%s'", argv[0]);
+ usage();
}
argv++;
}
ea = (struct ether_addr *)LLADDR(&sdl_m);
if (doing_proxy && !strcmp(eaddr, "auto")) {
if (!get_ether_addr(dst->sin_addr.s_addr, ea)) {
- printf("no interface found for %s\n",
+ warnx("no interface found for %s",
inet_ntoa(dst->sin_addr));
return (1);
}
@@ -381,7 +381,7 @@ set(int argc, char **argv)
/*
* In the case a proxy-arp entry is being added for
- * a remote end point, the RTF_ANNOUNCE flag in the
+ * a remote end point, the RTF_ANNOUNCE flag in the
* RTM_GET command is an indication to the kernel
* routing code that the interface associated with
* the prefix route covering the local end of the
@@ -398,7 +398,7 @@ set(int argc, char **argv)
if ((sdl->sdl_family != AF_LINK) ||
(rtm->rtm_flags & RTF_GATEWAY) ||
!valid_type(sdl->sdl_type)) {
- printf("cannot intuit interface index and type for %s\n", host);
+ warnx("cannot intuit interface index and type for %s", host);
return (1);
}
sdl_m.sdl_type = sdl->sdl_type;
@@ -467,7 +467,7 @@ delete(char *host)
sdl = (struct sockaddr_dl *)(SA_SIZE(addr) + (char *)addr);
/*
- * With the new L2/L3 restructure, the route
+ * With the new L2/L3 restructure, the route
* returned is a prefix route. The important
* piece of information from the previous
* RTM_GET is the interface index. In the
@@ -486,7 +486,7 @@ delete(char *host)
* is a proxy-arp entry to remove.
*/
if (flags & RTF_ANNOUNCE) {
- fprintf(stderr, "delete: cannot locate %s\n",host);
+ warnx("delete: cannot locate %s", host);
return (1);
}
@@ -525,7 +525,7 @@ search(u_long addr, action_fn *action)
mib[5] = RTF_LLINFO;
#else
mib[5] = 0;
-#endif
+#endif
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
err(1, "route-sysctl-estimate");
if (needed == 0) /* empty table */
@@ -575,7 +575,7 @@ print_entry(struct sockaddr_dl *sdl,
struct if_nameindex *p;
int seg;
- if (ifnameindex == NULL)
+ if (ifnameindex == NULL)
if ((ifnameindex = if_nameindex()) == NULL)
err(1, "cannot retrieve interface names");
@@ -597,7 +597,8 @@ print_entry(struct sockaddr_dl *sdl,
sdl->sdl_type == IFT_L2VLAN ||
sdl->sdl_type == IFT_BRIDGE) &&
sdl->sdl_alen == ETHER_ADDR_LEN)
- printf("%s", ether_ntoa((struct ether_addr *)LLADDR(sdl)));
+ printf("%s",
+ ether_ntoa((struct ether_addr *)LLADDR(sdl)));
else {
int n = sdl->sdl_nlen > 0 ? sdl->sdl_nlen + 1 : 0;
@@ -607,7 +608,7 @@ print_entry(struct sockaddr_dl *sdl,
printf("(incomplete)");
for (p = ifnameindex; p && ifnameindex->if_index &&
- ifnameindex->if_name; p++) {
+ ifnameindex->if_name; p++) {
if (p->if_index == sdl->sdl_index) {
printf(" on %s", p->if_name);
break;
@@ -629,31 +630,31 @@ print_entry(struct sockaddr_dl *sdl,
printf(" published");
switch(sdl->sdl_type) {
case IFT_ETHER:
- printf(" [ethernet]");
- break;
+ printf(" [ethernet]");
+ break;
case IFT_ISO88025:
- printf(" [token-ring]");
+ printf(" [token-ring]");
trld = SDL_ISO88025(sdl);
if (trld->trld_rcf != 0) {
printf(" rt=%x", ntohs(trld->trld_rcf));
for (seg = 0;
seg < ((TR_RCF_RIFLEN(trld->trld_rcf) - 2 ) / 2);
- seg++)
+ seg++)
printf(":%x", ntohs(*(trld->trld_route[seg])));
}
break;
case IFT_FDDI:
- printf(" [fddi]");
- break;
+ printf(" [fddi]");
+ break;
case IFT_ATM:
- printf(" [atm]");
- break;
+ printf(" [atm]");
+ break;
case IFT_L2VLAN:
printf(" [vlan]");
break;
case IFT_IEEE1394:
- printf(" [firewire]");
- break;
+ printf(" [firewire]");
+ break;
case IFT_BRIDGE:
printf(" [bridge]");
break;
@@ -662,8 +663,8 @@ print_entry(struct sockaddr_dl *sdl,
break;
default:
break;
- }
-
+ }
+
printf("\n");
}
@@ -688,13 +689,13 @@ static void
usage(void)
{
fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
- "usage: arp [-n] [-i interface] hostname",
- " arp [-n] [-i interface] -a",
- " arp -d hostname [pub]",
- " arp -d [-i interface] -a",
- " arp -s hostname ether_addr [temp] [reject | blackhole] [pub [only]]",
- " arp -S hostname ether_addr [temp] [reject | blackhole] [pub [only]]",
- " arp -f filename");
+ "usage: arp [-n] [-i interface] hostname",
+ " arp [-n] [-i interface] -a",
+ " arp -d hostname [pub]",
+ " arp -d [-i interface] -a",
+ " arp -s hostname ether_addr [temp] [reject | blackhole] [pub [only]]",
+ " arp -S hostname ether_addr [temp] [reject | blackhole] [pub [only]]",
+ " arp -f filename");
exit(1);
}
@@ -753,12 +754,12 @@ rtmsg(int cmd, struct sockaddr_in *dst, struct sockaddr_dl *sdl)
case RTM_GET:
rtm->rtm_addrs |= RTA_DST;
}
-#define NEXTADDR(w, s) \
- do { \
- if ((s) != NULL && rtm->rtm_addrs & (w)) { \
- bcopy((s), cp, sizeof(*(s))); \
- cp += SA_SIZE(s); \
- } \
+#define NEXTADDR(w, s) \
+ do { \
+ if ((s) != NULL && rtm->rtm_addrs & (w)) { \
+ bcopy((s), cp, sizeof(*(s))); \
+ cp += SA_SIZE(s); \
+ } \
} while (0)
NEXTADDR(RTA_DST, dst);
@@ -814,7 +815,7 @@ get_ether_addr(in_addr_t ipaddr, struct ether_addr *hwaddr)
}
#define NEXTIFR(i) \
- ((struct ifreq *)((char *)&(i)->ifr_addr \
+ ((struct ifreq *)((char *)&(i)->ifr_addr \
+ MAX((i)->ifr_addr.sa_len, sizeof((i)->ifr_addr))) )
/*
@@ -835,14 +836,10 @@ get_ether_addr(in_addr_t ipaddr, struct ether_addr *hwaddr)
if (ioctl(sock, SIOCGIFFLAGS, &ifreq) < 0)
continue;
if ((ifreq.ifr_flags &
- (IFF_UP|IFF_BROADCAST|IFF_POINTOPOINT|
- IFF_LOOPBACK|IFF_NOARP))
- != (IFF_UP|IFF_BROADCAST))
+ (IFF_UP|IFF_BROADCAST|IFF_POINTOPOINT|
+ IFF_LOOPBACK|IFF_NOARP)) != (IFF_UP|IFF_BROADCAST))
continue;
- /*
- * Get its netmask and check that it's on
- * the right subnet.
- */
+ /* Get its netmask and check that it's on the right subnet. */
if (ioctl(sock, SIOCGIFNETMASK, &ifreq) < 0)
continue;
mask = ((struct sockaddr_in *)
@@ -872,9 +869,8 @@ get_ether_addr(in_addr_t ipaddr, struct ether_addr *hwaddr)
*/
dla = (struct sockaddr_dl *) &ifr->ifr_addr;
memcpy(hwaddr, LLADDR(dla), dla->sdl_alen);
- printf("using interface %s for proxy with address ",
- ifp->ifr_name);
- printf("%s\n", ether_ntoa(hwaddr));
+ printf("using interface %s for proxy with address %s\n", ifp->ifr_name,
+ ether_ntoa(hwaddr));
retval = dla->sdl_alen;
done:
close(sock);
diff --git a/usr.sbin/bhyve/virtio.h b/usr.sbin/bhyve/virtio.h
index 0e96a1d..28eecc7 100644
--- a/usr.sbin/bhyve/virtio.h
+++ b/usr.sbin/bhyve/virtio.h
@@ -209,7 +209,7 @@ struct vring_used {
#define VIRTIO_VENDOR 0x1AF4
#define VIRTIO_DEV_NET 0x1000
#define VIRTIO_DEV_BLOCK 0x1001
-#define VIRTIO_DEV_RANDOM 0x1002
+#define VIRTIO_DEV_RANDOM 0x1005
/*
* PCI config space constants.
diff --git a/usr.sbin/bsdinstall/scripts/auto b/usr.sbin/bsdinstall/scripts/auto
index b7ce48b..fd88c84 100755
--- a/usr.sbin/bsdinstall/scripts/auto
+++ b/usr.sbin/bsdinstall/scripts/auto
@@ -387,9 +387,11 @@ finalconfig
trap error SIGINT # SIGINT is bad again
bsdinstall config || error "Failed to save config"
+if [ -n "$DISTDIR_IS_UNIONFS" ]; then
+ umount -f $BSDINSTALL_DISTDIR
+fi
+
if [ ! -z "$BSDINSTALL_FETCHDEST" ]; then
- [ "$BSDINSTALL_FETCHDEST" != "$BSDINSTALL_DISTDIR" ] && \
- umount "$BSDINSTALL_DISTDIR"
rm -rf "$BSDINSTALL_FETCHDEST"
fi
@@ -398,7 +400,6 @@ dialog --backtitle "FreeBSD Installer" --title "Manual Configuration" \
"The installation is now finished. Before exiting the installer, would you like to open a shell in the new system to make any final manual modifications?" 0 0
if [ $? -eq 0 ]; then
clear
- mount -t devfs devfs "$BSDINSTALL_CHROOT/dev"
echo This shell is operating in a chroot in the new system. \
When finished making configuration changes, type \"exit\".
chroot "$BSDINSTALL_CHROOT" /bin/sh 2>&1
diff --git a/usr.sbin/etcupdate/tests/Makefile b/usr.sbin/etcupdate/tests/Makefile
index da83397..45b12b7 100644
--- a/usr.sbin/etcupdate/tests/Makefile
+++ b/usr.sbin/etcupdate/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.sbin/etcupdate
-
PLAIN_TESTS_SH=
.for test in always_test \
conflicts_test \
diff --git a/usr.sbin/fstyp/tests/Makefile b/usr.sbin/fstyp/tests/Makefile
index db686b59..01c9869 100644
--- a/usr.sbin/fstyp/tests/Makefile
+++ b/usr.sbin/fstyp/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.sbin/fstyp
-
ATF_TESTS_SH= fstyp_test
FILES= ext2.img.bz2
diff --git a/usr.sbin/kldxref/ef.c b/usr.sbin/kldxref/ef.c
index 88fbc34..d700b2a 100644
--- a/usr.sbin/kldxref/ef.c
+++ b/usr.sbin/kldxref/ef.c
@@ -47,7 +47,7 @@
#include "ef.h"
-#define MAXSEGS 2
+#define MAXSEGS 3
struct ef_file {
char* ef_name;
struct elf_file *ef_efile;
@@ -600,7 +600,7 @@ ef_open(const char *filename, struct elf_file *efile, int verbose)
filename);
break;
} else if (nsegs > MAXSEGS) {
- warnx("%s: too many sections", filename);
+ warnx("%s: too many segments", filename);
break;
}
ef->ef_nsegs = nsegs;
diff --git a/usr.sbin/newsyslog/tests/Makefile b/usr.sbin/newsyslog/tests/Makefile
index f8ad273..802a44c 100644
--- a/usr.sbin/newsyslog/tests/Makefile
+++ b/usr.sbin/newsyslog/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.sbin/newsyslog
-
TAP_TESTS_SH= legacy_test
.include <bsd.test.mk>
diff --git a/usr.sbin/nmtree/tests/Makefile b/usr.sbin/nmtree/tests/Makefile
index 1df81d0..0b63127 100644
--- a/usr.sbin/nmtree/tests/Makefile
+++ b/usr.sbin/nmtree/tests/Makefile
@@ -1,10 +1,8 @@
# $FreeBSD$
-TESTSRC= ${.CURDIR}/../../../contrib/netbsd-tests/usr.sbin/mtree
+TESTSRC= ${SRCTOP}/contrib/netbsd-tests/usr.sbin/mtree
.PATH: ${TESTSRC}
-TESTSDIR= ${TESTSBASE}/usr.sbin/nmtree
-
ATF_TESTS_SH= nmtree_test
ATF_TESTS_SH_SRC_nmtree_test= t_mtree.sh
diff --git a/usr.sbin/pw/tests/Makefile b/usr.sbin/pw/tests/Makefile
index 07a8069..613d8b5 100644
--- a/usr.sbin/pw/tests/Makefile
+++ b/usr.sbin/pw/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.sbin/pw
-
BINDIR= ${TESTSDIR}
PROGS+= crypt
diff --git a/usr.sbin/sa/tests/Makefile b/usr.sbin/sa/tests/Makefile
index 2fdbbea..399d7d1 100644
--- a/usr.sbin/sa/tests/Makefile
+++ b/usr.sbin/sa/tests/Makefile
@@ -1,7 +1,5 @@
# $FreeBSD$
-TESTSDIR= ${TESTSBASE}/usr.sbin/sa
-
TAP_TESTS_SH= legacy_test
TEST_METADATA.legacy_test+= allowed_architectures="amd64 i386 sparc64"
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
index 4fcd6d9..24d1cea 100644
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -79,15 +79,15 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <sys/socket.h>
#include <sys/queue.h>
-#include <sys/uio.h>
-#include <sys/un.h>
-#include <sys/time.h>
#include <sys/resource.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
#include <sys/syslimits.h>
+#include <sys/time.h>
+#include <sys/uio.h>
+#include <sys/un.h>
+#include <sys/wait.h>
#include <sys/types.h>
#include <sys/mman.h>
@@ -2204,7 +2204,7 @@ markit(void)
/*
* fork off and become a daemon, but wait for the child to come online
- * before returing to the parent, or we get disk thrashing at boot etc.
+ * before returning to the parent, or we get disk thrashing at boot etc.
* Set a timer so we don't hang forever if it wedges.
*/
static int
diff --git a/usr.sbin/tests/Makefile b/usr.sbin/tests/Makefile
index a7e9c71..a0e63e5 100644
--- a/usr.sbin/tests/Makefile
+++ b/usr.sbin/tests/Makefile
@@ -2,9 +2,7 @@
.include <bsd.own.mk>
-TESTSDIR= ${TESTSBASE}/usr.sbin
-
-.PATH: ${.CURDIR:H:H}/tests
+.PATH: ${SRCTOP}/tests
KYUAFILE= yes
.include <bsd.test.mk>
diff --git a/usr.sbin/vidcontrol/vidcontrol.c b/usr.sbin/vidcontrol/vidcontrol.c
index e1981f3..5933dcd 100644
--- a/usr.sbin/vidcontrol/vidcontrol.c
+++ b/usr.sbin/vidcontrol/vidcontrol.c
@@ -393,11 +393,15 @@ load_vt4mappingtable(unsigned int nmappings, FILE *f)
if (nmappings == 0)
return (NULL);
- t = malloc(sizeof *t * nmappings);
+ if ((t = malloc(sizeof *t * nmappings)) == NULL) {
+ warn("malloc");
+ return (NULL);
+ }
if (fread(t, sizeof *t * nmappings, 1, f) != 1) {
- perror("mappings");
- exit(1);
+ warn("read mappings");
+ free(t);
+ return (NULL);
}
for (i = 0; i < nmappings; i++) {
@@ -422,7 +426,7 @@ load_default_vt4font(void)
}
}
-static int
+static void
load_vt4font(FILE *f)
{
struct vt4font_header fh;
@@ -431,13 +435,13 @@ load_vt4font(FILE *f)
unsigned int i;
if (fread(&fh, sizeof fh, 1, f) != 1) {
- perror("file_header");
- return (1);
+ warn("read file_header");
+ return;
}
if (memcmp(fh.magic, "VFNT0002", 8) != 0) {
- fprintf(stderr, "Bad magic\n");
- return (1);
+ warnx("bad magic in font file\n");
+ return;
}
for (i = 0; i < VFNT_MAPS; i++)
@@ -447,21 +451,26 @@ load_vt4font(FILE *f)
vfnt.height = fh.height;
glyphsize = howmany(vfnt.width, 8) * vfnt.height * vfnt.glyph_count;
- vfnt.glyphs = malloc(glyphsize);
+ if ((vfnt.glyphs = malloc(glyphsize)) == NULL) {
+ warn("malloc");
+ return;
+ }
if (fread(vfnt.glyphs, glyphsize, 1, f) != 1) {
- perror("glyphs");
- return (1);
+ warn("read glyphs");
+ free(vfnt.glyphs);
+ return;
}
for (i = 0; i < VFNT_MAPS; i++)
vfnt.map[i] = load_vt4mappingtable(vfnt.map_count[i], f);
- if (ioctl(STDIN_FILENO, PIO_VFONT, &vfnt) == -1) {
- perror("PIO_VFONT");
- return (1);
- }
- return (0);
+ if (ioctl(STDIN_FILENO, PIO_VFONT, &vfnt) == -1)
+ warn("PIO_VFONT");
+
+ for (i = 0; i < VFNT_MAPS; i++)
+ free(vfnt.map[i]);
+ free(vfnt.glyphs);
}
/*
@@ -511,8 +520,7 @@ load_font(const char *type, const char *filename)
}
if (vt4_mode) {
- if(load_vt4font(fd))
- warn("failed to load font \"%s\"", filename);
+ load_vt4font(fd);
fclose(fd);
return;
}
diff --git a/usr.sbin/watchdogd/watchdogd.8 b/usr.sbin/watchdogd/watchdogd.8
index 5f4b68a..cdf5778 100644
--- a/usr.sbin/watchdogd/watchdogd.8
+++ b/usr.sbin/watchdogd/watchdogd.8
@@ -80,7 +80,7 @@ reboot if there are problems with the script.
The
.Fl s Ar sleep
argument can be used to control the sleep period between each execution
-of the check and defaults to one second.
+of the check and defaults to 10 seconds.
.Pp
The
.Fl t Ar timeout
diff --git a/usr.sbin/watchdogd/watchdogd.c b/usr.sbin/watchdogd/watchdogd.c
index 3bad9ac..1271bbf 100644
--- a/usr.sbin/watchdogd/watchdogd.c
+++ b/usr.sbin/watchdogd/watchdogd.c
@@ -80,7 +80,7 @@ static u_int timeout = WD_TO_128SEC;
static u_int exit_timeout = WD_TO_NEVER;
static u_int pretimeout = 0;
static u_int timeout_sec;
-static u_int nap = 1;
+static u_int nap = 10;
static int passive = 0;
static int is_daemon = 0;
static int is_dry_run = 0; /* do not arm the watchdog, only
OpenPOWER on IntegriCloud