Imported Upstream version 3.7.2 upstream/3.7.2
authorTizenOpenSource <tizenopensrc@samsung.com>
Thu, 7 Dec 2023 04:16:07 +0000 (13:16 +0900)
committerTizenOpenSource <tizenopensrc@samsung.com>
Thu, 7 Dec 2023 04:16:07 +0000 (13:16 +0900)
381 files changed:
CMakeLists.txt
Makefile.am
Makefile.in
NEWS
README.md
aclocal.m4
build/autoconf/compile
build/autoconf/config.guess
build/autoconf/config.sub
build/autoconf/depcomp
build/autoconf/install-sh
build/autoconf/ltmain.sh [changed mode: 0644->0755]
build/autoconf/m4_ax_compile_check_sizeof.m4 [new file with mode: 0644]
build/autoconf/missing
build/autoconf/test-driver
build/cmake/FindLIBGCC.cmake [moved from build/cmake/FindLibGCC.cmake with 100% similarity]
build/cmake/FindMbedTLS.cmake
build/cmake/config.h.in
build/pkgconfig/libarchive.pc.in
build/version
cat/cmdline.c
config.h.in
configure
configure.ac
contrib/android/config/android.h
contrib/android/config/linux_host.h
contrib/android/config/windows_host.h
contrib/archivetest.c
contrib/untar.c
cpio/cpio.c
cpio/cpio_windows.c
cpio/test/test_option_J_upper.c
cpio/test/test_option_c.c
cpio/test/test_option_t.c
doc/html/archive_entry.3.html
doc/html/archive_entry_acl.3.html
doc/html/archive_entry_linkify.3.html
doc/html/archive_entry_misc.3.html
doc/html/archive_entry_paths.3.html
doc/html/archive_entry_perms.3.html
doc/html/archive_entry_stat.3.html
doc/html/archive_entry_time.3.html
doc/html/archive_read.3.html
doc/html/archive_read_add_passphrase.3.html
doc/html/archive_read_data.3.html
doc/html/archive_read_disk.3.html
doc/html/archive_read_extract.3.html
doc/html/archive_read_filter.3.html
doc/html/archive_read_format.3.html
doc/html/archive_read_free.3.html
doc/html/archive_read_header.3.html
doc/html/archive_read_new.3.html
doc/html/archive_read_open.3.html
doc/html/archive_read_set_options.3.html
doc/html/archive_util.3.html
doc/html/archive_write.3.html
doc/html/archive_write_blocksize.3.html
doc/html/archive_write_data.3.html
doc/html/archive_write_disk.3.html
doc/html/archive_write_filter.3.html
doc/html/archive_write_finish_entry.3.html
doc/html/archive_write_format.3.html
doc/html/archive_write_free.3.html
doc/html/archive_write_header.3.html
doc/html/archive_write_new.3.html
doc/html/archive_write_open.3.html
doc/html/archive_write_set_options.3.html
doc/html/archive_write_set_passphrase.3.html
doc/html/bsdcpio.1.html
doc/html/bsdtar.1.html
doc/html/cpio.5.html
doc/html/libarchive-formats.5.html
doc/html/libarchive.3.html
doc/html/libarchive_changes.3.html
doc/html/libarchive_internals.3.html
doc/html/mtree.5.html
doc/html/tar.5.html
doc/man/archive_read_disk.3
doc/man/archive_read_set_options.3
doc/man/archive_write_disk.3
doc/man/archive_write_open.3
doc/man/archive_write_set_options.3
doc/man/bsdtar.1
doc/man/cpio.5
doc/man/libarchive.3
doc/pdf/archive_entry.3.pdf
doc/pdf/archive_entry_acl.3.pdf
doc/pdf/archive_entry_linkify.3.pdf
doc/pdf/archive_entry_misc.3.pdf
doc/pdf/archive_entry_paths.3.pdf
doc/pdf/archive_entry_perms.3.pdf
doc/pdf/archive_entry_stat.3.pdf
doc/pdf/archive_entry_time.3.pdf
doc/pdf/archive_read.3.pdf
doc/pdf/archive_read_add_passphrase.3.pdf
doc/pdf/archive_read_data.3.pdf
doc/pdf/archive_read_disk.3.pdf
doc/pdf/archive_read_extract.3.pdf
doc/pdf/archive_read_filter.3.pdf
doc/pdf/archive_read_format.3.pdf
doc/pdf/archive_read_free.3.pdf
doc/pdf/archive_read_header.3.pdf
doc/pdf/archive_read_new.3.pdf
doc/pdf/archive_read_open.3.pdf
doc/pdf/archive_read_set_options.3.pdf
doc/pdf/archive_util.3.pdf
doc/pdf/archive_write.3.pdf
doc/pdf/archive_write_blocksize.3.pdf
doc/pdf/archive_write_data.3.pdf
doc/pdf/archive_write_disk.3.pdf
doc/pdf/archive_write_filter.3.pdf
doc/pdf/archive_write_finish_entry.3.pdf
doc/pdf/archive_write_format.3.pdf
doc/pdf/archive_write_free.3.pdf
doc/pdf/archive_write_header.3.pdf
doc/pdf/archive_write_new.3.pdf
doc/pdf/archive_write_open.3.pdf
doc/pdf/archive_write_set_options.3.pdf
doc/pdf/archive_write_set_passphrase.3.pdf
doc/pdf/bsdcpio.1.pdf
doc/pdf/bsdtar.1.pdf
doc/pdf/cpio.5.pdf
doc/pdf/libarchive-formats.5.pdf
doc/pdf/libarchive.3.pdf
doc/pdf/libarchive_changes.3.pdf
doc/pdf/libarchive_internals.3.pdf
doc/pdf/mtree.5.pdf
doc/pdf/tar.5.pdf
doc/text/archive_entry.3.txt
doc/text/archive_entry_acl.3.txt
doc/text/archive_entry_linkify.3.txt
doc/text/archive_entry_paths.3.txt
doc/text/archive_entry_perms.3.txt
doc/text/archive_entry_stat.3.txt
doc/text/archive_entry_time.3.txt
doc/text/archive_read.3.txt
doc/text/archive_read_data.3.txt
doc/text/archive_read_disk.3.txt
doc/text/archive_read_extract.3.txt
doc/text/archive_read_format.3.txt
doc/text/archive_read_free.3.txt
doc/text/archive_read_header.3.txt
doc/text/archive_read_new.3.txt
doc/text/archive_read_open.3.txt
doc/text/archive_read_set_options.3.txt
doc/text/archive_util.3.txt
doc/text/archive_write.3.txt
doc/text/archive_write_blocksize.3.txt
doc/text/archive_write_data.3.txt
doc/text/archive_write_disk.3.txt
doc/text/archive_write_filter.3.txt
doc/text/archive_write_format.3.txt
doc/text/archive_write_free.3.txt
doc/text/archive_write_header.3.txt
doc/text/archive_write_new.3.txt
doc/text/archive_write_open.3.txt
doc/text/archive_write_set_options.3.txt
doc/text/archive_write_set_passphrase.3.txt
doc/text/bsdcpio.1.txt
doc/text/bsdtar.1.txt
doc/text/cpio.5.txt
doc/text/libarchive-formats.5.txt
doc/text/libarchive.3.txt
doc/text/libarchive_internals.3.txt
doc/text/mtree.5.txt
doc/text/tar.5.txt
doc/wiki/ManPageArchiveReadDisk3.wiki
doc/wiki/ManPageArchiveReadSetOptions3.wiki
doc/wiki/ManPageArchiveWriteDisk3.wiki
doc/wiki/ManPageArchiveWriteOpen3.wiki
doc/wiki/ManPageArchiveWriteSetOptions3.wiki
doc/wiki/ManPageBsdtar1.wiki
doc/wiki/ManPageCpio5.wiki
doc/wiki/ManPageLibarchive3.wiki
libarchive/CMakeLists.txt
libarchive/archive.h
libarchive/archive_blake2.h
libarchive/archive_blake2_impl.h
libarchive/archive_blake2s_ref.c
libarchive/archive_blake2sp_ref.c
libarchive/archive_cryptor.c
libarchive/archive_digest.c
libarchive/archive_digest_private.h
libarchive/archive_entry.c
libarchive/archive_entry.h
libarchive/archive_getdate.c
libarchive/archive_hmac.c
libarchive/archive_hmac_private.h
libarchive/archive_openssl_evp_private.h
libarchive/archive_pack_dev.c
libarchive/archive_platform.h
libarchive/archive_private.h
libarchive/archive_random.c
libarchive/archive_read.c
libarchive/archive_read_append_filter.c
libarchive/archive_read_data_into_fd.c
libarchive/archive_read_disk.3
libarchive/archive_read_disk_entry_from_file.c
libarchive/archive_read_disk_posix.c
libarchive/archive_read_disk_windows.c
libarchive/archive_read_open_file.c
libarchive/archive_read_private.h
libarchive/archive_read_set_options.3
libarchive/archive_read_set_options.c
libarchive/archive_read_support_filter_bzip2.c
libarchive/archive_read_support_filter_compress.c
libarchive/archive_read_support_filter_grzip.c
libarchive/archive_read_support_filter_gzip.c
libarchive/archive_read_support_filter_lrzip.c
libarchive/archive_read_support_filter_lz4.c
libarchive/archive_read_support_filter_lzop.c
libarchive/archive_read_support_filter_program.c
libarchive/archive_read_support_filter_rpm.c
libarchive/archive_read_support_filter_uu.c
libarchive/archive_read_support_filter_xz.c
libarchive/archive_read_support_filter_zstd.c
libarchive/archive_read_support_format_7zip.c
libarchive/archive_read_support_format_cab.c
libarchive/archive_read_support_format_cpio.c
libarchive/archive_read_support_format_iso9660.c
libarchive/archive_read_support_format_lha.c
libarchive/archive_read_support_format_mtree.c
libarchive/archive_read_support_format_rar.c
libarchive/archive_read_support_format_rar5.c
libarchive/archive_read_support_format_tar.c
libarchive/archive_read_support_format_warc.c
libarchive/archive_read_support_format_xar.c
libarchive/archive_read_support_format_zip.c
libarchive/archive_string.c
libarchive/archive_util.c
libarchive/archive_windows.c
libarchive/archive_write.c
libarchive/archive_write_add_filter_bzip2.c
libarchive/archive_write_add_filter_compress.c
libarchive/archive_write_add_filter_lz4.c
libarchive/archive_write_add_filter_xz.c
libarchive/archive_write_add_filter_zstd.c
libarchive/archive_write_disk.3
libarchive/archive_write_disk_posix.c
libarchive/archive_write_disk_windows.c
libarchive/archive_write_open.3
libarchive/archive_write_private.h
libarchive/archive_write_set_format_7zip.c
libarchive/archive_write_set_format_cpio.c
libarchive/archive_write_set_format_cpio_binary.c
libarchive/archive_write_set_format_iso9660.c
libarchive/archive_write_set_format_pax.c
libarchive/archive_write_set_format_warc.c
libarchive/archive_write_set_format_xar.c
libarchive/archive_write_set_format_zip.c
libarchive/archive_write_set_options.3
libarchive/config_freebsd.h
libarchive/cpio.5
libarchive/filter_fork_posix.c
libarchive/filter_fork_windows.c
libarchive/libarchive.3
libarchive/test/CMakeLists.txt
libarchive/test/list.h
libarchive/test/test_acl_platform_nfs4.c
libarchive/test/test_archive_api_feature.c
libarchive/test/test_archive_match_time.c
libarchive/test/test_archive_string_conversion.c
libarchive/test/test_archive_write_add_filter_by_name.c
libarchive/test/test_compat_tar_directory.c [new file with mode: 0644]
libarchive/test/test_compat_tar_directory_1.tar.uu [new file with mode: 0644]
libarchive/test/test_fuzz.c
libarchive/test/test_read_data_large.c
libarchive/test/test_read_disk_directory_traversals.c
libarchive/test/test_read_extract.c
libarchive/test/test_read_filter_uudecode_base64_raw.uu [new file with mode: 0644]
libarchive/test/test_read_filter_uudecode_raw.c [new file with mode: 0644]
libarchive/test/test_read_filter_uudecode_raw.uu [new file with mode: 0644]
libarchive/test/test_read_format_7zip.c
libarchive/test/test_read_format_7zip_deflate_arm64.7z.uu [new file with mode: 0644]
libarchive/test/test_read_format_7zip_lzma2_arm.7z.uu [new file with mode: 0644]
libarchive/test/test_read_format_7zip_lzma2_arm64.7z.uu [new file with mode: 0644]
libarchive/test/test_read_format_7zip_packinfo_digests.c
libarchive/test/test_read_format_7zip_solid_zstd.7z.uu [new file with mode: 0644]
libarchive/test/test_read_format_7zip_win_attrib.7z.uu [new file with mode: 0644]
libarchive/test/test_read_format_7zip_zstd.7z.uu [new file with mode: 0644]
libarchive/test/test_read_format_7zip_zstd_arm.7z.uu [new file with mode: 0644]
libarchive/test/test_read_format_7zip_zstd_bcj.7z.uu [new file with mode: 0644]
libarchive/test/test_read_format_7zip_zstd_nobcj.7z.uu [new file with mode: 0644]
libarchive/test/test_read_format_mtree.c
libarchive/test/test_read_format_rar5.c
libarchive/test/test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu [new file with mode: 0644]
libarchive/test/test_read_format_rar5_decode_number_out_of_bounds_read.rar.uu [new file with mode: 0644]
libarchive/test/test_read_format_rar5_sfx.exe.uu [new file with mode: 0644]
libarchive/test/test_read_format_rar5_window_buf_and_size_desync.rar.uu [new file with mode: 0644]
libarchive/test/test_read_format_rar_filter.c [new file with mode: 0644]
libarchive/test/test_read_format_rar_filter.rar.uu [new file with mode: 0644]
libarchive/test/test_read_format_tar_invalid_pax_size.c [new file with mode: 0644]
libarchive/test/test_read_format_tar_invalid_pax_size.tar.uu [new file with mode: 0644]
libarchive/test/test_read_format_zip.c
libarchive/test/test_read_format_zip_winzip_aes.c
libarchive/test/test_read_format_zip_winzip_aes_large.c
libarchive/test/test_read_format_zip_zstd.zipx.uu [new file with mode: 0644]
libarchive/test/test_read_format_zip_zstd_multi.zipx.uu [new file with mode: 0644]
libarchive/test/test_read_large.c
libarchive/test/test_read_pax_truncated.c
libarchive/test/test_read_truncated.c
libarchive/test/test_read_truncated_filter.c
libarchive/test/test_short_writes.c
libarchive/test/test_sparse_basic.c
libarchive/test/test_tar_large.c
libarchive/test/test_write_disk_fixup.c
libarchive/test/test_write_disk_secure744.c
libarchive/test/test_write_disk_secure746.c
libarchive/test/test_write_filter_b64encode.c
libarchive/test/test_write_filter_bzip2.c
libarchive/test/test_write_filter_compress.c
libarchive/test/test_write_filter_gzip.c
libarchive/test/test_write_filter_lrzip.c
libarchive/test/test_write_filter_lz4.c
libarchive/test/test_write_filter_lzip.c
libarchive/test/test_write_filter_lzma.c
libarchive/test/test_write_filter_lzop.c
libarchive/test/test_write_filter_uuencode.c
libarchive/test/test_write_filter_xz.c
libarchive/test/test_write_filter_zstd.c
libarchive/test/test_write_format_7zip_large.c
libarchive/test/test_write_format_zip_compression_store.c
libarchive/test/test_write_format_zip_entry_size_unset.c [new file with mode: 0644]
libarchive/test/test_write_format_zip_file.c
libarchive/test/test_write_format_zip_file_zip64.c
libarchive/test/test_write_format_zip_large.c
libarchive/xxhash.c
libarchive_fe/passphrase.c
tar/bsdtar.1
tar/bsdtar.c
tar/bsdtar.h
tar/cmdline.c
tar/creation_set.c
tar/read.c
tar/subst.c
tar/test/CMakeLists.txt
tar/test/list.h
tar/test/test_copy.c
tar/test/test_option_b.c
tar/test/test_option_ignore_zeros.c [new file with mode: 0644]
tar/test/test_option_lzma.c
tar/util.c
tar/write.c
test_utils/test_common.h
test_utils/test_main.c
test_utils/test_utils.c
test_utils/test_utils.h
unzip/CMakeLists.txt [new file with mode: 0644]
unzip/bsdunzip.1 [new file with mode: 0644]
unzip/bsdunzip.c [new file with mode: 0644]
unzip/bsdunzip.h [new file with mode: 0644]
unzip/bsdunzip_platform.h [new file with mode: 0644]
unzip/cmdline.c [new file with mode: 0644]
unzip/la_getline.c [new file with mode: 0644]
unzip/la_queue.h [new file with mode: 0644]
unzip/test/CMakeLists.txt [new file with mode: 0644]
unzip/test/list.h [new file with mode: 0644]
unzip/test/test.h [new file with mode: 0644]
unzip/test/test_0.c [new file with mode: 0644]
unzip/test/test_C.c [new file with mode: 0644]
unzip/test/test_L.c [new file with mode: 0644]
unzip/test/test_P_encryption.c [new file with mode: 0644]
unzip/test/test_Z1.c [new file with mode: 0644]
unzip/test/test_basic.c [new file with mode: 0644]
unzip/test/test_basic.zip.uu [new file with mode: 0644]
unzip/test/test_d.c [new file with mode: 0644]
unzip/test/test_encrypted.zip.uu [new file with mode: 0644]
unzip/test/test_glob.c [new file with mode: 0644]
unzip/test/test_j.c [new file with mode: 0644]
unzip/test/test_n.c [new file with mode: 0644]
unzip/test/test_not_exist.c [new file with mode: 0644]
unzip/test/test_o.c [new file with mode: 0644]
unzip/test/test_p.c [new file with mode: 0644]
unzip/test/test_q.c [new file with mode: 0644]
unzip/test/test_singlefile.c [new file with mode: 0644]
unzip/test/test_singlefile.zip.uu [new file with mode: 0644]
unzip/test/test_t.c [new file with mode: 0644]
unzip/test/test_t_bad.c [new file with mode: 0644]
unzip/test/test_t_bad.zip.uu [new file with mode: 0644]
unzip/test/test_version.c [new file with mode: 0644]
unzip/test/test_x.c [new file with mode: 0644]

index 6b00410..ff1b025 100644 (file)
@@ -1,5 +1,8 @@
 #
 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12 FATAL_ERROR)
+if(POLICY CMP0065)
+  cmake_policy(SET CMP0065 NEW) #3.4 don't use `-rdynamic` with executables
+endif()
 if(POLICY CMP0074)
   cmake_policy(SET CMP0074 NEW) #3.12.0 `find_package()`` uses ``<PackageName>_ROOT`` variables.
 endif()
@@ -62,6 +65,7 @@ SET(VERSION                    "${_major}.${_trimmed_minor}.${_trimmed_revision}
 SET(BSDCPIO_VERSION_STRING     "${VERSION}")
 SET(BSDTAR_VERSION_STRING      "${VERSION}")
 SET(BSDCAT_VERSION_STRING      "${VERSION}")
+SET(BSDUNZIP_VERSION_STRING    "${VERSION}")
 SET(LIBARCHIVE_VERSION_NUMBER  "${_version_number}")
 SET(LIBARCHIVE_VERSION_STRING  "${VERSION}")
 
@@ -96,24 +100,8 @@ endif ()
 # Especially for early development, we want to be a little
 # aggressive about diagnosing build problems; this can get
 # relaxed somewhat in final shipping versions.
-IF (CMAKE_C_COMPILER_ID MATCHES "^GNU$")
-  SET(CMAKE_REQUIRED_FLAGS "-Wall -Wformat -Wformat-security")
-  #################################################################
-  # Set compile flags for all build types.
-  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wformat -Wformat-security")
-  if (ENABLE_WERROR)
-    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
-  endif ()
-  #################################################################
-  # Set compile flags for debug build.
-  # This is added into CMAKE_C_FLAGS when CMAKE_BUILD_TYPE is "Debug"
-  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wextra")
-  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wunused")
-  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wshadow")
-  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wmissing-prototypes")
-  SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wcast-qual")
-ENDIF (CMAKE_C_COMPILER_ID MATCHES "^GNU$")
-IF (CMAKE_C_COMPILER_ID MATCHES "^Clang$")
+IF (CMAKE_C_COMPILER_ID MATCHES "^GNU$" OR
+    CMAKE_C_COMPILER_ID MATCHES "^Clang$")
   SET(CMAKE_REQUIRED_FLAGS "-Wall -Wformat -Wformat-security")
   #################################################################
   # Set compile flags for all build types.
@@ -130,7 +118,26 @@ IF (CMAKE_C_COMPILER_ID MATCHES "^Clang$")
   SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wshadow")
   SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wmissing-prototypes")
   SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wcast-qual")
-ENDIF (CMAKE_C_COMPILER_ID MATCHES "^Clang$")
+  # Ideally this will be a compile/link time check, yet there's no obvious way
+  # how considering how old our minimum required cmake version is. The official
+  # cmake.org side does not host the manual pages even. Normally we can use
+  # either of the following two, yet neither is supported as of 3.0.2
+  # - check_linker_flag - does not exist
+  # - try_compile - does not support linker flags
+  #
+  # The CI fails with this on MacOS
+  IF(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
+    # Place the functions and data into separate sections, allowing the linker
+    # to garbage collect the unused ones.
+    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
+    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections")
+    SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections")
+    # Printing the discarded section is "too much", so enable on demand.
+    #SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -Wl,--print-gc-sections")
+    #SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} -Wl,--print-gc-sections")
+  ENDIF(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ENDIF (CMAKE_C_COMPILER_ID MATCHES "^GNU$" OR
+       CMAKE_C_COMPILER_ID MATCHES "^Clang$")
 IF (CMAKE_C_COMPILER_ID MATCHES "^XL$")
   SET(CMAKE_C_COMPILER "xlc_r")
   SET(CMAKE_REQUIRED_FLAGS "-qflag=e:e -qformat=sec")
@@ -193,6 +200,8 @@ ENDIF (MSVC)
 # Enable CTest/CDash support
 include(CTest)
 
+option(BUILD_SHARED_LIBS "Build shared libraries" ON)
+
 OPTION(ENABLE_MBEDTLS "Enable use of mbed TLS" OFF)
 OPTION(ENABLE_NETTLE "Enable use of Nettle" OFF)
 OPTION(ENABLE_OPENSSL "Enable use of OpenSSL" ON)
@@ -207,7 +216,7 @@ OPTION(ENABLE_BZip2 "Enable the use of the system BZip2 library if found" ON)
 OPTION(ENABLE_LIBXML2 "Enable the use of the system libxml2 library if found" ON)
 OPTION(ENABLE_EXPAT "Enable the use of the system EXPAT library if found" ON)
 OPTION(ENABLE_PCREPOSIX "Enable the use of the system PCREPOSIX library if found" ON)
-OPTION(ENABLE_LibGCC "Enable the use of the system LibGCC library if found" ON)
+OPTION(ENABLE_LIBGCC "Enable the use of the system LibGCC library if found" ON)
 # CNG is used for encrypt/decrypt Zip archives on Windows.
 OPTION(ENABLE_CNG "Enable the use of CNG(Crypto Next Generation)" ON)
 
@@ -217,6 +226,13 @@ OPTION(ENABLE_CPIO "Enable cpio building" ON)
 OPTION(ENABLE_CPIO_SHARED "Enable dynamic build of cpio" FALSE)
 OPTION(ENABLE_CAT "Enable cat building" ON)
 OPTION(ENABLE_CAT_SHARED "Enable dynamic build of cat" FALSE)
+IF(WIN32 AND NOT CYGWIN)
+       SET(ENABLE_UNZIP FALSE)
+       SET(ENABLE_UNZIP_SHARED FALSE)
+ELSE()
+       OPTION(ENABLE_UNZIP "Enable unzip building" ON)
+       OPTION(ENABLE_UNZIP_SHARED "Enable dynamic build of unzip" FALSE)
+ENDIF()
 OPTION(ENABLE_XATTR "Enable extended attribute support" ON)
 OPTION(ENABLE_ACL "Enable ACL support" ON)
 OPTION(ENABLE_ICONV "Enable iconv support" ON)
@@ -226,7 +242,7 @@ OPTION(ENABLE_INSTALL "Enable installing of libraries" ON)
 
 SET(POSIX_REGEX_LIB "AUTO" CACHE STRING "Choose what library should provide POSIX regular expression support")
 SET(ENABLE_SAFESEH "AUTO" CACHE STRING "Enable use of /SAFESEH linker flag (MSVC only)")
-SET(WINDOWS_VERSION "WIN7" CACHE STRING "Set Windows version to use (Windows only)")
+SET(WINDOWS_VERSION "WIN10" CACHE STRING "Set Windows version to use (Windows only)")
 
 IF(ENABLE_COVERAGE)
        include(LibarchiveCodeCoverage)
@@ -237,7 +253,11 @@ IF(ENABLE_TEST)
 ENDIF(ENABLE_TEST)
 
 IF(WIN32)
-  IF(WINDOWS_VERSION STREQUAL "WIN8")
+  IF(WINDOWS_VERSION STREQUAL "WIN10")
+    SET(NTDDI_VERSION 0x0A000000)
+    SET(_WIN32_WINNT 0x0A00)
+    SET(WINVER 0x0A00)
+  ELSEIF(WINDOWS_VERSION STREQUAL "WIN8")
     SET(NTDDI_VERSION 0x06020000)
     SET(_WIN32_WINNT 0x0602)
     SET(WINVER 0x0602)
@@ -261,12 +281,12 @@ IF(WIN32)
     SET(NTDDI_VERSION 0x05010000)
     SET(_WIN32_WINNT 0x0501)
     SET(WINVER 0x0501)
-  ELSE(WINDOWS_VERSION STREQUAL "WIN8")
+  ELSE(WINDOWS_VERSION STREQUAL "WIN10")
     # Default to Windows Server 2003 API if we don't recognize the specifier
     SET(NTDDI_VERSION 0x05020000)
     SET(_WIN32_WINNT 0x0502)
     SET(WINVER 0x0502)
-  ENDIF(WINDOWS_VERSION STREQUAL "WIN8")
+  ENDIF(WINDOWS_VERSION STREQUAL "WIN10")
 ENDIF(WIN32)
 
 IF(MSVC)
@@ -289,6 +309,7 @@ ENDIF()
 
 IF(MINGW)
   ADD_DEFINITIONS(-D__USE_MINGW_ANSI_STDIO)
+  ADD_DEFINITIONS(-D__MINGW_USE_VC2005_COMPAT)
 ENDIF()
 
 #
@@ -359,7 +380,11 @@ MACRO (TRY_MACRO_FOR_LIBRARY INCLUDES LIBRARIES
       IF("${TRY_TYPE}" MATCHES "COMPILES")
         CHECK_C_SOURCE_COMPILES("${SAMPLE_SOURCE}" ${VAR})
       ELSEIF("${TRY_TYPE}" MATCHES "RUNS")
-        CHECK_C_SOURCE_RUNS("${SAMPLE_SOURCE}" ${VAR})
+        IF(CMAKE_CROSSCOMPILING)
+          MESSAGE(WARNING "Cannot test run \"${VAR}\" when cross-compiling")
+        ELSE(CMAKE_CROSSCOMPILING)
+          CHECK_C_SOURCE_RUNS("${SAMPLE_SOURCE}" ${VAR})
+        ENDIF(CMAKE_CROSSCOMPILING)
       ELSE("${TRY_TYPE}" MATCHES "COMPILES")
         MESSAGE(FATAL_ERROR "UNKNOWN KEYWORD \"${TRY_TYPE}\" FOR TRY_TYPE")
       ENDIF("${TRY_TYPE}" MATCHES "COMPILES")
@@ -497,12 +522,16 @@ IF(LIBLZMA_FOUND)
     COMPILES
     "#include <lzma.h>\nint main() {return (int)lzma_version_number(); }"
     "WITHOUT_LZMA_API_STATIC;LZMA_API_STATIC")
+  CHECK_C_SOURCE_COMPILES(
+    "#include <lzma.h>\n#if LZMA_VERSION < 50020000\n#error unsupported\n#endif\nint main(void){lzma_stream_encoder_mt(0, 0); return 0;}"
+    HAVE_LZMA_STREAM_ENCODER_MT)
   IF(NOT WITHOUT_LZMA_API_STATIC AND LZMA_API_STATIC)
     ADD_DEFINITIONS(-DLZMA_API_STATIC)
   ENDIF(NOT WITHOUT_LZMA_API_STATIC AND LZMA_API_STATIC)
   CMAKE_POP_CHECK_STATE()
 ELSE(LIBLZMA_FOUND)
 # LZMA not found and will not be used.
+  SET(HAVE_LZMA_STREAM_ENCODER_MT 0)
 ENDIF(LIBLZMA_FOUND)
 MARK_AS_ADVANCED(CLEAR LIBLZMA_INCLUDE_DIR)
 MARK_AS_ADVANCED(CLEAR LIBLZMA_LIBRARY)
@@ -556,6 +585,7 @@ IF(LIBB2_FOUND)
   SET(HAVE_BLAKE2_H 1)
   SET(ARCHIVE_BLAKE2 FALSE)
   LIST(APPEND ADDITIONAL_LIBS ${LIBB2_LIBRARY})
+  INCLUDE_DIRECTORIES(${LIBB2_INCLUDE_DIR})
   CMAKE_PUSH_CHECK_STATE()
   SET(CMAKE_REQUIRED_LIBRARIES ${LIBB2_LIBRARY})
   SET(CMAKE_REQUIRED_INCLUDES ${LIBB2_INCLUDE_DIR})
@@ -604,8 +634,13 @@ IF(ENABLE_ZSTD)
     SET(ZSTD_FIND_QUIETLY TRUE)
   ENDIF (ZSTD_INCLUDE_DIR)
 
-  FIND_PATH(ZSTD_INCLUDE_DIR zstd.h)
-  FIND_LIBRARY(ZSTD_LIBRARY NAMES zstd libzstd)
+  IF(UNIX)
+    FIND_PACKAGE(PkgConfig QUIET)
+    PKG_SEARCH_MODULE(PC_ZSTD libzstd)
+  ENDIF()
+
+  FIND_PATH(ZSTD_INCLUDE_DIR zstd.h HINTS ${PC_ZSTD_INCLUDEDIR} ${PC_ZSTD_INCLUDE_DIRS})
+  FIND_LIBRARY(ZSTD_LIBRARY NAMES zstd libzstd HINTS ${PC_ZSTD_LIBDIR} ${PC_ZSTD_LIBRARY_DIRS})
   INCLUDE(FindPackageHandleStandardArgs)
   FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZSTD DEFAULT_MSG ZSTD_LIBRARY ZSTD_INCLUDE_DIR)
 ELSE(ENABLE_ZSTD)
@@ -618,7 +653,8 @@ IF(ZSTD_FOUND)
   CMAKE_PUSH_CHECK_STATE()
   SET(CMAKE_REQUIRED_LIBRARIES ${ZSTD_LIBRARY})
   SET(CMAKE_REQUIRED_INCLUDES ${ZSTD_INCLUDE_DIR})
-  CHECK_FUNCTION_EXISTS(ZSTD_compressStream HAVE_LIBZSTD)
+  CHECK_FUNCTION_EXISTS(ZSTD_decompressStream HAVE_LIBZSTD)
+  CHECK_FUNCTION_EXISTS(ZSTD_compressStream HAVE_LIBZSTD_COMPRESSOR)
   #
   # TODO: test for static library.
   #
@@ -659,6 +695,7 @@ CHECK_C_SOURCE_COMPILES("#include <sys/ioctl.h>
 int main(void) { return EXT2_IOC_GETFLAGS; }" HAVE_WORKING_EXT2_IOC_GETFLAGS)
 
 LA_CHECK_INCLUDE_FILE("fcntl.h" HAVE_FCNTL_H)
+LA_CHECK_INCLUDE_FILE("fnmatch.h" HAVE_FNMATCH_H)
 LA_CHECK_INCLUDE_FILE("grp.h" HAVE_GRP_H)
 LA_CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H)
 LA_CHECK_INCLUDE_FILE("io.h" HAVE_IO_H)
@@ -698,6 +735,7 @@ LA_CHECK_INCLUDE_FILE("sys/mkdev.h" HAVE_SYS_MKDEV_H)
 LA_CHECK_INCLUDE_FILE("sys/mount.h" HAVE_SYS_MOUNT_H)
 LA_CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
 LA_CHECK_INCLUDE_FILE("sys/poll.h" HAVE_SYS_POLL_H)
+LA_CHECK_INCLUDE_FILE("sys/queue.h" HAVE_SYS_QUEUE_H)
 LA_CHECK_INCLUDE_FILE("sys/richacl.h" HAVE_SYS_RICHACL_H)
 LA_CHECK_INCLUDE_FILE("sys/select.h" HAVE_SYS_SELECT_H)
 LA_CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H)
@@ -717,9 +755,9 @@ LA_CHECK_INCLUDE_FILE("wchar.h" HAVE_WCHAR_H)
 LA_CHECK_INCLUDE_FILE("wctype.h" HAVE_WCTYPE_H)
 LA_CHECK_INCLUDE_FILE("windows.h" HAVE_WINDOWS_H)
 IF(ENABLE_CNG)
-  LA_CHECK_INCLUDE_FILE("Bcrypt.h" HAVE_BCRYPT_H)
+  LA_CHECK_INCLUDE_FILE("bcrypt.h" HAVE_BCRYPT_H)
   IF(HAVE_BCRYPT_H)
-    LIST(APPEND ADDITIONAL_LIBS "Bcrypt")
+    LIST(APPEND ADDITIONAL_LIBS "bcrypt")
   ENDIF(HAVE_BCRYPT_H)
 ELSE(ENABLE_CNG)
   UNSET(HAVE_BCRYPT_H CACHE)
@@ -796,6 +834,10 @@ IF(ENABLE_OPENSSL AND NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
     SET(HAVE_LIBCRYPTO 1)
     INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
     LIST(APPEND ADDITIONAL_LIBS ${OPENSSL_CRYPTO_LIBRARY})
+    SET(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
+    SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
+    LA_CHECK_INCLUDE_FILE("openssl/evp.h" HAVE_OPENSSL_EVP_H)
+    CHECK_FUNCTION_EXISTS(PKCS5_PBKDF2_HMAC_SHA1 HAVE_PKCS5_PBKDF2_HMAC_SHA1)
   ENDIF(OPENSSL_FOUND)
 ELSE()
   SET(OPENSSL_FOUND FALSE) # Override cached value
@@ -1248,9 +1290,10 @@ IF(NOT FOUND_POSIX_REGEX_LIB AND POSIX_REGEX_LIB MATCHES "^(AUTO|LIBPCREPOSIX)$"
   #
   # If requested, try finding library for PCREPOSIX
   #
-  IF(ENABLE_LibGCC)
-    FIND_PACKAGE(LibGCC)
+  IF(ENABLE_LIBGCC)
+    FIND_PACKAGE(LIBGCC)
   ELSE()
+    MESSAGE(FATAL_ERROR "libgcc not found.")
     SET(LIBGCC_FOUND FALSE) # Override cached value
   ENDIF()
   IF(ENABLE_PCREPOSIX)
@@ -1331,6 +1374,7 @@ CHECK_FUNCTION_EXISTS_GLIBC(fchmod HAVE_FCHMOD)
 CHECK_FUNCTION_EXISTS_GLIBC(fchown HAVE_FCHOWN)
 CHECK_FUNCTION_EXISTS_GLIBC(fcntl HAVE_FCNTL)
 CHECK_FUNCTION_EXISTS_GLIBC(fdopendir HAVE_FDOPENDIR)
+CHECK_FUNCTION_EXISTS_GLIBC(fnmatch HAVE_FNMATCH)
 CHECK_FUNCTION_EXISTS_GLIBC(fork HAVE_FORK)
 CHECK_FUNCTION_EXISTS_GLIBC(fstat HAVE_FSTAT)
 CHECK_FUNCTION_EXISTS_GLIBC(fstatat HAVE_FSTATAT)
@@ -1343,6 +1387,7 @@ CHECK_FUNCTION_EXISTS_GLIBC(futimesat HAVE_FUTIMESAT)
 CHECK_FUNCTION_EXISTS_GLIBC(geteuid HAVE_GETEUID)
 CHECK_FUNCTION_EXISTS_GLIBC(getgrgid_r HAVE_GETGRGID_R)
 CHECK_FUNCTION_EXISTS_GLIBC(getgrnam_r HAVE_GETGRNAM_R)
+CHECK_FUNCTION_EXISTS_GLIBC(getline HAVE_GETLINE)
 CHECK_FUNCTION_EXISTS_GLIBC(getpwnam_r HAVE_GETPWNAM_R)
 CHECK_FUNCTION_EXISTS_GLIBC(getpwuid_r HAVE_GETPWUID_R)
 CHECK_FUNCTION_EXISTS_GLIBC(getpid HAVE_GETPID)
@@ -1395,12 +1440,12 @@ CHECK_FUNCTION_EXISTS_GLIBC(wcscmp HAVE_WCSCMP)
 CHECK_FUNCTION_EXISTS_GLIBC(wcscpy HAVE_WCSCPY)
 CHECK_FUNCTION_EXISTS_GLIBC(wcslen HAVE_WCSLEN)
 CHECK_FUNCTION_EXISTS_GLIBC(wctomb HAVE_WCTOMB)
-CHECK_FUNCTION_EXISTS_GLIBC(_ctime64_s HAVE__CTIME64_S)
 CHECK_FUNCTION_EXISTS_GLIBC(_fseeki64 HAVE__FSEEKI64)
 CHECK_FUNCTION_EXISTS_GLIBC(_get_timezone HAVE__GET_TIMEZONE)
-CHECK_FUNCTION_EXISTS_GLIBC(_gmtime64_s HAVE__GMTIME64_S)
-CHECK_FUNCTION_EXISTS_GLIBC(_localtime64_s HAVE__LOCALTIME64_S)
-CHECK_FUNCTION_EXISTS_GLIBC(_mkgmtime64 HAVE__MKGMTIME64)
+CHECK_SYMBOL_EXISTS(ctime_s "time.h" HAVE_CTIME_S)
+CHECK_SYMBOL_EXISTS(gmtime_s "time.h" HAVE_GMTIME_S)
+CHECK_SYMBOL_EXISTS(localtime_s "time.h" HAVE_LOCALTIME_S)
+CHECK_SYMBOL_EXISTS(_mkgmtime "time.h" HAVE__MKGMTIME)
 
 SET(CMAKE_REQUIRED_LIBRARIES "")
 CHECK_FUNCTION_EXISTS(cygwin_conv_path HAVE_CYGWIN_CONV_PATH)
@@ -1443,7 +1488,6 @@ CHECK_C_SOURCE_COMPILES(
   "#include <fcntl.h>\n#include <unistd.h>\nint main() {char buf[10]; return readlinkat(AT_FDCWD, \"\", buf, 0);}"
   HAVE_READLINKAT)
 
-
 # To verify major(), we need to both include the header
 # of interest and verify that the result can be linked.
 # CHECK_FUNCTION_EXISTS doesn't accept a header argument,
@@ -1455,14 +1499,6 @@ CHECK_C_SOURCE_COMPILES(
   "#include <sys/sysmacros.h>\nint main() { return major(256); }"
   MAJOR_IN_SYSMACROS)
 
-IF(ENABLE_LZMA)
-CHECK_C_SOURCE_COMPILES(
-  "#include <lzma.h>\n#if LZMA_VERSION < 50020000\n#error unsupported\n#endif\nint main(void){lzma_stream_encoder_mt(0, 0); return 0;}"
-  HAVE_LZMA_STREAM_ENCODER_MT)
-ELSE()
-  SET(HAVE_LZMA_STREAM_ENCODER_MT 0)
-ENDIF(ENABLE_LZMA)
-
 IF(HAVE_STRERROR_R)
   SET(HAVE_DECL_STRERROR_R 1)
 ENDIF(HAVE_STRERROR_R)
@@ -1542,21 +1578,21 @@ ENDIF()
 #
 #
 CHECK_STRUCT_HAS_MEMBER("struct tm" tm_sec
-    "sys/types.h;sys/time.h;time.h" TIME_WITH_SYS_TIME)
+    "sys/types.h;sys/time.h;time.h" HAVE_SYS_TIME_H)
 
 #
 # Check for integer types
 #
 #
-CHECK_TYPE_SIZE("short" SIZE_OF_SHORT)
-CHECK_TYPE_SIZE("int" SIZE_OF_INT)
-CHECK_TYPE_SIZE("long" SIZE_OF_LONG)
-CHECK_TYPE_SIZE("long long"     SIZE_OF_LONG_LONG)
+CHECK_TYPE_SIZE("short" SIZEOF_SHORT)
+CHECK_TYPE_SIZE("int" SIZEOF_INT)
+CHECK_TYPE_SIZE("long" SIZEOF_LONG)
+CHECK_TYPE_SIZE("long long"     SIZEOF_LONG_LONG)
 
-CHECK_TYPE_SIZE("unsigned short" SIZE_OF_UNSIGNED_SHORT)
-CHECK_TYPE_SIZE("unsigned" SIZE_OF_UNSIGNED)
-CHECK_TYPE_SIZE("unsigned long" SIZE_OF_UNSIGNED_LONG)
-CHECK_TYPE_SIZE("unsigned long long" SIZE_OF_UNSIGNED_LONG_LONG)
+CHECK_TYPE_SIZE("unsigned short" SIZEOF_UNSIGNED_SHORT)
+CHECK_TYPE_SIZE("unsigned" SIZEOF_UNSIGNED)
+CHECK_TYPE_SIZE("unsigned long" SIZEOF_UNSIGNED_LONG)
+CHECK_TYPE_SIZE("unsigned long long" SIZEOF_UNSIGNED_LONG_LONG)
 
 CHECK_TYPE_SIZE("__int64" __INT64)
 CHECK_TYPE_SIZE("unsigned __int64" UNSIGNED___INT64)
@@ -2017,6 +2053,17 @@ CHECK_CRYPTO("MD5;RMD160;SHA1;SHA256;SHA512" LIBMD)
 
 CHECK_CRYPTO_WIN("MD5;SHA1;SHA256;SHA384;SHA512")
 
+# Check visibility annotations
+SET(OLD_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fvisibility=hidden -Werror")
+CHECK_C_SOURCE_COMPILES("void __attribute__((visibility(\"default\"))) foo(void);
+int main() { return 0; }" HAVE_VISIBILITY_ATTR)
+IF (HAVE_VISIBILITY_ATTR)
+  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
+  ADD_DEFINITIONS(-D__LIBARCHIVE_ENABLE_VISIBILITY)
+ENDIF(HAVE_VISIBILITY_ATTR)
+SET(CMAKE_REQUIRED_FLAGS "${OLD_CMAKE_REQUIRED_FLAGS}")
+
 # Generate "config.h" from "build/cmake/config.h.in"
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/build/cmake/config.h.in
        ${CMAKE_CURRENT_BINARY_DIR}/config.h)
@@ -2064,3 +2111,4 @@ add_subdirectory(libarchive)
 add_subdirectory(cat)
 add_subdirectory(tar)
 add_subdirectory(cpio)
+add_subdirectory(unzip)
index c93a82e..42424a2 100644 (file)
@@ -8,17 +8,17 @@ ACLOCAL_AMFLAGS = -I build/autoconf
 #
 lib_LTLIBRARIES=       libarchive.la
 noinst_LTLIBRARIES=    libarchive_fe.la
-bin_PROGRAMS=  $(bsdtar_programs) $(bsdcpio_programs) $(bsdcat_programs)
-man_MANS= $(libarchive_man_MANS) $(bsdtar_man_MANS) $(bsdcpio_man_MANS) $(bsdcat_man_MANS)
-BUILT_SOURCES= libarchive/test/list.h tar/test/list.h cpio/test/list.h cat/test/list.h
+bin_PROGRAMS=  $(bsdtar_programs) $(bsdcpio_programs) $(bsdcat_programs) $(bsdunzip_programs)
+man_MANS= $(libarchive_man_MANS) $(bsdtar_man_MANS) $(bsdcpio_man_MANS) $(bsdcat_man_MANS) $(bsdunzip_man_MANS)
+BUILT_SOURCES= libarchive/test/list.h tar/test/list.h cpio/test/list.h cat/test/list.h unzip/test/list.h
 
 #
 # What to test: We always test libarchive, test bsdtar and bsdcpio only
 # if we built them.
 #
-check_PROGRAMS= libarchive_test $(bsdtar_test_programs) $(bsdcpio_test_programs) $(bsdcat_test_programs)
-TESTS= libarchive_test $(bsdtar_test_programs) $(bsdcpio_test_programs) $(bsdcat_test_programs)
-TESTS_ENVIRONMENT= $(libarchive_TESTS_ENVIRONMENT) $(bsdtar_TESTS_ENVIRONMENT) $(bsdcpio_TESTS_ENVIRONMENT) $(bsdcat_TESTS_ENVIRONMENT)
+check_PROGRAMS= libarchive_test $(bsdtar_test_programs) $(bsdcpio_test_programs) $(bsdcat_test_programs) $(bsdunzip_test_programs)
+TESTS= libarchive_test $(bsdtar_test_programs) $(bsdcpio_test_programs) $(bsdcat_test_programs) $(bsdunzip_test_programs)
+TESTS_ENVIRONMENT= $(libarchive_TESTS_ENVIRONMENT) $(bsdtar_TESTS_ENVIRONMENT) $(bsdcpio_TESTS_ENVIRONMENT) $(bsdcat_TESTS_ENVIRONMENT) $(bsdunzip_TESTS_ENVIRONMENT)
 # Always build and test both bsdtar and bsdcpio as part of 'distcheck'
 DISTCHECK_CONFIGURE_FLAGS = --enable-bsdtar --enable-bsdcpio
 # The next line is commented out by default in shipping libarchive releases.
@@ -49,7 +49,9 @@ EXTRA_DIST= \
        $(bsdcpio_EXTRA_DIST) \
        $(bsdcpio_test_EXTRA_DIST) \
        $(bsdcat_EXTRA_DIST) \
-       $(bsdcat_test_EXTRA_DIST)
+       $(bsdcat_test_EXTRA_DIST) \
+       $(bsdunzip_EXTRA_DIST) \
+       $(bsdunzip_test_EXTRA_DIST)
 
 # a) Clean out some unneeded files and directories
 # b) Collect all documentation and format it for distribution.
@@ -69,7 +71,8 @@ DISTCLEANFILES= \
        libarchive/test/list.h \
        tar/test/list.h \
        cpio/test/list.h \
-       cat/test/list.h
+       cat/test/list.h \
+       unzip/test/list.h
 
 distclean-local:
        -rm -rf .ref
@@ -82,7 +85,9 @@ distclean-local:
        -[ -f cpio/Makefile ] && cd cpio && make clean
        -[ -f cpio/test/Makefile ] && cd cpio/test && make clean
        -[ -f cat/Makefile ] && cd cat && make clean
-       -[ -f cpio/test/Makefile ] && cd cat/test && make clean
+       -[ -f cat/test/Makefile ] && cd cat/test && make clean
+       -[ -f unzip/Makefile ] && cd unzip && make clean
+       -[ -f unzip/test/Makefile ] && cd unzip/test && make clean
 
 #
 # Libarchive headers, source, etc.
@@ -284,7 +289,7 @@ endif
 
 # -no-undefined marks that libarchive doesn't rely on symbols
 # defined in the application.  This is mandatory for cygwin.
-libarchive_la_LDFLAGS= -no-undefined -version-info $(ARCHIVE_LIBTOOL_VERSION)
+libarchive_la_LDFLAGS= -no-undefined -version-info $(ARCHIVE_LIBTOOL_VERSION) $(GC_SECTIONS)
 libarchive_la_LIBADD= $(LTLIBICONV)
 
 # Manpages to install
@@ -414,6 +419,7 @@ libarchive_test_SOURCES= \
        libarchive/test/test_compat_solaris_tar_acl.c \
        libarchive/test/test_compat_solaris_pax_sparse.c \
        libarchive/test/test_compat_star_acl.c \
+       libarchive/test/test_compat_tar_directory.c \
        libarchive/test/test_compat_tar_hardlink.c \
        libarchive/test/test_compat_uudecode.c \
        libarchive/test/test_compat_uudecode_large.c \
@@ -448,6 +454,7 @@ libarchive_test_SOURCES= \
        libarchive/test/test_read_filter_program.c \
        libarchive/test/test_read_filter_program_signature.c \
        libarchive/test/test_read_filter_uudecode.c \
+       libarchive/test/test_read_filter_uudecode_raw.c \
        libarchive/test/test_read_format_7zip.c \
        libarchive/test/test_read_format_7zip_encryption_data.c \
        libarchive/test/test_read_format_7zip_encryption_partially.c \
@@ -502,6 +509,7 @@ libarchive_test_SOURCES= \
        libarchive/test/test_read_format_rar_encryption_data.c \
        libarchive/test/test_read_format_rar_encryption_partially.c \
        libarchive/test/test_read_format_rar_encryption_header.c \
+       libarchive/test/test_read_format_rar_filter.c \
        libarchive/test/test_read_format_rar_invalid1.c \
        libarchive/test/test_read_format_rar5.c \
        libarchive/test/test_read_format_raw.c \
@@ -511,6 +519,7 @@ libarchive_test_SOURCES= \
        libarchive/test/test_read_format_tar_empty_filename.c \
        libarchive/test/test_read_format_tar_empty_with_gnulabel.c \
        libarchive/test/test_read_format_tar_filename.c \
+       libarchive/test/test_read_format_tar_invalid_pax_size.c \
        libarchive/test/test_read_format_tbz.c \
        libarchive/test/test_read_format_tgz.c \
        libarchive/test/test_read_format_tlz.c \
@@ -625,6 +634,7 @@ libarchive_test_SOURCES= \
        libarchive/test/test_write_format_xar_empty.c \
        libarchive/test/test_write_format_zip.c \
        libarchive/test/test_write_format_zip_compression_store.c \
+       libarchive/test/test_write_format_zip_entry_size_unset.c \
        libarchive/test/test_write_format_zip_empty.c \
        libarchive/test/test_write_format_zip_empty_zip64.c \
        libarchive/test/test_write_format_zip_file.c \
@@ -695,6 +705,7 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_compat_solaris_tar_acl.tar.uu \
        libarchive/test/test_compat_star_acl_nfs4.tar.uu \
        libarchive/test/test_compat_star_acl_posix1e.tar.uu \
+       libarchive/test/test_compat_tar_directory_1.tar.uu \
        libarchive/test/test_compat_tar_hardlink_1.tar.uu \
        libarchive/test/test_compat_uudecode_large.tar.Z.uu \
        libarchive/test/test_compat_xz_1.txz.uu \
@@ -738,6 +749,8 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_filter_lrzip.tar.lrz.uu \
        libarchive/test/test_read_filter_lzop.tar.lzo.uu \
        libarchive/test/test_read_filter_lzop_multiple_parts.tar.lzo.uu \
+       libarchive/test/test_read_filter_uudecode_raw.uu \
+       libarchive/test/test_read_filter_uudecode_base64_raw.uu \
        libarchive/test/test_read_format_mtree_crash747.mtree.bz2.uu \
        libarchive/test/test_read_format_mtree_noprint.mtree.uu \
        libarchive/test/test_read_format_7zip_bcj2_bzip2.7z.uu \
@@ -758,6 +771,7 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_7zip_copy.7z.uu \
        libarchive/test/test_read_format_7zip_copy_2.7z.uu \
        libarchive/test/test_read_format_7zip_deflate.7z.uu \
+       libarchive/test/test_read_format_7zip_deflate_arm64.7z.uu \
        libarchive/test/test_read_format_7zip_delta_lzma1.7z.uu \
        libarchive/test/test_read_format_7zip_delta4_lzma1.7z.uu \
        libarchive/test/test_read_format_7zip_delta_lzma2.7z.uu \
@@ -771,11 +785,19 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_7zip_lzma1_2.7z.uu \
        libarchive/test/test_read_format_7zip_lzma1_lzma2.7z.uu \
        libarchive/test/test_read_format_7zip_lzma2.7z.uu \
+       libarchive/test/test_read_format_7zip_lzma2_arm64.7z.uu \
+       libarchive/test/test_read_format_7zip_lzma2_arm.7z.uu \
        libarchive/test/test_read_format_7zip_malformed.7z.uu \
        libarchive/test/test_read_format_7zip_malformed2.7z.uu \
        libarchive/test/test_read_format_7zip_packinfo_digests.7z.uu \
        libarchive/test/test_read_format_7zip_ppmd.7z.uu \
+       libarchive/test/test_read_format_7zip_solid_zstd.7z.uu \
        libarchive/test/test_read_format_7zip_symbolic_name.7z.uu \
+       libarchive/test/test_read_format_7zip_win_attrib.7z.uu \
+       libarchive/test/test_read_format_7zip_zstd_arm.7z.uu \
+       libarchive/test/test_read_format_7zip_zstd_bcj.7z.uu \
+       libarchive/test/test_read_format_7zip_zstd_nobcj.7z.uu \
+       libarchive/test/test_read_format_7zip_zstd.7z.uu \
        libarchive/test/test_read_format_ar.ar.uu \
        libarchive/test/test_read_format_cab_1.cab.uu \
        libarchive/test/test_read_format_cab_2.cab.uu \
@@ -835,6 +857,7 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_rar_encryption_data.rar.uu \
        libarchive/test/test_read_format_rar_encryption_header.rar.uu \
        libarchive/test/test_read_format_rar_encryption_partially.rar.uu \
+       libarchive/test/test_read_format_rar_filter.rar.uu \
        libarchive/test/test_read_format_rar_invalid1.rar.uu \
        libarchive/test/test_read_format_rar_multi_lzss_blocks.rar.uu \
        libarchive/test/test_read_format_rar_multivolume.part0001.rar.uu \
@@ -878,6 +901,7 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_rar5_nonempty_dir_stream.rar.uu \
        libarchive/test/test_read_format_rar5_owner.rar.uu \
        libarchive/test/test_read_format_rar5_readtables_overflow.rar.uu \
+       libarchive/test/test_read_format_rar5_sfx.exe.uu \
        libarchive/test/test_read_format_rar5_solid.rar.uu \
        libarchive/test/test_read_format_rar5_stored.rar.uu \
        libarchive/test/test_read_format_rar5_stored_manyfiles.rar.uu \
@@ -887,6 +911,9 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_rar5_arm_filter_on_window_boundary.rar.uu \
        libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu \
        libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu \
+       libarchive/test/test_read_format_rar5_decode_number_out_of_bounds_read.rar.uu \
+       libarchive/test/test_read_format_rar5_window_buf_and_size_desync.rar.uu \
+       libarchive/test/test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu \
        libarchive/test/test_read_format_raw.bufr.uu \
        libarchive/test/test_read_format_raw.data.gz.uu \
        libarchive/test/test_read_format_raw.data.Z.uu \
@@ -896,6 +923,7 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_tar_empty_with_gnulabel.tar.uu \
        libarchive/test/test_read_format_tar_empty_pax.tar.Z.uu \
        libarchive/test/test_read_format_tar_filename_koi8r.tar.Z.uu \
+       libarchive/test/test_read_format_tar_invalid_pax_size.tar.uu \
        libarchive/test/test_read_format_ustar_filename_cp866.tar.Z.uu \
        libarchive/test/test_read_format_ustar_filename_eucjp.tar.Z.uu \
        libarchive/test/test_read_format_ustar_filename_koi8r.tar.Z.uu \
@@ -950,6 +978,8 @@ libarchive_test_EXTRA_DIST=\
        libarchive/test/test_read_format_zip_xz_multi.zipx.uu \
        libarchive/test/test_read_format_zip_zip64a.zip.uu \
        libarchive/test/test_read_format_zip_zip64b.zip.uu \
+       libarchive/test/test_read_format_zip_zstd.zipx.uu \
+       libarchive/test/test_read_format_zip_zstd_multi.zipx.uu \
        libarchive/test/test_read_large_splitted_rar_aa.uu \
        libarchive/test/test_read_large_splitted_rar_ab.uu \
        libarchive/test/test_read_large_splitted_rar_ac.uu \
@@ -1020,7 +1050,7 @@ endif
 
 bsdtar_LDADD= libarchive.la libarchive_fe.la $(LTLIBICONV)
 bsdtar_CPPFLAGS= -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdtar_ccstatic) $(PLATFORMCPPFLAGS)
-bsdtar_LDFLAGS= $(bsdtar_ldstatic)
+bsdtar_LDFLAGS= $(bsdtar_ldstatic) $(GC_SECTIONS)
 
 bsdtar_EXTRA_DIST= \
        tar/bsdtar.1 \
@@ -1081,6 +1111,7 @@ bsdtar_test_SOURCES= \
        tar/test/test_option_fflags.c \
        tar/test/test_option_gid_gname.c \
        tar/test/test_option_grzip.c \
+       tar/test/test_option_ignore_zeros.c \
        tar/test/test_option_j.c \
        tar/test/test_option_k.c \
        tar/test/test_option_keep_newer_files.c \
@@ -1185,7 +1216,7 @@ endif
 
 bsdcpio_LDADD= libarchive_fe.la libarchive.la $(LTLIBICONV)
 bsdcpio_CPPFLAGS= -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdcpio_ccstatic) $(PLATFORMCPPFLAGS)
-bsdcpio_LDFLAGS= $(bsdcpio_ldstatic)
+bsdcpio_LDFLAGS= $(bsdcpio_ldstatic) $(GC_SECTIONS)
 
 bsdcpio_EXTRA_DIST= \
        cpio/bsdcpio.1 \
@@ -1339,7 +1370,7 @@ endif
 
 bsdcat_LDADD= libarchive_fe.la libarchive.la $(LTLIBICONV)
 bsdcat_CPPFLAGS= -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdcat_ccstatic) $(PLATFORMCPPFLAGS)
-bsdcat_LDFLAGS= $(bsdcat_ldstatic)
+bsdcat_LDFLAGS= $(bsdcat_ldstatic) $(GC_SECTIONS)
 
 bsdcat_EXTRA_DIST= \
        cat/bsdcat.1 \
@@ -1390,6 +1421,7 @@ bsdcat_test_CPPFLAGS= \
 bsdcat_test_LDADD=libarchive_fe.la
 
 cat/test/list.h: Makefile
+       $(MKDIR_P) cat/test
        cat $(top_srcdir)/cat/test/test_*.c | grep '^DEFINE_TEST' > cat/test/list.h
 
 if BUILD_BSDCAT
@@ -1414,3 +1446,105 @@ bsdcat_test_EXTRA_DIST= \
        cat/test/test_expand.plain.uu \
        cat/test/test_expand.xz.uu \
        cat/test/CMakeLists.txt
+
+#
+#
+# bsdunzip source, docs, etc.
+#
+#
+
+bsdunzip_SOURCES= \
+               unzip/bsdunzip.c \
+               unzip/bsdunzip.h \
+               unzip/bsdunzip_platform.h \
+               unzip/cmdline.c \
+               unzip/la_getline.c \
+               unzip/la_queue.h
+
+if INC_WINDOWS_FILES
+bsdunzip_SOURCES+=
+endif
+
+bsdunzip_DEPENDENCIES = libarchive.la libarchive_fe.la
+
+
+if STATIC_BSDUNZIP
+bsdunzip_ldstatic= -static
+bsdunzip_ccstatic= -DLIBARCHIVE_STATIC
+else
+bsdunzip_ldstatic=
+bsdunzip_ccstatic=
+endif
+
+bsdunzip_LDADD= libarchive_fe.la libarchive.la $(LTLIBICONV)
+bsdunzip_CPPFLAGS= -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdunzip_ccstatic) $(PLATFORMCPPFLAGS)
+bsdunzip_LDFLAGS= $(bsdunzip_ldstatic) $(GC_SECTIONS)
+
+bsdunzip_EXTRA_DIST= \
+       unzip/bsdunzip.1 \
+       unzip/CMakeLists.txt
+
+
+if BUILD_BSDUNZIP
+# Manpages to install
+bsdunzip_man_MANS= unzip/bsdunzip.1
+bsdunzip_programs= bsdunzip
+else
+bsdunzip_man_MANS=
+bsdunzip_programs=
+endif
+
+#
+# bsdunzip_test
+#
+
+bsdunzip_test_SOURCES= \
+       $(test_utils_SOURCES) \
+       unzip/test/test.h \
+       unzip/test/test_0.c \
+       unzip/test/test_basic.c \
+       unzip/test/test_glob.c \
+       unzip/test/test_not_exist.c \
+       unzip/test/test_singlefile.c \
+       unzip/test/test_C.c \
+       unzip/test/test_p.c \
+       unzip/test/test_d.c \
+       unzip/test/test_j.c \
+       unzip/test/test_L.c \
+       unzip/test/test_n.c \
+       unzip/test/test_o.c \
+       unzip/test/test_q.c \
+       unzip/test/test_t.c \
+       unzip/test/test_t_bad.c \
+       unzip/test/test_version.c \
+       unzip/test/test_x.c \
+       unzip/test/test_Z1.c \
+       unzip/test/test_P_encryption.c
+
+bsdunzip_test_CPPFLAGS= \
+       -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe \
+       -I$(top_srcdir)/test_utils \
+       -I$(top_srcdir)/unzip -I$(top_srcdir)/unzip/test \
+       -I$(top_builddir)/unzip/test \
+       $(PLATFORMCPPFLAGS)
+bsdunzip_test_LDADD=libarchive_fe.la
+
+unzip/test/list.h: Makefile
+       $(MKDIR_P) unzip/test
+       cat $(top_srcdir)/unzip/test/test_*.c | grep '^DEFINE_TEST' > unzip/test/list.h
+
+if BUILD_BSDUNZIP
+bsdunzip_test_programs= bsdunzip_test
+bsdunzip_TESTS_ENVIRONMENT= BSDUNZIP=`cd $(top_builddir);/bin/pwd`/bsdunzip$(EXEEXT) BSDUNZIP_TEST_FILES=`cd $(top_srcdir);/bin/pwd`/unzip/test
+else
+bsdunzip_test_programs=
+bsdunzip_TESTS_ENVIRONMENT=
+endif
+
+bsdunzip_test_EXTRA_DIST= \
+       unzip/test/list.h \
+       unzip/test/test_basic.zip.uu \
+       unzip/test/test_encrypted.zip.uu \
+       unzip/test/test_singlefile.zip.uu \
+       unzip/test/test_t_bad.zip.uu \
+       unzip/test/CMakeLists.txt
index ba651eb..a7d376f 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -91,11 +91,12 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3)
-check_PROGRAMS = libarchive_test$(EXEEXT) $(am__EXEEXT_4) \
-       $(am__EXEEXT_5) $(am__EXEEXT_6)
-TESTS = libarchive_test$(EXEEXT) $(am__EXEEXT_4) $(am__EXEEXT_5) \
-       $(am__EXEEXT_6)
+bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+       $(am__EXEEXT_4)
+check_PROGRAMS = libarchive_test$(EXEEXT) $(am__EXEEXT_5) \
+       $(am__EXEEXT_6) $(am__EXEEXT_7) $(am__EXEEXT_8)
+TESTS = libarchive_test$(EXEEXT) $(am__EXEEXT_5) $(am__EXEEXT_6) \
+       $(am__EXEEXT_7) $(am__EXEEXT_8)
 @INC_WINDOWS_FILES_TRUE@am__append_1 = \
 @INC_WINDOWS_FILES_TRUE@       libarchive/archive_entry_copy_bhfi.c \
 @INC_WINDOWS_FILES_TRUE@       libarchive/archive_read_disk_windows.c \
@@ -123,6 +124,7 @@ TESTS = libarchive_test$(EXEEXT) $(am__EXEEXT_4) $(am__EXEEXT_5) \
 @INC_WINDOWS_FILES_TRUE@               cpio/cpio_windows.c
 
 @INC_WINDOWS_FILES_TRUE@am__append_9 = 
+@INC_WINDOWS_FILES_TRUE@am__append_10 = 
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps =  \
@@ -136,6 +138,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/build/autoconf/lib-ld.m4 \
        $(top_srcdir)/build/autoconf/lib-link.m4 \
        $(top_srcdir)/build/autoconf/lib-prefix.m4 \
+       $(top_srcdir)/build/autoconf/m4_ax_compile_check_sizeof.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
@@ -150,13 +153,15 @@ CONFIG_CLEAN_VPATH_FILES =
 @BUILD_BSDTAR_TRUE@am__EXEEXT_1 = bsdtar$(EXEEXT)
 @BUILD_BSDCPIO_TRUE@am__EXEEXT_2 = bsdcpio$(EXEEXT)
 @BUILD_BSDCAT_TRUE@am__EXEEXT_3 = bsdcat$(EXEEXT)
+@BUILD_BSDUNZIP_TRUE@am__EXEEXT_4 = bsdunzip$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \
        "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
        "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" \
        "$(DESTDIR)$(includedir)"
-@BUILD_BSDTAR_TRUE@am__EXEEXT_4 = bsdtar_test$(EXEEXT)
-@BUILD_BSDCPIO_TRUE@am__EXEEXT_5 = bsdcpio_test$(EXEEXT)
-@BUILD_BSDCAT_TRUE@am__EXEEXT_6 = bsdcat_test$(EXEEXT)
+@BUILD_BSDTAR_TRUE@am__EXEEXT_5 = bsdtar_test$(EXEEXT)
+@BUILD_BSDCPIO_TRUE@am__EXEEXT_6 = bsdcpio_test$(EXEEXT)
+@BUILD_BSDCAT_TRUE@am__EXEEXT_7 = bsdcat_test$(EXEEXT)
+@BUILD_BSDUNZIP_TRUE@am__EXEEXT_8 = bsdunzip_test$(EXEEXT)
 PROGRAMS = $(bin_PROGRAMS)
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
@@ -623,6 +628,7 @@ am_bsdtar_test_OBJECTS = $(am__objects_12) \
        tar/test/bsdtar_test-test_option_fflags.$(OBJEXT) \
        tar/test/bsdtar_test-test_option_gid_gname.$(OBJEXT) \
        tar/test/bsdtar_test-test_option_grzip.$(OBJEXT) \
+       tar/test/bsdtar_test-test_option_ignore_zeros.$(OBJEXT) \
        tar/test/bsdtar_test-test_option_j.$(OBJEXT) \
        tar/test/bsdtar_test-test_option_k.$(OBJEXT) \
        tar/test/bsdtar_test-test_option_keep_newer_files.$(OBJEXT) \
@@ -654,6 +660,37 @@ am_bsdtar_test_OBJECTS = $(am__objects_12) \
        tar/test/bsdtar_test-test_windows.$(OBJEXT)
 bsdtar_test_OBJECTS = $(am_bsdtar_test_OBJECTS)
 bsdtar_test_LDADD = $(LDADD)
+am_bsdunzip_OBJECTS = unzip/bsdunzip-bsdunzip.$(OBJEXT) \
+       unzip/bsdunzip-cmdline.$(OBJEXT) \
+       unzip/bsdunzip-la_getline.$(OBJEXT) $(am__objects_7)
+bsdunzip_OBJECTS = $(am_bsdunzip_OBJECTS)
+bsdunzip_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(bsdunzip_LDFLAGS) $(LDFLAGS) -o $@
+am__objects_13 = test_utils/bsdunzip_test-test_utils.$(OBJEXT) \
+       test_utils/bsdunzip_test-test_main.$(OBJEXT)
+am_bsdunzip_test_OBJECTS = $(am__objects_13) \
+       unzip/test/bsdunzip_test-test_0.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_basic.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_glob.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_not_exist.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_singlefile.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_C.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_p.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_d.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_j.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_L.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_n.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_o.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_q.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_t.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_t_bad.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_version.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_x.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_Z1.$(OBJEXT) \
+       unzip/test/bsdunzip_test-test_P_encryption.$(OBJEXT)
+bsdunzip_test_OBJECTS = $(am_bsdunzip_test_OBJECTS)
+bsdunzip_test_DEPENDENCIES = libarchive_fe.la
 am__libarchive_test_SOURCES_DIST = libarchive/archive_acl.c \
        libarchive/archive_acl_private.h \
        libarchive/archive_check_magic.c libarchive/archive_cmdline.c \
@@ -858,6 +895,7 @@ am__libarchive_test_SOURCES_DIST = libarchive/archive_acl.c \
        libarchive/test/test_compat_solaris_tar_acl.c \
        libarchive/test/test_compat_solaris_pax_sparse.c \
        libarchive/test/test_compat_star_acl.c \
+       libarchive/test/test_compat_tar_directory.c \
        libarchive/test/test_compat_tar_hardlink.c \
        libarchive/test/test_compat_uudecode.c \
        libarchive/test/test_compat_uudecode_large.c \
@@ -892,6 +930,7 @@ am__libarchive_test_SOURCES_DIST = libarchive/archive_acl.c \
        libarchive/test/test_read_filter_program.c \
        libarchive/test/test_read_filter_program_signature.c \
        libarchive/test/test_read_filter_uudecode.c \
+       libarchive/test/test_read_filter_uudecode_raw.c \
        libarchive/test/test_read_format_7zip.c \
        libarchive/test/test_read_format_7zip_encryption_data.c \
        libarchive/test/test_read_format_7zip_encryption_partially.c \
@@ -946,6 +985,7 @@ am__libarchive_test_SOURCES_DIST = libarchive/archive_acl.c \
        libarchive/test/test_read_format_rar_encryption_data.c \
        libarchive/test/test_read_format_rar_encryption_partially.c \
        libarchive/test/test_read_format_rar_encryption_header.c \
+       libarchive/test/test_read_format_rar_filter.c \
        libarchive/test/test_read_format_rar_invalid1.c \
        libarchive/test/test_read_format_rar5.c \
        libarchive/test/test_read_format_raw.c \
@@ -955,6 +995,7 @@ am__libarchive_test_SOURCES_DIST = libarchive/archive_acl.c \
        libarchive/test/test_read_format_tar_empty_filename.c \
        libarchive/test/test_read_format_tar_empty_with_gnulabel.c \
        libarchive/test/test_read_format_tar_filename.c \
+       libarchive/test/test_read_format_tar_invalid_pax_size.c \
        libarchive/test/test_read_format_tbz.c \
        libarchive/test/test_read_format_tgz.c \
        libarchive/test/test_read_format_tlz.c \
@@ -1069,6 +1110,7 @@ am__libarchive_test_SOURCES_DIST = libarchive/archive_acl.c \
        libarchive/test/test_write_format_xar_empty.c \
        libarchive/test/test_write_format_zip.c \
        libarchive/test/test_write_format_zip_compression_store.c \
+       libarchive/test/test_write_format_zip_entry_size_unset.c \
        libarchive/test/test_write_format_zip_empty.c \
        libarchive/test/test_write_format_zip_empty_zip64.c \
        libarchive/test/test_write_format_zip_file.c \
@@ -1079,18 +1121,18 @@ am__libarchive_test_SOURCES_DIST = libarchive/archive_acl.c \
        libarchive/test/test_write_read_format_zip.c \
        libarchive/test/test_xattr_platform.c \
        libarchive/test/test_zip_filename_encoding.c
-@INC_WINDOWS_FILES_TRUE@am__objects_13 = libarchive/test-archive_entry_copy_bhfi.$(OBJEXT) \
+@INC_WINDOWS_FILES_TRUE@am__objects_14 = libarchive/test-archive_entry_copy_bhfi.$(OBJEXT) \
 @INC_WINDOWS_FILES_TRUE@       libarchive/test-archive_read_disk_windows.$(OBJEXT) \
 @INC_WINDOWS_FILES_TRUE@       libarchive/test-archive_windows.$(OBJEXT) \
 @INC_WINDOWS_FILES_TRUE@       libarchive/test-archive_write_disk_windows.$(OBJEXT) \
 @INC_WINDOWS_FILES_TRUE@       libarchive/test-filter_fork_windows.$(OBJEXT)
-@INC_BLAKE2_TRUE@am__objects_14 = libarchive/test-archive_blake2s_ref.$(OBJEXT) \
+@INC_BLAKE2_TRUE@am__objects_15 = libarchive/test-archive_blake2s_ref.$(OBJEXT) \
 @INC_BLAKE2_TRUE@      libarchive/test-archive_blake2sp_ref.$(OBJEXT)
-@INC_LINUX_ACL_TRUE@am__objects_15 = libarchive/test-archive_disk_acl_linux.$(OBJEXT)
-@INC_LINUX_ACL_FALSE@@INC_SUNOS_ACL_TRUE@am__objects_16 = libarchive/test-archive_disk_acl_sunos.$(OBJEXT)
-@INC_DARWIN_ACL_TRUE@@INC_LINUX_ACL_FALSE@@INC_SUNOS_ACL_FALSE@am__objects_17 = libarchive/test-archive_disk_acl_darwin.$(OBJEXT)
-@INC_DARWIN_ACL_FALSE@@INC_FREEBSD_ACL_TRUE@@INC_LINUX_ACL_FALSE@@INC_SUNOS_ACL_FALSE@am__objects_18 = libarchive/test-archive_disk_acl_freebsd.$(OBJEXT)
-am__objects_19 = libarchive/test-archive_acl.$(OBJEXT) \
+@INC_LINUX_ACL_TRUE@am__objects_16 = libarchive/test-archive_disk_acl_linux.$(OBJEXT)
+@INC_LINUX_ACL_FALSE@@INC_SUNOS_ACL_TRUE@am__objects_17 = libarchive/test-archive_disk_acl_sunos.$(OBJEXT)
+@INC_DARWIN_ACL_TRUE@@INC_LINUX_ACL_FALSE@@INC_SUNOS_ACL_FALSE@am__objects_18 = libarchive/test-archive_disk_acl_darwin.$(OBJEXT)
+@INC_DARWIN_ACL_FALSE@@INC_FREEBSD_ACL_TRUE@@INC_LINUX_ACL_FALSE@@INC_SUNOS_ACL_FALSE@am__objects_19 = libarchive/test-archive_disk_acl_freebsd.$(OBJEXT)
+am__objects_20 = libarchive/test-archive_acl.$(OBJEXT) \
        libarchive/test-archive_check_magic.$(OBJEXT) \
        libarchive/test-archive_cmdline.$(OBJEXT) \
        libarchive/test-archive_cryptor.$(OBJEXT) \
@@ -1209,12 +1251,12 @@ am__objects_19 = libarchive/test-archive_acl.$(OBJEXT) \
        libarchive/test-archive_write_set_options.$(OBJEXT) \
        libarchive/test-archive_write_set_passphrase.$(OBJEXT) \
        libarchive/test-filter_fork_posix.$(OBJEXT) \
-       libarchive/test-xxhash.$(OBJEXT) $(am__objects_13) \
-       $(am__objects_14) $(am__objects_15) $(am__objects_16) \
-       $(am__objects_17) $(am__objects_18)
-am__objects_20 = test_utils/libarchive_test-test_utils.$(OBJEXT) \
+       libarchive/test-xxhash.$(OBJEXT) $(am__objects_14) \
+       $(am__objects_15) $(am__objects_16) $(am__objects_17) \
+       $(am__objects_18) $(am__objects_19)
+am__objects_21 = test_utils/libarchive_test-test_utils.$(OBJEXT) \
        test_utils/libarchive_test-test_main.$(OBJEXT)
-am_libarchive_test_OBJECTS = $(am__objects_19) $(am__objects_20) \
+am_libarchive_test_OBJECTS = $(am__objects_20) $(am__objects_21) \
        libarchive/test/test-read_open_memory.$(OBJEXT) \
        libarchive/test/test-test_acl_nfs4.$(OBJEXT) \
        libarchive/test/test-test_acl_pax.$(OBJEXT) \
@@ -1270,6 +1312,7 @@ am_libarchive_test_OBJECTS = $(am__objects_19) $(am__objects_20) \
        libarchive/test/test-test_compat_solaris_tar_acl.$(OBJEXT) \
        libarchive/test/test-test_compat_solaris_pax_sparse.$(OBJEXT) \
        libarchive/test/test-test_compat_star_acl.$(OBJEXT) \
+       libarchive/test/test-test_compat_tar_directory.$(OBJEXT) \
        libarchive/test/test-test_compat_tar_hardlink.$(OBJEXT) \
        libarchive/test/test-test_compat_uudecode.$(OBJEXT) \
        libarchive/test/test-test_compat_uudecode_large.$(OBJEXT) \
@@ -1304,6 +1347,7 @@ am_libarchive_test_OBJECTS = $(am__objects_19) $(am__objects_20) \
        libarchive/test/test-test_read_filter_program.$(OBJEXT) \
        libarchive/test/test-test_read_filter_program_signature.$(OBJEXT) \
        libarchive/test/test-test_read_filter_uudecode.$(OBJEXT) \
+       libarchive/test/test-test_read_filter_uudecode_raw.$(OBJEXT) \
        libarchive/test/test-test_read_format_7zip.$(OBJEXT) \
        libarchive/test/test-test_read_format_7zip_encryption_data.$(OBJEXT) \
        libarchive/test/test-test_read_format_7zip_encryption_partially.$(OBJEXT) \
@@ -1358,6 +1402,7 @@ am_libarchive_test_OBJECTS = $(am__objects_19) $(am__objects_20) \
        libarchive/test/test-test_read_format_rar_encryption_data.$(OBJEXT) \
        libarchive/test/test-test_read_format_rar_encryption_partially.$(OBJEXT) \
        libarchive/test/test-test_read_format_rar_encryption_header.$(OBJEXT) \
+       libarchive/test/test-test_read_format_rar_filter.$(OBJEXT) \
        libarchive/test/test-test_read_format_rar_invalid1.$(OBJEXT) \
        libarchive/test/test-test_read_format_rar5.$(OBJEXT) \
        libarchive/test/test-test_read_format_raw.$(OBJEXT) \
@@ -1367,6 +1412,7 @@ am_libarchive_test_OBJECTS = $(am__objects_19) $(am__objects_20) \
        libarchive/test/test-test_read_format_tar_empty_filename.$(OBJEXT) \
        libarchive/test/test-test_read_format_tar_empty_with_gnulabel.$(OBJEXT) \
        libarchive/test/test-test_read_format_tar_filename.$(OBJEXT) \
+       libarchive/test/test-test_read_format_tar_invalid_pax_size.$(OBJEXT) \
        libarchive/test/test-test_read_format_tbz.$(OBJEXT) \
        libarchive/test/test-test_read_format_tgz.$(OBJEXT) \
        libarchive/test/test-test_read_format_tlz.$(OBJEXT) \
@@ -1481,6 +1527,7 @@ am_libarchive_test_OBJECTS = $(am__objects_19) $(am__objects_20) \
        libarchive/test/test-test_write_format_xar_empty.$(OBJEXT) \
        libarchive/test/test-test_write_format_zip.$(OBJEXT) \
        libarchive/test/test-test_write_format_zip_compression_store.$(OBJEXT) \
+       libarchive/test/test-test_write_format_zip_entry_size_unset.$(OBJEXT) \
        libarchive/test/test-test_write_format_zip_empty.$(OBJEXT) \
        libarchive/test/test-test_write_format_zip_empty_zip64.$(OBJEXT) \
        libarchive/test/test-test_write_format_zip_file.$(OBJEXT) \
@@ -1897,6 +1944,7 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdcat-bsdcat.Po \
        libarchive/test/$(DEPDIR)/test-test_compat_solaris_pax_sparse.Po \
        libarchive/test/$(DEPDIR)/test-test_compat_solaris_tar_acl.Po \
        libarchive/test/$(DEPDIR)/test-test_compat_star_acl.Po \
+       libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Po \
        libarchive/test/$(DEPDIR)/test-test_compat_tar_hardlink.Po \
        libarchive/test/$(DEPDIR)/test-test_compat_uudecode.Po \
        libarchive/test/$(DEPDIR)/test-test_compat_uudecode_large.Po \
@@ -1931,6 +1979,7 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdcat-bsdcat.Po \
        libarchive/test/$(DEPDIR)/test-test_read_filter_program.Po \
        libarchive/test/$(DEPDIR)/test-test_read_filter_program_signature.Po \
        libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode.Po \
+       libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_7zip.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_data.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_header.Po \
@@ -1986,6 +2035,7 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdcat-bsdcat.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_data.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_header.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_partially.Po \
+       libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_rar_invalid1.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_raw.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tar.Po \
@@ -1994,6 +2044,7 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdcat-bsdcat.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_pax.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_with_gnulabel.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tar_filename.Po \
+       libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tbz.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tgz.Po \
        libarchive/test/$(DEPDIR)/test-test_read_format_tlz.Po \
@@ -2110,6 +2161,7 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdcat-bsdcat.Po \
        libarchive/test/$(DEPDIR)/test-test_write_format_zip_compression_store.Po \
        libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty.Po \
        libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty_zip64.Po \
+       libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Po \
        libarchive/test/$(DEPDIR)/test-test_write_format_zip_file.Po \
        libarchive/test/$(DEPDIR)/test-test_write_format_zip_file_zip64.Po \
        libarchive/test/$(DEPDIR)/test-test_write_format_zip_large.Po \
@@ -2163,6 +2215,7 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdcat-bsdcat.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_option_fflags.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_option_gid_gname.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_option_grzip.Po \
+       tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_option_j.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_option_k.Po \
        tar/test/$(DEPDIR)/bsdtar_test-test_option_keep_newer_files.Po \
@@ -2198,8 +2251,32 @@ am__depfiles_remade = cat/$(DEPDIR)/bsdcat-bsdcat.Po \
        test_utils/$(DEPDIR)/bsdcpio_test-test_utils.Po \
        test_utils/$(DEPDIR)/bsdtar_test-test_main.Po \
        test_utils/$(DEPDIR)/bsdtar_test-test_utils.Po \
+       test_utils/$(DEPDIR)/bsdunzip_test-test_main.Po \
+       test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Po \
        test_utils/$(DEPDIR)/libarchive_test-test_main.Po \
-       test_utils/$(DEPDIR)/libarchive_test-test_utils.Po
+       test_utils/$(DEPDIR)/libarchive_test-test_utils.Po \
+       unzip/$(DEPDIR)/bsdunzip-bsdunzip.Po \
+       unzip/$(DEPDIR)/bsdunzip-cmdline.Po \
+       unzip/$(DEPDIR)/bsdunzip-la_getline.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Po \
+       unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Po
 am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -2222,12 +2299,14 @@ am__v_CCLD_1 =
 SOURCES = $(libarchive_la_SOURCES) $(libarchive_fe_la_SOURCES) \
        $(bsdcat_SOURCES) $(bsdcat_test_SOURCES) $(bsdcpio_SOURCES) \
        $(bsdcpio_test_SOURCES) $(bsdtar_SOURCES) \
-       $(bsdtar_test_SOURCES) $(libarchive_test_SOURCES)
+       $(bsdtar_test_SOURCES) $(bsdunzip_SOURCES) \
+       $(bsdunzip_test_SOURCES) $(libarchive_test_SOURCES)
 DIST_SOURCES = $(am__libarchive_la_SOURCES_DIST) \
        $(libarchive_fe_la_SOURCES) $(bsdcat_SOURCES) \
        $(bsdcat_test_SOURCES) $(am__bsdcpio_SOURCES_DIST) \
        $(bsdcpio_test_SOURCES) $(am__bsdtar_SOURCES_DIST) \
-       $(bsdtar_test_SOURCES) $(am__libarchive_test_SOURCES_DIST)
+       $(bsdtar_test_SOURCES) $(bsdunzip_SOURCES) \
+       $(bsdunzip_test_SOURCES) $(am__libarchive_test_SOURCES_DIST)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -2240,8 +2319,8 @@ NROFF = nroff
 MANS = $(man_MANS)
 DATA = $(pkgconfig_DATA)
 HEADERS = $(include_HEADERS)
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
-       $(LISP)config.h.in
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
+       config.h.in
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
 # *not* preserved.
@@ -2258,9 +2337,6 @@ am__define_uniq_tagged_files = \
   unique=`for i in $$list; do \
     if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
   done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-CSCOPE = cscope
 AM_RECURSIVE_TARGETS = cscope check recheck
 am__tty_colors_dummy = \
   mgn= red= grn= lgn= blu= brg= std=; \
@@ -2417,6 +2493,7 @@ am__set_TESTS_bases = \
   bases='$(TEST_LOGS)'; \
   bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
   bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
 RECHECK_LOGS = $(TEST_LOGS)
 TEST_SUITE_LOG = test-suite.log
 TEST_EXTENSIONS = @EXEEXT@ .test
@@ -2449,10 +2526,11 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
        $(top_srcdir)/build/autoconf/missing \
        $(top_srcdir)/build/autoconf/test-driver \
        $(top_srcdir)/build/pkgconfig/libarchive.pc.in COPYING INSTALL \
-       NEWS build/autoconf/compile build/autoconf/config.guess \
-       build/autoconf/config.rpath build/autoconf/config.sub \
-       build/autoconf/depcomp build/autoconf/install-sh \
-       build/autoconf/ltmain.sh build/autoconf/missing
+       NEWS README.md build/autoconf/compile \
+       build/autoconf/config.guess build/autoconf/config.rpath \
+       build/autoconf/config.sub build/autoconf/depcomp \
+       build/autoconf/install-sh build/autoconf/ltmain.sh \
+       build/autoconf/missing
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -2466,6 +2544,8 @@ am__post_remove_distdir = $(am__remove_distdir)
 DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz $(distdir).zip
 GZIP_ENV = --best
 DIST_TARGETS = dist-xz dist-gzip dist-zip
+# Exists only to be overridden by the user if desired.
+AM_DISTCHECK_DVI_TARGET = dvi
 distuninstallcheck_listfiles = find . -type f -print
 am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
   | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
@@ -2483,11 +2563,14 @@ AWK = @AWK@
 BSDCAT_VERSION_STRING = @BSDCAT_VERSION_STRING@
 BSDCPIO_VERSION_STRING = @BSDCPIO_VERSION_STRING@
 BSDTAR_VERSION_STRING = @BSDTAR_VERSION_STRING@
+BSDUNZIP_VERSION_STRING = @BSDUNZIP_VERSION_STRING@
 CC = @CC@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
@@ -2498,8 +2581,10 @@ ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
+ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
+GC_SECTIONS = @GC_SECTIONS@
 GREP = @GREP@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -2513,6 +2598,7 @@ LIBARCHIVE_VERSION_STRING = @LIBARCHIVE_VERSION_STRING@
 LIBICONV = @LIBICONV@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBSREQUIRED = @LIBSREQUIRED@
 LIBTOOL = @LIBTOOL@
 LIBXML2_PC_CFLAGS = @LIBXML2_PC_CFLAGS@
 LIBXML2_PC_LIBS = @LIBXML2_PC_LIBS@
@@ -2610,9 +2696,9 @@ ACLOCAL_AMFLAGS = -I build/autoconf
 #
 lib_LTLIBRARIES = libarchive.la
 noinst_LTLIBRARIES = libarchive_fe.la
-man_MANS = $(libarchive_man_MANS) $(bsdtar_man_MANS) $(bsdcpio_man_MANS) $(bsdcat_man_MANS)
-BUILT_SOURCES = libarchive/test/list.h tar/test/list.h cpio/test/list.h cat/test/list.h
-TESTS_ENVIRONMENT = $(libarchive_TESTS_ENVIRONMENT) $(bsdtar_TESTS_ENVIRONMENT) $(bsdcpio_TESTS_ENVIRONMENT) $(bsdcat_TESTS_ENVIRONMENT)
+man_MANS = $(libarchive_man_MANS) $(bsdtar_man_MANS) $(bsdcpio_man_MANS) $(bsdcat_man_MANS) $(bsdunzip_man_MANS)
+BUILT_SOURCES = libarchive/test/list.h tar/test/list.h cpio/test/list.h cat/test/list.h unzip/test/list.h
+TESTS_ENVIRONMENT = $(libarchive_TESTS_ENVIRONMENT) $(bsdtar_TESTS_ENVIRONMENT) $(bsdcpio_TESTS_ENVIRONMENT) $(bsdcat_TESTS_ENVIRONMENT) $(bsdunzip_TESTS_ENVIRONMENT)
 # Always build and test both bsdtar and bsdcpio as part of 'distcheck'
 DISTCHECK_CONFIGURE_FLAGS = --enable-bsdtar --enable-bsdcpio
 # The next line is commented out by default in shipping libarchive releases.
@@ -2642,7 +2728,9 @@ EXTRA_DIST = \
        $(bsdcpio_EXTRA_DIST) \
        $(bsdcpio_test_EXTRA_DIST) \
        $(bsdcat_EXTRA_DIST) \
-       $(bsdcat_test_EXTRA_DIST)
+       $(bsdcat_test_EXTRA_DIST) \
+       $(bsdunzip_EXTRA_DIST) \
+       $(bsdunzip_test_EXTRA_DIST)
 
 
 #
@@ -2652,7 +2740,8 @@ DISTCLEANFILES = \
        libarchive/test/list.h \
        tar/test/list.h \
        cpio/test/list.h \
-       cat/test/list.h
+       cat/test/list.h \
+       unzip/test/list.h
 
 
 #
@@ -2802,7 +2891,7 @@ libarchive_la_SOURCES = libarchive/archive_acl.c \
 
 # -no-undefined marks that libarchive doesn't rely on symbols
 # defined in the application.  This is mandatory for cygwin.
-libarchive_la_LDFLAGS = -no-undefined -version-info $(ARCHIVE_LIBTOOL_VERSION)
+libarchive_la_LDFLAGS = -no-undefined -version-info $(ARCHIVE_LIBTOOL_VERSION) $(GC_SECTIONS)
 libarchive_la_LIBADD = $(LTLIBICONV)
 
 # Manpages to install
@@ -2935,6 +3024,7 @@ libarchive_test_SOURCES = \
        libarchive/test/test_compat_solaris_tar_acl.c \
        libarchive/test/test_compat_solaris_pax_sparse.c \
        libarchive/test/test_compat_star_acl.c \
+       libarchive/test/test_compat_tar_directory.c \
        libarchive/test/test_compat_tar_hardlink.c \
        libarchive/test/test_compat_uudecode.c \
        libarchive/test/test_compat_uudecode_large.c \
@@ -2969,6 +3059,7 @@ libarchive_test_SOURCES = \
        libarchive/test/test_read_filter_program.c \
        libarchive/test/test_read_filter_program_signature.c \
        libarchive/test/test_read_filter_uudecode.c \
+       libarchive/test/test_read_filter_uudecode_raw.c \
        libarchive/test/test_read_format_7zip.c \
        libarchive/test/test_read_format_7zip_encryption_data.c \
        libarchive/test/test_read_format_7zip_encryption_partially.c \
@@ -3023,6 +3114,7 @@ libarchive_test_SOURCES = \
        libarchive/test/test_read_format_rar_encryption_data.c \
        libarchive/test/test_read_format_rar_encryption_partially.c \
        libarchive/test/test_read_format_rar_encryption_header.c \
+       libarchive/test/test_read_format_rar_filter.c \
        libarchive/test/test_read_format_rar_invalid1.c \
        libarchive/test/test_read_format_rar5.c \
        libarchive/test/test_read_format_raw.c \
@@ -3032,6 +3124,7 @@ libarchive_test_SOURCES = \
        libarchive/test/test_read_format_tar_empty_filename.c \
        libarchive/test/test_read_format_tar_empty_with_gnulabel.c \
        libarchive/test/test_read_format_tar_filename.c \
+       libarchive/test/test_read_format_tar_invalid_pax_size.c \
        libarchive/test/test_read_format_tbz.c \
        libarchive/test/test_read_format_tgz.c \
        libarchive/test/test_read_format_tlz.c \
@@ -3146,6 +3239,7 @@ libarchive_test_SOURCES = \
        libarchive/test/test_write_format_xar_empty.c \
        libarchive/test/test_write_format_zip.c \
        libarchive/test/test_write_format_zip_compression_store.c \
+       libarchive/test/test_write_format_zip_entry_size_unset.c \
        libarchive/test/test_write_format_zip_empty.c \
        libarchive/test/test_write_format_zip_empty_zip64.c \
        libarchive/test/test_write_format_zip_file.c \
@@ -3207,6 +3301,7 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_compat_solaris_tar_acl.tar.uu \
        libarchive/test/test_compat_star_acl_nfs4.tar.uu \
        libarchive/test/test_compat_star_acl_posix1e.tar.uu \
+       libarchive/test/test_compat_tar_directory_1.tar.uu \
        libarchive/test/test_compat_tar_hardlink_1.tar.uu \
        libarchive/test/test_compat_uudecode_large.tar.Z.uu \
        libarchive/test/test_compat_xz_1.txz.uu \
@@ -3250,6 +3345,8 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_filter_lrzip.tar.lrz.uu \
        libarchive/test/test_read_filter_lzop.tar.lzo.uu \
        libarchive/test/test_read_filter_lzop_multiple_parts.tar.lzo.uu \
+       libarchive/test/test_read_filter_uudecode_raw.uu \
+       libarchive/test/test_read_filter_uudecode_base64_raw.uu \
        libarchive/test/test_read_format_mtree_crash747.mtree.bz2.uu \
        libarchive/test/test_read_format_mtree_noprint.mtree.uu \
        libarchive/test/test_read_format_7zip_bcj2_bzip2.7z.uu \
@@ -3270,6 +3367,7 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_7zip_copy.7z.uu \
        libarchive/test/test_read_format_7zip_copy_2.7z.uu \
        libarchive/test/test_read_format_7zip_deflate.7z.uu \
+       libarchive/test/test_read_format_7zip_deflate_arm64.7z.uu \
        libarchive/test/test_read_format_7zip_delta_lzma1.7z.uu \
        libarchive/test/test_read_format_7zip_delta4_lzma1.7z.uu \
        libarchive/test/test_read_format_7zip_delta_lzma2.7z.uu \
@@ -3283,11 +3381,19 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_7zip_lzma1_2.7z.uu \
        libarchive/test/test_read_format_7zip_lzma1_lzma2.7z.uu \
        libarchive/test/test_read_format_7zip_lzma2.7z.uu \
+       libarchive/test/test_read_format_7zip_lzma2_arm64.7z.uu \
+       libarchive/test/test_read_format_7zip_lzma2_arm.7z.uu \
        libarchive/test/test_read_format_7zip_malformed.7z.uu \
        libarchive/test/test_read_format_7zip_malformed2.7z.uu \
        libarchive/test/test_read_format_7zip_packinfo_digests.7z.uu \
        libarchive/test/test_read_format_7zip_ppmd.7z.uu \
+       libarchive/test/test_read_format_7zip_solid_zstd.7z.uu \
        libarchive/test/test_read_format_7zip_symbolic_name.7z.uu \
+       libarchive/test/test_read_format_7zip_win_attrib.7z.uu \
+       libarchive/test/test_read_format_7zip_zstd_arm.7z.uu \
+       libarchive/test/test_read_format_7zip_zstd_bcj.7z.uu \
+       libarchive/test/test_read_format_7zip_zstd_nobcj.7z.uu \
+       libarchive/test/test_read_format_7zip_zstd.7z.uu \
        libarchive/test/test_read_format_ar.ar.uu \
        libarchive/test/test_read_format_cab_1.cab.uu \
        libarchive/test/test_read_format_cab_2.cab.uu \
@@ -3347,6 +3453,7 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_rar_encryption_data.rar.uu \
        libarchive/test/test_read_format_rar_encryption_header.rar.uu \
        libarchive/test/test_read_format_rar_encryption_partially.rar.uu \
+       libarchive/test/test_read_format_rar_filter.rar.uu \
        libarchive/test/test_read_format_rar_invalid1.rar.uu \
        libarchive/test/test_read_format_rar_multi_lzss_blocks.rar.uu \
        libarchive/test/test_read_format_rar_multivolume.part0001.rar.uu \
@@ -3390,6 +3497,7 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_rar5_nonempty_dir_stream.rar.uu \
        libarchive/test/test_read_format_rar5_owner.rar.uu \
        libarchive/test/test_read_format_rar5_readtables_overflow.rar.uu \
+       libarchive/test/test_read_format_rar5_sfx.exe.uu \
        libarchive/test/test_read_format_rar5_solid.rar.uu \
        libarchive/test/test_read_format_rar5_stored.rar.uu \
        libarchive/test/test_read_format_rar5_stored_manyfiles.rar.uu \
@@ -3399,6 +3507,9 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_rar5_arm_filter_on_window_boundary.rar.uu \
        libarchive/test/test_read_format_rar5_different_winsize_on_merge.rar.uu \
        libarchive/test/test_read_format_rar5_block_size_is_too_small.rar.uu \
+       libarchive/test/test_read_format_rar5_decode_number_out_of_bounds_read.rar.uu \
+       libarchive/test/test_read_format_rar5_window_buf_and_size_desync.rar.uu \
+       libarchive/test/test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu \
        libarchive/test/test_read_format_raw.bufr.uu \
        libarchive/test/test_read_format_raw.data.gz.uu \
        libarchive/test/test_read_format_raw.data.Z.uu \
@@ -3408,6 +3519,7 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_tar_empty_with_gnulabel.tar.uu \
        libarchive/test/test_read_format_tar_empty_pax.tar.Z.uu \
        libarchive/test/test_read_format_tar_filename_koi8r.tar.Z.uu \
+       libarchive/test/test_read_format_tar_invalid_pax_size.tar.uu \
        libarchive/test/test_read_format_ustar_filename_cp866.tar.Z.uu \
        libarchive/test/test_read_format_ustar_filename_eucjp.tar.Z.uu \
        libarchive/test/test_read_format_ustar_filename_koi8r.tar.Z.uu \
@@ -3462,6 +3574,8 @@ libarchive_test_EXTRA_DIST = \
        libarchive/test/test_read_format_zip_xz_multi.zipx.uu \
        libarchive/test/test_read_format_zip_zip64a.zip.uu \
        libarchive/test/test_read_format_zip_zip64b.zip.uu \
+       libarchive/test/test_read_format_zip_zstd.zipx.uu \
+       libarchive/test/test_read_format_zip_zstd_multi.zipx.uu \
        libarchive/test/test_read_large_splitted_rar_aa.uu \
        libarchive/test/test_read_large_splitted_rar_ab.uu \
        libarchive/test/test_read_large_splitted_rar_ac.uu \
@@ -3513,7 +3627,7 @@ bsdtar_DEPENDENCIES = libarchive.la libarchive_fe.la
 @STATIC_BSDTAR_TRUE@bsdtar_ccstatic = -DLIBARCHIVE_STATIC
 bsdtar_LDADD = libarchive.la libarchive_fe.la $(LTLIBICONV)
 bsdtar_CPPFLAGS = -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdtar_ccstatic) $(PLATFORMCPPFLAGS)
-bsdtar_LDFLAGS = $(bsdtar_ldstatic)
+bsdtar_LDFLAGS = $(bsdtar_ldstatic) $(GC_SECTIONS)
 bsdtar_EXTRA_DIST = \
        tar/bsdtar.1 \
        tar/bsdtar_windows.h \
@@ -3568,6 +3682,7 @@ bsdtar_test_SOURCES = \
        tar/test/test_option_fflags.c \
        tar/test/test_option_gid_gname.c \
        tar/test/test_option_grzip.c \
+       tar/test/test_option_ignore_zeros.c \
        tar/test/test_option_j.c \
        tar/test/test_option_k.c \
        tar/test/test_option_keep_newer_files.c \
@@ -3647,7 +3762,7 @@ bsdcpio_DEPENDENCIES = libarchive.la libarchive_fe.la
 @STATIC_BSDCPIO_TRUE@bsdcpio_ccstatic = -DLIBARCHIVE_STATIC
 bsdcpio_LDADD = libarchive_fe.la libarchive.la $(LTLIBICONV)
 bsdcpio_CPPFLAGS = -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdcpio_ccstatic) $(PLATFORMCPPFLAGS)
-bsdcpio_LDFLAGS = $(bsdcpio_ldstatic)
+bsdcpio_LDFLAGS = $(bsdcpio_ldstatic) $(GC_SECTIONS)
 bsdcpio_EXTRA_DIST = \
        cpio/bsdcpio.1 \
        cpio/cpio_windows.h \
@@ -3774,7 +3889,7 @@ bsdcat_DEPENDENCIES = libarchive.la libarchive_fe.la
 @STATIC_BSDCAT_TRUE@bsdcat_ccstatic = -DLIBARCHIVE_STATIC
 bsdcat_LDADD = libarchive_fe.la libarchive.la $(LTLIBICONV)
 bsdcat_CPPFLAGS = -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdcat_ccstatic) $(PLATFORMCPPFLAGS)
-bsdcat_LDFLAGS = $(bsdcat_ldstatic)
+bsdcat_LDFLAGS = $(bsdcat_ldstatic) $(GC_SECTIONS)
 bsdcat_EXTRA_DIST = \
        cat/bsdcat.1 \
        cat/CMakeLists.txt
@@ -3838,6 +3953,80 @@ bsdcat_test_EXTRA_DIST = \
        cat/test/test_expand.xz.uu \
        cat/test/CMakeLists.txt
 
+
+#
+#
+# bsdunzip source, docs, etc.
+#
+#
+bsdunzip_SOURCES = unzip/bsdunzip.c unzip/bsdunzip.h \
+       unzip/bsdunzip_platform.h unzip/cmdline.c unzip/la_getline.c \
+       unzip/la_queue.h $(am__append_10)
+bsdunzip_DEPENDENCIES = libarchive.la libarchive_fe.la
+@STATIC_BSDUNZIP_FALSE@bsdunzip_ldstatic = 
+@STATIC_BSDUNZIP_TRUE@bsdunzip_ldstatic = -static
+@STATIC_BSDUNZIP_FALSE@bsdunzip_ccstatic = 
+@STATIC_BSDUNZIP_TRUE@bsdunzip_ccstatic = -DLIBARCHIVE_STATIC
+bsdunzip_LDADD = libarchive_fe.la libarchive.la $(LTLIBICONV)
+bsdunzip_CPPFLAGS = -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe $(bsdunzip_ccstatic) $(PLATFORMCPPFLAGS)
+bsdunzip_LDFLAGS = $(bsdunzip_ldstatic) $(GC_SECTIONS)
+bsdunzip_EXTRA_DIST = \
+       unzip/bsdunzip.1 \
+       unzip/CMakeLists.txt
+
+@BUILD_BSDUNZIP_FALSE@bsdunzip_man_MANS = 
+
+# Manpages to install
+@BUILD_BSDUNZIP_TRUE@bsdunzip_man_MANS = unzip/bsdunzip.1
+@BUILD_BSDUNZIP_FALSE@bsdunzip_programs = 
+@BUILD_BSDUNZIP_TRUE@bsdunzip_programs = bsdunzip
+
+#
+# bsdunzip_test
+#
+bsdunzip_test_SOURCES = \
+       $(test_utils_SOURCES) \
+       unzip/test/test.h \
+       unzip/test/test_0.c \
+       unzip/test/test_basic.c \
+       unzip/test/test_glob.c \
+       unzip/test/test_not_exist.c \
+       unzip/test/test_singlefile.c \
+       unzip/test/test_C.c \
+       unzip/test/test_p.c \
+       unzip/test/test_d.c \
+       unzip/test/test_j.c \
+       unzip/test/test_L.c \
+       unzip/test/test_n.c \
+       unzip/test/test_o.c \
+       unzip/test/test_q.c \
+       unzip/test/test_t.c \
+       unzip/test/test_t_bad.c \
+       unzip/test/test_version.c \
+       unzip/test/test_x.c \
+       unzip/test/test_Z1.c \
+       unzip/test/test_P_encryption.c
+
+bsdunzip_test_CPPFLAGS = \
+       -I$(top_srcdir)/libarchive -I$(top_srcdir)/libarchive_fe \
+       -I$(top_srcdir)/test_utils \
+       -I$(top_srcdir)/unzip -I$(top_srcdir)/unzip/test \
+       -I$(top_builddir)/unzip/test \
+       $(PLATFORMCPPFLAGS)
+
+bsdunzip_test_LDADD = libarchive_fe.la
+@BUILD_BSDUNZIP_FALSE@bsdunzip_test_programs = 
+@BUILD_BSDUNZIP_TRUE@bsdunzip_test_programs = bsdunzip_test
+@BUILD_BSDUNZIP_FALSE@bsdunzip_TESTS_ENVIRONMENT = 
+@BUILD_BSDUNZIP_TRUE@bsdunzip_TESTS_ENVIRONMENT = BSDUNZIP=`cd $(top_builddir);/bin/pwd`/bsdunzip$(EXEEXT) BSDUNZIP_TEST_FILES=`cd $(top_srcdir);/bin/pwd`/unzip/test
+bsdunzip_test_EXTRA_DIST = \
+       unzip/test/list.h \
+       unzip/test/test_basic.zip.uu \
+       unzip/test/test_encrypted.zip.uu \
+       unzip/test/test_singlefile.zip.uu \
+       unzip/test/test_t_bad.zip.uu \
+       unzip/test/CMakeLists.txt
+
 all: $(BUILT_SOURCES) config.h
        $(MAKE) $(AM_MAKEFLAGS) all-am
 
@@ -4662,6 +4851,8 @@ tar/test/bsdtar_test-test_option_gid_gname.$(OBJEXT):  \
        tar/test/$(am__dirstamp) tar/test/$(DEPDIR)/$(am__dirstamp)
 tar/test/bsdtar_test-test_option_grzip.$(OBJEXT):  \
        tar/test/$(am__dirstamp) tar/test/$(DEPDIR)/$(am__dirstamp)
+tar/test/bsdtar_test-test_option_ignore_zeros.$(OBJEXT):  \
+       tar/test/$(am__dirstamp) tar/test/$(DEPDIR)/$(am__dirstamp)
 tar/test/bsdtar_test-test_option_j.$(OBJEXT):  \
        tar/test/$(am__dirstamp) tar/test/$(DEPDIR)/$(am__dirstamp)
 tar/test/bsdtar_test-test_option_k.$(OBJEXT):  \
@@ -4724,6 +4915,84 @@ tar/test/bsdtar_test-test_windows.$(OBJEXT): tar/test/$(am__dirstamp) \
 bsdtar_test$(EXEEXT): $(bsdtar_test_OBJECTS) $(bsdtar_test_DEPENDENCIES) $(EXTRA_bsdtar_test_DEPENDENCIES) 
        @rm -f bsdtar_test$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(bsdtar_test_OBJECTS) $(bsdtar_test_LDADD) $(LIBS)
+unzip/$(am__dirstamp):
+       @$(MKDIR_P) unzip
+       @: > unzip/$(am__dirstamp)
+unzip/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) unzip/$(DEPDIR)
+       @: > unzip/$(DEPDIR)/$(am__dirstamp)
+unzip/bsdunzip-bsdunzip.$(OBJEXT): unzip/$(am__dirstamp) \
+       unzip/$(DEPDIR)/$(am__dirstamp)
+unzip/bsdunzip-cmdline.$(OBJEXT): unzip/$(am__dirstamp) \
+       unzip/$(DEPDIR)/$(am__dirstamp)
+unzip/bsdunzip-la_getline.$(OBJEXT): unzip/$(am__dirstamp) \
+       unzip/$(DEPDIR)/$(am__dirstamp)
+
+bsdunzip$(EXEEXT): $(bsdunzip_OBJECTS) $(bsdunzip_DEPENDENCIES) $(EXTRA_bsdunzip_DEPENDENCIES) 
+       @rm -f bsdunzip$(EXEEXT)
+       $(AM_V_CCLD)$(bsdunzip_LINK) $(bsdunzip_OBJECTS) $(bsdunzip_LDADD) $(LIBS)
+test_utils/bsdunzip_test-test_utils.$(OBJEXT):  \
+       test_utils/$(am__dirstamp) \
+       test_utils/$(DEPDIR)/$(am__dirstamp)
+test_utils/bsdunzip_test-test_main.$(OBJEXT):  \
+       test_utils/$(am__dirstamp) \
+       test_utils/$(DEPDIR)/$(am__dirstamp)
+unzip/test/$(am__dirstamp):
+       @$(MKDIR_P) unzip/test
+       @: > unzip/test/$(am__dirstamp)
+unzip/test/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) unzip/test/$(DEPDIR)
+       @: > unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_0.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_basic.$(OBJEXT):  \
+       unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_glob.$(OBJEXT):  \
+       unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_not_exist.$(OBJEXT):  \
+       unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_singlefile.$(OBJEXT):  \
+       unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_C.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_p.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_d.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_j.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_L.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_n.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_o.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_q.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_t.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_t_bad.$(OBJEXT):  \
+       unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_version.$(OBJEXT):  \
+       unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_x.$(OBJEXT): unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_Z1.$(OBJEXT):  \
+       unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+unzip/test/bsdunzip_test-test_P_encryption.$(OBJEXT):  \
+       unzip/test/$(am__dirstamp) \
+       unzip/test/$(DEPDIR)/$(am__dirstamp)
+
+bsdunzip_test$(EXEEXT): $(bsdunzip_test_OBJECTS) $(bsdunzip_test_DEPENDENCIES) $(EXTRA_bsdunzip_test_DEPENDENCIES) 
+       @rm -f bsdunzip_test$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(bsdunzip_test_OBJECTS) $(bsdunzip_test_LDADD) $(LIBS)
 libarchive/test-archive_acl.$(OBJEXT): libarchive/$(am__dirstamp) \
        libarchive/$(DEPDIR)/$(am__dirstamp)
 libarchive/test-archive_check_magic.$(OBJEXT):  \
@@ -5274,6 +5543,9 @@ libarchive/test/test-test_compat_solaris_pax_sparse.$(OBJEXT):  \
 libarchive/test/test-test_compat_star_acl.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
+libarchive/test/test-test_compat_tar_directory.$(OBJEXT):  \
+       libarchive/test/$(am__dirstamp) \
+       libarchive/test/$(DEPDIR)/$(am__dirstamp)
 libarchive/test/test-test_compat_tar_hardlink.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
@@ -5376,6 +5648,9 @@ libarchive/test/test-test_read_filter_program_signature.$(OBJEXT):  \
 libarchive/test/test-test_read_filter_uudecode.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
+libarchive/test/test-test_read_filter_uudecode_raw.$(OBJEXT):  \
+       libarchive/test/$(am__dirstamp) \
+       libarchive/test/$(DEPDIR)/$(am__dirstamp)
 libarchive/test/test-test_read_format_7zip.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
@@ -5538,6 +5813,9 @@ libarchive/test/test-test_read_format_rar_encryption_partially.$(OBJEXT):  \
 libarchive/test/test-test_read_format_rar_encryption_header.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
+libarchive/test/test-test_read_format_rar_filter.$(OBJEXT):  \
+       libarchive/test/$(am__dirstamp) \
+       libarchive/test/$(DEPDIR)/$(am__dirstamp)
 libarchive/test/test-test_read_format_rar_invalid1.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
@@ -5565,6 +5843,9 @@ libarchive/test/test-test_read_format_tar_empty_with_gnulabel.$(OBJEXT):  \
 libarchive/test/test-test_read_format_tar_filename.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
+libarchive/test/test-test_read_format_tar_invalid_pax_size.$(OBJEXT):  \
+       libarchive/test/$(am__dirstamp) \
+       libarchive/test/$(DEPDIR)/$(am__dirstamp)
 libarchive/test/test-test_read_format_tbz.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
@@ -5907,6 +6188,9 @@ libarchive/test/test-test_write_format_zip.$(OBJEXT):  \
 libarchive/test/test-test_write_format_zip_compression_store.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
+libarchive/test/test-test_write_format_zip_entry_size_unset.$(OBJEXT):  \
+       libarchive/test/$(am__dirstamp) \
+       libarchive/test/$(DEPDIR)/$(am__dirstamp)
 libarchive/test/test-test_write_format_zip_empty.$(OBJEXT):  \
        libarchive/test/$(am__dirstamp) \
        libarchive/test/$(DEPDIR)/$(am__dirstamp)
@@ -5956,6 +6240,8 @@ mostlyclean-compile:
        -rm -f tar/*.$(OBJEXT)
        -rm -f tar/test/*.$(OBJEXT)
        -rm -f test_utils/*.$(OBJEXT)
+       -rm -f unzip/*.$(OBJEXT)
+       -rm -f unzip/test/*.$(OBJEXT)
 
 distclean-compile:
        -rm -f *.tab.c
@@ -6349,6 +6635,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_compat_solaris_pax_sparse.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_compat_solaris_tar_acl.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_compat_star_acl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_compat_tar_hardlink.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_compat_uudecode.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_compat_uudecode_large.Po@am__quote@ # am--include-marker
@@ -6383,6 +6670,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_filter_program.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_filter_program_signature.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_7zip.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_data.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_header.Po@am__quote@ # am--include-marker
@@ -6438,6 +6726,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_data.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_header.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_partially.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_rar_invalid1.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_raw.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar.Po@am__quote@ # am--include-marker
@@ -6446,6 +6735,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_pax.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_with_gnulabel.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar_filename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tbz.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tgz.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_read_format_tlz.Po@am__quote@ # am--include-marker
@@ -6562,6 +6852,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_write_format_zip_compression_store.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty_zip64.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_write_format_zip_file.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_write_format_zip_file_zip64.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@libarchive/test/$(DEPDIR)/test-test_write_format_zip_large.Po@am__quote@ # am--include-marker
@@ -6617,6 +6908,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_option_fflags.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_option_gid_gname.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_option_grzip.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_option_j.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_option_k.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@tar/test/$(DEPDIR)/bsdtar_test-test_option_keep_newer_files.Po@am__quote@ # am--include-marker
@@ -6652,8 +6944,32 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@test_utils/$(DEPDIR)/bsdcpio_test-test_utils.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@test_utils/$(DEPDIR)/bsdtar_test-test_main.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@test_utils/$(DEPDIR)/bsdtar_test-test_utils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@test_utils/$(DEPDIR)/bsdunzip_test-test_main.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@test_utils/$(DEPDIR)/libarchive_test-test_main.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@test_utils/$(DEPDIR)/libarchive_test-test_utils.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/$(DEPDIR)/bsdunzip-bsdunzip.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/$(DEPDIR)/bsdunzip-cmdline.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/$(DEPDIR)/bsdunzip-la_getline.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Po@am__quote@ # am--include-marker
 
 $(am__depfiles_remade):
        @$(MKDIR_P) $(@D)
@@ -8414,6 +8730,20 @@ tar/test/bsdtar_test-test_option_grzip.obj: tar/test/test_option_grzip.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tar/test/bsdtar_test-test_option_grzip.obj `if test -f 'tar/test/test_option_grzip.c'; then $(CYGPATH_W) 'tar/test/test_option_grzip.c'; else $(CYGPATH_W) '$(srcdir)/tar/test/test_option_grzip.c'; fi`
 
+tar/test/bsdtar_test-test_option_ignore_zeros.o: tar/test/test_option_ignore_zeros.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tar/test/bsdtar_test-test_option_ignore_zeros.o -MD -MP -MF tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Tpo -c -o tar/test/bsdtar_test-test_option_ignore_zeros.o `test -f 'tar/test/test_option_ignore_zeros.c' || echo '$(srcdir)/'`tar/test/test_option_ignore_zeros.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Tpo tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tar/test/test_option_ignore_zeros.c' object='tar/test/bsdtar_test-test_option_ignore_zeros.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tar/test/bsdtar_test-test_option_ignore_zeros.o `test -f 'tar/test/test_option_ignore_zeros.c' || echo '$(srcdir)/'`tar/test/test_option_ignore_zeros.c
+
+tar/test/bsdtar_test-test_option_ignore_zeros.obj: tar/test/test_option_ignore_zeros.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tar/test/bsdtar_test-test_option_ignore_zeros.obj -MD -MP -MF tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Tpo -c -o tar/test/bsdtar_test-test_option_ignore_zeros.obj `if test -f 'tar/test/test_option_ignore_zeros.c'; then $(CYGPATH_W) 'tar/test/test_option_ignore_zeros.c'; else $(CYGPATH_W) '$(srcdir)/tar/test/test_option_ignore_zeros.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Tpo tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tar/test/test_option_ignore_zeros.c' object='tar/test/bsdtar_test-test_option_ignore_zeros.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tar/test/bsdtar_test-test_option_ignore_zeros.obj `if test -f 'tar/test/test_option_ignore_zeros.c'; then $(CYGPATH_W) 'tar/test/test_option_ignore_zeros.c'; else $(CYGPATH_W) '$(srcdir)/tar/test/test_option_ignore_zeros.c'; fi`
+
 tar/test/bsdtar_test-test_option_j.o: tar/test/test_option_j.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tar/test/bsdtar_test-test_option_j.o -MD -MP -MF tar/test/$(DEPDIR)/bsdtar_test-test_option_j.Tpo -c -o tar/test/bsdtar_test-test_option_j.o `test -f 'tar/test/test_option_j.c' || echo '$(srcdir)/'`tar/test/test_option_j.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tar/test/$(DEPDIR)/bsdtar_test-test_option_j.Tpo tar/test/$(DEPDIR)/bsdtar_test-test_option_j.Po
@@ -8820,6 +9150,342 @@ tar/test/bsdtar_test-test_windows.obj: tar/test/test_windows.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdtar_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tar/test/bsdtar_test-test_windows.obj `if test -f 'tar/test/test_windows.c'; then $(CYGPATH_W) 'tar/test/test_windows.c'; else $(CYGPATH_W) '$(srcdir)/tar/test/test_windows.c'; fi`
 
+unzip/bsdunzip-bsdunzip.o: unzip/bsdunzip.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/bsdunzip-bsdunzip.o -MD -MP -MF unzip/$(DEPDIR)/bsdunzip-bsdunzip.Tpo -c -o unzip/bsdunzip-bsdunzip.o `test -f 'unzip/bsdunzip.c' || echo '$(srcdir)/'`unzip/bsdunzip.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/$(DEPDIR)/bsdunzip-bsdunzip.Tpo unzip/$(DEPDIR)/bsdunzip-bsdunzip.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/bsdunzip.c' object='unzip/bsdunzip-bsdunzip.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/bsdunzip-bsdunzip.o `test -f 'unzip/bsdunzip.c' || echo '$(srcdir)/'`unzip/bsdunzip.c
+
+unzip/bsdunzip-bsdunzip.obj: unzip/bsdunzip.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/bsdunzip-bsdunzip.obj -MD -MP -MF unzip/$(DEPDIR)/bsdunzip-bsdunzip.Tpo -c -o unzip/bsdunzip-bsdunzip.obj `if test -f 'unzip/bsdunzip.c'; then $(CYGPATH_W) 'unzip/bsdunzip.c'; else $(CYGPATH_W) '$(srcdir)/unzip/bsdunzip.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/$(DEPDIR)/bsdunzip-bsdunzip.Tpo unzip/$(DEPDIR)/bsdunzip-bsdunzip.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/bsdunzip.c' object='unzip/bsdunzip-bsdunzip.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/bsdunzip-bsdunzip.obj `if test -f 'unzip/bsdunzip.c'; then $(CYGPATH_W) 'unzip/bsdunzip.c'; else $(CYGPATH_W) '$(srcdir)/unzip/bsdunzip.c'; fi`
+
+unzip/bsdunzip-cmdline.o: unzip/cmdline.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/bsdunzip-cmdline.o -MD -MP -MF unzip/$(DEPDIR)/bsdunzip-cmdline.Tpo -c -o unzip/bsdunzip-cmdline.o `test -f 'unzip/cmdline.c' || echo '$(srcdir)/'`unzip/cmdline.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/$(DEPDIR)/bsdunzip-cmdline.Tpo unzip/$(DEPDIR)/bsdunzip-cmdline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/cmdline.c' object='unzip/bsdunzip-cmdline.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/bsdunzip-cmdline.o `test -f 'unzip/cmdline.c' || echo '$(srcdir)/'`unzip/cmdline.c
+
+unzip/bsdunzip-cmdline.obj: unzip/cmdline.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/bsdunzip-cmdline.obj -MD -MP -MF unzip/$(DEPDIR)/bsdunzip-cmdline.Tpo -c -o unzip/bsdunzip-cmdline.obj `if test -f 'unzip/cmdline.c'; then $(CYGPATH_W) 'unzip/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/unzip/cmdline.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/$(DEPDIR)/bsdunzip-cmdline.Tpo unzip/$(DEPDIR)/bsdunzip-cmdline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/cmdline.c' object='unzip/bsdunzip-cmdline.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/bsdunzip-cmdline.obj `if test -f 'unzip/cmdline.c'; then $(CYGPATH_W) 'unzip/cmdline.c'; else $(CYGPATH_W) '$(srcdir)/unzip/cmdline.c'; fi`
+
+unzip/bsdunzip-la_getline.o: unzip/la_getline.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/bsdunzip-la_getline.o -MD -MP -MF unzip/$(DEPDIR)/bsdunzip-la_getline.Tpo -c -o unzip/bsdunzip-la_getline.o `test -f 'unzip/la_getline.c' || echo '$(srcdir)/'`unzip/la_getline.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/$(DEPDIR)/bsdunzip-la_getline.Tpo unzip/$(DEPDIR)/bsdunzip-la_getline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/la_getline.c' object='unzip/bsdunzip-la_getline.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/bsdunzip-la_getline.o `test -f 'unzip/la_getline.c' || echo '$(srcdir)/'`unzip/la_getline.c
+
+unzip/bsdunzip-la_getline.obj: unzip/la_getline.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/bsdunzip-la_getline.obj -MD -MP -MF unzip/$(DEPDIR)/bsdunzip-la_getline.Tpo -c -o unzip/bsdunzip-la_getline.obj `if test -f 'unzip/la_getline.c'; then $(CYGPATH_W) 'unzip/la_getline.c'; else $(CYGPATH_W) '$(srcdir)/unzip/la_getline.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/$(DEPDIR)/bsdunzip-la_getline.Tpo unzip/$(DEPDIR)/bsdunzip-la_getline.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/la_getline.c' object='unzip/bsdunzip-la_getline.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/bsdunzip-la_getline.obj `if test -f 'unzip/la_getline.c'; then $(CYGPATH_W) 'unzip/la_getline.c'; else $(CYGPATH_W) '$(srcdir)/unzip/la_getline.c'; fi`
+
+test_utils/bsdunzip_test-test_utils.o: test_utils/test_utils.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_utils/bsdunzip_test-test_utils.o -MD -MP -MF test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Tpo -c -o test_utils/bsdunzip_test-test_utils.o `test -f 'test_utils/test_utils.c' || echo '$(srcdir)/'`test_utils/test_utils.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Tpo test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='test_utils/test_utils.c' object='test_utils/bsdunzip_test-test_utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_utils/bsdunzip_test-test_utils.o `test -f 'test_utils/test_utils.c' || echo '$(srcdir)/'`test_utils/test_utils.c
+
+test_utils/bsdunzip_test-test_utils.obj: test_utils/test_utils.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_utils/bsdunzip_test-test_utils.obj -MD -MP -MF test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Tpo -c -o test_utils/bsdunzip_test-test_utils.obj `if test -f 'test_utils/test_utils.c'; then $(CYGPATH_W) 'test_utils/test_utils.c'; else $(CYGPATH_W) '$(srcdir)/test_utils/test_utils.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Tpo test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='test_utils/test_utils.c' object='test_utils/bsdunzip_test-test_utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_utils/bsdunzip_test-test_utils.obj `if test -f 'test_utils/test_utils.c'; then $(CYGPATH_W) 'test_utils/test_utils.c'; else $(CYGPATH_W) '$(srcdir)/test_utils/test_utils.c'; fi`
+
+test_utils/bsdunzip_test-test_main.o: test_utils/test_main.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_utils/bsdunzip_test-test_main.o -MD -MP -MF test_utils/$(DEPDIR)/bsdunzip_test-test_main.Tpo -c -o test_utils/bsdunzip_test-test_main.o `test -f 'test_utils/test_main.c' || echo '$(srcdir)/'`test_utils/test_main.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) test_utils/$(DEPDIR)/bsdunzip_test-test_main.Tpo test_utils/$(DEPDIR)/bsdunzip_test-test_main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='test_utils/test_main.c' object='test_utils/bsdunzip_test-test_main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_utils/bsdunzip_test-test_main.o `test -f 'test_utils/test_main.c' || echo '$(srcdir)/'`test_utils/test_main.c
+
+test_utils/bsdunzip_test-test_main.obj: test_utils/test_main.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test_utils/bsdunzip_test-test_main.obj -MD -MP -MF test_utils/$(DEPDIR)/bsdunzip_test-test_main.Tpo -c -o test_utils/bsdunzip_test-test_main.obj `if test -f 'test_utils/test_main.c'; then $(CYGPATH_W) 'test_utils/test_main.c'; else $(CYGPATH_W) '$(srcdir)/test_utils/test_main.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) test_utils/$(DEPDIR)/bsdunzip_test-test_main.Tpo test_utils/$(DEPDIR)/bsdunzip_test-test_main.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='test_utils/test_main.c' object='test_utils/bsdunzip_test-test_main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test_utils/bsdunzip_test-test_main.obj `if test -f 'test_utils/test_main.c'; then $(CYGPATH_W) 'test_utils/test_main.c'; else $(CYGPATH_W) '$(srcdir)/test_utils/test_main.c'; fi`
+
+unzip/test/bsdunzip_test-test_0.o: unzip/test/test_0.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_0.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Tpo -c -o unzip/test/bsdunzip_test-test_0.o `test -f 'unzip/test/test_0.c' || echo '$(srcdir)/'`unzip/test/test_0.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_0.c' object='unzip/test/bsdunzip_test-test_0.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_0.o `test -f 'unzip/test/test_0.c' || echo '$(srcdir)/'`unzip/test/test_0.c
+
+unzip/test/bsdunzip_test-test_0.obj: unzip/test/test_0.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_0.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Tpo -c -o unzip/test/bsdunzip_test-test_0.obj `if test -f 'unzip/test/test_0.c'; then $(CYGPATH_W) 'unzip/test/test_0.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_0.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_0.c' object='unzip/test/bsdunzip_test-test_0.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_0.obj `if test -f 'unzip/test/test_0.c'; then $(CYGPATH_W) 'unzip/test/test_0.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_0.c'; fi`
+
+unzip/test/bsdunzip_test-test_basic.o: unzip/test/test_basic.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_basic.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Tpo -c -o unzip/test/bsdunzip_test-test_basic.o `test -f 'unzip/test/test_basic.c' || echo '$(srcdir)/'`unzip/test/test_basic.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_basic.c' object='unzip/test/bsdunzip_test-test_basic.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_basic.o `test -f 'unzip/test/test_basic.c' || echo '$(srcdir)/'`unzip/test/test_basic.c
+
+unzip/test/bsdunzip_test-test_basic.obj: unzip/test/test_basic.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_basic.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Tpo -c -o unzip/test/bsdunzip_test-test_basic.obj `if test -f 'unzip/test/test_basic.c'; then $(CYGPATH_W) 'unzip/test/test_basic.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_basic.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_basic.c' object='unzip/test/bsdunzip_test-test_basic.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_basic.obj `if test -f 'unzip/test/test_basic.c'; then $(CYGPATH_W) 'unzip/test/test_basic.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_basic.c'; fi`
+
+unzip/test/bsdunzip_test-test_glob.o: unzip/test/test_glob.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_glob.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Tpo -c -o unzip/test/bsdunzip_test-test_glob.o `test -f 'unzip/test/test_glob.c' || echo '$(srcdir)/'`unzip/test/test_glob.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_glob.c' object='unzip/test/bsdunzip_test-test_glob.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_glob.o `test -f 'unzip/test/test_glob.c' || echo '$(srcdir)/'`unzip/test/test_glob.c
+
+unzip/test/bsdunzip_test-test_glob.obj: unzip/test/test_glob.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_glob.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Tpo -c -o unzip/test/bsdunzip_test-test_glob.obj `if test -f 'unzip/test/test_glob.c'; then $(CYGPATH_W) 'unzip/test/test_glob.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_glob.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_glob.c' object='unzip/test/bsdunzip_test-test_glob.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_glob.obj `if test -f 'unzip/test/test_glob.c'; then $(CYGPATH_W) 'unzip/test/test_glob.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_glob.c'; fi`
+
+unzip/test/bsdunzip_test-test_not_exist.o: unzip/test/test_not_exist.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_not_exist.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Tpo -c -o unzip/test/bsdunzip_test-test_not_exist.o `test -f 'unzip/test/test_not_exist.c' || echo '$(srcdir)/'`unzip/test/test_not_exist.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_not_exist.c' object='unzip/test/bsdunzip_test-test_not_exist.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_not_exist.o `test -f 'unzip/test/test_not_exist.c' || echo '$(srcdir)/'`unzip/test/test_not_exist.c
+
+unzip/test/bsdunzip_test-test_not_exist.obj: unzip/test/test_not_exist.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_not_exist.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Tpo -c -o unzip/test/bsdunzip_test-test_not_exist.obj `if test -f 'unzip/test/test_not_exist.c'; then $(CYGPATH_W) 'unzip/test/test_not_exist.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_not_exist.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_not_exist.c' object='unzip/test/bsdunzip_test-test_not_exist.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_not_exist.obj `if test -f 'unzip/test/test_not_exist.c'; then $(CYGPATH_W) 'unzip/test/test_not_exist.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_not_exist.c'; fi`
+
+unzip/test/bsdunzip_test-test_singlefile.o: unzip/test/test_singlefile.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_singlefile.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Tpo -c -o unzip/test/bsdunzip_test-test_singlefile.o `test -f 'unzip/test/test_singlefile.c' || echo '$(srcdir)/'`unzip/test/test_singlefile.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_singlefile.c' object='unzip/test/bsdunzip_test-test_singlefile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_singlefile.o `test -f 'unzip/test/test_singlefile.c' || echo '$(srcdir)/'`unzip/test/test_singlefile.c
+
+unzip/test/bsdunzip_test-test_singlefile.obj: unzip/test/test_singlefile.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_singlefile.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Tpo -c -o unzip/test/bsdunzip_test-test_singlefile.obj `if test -f 'unzip/test/test_singlefile.c'; then $(CYGPATH_W) 'unzip/test/test_singlefile.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_singlefile.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_singlefile.c' object='unzip/test/bsdunzip_test-test_singlefile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_singlefile.obj `if test -f 'unzip/test/test_singlefile.c'; then $(CYGPATH_W) 'unzip/test/test_singlefile.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_singlefile.c'; fi`
+
+unzip/test/bsdunzip_test-test_C.o: unzip/test/test_C.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_C.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Tpo -c -o unzip/test/bsdunzip_test-test_C.o `test -f 'unzip/test/test_C.c' || echo '$(srcdir)/'`unzip/test/test_C.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_C.c' object='unzip/test/bsdunzip_test-test_C.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_C.o `test -f 'unzip/test/test_C.c' || echo '$(srcdir)/'`unzip/test/test_C.c
+
+unzip/test/bsdunzip_test-test_C.obj: unzip/test/test_C.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_C.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Tpo -c -o unzip/test/bsdunzip_test-test_C.obj `if test -f 'unzip/test/test_C.c'; then $(CYGPATH_W) 'unzip/test/test_C.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_C.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_C.c' object='unzip/test/bsdunzip_test-test_C.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_C.obj `if test -f 'unzip/test/test_C.c'; then $(CYGPATH_W) 'unzip/test/test_C.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_C.c'; fi`
+
+unzip/test/bsdunzip_test-test_p.o: unzip/test/test_p.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_p.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Tpo -c -o unzip/test/bsdunzip_test-test_p.o `test -f 'unzip/test/test_p.c' || echo '$(srcdir)/'`unzip/test/test_p.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_p.c' object='unzip/test/bsdunzip_test-test_p.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_p.o `test -f 'unzip/test/test_p.c' || echo '$(srcdir)/'`unzip/test/test_p.c
+
+unzip/test/bsdunzip_test-test_p.obj: unzip/test/test_p.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_p.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Tpo -c -o unzip/test/bsdunzip_test-test_p.obj `if test -f 'unzip/test/test_p.c'; then $(CYGPATH_W) 'unzip/test/test_p.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_p.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_p.c' object='unzip/test/bsdunzip_test-test_p.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_p.obj `if test -f 'unzip/test/test_p.c'; then $(CYGPATH_W) 'unzip/test/test_p.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_p.c'; fi`
+
+unzip/test/bsdunzip_test-test_d.o: unzip/test/test_d.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_d.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Tpo -c -o unzip/test/bsdunzip_test-test_d.o `test -f 'unzip/test/test_d.c' || echo '$(srcdir)/'`unzip/test/test_d.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_d.c' object='unzip/test/bsdunzip_test-test_d.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_d.o `test -f 'unzip/test/test_d.c' || echo '$(srcdir)/'`unzip/test/test_d.c
+
+unzip/test/bsdunzip_test-test_d.obj: unzip/test/test_d.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_d.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Tpo -c -o unzip/test/bsdunzip_test-test_d.obj `if test -f 'unzip/test/test_d.c'; then $(CYGPATH_W) 'unzip/test/test_d.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_d.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_d.c' object='unzip/test/bsdunzip_test-test_d.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_d.obj `if test -f 'unzip/test/test_d.c'; then $(CYGPATH_W) 'unzip/test/test_d.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_d.c'; fi`
+
+unzip/test/bsdunzip_test-test_j.o: unzip/test/test_j.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_j.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Tpo -c -o unzip/test/bsdunzip_test-test_j.o `test -f 'unzip/test/test_j.c' || echo '$(srcdir)/'`unzip/test/test_j.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_j.c' object='unzip/test/bsdunzip_test-test_j.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_j.o `test -f 'unzip/test/test_j.c' || echo '$(srcdir)/'`unzip/test/test_j.c
+
+unzip/test/bsdunzip_test-test_j.obj: unzip/test/test_j.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_j.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Tpo -c -o unzip/test/bsdunzip_test-test_j.obj `if test -f 'unzip/test/test_j.c'; then $(CYGPATH_W) 'unzip/test/test_j.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_j.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_j.c' object='unzip/test/bsdunzip_test-test_j.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_j.obj `if test -f 'unzip/test/test_j.c'; then $(CYGPATH_W) 'unzip/test/test_j.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_j.c'; fi`
+
+unzip/test/bsdunzip_test-test_L.o: unzip/test/test_L.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_L.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Tpo -c -o unzip/test/bsdunzip_test-test_L.o `test -f 'unzip/test/test_L.c' || echo '$(srcdir)/'`unzip/test/test_L.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_L.c' object='unzip/test/bsdunzip_test-test_L.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_L.o `test -f 'unzip/test/test_L.c' || echo '$(srcdir)/'`unzip/test/test_L.c
+
+unzip/test/bsdunzip_test-test_L.obj: unzip/test/test_L.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_L.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Tpo -c -o unzip/test/bsdunzip_test-test_L.obj `if test -f 'unzip/test/test_L.c'; then $(CYGPATH_W) 'unzip/test/test_L.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_L.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_L.c' object='unzip/test/bsdunzip_test-test_L.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_L.obj `if test -f 'unzip/test/test_L.c'; then $(CYGPATH_W) 'unzip/test/test_L.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_L.c'; fi`
+
+unzip/test/bsdunzip_test-test_n.o: unzip/test/test_n.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_n.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Tpo -c -o unzip/test/bsdunzip_test-test_n.o `test -f 'unzip/test/test_n.c' || echo '$(srcdir)/'`unzip/test/test_n.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_n.c' object='unzip/test/bsdunzip_test-test_n.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_n.o `test -f 'unzip/test/test_n.c' || echo '$(srcdir)/'`unzip/test/test_n.c
+
+unzip/test/bsdunzip_test-test_n.obj: unzip/test/test_n.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_n.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Tpo -c -o unzip/test/bsdunzip_test-test_n.obj `if test -f 'unzip/test/test_n.c'; then $(CYGPATH_W) 'unzip/test/test_n.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_n.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_n.c' object='unzip/test/bsdunzip_test-test_n.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_n.obj `if test -f 'unzip/test/test_n.c'; then $(CYGPATH_W) 'unzip/test/test_n.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_n.c'; fi`
+
+unzip/test/bsdunzip_test-test_o.o: unzip/test/test_o.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_o.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Tpo -c -o unzip/test/bsdunzip_test-test_o.o `test -f 'unzip/test/test_o.c' || echo '$(srcdir)/'`unzip/test/test_o.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_o.c' object='unzip/test/bsdunzip_test-test_o.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_o.o `test -f 'unzip/test/test_o.c' || echo '$(srcdir)/'`unzip/test/test_o.c
+
+unzip/test/bsdunzip_test-test_o.obj: unzip/test/test_o.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_o.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Tpo -c -o unzip/test/bsdunzip_test-test_o.obj `if test -f 'unzip/test/test_o.c'; then $(CYGPATH_W) 'unzip/test/test_o.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_o.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_o.c' object='unzip/test/bsdunzip_test-test_o.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_o.obj `if test -f 'unzip/test/test_o.c'; then $(CYGPATH_W) 'unzip/test/test_o.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_o.c'; fi`
+
+unzip/test/bsdunzip_test-test_q.o: unzip/test/test_q.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_q.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Tpo -c -o unzip/test/bsdunzip_test-test_q.o `test -f 'unzip/test/test_q.c' || echo '$(srcdir)/'`unzip/test/test_q.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_q.c' object='unzip/test/bsdunzip_test-test_q.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_q.o `test -f 'unzip/test/test_q.c' || echo '$(srcdir)/'`unzip/test/test_q.c
+
+unzip/test/bsdunzip_test-test_q.obj: unzip/test/test_q.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_q.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Tpo -c -o unzip/test/bsdunzip_test-test_q.obj `if test -f 'unzip/test/test_q.c'; then $(CYGPATH_W) 'unzip/test/test_q.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_q.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_q.c' object='unzip/test/bsdunzip_test-test_q.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_q.obj `if test -f 'unzip/test/test_q.c'; then $(CYGPATH_W) 'unzip/test/test_q.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_q.c'; fi`
+
+unzip/test/bsdunzip_test-test_t.o: unzip/test/test_t.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_t.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Tpo -c -o unzip/test/bsdunzip_test-test_t.o `test -f 'unzip/test/test_t.c' || echo '$(srcdir)/'`unzip/test/test_t.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_t.c' object='unzip/test/bsdunzip_test-test_t.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_t.o `test -f 'unzip/test/test_t.c' || echo '$(srcdir)/'`unzip/test/test_t.c
+
+unzip/test/bsdunzip_test-test_t.obj: unzip/test/test_t.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_t.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Tpo -c -o unzip/test/bsdunzip_test-test_t.obj `if test -f 'unzip/test/test_t.c'; then $(CYGPATH_W) 'unzip/test/test_t.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_t.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_t.c' object='unzip/test/bsdunzip_test-test_t.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_t.obj `if test -f 'unzip/test/test_t.c'; then $(CYGPATH_W) 'unzip/test/test_t.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_t.c'; fi`
+
+unzip/test/bsdunzip_test-test_t_bad.o: unzip/test/test_t_bad.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_t_bad.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Tpo -c -o unzip/test/bsdunzip_test-test_t_bad.o `test -f 'unzip/test/test_t_bad.c' || echo '$(srcdir)/'`unzip/test/test_t_bad.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_t_bad.c' object='unzip/test/bsdunzip_test-test_t_bad.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_t_bad.o `test -f 'unzip/test/test_t_bad.c' || echo '$(srcdir)/'`unzip/test/test_t_bad.c
+
+unzip/test/bsdunzip_test-test_t_bad.obj: unzip/test/test_t_bad.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_t_bad.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Tpo -c -o unzip/test/bsdunzip_test-test_t_bad.obj `if test -f 'unzip/test/test_t_bad.c'; then $(CYGPATH_W) 'unzip/test/test_t_bad.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_t_bad.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_t_bad.c' object='unzip/test/bsdunzip_test-test_t_bad.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_t_bad.obj `if test -f 'unzip/test/test_t_bad.c'; then $(CYGPATH_W) 'unzip/test/test_t_bad.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_t_bad.c'; fi`
+
+unzip/test/bsdunzip_test-test_version.o: unzip/test/test_version.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_version.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Tpo -c -o unzip/test/bsdunzip_test-test_version.o `test -f 'unzip/test/test_version.c' || echo '$(srcdir)/'`unzip/test/test_version.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_version.c' object='unzip/test/bsdunzip_test-test_version.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_version.o `test -f 'unzip/test/test_version.c' || echo '$(srcdir)/'`unzip/test/test_version.c
+
+unzip/test/bsdunzip_test-test_version.obj: unzip/test/test_version.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_version.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Tpo -c -o unzip/test/bsdunzip_test-test_version.obj `if test -f 'unzip/test/test_version.c'; then $(CYGPATH_W) 'unzip/test/test_version.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_version.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_version.c' object='unzip/test/bsdunzip_test-test_version.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_version.obj `if test -f 'unzip/test/test_version.c'; then $(CYGPATH_W) 'unzip/test/test_version.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_version.c'; fi`
+
+unzip/test/bsdunzip_test-test_x.o: unzip/test/test_x.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_x.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Tpo -c -o unzip/test/bsdunzip_test-test_x.o `test -f 'unzip/test/test_x.c' || echo '$(srcdir)/'`unzip/test/test_x.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_x.c' object='unzip/test/bsdunzip_test-test_x.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_x.o `test -f 'unzip/test/test_x.c' || echo '$(srcdir)/'`unzip/test/test_x.c
+
+unzip/test/bsdunzip_test-test_x.obj: unzip/test/test_x.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_x.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Tpo -c -o unzip/test/bsdunzip_test-test_x.obj `if test -f 'unzip/test/test_x.c'; then $(CYGPATH_W) 'unzip/test/test_x.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_x.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_x.c' object='unzip/test/bsdunzip_test-test_x.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_x.obj `if test -f 'unzip/test/test_x.c'; then $(CYGPATH_W) 'unzip/test/test_x.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_x.c'; fi`
+
+unzip/test/bsdunzip_test-test_Z1.o: unzip/test/test_Z1.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_Z1.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Tpo -c -o unzip/test/bsdunzip_test-test_Z1.o `test -f 'unzip/test/test_Z1.c' || echo '$(srcdir)/'`unzip/test/test_Z1.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_Z1.c' object='unzip/test/bsdunzip_test-test_Z1.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_Z1.o `test -f 'unzip/test/test_Z1.c' || echo '$(srcdir)/'`unzip/test/test_Z1.c
+
+unzip/test/bsdunzip_test-test_Z1.obj: unzip/test/test_Z1.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_Z1.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Tpo -c -o unzip/test/bsdunzip_test-test_Z1.obj `if test -f 'unzip/test/test_Z1.c'; then $(CYGPATH_W) 'unzip/test/test_Z1.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_Z1.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_Z1.c' object='unzip/test/bsdunzip_test-test_Z1.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_Z1.obj `if test -f 'unzip/test/test_Z1.c'; then $(CYGPATH_W) 'unzip/test/test_Z1.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_Z1.c'; fi`
+
+unzip/test/bsdunzip_test-test_P_encryption.o: unzip/test/test_P_encryption.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_P_encryption.o -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Tpo -c -o unzip/test/bsdunzip_test-test_P_encryption.o `test -f 'unzip/test/test_P_encryption.c' || echo '$(srcdir)/'`unzip/test/test_P_encryption.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_P_encryption.c' object='unzip/test/bsdunzip_test-test_P_encryption.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_P_encryption.o `test -f 'unzip/test/test_P_encryption.c' || echo '$(srcdir)/'`unzip/test/test_P_encryption.c
+
+unzip/test/bsdunzip_test-test_P_encryption.obj: unzip/test/test_P_encryption.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unzip/test/bsdunzip_test-test_P_encryption.obj -MD -MP -MF unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Tpo -c -o unzip/test/bsdunzip_test-test_P_encryption.obj `if test -f 'unzip/test/test_P_encryption.c'; then $(CYGPATH_W) 'unzip/test/test_P_encryption.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_P_encryption.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Tpo unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unzip/test/test_P_encryption.c' object='unzip/test/bsdunzip_test-test_P_encryption.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bsdunzip_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unzip/test/bsdunzip_test-test_P_encryption.obj `if test -f 'unzip/test/test_P_encryption.c'; then $(CYGPATH_W) 'unzip/test/test_P_encryption.c'; else $(CYGPATH_W) '$(srcdir)/unzip/test/test_P_encryption.c'; fi`
+
 libarchive/test-archive_acl.o: libarchive/archive_acl.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test-archive_acl.o -MD -MP -MF libarchive/$(DEPDIR)/test-archive_acl.Tpo -c -o libarchive/test-archive_acl.o `test -f 'libarchive/archive_acl.c' || echo '$(srcdir)/'`libarchive/archive_acl.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/$(DEPDIR)/test-archive_acl.Tpo libarchive/$(DEPDIR)/test-archive_acl.Po
@@ -11452,6 +12118,20 @@ libarchive/test/test-test_compat_star_acl.obj: libarchive/test/test_compat_star_
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_compat_star_acl.obj `if test -f 'libarchive/test/test_compat_star_acl.c'; then $(CYGPATH_W) 'libarchive/test/test_compat_star_acl.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_compat_star_acl.c'; fi`
 
+libarchive/test/test-test_compat_tar_directory.o: libarchive/test/test_compat_tar_directory.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_compat_tar_directory.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Tpo -c -o libarchive/test/test-test_compat_tar_directory.o `test -f 'libarchive/test/test_compat_tar_directory.c' || echo '$(srcdir)/'`libarchive/test/test_compat_tar_directory.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Tpo libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_compat_tar_directory.c' object='libarchive/test/test-test_compat_tar_directory.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_compat_tar_directory.o `test -f 'libarchive/test/test_compat_tar_directory.c' || echo '$(srcdir)/'`libarchive/test/test_compat_tar_directory.c
+
+libarchive/test/test-test_compat_tar_directory.obj: libarchive/test/test_compat_tar_directory.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_compat_tar_directory.obj -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Tpo -c -o libarchive/test/test-test_compat_tar_directory.obj `if test -f 'libarchive/test/test_compat_tar_directory.c'; then $(CYGPATH_W) 'libarchive/test/test_compat_tar_directory.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_compat_tar_directory.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Tpo libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_compat_tar_directory.c' object='libarchive/test/test-test_compat_tar_directory.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_compat_tar_directory.obj `if test -f 'libarchive/test/test_compat_tar_directory.c'; then $(CYGPATH_W) 'libarchive/test/test_compat_tar_directory.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_compat_tar_directory.c'; fi`
+
 libarchive/test/test-test_compat_tar_hardlink.o: libarchive/test/test_compat_tar_hardlink.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_compat_tar_hardlink.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_compat_tar_hardlink.Tpo -c -o libarchive/test/test-test_compat_tar_hardlink.o `test -f 'libarchive/test/test_compat_tar_hardlink.c' || echo '$(srcdir)/'`libarchive/test/test_compat_tar_hardlink.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_compat_tar_hardlink.Tpo libarchive/test/$(DEPDIR)/test-test_compat_tar_hardlink.Po
@@ -11928,6 +12608,20 @@ libarchive/test/test-test_read_filter_uudecode.obj: libarchive/test/test_read_fi
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_filter_uudecode.obj `if test -f 'libarchive/test/test_read_filter_uudecode.c'; then $(CYGPATH_W) 'libarchive/test/test_read_filter_uudecode.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_filter_uudecode.c'; fi`
 
+libarchive/test/test-test_read_filter_uudecode_raw.o: libarchive/test/test_read_filter_uudecode_raw.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_filter_uudecode_raw.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Tpo -c -o libarchive/test/test-test_read_filter_uudecode_raw.o `test -f 'libarchive/test/test_read_filter_uudecode_raw.c' || echo '$(srcdir)/'`libarchive/test/test_read_filter_uudecode_raw.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Tpo libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_read_filter_uudecode_raw.c' object='libarchive/test/test-test_read_filter_uudecode_raw.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_filter_uudecode_raw.o `test -f 'libarchive/test/test_read_filter_uudecode_raw.c' || echo '$(srcdir)/'`libarchive/test/test_read_filter_uudecode_raw.c
+
+libarchive/test/test-test_read_filter_uudecode_raw.obj: libarchive/test/test_read_filter_uudecode_raw.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_filter_uudecode_raw.obj -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Tpo -c -o libarchive/test/test-test_read_filter_uudecode_raw.obj `if test -f 'libarchive/test/test_read_filter_uudecode_raw.c'; then $(CYGPATH_W) 'libarchive/test/test_read_filter_uudecode_raw.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_filter_uudecode_raw.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Tpo libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_read_filter_uudecode_raw.c' object='libarchive/test/test-test_read_filter_uudecode_raw.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_filter_uudecode_raw.obj `if test -f 'libarchive/test/test_read_filter_uudecode_raw.c'; then $(CYGPATH_W) 'libarchive/test/test_read_filter_uudecode_raw.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_filter_uudecode_raw.c'; fi`
+
 libarchive/test/test-test_read_format_7zip.o: libarchive/test/test_read_format_7zip.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_7zip.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_7zip.Tpo -c -o libarchive/test/test-test_read_format_7zip.o `test -f 'libarchive/test/test_read_format_7zip.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_7zip.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_7zip.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_7zip.Po
@@ -12684,6 +13378,20 @@ libarchive/test/test-test_read_format_rar_encryption_header.obj: libarchive/test
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_rar_encryption_header.obj `if test -f 'libarchive/test/test_read_format_rar_encryption_header.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_rar_encryption_header.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_rar_encryption_header.c'; fi`
 
+libarchive/test/test-test_read_format_rar_filter.o: libarchive/test/test_read_format_rar_filter.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_rar_filter.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Tpo -c -o libarchive/test/test-test_read_format_rar_filter.o `test -f 'libarchive/test/test_read_format_rar_filter.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_rar_filter.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_read_format_rar_filter.c' object='libarchive/test/test-test_read_format_rar_filter.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_rar_filter.o `test -f 'libarchive/test/test_read_format_rar_filter.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_rar_filter.c
+
+libarchive/test/test-test_read_format_rar_filter.obj: libarchive/test/test_read_format_rar_filter.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_rar_filter.obj -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Tpo -c -o libarchive/test/test-test_read_format_rar_filter.obj `if test -f 'libarchive/test/test_read_format_rar_filter.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_rar_filter.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_rar_filter.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_read_format_rar_filter.c' object='libarchive/test/test-test_read_format_rar_filter.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_rar_filter.obj `if test -f 'libarchive/test/test_read_format_rar_filter.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_rar_filter.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_rar_filter.c'; fi`
+
 libarchive/test/test-test_read_format_rar_invalid1.o: libarchive/test/test_read_format_rar_invalid1.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_rar_invalid1.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_rar_invalid1.Tpo -c -o libarchive/test/test-test_read_format_rar_invalid1.o `test -f 'libarchive/test/test_read_format_rar_invalid1.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_rar_invalid1.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_rar_invalid1.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_rar_invalid1.Po
@@ -12810,6 +13518,20 @@ libarchive/test/test-test_read_format_tar_filename.obj: libarchive/test/test_rea
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_tar_filename.obj `if test -f 'libarchive/test/test_read_format_tar_filename.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_tar_filename.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_tar_filename.c'; fi`
 
+libarchive/test/test-test_read_format_tar_invalid_pax_size.o: libarchive/test/test_read_format_tar_invalid_pax_size.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_tar_invalid_pax_size.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Tpo -c -o libarchive/test/test-test_read_format_tar_invalid_pax_size.o `test -f 'libarchive/test/test_read_format_tar_invalid_pax_size.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_tar_invalid_pax_size.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_read_format_tar_invalid_pax_size.c' object='libarchive/test/test-test_read_format_tar_invalid_pax_size.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_tar_invalid_pax_size.o `test -f 'libarchive/test/test_read_format_tar_invalid_pax_size.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_tar_invalid_pax_size.c
+
+libarchive/test/test-test_read_format_tar_invalid_pax_size.obj: libarchive/test/test_read_format_tar_invalid_pax_size.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_tar_invalid_pax_size.obj -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Tpo -c -o libarchive/test/test-test_read_format_tar_invalid_pax_size.obj `if test -f 'libarchive/test/test_read_format_tar_invalid_pax_size.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_tar_invalid_pax_size.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_tar_invalid_pax_size.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_read_format_tar_invalid_pax_size.c' object='libarchive/test/test-test_read_format_tar_invalid_pax_size.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_read_format_tar_invalid_pax_size.obj `if test -f 'libarchive/test/test_read_format_tar_invalid_pax_size.c'; then $(CYGPATH_W) 'libarchive/test/test_read_format_tar_invalid_pax_size.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_read_format_tar_invalid_pax_size.c'; fi`
+
 libarchive/test/test-test_read_format_tbz.o: libarchive/test/test_read_format_tbz.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_read_format_tbz.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_read_format_tbz.Tpo -c -o libarchive/test/test-test_read_format_tbz.o `test -f 'libarchive/test/test_read_format_tbz.c' || echo '$(srcdir)/'`libarchive/test/test_read_format_tbz.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_read_format_tbz.Tpo libarchive/test/$(DEPDIR)/test-test_read_format_tbz.Po
@@ -14406,6 +15128,20 @@ libarchive/test/test-test_write_format_zip_compression_store.obj: libarchive/tes
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_write_format_zip_compression_store.obj `if test -f 'libarchive/test/test_write_format_zip_compression_store.c'; then $(CYGPATH_W) 'libarchive/test/test_write_format_zip_compression_store.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_write_format_zip_compression_store.c'; fi`
 
+libarchive/test/test-test_write_format_zip_entry_size_unset.o: libarchive/test/test_write_format_zip_entry_size_unset.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_write_format_zip_entry_size_unset.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Tpo -c -o libarchive/test/test-test_write_format_zip_entry_size_unset.o `test -f 'libarchive/test/test_write_format_zip_entry_size_unset.c' || echo '$(srcdir)/'`libarchive/test/test_write_format_zip_entry_size_unset.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Tpo libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_write_format_zip_entry_size_unset.c' object='libarchive/test/test-test_write_format_zip_entry_size_unset.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_write_format_zip_entry_size_unset.o `test -f 'libarchive/test/test_write_format_zip_entry_size_unset.c' || echo '$(srcdir)/'`libarchive/test/test_write_format_zip_entry_size_unset.c
+
+libarchive/test/test-test_write_format_zip_entry_size_unset.obj: libarchive/test/test_write_format_zip_entry_size_unset.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_write_format_zip_entry_size_unset.obj -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Tpo -c -o libarchive/test/test-test_write_format_zip_entry_size_unset.obj `if test -f 'libarchive/test/test_write_format_zip_entry_size_unset.c'; then $(CYGPATH_W) 'libarchive/test/test_write_format_zip_entry_size_unset.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_write_format_zip_entry_size_unset.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Tpo libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libarchive/test/test_write_format_zip_entry_size_unset.c' object='libarchive/test/test-test_write_format_zip_entry_size_unset.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libarchive/test/test-test_write_format_zip_entry_size_unset.obj `if test -f 'libarchive/test/test_write_format_zip_entry_size_unset.c'; then $(CYGPATH_W) 'libarchive/test/test_write_format_zip_entry_size_unset.c'; else $(CYGPATH_W) '$(srcdir)/libarchive/test/test_write_format_zip_entry_size_unset.c'; fi`
+
 libarchive/test/test-test_write_format_zip_empty.o: libarchive/test/test_write_format_zip_empty.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libarchive_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libarchive/test/test-test_write_format_zip_empty.o -MD -MP -MF libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty.Tpo -c -o libarchive/test/test-test_write_format_zip_empty.o `test -f 'libarchive/test/test_write_format_zip_empty.c' || echo '$(srcdir)/'`libarchive/test/test_write_format_zip_empty.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty.Tpo libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty.Po
@@ -14894,7 +15630,7 @@ $(TEST_SUITE_LOG): $(TEST_LOGS)
          test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
        fi;                                                             \
        echo "$${col}$$br$${std}";                                      \
-       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
        echo "$${col}$$br$${std}";                                      \
        create_testsuite_report --maybe-color;                          \
        echo "$$col$$br$$std";                                          \
@@ -14956,6 +15692,13 @@ bsdcat_test.log: bsdcat_test$(EXEEXT)
        --log-file $$b.log --trs-file $$b.trs \
        $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
        "$$tst" $(AM_TESTS_FD_REDIRECT)
+bsdunzip_test.log: bsdunzip_test$(EXEEXT)
+       @p='bsdunzip_test$(EXEEXT)'; \
+       b='bsdunzip_test'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
 .test.log:
        @p='$<'; \
        $(am__set_b); \
@@ -14970,7 +15713,6 @@ bsdcat_test.log: bsdcat_test$(EXEEXT)
 @am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
 @am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
 @am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
-
 distdir: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) distdir-am
 
@@ -15031,6 +15773,10 @@ dist-xz: distdir
        tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
        $(am__post_remove_distdir)
 
+dist-zstd: distdir
+       tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
+       $(am__post_remove_distdir)
+
 dist-tarZ: distdir
        @echo WARNING: "Support for distribution archives compressed with" \
                       "legacy program 'compress' is deprecated." >&2
@@ -15072,6 +15818,8 @@ distcheck: dist
          eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
        *.zip*) \
          unzip $(distdir).zip ;;\
+       *.tar.zst*) \
+         zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
        esac
        chmod -R a-w $(distdir)
        chmod u+w $(distdir)
@@ -15087,7 +15835,7 @@ distcheck: dist
            $(DISTCHECK_CONFIGURE_FLAGS) \
            --srcdir=../.. --prefix="$$dc_install_base" \
          && $(MAKE) $(AM_MAKEFLAGS) \
-         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
          && $(MAKE) $(AM_MAKEFLAGS) check \
          && $(MAKE) $(AM_MAKEFLAGS) install \
          && $(MAKE) $(AM_MAKEFLAGS) installcheck \
@@ -15147,13 +15895,16 @@ all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(MANS) $(DATA) $(HEADERS) \
                config.h
 install-binPROGRAMS: install-libLTLIBRARIES
 
+install-checkPROGRAMS: install-libLTLIBRARIES
+
 installdirs:
        for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
 install: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
+install-exec: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
 
@@ -15201,6 +15952,10 @@ distclean-generic:
        -rm -f tar/test/$(am__dirstamp)
        -rm -f test_utils/$(DEPDIR)/$(am__dirstamp)
        -rm -f test_utils/$(am__dirstamp)
+       -rm -f unzip/$(DEPDIR)/$(am__dirstamp)
+       -rm -f unzip/$(am__dirstamp)
+       -rm -f unzip/test/$(DEPDIR)/$(am__dirstamp)
+       -rm -f unzip/test/$(am__dirstamp)
        -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
@@ -15604,6 +16359,7 @@ distclean: distclean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_solaris_pax_sparse.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_solaris_tar_acl.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_star_acl.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_tar_hardlink.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_uudecode.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_uudecode_large.Po
@@ -15638,6 +16394,7 @@ distclean: distclean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_filter_program.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_filter_program_signature.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_data.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_header.Po
@@ -15693,6 +16450,7 @@ distclean: distclean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_data.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_header.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_partially.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_invalid1.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_raw.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar.Po
@@ -15701,6 +16459,7 @@ distclean: distclean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_pax.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_with_gnulabel.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_filename.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tbz.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tgz.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tlz.Po
@@ -15817,6 +16576,7 @@ distclean: distclean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_compression_store.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty_zip64.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_file.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_file_zip64.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_large.Po
@@ -15872,6 +16632,7 @@ distclean: distclean-am
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_fflags.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_gid_gname.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_grzip.Po
+       -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_j.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_k.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_keep_newer_files.Po
@@ -15907,8 +16668,32 @@ distclean: distclean-am
        -rm -f test_utils/$(DEPDIR)/bsdcpio_test-test_utils.Po
        -rm -f test_utils/$(DEPDIR)/bsdtar_test-test_main.Po
        -rm -f test_utils/$(DEPDIR)/bsdtar_test-test_utils.Po
+       -rm -f test_utils/$(DEPDIR)/bsdunzip_test-test_main.Po
+       -rm -f test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Po
        -rm -f test_utils/$(DEPDIR)/libarchive_test-test_main.Po
        -rm -f test_utils/$(DEPDIR)/libarchive_test-test_utils.Po
+       -rm -f unzip/$(DEPDIR)/bsdunzip-bsdunzip.Po
+       -rm -f unzip/$(DEPDIR)/bsdunzip-cmdline.Po
+       -rm -f unzip/$(DEPDIR)/bsdunzip-la_getline.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Po
        -rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
        distclean-hdr distclean-libtool distclean-local distclean-tags
@@ -16346,6 +17131,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_solaris_pax_sparse.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_solaris_tar_acl.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_star_acl.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_compat_tar_directory.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_tar_hardlink.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_uudecode.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_compat_uudecode_large.Po
@@ -16380,6 +17166,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_filter_program.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_filter_program_signature.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_read_filter_uudecode_raw.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_data.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_7zip_encryption_header.Po
@@ -16435,6 +17222,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_data.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_header.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_encryption_partially.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_filter.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_rar_invalid1.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_raw.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar.Po
@@ -16443,6 +17231,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_pax.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_empty_with_gnulabel.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_filename.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tar_invalid_pax_size.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tbz.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tgz.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_read_format_tlz.Po
@@ -16559,6 +17348,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_compression_store.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_empty_zip64.Po
+       -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_entry_size_unset.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_file.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_file_zip64.Po
        -rm -f libarchive/test/$(DEPDIR)/test-test_write_format_zip_large.Po
@@ -16614,6 +17404,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_fflags.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_gid_gname.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_grzip.Po
+       -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_ignore_zeros.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_j.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_k.Po
        -rm -f tar/test/$(DEPDIR)/bsdtar_test-test_option_keep_newer_files.Po
@@ -16649,8 +17440,32 @@ maintainer-clean: maintainer-clean-am
        -rm -f test_utils/$(DEPDIR)/bsdcpio_test-test_utils.Po
        -rm -f test_utils/$(DEPDIR)/bsdtar_test-test_main.Po
        -rm -f test_utils/$(DEPDIR)/bsdtar_test-test_utils.Po
+       -rm -f test_utils/$(DEPDIR)/bsdunzip_test-test_main.Po
+       -rm -f test_utils/$(DEPDIR)/bsdunzip_test-test_utils.Po
        -rm -f test_utils/$(DEPDIR)/libarchive_test-test_main.Po
        -rm -f test_utils/$(DEPDIR)/libarchive_test-test_utils.Po
+       -rm -f unzip/$(DEPDIR)/bsdunzip-bsdunzip.Po
+       -rm -f unzip/$(DEPDIR)/bsdunzip-cmdline.Po
+       -rm -f unzip/$(DEPDIR)/bsdunzip-la_getline.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_0.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_C.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_L.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_P_encryption.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_Z1.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_basic.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_d.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_glob.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_j.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_n.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_not_exist.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_o.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_p.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_q.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_singlefile.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_t.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_t_bad.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_version.Po
+       -rm -f unzip/test/$(DEPDIR)/bsdunzip_test-test_x.Po
        -rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -16672,7 +17487,8 @@ uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \
 
 uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5
 
-.MAKE: all check check-am install install-am install-strip
+.MAKE: all check check-am install install-am install-exec \
+       install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \
        check-TESTS check-am clean clean-binPROGRAMS \
@@ -16680,7 +17496,7 @@ uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5
        clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \
        cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
        dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
-       dist-zip distcheck distclean distclean-compile \
+       dist-zip dist-zstd distcheck distclean distclean-compile \
        distclean-generic distclean-hdr distclean-libtool \
        distclean-local distclean-tags distcleancheck distdir \
        distuninstallcheck dvi dvi-am html html-am info info-am \
@@ -16724,7 +17540,9 @@ distclean-local:
        -[ -f cpio/Makefile ] && cd cpio && make clean
        -[ -f cpio/test/Makefile ] && cd cpio/test && make clean
        -[ -f cat/Makefile ] && cd cat && make clean
-       -[ -f cpio/test/Makefile ] && cd cat/test && make clean
+       -[ -f cat/test/Makefile ] && cd cat/test && make clean
+       -[ -f unzip/Makefile ] && cd unzip && make clean
+       -[ -f unzip/test/Makefile ] && cd unzip/test && make clean
 
 # The "list.h" file just lists all of the tests defined in all of the sources.
 # Building it automatically provides a sanity-check on libarchive_test_SOURCES
@@ -16742,8 +17560,13 @@ cpio/test/list.h: Makefile
        cat $(top_srcdir)/cpio/test/test_*.c | grep '^DEFINE_TEST' > cpio/test/list.h
 
 cat/test/list.h: Makefile
+       $(MKDIR_P) cat/test
        cat $(top_srcdir)/cat/test/test_*.c | grep '^DEFINE_TEST' > cat/test/list.h
 
+unzip/test/list.h: Makefile
+       $(MKDIR_P) unzip/test
+       cat $(top_srcdir)/unzip/test/test_*.c | grep '^DEFINE_TEST' > unzip/test/list.h
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/NEWS b/NEWS
index 0964106..d3b0eb9 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,19 @@
+Sep 12, 2023: libarchive 3.7.2 released
+
+Jul 29, 2023: libarchive 3.7.1 released
+
+Jul 18, 2023: libarchive 3.7.0 released
+
+Jul 14, 2023: bsdunzip port from FreeBSD
+
+Dec 07, 2022: libarchive 3.6.2 released
+
+Apr 08, 2022: libarchive 3.6.1 released
+
+Feb 09, 2022: libarchive 3.6.0 released
+
+Feb 08, 2022: libarchive 3.5.3 released
+
 Aug 22, 2021: libarchive 3.5.2 released
 
 Dec 26, 2020: libarchive 3.5.1 released
index d5ef70c..727ed49 100644 (file)
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ command-line tools that use the libarchive library.
 
 ## Questions?  Issues?
 
-* http://www.libarchive.org is the home for ongoing
+* https://www.libarchive.org is the home for ongoing
   libarchive development, including documentation,
   and links to the libarchive mailing lists.
 * To report an issue, use the issue tracker at
@@ -23,6 +23,7 @@ This distribution bundle includes the following major components:
 * **tar**: the 'bsdtar' program is a full-featured 'tar' implementation built on libarchive
 * **cpio**: the 'bsdcpio' program is a different interface to essentially the same functionality
 * **cat**: the 'bsdcat' program is a simple replacement tool for zcat, bzcat, xzcat, and such
+* **unzip**: the 'bsdunzip' program is a simple replacement tool for Info-ZIP's unzip
 * **examples**: Some small example programs that you may find useful.
 * **examples/minitar**: a compact sample demonstrating use of libarchive.
 * **contrib**:  Various items sent to me by third parties; please contact the authors with any questions.
@@ -37,6 +38,7 @@ The top-level directory contains the following information files:
 * **configure** - configuration script, see INSTALL for details.  If your copy of the source lacks a `configure` script, you can try to construct it by running the script in `build/autogen.sh` (or use `cmake`).
 
 The following files in the top-level directory are used by the 'configure' script:
+
 * `Makefile.am`, `aclocal.m4`, `configure.ac` - used to build this distribution, only needed by maintainers
 * `Makefile.in`, `config.h.in` - templates used by configure script
 
@@ -71,6 +73,7 @@ know about any errors or omissions you find.
 ## Supported Formats
 
 Currently, the library automatically detects and reads the following formats:
+
   * Old V7 tar archives
   * POSIX ustar
   * GNU tar format (including GNU long filenames, long link names, and sparse files)
@@ -85,13 +88,14 @@ Currently, the library automatically detects and reads the following formats:
   * ZIPX archives (with support for bzip2, ppmd8, lzma and xz compressed entries)
   * GNU and BSD 'ar' archives
   * 'mtree' format
-  * 7-Zip archives
+  * 7-Zip archives (including archives that use zstandard compression)
   * Microsoft CAB format
   * LHA and LZH archives
   * RAR and RAR 5.0 archives (with some limitations due to RAR's proprietary status)
   * XAR archives
 
 The library also detects and handles any of the following before evaluating the archive:
+
   * uuencoded files
   * files with RPM wrapper
   * gzip compression
@@ -103,6 +107,7 @@ The library also detects and handles any of the following before evaluating the
   * zstandard compression
 
 The library can create archives in any of the following formats:
+
   * POSIX ustar
   * POSIX pax interchange format
   * "restricted" pax format, which will create ustar archives except for
@@ -122,6 +127,7 @@ The library can create archives in any of the following formats:
   * XAR archives
 
 When creating archives, the result can be filtered with any of the following:
+
   * uuencode
   * gzip compression
   * bzip2 compression
@@ -187,6 +193,17 @@ questions we are asked about libarchive:
   functions.  On those platforms, libarchive will use the non-thread-safe
   functions.  Patches to improve this are of great interest to us.
 
+* The function `archive_write_disk_header()` is _not_ thread safe on
+  POSIX machines and could lead to security issue resulting in world
+  writeable directories.  Thus it must be mutexed by the calling code.
+  This is due to calling `umask(oldumask = umask(0))`, which sets the
+  umask for the whole process to 0 for a short time frame.
+  In case other thread calls the same function in parallel, it might
+  get interrupted by it and cause the executable to use umask=0 for the
+  remaining execution.
+  This will then lead to implicitely created directories to have 777
+  permissions without sticky bit.
+
 * In particular, libarchive's modules to read or write a directory
   tree do use `chdir()` to optimize the directory traversals.  This
   can cause problems for programs that expect to do disk access from
index e35d2fb..14646f7 100644 (file)
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
 
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -14,8 +14,8 @@
 m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
-[m4_warning([this file was generated for autoconf 2.69.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],,
+[m4_warning([this file was generated for autoconf 2.71.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
@@ -1085,11 +1085,11 @@ _LT_EOF
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+       10.0,*86*-darwin8*|10.0,*-darwin[[912]]*)
          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
        10.[[012]][[,.]]*)
          _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
-       10.*)
+       10.*|11.*)
          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
@@ -9074,9 +9074,9 @@ m4_ifndef([_LT_PROG_F77],         [AC_DEFUN([_LT_PROG_F77])])
 m4_ifndef([_LT_PROG_FC],               [AC_DEFUN([_LT_PROG_FC])])
 m4_ifndef([_LT_PROG_CXX],              [AC_DEFUN([_LT_PROG_CXX])])
 
-dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
-dnl serial 11 (pkg-config-0.29.1)
-dnl
+# pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+# serial 12 (pkg-config-0.29.2)
+
 dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
 dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
 dnl
@@ -9117,7 +9117,7 @@ dnl
 dnl See the "Since" comment for each macro you use to see what version
 dnl of the macros you require.
 m4_defun([PKG_PREREQ],
-[m4_define([PKG_MACROS_VERSION], [0.29.1])
+[m4_define([PKG_MACROS_VERSION], [0.29.2])
 m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
     [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
 ])dnl PKG_PREREQ
@@ -9218,7 +9218,7 @@ AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
 AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
 
 pkg_failed=no
-AC_MSG_CHECKING([for $1])
+AC_MSG_CHECKING([for $2])
 
 _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
 _PKG_CONFIG([$1][_LIBS], [libs], [$2])
@@ -9228,11 +9228,11 @@ and $1[]_LIBS to avoid the need to call pkg-config.
 See the pkg-config man page for more details.])
 
 if test $pkg_failed = yes; then
-       AC_MSG_RESULT([no])
+        AC_MSG_RESULT([no])
         _PKG_SHORT_ERRORS_SUPPORTED
         if test $_pkg_short_errors_supported = yes; then
                $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
-        else 
+        else
                $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
@@ -9249,7 +9249,7 @@ installed software in a non-standard prefix.
 _PKG_TEXT])[]dnl
         ])
 elif test $pkg_failed = untried; then
-       AC_MSG_RESULT([no])
+        AC_MSG_RESULT([no])
        m4_default([$4], [AC_MSG_FAILURE(
 [The pkg-config script could not be found or is too old.  Make sure it
 is in your PATH or set the PKG_CONFIG environment variable to the full
@@ -9350,7 +9350,7 @@ AS_VAR_COPY([$1], [pkg_cv_][$1])
 AS_VAR_IF([$1], [""], [$5], [$4])dnl
 ])dnl PKG_CHECK_VAR
 
-# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+# Copyright (C) 2002-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9365,7 +9365,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.16'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.16.1], [],
+m4_if([$1], [1.16.5], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -9381,14 +9381,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.16.1])dnl
+[AM_AUTOMAKE_VERSION([1.16.5])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9440,7 +9440,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9471,7 +9471,7 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9662,7 +9662,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9701,7 +9701,9 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
   done
   if test $am_rc -ne 0; then
     AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
-    for automatic dependency tracking.  Try re-running configure with the
+    for automatic dependency tracking.  If GNU make was not used, consider
+    re-running the configure script with MAKE="gmake" (or whatever is
+    necessary).  You can also try re-running configure with the
     '--disable-dependency-tracking' option to at least be able to build
     the package (albeit without support for automatic dependency tracking).])
   fi
@@ -9728,7 +9730,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9756,6 +9758,10 @@ m4_defn([AC_PROG_CC])
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
 [AC_PREREQ([2.65])dnl
+m4_ifdef([_$0_ALREADY_INIT],
+  [m4_fatal([$0 expanded multiple times
+]m4_defn([_$0_ALREADY_INIT]))],
+  [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@@ -9792,7 +9798,7 @@ m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
 [_AM_SET_OPTIONS([$1])dnl
 dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
 m4_if(
-  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]),
   [ok:ok],,
   [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
@@ -9844,6 +9850,20 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
                  [m4_define([AC_PROG_OBJCXX],
                             m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
 ])
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+  CTAGS=ctags
+fi
+AC_SUBST([CTAGS])
+if test -z "$ETAGS"; then
+  ETAGS=etags
+fi
+AC_SUBST([ETAGS])
+if test -z "$CSCOPE"; then
+  CSCOPE=cscope
+fi
+AC_SUBST([CSCOPE])
+
 AC_REQUIRE([AM_SILENT_RULES])dnl
 dnl The testsuite driver may need to know about EXEEXT, so add the
 dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
@@ -9925,7 +9945,7 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9946,7 +9966,7 @@ if test x"${install_sh+set}" != xset; then
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2018 Free Software Foundation, Inc.
+# Copyright (C) 2003-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -9968,7 +9988,7 @@ AC_SUBST([am__leading_dot])])
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10003,7 +10023,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
 
 # Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10046,7 +10066,7 @@ AC_SUBST([am__quote])])
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10067,12 +10087,7 @@ AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
 if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
+  MISSING="\${SHELL} '$am_aux_dir/missing'"
 fi
 # Use eval to expand $SHELL
 if eval "$MISSING --is-lightweight"; then
@@ -10085,7 +10100,7 @@ fi
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10114,7 +10129,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10161,7 +10176,7 @@ AC_LANG_POP([C])])
 # For backward compatibility.
 AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
 
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10180,7 +10195,7 @@ AC_DEFUN([AM_RUN_LOG],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10261,7 +10276,7 @@ AC_CONFIG_COMMANDS_PRE(
 rm -f conftest.file
 ])
 
-# Copyright (C) 2009-2018 Free Software Foundation, Inc.
+# Copyright (C) 2009-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10321,7 +10336,7 @@ AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10349,7 +10364,7 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+# Copyright (C) 2006-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10368,7 +10383,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+# Copyright (C) 2004-2021 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -10509,3 +10524,4 @@ m4_include([build/autoconf/la_uid_t.m4])
 m4_include([build/autoconf/lib-ld.m4])
 m4_include([build/autoconf/lib-link.m4])
 m4_include([build/autoconf/lib-prefix.m4])
+m4_include([build/autoconf/m4_ax_compile_check_sizeof.m4])
index 99e5052..df363c8 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -53,7 +53,7 @@ func_file_conv ()
          MINGW*)
            file_conv=mingw
            ;;
-         CYGWIN*)
+         CYGWIN* | MSYS*)
            file_conv=cygwin
            ;;
          *)
@@ -67,7 +67,7 @@ func_file_conv ()
        mingw/*)
          file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
          ;;
-       cygwin/*)
+       cygwin/* | msys/*)
          file=`cygpath -m "$file" || echo "$file"`
          ;;
        wine/*)
index f50dcdb..7f76b62 100755 (executable)
@@ -1,12 +1,14 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2018 Free Software Foundation, Inc.
+#   Copyright 1992-2022 Free Software Foundation, Inc.
 
-timestamp='2018-02-24'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-09'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -27,11 +29,19 @@ timestamp='2018-02-24'
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
 #
 # Please send patches to <config-patches@gnu.org>.
 
 
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX.  However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
@@ -50,7 +60,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright 1992-2022 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -84,7 +94,8 @@ if test $# != 0; then
   exit 1
 fi
 
-trap 'exit 1' 1 2 15
+# Just in case it came from the environment.
+GUESS=
 
 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
 # compiler to aid in system detection is discouraged as it requires
@@ -96,73 +107,90 @@ trap 'exit 1' 1 2 15
 
 # Portable tmp directory creation inspired by the Autoconf team.
 
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > "$dummy.c" ;
-       for c in cc gcc c89 c99 ; do
-         if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       if test x"$CC_FOR_BUILD" = x ; then
-         CC_FOR_BUILD=no_compiler_found ;
-       fi
-       ;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+    # prevent multiple calls if $tmp is already set
+    test "$tmp" && return 0
+    : "${TMPDIR=/tmp}"
+    # shellcheck disable=SC2039,SC3028
+    { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+       { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+       { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+       { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+    dummy=$tmp/dummy
+    case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+       ,,)    echo "int x;" > "$dummy.c"
+              for driver in cc gcc c89 c99 ; do
+                  if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+                      CC_FOR_BUILD=$driver
+                      break
+                  fi
+              done
+              if test x"$CC_FOR_BUILD" = x ; then
+                  CC_FOR_BUILD=no_compiler_found
+              fi
+              ;;
+       ,,*)   CC_FOR_BUILD=$CC ;;
+       ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+    esac
+}
 
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 # (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+if test -f /.attbin/uname ; then
        PATH=$PATH:/.attbin ; export PATH
 fi
 
 UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
 UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-case "$UNAME_SYSTEM" in
+case $UNAME_SYSTEM in
 Linux|GNU|GNU/*)
-       # If the system lacks a compiler, then just pick glibc.
-       # We could probably try harder.
-       LIBC=gnu
+       LIBC=unknown
 
-       eval "$set_cc_for_build"
+       set_cc_for_build
        cat <<-EOF > "$dummy.c"
        #include <features.h>
        #if defined(__UCLIBC__)
        LIBC=uclibc
        #elif defined(__dietlibc__)
        LIBC=dietlibc
-       #else
+       #elif defined(__GLIBC__)
        LIBC=gnu
+       #else
+       #include <stdarg.h>
+       /* First heuristic to detect musl libc.  */
+       #ifdef __DEFINED_va_list
+       LIBC=musl
+       #endif
        #endif
        EOF
-       eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+       cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+       eval "$cc_set_libc"
 
-       # If ldd exists, use it to detect musl libc.
-       if command -v ldd >/dev/null && \
-               ldd --version 2>&1 | grep -q ^musl
-       then
-           LIBC=musl
+       # Second heuristic to detect musl libc.
+       if [ "$LIBC" = unknown ] &&
+          command -v ldd >/dev/null &&
+          ldd --version 2>&1 | grep -q ^musl; then
+               LIBC=musl
+       fi
+
+       # If the system lacks a compiler, then just pick glibc.
+       # We could probably try harder.
+       if [ "$LIBC" = unknown ]; then
+               LIBC=gnu
        fi
        ;;
 esac
 
 # Note: order is significant - the case branches are not exclusive.
 
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
     *:NetBSD:*:*)
        # NetBSD (nbsd) targets should (where applicable) match one or
        # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -174,12 +202,12 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        #
        # Note: NetBSD doesn't particularly care about the vendor
        # portion of the name.  We always set it to "unknown".
-       sysctl="sysctl -n hw.machine_arch"
        UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
-           "/sbin/$sysctl" 2>/dev/null || \
-           "/usr/sbin/$sysctl" 2>/dev/null || \
+           /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+           /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
            echo unknown)`
-       case "$UNAME_MACHINE_ARCH" in
+       case $UNAME_MACHINE_ARCH in
+           aarch64eb) machine=aarch64_be-unknown ;;
            armeb) machine=armeb-unknown ;;
            arm*) machine=arm-unknown ;;
            sh3el) machine=shl-unknown ;;
@@ -188,18 +216,18 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
            earmv*)
                arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
                endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
-               machine="${arch}${endian}"-unknown
+               machine=${arch}${endian}-unknown
                ;;
-           *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+           *) machine=$UNAME_MACHINE_ARCH-unknown ;;
        esac
        # The Operating System including object format, if it has switched
        # to ELF recently (or will in the future) and ABI.
-       case "$UNAME_MACHINE_ARCH" in
+       case $UNAME_MACHINE_ARCH in
            earm*)
                os=netbsdelf
                ;;
            arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-               eval "$set_cc_for_build"
+               set_cc_for_build
                if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
                        | grep -q __ELF__
                then
@@ -215,7 +243,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
                ;;
        esac
        # Determine ABI tags.
-       case "$UNAME_MACHINE_ARCH" in
+       case $UNAME_MACHINE_ARCH in
            earm*)
                expr='s/^earmv[0-9]/-eabi/;s/eb$//'
                abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
@@ -226,7 +254,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        # thus, need a distinct triplet. However, they do not need
        # kernel version information, so it can be replaced with a
        # suitable tag, in the style of linux-gnu.
-       case "$UNAME_VERSION" in
+       case $UNAME_VERSION in
            Debian*)
                release='-gnu'
                ;;
@@ -237,45 +265,57 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
        # contains redundant information, the shorter form:
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "$machine-${os}${release}${abi}"
-       exit ;;
+       GUESS=$machine-${os}${release}${abi-}
+       ;;
     *:Bitrig:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-       echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+       ;;
     *:OpenBSD:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-       echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+       ;;
+    *:SecBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+       GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+       ;;
     *:LibertyBSD:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
-       echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+       ;;
     *:MidnightBSD:*:*)
-       echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+       ;;
     *:ekkoBSD:*:*)
-       echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+       ;;
     *:SolidBSD:*:*)
-       echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+       ;;
+    *:OS108:*:*)
+       GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+       ;;
     macppc:MirBSD:*:*)
-       echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+       ;;
     *:MirBSD:*:*)
-       echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+       ;;
     *:Sortix:*:*)
-       echo "$UNAME_MACHINE"-unknown-sortix
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-sortix
+       ;;
+    *:Twizzler:*:*)
+       GUESS=$UNAME_MACHINE-unknown-twizzler
+       ;;
     *:Redox:*:*)
-       echo "$UNAME_MACHINE"-unknown-redox
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-redox
+       ;;
     mips:OSF1:*.*)
-        echo mips-dec-osf1
-        exit ;;
+       GUESS=mips-dec-osf1
+       ;;
     alpha:OSF1:*:*)
+       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+       trap '' 0
        case $UNAME_RELEASE in
        *4.0)
                UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
@@ -289,7 +329,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        # covers most systems running today.  This code pipes the CPU
        # types through head -n 1, so we only detect the type of CPU 0.
        ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-       case "$ALPHA_CPU_TYPE" in
+       case $ALPHA_CPU_TYPE in
            "EV4 (21064)")
                UNAME_MACHINE=alpha ;;
            "EV4.5 (21064)")
@@ -326,117 +366,121 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        # A Tn.n version is a released field test version.
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
-       echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
-       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-       exitcode=$?
-       trap '' 0
-       exit $exitcode ;;
+       OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+       GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+       ;;
     Amiga*:UNIX_System_V:4.0:*)
-       echo m68k-unknown-sysv4
-       exit ;;
+       GUESS=m68k-unknown-sysv4
+       ;;
     *:[Aa]miga[Oo][Ss]:*:*)
-       echo "$UNAME_MACHINE"-unknown-amigaos
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-amigaos
+       ;;
     *:[Mm]orph[Oo][Ss]:*:*)
-       echo "$UNAME_MACHINE"-unknown-morphos
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-morphos
+       ;;
     *:OS/390:*:*)
-       echo i370-ibm-openedition
-       exit ;;
+       GUESS=i370-ibm-openedition
+       ;;
     *:z/VM:*:*)
-       echo s390-ibm-zvmoe
-       exit ;;
+       GUESS=s390-ibm-zvmoe
+       ;;
     *:OS400:*:*)
-       echo powerpc-ibm-os400
-       exit ;;
+       GUESS=powerpc-ibm-os400
+       ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix"$UNAME_RELEASE"
-       exit ;;
+       GUESS=arm-acorn-riscix$UNAME_RELEASE
+       ;;
     arm*:riscos:*:*|arm*:RISCOS:*:*)
-       echo arm-unknown-riscos
-       exit ;;
+       GUESS=arm-unknown-riscos
+       ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-       echo hppa1.1-hitachi-hiuxmpp
-       exit ;;
+       GUESS=hppa1.1-hitachi-hiuxmpp
+       ;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
        # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-       if test "`(/bin/universe) 2>/dev/null`" = att ; then
-               echo pyramid-pyramid-sysv3
-       else
-               echo pyramid-pyramid-bsd
-       fi
-       exit ;;
+       case `(/bin/universe) 2>/dev/null` in
+           att) GUESS=pyramid-pyramid-sysv3 ;;
+           *)   GUESS=pyramid-pyramid-bsd   ;;
+       esac
+       ;;
     NILE*:*:*:dcosx)
-       echo pyramid-pyramid-svr4
-       exit ;;
+       GUESS=pyramid-pyramid-svr4
+       ;;
     DRS?6000:unix:4.0:6*)
-       echo sparc-icl-nx6
-       exit ;;
+       GUESS=sparc-icl-nx6
+       ;;
     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
        case `/usr/bin/uname -p` in
-           sparc) echo sparc-icl-nx7; exit ;;
-       esac ;;
+           sparc) GUESS=sparc-icl-nx7 ;;
+       esac
+       ;;
     s390x:SunOS:*:*)
-       echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+       ;;
     sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=sparc-hal-solaris2$SUN_REL
+       ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=sparc-sun-solaris2$SUN_REL
+       ;;
     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-       echo i386-pc-auroraux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=i386-pc-auroraux$UNAME_RELEASE
+       ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-       eval "$set_cc_for_build"
+       set_cc_for_build
        SUN_ARCH=i386
        # If there is a compiler, see if it is configured for 64-bit objects.
        # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
        # This test works for both compilers.
-       if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+       if test "$CC_FOR_BUILD" != no_compiler_found; then
            if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+               (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
                grep IS_64BIT_ARCH >/dev/null
            then
                SUN_ARCH=x86_64
            fi
        fi
-       echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+       ;;
     sun4*:SunOS:6*:*)
        # According to config.sub, this is the proper way to canonicalize
        # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
        # it's likely to be more like Solaris than SunOS4.
-       echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=sparc-sun-solaris3$SUN_REL
+       ;;
     sun4*:SunOS:*:*)
-       case "`/usr/bin/arch -k`" in
+       case `/usr/bin/arch -k` in
            Series*|S4*)
                UNAME_RELEASE=`uname -v`
                ;;
        esac
        # Japanese Language versions have a version number like `4.1.3-JL'.
-       echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+       GUESS=sparc-sun-sunos$SUN_REL
+       ;;
     sun3*:SunOS:*:*)
-       echo m68k-sun-sunos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-sun-sunos$UNAME_RELEASE
+       ;;
     sun*:*:4.2BSD:*)
        UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
        test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
-       case "`/bin/arch`" in
+       case `/bin/arch` in
            sun3)
-               echo m68k-sun-sunos"$UNAME_RELEASE"
+               GUESS=m68k-sun-sunos$UNAME_RELEASE
                ;;
            sun4)
-               echo sparc-sun-sunos"$UNAME_RELEASE"
+               GUESS=sparc-sun-sunos$UNAME_RELEASE
                ;;
        esac
-       exit ;;
+       ;;
     aushp:SunOS:*:*)
-       echo sparc-auspex-sunos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sparc-auspex-sunos$UNAME_RELEASE
+       ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
     # "atarist" or "atariste" at least should have a processor
@@ -446,43 +490,43 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-atari-mint$UNAME_RELEASE
+       ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-atari-mint$UNAME_RELEASE
+       ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-       echo m68k-atari-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-atari-mint$UNAME_RELEASE
+       ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-       echo m68k-milan-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-milan-mint$UNAME_RELEASE
+       ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-       echo m68k-hades-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-hades-mint$UNAME_RELEASE
+       ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-       echo m68k-unknown-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-unknown-mint$UNAME_RELEASE
+       ;;
     m68k:machten:*:*)
-       echo m68k-apple-machten"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-apple-machten$UNAME_RELEASE
+       ;;
     powerpc:machten:*:*)
-       echo powerpc-apple-machten"$UNAME_RELEASE"
-       exit ;;
+       GUESS=powerpc-apple-machten$UNAME_RELEASE
+       ;;
     RISC*:Mach:*:*)
-       echo mips-dec-mach_bsd4.3
-       exit ;;
+       GUESS=mips-dec-mach_bsd4.3
+       ;;
     RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix"$UNAME_RELEASE"
-       exit ;;
+       GUESS=mips-dec-ultrix$UNAME_RELEASE
+       ;;
     VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix"$UNAME_RELEASE"
-       exit ;;
+       GUESS=vax-dec-ultrix$UNAME_RELEASE
+       ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix"$UNAME_RELEASE"
-       exit ;;
+       GUESS=clipper-intergraph-clix$UNAME_RELEASE
+       ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
-       eval "$set_cc_for_build"
+       set_cc_for_build
        sed 's/^        //' << EOF > "$dummy.c"
 #ifdef __cplusplus
 #include <stdio.h>  /* for printf() prototype */
@@ -508,78 +552,79 @@ EOF
          dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
          SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
            { echo "$SYSTEM_NAME"; exit; }
-       echo mips-mips-riscos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=mips-mips-riscos$UNAME_RELEASE
+       ;;
     Motorola:PowerMAX_OS:*:*)
-       echo powerpc-motorola-powermax
-       exit ;;
+       GUESS=powerpc-motorola-powermax
+       ;;
     Motorola:*:4.3:PL8-*)
-       echo powerpc-harris-powermax
-       exit ;;
+       GUESS=powerpc-harris-powermax
+       ;;
     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-       echo powerpc-harris-powermax
-       exit ;;
+       GUESS=powerpc-harris-powermax
+       ;;
     Night_Hawk:Power_UNIX:*:*)
-       echo powerpc-harris-powerunix
-       exit ;;
+       GUESS=powerpc-harris-powerunix
+       ;;
     m88k:CX/UX:7*:*)
-       echo m88k-harris-cxux7
-       exit ;;
+       GUESS=m88k-harris-cxux7
+       ;;
     m88k:*:4*:R4*)
-       echo m88k-motorola-sysv4
-       exit ;;
+       GUESS=m88k-motorola-sysv4
+       ;;
     m88k:*:3*:R3*)
-       echo m88k-motorola-sysv3
-       exit ;;
+       GUESS=m88k-motorola-sysv3
+       ;;
     AViiON:dgux:*:*)
        # DG/UX returns AViiON for all architectures
        UNAME_PROCESSOR=`/usr/bin/uname -p`
-       if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+       if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
        then
-           if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
-              [ "$TARGET_BINARY_INTERFACE"x = x ]
+           if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+              test "$TARGET_BINARY_INTERFACE"x = x
            then
-               echo m88k-dg-dgux"$UNAME_RELEASE"
+               GUESS=m88k-dg-dgux$UNAME_RELEASE
            else
-               echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+               GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
            fi
        else
-           echo i586-dg-dgux"$UNAME_RELEASE"
+           GUESS=i586-dg-dgux$UNAME_RELEASE
        fi
-       exit ;;
+       ;;
     M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
-       echo m88k-dolphin-sysv3
-       exit ;;
+       GUESS=m88k-dolphin-sysv3
+       ;;
     M88*:*:R3*:*)
        # Delta 88k system running SVR3
-       echo m88k-motorola-sysv3
-       exit ;;
+       GUESS=m88k-motorola-sysv3
+       ;;
     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-       echo m88k-tektronix-sysv3
-       exit ;;
+       GUESS=m88k-tektronix-sysv3
+       ;;
     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-       echo m68k-tektronix-bsd
-       exit ;;
+       GUESS=m68k-tektronix-bsd
+       ;;
     *:IRIX*:*:*)
-       echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
-       exit ;;
+       IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+       GUESS=mips-sgi-irix$IRIX_REL
+       ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+       GUESS=romp-ibm-aix    # uname -m gives an 8 hex-code CPU id
+       ;;                    # Note that: echo "'`uname -s`'" gives 'AIX '
     i*86:AIX:*:*)
-       echo i386-ibm-aix
-       exit ;;
+       GUESS=i386-ibm-aix
+       ;;
     ia64:AIX:*:*)
-       if [ -x /usr/bin/oslevel ] ; then
+       if test -x /usr/bin/oslevel ; then
                IBM_REV=`/usr/bin/oslevel`
        else
-               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+               IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
        fi
-       echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
-       exit ;;
+       GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+       ;;
     *:AIX:2:3)
        if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-               eval "$set_cc_for_build"
+               set_cc_for_build
                sed 's/^                //' << EOF > "$dummy.c"
                #include <sys/systemcfg.h>
 
@@ -593,16 +638,16 @@ EOF
 EOF
                if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
                then
-                       echo "$SYSTEM_NAME"
+                       GUESS=$SYSTEM_NAME
                else
-                       echo rs6000-ibm-aix3.2.5
+                       GUESS=rs6000-ibm-aix3.2.5
                fi
        elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-               echo rs6000-ibm-aix3.2.4
+               GUESS=rs6000-ibm-aix3.2.4
        else
-               echo rs6000-ibm-aix3.2
+               GUESS=rs6000-ibm-aix3.2
        fi
-       exit ;;
+       ;;
     *:AIX:*:[4567])
        IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
        if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
@@ -610,57 +655,57 @@ EOF
        else
                IBM_ARCH=powerpc
        fi
-       if [ -x /usr/bin/lslpp ] ; then
-               IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+       if test -x /usr/bin/lslpp ; then
+               IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
                           awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
        else
-               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+               IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
        fi
-       echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
-       exit ;;
+       GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+       ;;
     *:AIX:*:*)
-       echo rs6000-ibm-aix
-       exit ;;
+       GUESS=rs6000-ibm-aix
+       ;;
     ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
-       echo romp-ibm-bsd4.4
-       exit ;;
+       GUESS=romp-ibm-bsd4.4
+       ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd"$UNAME_RELEASE"   # 4.3 with uname added to
-       exit ;;                             # report: romp-ibm BSD 4.3
+       GUESS=romp-ibm-bsd$UNAME_RELEASE    # 4.3 with uname added to
+       ;;                                  # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
-       echo rs6000-bull-bosx
-       exit ;;
+       GUESS=rs6000-bull-bosx
+       ;;
     DPX/2?00:B.O.S.:*:*)
-       echo m68k-bull-sysv3
-       exit ;;
+       GUESS=m68k-bull-sysv3
+       ;;
     9000/[34]??:4.3bsd:1.*:*)
-       echo m68k-hp-bsd
-       exit ;;
+       GUESS=m68k-hp-bsd
+       ;;
     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-       echo m68k-hp-bsd4.4
-       exit ;;
+       GUESS=m68k-hp-bsd4.4
+       ;;
     9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
-       case "$UNAME_MACHINE" in
+       HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+       case $UNAME_MACHINE in
            9000/31?)            HP_ARCH=m68000 ;;
            9000/[34]??)         HP_ARCH=m68k ;;
            9000/[678][0-9][0-9])
-               if [ -x /usr/bin/getconf ]; then
+               if test -x /usr/bin/getconf; then
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                   case "$sc_cpu_version" in
+                   case $sc_cpu_version in
                      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
                      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
                      532)                      # CPU_PA_RISC2_0
-                       case "$sc_kernel_bits" in
+                       case $sc_kernel_bits in
                          32) HP_ARCH=hppa2.0n ;;
                          64) HP_ARCH=hppa2.0w ;;
                          '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
                        esac ;;
                    esac
                fi
-               if [ "$HP_ARCH" = "" ]; then
-                   eval "$set_cc_for_build"
+               if test "$HP_ARCH" = ""; then
+                   set_cc_for_build
                    sed 's/^            //' << EOF > "$dummy.c"
 
                #define _HPUX_SOURCE
@@ -698,9 +743,9 @@ EOF
                    test -z "$HP_ARCH" && HP_ARCH=hppa
                fi ;;
        esac
-       if [ "$HP_ARCH" = hppa2.0w ]
+       if test "$HP_ARCH" = hppa2.0w
        then
-           eval "$set_cc_for_build"
+           set_cc_for_build
 
            # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
            # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
@@ -719,14 +764,14 @@ EOF
                HP_ARCH=hppa64
            fi
        fi
-       echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
-       exit ;;
+       GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+       ;;
     ia64:HP-UX:*:*)
-       HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
-       echo ia64-hp-hpux"$HPUX_REV"
-       exit ;;
+       HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+       GUESS=ia64-hp-hpux$HPUX_REV
+       ;;
     3050*:HI-UX:*:*)
-       eval "$set_cc_for_build"
+       set_cc_for_build
        sed 's/^        //' << EOF > "$dummy.c"
        #include <unistd.h>
        int
@@ -754,36 +799,36 @@ EOF
 EOF
        $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
                { echo "$SYSTEM_NAME"; exit; }
-       echo unknown-hitachi-hiuxwe2
-       exit ;;
+       GUESS=unknown-hitachi-hiuxwe2
+       ;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
-       echo hppa1.1-hp-bsd
-       exit ;;
+       GUESS=hppa1.1-hp-bsd
+       ;;
     9000/8??:4.3bsd:*:*)
-       echo hppa1.0-hp-bsd
-       exit ;;
+       GUESS=hppa1.0-hp-bsd
+       ;;
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-       echo hppa1.0-hp-mpeix
-       exit ;;
+       GUESS=hppa1.0-hp-mpeix
+       ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
-       echo hppa1.1-hp-osf
-       exit ;;
+       GUESS=hppa1.1-hp-osf
+       ;;
     hp8??:OSF1:*:*)
-       echo hppa1.0-hp-osf
-       exit ;;
+       GUESS=hppa1.0-hp-osf
+       ;;
     i*86:OSF1:*:*)
-       if [ -x /usr/sbin/sysversion ] ; then
-           echo "$UNAME_MACHINE"-unknown-osf1mk
+       if test -x /usr/sbin/sysversion ; then
+           GUESS=$UNAME_MACHINE-unknown-osf1mk
        else
-           echo "$UNAME_MACHINE"-unknown-osf1
+           GUESS=$UNAME_MACHINE-unknown-osf1
        fi
-       exit ;;
+       ;;
     parisc*:Lites*:*:*)
-       echo hppa1.1-hp-lites
-       exit ;;
+       GUESS=hppa1.1-hp-lites
+       ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-       echo c1-convex-bsd
-       exit ;;
+       GUESS=c1-convex-bsd
+       ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
        if getsysinfo -f scalar_acc
        then echo c32-convex-bsd
@@ -791,17 +836,18 @@ EOF
        fi
        exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-       echo c34-convex-bsd
-       exit ;;
+       GUESS=c34-convex-bsd
+       ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-       echo c38-convex-bsd
-       exit ;;
+       GUESS=c38-convex-bsd
+       ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-       echo c4-convex-bsd
-       exit ;;
+       GUESS=c4-convex-bsd
+       ;;
     CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=ymp-cray-unicos$CRAY_REL
+       ;;
     CRAY*[A-Z]90:*:*:*)
        echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
        | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
@@ -809,103 +855,129 @@ EOF
              -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*TS:*:*:*)
-       echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=t90-cray-unicos$CRAY_REL
+       ;;
     CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=alphaev5-cray-unicosmk$CRAY_REL
+       ;;
     CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=sv1-cray-unicos$CRAY_REL
+       ;;
     *:UNICOS/mp:*:*)
-       echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=craynv-cray-unicosmp$CRAY_REL
+       ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
        FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
        FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
        FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
-       echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
+       GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+       ;;
     5000:UNIX_System_V:4.*:*)
        FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
        FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
-       echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
+       GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+       ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+       ;;
     sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+       ;;
     *:BSD/OS:*:*)
-       echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+       ;;
+    arm:FreeBSD:*:*)
+       UNAME_PROCESSOR=`uname -p`
+       set_cc_for_build
+       if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_PCS_VFP
+       then
+           FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+           GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
+       else
+           FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+           GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
+       fi
+       ;;
     *:FreeBSD:*:*)
        UNAME_PROCESSOR=`/usr/bin/uname -p`
-       case "$UNAME_PROCESSOR" in
+       case $UNAME_PROCESSOR in
            amd64)
                UNAME_PROCESSOR=x86_64 ;;
            i386)
                UNAME_PROCESSOR=i586 ;;
        esac
-       echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
-       exit ;;
+       FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+       GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+       ;;
     i*:CYGWIN*:*)
-       echo "$UNAME_MACHINE"-pc-cygwin
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-cygwin
+       ;;
     *:MINGW64*:*)
-       echo "$UNAME_MACHINE"-pc-mingw64
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-mingw64
+       ;;
     *:MINGW*:*)
-       echo "$UNAME_MACHINE"-pc-mingw32
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-mingw32
+       ;;
     *:MSYS*:*)
-       echo "$UNAME_MACHINE"-pc-msys
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-msys
+       ;;
     i*:PW*:*)
-       echo "$UNAME_MACHINE"-pc-pw32
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-pw32
+       ;;
+    *:SerenityOS:*:*)
+        GUESS=$UNAME_MACHINE-pc-serenity
+        ;;
     *:Interix*:*)
-       case "$UNAME_MACHINE" in
+       case $UNAME_MACHINE in
            x86)
-               echo i586-pc-interix"$UNAME_RELEASE"
-               exit ;;
+               GUESS=i586-pc-interix$UNAME_RELEASE
+               ;;
            authenticamd | genuineintel | EM64T)
-               echo x86_64-unknown-interix"$UNAME_RELEASE"
-               exit ;;
+               GUESS=x86_64-unknown-interix$UNAME_RELEASE
+               ;;
            IA64)
-               echo ia64-unknown-interix"$UNAME_RELEASE"
-               exit ;;
+               GUESS=ia64-unknown-interix$UNAME_RELEASE
+               ;;
        esac ;;
     i*:UWIN*:*)
-       echo "$UNAME_MACHINE"-pc-uwin
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-uwin
+       ;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-       echo x86_64-unknown-cygwin
-       exit ;;
+       GUESS=x86_64-pc-cygwin
+       ;;
     prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=powerpcle-unknown-solaris2$SUN_REL
+       ;;
     *:GNU:*:*)
        # the GNU system
-       echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
-       exit ;;
+       GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+       GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+       GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+       ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
-       echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
-       exit ;;
-    i*86:Minix:*:*)
-       echo "$UNAME_MACHINE"-pc-minix
-       exit ;;
+       GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+       GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+       GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+       ;;
+    *:Minix:*:*)
+       GUESS=$UNAME_MACHINE-unknown-minix
+       ;;
     aarch64:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     aarch64_be:Linux:*:*)
        UNAME_MACHINE=aarch64_be
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
          EV5)   UNAME_MACHINE=alphaev5 ;;
          EV56)  UNAME_MACHINE=alphaev56 ;;
          PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -916,187 +988,225 @@ EOF
        esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
        if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
+    arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     arm*:Linux:*:*)
-       eval "$set_cc_for_build"
+       set_cc_for_build
        if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
            | grep -q __ARM_EABI__
        then
-           echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+           GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
        else
            if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
                | grep -q __ARM_PCS_VFP
            then
-               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
+               GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
            else
-               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
+               GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
            fi
        fi
-       exit ;;
+       ;;
     avr32*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     cris:Linux:*:*)
-       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+       ;;
     crisv32:Linux:*:*)
-       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+       ;;
     e2k:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     frv:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     hexagon:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     i*86:Linux:*:*)
-       echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+       ;;
     ia64:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     k1om:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
+    loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     m32r*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     m68*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     mips:Linux:*:* | mips64:Linux:*:*)
-       eval "$set_cc_for_build"
+       set_cc_for_build
+       IS_GLIBC=0
+       test x"${LIBC}" = xgnu && IS_GLIBC=1
        sed 's/^        //' << EOF > "$dummy.c"
        #undef CPU
-       #undef ${UNAME_MACHINE}
-       #undef ${UNAME_MACHINE}el
+       #undef mips
+       #undef mipsel
+       #undef mips64
+       #undef mips64el
+       #if ${IS_GLIBC} && defined(_ABI64)
+       LIBCABI=gnuabi64
+       #else
+       #if ${IS_GLIBC} && defined(_ABIN32)
+       LIBCABI=gnuabin32
+       #else
+       LIBCABI=${LIBC}
+       #endif
+       #endif
+
+       #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+       CPU=mipsisa64r6
+       #else
+       #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+       CPU=mipsisa32r6
+       #else
+       #if defined(__mips64)
+       CPU=mips64
+       #else
+       CPU=mips
+       #endif
+       #endif
+       #endif
+
        #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=${UNAME_MACHINE}el
+       MIPS_ENDIAN=el
        #else
        #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=${UNAME_MACHINE}
+       MIPS_ENDIAN=
        #else
-       CPU=
+       MIPS_ENDIAN=
        #endif
        #endif
 EOF
-       eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
-       test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
+       cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+       eval "$cc_set_vars"
+       test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
        ;;
     mips64el:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     openrisc*:Linux:*:*)
-       echo or1k-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=or1k-unknown-linux-$LIBC
+       ;;
     or32:Linux:*:* | or1k*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     padre:Linux:*:*)
-       echo sparc-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=sparc-unknown-linux-$LIBC
+       ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=hppa64-unknown-linux-$LIBC
+       ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
        # Look for CPU level
        case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
-         PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
-         *)    echo hppa-unknown-linux-"$LIBC" ;;
+         PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+         PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+         *)    GUESS=hppa-unknown-linux-$LIBC ;;
        esac
-       exit ;;
+       ;;
     ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=powerpc64-unknown-linux-$LIBC
+       ;;
     ppc:Linux:*:*)
-       echo powerpc-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=powerpc-unknown-linux-$LIBC
+       ;;
     ppc64le:Linux:*:*)
-       echo powerpc64le-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=powerpc64le-unknown-linux-$LIBC
+       ;;
     ppcle:Linux:*:*)
-       echo powerpcle-unknown-linux-"$LIBC"
-       exit ;;
-    riscv32:Linux:*:* | riscv64:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=powerpcle-unknown-linux-$LIBC
+       ;;
+    riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-       echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+       ;;
     sh64*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     sh*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     tile*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     vax:Linux:*:*)
-       echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+       ;;
     x86_64:Linux:*:*)
-       if objdump -f /bin/sh | grep -q elf32-x86-64; then
-           echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32
-       else
-           echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+       set_cc_for_build
+       LIBCABI=$LIBC
+       if test "$CC_FOR_BUILD" != no_compiler_found; then
+           if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
+               (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_X32 >/dev/null
+           then
+               LIBCABI=${LIBC}x32
+           fi
        fi
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
+       ;;
     xtensa*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     i*86:DYNIX/ptx:4*:*)
        # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
        # earlier versions are messed up and put the nodename in both
        # sysname and nodename.
-       echo i386-sequent-sysv4
-       exit ;;
+       GUESS=i386-sequent-sysv4
+       ;;
     i*86:UNIX_SV:4.2MP:2.*)
        # Unixware is an offshoot of SVR4, but it has its own version
        # number series starting with 2...
        # I am not positive that other SVR4 systems won't match this,
        # I just have to hope.  -- rms.
        # Use sysv4.2uw... so that sysv4* matches it.
-       echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+       ;;
     i*86:OS/2:*:*)
        # If we were able to find `uname', then EMX Unix compatibility
        # is probably installed.
-       echo "$UNAME_MACHINE"-pc-os2-emx
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-os2-emx
+       ;;
     i*86:XTS-300:*:STOP)
-       echo "$UNAME_MACHINE"-unknown-stop
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-stop
+       ;;
     i*86:atheos:*:*)
-       echo "$UNAME_MACHINE"-unknown-atheos
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-atheos
+       ;;
     i*86:syllable:*:*)
-       echo "$UNAME_MACHINE"-pc-syllable
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-syllable
+       ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-       echo i386-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=i386-unknown-lynxos$UNAME_RELEASE
+       ;;
     i*86:*DOS:*:*)
-       echo "$UNAME_MACHINE"-pc-msdosdjgpp
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+       ;;
     i*86:*:4.*:*)
        UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
        if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+               GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
        else
-               echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+               GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
        fi
-       exit ;;
+       ;;
     i*86:*:5:[678]*)
        # UnixWare 7.x, OpenUNIX and OpenServer 6.
        case `/bin/uname -X | grep "^Machine"` in
@@ -1104,12 +1214,12 @@ EOF
            *Pentium)        UNAME_MACHINE=i586 ;;
            *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
        esac
-       echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       ;;
     i*86:*:3.2:*)
        if test -f /usr/options/cb.name; then
                UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-               echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+               GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
        elif /bin/uname -X 2>/dev/null >/dev/null ; then
                UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
                (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
@@ -1119,11 +1229,11 @@ EOF
                        && UNAME_MACHINE=i686
                (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
                        && UNAME_MACHINE=i686
-               echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+               GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
        else
-               echo "$UNAME_MACHINE"-pc-sysv32
+               GUESS=$UNAME_MACHINE-pc-sysv32
        fi
-       exit ;;
+       ;;
     pc:*:*:*)
        # Left here for compatibility:
        # uname -m prints for DJGPP always 'pc', but it prints nothing about
@@ -1131,31 +1241,31 @@ EOF
        # Note: whatever this is, it MUST be the same as what config.sub
        # prints for the "djgpp" host, or else GDB configure will decide that
        # this is a cross-build.
-       echo i586-pc-msdosdjgpp
-       exit ;;
+       GUESS=i586-pc-msdosdjgpp
+       ;;
     Intel:Mach:3*:*)
-       echo i386-pc-mach3
-       exit ;;
+       GUESS=i386-pc-mach3
+       ;;
     paragon:*:*:*)
-       echo i860-intel-osf1
-       exit ;;
+       GUESS=i860-intel-osf1
+       ;;
     i860:*:4.*:*) # i860-SVR4
        if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-         echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+         GUESS=i860-stardent-sysv$UNAME_RELEASE    # Stardent Vistra i860-SVR4
        else # Add other i860-SVR4 vendors below as they are discovered.
-         echo i860-unknown-sysv"$UNAME_RELEASE"  # Unknown i860-SVR4
+         GUESS=i860-unknown-sysv$UNAME_RELEASE     # Unknown i860-SVR4
        fi
-       exit ;;
+       ;;
     mini*:CTIX:SYS*5:*)
        # "miniframe"
-       echo m68010-convergent-sysv
-       exit ;;
+       GUESS=m68010-convergent-sysv
+       ;;
     mc68k:UNIX:SYSTEM5:3.51m)
-       echo m68k-convergent-sysv
-       exit ;;
+       GUESS=m68k-convergent-sysv
+       ;;
     M680?0:D-NIX:5.3:*)
-       echo m68k-diab-dnix
-       exit ;;
+       GUESS=m68k-diab-dnix
+       ;;
     M68*:*:R3V[5678]*:*)
        test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
@@ -1180,249 +1290,404 @@ EOF
        /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
            && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+       ;;
     mc68030:UNIX_System_V:4.*:*)
-       echo m68k-atari-sysv4
-       exit ;;
+       GUESS=m68k-atari-sysv4
+       ;;
     TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+       ;;
     rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+       ;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-       echo powerpc-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+       ;;
     SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv"$UNAME_RELEASE"
-       exit ;;
+       GUESS=mips-dde-sysv$UNAME_RELEASE
+       ;;
     RM*:ReliantUNIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
+       GUESS=mips-sni-sysv4
+       ;;
     RM*:SINIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
+       GUESS=mips-sni-sysv4
+       ;;
     *:SINIX-*:*:*)
        if uname -p 2>/dev/null >/dev/null ; then
                UNAME_MACHINE=`(uname -p) 2>/dev/null`
-               echo "$UNAME_MACHINE"-sni-sysv4
+               GUESS=$UNAME_MACHINE-sni-sysv4
        else
-               echo ns32k-sni-sysv
+               GUESS=ns32k-sni-sysv
        fi
-       exit ;;
+       ;;
     PENTIUM:*:4.0*:*)  # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                        # says <Richard.M.Bartel@ccMail.Census.GOV>
-       echo i586-unisys-sysv4
-       exit ;;
+       GUESS=i586-unisys-sysv4
+       ;;
     *:UNIX_System_V:4*:FTX*)
        # From Gerald Hewes <hewes@openmarket.com>.
        # How about differentiating between stratus architectures? -djm
-       echo hppa1.1-stratus-sysv4
-       exit ;;
+       GUESS=hppa1.1-stratus-sysv4
+       ;;
     *:*:*:FTX*)
        # From seanf@swdc.stratus.com.
-       echo i860-stratus-sysv4
-       exit ;;
+       GUESS=i860-stratus-sysv4
+       ;;
     i*86:VOS:*:*)
        # From Paul.Green@stratus.com.
-       echo "$UNAME_MACHINE"-stratus-vos
-       exit ;;
+       GUESS=$UNAME_MACHINE-stratus-vos
+       ;;
     *:VOS:*:*)
        # From Paul.Green@stratus.com.
-       echo hppa1.1-stratus-vos
-       exit ;;
+       GUESS=hppa1.1-stratus-vos
+       ;;
     mc68*:A/UX:*:*)
-       echo m68k-apple-aux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-apple-aux$UNAME_RELEASE
+       ;;
     news*:NEWS-OS:6*:*)
-       echo mips-sony-newsos6
-       exit ;;
+       GUESS=mips-sony-newsos6
+       ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-       if [ -d /usr/nec ]; then
-               echo mips-nec-sysv"$UNAME_RELEASE"
+       if test -d /usr/nec; then
+               GUESS=mips-nec-sysv$UNAME_RELEASE
        else
-               echo mips-unknown-sysv"$UNAME_RELEASE"
+               GUESS=mips-unknown-sysv$UNAME_RELEASE
        fi
-       exit ;;
+       ;;
     BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
-       echo powerpc-be-beos
-       exit ;;
+       GUESS=powerpc-be-beos
+       ;;
     BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
-       echo powerpc-apple-beos
-       exit ;;
+       GUESS=powerpc-apple-beos
+       ;;
     BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
-       echo i586-pc-beos
-       exit ;;
+       GUESS=i586-pc-beos
+       ;;
     BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
-       echo i586-pc-haiku
-       exit ;;
+       GUESS=i586-pc-haiku
+       ;;
     x86_64:Haiku:*:*)
-       echo x86_64-unknown-haiku
-       exit ;;
+       GUESS=x86_64-unknown-haiku
+       ;;
     SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx4-nec-superux$UNAME_RELEASE
+       ;;
     SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx5-nec-superux$UNAME_RELEASE
+       ;;
     SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx6-nec-superux$UNAME_RELEASE
+       ;;
     SX-7:SUPER-UX:*:*)
-       echo sx7-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx7-nec-superux$UNAME_RELEASE
+       ;;
     SX-8:SUPER-UX:*:*)
-       echo sx8-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx8-nec-superux$UNAME_RELEASE
+       ;;
     SX-8R:SUPER-UX:*:*)
-       echo sx8r-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx8r-nec-superux$UNAME_RELEASE
+       ;;
     SX-ACE:SUPER-UX:*:*)
-       echo sxace-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sxace-nec-superux$UNAME_RELEASE
+       ;;
     Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody"$UNAME_RELEASE"
-       exit ;;
+       GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+       ;;
     *:Rhapsody:*:*)
-       echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+       ;;
+    arm64:Darwin:*:*)
+       GUESS=aarch64-apple-darwin$UNAME_RELEASE
+       ;;
     *:Darwin:*:*)
-       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       eval "$set_cc_for_build"
-       if test "$UNAME_PROCESSOR" = unknown ; then
-           UNAME_PROCESSOR=powerpc
+       UNAME_PROCESSOR=`uname -p`
+       case $UNAME_PROCESSOR in
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       if command -v xcode-select > /dev/null 2> /dev/null && \
+               ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+           # Avoid executing cc if there is no toolchain installed as
+           # cc will be a stub that puts up a graphical alert
+           # prompting the user to install developer tools.
+           CC_FOR_BUILD=no_compiler_found
+       else
+           set_cc_for_build
        fi
-       if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
-           if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-               if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                      (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-                      grep IS_64BIT_ARCH >/dev/null
-               then
-                   case $UNAME_PROCESSOR in
-                       i386) UNAME_PROCESSOR=x86_64 ;;
-                       powerpc) UNAME_PROCESSOR=powerpc64 ;;
-                   esac
-               fi
-               # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
-               if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
-                      (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-                      grep IS_PPC >/dev/null
-               then
-                   UNAME_PROCESSOR=powerpc
-               fi
+       if test "$CC_FOR_BUILD" != no_compiler_found; then
+           if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                  (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                  grep IS_64BIT_ARCH >/dev/null
+           then
+               case $UNAME_PROCESSOR in
+                   i386) UNAME_PROCESSOR=x86_64 ;;
+                   powerpc) UNAME_PROCESSOR=powerpc64 ;;
+               esac
+           fi
+           # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+           if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+                  (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                  grep IS_PPC >/dev/null
+           then
+               UNAME_PROCESSOR=powerpc
            fi
        elif test "$UNAME_PROCESSOR" = i386 ; then
-           # Avoid executing cc on OS X 10.9, as it ships with a stub
-           # that puts up a graphical alert prompting to install
-           # developer tools.  Any system running Mac OS X 10.7 or
-           # later (Darwin 11 and later) is required to have a 64-bit
-           # processor. This is not true of the ARM version of Darwin
-           # that Apple uses in portable devices.
-           UNAME_PROCESSOR=x86_64
+           # uname -m returns i386 or x86_64
+           UNAME_PROCESSOR=$UNAME_MACHINE
        fi
-       echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+       ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
        UNAME_PROCESSOR=`uname -p`
        if test "$UNAME_PROCESSOR" = x86; then
                UNAME_PROCESSOR=i386
                UNAME_MACHINE=pc
        fi
-       echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+       ;;
     *:QNX:*:4*)
-       echo i386-pc-qnx
-       exit ;;
+       GUESS=i386-pc-qnx
+       ;;
     NEO-*:NONSTOP_KERNEL:*:*)
-       echo neo-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=neo-tandem-nsk$UNAME_RELEASE
+       ;;
     NSE-*:NONSTOP_KERNEL:*:*)
-       echo nse-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=nse-tandem-nsk$UNAME_RELEASE
+       ;;
     NSR-*:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=nsr-tandem-nsk$UNAME_RELEASE
+       ;;
     NSV-*:NONSTOP_KERNEL:*:*)
-       echo nsv-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=nsv-tandem-nsk$UNAME_RELEASE
+       ;;
     NSX-*:NONSTOP_KERNEL:*:*)
-       echo nsx-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=nsx-tandem-nsk$UNAME_RELEASE
+       ;;
     *:NonStop-UX:*:*)
-       echo mips-compaq-nonstopux
-       exit ;;
+       GUESS=mips-compaq-nonstopux
+       ;;
     BS2000:POSIX*:*:*)
-       echo bs2000-siemens-sysv
-       exit ;;
+       GUESS=bs2000-siemens-sysv
+       ;;
     DS/*:UNIX_System_V:*:*)
-       echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+       ;;
     *:Plan9:*:*)
        # "uname -m" is not consistent, so use $cputype instead. 386
        # is converted to i386 for consistency with other x86
        # operating systems.
-       if test "$cputype" = 386; then
+       if test "${cputype-}" = 386; then
            UNAME_MACHINE=i386
-       else
-           UNAME_MACHINE="$cputype"
+       elif test "x${cputype-}" != x; then
+           UNAME_MACHINE=$cputype
        fi
-       echo "$UNAME_MACHINE"-unknown-plan9
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-plan9
+       ;;
     *:TOPS-10:*:*)
-       echo pdp10-unknown-tops10
-       exit ;;
+       GUESS=pdp10-unknown-tops10
+       ;;
     *:TENEX:*:*)
-       echo pdp10-unknown-tenex
-       exit ;;
+       GUESS=pdp10-unknown-tenex
+       ;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-       echo pdp10-dec-tops20
-       exit ;;
+       GUESS=pdp10-dec-tops20
+       ;;
     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-       echo pdp10-xkl-tops20
-       exit ;;
+       GUESS=pdp10-xkl-tops20
+       ;;
     *:TOPS-20:*:*)
-       echo pdp10-unknown-tops20
-       exit ;;
+       GUESS=pdp10-unknown-tops20
+       ;;
     *:ITS:*:*)
-       echo pdp10-unknown-its
-       exit ;;
+       GUESS=pdp10-unknown-its
+       ;;
     SEI:*:*:SEIUX)
-       echo mips-sei-seiux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=mips-sei-seiux$UNAME_RELEASE
+       ;;
     *:DragonFly:*:*)
-       echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
-       exit ;;
+       DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+       GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+       ;;
     *:*VMS:*:*)
        UNAME_MACHINE=`(uname -p) 2>/dev/null`
-       case "$UNAME_MACHINE" in
-           A*) echo alpha-dec-vms ; exit ;;
-           I*) echo ia64-dec-vms ; exit ;;
-           V*) echo vax-dec-vms ; exit ;;
+       case $UNAME_MACHINE in
+           A*) GUESS=alpha-dec-vms ;;
+           I*) GUESS=ia64-dec-vms ;;
+           V*) GUESS=vax-dec-vms ;;
        esac ;;
     *:XENIX:*:SysV)
-       echo i386-pc-xenix
-       exit ;;
+       GUESS=i386-pc-xenix
+       ;;
     i*86:skyos:*:*)
-       echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
-       exit ;;
+       SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+       GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+       ;;
     i*86:rdos:*:*)
-       echo "$UNAME_MACHINE"-pc-rdos
-       exit ;;
-    i*86:AROS:*:*)
-       echo "$UNAME_MACHINE"-pc-aros
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-rdos
+       ;;
+    i*86:Fiwix:*:*)
+       GUESS=$UNAME_MACHINE-pc-fiwix
+       ;;
+    *:AROS:*:*)
+       GUESS=$UNAME_MACHINE-unknown-aros
+       ;;
     x86_64:VMkernel:*:*)
-       echo "$UNAME_MACHINE"-unknown-esx
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-esx
+       ;;
     amd64:Isilon\ OneFS:*:*)
-       echo x86_64-unknown-onefs
-       exit ;;
+       GUESS=x86_64-unknown-onefs
+       ;;
+    *:Unleashed:*:*)
+       GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+       ;;
 esac
 
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+    echo "$GUESS"
+    exit
+fi
+
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+  "4"
+#else
+  ""
+#endif
+  ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+  struct utsname un;
+
+  uname(&un);
+  if (strncmp(un.version, "V2", 2) == 0) {
+    printf ("i386-sequent-ptx2\n"); exit (0);
+  }
+  if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+    printf ("i386-sequent-ptx1\n"); exit (0);
+  }
+  printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+  printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+  printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+  printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+  printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+  struct utsname un;
+  uname (&un);
+  printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+  printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+  struct utsname *un;
+  uname (&un);
+  printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+  printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
 echo "$0: unable to guess system type" >&2
 
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+case $UNAME_MACHINE:$UNAME_SYSTEM in
     mips:Linux | mips64:Linux)
        # If we got here on MIPS GNU/Linux, output extra information.
        cat >&2 <<EOF
@@ -1439,9 +1704,17 @@ This script (version $timestamp), has failed to recognize the
 operating system you are using. If your script is old, overwrite *all*
 copies of config.guess and config.sub with the latest versions from:
 
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+  https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
 and
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+  https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
+# shellcheck disable=SC2003
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
+   cat >&2 <<EOF
 
 If $0 has already been updated, send the following data and any
 information you think might be pertinent to config-patches@gnu.org to
@@ -1469,11 +1742,12 @@ UNAME_RELEASE = "$UNAME_RELEASE"
 UNAME_SYSTEM  = "$UNAME_SYSTEM"
 UNAME_VERSION = "$UNAME_VERSION"
 EOF
+fi
 
 exit 1
 
 # Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
index 1d8e98b..dba16e8 100755 (executable)
@@ -1,12 +1,14 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2018 Free Software Foundation, Inc.
+#   Copyright 1992-2022 Free Software Foundation, Inc.
 
-timestamp='2018-02-22'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-03'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -33,7 +35,7 @@ timestamp='2018-02-22'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -50,6 +52,13 @@ timestamp='2018-02-22'
 #      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
 # It is wrong to echo any other type of specification.
 
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX.  However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
@@ -67,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright 1992-2022 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -89,7 +98,7 @@ while test $# -gt 0 ; do
     - )        # Use stdin as input.
        break ;;
     -* )
-       echo "$me: invalid option $1$help"
+       echo "$me: invalid option $1$help" >&2
        exit 1 ;;
 
     *local*)
@@ -110,1223 +119,1186 @@ case $# in
     exit 1;;
 esac
 
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-  kopensolaris*-gnu* | cloudabi*-eabi* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
-    if [ "$basic_machine" != "$1" ]
-    then os=`echo "$1" | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
+# Split fields of configuration type
+# shellcheck disable=SC2162
+saved_IFS=$IFS
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
+IFS=$saved_IFS
 
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-       -sun*os*)
-               # Prevent following clause from handling this invalid input.
-               ;;
-       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray | -microblaze*)
-               os=
-               basic_machine=$1
-               ;;
-       -bluegene*)
-               os=-cnk
-               ;;
-       -sim | -cisco | -oki | -wec | -winbond)
-               os=
-               basic_machine=$1
-               ;;
-       -scout)
-               ;;
-       -wrs)
-               os=-vxworks
-               basic_machine=$1
-               ;;
-       -chorusos*)
-               os=-chorusos
-               basic_machine=$1
-               ;;
-       -chorusrdb)
-               os=-chorusrdb
-               basic_machine=$1
-               ;;
-       -hiux*)
-               os=-hiuxwe2
-               ;;
-       -sco6)
-               os=-sco5v6
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5)
-               os=-sco3.2v5
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco4)
-               os=-sco3.2v4
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2.[4-9]*)
-               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2v[4-9]*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5v6*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco*)
-               os=-sco3.2v2
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -udk*)
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -isc)
-               os=-isc2.2
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -clix*)
-               basic_machine=clipper-intergraph
-               ;;
-       -isc*)
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -lynx*178)
-               os=-lynxos178
-               ;;
-       -lynx*5)
-               os=-lynxos5
+# Separate into logical components for further validation
+case $1 in
+       *-*-*-*-*)
+               echo Invalid configuration \`"$1"\': more than four components >&2
+               exit 1
                ;;
-       -lynx*)
-               os=-lynxos
+       *-*-*-*)
+               basic_machine=$field1-$field2
+               basic_os=$field3-$field4
                ;;
-       -ptx*)
-               basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'`
+       *-*-*)
+               # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+               # parts
+               maybe_os=$field2-$field3
+               case $maybe_os in
+                       nto-qnx* | linux-* | uclinux-uclibc* \
+                       | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+                       | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+                       | storm-chaos* | os2-emx* | rtmk-nova*)
+                               basic_machine=$field1
+                               basic_os=$maybe_os
+                               ;;
+                       android-linux)
+                               basic_machine=$field1-unknown
+                               basic_os=linux-android
+                               ;;
+                       *)
+                               basic_machine=$field1-$field2
+                               basic_os=$field3
+                               ;;
+               esac
                ;;
-       -psos*)
-               os=-psos
+       *-*)
+               # A lone config we happen to match not fitting any pattern
+               case $field1-$field2 in
+                       decstation-3100)
+                               basic_machine=mips-dec
+                               basic_os=
+                               ;;
+                       *-*)
+                               # Second component is usually, but not always the OS
+                               case $field2 in
+                                       # Prevent following clause from handling this valid os
+                                       sun*os*)
+                                               basic_machine=$field1
+                                               basic_os=$field2
+                                               ;;
+                                       zephyr*)
+                                               basic_machine=$field1-unknown
+                                               basic_os=$field2
+                                               ;;
+                                       # Manufacturers
+                                       dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+                                       | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+                                       | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+                                       | convergent* | ncr* | news | 32* | 3600* | 3100* \
+                                       | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+                                       | ultra | tti* | harris | dolphin | highlevel | gould \
+                                       | cbm | ns | masscomp | apple | axis | knuth | cray \
+                                       | microblaze* | sim | cisco \
+                                       | oki | wec | wrs | winbond)
+                                               basic_machine=$field1-$field2
+                                               basic_os=
+                                               ;;
+                                       *)
+                                               basic_machine=$field1
+                                               basic_os=$field2
+                                               ;;
+                               esac
+                       ;;
+               esac
                ;;
-       -mint | -mint[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
+       *)
+               # Convert single-component short-hands not valid as part of
+               # multi-component configurations.
+               case $field1 in
+                       386bsd)
+                               basic_machine=i386-pc
+                               basic_os=bsd
+                               ;;
+                       a29khif)
+                               basic_machine=a29k-amd
+                               basic_os=udi
+                               ;;
+                       adobe68k)
+                               basic_machine=m68010-adobe
+                               basic_os=scout
+                               ;;
+                       alliant)
+                               basic_machine=fx80-alliant
+                               basic_os=
+                               ;;
+                       altos | altos3068)
+                               basic_machine=m68k-altos
+                               basic_os=
+                               ;;
+                       am29k)
+                               basic_machine=a29k-none
+                               basic_os=bsd
+                               ;;
+                       amdahl)
+                               basic_machine=580-amdahl
+                               basic_os=sysv
+                               ;;
+                       amiga)
+                               basic_machine=m68k-unknown
+                               basic_os=
+                               ;;
+                       amigaos | amigados)
+                               basic_machine=m68k-unknown
+                               basic_os=amigaos
+                               ;;
+                       amigaunix | amix)
+                               basic_machine=m68k-unknown
+                               basic_os=sysv4
+                               ;;
+                       apollo68)
+                               basic_machine=m68k-apollo
+                               basic_os=sysv
+                               ;;
+                       apollo68bsd)
+                               basic_machine=m68k-apollo
+                               basic_os=bsd
+                               ;;
+                       aros)
+                               basic_machine=i386-pc
+                               basic_os=aros
+                               ;;
+                       aux)
+                               basic_machine=m68k-apple
+                               basic_os=aux
+                               ;;
+                       balance)
+                               basic_machine=ns32k-sequent
+                               basic_os=dynix
+                               ;;
+                       blackfin)
+                               basic_machine=bfin-unknown
+                               basic_os=linux
+                               ;;
+                       cegcc)
+                               basic_machine=arm-unknown
+                               basic_os=cegcc
+                               ;;
+                       convex-c1)
+                               basic_machine=c1-convex
+                               basic_os=bsd
+                               ;;
+                       convex-c2)
+                               basic_machine=c2-convex
+                               basic_os=bsd
+                               ;;
+                       convex-c32)
+                               basic_machine=c32-convex
+                               basic_os=bsd
+                               ;;
+                       convex-c34)
+                               basic_machine=c34-convex
+                               basic_os=bsd
+                               ;;
+                       convex-c38)
+                               basic_machine=c38-convex
+                               basic_os=bsd
+                               ;;
+                       cray)
+                               basic_machine=j90-cray
+                               basic_os=unicos
+                               ;;
+                       crds | unos)
+                               basic_machine=m68k-crds
+                               basic_os=
+                               ;;
+                       da30)
+                               basic_machine=m68k-da30
+                               basic_os=
+                               ;;
+                       decstation | pmax | pmin | dec3100 | decstatn)
+                               basic_machine=mips-dec
+                               basic_os=
+                               ;;
+                       delta88)
+                               basic_machine=m88k-motorola
+                               basic_os=sysv3
+                               ;;
+                       dicos)
+                               basic_machine=i686-pc
+                               basic_os=dicos
+                               ;;
+                       djgpp)
+                               basic_machine=i586-pc
+                               basic_os=msdosdjgpp
+                               ;;
+                       ebmon29k)
+                               basic_machine=a29k-amd
+                               basic_os=ebmon
+                               ;;
+                       es1800 | OSE68k | ose68k | ose | OSE)
+                               basic_machine=m68k-ericsson
+                               basic_os=ose
+                               ;;
+                       gmicro)
+                               basic_machine=tron-gmicro
+                               basic_os=sysv
+                               ;;
+                       go32)
+                               basic_machine=i386-pc
+                               basic_os=go32
+                               ;;
+                       h8300hms)
+                               basic_machine=h8300-hitachi
+                               basic_os=hms
+                               ;;
+                       h8300xray)
+                               basic_machine=h8300-hitachi
+                               basic_os=xray
+                               ;;
+                       h8500hms)
+                               basic_machine=h8500-hitachi
+                               basic_os=hms
+                               ;;
+                       harris)
+                               basic_machine=m88k-harris
+                               basic_os=sysv3
+                               ;;
+                       hp300 | hp300hpux)
+                               basic_machine=m68k-hp
+                               basic_os=hpux
+                               ;;
+                       hp300bsd)
+                               basic_machine=m68k-hp
+                               basic_os=bsd
+                               ;;
+                       hppaosf)
+                               basic_machine=hppa1.1-hp
+                               basic_os=osf
+                               ;;
+                       hppro)
+                               basic_machine=hppa1.1-hp
+                               basic_os=proelf
+                               ;;
+                       i386mach)
+                               basic_machine=i386-mach
+                               basic_os=mach
+                               ;;
+                       isi68 | isi)
+                               basic_machine=m68k-isi
+                               basic_os=sysv
+                               ;;
+                       m68knommu)
+                               basic_machine=m68k-unknown
+                               basic_os=linux
+                               ;;
+                       magnum | m3230)
+                               basic_machine=mips-mips
+                               basic_os=sysv
+                               ;;
+                       merlin)
+                               basic_machine=ns32k-utek
+                               basic_os=sysv
+                               ;;
+                       mingw64)
+                               basic_machine=x86_64-pc
+                               basic_os=mingw64
+                               ;;
+                       mingw32)
+                               basic_machine=i686-pc
+                               basic_os=mingw32
+                               ;;
+                       mingw32ce)
+                               basic_machine=arm-unknown
+                               basic_os=mingw32ce
+                               ;;
+                       monitor)
+                               basic_machine=m68k-rom68k
+                               basic_os=coff
+                               ;;
+                       morphos)
+                               basic_machine=powerpc-unknown
+                               basic_os=morphos
+                               ;;
+                       moxiebox)
+                               basic_machine=moxie-unknown
+                               basic_os=moxiebox
+                               ;;
+                       msdos)
+                               basic_machine=i386-pc
+                               basic_os=msdos
+                               ;;
+                       msys)
+                               basic_machine=i686-pc
+                               basic_os=msys
+                               ;;
+                       mvs)
+                               basic_machine=i370-ibm
+                               basic_os=mvs
+                               ;;
+                       nacl)
+                               basic_machine=le32-unknown
+                               basic_os=nacl
+                               ;;
+                       ncr3000)
+                               basic_machine=i486-ncr
+                               basic_os=sysv4
+                               ;;
+                       netbsd386)
+                               basic_machine=i386-pc
+                               basic_os=netbsd
+                               ;;
+                       netwinder)
+                               basic_machine=armv4l-rebel
+                               basic_os=linux
+                               ;;
+                       news | news700 | news800 | news900)
+                               basic_machine=m68k-sony
+                               basic_os=newsos
+                               ;;
+                       news1000)
+                               basic_machine=m68030-sony
+                               basic_os=newsos
+                               ;;
+                       necv70)
+                               basic_machine=v70-nec
+                               basic_os=sysv
+                               ;;
+                       nh3000)
+                               basic_machine=m68k-harris
+                               basic_os=cxux
+                               ;;
+                       nh[45]000)
+                               basic_machine=m88k-harris
+                               basic_os=cxux
+                               ;;
+                       nindy960)
+                               basic_machine=i960-intel
+                               basic_os=nindy
+                               ;;
+                       mon960)
+                               basic_machine=i960-intel
+                               basic_os=mon960
+                               ;;
+                       nonstopux)
+                               basic_machine=mips-compaq
+                               basic_os=nonstopux
+                               ;;
+                       os400)
+                               basic_machine=powerpc-ibm
+                               basic_os=os400
+                               ;;
+                       OSE68000 | ose68000)
+                               basic_machine=m68000-ericsson
+                               basic_os=ose
+                               ;;
+                       os68k)
+                               basic_machine=m68k-none
+                               basic_os=os68k
+                               ;;
+                       paragon)
+                               basic_machine=i860-intel
+                               basic_os=osf
+                               ;;
+                       parisc)
+                               basic_machine=hppa-unknown
+                               basic_os=linux
+                               ;;
+                       psp)
+                               basic_machine=mipsallegrexel-sony
+                               basic_os=psp
+                               ;;
+                       pw32)
+                               basic_machine=i586-unknown
+                               basic_os=pw32
+                               ;;
+                       rdos | rdos64)
+                               basic_machine=x86_64-pc
+                               basic_os=rdos
+                               ;;
+                       rdos32)
+                               basic_machine=i386-pc
+                               basic_os=rdos
+                               ;;
+                       rom68k)
+                               basic_machine=m68k-rom68k
+                               basic_os=coff
+                               ;;
+                       sa29200)
+                               basic_machine=a29k-amd
+                               basic_os=udi
+                               ;;
+                       sei)
+                               basic_machine=mips-sei
+                               basic_os=seiux
+                               ;;
+                       sequent)
+                               basic_machine=i386-sequent
+                               basic_os=
+                               ;;
+                       sps7)
+                               basic_machine=m68k-bull
+                               basic_os=sysv2
+                               ;;
+                       st2000)
+                               basic_machine=m68k-tandem
+                               basic_os=
+                               ;;
+                       stratus)
+                               basic_machine=i860-stratus
+                               basic_os=sysv4
+                               ;;
+                       sun2)
+                               basic_machine=m68000-sun
+                               basic_os=
+                               ;;
+                       sun2os3)
+                               basic_machine=m68000-sun
+                               basic_os=sunos3
+                               ;;
+                       sun2os4)
+                               basic_machine=m68000-sun
+                               basic_os=sunos4
+                               ;;
+                       sun3)
+                               basic_machine=m68k-sun
+                               basic_os=
+                               ;;
+                       sun3os3)
+                               basic_machine=m68k-sun
+                               basic_os=sunos3
+                               ;;
+                       sun3os4)
+                               basic_machine=m68k-sun
+                               basic_os=sunos4
+                               ;;
+                       sun4)
+                               basic_machine=sparc-sun
+                               basic_os=
+                               ;;
+                       sun4os3)
+                               basic_machine=sparc-sun
+                               basic_os=sunos3
+                               ;;
+                       sun4os4)
+                               basic_machine=sparc-sun
+                               basic_os=sunos4
+                               ;;
+                       sun4sol2)
+                               basic_machine=sparc-sun
+                               basic_os=solaris2
+                               ;;
+                       sun386 | sun386i | roadrunner)
+                               basic_machine=i386-sun
+                               basic_os=
+                               ;;
+                       sv1)
+                               basic_machine=sv1-cray
+                               basic_os=unicos
+                               ;;
+                       symmetry)
+                               basic_machine=i386-sequent
+                               basic_os=dynix
+                               ;;
+                       t3e)
+                               basic_machine=alphaev5-cray
+                               basic_os=unicos
+                               ;;
+                       t90)
+                               basic_machine=t90-cray
+                               basic_os=unicos
+                               ;;
+                       toad1)
+                               basic_machine=pdp10-xkl
+                               basic_os=tops20
+                               ;;
+                       tpf)
+                               basic_machine=s390x-ibm
+                               basic_os=tpf
+                               ;;
+                       udi29k)
+                               basic_machine=a29k-amd
+                               basic_os=udi
+                               ;;
+                       ultra3)
+                               basic_machine=a29k-nyu
+                               basic_os=sym1
+                               ;;
+                       v810 | necv810)
+                               basic_machine=v810-nec
+                               basic_os=none
+                               ;;
+                       vaxv)
+                               basic_machine=vax-dec
+                               basic_os=sysv
+                               ;;
+                       vms)
+                               basic_machine=vax-dec
+                               basic_os=vms
+                               ;;
+                       vsta)
+                               basic_machine=i386-pc
+                               basic_os=vsta
+                               ;;
+                       vxworks960)
+                               basic_machine=i960-wrs
+                               basic_os=vxworks
+                               ;;
+                       vxworks68)
+                               basic_machine=m68k-wrs
+                               basic_os=vxworks
+                               ;;
+                       vxworks29k)
+                               basic_machine=a29k-wrs
+                               basic_os=vxworks
+                               ;;
+                       xbox)
+                               basic_machine=i686-pc
+                               basic_os=mingw32
+                               ;;
+                       ymp)
+                               basic_machine=ymp-cray
+                               basic_os=unicos
+                               ;;
+                       *)
+                               basic_machine=$1
+                               basic_os=
+                               ;;
+               esac
                ;;
 esac
 
-# Decode aliases for certain CPU-COMPANY combinations.
+# Decode 1-component or ad-hoc basic machines
 case $basic_machine in
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-       1750a | 580 \
-       | a29k \
-       | aarch64 | aarch64_be \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-       | am33_2.0 \
-       | arc | arceb \
-       | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-       | avr | avr32 \
-       | ba \
-       | be32 | be64 \
-       | bfin \
-       | c4x | c8051 | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | e2k | epiphany \
-       | fido | fr30 | frv | ft32 \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | hexagon \
-       | i370 | i860 | i960 | ia16 | ia64 \
-       | ip2k | iq2000 \
-       | k1om \
-       | le32 | le64 \
-       | lm32 \
-       | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-       | mips | mipsbe | mipseb | mipsel | mipsle \
-       | mips16 \
-       | mips64 | mips64el \
-       | mips64octeon | mips64octeonel \
-       | mips64orion | mips64orionel \
-       | mips64r5900 | mips64r5900el \
-       | mips64vr | mips64vrel \
-       | mips64vr4100 | mips64vr4100el \
-       | mips64vr4300 | mips64vr4300el \
-       | mips64vr5000 | mips64vr5000el \
-       | mips64vr5900 | mips64vr5900el \
-       | mipsisa32 | mipsisa32el \
-       | mipsisa32r2 | mipsisa32r2el \
-       | mipsisa32r6 | mipsisa32r6el \
-       | mipsisa64 | mipsisa64el \
-       | mipsisa64r2 | mipsisa64r2el \
-       | mipsisa64r6 | mipsisa64r6el \
-       | mipsisa64sb1 | mipsisa64sb1el \
-       | mipsisa64sr71k | mipsisa64sr71kel \
-       | mipsr5900 | mipsr5900el \
-       | mipstx39 | mipstx39el \
-       | mn10200 | mn10300 \
-       | moxie \
-       | mt \
-       | msp430 \
-       | nds32 | nds32le | nds32be \
-       | nios | nios2 | nios2eb | nios2el \
-       | ns16k | ns32k \
-       | open8 | or1k | or1knd | or32 \
-       | pdp10 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle \
-       | pru \
-       | pyramid \
-       | riscv32 | riscv64 \
-       | rl78 | rx \
-       | score \
-       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-       | sh64 | sh64le \
-       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu \
-       | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-       | ubicom32 \
-       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-       | visium \
-       | wasm32 \
-       | x86 | xc16x | xstormy16 | xtensa \
-       | z8k | z80)
-               basic_machine=$basic_machine-unknown
-               ;;
-       c54x)
-               basic_machine=tic54x-unknown
-               ;;
-       c55x)
-               basic_machine=tic55x-unknown
-               ;;
-       c6x)
-               basic_machine=tic6x-unknown
-               ;;
-       leon|leon[3-9])
-               basic_machine=sparc-$basic_machine
-               ;;
-       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-               basic_machine=$basic_machine-unknown
-               os=-none
+       # Here we handle the default manufacturer of certain CPU types.  It is in
+       # some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               cpu=hppa1.1
+               vendor=winbond
                ;;
-       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
+       op50n)
+               cpu=hppa1.1
+               vendor=oki
                ;;
-       ms1)
-               basic_machine=mt-unknown
+       op60c)
+               cpu=hppa1.1
+               vendor=oki
                ;;
-
-       strongarm | thumb | xscale)
-               basic_machine=arm-unknown
+       ibm*)
+               cpu=i370
+               vendor=ibm
                ;;
-       xgate)
-               basic_machine=$basic_machine-unknown
-               os=-none
+       orion105)
+               cpu=clipper
+               vendor=highlevel
                ;;
-       xscaleeb)
-               basic_machine=armeb-unknown
+       mac | mpw | mac-mpw)
+               cpu=m68k
+               vendor=apple
                ;;
-
-       xscaleel)
-               basic_machine=armel-unknown
+       pmac | pmac-mpw)
+               cpu=powerpc
+               vendor=apple
                ;;
 
-       # We use `pc' rather than `unknown'
-       # because (1) that's what they normally are, and
-       # (2) the word "unknown" tends to confuse beginning users.
-       i*86 | x86_64)
-         basic_machine=$basic_machine-pc
-         ;;
-       # Object if more than one company name word.
-       *-*-*)
-               echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
-               exit 1
-               ;;
-       # Recognize the basic CPU types with company name.
-       580-* \
-       | a29k-* \
-       | aarch64-* | aarch64_be-* \
-       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-       | avr-* | avr32-* \
-       | ba-* \
-       | be32-* | be64-* \
-       | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* \
-       | c8051-* | clipper-* | craynv-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | e2k-* | elxsi-* \
-       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | hexagon-* \
-       | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
-       | ip2k-* | iq2000-* \
-       | k1om-* \
-       | le32-* | le64-* \
-       | lm32-* \
-       | m32c-* | m32r-* | m32rle-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-       | microblaze-* | microblazeel-* \
-       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-       | mips16-* \
-       | mips64-* | mips64el-* \
-       | mips64octeon-* | mips64octeonel-* \
-       | mips64orion-* | mips64orionel-* \
-       | mips64r5900-* | mips64r5900el-* \
-       | mips64vr-* | mips64vrel-* \
-       | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* \
-       | mips64vr5000-* | mips64vr5000el-* \
-       | mips64vr5900-* | mips64vr5900el-* \
-       | mipsisa32-* | mipsisa32el-* \
-       | mipsisa32r2-* | mipsisa32r2el-* \
-       | mipsisa32r6-* | mipsisa32r6el-* \
-       | mipsisa64-* | mipsisa64el-* \
-       | mipsisa64r2-* | mipsisa64r2el-* \
-       | mipsisa64r6-* | mipsisa64r6el-* \
-       | mipsisa64sb1-* | mipsisa64sb1el-* \
-       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-       | mipsr5900-* | mipsr5900el-* \
-       | mipstx39-* | mipstx39el-* \
-       | mmix-* \
-       | mt-* \
-       | msp430-* \
-       | nds32-* | nds32le-* | nds32be-* \
-       | nios-* | nios2-* | nios2eb-* | nios2el-* \
-       | none-* | np1-* | ns16k-* | ns32k-* \
-       | open8-* \
-       | or1k*-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-       | pru-* \
-       | pyramid-* \
-       | riscv32-* | riscv64-* \
-       | rl78-* | romp-* | rs6000-* | rx-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-       | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
-       | tahoe-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tile*-* \
-       | tron-* \
-       | ubicom32-* \
-       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-       | vax-* \
-       | visium-* \
-       | wasm32-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* \
-       | xstormy16-* | xtensa*-* \
-       | ymp-* \
-       | z8k-* | z80-*)
-               ;;
-       # Recognize the basic CPU types without company name, with glob match.
-       xtensa*)
-               basic_machine=$basic_machine-unknown
-               ;;
        # Recognize the various machine names and aliases which stand
        # for a CPU type and a company and sometimes even an OS.
-       386bsd)
-               basic_machine=i386-pc
-               os=-bsd
-               ;;
        3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-               basic_machine=m68000-att
+               cpu=m68000
+               vendor=att
                ;;
        3b*)
-               basic_machine=we32k-att
-               ;;
-       a29khif)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       abacus)
-               basic_machine=abacus-unknown
-               ;;
-       adobe68k)
-               basic_machine=m68010-adobe
-               os=-scout
-               ;;
-       alliant | fx80)
-               basic_machine=fx80-alliant
-               ;;
-       altos | altos3068)
-               basic_machine=m68k-altos
-               ;;
-       am29k)
-               basic_machine=a29k-none
-               os=-bsd
-               ;;
-       amd64)
-               basic_machine=x86_64-pc
-               ;;
-       amd64-*)
-               basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               ;;
-       amdahl)
-               basic_machine=580-amdahl
-               os=-sysv
-               ;;
-       amiga | amiga-*)
-               basic_machine=m68k-unknown
-               ;;
-       amigaos | amigados)
-               basic_machine=m68k-unknown
-               os=-amigaos
-               ;;
-       amigaunix | amix)
-               basic_machine=m68k-unknown
-               os=-sysv4
-               ;;
-       apollo68)
-               basic_machine=m68k-apollo
-               os=-sysv
-               ;;
-       apollo68bsd)
-               basic_machine=m68k-apollo
-               os=-bsd
-               ;;
-       aros)
-               basic_machine=i386-pc
-               os=-aros
-               ;;
-       asmjs)
-               basic_machine=asmjs-unknown
-               ;;
-       aux)
-               basic_machine=m68k-apple
-               os=-aux
-               ;;
-       balance)
-               basic_machine=ns32k-sequent
-               os=-dynix
-               ;;
-       blackfin)
-               basic_machine=bfin-unknown
-               os=-linux
-               ;;
-       blackfin-*)
-               basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               os=-linux
+               cpu=we32k
+               vendor=att
                ;;
        bluegene*)
-               basic_machine=powerpc-ibm
-               os=-cnk
-               ;;
-       c54x-*)
-               basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               ;;
-       c55x-*)
-               basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               ;;
-       c6x-*)
-               basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               ;;
-       c90)
-               basic_machine=c90-cray
-               os=-unicos
-               ;;
-       cegcc)
-               basic_machine=arm-unknown
-               os=-cegcc
-               ;;
-       convex-c1)
-               basic_machine=c1-convex
-               os=-bsd
-               ;;
-       convex-c2)
-               basic_machine=c2-convex
-               os=-bsd
-               ;;
-       convex-c32)
-               basic_machine=c32-convex
-               os=-bsd
-               ;;
-       convex-c34)
-               basic_machine=c34-convex
-               os=-bsd
-               ;;
-       convex-c38)
-               basic_machine=c38-convex
-               os=-bsd
-               ;;
-       cray | j90)
-               basic_machine=j90-cray
-               os=-unicos
-               ;;
-       craynv)
-               basic_machine=craynv-cray
-               os=-unicosmp
-               ;;
-       cr16 | cr16-*)
-               basic_machine=cr16-unknown
-               os=-elf
-               ;;
-       crds | unos)
-               basic_machine=m68k-crds
-               ;;
-       crisv32 | crisv32-* | etraxfs*)
-               basic_machine=crisv32-axis
-               ;;
-       cris | cris-* | etrax*)
-               basic_machine=cris-axis
-               ;;
-       crx)
-               basic_machine=crx-unknown
-               os=-elf
-               ;;
-       da30 | da30-*)
-               basic_machine=m68k-da30
-               ;;
-       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-               basic_machine=mips-dec
+               cpu=powerpc
+               vendor=ibm
+               basic_os=cnk
                ;;
        decsystem10* | dec10*)
-               basic_machine=pdp10-dec
-               os=-tops10
+               cpu=pdp10
+               vendor=dec
+               basic_os=tops10
                ;;
        decsystem20* | dec20*)
-               basic_machine=pdp10-dec
-               os=-tops20
+               cpu=pdp10
+               vendor=dec
+               basic_os=tops20
                ;;
        delta | 3300 | motorola-3300 | motorola-delta \
              | 3300-motorola | delta-motorola)
-               basic_machine=m68k-motorola
-               ;;
-       delta88)
-               basic_machine=m88k-motorola
-               os=-sysv3
-               ;;
-       dicos)
-               basic_machine=i686-pc
-               os=-dicos
-               ;;
-       djgpp)
-               basic_machine=i586-pc
-               os=-msdosdjgpp
-               ;;
-       dpx20 | dpx20-*)
-               basic_machine=rs6000-bull
-               os=-bosx
+               cpu=m68k
+               vendor=motorola
                ;;
        dpx2*)
-               basic_machine=m68k-bull
-               os=-sysv3
-               ;;
-       e500v[12])
-               basic_machine=powerpc-unknown
-               os=$os"spe"
-               ;;
-       e500v[12]-*)
-               basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               os=$os"spe"
-               ;;
-       ebmon29k)
-               basic_machine=a29k-amd
-               os=-ebmon
-               ;;
-       elxsi)
-               basic_machine=elxsi-elxsi
-               os=-bsd
+               cpu=m68k
+               vendor=bull
+               basic_os=sysv3
                ;;
        encore | umax | mmax)
-               basic_machine=ns32k-encore
+               cpu=ns32k
+               vendor=encore
                ;;
-       es1800 | OSE68k | ose68k | ose | OSE)
-               basic_machine=m68k-ericsson
-               os=-ose
+       elxsi)
+               cpu=elxsi
+               vendor=elxsi
+               basic_os=${basic_os:-bsd}
                ;;
        fx2800)
-               basic_machine=i860-alliant
+               cpu=i860
+               vendor=alliant
                ;;
        genix)
-               basic_machine=ns32k-ns
-               ;;
-       gmicro)
-               basic_machine=tron-gmicro
-               os=-sysv
-               ;;
-       go32)
-               basic_machine=i386-pc
-               os=-go32
+               cpu=ns32k
+               vendor=ns
                ;;
        h3050r* | hiux*)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       h8300hms)
-               basic_machine=h8300-hitachi
-               os=-hms
-               ;;
-       h8300xray)
-               basic_machine=h8300-hitachi
-               os=-xray
-               ;;
-       h8500hms)
-               basic_machine=h8500-hitachi
-               os=-hms
-               ;;
-       harris)
-               basic_machine=m88k-harris
-               os=-sysv3
-               ;;
-       hp300-*)
-               basic_machine=m68k-hp
-               ;;
-       hp300bsd)
-               basic_machine=m68k-hp
-               os=-bsd
-               ;;
-       hp300hpux)
-               basic_machine=m68k-hp
-               os=-hpux
+               cpu=hppa1.1
+               vendor=hitachi
+               basic_os=hiuxwe2
                ;;
        hp3k9[0-9][0-9] | hp9[0-9][0-9])
-               basic_machine=hppa1.0-hp
+               cpu=hppa1.0
+               vendor=hp
                ;;
        hp9k2[0-9][0-9] | hp9k31[0-9])
-               basic_machine=m68000-hp
+               cpu=m68000
+               vendor=hp
                ;;
        hp9k3[2-9][0-9])
-               basic_machine=m68k-hp
+               cpu=m68k
+               vendor=hp
                ;;
        hp9k6[0-9][0-9] | hp6[0-9][0-9])
-               basic_machine=hppa1.0-hp
+               cpu=hppa1.0
+               vendor=hp
                ;;
        hp9k7[0-79][0-9] | hp7[0-79][0-9])
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k78[0-9] | hp78[0-9])
                # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
                # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k8[0-9][13679] | hp8[0-9][13679])
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k8[0-9][0-9] | hp8[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hppaosf)
-               basic_machine=hppa1.1-hp
-               os=-osf
-               ;;
-       hppro)
-               basic_machine=hppa1.1-hp
-               os=-proelf
-               ;;
-       i370-ibm* | ibm*)
-               basic_machine=i370-ibm
+               cpu=hppa1.0
+               vendor=hp
                ;;
        i*86v32)
-               basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
-               os=-sysv32
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               basic_os=sysv32
                ;;
        i*86v4*)
-               basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
-               os=-sysv4
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               basic_os=sysv4
                ;;
        i*86v)
-               basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
-               os=-sysv
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               basic_os=sysv
                ;;
        i*86sol2)
-               basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
-               os=-solaris2
-               ;;
-       i386mach)
-               basic_machine=i386-mach
-               os=-mach
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               basic_os=solaris2
                ;;
-       vsta)
-               basic_machine=i386-unknown
-               os=-vsta
+       j90 | j90-cray)
+               cpu=j90
+               vendor=cray
+               basic_os=${basic_os:-unicos}
                ;;
        iris | iris4d)
-               basic_machine=mips-sgi
-               case $os in
-                   -irix*)
+               cpu=mips
+               vendor=sgi
+               case $basic_os in
+                   irix*)
                        ;;
                    *)
-                       os=-irix4
+                       basic_os=irix4
                        ;;
                esac
                ;;
-       isi68 | isi)
-               basic_machine=m68k-isi
-               os=-sysv
-               ;;
-       leon-*|leon[3-9]-*)
-               basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
-               ;;
-       m68knommu)
-               basic_machine=m68k-unknown
-               os=-linux
-               ;;
-       m68knommu-*)
-               basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       magnum | m3230)
-               basic_machine=mips-mips
-               os=-sysv
-               ;;
-       merlin)
-               basic_machine=ns32k-utek
-               os=-sysv
-               ;;
-       microblaze*)
-               basic_machine=microblaze-xilinx
-               ;;
-       mingw64)
-               basic_machine=x86_64-pc
-               os=-mingw64
-               ;;
-       mingw32)
-               basic_machine=i686-pc
-               os=-mingw32
-               ;;
-       mingw32ce)
-               basic_machine=arm-unknown
-               os=-mingw32ce
-               ;;
        miniframe)
-               basic_machine=m68000-convergent
-               ;;
-       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-       mips3*-*)
-               basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       morphos)
-               basic_machine=powerpc-unknown
-               os=-morphos
-               ;;
-       moxiebox)
-               basic_machine=moxie-unknown
-               os=-moxiebox
+               cpu=m68000
+               vendor=convergent
                ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       ms1-*)
-               basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
-               ;;
-       msys)
-               basic_machine=i686-pc
-               os=-msys
-               ;;
-       mvs)
-               basic_machine=i370-ibm
-               os=-mvs
-               ;;
-       nacl)
-               basic_machine=le32-unknown
-               os=-nacl
-               ;;
-       ncr3000)
-               basic_machine=i486-ncr
-               os=-sysv4
-               ;;
-       netbsd386)
-               basic_machine=i386-unknown
-               os=-netbsd
-               ;;
-       netwinder)
-               basic_machine=armv4l-rebel
-               os=-linux
-               ;;
-       news | news700 | news800 | news900)
-               basic_machine=m68k-sony
-               os=-newsos
-               ;;
-       news1000)
-               basic_machine=m68030-sony
-               os=-newsos
+       *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               cpu=m68k
+               vendor=atari
+               basic_os=mint
                ;;
        news-3600 | risc-news)
-               basic_machine=mips-sony
-               os=-newsos
-               ;;
-       necv70)
-               basic_machine=v70-nec
-               os=-sysv
+               cpu=mips
+               vendor=sony
+               basic_os=newsos
                ;;
        next | m*-next)
-               basic_machine=m68k-next
-               case $os in
-                   -nextstep* )
+               cpu=m68k
+               vendor=next
+               case $basic_os in
+                   openstep*)
+                       ;;
+                   nextstep*)
                        ;;
-                   -ns2*)
-                     os=-nextstep2
+                   ns2*)
+                     basic_os=nextstep2
                        ;;
                    *)
-                     os=-nextstep3
+                     basic_os=nextstep3
                        ;;
                esac
                ;;
-       nh3000)
-               basic_machine=m68k-harris
-               os=-cxux
-               ;;
-       nh[45]000)
-               basic_machine=m88k-harris
-               os=-cxux
-               ;;
-       nindy960)
-               basic_machine=i960-intel
-               os=-nindy
-               ;;
-       mon960)
-               basic_machine=i960-intel
-               os=-mon960
-               ;;
-       nonstopux)
-               basic_machine=mips-compaq
-               os=-nonstopux
-               ;;
        np1)
-               basic_machine=np1-gould
-               ;;
-       neo-tandem)
-               basic_machine=neo-tandem
-               ;;
-       nse-tandem)
-               basic_machine=nse-tandem
-               ;;
-       nsr-tandem)
-               basic_machine=nsr-tandem
-               ;;
-       nsv-tandem)
-               basic_machine=nsv-tandem
-               ;;
-       nsx-tandem)
-               basic_machine=nsx-tandem
+               cpu=np1
+               vendor=gould
                ;;
        op50n-* | op60c-*)
-               basic_machine=hppa1.1-oki
-               os=-proelf
-               ;;
-       openrisc | openrisc-*)
-               basic_machine=or32-unknown
-               ;;
-       os400)
-               basic_machine=powerpc-ibm
-               os=-os400
-               ;;
-       OSE68000 | ose68000)
-               basic_machine=m68000-ericsson
-               os=-ose
-               ;;
-       os68k)
-               basic_machine=m68k-none
-               os=-os68k
+               cpu=hppa1.1
+               vendor=oki
+               basic_os=proelf
                ;;
        pa-hitachi)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       paragon)
-               basic_machine=i860-intel
-               os=-osf
-               ;;
-       parisc)
-               basic_machine=hppa-unknown
-               os=-linux
-               ;;
-       parisc-*)
-               basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               os=-linux
+               cpu=hppa1.1
+               vendor=hitachi
+               basic_os=hiuxwe2
                ;;
        pbd)
-               basic_machine=sparc-tti
+               cpu=sparc
+               vendor=tti
                ;;
        pbb)
-               basic_machine=m68k-tti
-               ;;
-       pc532 | pc532-*)
-               basic_machine=ns32k-pc532
-               ;;
-       pc98)
-               basic_machine=i386-pc
+               cpu=m68k
+               vendor=tti
                ;;
-       pc98-*)
-               basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               ;;
-       pentium | p5 | k5 | k6 | nexgen | viac3)
-               basic_machine=i586-pc
-               ;;
-       pentiumpro | p6 | 6x86 | athlon | athlon_*)
-               basic_machine=i686-pc
-               ;;
-       pentiumii | pentium2 | pentiumiii | pentium3)
-               basic_machine=i686-pc
-               ;;
-       pentium4)
-               basic_machine=i786-pc
-               ;;
-       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-               basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               ;;
-       pentiumpro-* | p6-* | 6x86-* | athlon-*)
-               basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               ;;
-       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-               basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               ;;
-       pentium4-*)
-               basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+       pc532)
+               cpu=ns32k
+               vendor=pc532
                ;;
        pn)
-               basic_machine=pn-gould
-               ;;
-       power)  basic_machine=power-ibm
-               ;;
-       ppc | ppcbe)    basic_machine=powerpc-unknown
+               cpu=pn
+               vendor=gould
                ;;
-       ppc-* | ppcbe-*)
-               basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-               ;;
-       ppcle | powerpclittle)
-               basic_machine=powerpcle-unknown
+       power)
+               cpu=power
+               vendor=ibm
                ;;
-       ppcle-* | powerpclittle-*)
-               basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+       ps2)
+               cpu=i386
+               vendor=ibm
                ;;
-       ppc64)  basic_machine=powerpc64-unknown
+       rm[46]00)
+               cpu=mips
+               vendor=siemens
                ;;
-       ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+       rtpc | rtpc-*)
+               cpu=romp
+               vendor=ibm
                ;;
-       ppc64le | powerpc64little)
-               basic_machine=powerpc64le-unknown
+       sde)
+               cpu=mipsisa32
+               vendor=sde
+               basic_os=${basic_os:-elf}
                ;;
-       ppc64le-* | powerpc64little-*)
-               basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+       simso-wrs)
+               cpu=sparclite
+               vendor=wrs
+               basic_os=vxworks
                ;;
-       ps2)
-               basic_machine=i386-ibm
+       tower | tower-32)
+               cpu=m68k
+               vendor=ncr
                ;;
-       pw32)
-               basic_machine=i586-unknown
-               os=-pw32
+       vpp*|vx|vx-*)
+               cpu=f301
+               vendor=fujitsu
                ;;
-       rdos | rdos64)
-               basic_machine=x86_64-pc
-               os=-rdos
+       w65)
+               cpu=w65
+               vendor=wdc
                ;;
-       rdos32)
-               basic_machine=i386-pc
-               os=-rdos
+       w89k-*)
+               cpu=hppa1.1
+               vendor=winbond
+               basic_os=proelf
                ;;
-       rom68k)
-               basic_machine=m68k-rom68k
-               os=-coff
+       none)
+               cpu=none
+               vendor=none
                ;;
-       rm[46]00)
-               basic_machine=mips-siemens
+       leon|leon[3-9])
+               cpu=sparc
+               vendor=$basic_machine
                ;;
-       rtpc | rtpc-*)
-               basic_machine=romp-ibm
+       leon-*|leon[3-9]-*)
+               cpu=sparc
+               vendor=`echo "$basic_machine" | sed 's/-.*//'`
                ;;
-       s390 | s390-*)
-               basic_machine=s390-ibm
+
+       *-*)
+               # shellcheck disable=SC2162
+               saved_IFS=$IFS
+               IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
+               IFS=$saved_IFS
                ;;
-       s390x | s390x-*)
-               basic_machine=s390x-ibm
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+               cpu=$basic_machine
+               vendor=pc
                ;;
-       sa29200)
-               basic_machine=a29k-amd
-               os=-udi
+       # These rules are duplicated from below for sake of the special case above;
+       # i.e. things that normalized to x86 arches should also default to "pc"
+       pc98)
+               cpu=i386
+               vendor=pc
                ;;
-       sb1)
-               basic_machine=mipsisa64sb1-unknown
+       x64 | amd64)
+               cpu=x86_64
+               vendor=pc
                ;;
-       sb1el)
-               basic_machine=mipsisa64sb1el-unknown
+       # Recognize the basic CPU types without company name.
+       *)
+               cpu=$basic_machine
+               vendor=unknown
                ;;
-       sde)
-               basic_machine=mipsisa32-sde
-               os=-elf
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+       # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+       # some cases the only manufacturer, in others, it is the most popular.
+       craynv-unknown)
+               vendor=cray
+               basic_os=${basic_os:-unicosmp}
                ;;
-       sei)
-               basic_machine=mips-sei
-               os=-seiux
+       c90-unknown | c90-cray)
+               vendor=cray
+               basic_os=${Basic_os:-unicos}
                ;;
-       sequent)
-               basic_machine=i386-sequent
+       fx80-unknown)
+               vendor=alliant
                ;;
-       sh5el)
-               basic_machine=sh5le-unknown
+       romp-unknown)
+               vendor=ibm
                ;;
-       simso-wrs)
-               basic_machine=sparclite-wrs
-               os=-vxworks
+       mmix-unknown)
+               vendor=knuth
                ;;
-       sps7)
-               basic_machine=m68k-bull
-               os=-sysv2
+       microblaze-unknown | microblazeel-unknown)
+               vendor=xilinx
                ;;
-       spur)
-               basic_machine=spur-unknown
+       rs6000-unknown)
+               vendor=ibm
                ;;
-       st2000)
-               basic_machine=m68k-tandem
+       vax-unknown)
+               vendor=dec
                ;;
-       stratus)
-               basic_machine=i860-stratus
-               os=-sysv4
+       pdp11-unknown)
+               vendor=dec
                ;;
-       strongarm-* | thumb-*)
-               basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+       we32k-unknown)
+               vendor=att
                ;;
-       sun2)
-               basic_machine=m68000-sun
+       cydra-unknown)
+               vendor=cydrome
                ;;
-       sun2os3)
-               basic_machine=m68000-sun
-               os=-sunos3
+       i370-ibm*)
+               vendor=ibm
                ;;
-       sun2os4)
-               basic_machine=m68000-sun
-               os=-sunos4
+       orion-unknown)
+               vendor=highlevel
                ;;
-       sun3os3)
-               basic_machine=m68k-sun
-               os=-sunos3
+       xps-unknown | xps100-unknown)
+               cpu=xps100
+               vendor=honeywell
                ;;
-       sun3os4)
-               basic_machine=m68k-sun
-               os=-sunos4
+
+       # Here we normalize CPU types with a missing or matching vendor
+       armh-unknown | armh-alt)
+               cpu=armv7l
+               vendor=alt
+               basic_os=${basic_os:-linux-gnueabihf}
                ;;
-       sun4os3)
-               basic_machine=sparc-sun
-               os=-sunos3
+       dpx20-unknown | dpx20-bull)
+               cpu=rs6000
+               vendor=bull
+               basic_os=${basic_os:-bosx}
                ;;
-       sun4os4)
-               basic_machine=sparc-sun
-               os=-sunos4
+
+       # Here we normalize CPU types irrespective of the vendor
+       amd64-*)
+               cpu=x86_64
                ;;
-       sun4sol2)
-               basic_machine=sparc-sun
-               os=-solaris2
+       blackfin-*)
+               cpu=bfin
+               basic_os=linux
                ;;
-       sun3 | sun3-*)
-               basic_machine=m68k-sun
+       c54x-*)
+               cpu=tic54x
                ;;
-       sun4)
-               basic_machine=sparc-sun
+       c55x-*)
+               cpu=tic55x
                ;;
-       sun386 | sun386i | roadrunner)
-               basic_machine=i386-sun
+       c6x-*)
+               cpu=tic6x
                ;;
-       sv1)
-               basic_machine=sv1-cray
-               os=-unicos
+       e500v[12]-*)
+               cpu=powerpc
+               basic_os=${basic_os}"spe"
                ;;
-       symmetry)
-               basic_machine=i386-sequent
-               os=-dynix
+       mips3*-*)
+               cpu=mips64
                ;;
-       t3e)
-               basic_machine=alphaev5-cray
-               os=-unicos
+       ms1-*)
+               cpu=mt
                ;;
-       t90)
-               basic_machine=t90-cray
-               os=-unicos
+       m68knommu-*)
+               cpu=m68k
+               basic_os=linux
                ;;
-       tile*)
-               basic_machine=$basic_machine-unknown
-               os=-linux-gnu
+       m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+               cpu=s12z
                ;;
-       tx39)
-               basic_machine=mipstx39-unknown
+       openrisc-*)
+               cpu=or32
                ;;
-       tx39el)
-               basic_machine=mipstx39el-unknown
+       parisc-*)
+               cpu=hppa
+               basic_os=linux
                ;;
-       toad1)
-               basic_machine=pdp10-xkl
-               os=-tops20
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               cpu=i586
                ;;
-       tower | tower-32)
-               basic_machine=m68k-ncr
+       pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+               cpu=i686
                ;;
-       tpf)
-               basic_machine=s390x-ibm
-               os=-tpf
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               cpu=i686
                ;;
-       udi29k)
-               basic_machine=a29k-amd
-               os=-udi
+       pentium4-*)
+               cpu=i786
                ;;
-       ultra3)
-               basic_machine=a29k-nyu
-               os=-sym1
+       pc98-*)
+               cpu=i386
                ;;
-       v810 | necv810)
-               basic_machine=v810-nec
-               os=-none
+       ppc-* | ppcbe-*)
+               cpu=powerpc
                ;;
-       vaxv)
-               basic_machine=vax-dec
-               os=-sysv
+       ppcle-* | powerpclittle-*)
+               cpu=powerpcle
                ;;
-       vms)
-               basic_machine=vax-dec
-               os=-vms
+       ppc64-*)
+               cpu=powerpc64
                ;;
-       vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
+       ppc64le-* | powerpc64little-*)
+               cpu=powerpc64le
                ;;
-       vxworks960)
-               basic_machine=i960-wrs
-               os=-vxworks
+       sb1-*)
+               cpu=mipsisa64sb1
                ;;
-       vxworks68)
-               basic_machine=m68k-wrs
-               os=-vxworks
+       sb1el-*)
+               cpu=mipsisa64sb1el
                ;;
-       vxworks29k)
-               basic_machine=a29k-wrs
-               os=-vxworks
+       sh5e[lb]-*)
+               cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
                ;;
-       w65*)
-               basic_machine=w65-wdc
-               os=-none
+       spur-*)
+               cpu=spur
                ;;
-       w89k-*)
-               basic_machine=hppa1.1-winbond
-               os=-proelf
+       strongarm-* | thumb-*)
+               cpu=arm
                ;;
-       x64)
-               basic_machine=x86_64-pc
+       tx39-*)
+               cpu=mipstx39
                ;;
-       xbox)
-               basic_machine=i686-pc
-               os=-mingw32
+       tx39el-*)
+               cpu=mipstx39el
                ;;
-       xps | xps100)
-               basic_machine=xps100-honeywell
+       x64-*)
+               cpu=x86_64
                ;;
        xscale-* | xscalee[bl]-*)
-               basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
-               ;;
-       ymp)
-               basic_machine=ymp-cray
-               os=-unicos
+               cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
                ;;
-       none)
-               basic_machine=none-none
-               os=-none
+       arm64-* | aarch64le-*)
+               cpu=aarch64
                ;;
 
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-       w89k)
-               basic_machine=hppa1.1-winbond
-               ;;
-       op50n)
-               basic_machine=hppa1.1-oki
-               ;;
-       op60c)
-               basic_machine=hppa1.1-oki
-               ;;
-       romp)
-               basic_machine=romp-ibm
-               ;;
-       mmix)
-               basic_machine=mmix-knuth
+       # Recognize the canonical CPU Types that limit and/or modify the
+       # company names they are paired with.
+       cr16-*)
+               basic_os=${basic_os:-elf}
                ;;
-       rs6000)
-               basic_machine=rs6000-ibm
+       crisv32-* | etraxfs*-*)
+               cpu=crisv32
+               vendor=axis
                ;;
-       vax)
-               basic_machine=vax-dec
+       cris-* | etrax*-*)
+               cpu=cris
+               vendor=axis
                ;;
-       pdp11)
-               basic_machine=pdp11-dec
+       crx-*)
+               basic_os=${basic_os:-elf}
                ;;
-       we32k)
-               basic_machine=we32k-att
+       neo-tandem)
+               cpu=neo
+               vendor=tandem
                ;;
-       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-               basic_machine=sh-unknown
+       nse-tandem)
+               cpu=nse
+               vendor=tandem
                ;;
-       cydra)
-               basic_machine=cydra-cydrome
+       nsr-tandem)
+               cpu=nsr
+               vendor=tandem
                ;;
-       orion)
-               basic_machine=orion-highlevel
+       nsv-tandem)
+               cpu=nsv
+               vendor=tandem
                ;;
-       orion105)
-               basic_machine=clipper-highlevel
+       nsx-tandem)
+               cpu=nsx
+               vendor=tandem
                ;;
-       mac | mpw | mac-mpw)
-               basic_machine=m68k-apple
+       mipsallegrexel-sony)
+               cpu=mipsallegrexel
+               vendor=sony
                ;;
-       pmac | pmac-mpw)
-               basic_machine=powerpc-apple
-               ;;
-       *-unknown)
-               # Make sure to match an already-canonicalized machine name.
+       tile*-*)
+               basic_os=${basic_os:-linux-gnu}
                ;;
+
        *)
-               echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
-               exit 1
+               # Recognize the canonical CPU types that are allowed with any
+               # company name.
+               case $cpu in
+                       1750a | 580 \
+                       | a29k \
+                       | aarch64 | aarch64_be \
+                       | abacus \
+                       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+                       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+                       | alphapca5[67] | alpha64pca5[67] \
+                       | am33_2.0 \
+                       | amdgcn \
+                       | arc | arceb | arc32 | arc64 \
+                       | arm | arm[lb]e | arme[lb] | armv* \
+                       | avr | avr32 \
+                       | asmjs \
+                       | ba \
+                       | be32 | be64 \
+                       | bfin | bpf | bs2000 \
+                       | c[123]* | c30 | [cjt]90 | c4x \
+                       | c8051 | clipper | craynv | csky | cydra \
+                       | d10v | d30v | dlx | dsp16xx \
+                       | e2k | elxsi | epiphany \
+                       | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+                       | h8300 | h8500 \
+                       | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+                       | hexagon \
+                       | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+                       | ip2k | iq2000 \
+                       | k1om \
+                       | le32 | le64 \
+                       | lm32 \
+                       | loongarch32 | loongarch64 | loongarchx32 \
+                       | m32c | m32r | m32rle \
+                       | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+                       | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
+                       | m88110 | m88k | maxq | mb | mcore | mep | metag \
+                       | microblaze | microblazeel \
+                       | mips | mipsbe | mipseb | mipsel | mipsle \
+                       | mips16 \
+                       | mips64 | mips64eb | mips64el \
+                       | mips64octeon | mips64octeonel \
+                       | mips64orion | mips64orionel \
+                       | mips64r5900 | mips64r5900el \
+                       | mips64vr | mips64vrel \
+                       | mips64vr4100 | mips64vr4100el \
+                       | mips64vr4300 | mips64vr4300el \
+                       | mips64vr5000 | mips64vr5000el \
+                       | mips64vr5900 | mips64vr5900el \
+                       | mipsisa32 | mipsisa32el \
+                       | mipsisa32r2 | mipsisa32r2el \
+                       | mipsisa32r3 | mipsisa32r3el \
+                       | mipsisa32r5 | mipsisa32r5el \
+                       | mipsisa32r6 | mipsisa32r6el \
+                       | mipsisa64 | mipsisa64el \
+                       | mipsisa64r2 | mipsisa64r2el \
+                       | mipsisa64r3 | mipsisa64r3el \
+                       | mipsisa64r5 | mipsisa64r5el \
+                       | mipsisa64r6 | mipsisa64r6el \
+                       | mipsisa64sb1 | mipsisa64sb1el \
+                       | mipsisa64sr71k | mipsisa64sr71kel \
+                       | mipsr5900 | mipsr5900el \
+                       | mipstx39 | mipstx39el \
+                       | mmix \
+                       | mn10200 | mn10300 \
+                       | moxie \
+                       | mt \
+                       | msp430 \
+                       | nds32 | nds32le | nds32be \
+                       | nfp \
+                       | nios | nios2 | nios2eb | nios2el \
+                       | none | np1 | ns16k | ns32k | nvptx \
+                       | open8 \
+                       | or1k* \
+                       | or32 \
+                       | orion \
+                       | picochip \
+                       | pdp10 | pdp11 | pj | pjl | pn | power \
+                       | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+                       | pru \
+                       | pyramid \
+                       | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
+                       | rl78 | romp | rs6000 | rx \
+                       | s390 | s390x \
+                       | score \
+                       | sh | shl \
+                       | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+                       | sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+                       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+                       | sparclite \
+                       | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+                       | spu \
+                       | tahoe \
+                       | thumbv7* \
+                       | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+                       | tron \
+                       | ubicom32 \
+                       | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+                       | vax \
+                       | visium \
+                       | w65 \
+                       | wasm32 | wasm64 \
+                       | we32k \
+                       | x86 | x86_64 | xc16x | xgate | xps100 \
+                       | xstormy16 | xtensa* \
+                       | ymp \
+                       | z8k | z80)
+                               ;;
+
+                       *)
+                               echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+                               exit 1
+                               ;;
+               esac
                ;;
 esac
 
 # Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-       *-digital*)
-               basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
+case $vendor in
+       digital*)
+               vendor=dec
                ;;
-       *-commodore*)
-               basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
+       commodore*)
+               vendor=cbm
                ;;
        *)
                ;;
@@ -1334,203 +1306,215 @@ esac
 
 # Decode manufacturer-specific aliases for certain operating systems.
 
-if [ x"$os" != x"" ]
+if test x$basic_os != x
 then
+
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
+# set os.
+case $basic_os in
+       gnu/linux*)
+               kernel=linux
+               os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
+               ;;
+       os2-emx)
+               kernel=os2
+               os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
+               ;;
+       nto-qnx*)
+               kernel=nto
+               os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
+               ;;
+       *-*)
+               # shellcheck disable=SC2162
+               saved_IFS=$IFS
+               IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+               IFS=$saved_IFS
+               ;;
+       # Default OS when just kernel was specified
+       nto*)
+               kernel=nto
+               os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
+               ;;
+       linux*)
+               kernel=linux
+               os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+               ;;
+       *)
+               kernel=
+               os=$basic_os
+               ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
 case $os in
        # First match some system type aliases that might get confused
        # with valid system types.
-       # -solaris* is a basic system type, with this one exception.
-       -auroraux)
-               os=-auroraux
+       # solaris* is a basic system type, with this one exception.
+       auroraux)
+               os=auroraux
                ;;
-       -solaris1 | -solaris1.*)
-               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+       bluegene*)
+               os=cnk
                ;;
-       -solaris)
-               os=-solaris2
+       solaris1 | solaris1.*)
+               os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
                ;;
-       -unixware*)
-               os=-sysv4.2uw
+       solaris)
+               os=solaris2
                ;;
-       -gnu/linux*)
-               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+       unixware*)
+               os=sysv4.2uw
                ;;
        # es1800 is here to avoid being matched by es* (a different OS)
-       -es1800*)
-               os=-ose
+       es1800*)
+               os=ose
                ;;
-       # Now accept the basic system types.
-       # The portable systems comes first.
-       # Each alternative MUST end in a * to match a version number.
-       # -sysv* is not here because it comes later, after sysvr4.
-       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-             | -sym* | -kopensolaris* | -plan9* \
-             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* | -aros* | -cloudabi* | -sortix* \
-             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
-             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
-             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-             | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-             | -morphos* | -superux* | -rtmk* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-             | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \
-             | -midnightbsd*)
-       # Remember, each alternative MUST END IN *, to match a version number.
-               ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
-                       ;;
-                   *)
-                       os=-nto$os
-                       ;;
-               esac
+       # Some version numbers need modification
+       chorusos*)
+               os=chorusos
                ;;
-       -nto-qnx*)
+       isc)
+               os=isc2.2
                ;;
-       -nto*)
-               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+       sco6)
+               os=sco5v6
                ;;
-       -sim | -xray | -os68k* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+       sco5)
+               os=sco3.2v5
                ;;
-       -mac*)
-               os=`echo "$os" | sed -e 's|mac|macos|'`
+       sco4)
+               os=sco3.2v4
                ;;
-       -linux-dietlibc)
-               os=-linux-dietlibc
+       sco3.2.[4-9]*)
+               os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
                ;;
-       -linux*)
-               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+       sco*v* | scout)
+               # Don't match below
                ;;
-       -sunos5*)
-               os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+       sco*)
+               os=sco3.2v2
                ;;
-       -sunos6*)
-               os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+       psos*)
+               os=psos
                ;;
-       -opened*)
-               os=-openedition
+       qnx*)
+               os=qnx
                ;;
-       -os400*)
-               os=-os400
+       hiux*)
+               os=hiuxwe2
                ;;
-       -wince*)
-               os=-wince
+       lynx*178)
+               os=lynxos178
                ;;
-       -utek*)
-               os=-bsd
+       lynx*5)
+               os=lynxos5
                ;;
-       -dynix*)
-               os=-bsd
+       lynxos*)
+               # don't get caught up in next wildcard
                ;;
-       -acis*)
-               os=-aos
+       lynx*)
+               os=lynxos
                ;;
-       -atheos*)
-               os=-atheos
+       mac[0-9]*)
+               os=`echo "$os" | sed -e 's|mac|macos|'`
                ;;
-       -syllable*)
-               os=-syllable
+       opened*)
+               os=openedition
                ;;
-       -386bsd)
-               os=-bsd
+       os400*)
+               os=os400
                ;;
-       -ctix* | -uts*)
-               os=-sysv
+       sunos5*)
+               os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
                ;;
-       -nova*)
-               os=-rtmk-nova
+       sunos6*)
+               os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
                ;;
-       -ns2)
-               os=-nextstep2
+       wince*)
+               os=wince
                ;;
-       -nsk*)
-               os=-nsk
+       utek*)
+               os=bsd
                ;;
-       # Preserve the version number of sinix5.
-       -sinix5.*)
-               os=`echo $os | sed -e 's|sinix|sysv|'`
+       dynix*)
+               os=bsd
                ;;
-       -sinix*)
-               os=-sysv4
+       acis*)
+               os=aos
                ;;
-       -tpf*)
-               os=-tpf
+       atheos*)
+               os=atheos
                ;;
-       -triton*)
-               os=-sysv3
+       syllable*)
+               os=syllable
+               ;;
+       386bsd)
+               os=bsd
+               ;;
+       ctix* | uts*)
+               os=sysv
+               ;;
+       nova*)
+               os=rtmk-nova
+               ;;
+       ns2)
+               os=nextstep2
+               ;;
+       # Preserve the version number of sinix5.
+       sinix5.*)
+               os=`echo "$os" | sed -e 's|sinix|sysv|'`
                ;;
-       -oss*)
-               os=-sysv3
+       sinix*)
+               os=sysv4
                ;;
-       -svr4*)
-               os=-sysv4
+       tpf*)
+               os=tpf
                ;;
-       -svr3)
-               os=-sysv3
+       triton*)
+               os=sysv3
                ;;
-       -sysvr4)
-               os=-sysv4
+       oss*)
+               os=sysv3
                ;;
-       # This must come after -sysvr4.
-       -sysv*)
+       svr4*)
+               os=sysv4
                ;;
-       -ose*)
-               os=-ose
+       svr3)
+               os=sysv3
                ;;
-       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-               os=-mint
+       sysvr4)
+               os=sysv4
                ;;
-       -zvmoe)
-               os=-zvmoe
+       ose*)
+               os=ose
                ;;
-       -dicos*)
-               os=-dicos
+       *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+               os=mint
                ;;
-       -pikeos*)
+       dicos*)
+               os=dicos
+               ;;
+       pikeos*)
                # Until real need of OS specific support for
                # particular features comes up, bare metal
                # configurations are quite functional.
-               case $basic_machine in
+               case $cpu in
                    arm*)
-                       os=-eabi
+                       os=eabi
                        ;;
                    *)
-                       os=-elf
+                       os=elf
                        ;;
                esac
                ;;
-       -nacl*)
-               ;;
-       -ios)
-               ;;
-       -none)
-               ;;
        *)
-               # Get rid of the `-' at the beginning of $os.
-               os=`echo $os | sed 's/[^-]*-//'`
-               echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
-               exit 1
+               # No normalization, but not necessarily accepted, that comes below.
                ;;
 esac
+
 else
 
 # Here we handle the default operating systems that come with various machines.
@@ -1543,258 +1527,363 @@ else
 # will signal an error saying that MANUFACTURER isn't an operating
 # system, and we'll never get to this point.
 
-case $basic_machine in
+kernel=
+case $cpu-$vendor in
        score-*)
-               os=-elf
+               os=elf
                ;;
        spu-*)
-               os=-elf
+               os=elf
                ;;
        *-acorn)
-               os=-riscix1.2
+               os=riscix1.2
                ;;
        arm*-rebel)
-               os=-linux
+               kernel=linux
+               os=gnu
                ;;
        arm*-semi)
-               os=-aout
+               os=aout
                ;;
        c4x-* | tic4x-*)
-               os=-coff
+               os=coff
                ;;
        c8051-*)
-               os=-elf
+               os=elf
+               ;;
+       clipper-intergraph)
+               os=clix
                ;;
        hexagon-*)
-               os=-elf
+               os=elf
                ;;
        tic54x-*)
-               os=-coff
+               os=coff
                ;;
        tic55x-*)
-               os=-coff
+               os=coff
                ;;
        tic6x-*)
-               os=-coff
+               os=coff
                ;;
        # This must come before the *-dec entry.
        pdp10-*)
-               os=-tops20
+               os=tops20
                ;;
        pdp11-*)
-               os=-none
+               os=none
                ;;
        *-dec | vax-*)
-               os=-ultrix4.2
+               os=ultrix4.2
                ;;
        m68*-apollo)
-               os=-domain
+               os=domain
                ;;
        i386-sun)
-               os=-sunos4.0.2
+               os=sunos4.0.2
                ;;
        m68000-sun)
-               os=-sunos3
+               os=sunos3
                ;;
        m68*-cisco)
-               os=-aout
+               os=aout
                ;;
        mep-*)
-               os=-elf
+               os=elf
                ;;
        mips*-cisco)
-               os=-elf
+               os=elf
                ;;
        mips*-*)
-               os=-elf
+               os=elf
                ;;
        or32-*)
-               os=-coff
+               os=coff
                ;;
        *-tti)  # must be before sparc entry or we get the wrong os.
-               os=-sysv3
+               os=sysv3
                ;;
        sparc-* | *-sun)
-               os=-sunos4.1.1
+               os=sunos4.1.1
                ;;
        pru-*)
-               os=-elf
+               os=elf
                ;;
        *-be)
-               os=-beos
+               os=beos
                ;;
        *-ibm)
-               os=-aix
+               os=aix
                ;;
        *-knuth)
-               os=-mmixware
+               os=mmixware
                ;;
        *-wec)
-               os=-proelf
+               os=proelf
                ;;
        *-winbond)
-               os=-proelf
+               os=proelf
                ;;
        *-oki)
-               os=-proelf
+               os=proelf
                ;;
        *-hp)
-               os=-hpux
+               os=hpux
                ;;
        *-hitachi)
-               os=-hiux
+               os=hiux
                ;;
        i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-               os=-sysv
+               os=sysv
                ;;
        *-cbm)
-               os=-amigaos
+               os=amigaos
                ;;
        *-dg)
-               os=-dgux
+               os=dgux
                ;;
        *-dolphin)
-               os=-sysv3
+               os=sysv3
                ;;
        m68k-ccur)
-               os=-rtu
+               os=rtu
                ;;
        m88k-omron*)
-               os=-luna
+               os=luna
                ;;
        *-next)
-               os=-nextstep
+               os=nextstep
                ;;
        *-sequent)
-               os=-ptx
+               os=ptx
                ;;
        *-crds)
-               os=-unos
+               os=unos
                ;;
        *-ns)
-               os=-genix
+               os=genix
                ;;
        i370-*)
-               os=-mvs
+               os=mvs
                ;;
        *-gould)
-               os=-sysv
+               os=sysv
                ;;
        *-highlevel)
-               os=-bsd
+               os=bsd
                ;;
        *-encore)
-               os=-bsd
+               os=bsd
                ;;
        *-sgi)
-               os=-irix
+               os=irix
                ;;
        *-siemens)
-               os=-sysv4
+               os=sysv4
                ;;
        *-masscomp)
-               os=-rtu
+               os=rtu
                ;;
        f30[01]-fujitsu | f700-fujitsu)
-               os=-uxpv
+               os=uxpv
                ;;
        *-rom68k)
-               os=-coff
+               os=coff
                ;;
        *-*bug)
-               os=-coff
+               os=coff
                ;;
        *-apple)
-               os=-macos
+               os=macos
                ;;
        *-atari*)
-               os=-mint
+               os=mint
+               ;;
+       *-wrs)
+               os=vxworks
                ;;
        *)
-               os=-none
+               os=none
                ;;
 esac
+
 fi
 
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+       # Sometimes we do "kernel-libc", so those need to count as OSes.
+       musl* | newlib* | relibc* | uclibc*)
+               ;;
+       # Likewise for "kernel-abi"
+       eabi* | gnueabi*)
+               ;;
+       # VxWorks passes extra cpu info in the 4th filed.
+       simlinux | simwindows | spe)
+               ;;
+       # Now accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST end in a * to match a version number.
+       gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+            | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+            | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+            | sym* |  plan9* | psp* | sim* | xray* | os68k* | v88r* \
+            | hiux* | abug | nacl* | netware* | windows* \
+            | os9* | macos* | osx* | ios* \
+            | mpw* | magic* | mmixware* | mon960* | lnews* \
+            | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+            | aos* | aros* | cloudabi* | sortix* | twizzler* \
+            | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+            | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+            | mirbsd* | netbsd* | dicos* | openedition* | ose* \
+            | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
+            | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
+            | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+            | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+            | udi* | lites* | ieee* | go32* | aux* | hcos* \
+            | chorusrdb* | cegcc* | glidix* | serenity* \
+            | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+            | midipix* | mingw32* | mingw64* | mint* \
+            | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+            | interix* | uwin* | mks* | rhapsody* | darwin* \
+            | openstep* | oskit* | conix* | pw32* | nonstopux* \
+            | storm-chaos* | tops10* | tenex* | tops20* | its* \
+            | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+            | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+            | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+            | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+            | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+            | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+            | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+            | fiwix* )
+               ;;
+       # This one is extra strict with allowed versions
+       sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               ;;
+       none)
+               ;;
+       *)
+               echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# As a final step for OS-related things, validate the OS-kernel combination
+# (given a valid OS), if there is a kernel.
+case $kernel-$os in
+       linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
+                  | linux-musl* | linux-relibc* | linux-uclibc* )
+               ;;
+       uclinux-uclibc* )
+               ;;
+       -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
+               # These are just libc implementations, not actual OSes, and thus
+               # require a kernel.
+               echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
+               exit 1
+               ;;
+       kfreebsd*-gnu* | kopensolaris*-gnu*)
+               ;;
+       vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+               ;;
+       nto-qnx*)
+               ;;
+       os2-emx)
+               ;;
+       *-eabi* | *-gnueabi*)
+               ;;
+       -*)
+               # Blank kernel with real OS is always fine.
+               ;;
+       *-*)
+               echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+               exit 1
+               ;;
+esac
+
 # Here we handle the case where we know the os, and the CPU type, but not the
 # manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-       *-unknown)
-               case $os in
-                       -riscix*)
+case $vendor in
+       unknown)
+               case $cpu-$os in
+                       *-riscix*)
                                vendor=acorn
                                ;;
-                       -sunos*)
+                       *-sunos*)
                                vendor=sun
                                ;;
-                       -cnk*|-aix*)
+                       *-cnk* | *-aix*)
                                vendor=ibm
                                ;;
-                       -beos*)
+                       *-beos*)
                                vendor=be
                                ;;
-                       -hpux*)
+                       *-hpux*)
                                vendor=hp
                                ;;
-                       -mpeix*)
+                       *-mpeix*)
                                vendor=hp
                                ;;
-                       -hiux*)
+                       *-hiux*)
                                vendor=hitachi
                                ;;
-                       -unos*)
+                       *-unos*)
                                vendor=crds
                                ;;
-                       -dgux*)
+                       *-dgux*)
                                vendor=dg
                                ;;
-                       -luna*)
+                       *-luna*)
                                vendor=omron
                                ;;
-                       -genix*)
+                       *-genix*)
                                vendor=ns
                                ;;
-                       -mvs* | -opened*)
+                       *-clix*)
+                               vendor=intergraph
+                               ;;
+                       *-mvs* | *-opened*)
+                               vendor=ibm
+                               ;;
+                       *-os400*)
                                vendor=ibm
                                ;;
-                       -os400*)
+                       s390-* | s390x-*)
                                vendor=ibm
                                ;;
-                       -ptx*)
+                       *-ptx*)
                                vendor=sequent
                                ;;
-                       -tpf*)
+                       *-tpf*)
                                vendor=ibm
                                ;;
-                       -vxsim* | -vxworks* | -windiss*)
+                       *-vxsim* | *-vxworks* | *-windiss*)
                                vendor=wrs
                                ;;
-                       -aux*)
+                       *-aux*)
                                vendor=apple
                                ;;
-                       -hms*)
+                       *-hms*)
                                vendor=hitachi
                                ;;
-                       -mpw* | -macos*)
+                       *-mpw* | *-macos*)
                                vendor=apple
                                ;;
-                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                       *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
                                vendor=atari
                                ;;
-                       -vos*)
+                       *-vos*)
                                vendor=stratus
                                ;;
                esac
-               basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
                ;;
 esac
 
-echo "$basic_machine$os"
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
 exit
 
 # Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
index 65cbf70..715e343 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 8175c64..ec298b5 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2018-03-11.20; # UTC
+scriptversion=2020-11-14.01; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -69,6 +69,11 @@ posix_mkdir=
 # Desired mode of installed file.
 mode=0755
 
+# Create dirs (including intermediate dirs) using mode 755.
+# This is like GNU 'install' as of coreutils 8.32 (2020).
+mkdir_umask=22
+
+backupsuffix=
 chgrpcmd=
 chmodcmd=$chmodprog
 chowncmd=
@@ -99,18 +104,28 @@ Options:
      --version  display version info and exit.
 
   -c            (ignored)
-  -C            install only if different (preserve the last data modification time)
+  -C            install only if different (preserve data modification time)
   -d            create directories instead of installing files.
   -g GROUP      $chgrpprog installed files to GROUP.
   -m MODE       $chmodprog installed files to MODE.
   -o USER       $chownprog installed files to USER.
+  -p            pass -p to $cpprog.
   -s            $stripprog installed files.
+  -S SUFFIX     attempt to back up existing files, with suffix SUFFIX.
   -t DIRECTORY  install into DIRECTORY.
   -T            report an error if DSTFILE is a directory.
 
 Environment variables override the default commands:
   CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
   RMPROG STRIPPROG
+
+By default, rm is invoked with -f; when overridden with RMPROG,
+it's up to you to specify -f if you want it.
+
+If -S is not specified, no backups are attempted.
+
+Email bug reports to bug-automake@gnu.org.
+Automake home page: https://www.gnu.org/software/automake/
 "
 
 while test $# -ne 0; do
@@ -137,8 +152,13 @@ while test $# -ne 0; do
     -o) chowncmd="$chownprog $2"
         shift;;
 
+    -p) cpprog="$cpprog -p";;
+
     -s) stripcmd=$stripprog;;
 
+    -S) backupsuffix="$2"
+        shift;;
+
     -t)
         is_target_a_directory=always
         dst_arg=$2
@@ -255,6 +275,10 @@ do
     dstdir=$dst
     test -d "$dstdir"
     dstdir_status=$?
+    # Don't chown directories that already exist.
+    if test $dstdir_status = 0; then
+      chowncmd=""
+    fi
   else
 
     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
@@ -301,22 +325,6 @@ do
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-        # Create intermediate dirs using mode 755 as modified by the umask.
-        # This is like FreeBSD 'install' as of 1997-10-28.
-        umask=`umask`
-        case $stripcmd.$umask in
-          # Optimize common cases.
-          *[2367][2367]) mkdir_umask=$umask;;
-          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-          *[0-7])
-            mkdir_umask=`expr $umask + 22 \
-              - $umask % 100 % 40 + $umask % 20 \
-              - $umask % 10 % 4 + $umask % 2
-            `;;
-          *) mkdir_umask=$umask,go-w;;
-        esac
-
         # With -d, create the new directory with the user-specified mode.
         # Otherwise, rely on $mkdir_umask.
         if test -n "$dir_arg"; then
@@ -326,52 +334,49 @@ do
         fi
 
         posix_mkdir=false
-        case $umask in
-          *[123567][0-7][0-7])
-            # POSIX mkdir -p sets u+wx bits regardless of umask, which
-            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-            ;;
-          *)
-            # Note that $RANDOM variable is not portable (e.g. dash);  Use it
-            # here however when possible just to lower collision chance.
-            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-
-            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-            # Because "mkdir -p" follows existing symlinks and we likely work
-            # directly in world-writeable /tmp, make sure that the '$tmpdir'
-            # directory is successfully created first before we actually test
-            # 'mkdir -p' feature.
-            if (umask $mkdir_umask &&
-                $mkdirprog $mkdir_mode "$tmpdir" &&
-                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
-            then
-              if test -z "$dir_arg" || {
-                   # Check for POSIX incompatibilities with -m.
-                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                   # other-writable bit of parent directory when it shouldn't.
-                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                   test_tmpdir="$tmpdir/a"
-                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
-                   case $ls_ld_tmpdir in
-                     d????-?r-*) different_mode=700;;
-                     d????-?--*) different_mode=755;;
-                     *) false;;
-                   esac &&
-                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
-                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
-                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                   }
-                 }
-              then posix_mkdir=:
-              fi
-              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
-            else
-              # Remove any dirs left behind by ancient mkdir implementations.
-              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
-            fi
-            trap '' 0;;
-        esac;;
+       # The $RANDOM variable is not portable (e.g., dash).  Use it
+       # here however when possible just to lower collision chance.
+       tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+       trap '
+         ret=$?
+         rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
+         exit $ret
+       ' 0
+
+       # Because "mkdir -p" follows existing symlinks and we likely work
+       # directly in world-writeable /tmp, make sure that the '$tmpdir'
+       # directory is successfully created first before we actually test
+       # 'mkdir -p'.
+       if (umask $mkdir_umask &&
+           $mkdirprog $mkdir_mode "$tmpdir" &&
+           exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+       then
+         if test -z "$dir_arg" || {
+              # Check for POSIX incompatibilities with -m.
+              # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+              # other-writable bit of parent directory when it shouldn't.
+              # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+              test_tmpdir="$tmpdir/a"
+              ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+              case $ls_ld_tmpdir in
+                d????-?r-*) different_mode=700;;
+                d????-?--*) different_mode=755;;
+                *) false;;
+              esac &&
+              $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+                ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+                test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+              }
+            }
+         then posix_mkdir=:
+         fi
+         rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+       else
+         # Remove any dirs left behind by ancient mkdir implementations.
+         rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+       fi
+       trap '' 0;;
     esac
 
     if
@@ -382,7 +387,7 @@ do
     then :
     else
 
-      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # mkdir does not conform to POSIX,
       # or it failed possibly due to a race condition.  Create the
       # directory the slow way, step by step, checking for races as we go.
 
@@ -411,7 +416,7 @@ do
           prefixes=
         else
           if $posix_mkdir; then
-            (umask=$mkdir_umask &&
+            (umask $mkdir_umask &&
              $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
             # Don't fail if two instances are running concurrently.
             test -d "$prefix" || exit 1
@@ -451,7 +456,18 @@ do
     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
 
     # Copy the file name to the temp name.
-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+    (umask $cp_umask &&
+     { test -z "$stripcmd" || {
+        # Create $dsttmp read-write so that cp doesn't create it read-only,
+        # which would cause strip to fail.
+        if test -z "$doit"; then
+          : >"$dsttmp" # No need to fork-exec 'touch'.
+        else
+          $doit touch "$dsttmp"
+        fi
+       }
+     } &&
+     $doit_exec $cpprog "$src" "$dsttmp") &&
 
     # and set any options; do chmod last to preserve setuid bits.
     #
@@ -477,6 +493,13 @@ do
     then
       rm -f "$dsttmp"
     else
+      # If $backupsuffix is set, and the file being installed
+      # already exists, attempt a backup.  Don't worry if it fails,
+      # e.g., if mv doesn't support -f.
+      if test -n "$backupsuffix" && test -f "$dst"; then
+        $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
+      fi
+
       # Rename the file to the real destination.
       $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
 
@@ -491,9 +514,9 @@ do
         # file should still install successfully.
         {
           test ! -f "$dst" ||
-          $doit $rmcmd -f "$dst" 2>/dev/null ||
+          $doit $rmcmd "$dst" 2>/dev/null ||
           { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+            { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
           } ||
           { echo "$0: cannot unlink or rename $dst" >&2
             (exit 1); exit 1
old mode 100644 (file)
new mode 100755 (executable)
index 0cb7f90..540a92a
@@ -31,7 +31,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-14"
+VERSION="2.4.6 Debian-2.4.6-15build2"
 package_revision=2.4.6
 
 
@@ -2141,7 +2141,7 @@ include the following information:
        compiler:       $LTCC
        compiler flags: $LTCFLAGS
        linker:         $LD (gnu? $with_gnu_ld)
-       version:        $progname $scriptversion Debian-2.4.6-14
+       version:        $progname $scriptversion Debian-2.4.6-15build2
        automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
        autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
diff --git a/build/autoconf/m4_ax_compile_check_sizeof.m4 b/build/autoconf/m4_ax_compile_check_sizeof.m4
new file mode 100644 (file)
index 0000000..f834df6
--- /dev/null
@@ -0,0 +1,115 @@
+# ============================================================================
+#  https://www.gnu.org/software/autoconf-archive/ax_compile_check_sizeof.html
+# ============================================================================
+#
+# SYNOPSIS
+#
+#   AX_COMPILE_CHECK_SIZEOF(TYPE [, HEADERS [, EXTRA_SIZES...]])
+#
+# DESCRIPTION
+#
+#   This macro checks for the size of TYPE using compile checks, not run
+#   checks. You can supply extra HEADERS to look into. the check will cycle
+#   through 1 2 4 8 16 and any EXTRA_SIZES the user supplies. If a match is
+#   found, it will #define SIZEOF_`TYPE' to that value. Otherwise it will
+#   emit a configure time error indicating the size of the type could not be
+#   determined.
+#
+#   The trick is that C will not allow duplicate case labels. While this is
+#   valid C code:
+#
+#     switch (0) case 0: case 1:;
+#
+#   The following is not:
+#
+#     switch (0) case 0: case 0:;
+#
+#   Thus, the AC_COMPILE_IFELSE will fail if the currently tried size does
+#   not match.
+#
+#   Here is an example skeleton configure.in script, demonstrating the
+#   macro's usage:
+#
+#     AC_PROG_CC
+#     AC_CHECK_HEADERS(stddef.h unistd.h)
+#     AC_TYPE_SIZE_T
+#     AC_CHECK_TYPE(ssize_t, int)
+#
+#     headers='#ifdef HAVE_STDDEF_H
+#     #include <stddef.h>
+#     #endif
+#     #ifdef HAVE_UNISTD_H
+#     #include <unistd.h>
+#     #endif
+#     '
+#
+#     AX_COMPILE_CHECK_SIZEOF(char)
+#     AX_COMPILE_CHECK_SIZEOF(short)
+#     AX_COMPILE_CHECK_SIZEOF(int)
+#     AX_COMPILE_CHECK_SIZEOF(long)
+#     AX_COMPILE_CHECK_SIZEOF(unsigned char *)
+#     AX_COMPILE_CHECK_SIZEOF(void *)
+#     AX_COMPILE_CHECK_SIZEOF(size_t, $headers)
+#     AX_COMPILE_CHECK_SIZEOF(ssize_t, $headers)
+#     AX_COMPILE_CHECK_SIZEOF(ptrdiff_t, $headers)
+#     AX_COMPILE_CHECK_SIZEOF(off_t, $headers)
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Kaveh Ghazi <ghazi@caip.rutgers.edu>
+#   Copyright (c) 2017 Reini Urban <rurban@cpan.org>
+#
+#   This program is free software: you can redistribute it and/or modify it
+#   under the terms of the GNU General Public License as published by the
+#   Free Software Foundation, either version 3 of the License, or (at your
+#   option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+#   Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 8
+
+AU_ALIAS([AC_COMPILE_CHECK_SIZEOF], [AX_COMPILE_CHECK_SIZEOF])
+AC_DEFUN([AX_COMPILE_CHECK_SIZEOF],
+[changequote(<<, >>)dnl
+dnl The name to #define.
+define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
+dnl The cache variable name.
+define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
+changequote([, ])dnl
+AC_MSG_CHECKING(size of $1)
+AC_CACHE_VAL(AC_CV_NAME,
+[for ac_size in 4 8 1 2 16 $3 ; do # List sizes in rough order of prevalence.
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+$2
+]], [[switch (0) case 0: case (sizeof ($1) == $ac_size):;]])], [AC_CV_NAME=$ac_size])
+  if test x$AC_CV_NAME != x ; then break; fi
+done
+])
+if test x$AC_CV_NAME = x ; then
+  AC_MSG_ERROR([cannot determine a size for $1])
+fi
+AC_MSG_RESULT($AC_CV_NAME)
+AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1])
+undefine([AC_TYPE_NAME])dnl
+undefine([AC_CV_NAME])dnl
+])
index 625aeb1..1fe1611 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
index b8521a4..be73b80 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+# Copyright (C) 2011-2021 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -42,11 +42,13 @@ print_usage ()
 {
   cat <<END
 Usage:
-  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
-              [--expect-failure={yes|no}] [--color-tests={yes|no}]
-              [--enable-hard-errors={yes|no}] [--]
+  test-driver --test-name NAME --log-file PATH --trs-file PATH
+              [--expect-failure {yes|no}] [--color-tests {yes|no}]
+              [--enable-hard-errors {yes|no}] [--]
               TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+
 The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+See the GNU Automake documentation for information.
 END
 }
 
@@ -103,8 +105,11 @@ trap "st=130; $do_exit" 2
 trap "st=141; $do_exit" 13
 trap "st=143; $do_exit" 15
 
-# Test script is run here.
-"$@" >$log_file 2>&1
+# Test script is run here. We create the file first, then append to it,
+# to ameliorate tests themselves also writing to the log file. Our tests
+# don't, but others can (automake bug#35762).
+: >"$log_file"
+"$@" >>"$log_file" 2>&1
 estatus=$?
 
 if test $enable_hard_errors = no && test $estatus -eq 99; then
@@ -126,7 +131,7 @@ esac
 # know whether the test passed or failed simply by looking at the '.log'
 # file, without the need of also peaking into the corresponding '.trs'
 # file (automake bug#11814).
-echo "$res $test_name (exit status: $estatus)" >>$log_file
+echo "$res $test_name (exit status: $estatus)" >>"$log_file"
 
 # Report outcome to console.
 echo "${col}${res}${std}: $test_name"
index a916395..aa40485 100644 (file)
@@ -7,7 +7,7 @@ find_library(MBEDCRYPTO_LIBRARY mbedcrypto)
 set(MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}")
 
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(MBEDTLS DEFAULT_MSG
+find_package_handle_standard_args(MbedTLS DEFAULT_MSG
     MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY)
 
 mark_as_advanced(MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY)
index 5ddd2f3..71d54a4 100644 (file)
 #cmakedefine HAVE_UNSIGNED___INT64
 
 /* The sizes of various standard integer types. */
-@SIZE_OF_SHORT_CODE@
-@SIZE_OF_INT_CODE@
-@SIZE_OF_LONG_CODE@
-@SIZE_OF_LONG_LONG_CODE@
-@SIZE_OF_UNSIGNED_SHORT_CODE@
-@SIZE_OF_UNSIGNED_CODE@
-@SIZE_OF_UNSIGNED_LONG_CODE@
-@SIZE_OF_UNSIGNED_LONG_LONG_CODE@
+@SIZEOF_SHORT_CODE@
+@SIZEOF_INT_CODE@
+@SIZEOF_LONG_CODE@
+@SIZEOF_LONG_LONG_CODE@
+@SIZEOF_UNSIGNED_SHORT_CODE@
+@SIZEOF_UNSIGNED_CODE@
+@SIZEOF_UNSIGNED_LONG_CODE@
+@SIZEOF_UNSIGNED_LONG_LONG_CODE@
 
 /*
  * If we lack int64_t, define it to the first of __int64, int, long, and long long
@@ -41,17 +41,17 @@ typedef __int64 int64_t;
 #define HAVE_INT64_T
 #endif
 
-#if !defined(HAVE_INT64_T) && SIZE_OF_INT == 8
+#if !defined(HAVE_INT64_T) && SIZEOF_INT == 8
 typedef int int64_t;
 #define HAVE_INT64_T
 #endif
 
-#if !defined(HAVE_INT64_T) && SIZE_OF_LONG == 8
+#if !defined(HAVE_INT64_T) && SIZEOF_LONG == 8
 typedef long int64_t;
 #define HAVE_INT64_T
 #endif
 
-#if !defined(HAVE_INT64_T) && SIZE_OF_LONG_LONG == 8
+#if !defined(HAVE_INT64_T) && SIZEOF_LONG_LONG == 8
 typedef long long int64_t;
 #define HAVE_INT64_T
 #endif
@@ -63,12 +63,12 @@ typedef long long int64_t;
 /*
  * Similarly for int32_t
  */
-#if !defined(HAVE_INT32_T) && SIZE_OF_INT == 4
+#if !defined(HAVE_INT32_T) && SIZEOF_INT == 4
 typedef int int32_t;
 #define HAVE_INT32_T
 #endif
 
-#if !defined(HAVE_INT32_T) && SIZE_OF_LONG == 4
+#if !defined(HAVE_INT32_T) && SIZEOF_LONG == 4
 typedef long int32_t;
 #define HAVE_INT32_T
 #endif
@@ -80,12 +80,12 @@ typedef long int32_t;
 /*
  * Similarly for int16_t
  */
-#if !defined(HAVE_INT16_T) && SIZE_OF_INT == 2
+#if !defined(HAVE_INT16_T) && SIZEOF_INT == 2
 typedef int int16_t;
 #define HAVE_INT16_T
 #endif
 
-#if !defined(HAVE_INT16_T) && SIZE_OF_SHORT == 2
+#if !defined(HAVE_INT16_T) && SIZEOF_SHORT == 2
 typedef short int16_t;
 #define HAVE_INT16_T
 #endif
@@ -102,17 +102,17 @@ typedef unsigned __int64 uint64_t;
 #define HAVE_UINT64_T
 #endif
 
-#if !defined(HAVE_UINT64_T) && SIZE_OF_UNSIGNED == 8
+#if !defined(HAVE_UINT64_T) && SIZEOF_UNSIGNED == 8
 typedef unsigned uint64_t;
 #define HAVE_UINT64_T
 #endif
 
-#if !defined(HAVE_UINT64_T) && SIZE_OF_UNSIGNED_LONG == 8
+#if !defined(HAVE_UINT64_T) && SIZEOF_UNSIGNED_LONG == 8
 typedef unsigned long uint64_t;
 #define HAVE_UINT64_T
 #endif
 
-#if !defined(HAVE_UINT64_T) && SIZE_OF_UNSIGNED_LONG_LONG == 8
+#if !defined(HAVE_UINT64_T) && SIZEOF_UNSIGNED_LONG_LONG == 8
 typedef unsigned long long uint64_t;
 #define HAVE_UINT64_T
 #endif
@@ -125,12 +125,12 @@ typedef unsigned long long uint64_t;
 /*
  * Similarly for uint32_t
  */
-#if !defined(HAVE_UINT32_T) && SIZE_OF_UNSIGNED == 4
+#if !defined(HAVE_UINT32_T) && SIZEOF_UNSIGNED == 4
 typedef unsigned uint32_t;
 #define HAVE_UINT32_T
 #endif
 
-#if !defined(HAVE_UINT32_T) && SIZE_OF_UNSIGNED_LONG == 4
+#if !defined(HAVE_UINT32_T) && SIZEOF_UNSIGNED_LONG == 4
 typedef unsigned long uint32_t;
 #define HAVE_UINT32_T
 #endif
@@ -142,12 +142,12 @@ typedef unsigned long uint32_t;
 /*
  * Similarly for uint16_t
  */
-#if !defined(HAVE_UINT16_T) && SIZE_OF_UNSIGNED == 2
+#if !defined(HAVE_UINT16_T) && SIZEOF_UNSIGNED == 2
 typedef unsigned uint16_t;
 #define HAVE_UINT16_T
 #endif
 
-#if !defined(HAVE_UINT16_T) && SIZE_OF_UNSIGNED_SHORT == 2
+#if !defined(HAVE_UINT16_T) && SIZEOF_UNSIGNED_SHORT == 2
 typedef unsigned short uint16_t;
 #define HAVE_UINT16_T
 #endif
@@ -164,7 +164,7 @@ typedef unsigned char uint8_t;
 #define HAVE_UINT8_T
 #endif
 
-#if !defined(HAVE_UINT16_T)
+#if !defined(HAVE_UINT8_T)
 #error No 8-bit unsigned integer type was found.
 #endif
 
@@ -207,6 +207,9 @@ typedef uint64_t uintmax_t;
 /* MD5 via ARCHIVE_CRYPTO_MD5_LIBSYSTEM supported. */
 #cmakedefine ARCHIVE_CRYPTO_MD5_LIBSYSTEM 1
 
+/* MD5 via ARCHIVE_CRYPTO_MD5_MBEDTLS supported. */
+#cmakedefine ARCHIVE_CRYPTO_MD5_MBEDTLS 1
+
 /* MD5 via ARCHIVE_CRYPTO_MD5_NETTLE supported. */
 #cmakedefine ARCHIVE_CRYPTO_MD5_NETTLE 1
 
@@ -222,6 +225,9 @@ typedef uint64_t uintmax_t;
 /* RMD160 via ARCHIVE_CRYPTO_RMD160_NETTLE supported. */
 #cmakedefine ARCHIVE_CRYPTO_RMD160_NETTLE 1
 
+/* RMD160 via ARCHIVE_CRYPTO_RMD160_MBEDTLS supported. */
+#cmakedefine ARCHIVE_CRYPTO_RMD160_MBEDTLS 1
+
 /* RMD160 via ARCHIVE_CRYPTO_RMD160_OPENSSL supported. */
 #cmakedefine ARCHIVE_CRYPTO_RMD160_OPENSSL 1
 
@@ -231,6 +237,9 @@ typedef uint64_t uintmax_t;
 /* SHA1 via ARCHIVE_CRYPTO_SHA1_LIBSYSTEM supported. */
 #cmakedefine ARCHIVE_CRYPTO_SHA1_LIBSYSTEM 1
 
+/* SHA1 via ARCHIVE_CRYPTO_SHA1_MBEDTLS supported. */
+#cmakedefine ARCHIVE_CRYPTO_SHA1_MBEDTLS 1
+
 /* SHA1 via ARCHIVE_CRYPTO_SHA1_NETTLE supported. */
 #cmakedefine ARCHIVE_CRYPTO_SHA1_NETTLE 1
 
@@ -252,6 +261,9 @@ typedef uint64_t uintmax_t;
 /* SHA256 via ARCHIVE_CRYPTO_SHA256_LIBSYSTEM supported. */
 #cmakedefine ARCHIVE_CRYPTO_SHA256_LIBSYSTEM 1
 
+/* SHA256 via ARCHIVE_CRYPTO_SHA256_MBEDTLS supported. */
+#cmakedefine ARCHIVE_CRYPTO_SHA256_MBEDTLS 1
+
 /* SHA256 via ARCHIVE_CRYPTO_SHA256_NETTLE supported. */
 #cmakedefine ARCHIVE_CRYPTO_SHA256_NETTLE 1
 
@@ -273,6 +285,9 @@ typedef uint64_t uintmax_t;
 /* SHA384 via ARCHIVE_CRYPTO_SHA384_LIBSYSTEM supported. */
 #cmakedefine ARCHIVE_CRYPTO_SHA384_LIBSYSTEM 1
 
+/* SHA384 via ARCHIVE_CRYPTO_SHA384_MBEDTLS supported. */
+#cmakedefine ARCHIVE_CRYPTO_SHA384_MBEDTLS 1
+
 /* SHA384 via ARCHIVE_CRYPTO_SHA384_NETTLE supported. */
 #cmakedefine ARCHIVE_CRYPTO_SHA384_NETTLE 1
 
@@ -294,6 +309,9 @@ typedef uint64_t uintmax_t;
 /* SHA512 via ARCHIVE_CRYPTO_SHA512_LIBSYSTEM supported. */
 #cmakedefine ARCHIVE_CRYPTO_SHA512_LIBSYSTEM 1
 
+/* SHA512 via ARCHIVE_CRYPTO_SHA512_MBEDTLS supported. */
+#cmakedefine ARCHIVE_CRYPTO_SHA512_MBEDTLS 1
+
 /* SHA512 via ARCHIVE_CRYPTO_SHA512_NETTLE supported. */
 #cmakedefine ARCHIVE_CRYPTO_SHA512_NETTLE 1
 
@@ -316,13 +334,16 @@ typedef uint64_t uintmax_t;
 #cmakedefine ARCHIVE_XATTR_LINUX 1
 
 /* Version number of bsdcpio */
-#cmakedefine BSDCPIO_VERSION_STRING "${BSDCPIO_VERSION_STRING}"
+#cmakedefine BSDCPIO_VERSION_STRING "@BSDCPIO_VERSION_STRING@"
 
 /* Version number of bsdtar */
-#cmakedefine BSDTAR_VERSION_STRING "${BSDTAR_VERSION_STRING}"
+#cmakedefine BSDTAR_VERSION_STRING "@BSDTAR_VERSION_STRING@"
 
 /* Version number of bsdcat */
-#cmakedefine BSDCAT_VERSION_STRING "${BSDCAT_VERSION_STRING}"
+#cmakedefine BSDCAT_VERSION_STRING "@BSDCAT_VERSION_STRING@"
+
+/* Version number of bsdunzip */
+#cmakedefine BSDUNZIP_VERSION_STRING "@BSDUNZIP_VERSION_STRING@"
 
 /* Define to 1 if you have the `acl_create_entry' function. */
 #cmakedefine HAVE_ACL_CREATE_ENTRY 1
@@ -366,7 +387,7 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the <attr/xattr.h> header file. */
 #cmakedefine HAVE_ATTR_XATTR_H 1
 
-/* Define to 1 if you have the <Bcrypt.h> header file. */
+/* Define to 1 if you have the <bcrypt.h> header file. */
 #cmakedefine HAVE_BCRYPT_H 1
 
 /* Define to 1 if you have the <bsdxml.h> header file. */
@@ -570,6 +591,12 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the `flistxattr' function. */
 #cmakedefine HAVE_FLISTXATTR 1
 
+/* Define to 1 if you have the `fnmatch' function. */
+#cmakedefine HAVE_FNMATCH 1
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#cmakedefine HAVE_FNMATCH_H 1
+
 /* Define to 1 if you have the `fork' function. */
 #cmakedefine HAVE_FORK 1
 
@@ -618,6 +645,9 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the `getgrnam_r' function. */
 #cmakedefine HAVE_GETGRNAM_R 1
 
+/* Define to 1 if you have the `getline' function. */
+#cmakedefine HAVE_GETLINE 1
+
 /* Define to 1 if you have the `getpid' function. */
 #cmakedefine HAVE_GETPID 1
 
@@ -738,6 +768,10 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the `zstd' library (-lzstd). */
 #cmakedefine HAVE_LIBZSTD 1
 
+/* Define to 1 if you have the `zstd' library (-lzstd) with compression
+   support. */
+#cmakedefine HAVE_LIBZSTD_COMPRESSOR 1
+
 /* Define to 1 if you have the <limits.h> header file. */
 #cmakedefine HAVE_LIMITS_H 1
 
@@ -823,6 +857,15 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the <lzo/lzoconf.h> header file. */
 #cmakedefine HAVE_LZO_LZOCONF_H 1
 
+/* Define to 1 if you have the <mbedtls/aes.h> header file. */
+#cmakedefine HAVE_MBEDTLS_AES_H 1
+
+/* Define to 1 if you have the <mbedtls/md.h> header file. */
+#cmakedefine HAVE_MBEDTLS_MD_H 1
+
+/* Define to 1 if you have the <mbedtls/pkcs5.h> header file. */
+#cmakedefine HAVE_MBEDTLS_PKCS5_H 1
+
 /* Define to 1 if you have the `mbrtowc' function. */
 #cmakedefine HAVE_MBRTOWC 1
 
@@ -874,6 +917,9 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the `openat' function. */
 #cmakedefine HAVE_OPENAT 1
 
+/* Define to 1 if you have the <openssl/evp.h> header file. */
+#cmakedefine HAVE_OPENSSL_EVP_H 1
+
 /* Define to 1 if you have the <paths.h> header file. */
 #cmakedefine HAVE_PATHS_H 1
 
@@ -986,6 +1032,12 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the `strrchr' function. */
 #cmakedefine HAVE_STRRCHR 1
 
+/* Define to 1 if the system has the type `struct statfs'. */
+#cmakedefine HAVE_STRUCT_STATFS 1
+
+/* Define to 1 if `f_iosize' is a member of `struct statfs'. */
+#cmakedefine HAVE_STRUCT_STATFS_F_IOSIZE 1
+
 /* Define to 1 if `f_namemax' is a member of `struct statfs'. */
 #cmakedefine HAVE_STRUCT_STATFS_F_NAMEMAX 1
 
@@ -1069,6 +1121,9 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the <sys/poll.h> header file. */
 #cmakedefine HAVE_SYS_POLL_H 1
 
+/* Define to 1 if you have the <sys/queue.h> header file. */
+#cmakedefine HAVE_SYS_QUEUE_H 1
+
 /* Define to 1 if you have the <sys/richacl.h> header file. */
 #cmakedefine HAVE_SYS_RICHACL_H 1
 
@@ -1208,8 +1263,8 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the <zstd.h> header file. */
 #cmakedefine HAVE_ZSTD_H 1
 
-/* Define to 1 if you have the `_ctime64_s' function. */
-#cmakedefine HAVE__CTIME64_S 1
+/* Define to 1 if you have the `ctime_s' function. */
+#cmakedefine HAVE_CTIME_S 1
 
 /* Define to 1 if you have the `_fseeki64' function. */
 #cmakedefine HAVE__FSEEKI64 1
@@ -1217,23 +1272,23 @@ typedef uint64_t uintmax_t;
 /* Define to 1 if you have the `_get_timezone' function. */
 #cmakedefine HAVE__GET_TIMEZONE 1
 
-/* Define to 1 if you have the `_gmtime64_s' function. */
-#cmakedefine HAVE__GMTIME64_S 1
+/* Define to 1 if you have the `gmtime_s' function. */
+#cmakedefine HAVE_GMTIME_S 1
 
-/* Define to 1 if you have the `_localtime64_s' function. */
-#cmakedefine HAVE__LOCALTIME64_S 1
+/* Define to 1 if you have the `localtime_s' function. */
+#cmakedefine HAVE_LOCALTIME_S 1
 
-/* Define to 1 if you have the `_mkgmtime64' function. */
-#cmakedefine HAVE__MKGMTIME64 1
+/* Define to 1 if you have the `_mkgmtime' function. */
+#cmakedefine HAVE__MKGMTIME 1
 
 /* Define as const if the declaration of iconv() needs const. */
-#define ICONV_CONST ${ICONV_CONST}
+#define ICONV_CONST @ICONV_CONST@
 
 /* Version number of libarchive as a single integer */
-#cmakedefine LIBARCHIVE_VERSION_NUMBER "${LIBARCHIVE_VERSION_NUMBER}"
+#cmakedefine LIBARCHIVE_VERSION_NUMBER "@LIBARCHIVE_VERSION_NUMBER@"
 
 /* Version number of libarchive */
-#cmakedefine LIBARCHIVE_VERSION_STRING "${LIBARCHIVE_VERSION_STRING}"
+#cmakedefine LIBARCHIVE_VERSION_STRING "@LIBARCHIVE_VERSION_STRING@"
 
 /* Define to 1 if `lstat' dereferences a symlink specified with a trailing
    slash. */
@@ -1251,7 +1306,7 @@ typedef uint64_t uintmax_t;
 #cmakedefine NO_MINUS_C_MINUS_O 1
 
 /* The size of `wchar_t', as computed by sizeof. */
-#cmakedefine SIZEOF_WCHAR_T ${SIZEOF_WCHAR_T}
+#cmakedefine SIZEOF_WCHAR_T @SIZEOF_WCHAR_T@
 
 /* Define to 1 if strerror_r returns char *. */
 #cmakedefine STRERROR_R_CHAR_P 1
@@ -1287,59 +1342,59 @@ typedef uint64_t uintmax_t;
 #endif /* SAFE_TO_DEFINE_EXTENSIONS */
 
 /* Version number of package */
-#cmakedefine VERSION "${VERSION}"
+#cmakedefine VERSION "@VERSION@"
 
 /* Number of bits in a file offset, on hosts where this is settable. */
-#cmakedefine _FILE_OFFSET_BITS ${_FILE_OFFSET_BITS}
+#cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@
 
 /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
 #cmakedefine _LARGEFILE_SOURCE 1
 
 /* Define for large files, on AIX-style hosts. */
-#cmakedefine _LARGE_FILES ${_LARGE_FILES}
+#cmakedefine _LARGE_FILES @_LARGE_FILES@
 
 /* Define to control Windows SDK version */
 #ifndef NTDDI_VERSION
-#cmakedefine NTDDI_VERSION ${NTDDI_VERSION}
+#cmakedefine NTDDI_VERSION @NTDDI_VERSION@
 #endif // NTDDI_VERSION
 
 #ifndef _WIN32_WINNT
-#cmakedefine _WIN32_WINNT ${_WIN32_WINNT}
+#cmakedefine _WIN32_WINNT @_WIN32_WINNT@
 #endif // _WIN32_WINNT
 
 #ifndef WINVER
-#cmakedefine WINVER ${WINVER}
+#cmakedefine WINVER @WINVER@
 #endif // WINVER
 
 /* Define to empty if `const' does not conform to ANSI C. */
-#cmakedefine const ${const}
+#cmakedefine const @const@
 
 /* Define to `int' if <sys/types.h> doesn't define. */
-#cmakedefine gid_t ${gid_t}
+#cmakedefine gid_t @gid_t@
 
 /* Define to `unsigned long' if <sys/types.h> does not define. */
-#cmakedefine id_t ${id_t}
+#cmakedefine id_t @id_t@
 
 /* Define to `int' if <sys/types.h> does not define. */
-#cmakedefine mode_t ${mode_t}
+#cmakedefine mode_t @mode_t@
 
 /* Define to `long long' if <sys/types.h> does not define. */
-#cmakedefine off_t ${off_t}
+#cmakedefine off_t @off_t@
 
 /* Define to `int' if <sys/types.h> doesn't define. */
-#cmakedefine pid_t ${pid_t}
+#cmakedefine pid_t @pid_t@
 
 /* Define to `unsigned int' if <sys/types.h> does not define. */
-#cmakedefine size_t ${size_t}
+#cmakedefine size_t @size_t@
 
 /* Define to `int' if <sys/types.h> does not define. */
-#cmakedefine ssize_t ${ssize_t}
+#cmakedefine ssize_t @ssize_t@
 
 /* Define to `int' if <sys/types.h> doesn't define. */
-#cmakedefine uid_t ${uid_t}
+#cmakedefine uid_t @uid_t@
 
 /* Define to `int' if <sys/types.h> does not define. */
-#cmakedefine intptr_t ${intptr_t}
+#cmakedefine intptr_t @intptr_t@
 
 /* Define to `unsigned int' if <sys/types.h> does not define. */
-#cmakedefine uintptr_t ${uintptr_t}
+#cmakedefine uintptr_t @uintptr_t@
index 4b631e6..1f51e77 100644 (file)
@@ -10,3 +10,4 @@ Cflags: -I${includedir}
 Cflags.private: -DLIBARCHIVE_STATIC
 Libs: -L${libdir} -larchive
 Libs.private: @LIBS@
+Requires.private: @LIBSREQUIRED@
index 5fce0ed..414ae6d 100644 (file)
@@ -1 +1 @@
-3005002
+3007002
index cae19be..3c4b7a8 100644 (file)
@@ -24,7 +24,7 @@
  */
 
 /*
- * Command line parser for tar.
+ * Command line parser for bsdcat.
  */
 
 #include "bsdcat_platform.h"
@@ -44,12 +44,12 @@ __FBSDID("$FreeBSD$");
 #include "err.h"
 
 /*
- * Short options for tar.  Please keep this sorted.
+ * Short options for bsdcat.  Please keep this sorted.
  */
 static const char *short_options = "h";
 
 /*
- * Long options for tar.  Please keep this list sorted.
+ * Long options for bsdcat.  Please keep this list sorted.
  *
  * The symbolic names for options that lack a short equivalent are
  * defined in bsdcat.h.  Also note that so far I've found no need
@@ -61,7 +61,7 @@ static const struct bsdcat_option {
        const char *name;
        int required;      /* 1 if this option requires an argument. */
        int equivalent;    /* Equivalent short option. */
-} tar_longopts[] = {
+} bsdcat_longopts[] = {
        { "help",                 0, 'h' },
        { "version",              0, OPTION_VERSION },
        { NULL, 0, 0 }
@@ -90,7 +90,7 @@ static const struct bsdcat_option {
  * -W long options: There's an obscure GNU convention (only rarely
  * supported even there) that allows "-W option=argument" as an
  * alternative way to support long options.  This was supported in
- * early bsdcat as a way to access long options on platforms that did
+ * early bsdtar as a way to access long options on platforms that did
  * not support getopt_long() and is preserved here for backwards
  * compatibility.  (Of course, if I'd started with a custom
  * command-line parser from the beginning, I would have had normal
@@ -223,7 +223,7 @@ bsdcat_getopt(struct bsdcat *bsdcat)
                }
 
                /* Search the table for an unambiguous match. */
-               for (popt = tar_longopts; popt->name != NULL; popt++) {
+               for (popt = bsdcat_longopts; popt->name != NULL; popt++) {
                        /* Short-circuit if first chars don't match. */
                        if (popt->name[0] != bsdcat->getopt_word[0])
                                continue;
index 8abfedc..6f3f9b9 100644 (file)
 /* Version number of bsdtar */
 #undef BSDTAR_VERSION_STRING
 
+/* Version number of bsdunzip */
+#undef BSDUNZIP_VERSION_STRING
+
 /* Define to 1 if the system has the type `ace_t'. */
 #undef HAVE_ACE_T
 
 /* Define to 1 if you have the `chroot' function. */
 #undef HAVE_CHROOT
 
+/* cmtime_s function */
+#undef HAVE_CMTIME_S
+
 /* Define to 1 if you have the <copyfile.h> header file. */
 #undef HAVE_COPYFILE_H
 
 /* Define to 1 if you have the `flistxattr' function. */
 #undef HAVE_FLISTXATTR
 
+/* Define to 1 if you have the `fnmatch' function. */
+#undef HAVE_FNMATCH
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#undef HAVE_FNMATCH_H
+
 /* Define to 1 if you have the `fork' function. */
 #undef HAVE_FORK
 
 /* Define to 1 if you have the `getgrnam_r' function. */
 #undef HAVE_GETGRNAM_R
 
+/* Define to 1 if you have the `getline' function. */
+#undef HAVE_GETLINE
+
 /* Define to 1 if you have the `getpid' function. */
 #undef HAVE_GETPID
 
 /* Define to 1 if you have the `gmtime_r' function. */
 #undef HAVE_GMTIME_R
 
+/* gmtime_s function */
+#undef HAVE_GMTIME_S
+
 /* Define to 1 if you have the <grp.h> header file. */
 #undef HAVE_GRP_H
 
 /* Define to 1 if you have the `crypto' library (-lcrypto). */
 #undef HAVE_LIBCRYPTO
 
-/* Define to 1 if you have the `eay32' library (-leay32). */
-#undef HAVE_LIBEAY32
-
-/* Define to 1 if you have the `eay64' library (-leay64). */
-#undef HAVE_LIBEAY64
-
 /* Define to 1 if you have the `expat' library (-lexpat). */
 #undef HAVE_LIBEXPAT
 
 /* Define to 1 if you have the `zstd' library (-lzstd). */
 #undef HAVE_LIBZSTD
 
+/* Define to 1 if you have the `zstd' library (-lzstd) with compression
+   support. */
+#undef HAVE_LIBZSTD_COMPRESSOR
+
 /* Define to 1 if you have the <limits.h> header file. */
 #undef HAVE_LIMITS_H
 
 /* Define to 1 if you have the `localtime_r' function. */
 #undef HAVE_LOCALTIME_R
 
+/* localtime_s function */
+#undef HAVE_LOCALTIME_S
+
 /* Define to 1 if the system has the type `long long int'. */
 #undef HAVE_LONG_LONG_INT
 
 /* Define to 1 if you have the <lz4.h> header file. */
 #undef HAVE_LZ4_H
 
+/* Define to 1 if you have the `LZMA_FILTER_ARM64' macro. */
+#undef HAVE_LZMA_FILTER_ARM64
+
 /* Define to 1 if you have the <lzma.h> header file. */
 #undef HAVE_LZMA_H
 
 /* Define to 1 if you have the `memmove' function. */
 #undef HAVE_MEMMOVE
 
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
 /* Define to 1 if you have the `memset' function. */
 #undef HAVE_MEMSET
 
+/* Define to 1 if you have the <minix/config.h> header file. */
+#undef HAVE_MINIX_CONFIG_H
+
 /* Define to 1 if you have the `mkdir' function. */
 #undef HAVE_MKDIR
 
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
 /* Define to 1 if you have the `strerror' function. */
 #undef HAVE_STRERROR
 
-/* Define to 1 if you have the `strerror_r' function. */
+/* Define if you have `strerror_r'. */
 #undef HAVE_STRERROR_R
 
 /* Define to 1 if you have the `strftime' function. */
 /* Define to 1 if you have the <sys/poll.h> header file. */
 #undef HAVE_SYS_POLL_H
 
+/* Define to 1 if you have the <sys/queue.h> header file. */
+#undef HAVE_SYS_QUEUE_H
+
 /* Define to 1 if you have the <sys/richacl.h> header file. */
 #undef HAVE_SYS_RICHACL_H
 
 /* Define to 1 if you have the <zstd.h> header file. */
 #undef HAVE_ZSTD_H
 
-/* Define to 1 if you have the `_ctime64_s' function. */
-#undef HAVE__CTIME64_S
-
 /* Define to 1 if you have the `_fseeki64' function. */
 #undef HAVE__FSEEKI64
 
 /* Define to 1 if you have the `_get_timezone' function. */
 #undef HAVE__GET_TIMEZONE
 
-/* Define to 1 if you have the `_gmtime64_s' function. */
-#undef HAVE__GMTIME64_S
-
-/* Define to 1 if you have the `_localtime64_s' function. */
-#undef HAVE__LOCALTIME64_S
-
-/* Define to 1 if you have the `_mkgmtime64' function. */
-#undef HAVE__MKGMTIME64
+/* _mkgmtime function */
+#undef HAVE__MKGMTIME
 
 /* Define as const if the declaration of iconv() needs const. */
 #undef ICONV_CONST
 /* Define to 1 if PCRE_STATIC needs to be defined. */
 #undef PCRE_STATIC
 
+/* The number of bytes in type int */
+#undef SIZEOF_INT
+
+/* The number of bytes in type long */
+#undef SIZEOF_LONG
+
 /* The size of `wchar_t', as computed by sizeof. */
 #undef SIZEOF_WCHAR_T
 
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+   required in a freestanding environment). This macro is provided for
+   backward compatibility; new code need not use it. */
 #undef STDC_HEADERS
 
 /* Define to 1 if strerror_r returns char *. */
 #undef STRERROR_R_CHAR_P
 
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
 /* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
 #endif
+/* Enable general extensions on macOS.  */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
 /* Enable GNU extensions on systems that have them.  */
 #ifndef _GNU_SOURCE
 # undef _GNU_SOURCE
 #endif
-/* Enable threading extensions on Solaris.  */
+/* Enable X/Open compliant socket functions that do not require linking
+   with -lxnet on HP-UX 11.11.  */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
+/* Identify the host operating system as Minix.
+   This macro does not affect the system headers' behavior.
+   A future release of Autoconf may stop defining this macro.  */
+#ifndef _MINIX
+# undef _MINIX
+#endif
+/* Enable general extensions on NetBSD.
+   Enable NetBSD compatibility extensions on Minix.  */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+   Oddly enough, this does nothing on OpenBSD.  */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior.  */
+#ifndef _POSIX_SOURCE
+# undef _POSIX_SOURCE
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior.  */
+#ifndef _POSIX_1_SOURCE
+# undef _POSIX_1_SOURCE
+#endif
+/* Enable POSIX-compatible threading on Solaris.  */
 #ifndef _POSIX_PTHREAD_SEMANTICS
 # undef _POSIX_PTHREAD_SEMANTICS
 #endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014.  */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014.  */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015.  */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015.  */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015.  */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010.  */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009.  */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
 /* Enable extensions on HP NonStop.  */
 #ifndef _TANDEM_SOURCE
 # undef _TANDEM_SOURCE
 #endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
+/* Enable X/Open extensions.  Define to 500 only if necessary
+   to make mbstate_t available.  */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
 #endif
 
 
 /* Define to '0x0502' for Windows Server 2003 APIs. */
 #undef WINVER
 
-/* Enable large inode numbers on Mac OS X 10.5.  */
-#ifndef _DARWIN_USE_64_BIT_INODE
-# define _DARWIN_USE_64_BIT_INODE 1
-#endif
-
 /* Number of bits in a file offset, on hosts where this is settable. */
 #undef _FILE_OFFSET_BITS
 
 /* Define for large files, on AIX-style hosts. */
 #undef _LARGE_FILES
 
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-#undef _POSIX_SOURCE
-
 /* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
    <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
    #define below would cause a syntax error. */
index e3190e2..1024a0a 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,11 +1,12 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libarchive 3.5.2.
+# Generated by GNU Autoconf 2.71 for libarchive 3.7.2.
 #
 # Report bugs to <libarchive-discuss@googlegroups.com>.
 #
 #
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
-else
+else $as_nop
   case `(set -o) 2>/dev/null` in #(
   *posix*) :
     set -o posix ;; #(
@@ -33,46 +36,46 @@ esac
 fi
 
 
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
 as_nl='
 '
 export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" ""       $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi
 
 # The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
   PATH_SEPARATOR=:
   (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
     (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -81,13 +84,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
 fi
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
 # Find who we are.  Look in the path if we contain no directory separator.
 as_myself=
 case $0 in #((
@@ -96,8 +92,12 @@ case $0 in #((
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
   done
 IFS=$as_save_IFS
 
@@ -109,30 +109,10 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
   exit 1
 fi
 
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 # Use a proper internal environment variable to ensure we don't fall
   # into an infinite loop, continuously re-executing ourselves.
@@ -154,20 +134,22 @@ esac
 exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
 # Admittedly, this is quite paranoid, since all the known shells bail
 # out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
   fi
   # We don't want this to propagate to other subprocesses.
           { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '\${1+\"\$@\"}'='\"\$@\"'
   setopt NO_GLOB_SUBST
-else
+else \$as_nop
   case \`(set -o) 2>/dev/null\` in #(
   *posix*) :
     set -o posix ;; #(
@@ -187,18 +169,20 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
 as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
 as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
 as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
 
-else
+else \$as_nop
   exitcode=1; echo positional parameters were not saved.
 fi
 test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
 test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1
 
   test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
     ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
@@ -206,31 +190,40 @@ test \$(( 1 + 1 )) = 2 || exit 1
     ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
     PATH=/empty FPATH=/empty; export PATH FPATH
     test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
-      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null
+then :
   as_have_required=yes
-else
+else $as_nop
   as_have_required=no
 fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
 
-else
+else $as_nop
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 as_found=false
 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
   as_found=:
   case $as_dir in #(
         /*)
           for as_base in sh bash ksh sh5; do
             # Try only shells that exist, to save several forks.
-            as_shell=$as_dir/$as_base
+            as_shell=$as_dir$as_base
             if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-                   { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+                   as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
   CONFIG_SHELL=$as_shell as_have_required=yes
-                  if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+                  if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
   break 2
 fi
 fi
@@ -238,14 +231,21 @@ fi
        esac
   as_found=false
 done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-             { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
 IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+  if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+             as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
 
 
-      if test "x$CONFIG_SHELL" != x; then :
+      if test "x$CONFIG_SHELL" != x
+then :
   export CONFIG_SHELL
              # We cannot yet assume a decent shell, so we have to provide a
 # neutralization value for shells without unset; and this also
@@ -263,18 +263,19 @@ esac
 exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
 # Admittedly, this is quite paranoid, since all the known shells bail
 # out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
 exit 255
 fi
 
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+    if test x$as_have_required = xno
+then :
+  printf "%s\n" "$0: This script requires a shell more modern than all"
+  printf "%s\n" "$0: the shells that I found on your system."
+  if test ${ZSH_VERSION+y} ; then
+    printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
   else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org and
+    printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and
 $0: libarchive-discuss@googlegroups.com about your system,
 $0: including any error possibly output before this
 $0: message. Then install a modern shell, or manually run
@@ -302,6 +303,7 @@ as_fn_unset ()
 }
 as_unset=as_fn_unset
 
+
 # as_fn_set_status STATUS
 # -----------------------
 # Set $? to STATUS, without forking.
@@ -319,6 +321,14 @@ as_fn_exit ()
   as_fn_set_status $1
   exit $1
 } # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+  return $?
+}
+as_nop=as_fn_nop
 
 # as_fn_mkdir_p
 # -------------
@@ -333,7 +343,7 @@ as_fn_mkdir_p ()
     as_dirs=
     while :; do
       case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
       *) as_qdir=$as_dir;;
       esac
       as_dirs="'$as_qdir' $as_dirs"
@@ -342,7 +352,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_dir" : 'X\(//\)[^/]' \| \
         X"$as_dir" : 'X\(//\)$' \| \
         X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -381,12 +391,13 @@ as_fn_executable_p ()
 # advantage of any shell optimizations that allow amortized linear growth over
 # repeated appends, instead of the typical quadratic growth present in naive
 # implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
   eval 'as_fn_append ()
   {
     eval $1+=\$2
   }'
-else
+else $as_nop
   as_fn_append ()
   {
     eval $1=\$$1\$2
@@ -398,18 +409,27 @@ fi # as_fn_append
 # Perform arithmetic evaluation on the ARGs, and store the result in the
 # global $as_val. Take advantage of shells that can avoid forks. The arguments
 # must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
   eval 'as_fn_arith ()
   {
     as_val=$(( $* ))
   }'
-else
+else $as_nop
   as_fn_arith ()
   {
     as_val=`expr "$@" || test $? -eq 1`
   }
 fi # as_fn_arith
 
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+  return $?
+}
+as_nop=as_fn_nop
 
 # as_fn_error STATUS ERROR [LINENO LOG_FD]
 # ----------------------------------------
@@ -421,9 +441,9 @@ as_fn_error ()
   as_status=$1; test $as_status -eq 0 && as_status=1
   if test "$4"; then
     as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $2" >&2
+  printf "%s\n" "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -450,7 +470,7 @@ as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -494,7 +514,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+    { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
   # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
   # already done that, so ensure we don't try to do so again and fall
@@ -508,6 +528,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   exit
 }
 
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
 ECHO_C= ECHO_N= ECHO_T=
 case `echo -n x` in #(((((
 -n*)
@@ -521,6 +545,13 @@ case `echo -n x` in #(((((
   ECHO_N='-n';;
 esac
 
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n.  New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
@@ -590,51 +621,49 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='libarchive'
 PACKAGE_TARNAME='libarchive'
-PACKAGE_VERSION='3.5.2'
-PACKAGE_STRING='libarchive 3.5.2'
+PACKAGE_VERSION='3.7.2'
+PACKAGE_STRING='libarchive 3.7.2'
 PACKAGE_BUGREPORT='libarchive-discuss@googlegroups.com'
 PACKAGE_URL=''
 
 ac_unique_file="libarchive"
 # Factoring default headers for most tests.
 ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
 #endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
 # include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
 #endif
 #ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
 # include <string.h>
 #endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
 #ifdef HAVE_INTTYPES_H
 # include <inttypes.h>
 #endif
 #ifdef HAVE_STDINT_H
 # include <stdint.h>
 #endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif"
 
+ac_header_c_list=
+ac_func_c_list=
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
+LIBSREQUIRED
 INC_FREEBSD_ACL_FALSE
 INC_FREEBSD_ACL_TRUE
 INC_DARWIN_ACL_FALSE
@@ -644,6 +673,7 @@ INC_SUNOS_ACL_TRUE
 INC_LINUX_ACL_FALSE
 INC_LINUX_ACL_TRUE
 LIBOBJS
+GC_SECTIONS
 LIBXML2_PC_LIBS
 LIBXML2_PC_CFLAGS
 PKG_CONFIG_LIBDIR
@@ -653,6 +683,10 @@ LTLIBICONV
 LIBICONV
 INC_BLAKE2_FALSE
 INC_BLAKE2_TRUE
+STATIC_BSDUNZIP_FALSE
+STATIC_BSDUNZIP_TRUE
+BUILD_BSDUNZIP_FALSE
+BUILD_BSDUNZIP_TRUE
 STATIC_BSDCPIO_FALSE
 STATIC_BSDCPIO_TRUE
 BUILD_BSDCPIO_FALSE
@@ -681,13 +715,13 @@ ac_ct_DUMPBIN
 DUMPBIN
 LD
 FGREP
+EGREP
+GREP
 SED
 LIBTOOL
 OBJDUMP
 DLLTOOL
 AS
-EGREP
-GREP
 CPP
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
@@ -720,6 +754,7 @@ build_cpu
 build
 LIBARCHIVE_VERSION_NUMBER
 LIBARCHIVE_VERSION_STRING
+BSDUNZIP_VERSION_STRING
 BSDCAT_VERSION_STRING
 BSDTAR_VERSION_STRING
 BSDCPIO_VERSION_STRING
@@ -731,6 +766,9 @@ AM_BACKSLASH
 AM_DEFAULT_VERBOSITY
 AM_DEFAULT_V
 AM_V
+CSCOPE
+ETAGS
+CTAGS
 am__untar
 am__tar
 AMTAR
@@ -811,6 +849,7 @@ enable_libtool_lock
 enable_bsdtar
 enable_bsdcat
 enable_bsdcpio
+enable_bsdunzip
 with_zlib
 with_bz2lib
 with_libb2
@@ -915,8 +954,6 @@ do
   *)    ac_optarg=yes ;;
   esac
 
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
   case $ac_dashdash$ac_option in
   --)
     ac_dashdash=yes ;;
@@ -957,9 +994,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "enable_$ac_useropt"
@@ -983,9 +1020,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "enable_$ac_useropt"
@@ -1196,9 +1233,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "with_$ac_useropt"
@@ -1212,9 +1249,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "with_$ac_useropt"
@@ -1258,9 +1295,9 @@ Try \`$0 --help' for more information"
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+      printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
     : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
@@ -1276,7 +1313,7 @@ if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
     fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+    *)     printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
 
@@ -1340,7 +1377,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_myself" : 'X\(//\)[^/]' \| \
         X"$as_myself" : 'X\(//\)$' \| \
         X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -1397,7 +1434,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libarchive 3.5.2 to adapt to many kinds of systems.
+\`configure' configures libarchive 3.7.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1468,7 +1505,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libarchive 3.5.2:";;
+     short | recursive ) echo "Configuration of libarchive 3.7.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1502,6 +1539,12 @@ Optional Features:
          --enable-bsdcpio=static static build of bsdcpio
          --enable-bsdcpio=shared dynamic build of bsdcpio
   --disable-bsdcpio       disable build of bsdcpio
+  --enable-bsdunzip       enable build of bsdunzip (default)
+           --enable-bsdunzip=static
+                          force static build of bsdunzip
+           --enable-bsdunzip=shared
+                          force dynamic build of bsdunzip
+           --disable-bsdunzip      disable build of bsdunzip
   --disable-rpath         do not hardcode runtime library paths
   --enable-posix-regex-lib
                           choose what library to use for POSIX regular
@@ -1588,9 +1631,9 @@ if test "$ac_init_help" = "recursive"; then
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1618,7 +1661,8 @@ esac
 ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
     cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
+    # Check for configure.gnu first; this name is used for a wrapper for
+    # Metaconfig's "Configure" on case-insensitive file systems.
     if test -f "$ac_srcdir/configure.gnu"; then
       echo &&
       $SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1626,7 +1670,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
       echo &&
       $SHELL "$ac_srcdir/configure" --help=recursive
     else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+      printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
     fi || ac_status=$?
     cd "$ac_pwd" || { ac_status=$?; break; }
   done
@@ -1635,10 +1679,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libarchive configure 3.5.2
-generated by GNU Autoconf 2.69
+libarchive configure 3.7.2
+generated by GNU Autoconf 2.71
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1655,14 +1699,14 @@ fi
 ac_fn_c_try_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
+  rm -f conftest.$ac_objext conftest.beam
   if { { ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_compile") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -1670,14 +1714,15 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
     mv -f conftest.er1 conftest.err
   fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
+       } && test -s conftest.$ac_objext
+then :
   ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
@@ -1699,7 +1744,7 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -1707,14 +1752,15 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
     mv -f conftest.er1 conftest.err
   fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } > conftest.i && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
-       }; then :
+       }
+then :
   ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
@@ -1724,139 +1770,6 @@ fi
 
 } # ac_fn_c_try_cpp
 
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## -------------------------------------------------- ##
-## Report this to libarchive-discuss@googlegroups.com ##
-## -------------------------------------------------- ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
 # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
 # -------------------------------------------------------
 # Tests whether HEADER exists and can be compiled using the include files in
@@ -1864,26 +1777,28 @@ fi
 ac_fn_c_check_header_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 #include <$2>
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$3=yes"
-else
+else $as_nop
   eval "$3=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
@@ -1894,14 +1809,14 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_try_link ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
+  rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
   if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -1909,17 +1824,18 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
     mv -f conftest.er1 conftest.err
   fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
         test -x conftest$ac_exeext
-       }; then :
+       }
+then :
   ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
@@ -1940,11 +1856,12 @@ fi
 ac_fn_c_check_func ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 /* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -1952,16 +1869,9 @@ else
 #define $2 innocuous_$2
 
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+   which can conflict with char $2 (); below.  */
 
+#include <limits.h>
 #undef $2
 
 /* Override any GCC internal prototype to avoid an error.
@@ -1979,28 +1889,72 @@ choke me
 #endif
 
 int
-main ()
+main (void)
 {
 return $2 ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   eval "$3=yes"
-else
+else $as_nop
   eval "$3=no"
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+then :
+  ac_retval=0
+else $as_nop
+  printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+       printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
 # ac_fn_c_check_type LINENO TYPE VAR INCLUDES
 # -------------------------------------------
 # Tests whether TYPE exists after having included INCLUDES, setting cache
@@ -2008,17 +1962,18 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_check_type ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   eval "$3=no"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 if (sizeof ($2))
         return 0;
@@ -2026,12 +1981,13 @@ if (sizeof ($2))
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 if (sizeof (($2)))
            return 0;
@@ -2039,18 +1995,19 @@ if (sizeof (($2)))
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-else
+else $as_nop
   eval "$3=yes"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
@@ -2062,16 +2019,17 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_check_member ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if eval \${$4+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+printf %s "checking for $2.$3... " >&6; }
+if eval test \${$4+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $5
 int
-main ()
+main (void)
 {
 static $2 ac_aggr;
 if (ac_aggr.$3)
@@ -2080,14 +2038,15 @@ return 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$4=yes"
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $5
 int
-main ()
+main (void)
 {
 static $2 ac_aggr;
 if (sizeof ac_aggr.$3)
@@ -2096,18 +2055,19 @@ return 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$4=yes"
-else
+else $as_nop
   eval "$4=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 eval ac_res=\$$4
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_member
@@ -2119,11 +2079,12 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_find_intX_t ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5
-$as_echo_n "checking for int$2_t... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5
+printf %s "checking for int$2_t... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   eval "$3=no"
      # Order is important - never check a type that is potentially smaller
      # than half of the expected target width.
@@ -2134,7 +2095,7 @@ else
 $ac_includes_default
             enum { N = $2 / 2 - 1 };
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))];
 test_array [0] = 0;
@@ -2144,13 +2105,14 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
                enum { N = $2 / 2 - 1 };
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1)
                 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))];
@@ -2161,9 +2123,10 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-else
+else $as_nop
   case $ac_type in #(
   int$2_t) :
     eval "$3=yes" ;; #(
@@ -2171,19 +2134,20 @@ else
     eval "$3=\$ac_type" ;;
 esac
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-       if eval test \"x\$"$3"\" = x"no"; then :
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+       if eval test \"x\$"$3"\" = x"no"
+then :
 
-else
+else $as_nop
   break
 fi
      done
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_find_intX_t
@@ -2195,11 +2159,12 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_find_uintX_t ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
-$as_echo_n "checking for uint$2_t... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
+printf %s "checking for uint$2_t... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   eval "$3=no"
      # Order is important - never check a type that is potentially smaller
      # than half of the expected target width.
@@ -2209,7 +2174,7 @@ else
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];
 test_array [0] = 0;
@@ -2219,7 +2184,8 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   case $ac_type in #(
   uint$2_t) :
     eval "$3=yes" ;; #(
@@ -2227,40 +2193,44 @@ if ac_fn_c_try_compile "$LINENO"; then :
     eval "$3=\$ac_type" ;;
 esac
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-       if eval test \"x\$"$3"\" = x"no"; then :
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+       if eval test \"x\$"$3"\" = x"no"
+then :
 
-else
+else $as_nop
   break
 fi
      done
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_find_uintX_t
 
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
+# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
+# ------------------------------------------------------------------
 # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
+# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR.
+ac_fn_check_decl ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   as_decl_name=`echo $2|sed 's/ *(.*//'`
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+printf %s "checking whether $as_decl_name is declared... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  eval ac_save_FLAGS=\$$6
+  as_fn_append $6 " $5"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 #ifndef $as_decl_name
 #ifdef __cplusplus
@@ -2274,19 +2244,22 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$3=yes"
-else
+else $as_nop
   eval "$3=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+  eval $6=\$ac_save_FLAGS
+
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
-} # ac_fn_c_check_decl
+} # ac_fn_check_decl
 
 # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
 # --------------------------------------------
@@ -2302,7 +2275,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) >= 0)];
 test_array [0] = 0;
@@ -2312,14 +2285,15 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_lo=0 ac_mid=0
   while :; do
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
 test_array [0] = 0;
@@ -2329,9 +2303,10 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_hi=$ac_mid; break
-else
+else $as_nop
   as_fn_arith $ac_mid + 1 && ac_lo=$as_val
                        if test $ac_lo -le $ac_mid; then
                          ac_lo= ac_hi=
@@ -2339,14 +2314,14 @@ else
                        fi
                        as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   done
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) < 0)];
 test_array [0] = 0;
@@ -2356,14 +2331,15 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_hi=-1 ac_mid=-1
   while :; do
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) >= $ac_mid)];
 test_array [0] = 0;
@@ -2373,9 +2349,10 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_lo=$ac_mid; break
-else
+else $as_nop
   as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
                        if test $ac_mid -le $ac_hi; then
                          ac_lo= ac_hi=
@@ -2383,14 +2360,14 @@ else
                        fi
                        as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   done
-else
+else $as_nop
   ac_lo= ac_hi=
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 # Binary search between lo and hi bounds.
 while test "x$ac_lo" != "x$ac_hi"; do
   as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
@@ -2398,7 +2375,7 @@ while test "x$ac_lo" != "x$ac_hi"; do
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
 test_array [0] = 0;
@@ -2408,12 +2385,13 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_hi=$ac_mid
-else
+else $as_nop
   as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 done
 case $ac_lo in #((
 ?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
@@ -2423,12 +2401,12 @@ esac
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
 #include <stdio.h>
 #include <stdlib.h>
 int
-main ()
+main (void)
 {
 
   FILE *f = fopen ("conftest.val", "w");
@@ -2456,9 +2434,10 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
+else $as_nop
   ac_retval=1
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -2470,14 +2449,34 @@ rm -f conftest.val
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_compute_int
+ac_configure_args_raw=
+for ac_arg
+do
+  case $ac_arg in
+  *\'*)
+    ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+  esac
+  as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+  *$as_nl*)
+    ac_safe_unquote= ;;
+  *)
+    ac_unsafe_z='|&;<>()$`\\"*?[ ''    ' # This string ends in space, tab.
+    ac_unsafe_a="$ac_unsafe_z#~"
+    ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+    ac_configure_args_raw=`      printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libarchive $as_me 3.5.2, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+It was created by libarchive $as_me 3.7.2, which was
+generated by GNU Autoconf 2.71.  Invocation command line was
 
-  $ $0 $@
+  $ $0$ac_configure_args_raw
 
 _ACEOF
 exec 5>>config.log
@@ -2510,8 +2509,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    printf "%s\n" "PATH: $as_dir"
   done
 IFS=$as_save_IFS
 
@@ -2546,7 +2549,7 @@ do
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
     *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
     1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2581,11 +2584,13 @@ done
 # WARNING: Use '\'' to represent an apostrophe within the trap.
 # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
 trap 'exit_status=$?
+  # Sanitize IFS.
+  IFS=" ""     $as_nl"
   # Save into config.log some information that might help in debugging.
   {
     echo
 
-    $as_echo "## ---------------- ##
+    printf "%s\n" "## ---------------- ##
 ## Cache variables. ##
 ## ---------------- ##"
     echo
@@ -2596,8 +2601,8 @@ trap 'exit_status=$?
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
@@ -2621,7 +2626,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    $as_echo "## ----------------- ##
+    printf "%s\n" "## ----------------- ##
 ## Output variables. ##
 ## ----------------- ##"
     echo
@@ -2629,14 +2634,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
     do
       eval ac_val=\$$ac_var
       case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
       esac
-      $as_echo "$ac_var='\''$ac_val'\''"
+      printf "%s\n" "$ac_var='\''$ac_val'\''"
     done | sort
     echo
 
     if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
+      printf "%s\n" "## ------------------- ##
 ## File substitutions. ##
 ## ------------------- ##"
       echo
@@ -2644,15 +2649,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       do
        eval ac_val=\$$ac_var
        case $ac_val in
-       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
        esac
-       $as_echo "$ac_var='\''$ac_val'\''"
+       printf "%s\n" "$ac_var='\''$ac_val'\''"
       done | sort
       echo
     fi
 
     if test -s confdefs.h; then
-      $as_echo "## ----------- ##
+      printf "%s\n" "## ----------- ##
 ## confdefs.h. ##
 ## ----------- ##"
       echo
@@ -2660,8 +2665,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       echo
     fi
     test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
+      printf "%s\n" "$as_me: caught signal $ac_signal"
+    printf "%s\n" "$as_me: exit $exit_status"
   } >&5
   rm -f core *.core core.conftest.* &&
     rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2675,63 +2680,48 @@ ac_signal=0
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
 rm -f -r conftest* confdefs.h
 
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
 
 # Predefined preprocessor variables.
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
 
 
 # Let the site file select an alternate cache file if it wants to.
 # Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
+  ac_site_files="$CONFIG_SITE"
 elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
+  ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
 else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
+  ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
 fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
 do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+  case $ac_site_file in #(
+  */*) :
+     ;; #(
+  *) :
+    ac_site_file=./$ac_site_file ;;
+esac
+  if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
     . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+      || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "failed to load site script $ac_site_file
 See \`config.log' for more details" "$LINENO" 5; }
   fi
@@ -2741,61 +2731,480 @@ if test -r "$cache_file"; then
   # Some versions of bash will fail to source /dev/null (special files
   # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
   if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . "$cache_file";;
       *)                      . "./$cache_file";;
     esac
   fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-       # differences in whitespace do not lead to failure.
-       ac_old_val_w=`echo x $ac_old_val`
-       ac_new_val_w=`echo x $ac_new_val`
-       if test "$ac_old_val_w" != "$ac_new_val_w"; then
-         { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-         ac_cache_corrupted=:
-       else
-         { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-         eval $ac_var=\$ac_old_val
-       fi
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+   Do not test the value of __STDC__, because some compilers set it to 0
+   while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh.  */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not \xHH hex character constants.
+   These do not provoke an error unfortunately, instead are silently treated
+   as an "x".  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously \x00 != x always comes out true, for an
+   array size at least.  It is necessary to write \x00 == 0 to get something
+   that is true only with -std.  */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+               int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+  #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str = "";
+  int number = 0;
+  float fnumber = 0;
+
+  while (*format)
+    {
+      switch (*format++)
+       {
+       case '\''s'\'': // string
+         str = va_arg (args_copy, const char *);
+         break;
+       case '\''d'\'': // int
+         number = va_arg (args_copy, int);
+         break;
+       case '\''f'\'': // float
+         fnumber = va_arg (args_copy, double);
+         break;
+       default:
+         break;
+       }
+    }
+  va_end (args_copy);
+  va_end (args);
+
+  return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+  // Check bool.
+  _Bool success = false;
+  success |= (argc != 0);
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[0] = argv[0][0];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+        || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+  int_alignment = _Alignof (int),
+  int_array_alignment = _Alignof (int[100]),
+  char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+  int x;
+  _Static_assert (sizeof (int) <= sizeof (long int),
+                  "_Static_assert does not work in struct");
+  long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+  union {
+    struct { int i; int j; };
+    struct { int k; long int l; } w;
+  };
+  int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+  _Static_assert ((offsetof (struct anonymous, i)
+                  == offsetof (struct anonymous, w.k)),
+                 "Anonymous union alignment botch");
+  v1.i = 2;
+  v1.w.k = 5;
+  ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+  int ok = 0;
+  ${ac_c_conftest_c89_main}
+  ${ac_c_conftest_c99_main}
+  ${ac_c_conftest_c11_main}
+  return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+  int ok = 0;
+  ${ac_c_conftest_c89_main}
+  ${ac_c_conftest_c99_main}
+  return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+  int ok = 0;
+  ${ac_c_conftest_c89_main}
+  return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H"
+as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H"
+as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H"
+as_fn_append ac_func_c_list " vprintf HAVE_VPRINTF"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.rpath ltmain.sh compile config.guess config.sub missing install-sh"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${srcdir}/build/autoconf"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+  as_found=:
+
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}:  trying $as_dir" >&5
+  ac_aux_dir_found=yes
+  ac_install_sh=
+  for ac_aux in $ac_aux_files
+  do
+    # As a special case, if "install-sh" is required, that requirement
+    # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+    # and $ac_install_sh is set appropriately for whichever one is found.
+    if test x"$ac_aux" = x"install-sh"
+    then
+      if test -f "${as_dir}install-sh"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}install-sh found" >&5
+        ac_install_sh="${as_dir}install-sh -c"
+      elif test -f "${as_dir}install.sh"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}install.sh found" >&5
+        ac_install_sh="${as_dir}install.sh -c"
+      elif test -f "${as_dir}shtool"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}shtool found" >&5
+        ac_install_sh="${as_dir}shtool install -c"
+      else
+        ac_aux_dir_found=no
+        if $ac_first_candidate; then
+          ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+        else
+          break
+        fi
+      fi
+    else
+      if test -f "${as_dir}${ac_aux}"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}${ac_aux} found" >&5
+      else
+        ac_aux_dir_found=no
+        if $ac_first_candidate; then
+          ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+        else
+          break
+        fi
+      fi
+    fi
+  done
+  if test "$ac_aux_dir_found" = yes; then
+    ac_aux_dir="$as_dir"
+    break
+  fi
+  ac_first_candidate=false
+
+  as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+  as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+  ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+  ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+  ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       # differences in whitespace do not lead to failure.
+       ac_old_val_w=`echo x $ac_old_val`
+       ac_new_val_w=`echo x $ac_new_val`
+       if test "$ac_old_val_w" != "$ac_new_val_w"; then
+         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         ac_cache_corrupted=:
+       else
+         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         eval $ac_var=\$ac_old_val
+       fi
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+printf "%s\n" "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
   esac
   # Pass precious variables to config.status.
   if test "$ac_new_set" = set; then
     case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case " $ac_configure_args " in
@@ -2805,11 +3214,12 @@ $as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
   fi
 done
 if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+           and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2825,41 +3235,15 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 # Make sure the srcdir contains "libarchive" directory
 
 # Use auxiliary subscripts from this subdirectory (cleans up root)
-ac_aux_dir=
-for ac_dir in build/autoconf "$srcdir"/build/autoconf; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in build/autoconf \"$srcdir\"/build/autoconf" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
 
 # M4 scripts
 
 # Must follow AC_CONFIG macros above...
 am__api_version='1.16'
 
-# Find a good install program.  We prefer a C program (faster),
+
+
+  # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
 # SysV /etc/install, /usr/sbin/install
@@ -2873,20 +3257,25 @@ am__api_version='1.16'
 # OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
 # Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${ac_cv_path_install+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+  ./ | /[cC]/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
   ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
   /usr/ucb/* ) ;;
@@ -2896,13 +3285,13 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+       if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
          if test $ac_prog = install &&
-           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
            :
          elif test $ac_prog = install &&
-           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # program-specific install script used by HP pwplus--don't use.
            :
          else
@@ -2910,12 +3299,12 @@ case $as_dir/ in #((
            echo one > conftest.one
            echo two > conftest.two
            mkdir conftest.dir
-           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+           if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
              test -s conftest.one && test -s conftest.two &&
              test -s conftest.dir/conftest.one &&
              test -s conftest.dir/conftest.two
            then
-             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
              break 3
            fi
          fi
@@ -2931,7 +3320,7 @@ IFS=$as_save_IFS
 rm -rf conftest.one conftest.two conftest.dir
 
 fi
-  if test "${ac_cv_path_install+set}" = set; then
+  if test ${ac_cv_path_install+y}; then
     INSTALL=$ac_cv_path_install
   else
     # As a last resort, use the slow shell script.  Don't cache a
@@ -2941,8 +3330,8 @@ fi
     INSTALL=$ac_install_sh
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 # It thinks the first close brace ends the variable substitution.
@@ -2952,8 +3341,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+printf %s "checking whether build environment is sane... " >&6; }
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -3007,8 +3396,8 @@ else
    as_fn_error $? "newly created file is older than distributed files!
 Check your system clock" "$LINENO" 5
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 # If we didn't sleep, we still need to ensure time stamps of config.status and
 # generated files are strictly newer.
 am_sleep_pid=
@@ -3027,26 +3416,23 @@ test "$program_suffix" != NONE &&
 # Double any \ or $.
 # By default was `s,x,x', remove it if useless.
 ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"`
+
 
 # Expand $ac_aux_dir to an absolute path.
 am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
+
+  if test x"${MISSING+set}" != xset; then
+  MISSING="\${SHELL} '$am_aux_dir/missing'"
 fi
 # Use eval to expand $SHELL
 if eval "$MISSING --is-lightweight"; then
   am_missing_run="$MISSING "
 else
   am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
 if test x"${install_sh+set}" != xset; then
@@ -3066,11 +3452,12 @@ if test "$cross_compiling" != no; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$STRIP"; then
   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 else
@@ -3078,11 +3465,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3093,11 +3484,11 @@ fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3106,11 +3497,12 @@ if test -z "$ac_cv_prog_STRIP"; then
   ac_ct_STRIP=$STRIP
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_STRIP"; then
   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 else
@@ -3118,11 +3510,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3133,11 +3529,11 @@ fi
 fi
 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_STRIP" = x; then
@@ -3145,8 +3541,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     STRIP=$ac_ct_STRIP
@@ -3158,25 +3554,31 @@ fi
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5
+printf %s "checking for a race-free mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if ${ac_cv_path_mkdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${ac_cv_path_mkdir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_prog in mkdir gmkdir; do
         for ac_exec_ext in '' $ac_executable_extensions; do
-          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
-          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-            'mkdir (GNU coreutils) '* | \
-            'mkdir (coreutils) '* | \
+          as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue
+          case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir ('*'coreutils) '* | \
+            'BusyBox '* | \
             'mkdir (fileutils) '4.1*)
-              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext
               break 3;;
           esac
         done
@@ -3187,7 +3589,7 @@ IFS=$as_save_IFS
 fi
 
   test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
+  if test ${ac_cv_path_mkdir+y}; then
     MKDIR_P="$ac_cv_path_mkdir -p"
   else
     # As a last resort, use the slow shell script.  Don't cache a
@@ -3197,18 +3599,19 @@ fi
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+printf "%s\n" "$MKDIR_P" >&6; }
 
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AWK+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$AWK"; then
   ac_cv_prog_AWK="$AWK" # Let the user override the test.
 else
@@ -3216,11 +3619,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3231,24 +3638,25 @@ fi
 fi
 AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+printf "%s\n" "$AWK" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
   test -n "$AWK" && break
 done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat >conftest.make <<\_ACEOF
 SHELL = /bin/sh
 all:
@@ -3264,12 +3672,12 @@ esac
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
   SET_MAKE=
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
@@ -3283,7 +3691,8 @@ fi
 rmdir .tst 2>/dev/null
 
 # Check whether --enable-silent-rules was given.
-if test "${enable_silent_rules+set}" = set; then :
+if test ${enable_silent_rules+y}
+then :
   enableval=$enable_silent_rules;
 fi
 
@@ -3293,12 +3702,13 @@ case $enable_silent_rules in # (((
     *) AM_DEFAULT_VERBOSITY=1;;
 esac
 am_make=${MAKE-make}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
-$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
-if ${am_cv_make_support_nested_variables+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if $as_echo 'TRUE=$(BAR$(V))
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if printf "%s\n" 'TRUE=$(BAR$(V))
 BAR0=false
 BAR1=true
 V=1
@@ -3310,8 +3720,8 @@ else
   am_cv_make_support_nested_variables=no
 fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
-$as_echo "$am_cv_make_support_nested_variables" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
 if test $am_cv_make_support_nested_variables = yes; then
     AM_V='$(V)'
   AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
@@ -3343,17 +3753,13 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libarchive'
- VERSION='3.5.2'
+ VERSION='3.7.2'
 
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
+printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
 
 
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
+printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h
 
 # Some tools Automake needs.
 
@@ -3393,6 +3799,20 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+  CTAGS=ctags
+fi
+
+if test -z "$ETAGS"; then
+  ETAGS=etags
+fi
+
+if test -z "$CSCOPE"; then
+  CSCOPE=cscope
+fi
+
+
 
 # POSIX will say in a future version that running "rm -f" with no argument
 # is OK; and we want to be able to make that assumption in our Makefile
@@ -3437,17 +3857,18 @@ END
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
-$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
     # Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then :
+if test ${enable_maintainer_mode+y}
+then :
   enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
-else
+else $as_nop
   USE_MAINTAINER_MODE=yes
 fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
-$as_echo "$USE_MAINTAINER_MODE" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+printf "%s\n" "$USE_MAINTAINER_MODE" >&6; }
    if test $USE_MAINTAINER_MODE = yes; then
   MAINTAINER_MODE_TRUE=
   MAINTAINER_MODE_FALSE='#'
@@ -3460,7 +3881,8 @@ fi
 
 
 # Check whether --enable-silent-rules was given.
-if test "${enable_silent_rules+set}" = set; then :
+if test ${enable_silent_rules+y}
+then :
   enableval=$enable_silent_rules;
 fi
 
@@ -3470,12 +3892,13 @@ case $enable_silent_rules in # (((
     *) AM_DEFAULT_VERBOSITY=0;;
 esac
 am_make=${MAKE-make}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
-$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
-if ${am_cv_make_support_nested_variables+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if $as_echo 'TRUE=$(BAR$(V))
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if printf "%s\n" 'TRUE=$(BAR$(V))
 BAR0=false
 BAR1=true
 V=1
@@ -3487,8 +3910,8 @@ else
   am_cv_make_support_nested_variables=no
 fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
-$as_echo "$am_cv_make_support_nested_variables" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
 if test $am_cv_make_support_nested_variables = yes; then
     AM_V='$(V)'
   AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
@@ -3503,7 +3926,7 @@ AM_BACKSLASH='\'
 
 # Libtool interface version bumps on any API change, so increments
 # whenever libarchive minor version does.
-ARCHIVE_MINOR=$(( (3005002 / 1000) % 1000 ))
+ARCHIVE_MINOR=$(( (3007002 / 1000) % 1000 ))
 # Libarchive 2.7 == libtool interface 9 = 2 + 7
 # Libarchive 2.8 == libtool interface 10 = 2 + 8
 # Libarchive 2.9 == libtool interface 11 = 2 + 8
@@ -3511,40 +3934,42 @@ ARCHIVE_MINOR=$(( (3005002 / 1000) % 1000 ))
 # Libarchive 3.1 == libtool interface 13
 ARCHIVE_INTERFACE=`echo $((13 + ${ARCHIVE_MINOR}))`
 # Libarchive revision is bumped on any source change === libtool revision
-ARCHIVE_REVISION=$(( 3005002 % 1000 ))
+ARCHIVE_REVISION=$(( 3007002 % 1000 ))
 # Libarchive minor is bumped on any interface addition === libtool age
 ARCHIVE_LIBTOOL_VERSION=$ARCHIVE_INTERFACE:$ARCHIVE_REVISION:$ARCHIVE_MINOR
 
 # Stick the version numbers into config.h
 
-$as_echo "#define __LIBARCHIVE_CONFIG_H_INCLUDED 1" >>confdefs.h
+printf "%s\n" "#define __LIBARCHIVE_CONFIG_H_INCLUDED 1" >>confdefs.h
 
 
-$as_echo "#define LIBARCHIVE_VERSION_STRING \"3.5.2\"" >>confdefs.h
+printf "%s\n" "#define LIBARCHIVE_VERSION_STRING \"3.7.2\"" >>confdefs.h
 
 
-cat >>confdefs.h <<_ACEOF
-#define LIBARCHIVE_VERSION_NUMBER "3005002"
-_ACEOF
+printf "%s\n" "#define LIBARCHIVE_VERSION_NUMBER \"3007002\"" >>confdefs.h
 
 
-$as_echo "#define BSDCPIO_VERSION_STRING \"3.5.2\"" >>confdefs.h
+printf "%s\n" "#define BSDCPIO_VERSION_STRING \"3.7.2\"" >>confdefs.h
 
 
-$as_echo "#define BSDTAR_VERSION_STRING \"3.5.2\"" >>confdefs.h
+printf "%s\n" "#define BSDTAR_VERSION_STRING \"3.7.2\"" >>confdefs.h
 
 
-$as_echo "#define BSDCAT_VERSION_STRING \"3.5.2\"" >>confdefs.h
+printf "%s\n" "#define BSDCAT_VERSION_STRING \"3.7.2\"" >>confdefs.h
+
+
+printf "%s\n" "#define BSDUNZIP_VERSION_STRING \"3.7.2\"" >>confdefs.h
 
 
 # The shell variables here must be the same as the AC_SUBST() variables
 # below, but the shell variable names apparently cannot be the same as
 # the m4 macro names above.  Why?  Ask autoconf.
-BSDCPIO_VERSION_STRING=3.5.2
-BSDTAR_VERSION_STRING=3.5.2
-BSDCAT_VERSION_STRING=3.5.2
-LIBARCHIVE_VERSION_STRING=3.5.2
-LIBARCHIVE_VERSION_NUMBER=3005002
+BSDCPIO_VERSION_STRING=3.7.2
+BSDTAR_VERSION_STRING=3.7.2
+BSDCAT_VERSION_STRING=3.7.2
+BSDUNZIP_VERSION_STRING=3.7.2
+LIBARCHIVE_VERSION_STRING=3.7.2
+LIBARCHIVE_VERSION_NUMBER=3007002
 
 # Substitute the above version numbers into the various files below.
 # Yes, I believe this is the fourth time we define what are essentially
@@ -3556,6 +3981,7 @@ LIBARCHIVE_VERSION_NUMBER=3005002
 
 
 
+
 ac_config_headers="$ac_config_headers config.h"
 
 ac_config_files="$ac_config_files Makefile"
@@ -3564,26 +3990,29 @@ ac_config_files="$ac_config_files build/pkgconfig/libarchive.pc"
 
 
 # Check for host type
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+
+  # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+  ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
 test "x$ac_build_alias" = x &&
   as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
 *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -3602,21 +4031,22 @@ IFS=$ac_save_IFS
 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+  ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
 *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -3661,11 +4091,20 @@ fi
 
 PLATFORMCPPFLAGS=
 case "$host_os" in
-  *mingw* ) PLATFORMCPPFLAGS=-D__USE_MINGW_ANSI_STDIO ;;
+  *mingw* ) PLATFORMCPPFLAGS=-D__USE_MINGW_ANSI_STDIO -D__MINGW_USE_VC2005_COMPAT ;;
 esac
 
 
 # Checks for programs.
+
+
+
+
+
+
+
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3674,11 +4113,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3686,11 +4126,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3701,11 +4145,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3714,11 +4158,12 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 else
@@ -3726,11 +4171,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3741,11 +4190,11 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_CC" = x; then
@@ -3753,8 +4202,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -3767,11 +4216,12 @@ if test -z "$CC"; then
           if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3779,11 +4229,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3794,11 +4248,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3807,11 +4261,12 @@ fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3820,15 +4275,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3844,18 +4303,18 @@ if test $ac_prog_rejected = yes; then
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
     shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+    ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
   fi
 fi
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3866,11 +4325,12 @@ if test -z "$CC"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3878,11 +4338,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3893,11 +4357,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3910,11 +4374,12 @@ if test -z "$CC"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 else
@@ -3922,11 +4387,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3937,11 +4406,11 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3953,8 +4422,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -3962,25 +4431,129 @@ esac
 fi
 
 fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}clang"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
 
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="clang"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
 
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
 See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
 set X $ac_compile
 ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
   { { ac_try="$ac_compiler $ac_option >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_compiler $ac_option >&5") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -3990,7 +4563,7 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
   fi
   rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
 
@@ -3998,7 +4571,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -4010,9 +4583,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
 # The possible output files:
 ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -4033,11 +4606,12 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link_default") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+then :
   # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
 # in a Makefile.  We should not override ac_cv_exeext if it was cached,
@@ -4054,7 +4628,7 @@ do
        # certainly right.
        break;;
     *.* )
-       if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
        then :; else
           ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
        fi
@@ -4070,44 +4644,46 @@ do
 done
 test "$ac_cv_exeext" = no && ac_cv_exeext=
 
-else
+else $as_nop
   ac_file=''
 fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "C compiler cannot create executables
 See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
 ac_exeext=$ac_cv_exeext
 
 rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
 if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+then :
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -4121,15 +4697,15 @@ for ac_file in conftest.exe conftest conftest.*; do
     * ) break;;
   esac
 done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+  { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of executables: cannot compile and link
 See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
@@ -4138,7 +4714,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 FILE *f = fopen ("conftest.out", "w");
  return ferror (f) || fclose (f) != 0;
@@ -4150,8 +4726,8 @@ _ACEOF
 ac_clean_files="$ac_clean_files conftest.out"
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
 if test "$cross_compiling" != yes; then
   { { ac_try="$ac_link"
 case "(($ac_try" in
@@ -4159,10 +4735,10 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
   if { ac_try='./conftest$ac_cv_exeext'
   { { case "(($ac_try" in
@@ -4170,39 +4746,40 @@ $as_echo "$ac_try_echo"; } >&5
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; }; then
     cross_compiling=no
   else
     if test "$cross_compiling" = maybe; then
        cross_compiling=yes
     else
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
 See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
 
 rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -4216,11 +4793,12 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_compile") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+then :
   for ac_file in conftest.o conftest.obj conftest.*; do
   test -f "$ac_file" || continue;
   case $ac_file in
@@ -4229,31 +4807,32 @@ $as_echo "$ac_try_echo"; } >&5
        break;;
   esac
 done
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of object files: cannot compile
 See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 #ifndef __GNUC__
        choke me
@@ -4263,29 +4842,33 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_compiler_gnu=yes
-else
+else $as_nop
   ac_compiler_gnu=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
 if test $ac_compiler_gnu = yes; then
   GCC=yes
 else
   GCC=
 fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
 ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
    ac_cv_prog_cc_g=no
@@ -4294,57 +4877,60 @@ else
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_g=yes
-else
+else $as_nop
   CFLAGS=""
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-else
+else $as_nop
   ac_c_werror_flag=$ac_save_c_werror_flag
         CFLAGS="-g"
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_g=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
   if test "$GCC" = yes; then
@@ -4359,94 +4945,144 @@ else
     CFLAGS=
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c11=no
 ac_save_CC=$CC
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+  test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
 
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c11" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+     CC="$CC $ac_cv_prog_cc_c11"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+  ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
 
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c99" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+     CC="$CC $ac_cv_prog_cc_c99"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+  ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_c_conftest_c89_program
 _ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
+  if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_c89=$ac_arg
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
   test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
 rm -f conftest.$ac_ext
 CC=$ac_save_CC
-
 fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
 
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c89" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+     CC="$CC $ac_cv_prog_cc_c89"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+  ac_prog_cc_stdc=c89
+fi
 fi
 
 ac_ext=c
@@ -4455,21 +5091,23 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-ac_ext=c
+
+  ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
-$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
-if ${am_cv_prog_cc_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -4497,8 +5135,8 @@ _ACEOF
   rm -f core conftest*
   unset am_i
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
-$as_echo "$am_cv_prog_cc_c_o" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
 if test "$am_cv_prog_cc_c_o" != yes; then
    # Losing compiler, so override with the script.
    # FIXME: It is wrong to rewrite CC.
@@ -4517,8 +5155,8 @@ DEPDIR="${am__leading_dot}deps"
 
 ac_config_commands="$ac_config_commands depfiles"
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
-$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; }
 cat > confinc.mk << 'END'
 am__doit:
        @echo this is the am__doit target >confinc.out
@@ -4554,11 +5192,12 @@ esac
   fi
 done
 rm -f confinc.* confmf.*
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
-$as_echo "${_am_result}" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+printf "%s\n" "${_am_result}" >&6; }
 
 # Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
+if test ${enable_dependency_tracking+y}
+then :
   enableval=$enable_dependency_tracking;
 fi
 
@@ -4579,11 +5218,12 @@ fi
 
 depcc="$CC"   am_compiler_list=
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
@@ -4595,290 +5235,113 @@ else
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
   cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-       continue
-      else
-       break
-      fi
-      ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
-$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
-if ${ac_cv_prog_cc_c99+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c99=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <stdio.h>
-
-// Check varargs macros.  These examples are taken from C99 6.10.3.5.
-#define debug(...) fprintf (stderr, __VA_ARGS__)
-#define showlist(...) puts (#__VA_ARGS__)
-#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
-static void
-test_varargs_macros (void)
-{
-  int x = 1234;
-  int y = 5678;
-  debug ("Flag");
-  debug ("X = %d\n", x);
-  showlist (The first, second, and third items.);
-  report (x>y, "x is %d but y is %d", x, y);
-}
-
-// Check long long types.
-#define BIG64 18446744073709551615ull
-#define BIG32 4294967295ul
-#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
-#if !BIG_OK
-  your preprocessor is broken;
-#endif
-#if BIG_OK
-#else
-  your preprocessor is broken;
-#endif
-static long long int bignum = -9223372036854775807LL;
-static unsigned long long int ubignum = BIG64;
-
-struct incomplete_array
-{
-  int datasize;
-  double data[];
-};
-
-struct named_init {
-  int number;
-  const wchar_t *name;
-  double average;
-};
-
-typedef const char *ccp;
-
-static inline int
-test_restrict (ccp restrict text)
-{
-  // See if C++-style comments work.
-  // Iterate through items via the restricted pointer.
-  // Also check for declarations in for loops.
-  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
-    continue;
-  return 0;
-}
-
-// Check varargs and va_copy.
-static void
-test_varargs (const char *format, ...)
-{
-  va_list args;
-  va_start (args, format);
-  va_list args_copy;
-  va_copy (args_copy, args);
-
-  const char *str;
-  int number;
-  float fnumber;
-
-  while (*format)
-    {
-      switch (*format++)
-       {
-       case 's': // string
-         str = va_arg (args_copy, const char *);
-         break;
-       case 'd': // int
-         number = va_arg (args_copy, int);
-         break;
-       case 'f': // float
-         fnumber = va_arg (args_copy, double);
-         break;
-       default:
-         break;
-       }
-    }
-  va_end (args_copy);
-  va_end (args);
-}
-
-int
-main ()
-{
-
-  // Check bool.
-  _Bool success = false;
-
-  // Check restrict.
-  if (test_restrict ("String literal") == 0)
-    success = true;
-  char *restrict newvar = "Another string";
-
-  // Check varargs.
-  test_varargs ("s, d' f .", "string", 65, 34.234);
-  test_varargs_macros ();
-
-  // Check flexible array members.
-  struct incomplete_array *ia =
-    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
-  ia->datasize = 10;
-  for (int i = 0; i < ia->datasize; ++i)
-    ia->data[i] = i * 1.234;
-
-  // Check named initializers.
-  struct named_init ni = {
-    .number = 34,
-    .name = L"Test wide string",
-    .average = 543.34343,
-  };
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
 
-  ni.number = 58;
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
 
-  int dynamic_array[ni.number];
-  dynamic_array[ni.number - 1] = 543;
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-  // work around unused variable warnings
-  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
-         || dynamic_array[ni.number - 1] != 543);
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
 
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c99=$ac_arg
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
 fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c99" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
 
 fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c99" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c99"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
-$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c99" != xno; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
 fi
 
 
@@ -4888,40 +5351,36 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+  if test ${ac_cv_prog_CPP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+      # Double quotes because $CC needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
     do
       ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
   # Use a header file that comes with gcc, so configuring glibc
   # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include <limits.h>
                     Syntax error
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
 
-else
+else $as_nop
   # Broken: fails on valid input.
 continue
 fi
@@ -4933,10 +5392,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
   # Broken: success on invalid input.
 continue
-else
+else $as_nop
   # Passes both tests.
 ac_preproc_ok=:
 break
@@ -4946,7 +5406,8 @@ rm -f conftest.err conftest.i conftest.$ac_ext
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+if $ac_preproc_ok
+then :
   break
 fi
 
@@ -4958,29 +5419,24 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
   # Use a header file that comes with gcc, so configuring glibc
   # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include <limits.h>
                     Syntax error
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
 
-else
+else $as_nop
   # Broken: fails on valid input.
 continue
 fi
@@ -4992,10 +5448,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext
 /* end confdefs.h.  */
 #include <ac_nonexistent.h>
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
   # Broken: success on invalid input.
 continue
-else
+else $as_nop
   # Passes both tests.
 ac_preproc_ok=:
 break
@@ -5005,11 +5462,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+if $ac_preproc_ok
+then :
 
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+  { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
 See \`config.log' for more details" "$LINENO" 5; }
 fi
@@ -5021,326 +5479,175 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
 do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
+  if test $ac_cache; then
+    ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+    if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+      printf "%s\n" "#define $ac_item 1" >> confdefs.h
     fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    ac_header= ac_cache=
+  elif test $ac_header; then
+    ac_cache=$ac_item
+  else
+    ac_header=$ac_item
   fi
-else
-  ac_cv_path_GREP=$GREP
-fi
+done
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
 
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
 
-   fi
+
+
+
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
+
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+
+
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test ${ac_cv_safe_to_define___extensions__+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
 
+#         define __EXTENSIONS__ 1
+          $ac_includes_default
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_safe_to_define___extensions__=yes
+else $as_nop
+  ac_cv_safe_to_define___extensions__=no
 fi
-rm -f conftest*
-
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; }
 
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
+printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; }
+if test ${ac_cv_should_define__xopen_source+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_should_define__xopen_source=no
+    if test $ac_cv_header_wchar_h = yes
+then :
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
 
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
+          #include <wchar.h>
+          mbstate_t x;
+int
+main (void)
+{
 
-fi
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-                  (('a' <= (c) && (c) <= 'i') \
-                    || ('j' <= (c) && (c) <= 'r') \
-                    || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
 
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+            #define _XOPEN_SOURCE 500
+            #include <wchar.h>
+            mbstate_t x;
 int
-main ()
+main (void)
 {
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-       || toupper (i) != TOUPPER (i))
-      return 2;
+
+  ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_should_define__xopen_source=yes
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
+printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
 
-fi
+  printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h
 
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-                 inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+  printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h
 
-fi
+  printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h
 
-done
+  printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
 
+  printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h
 
+  printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h
 
-  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
-if test "x$ac_cv_header_minix_config_h" = xyes; then :
-  MINIX=yes
-else
-  MINIX=
-fi
+  printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
 
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
 
-  if test "$MINIX" = yes; then
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
 
-$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
 
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
 
-$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
 
+  printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
 
-$as_echo "#define _MINIX 1" >>confdefs.h
+  printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
 
-  fi
+  printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h
 
+  if test $ac_cv_header_minix_config_h = yes
+then :
+  MINIX=yes
+    printf "%s\n" "#define _MINIX 1" >>confdefs.h
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
-$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if ${ac_cv_safe_to_define___extensions__+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h
 
-#         define __EXTENSIONS__ 1
-          $ac_includes_default
-int
-main ()
-{
+    printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_safe_to_define___extensions__=yes
-else
-  ac_cv_safe_to_define___extensions__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else $as_nop
+  MINIX=
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
-$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
-
-  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+  if test $ac_cv_safe_to_define___extensions__ = yes
+then :
+  printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h
 
-  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
-  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+fi
+  if test $ac_cv_should_define__xopen_source = yes
+then :
+  printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h
 
+fi
 
 enable_win32_dll=yes
 
@@ -5349,11 +5656,12 @@ case $host in
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
 set dummy ${ac_tool_prefix}as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AS+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$AS"; then
   ac_cv_prog_AS="$AS" # Let the user override the test.
 else
@@ -5361,11 +5669,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_AS="${ac_tool_prefix}as"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5376,11 +5688,11 @@ fi
 fi
 AS=$ac_cv_prog_AS
 if test -n "$AS"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
-$as_echo "$AS" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+printf "%s\n" "$AS" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -5389,11 +5701,12 @@ if test -z "$ac_cv_prog_AS"; then
   ac_ct_AS=$AS
   # Extract the first word of "as", so it can be a program name with args.
 set dummy as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AS+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_AS"; then
   ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
 else
@@ -5401,11 +5714,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AS="as"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5416,11 +5733,11 @@ fi
 fi
 ac_ct_AS=$ac_cv_prog_ac_ct_AS
 if test -n "$ac_ct_AS"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
-$as_echo "$ac_ct_AS" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+printf "%s\n" "$ac_ct_AS" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_AS" = x; then
@@ -5428,8 +5745,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     AS=$ac_ct_AS
@@ -5441,11 +5758,12 @@ fi
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
 set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DLLTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$DLLTOOL"; then
   ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
 else
@@ -5453,11 +5771,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5468,11 +5790,11 @@ fi
 fi
 DLLTOOL=$ac_cv_prog_DLLTOOL
 if test -n "$DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+printf "%s\n" "$DLLTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -5481,11 +5803,12 @@ if test -z "$ac_cv_prog_DLLTOOL"; then
   ac_ct_DLLTOOL=$DLLTOOL
   # Extract the first word of "dlltool", so it can be a program name with args.
 set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_DLLTOOL"; then
   ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
 else
@@ -5493,11 +5816,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5508,11 +5835,11 @@ fi
 fi
 ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
 if test -n "$ac_ct_DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+printf "%s\n" "$ac_ct_DLLTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_DLLTOOL" = x; then
@@ -5520,8 +5847,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     DLLTOOL=$ac_ct_DLLTOOL
@@ -5533,11 +5860,12 @@ fi
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OBJDUMP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$OBJDUMP"; then
   ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
 else
@@ -5545,11 +5873,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5560,11 +5892,11 @@ fi
 fi
 OBJDUMP=$ac_cv_prog_OBJDUMP
 if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+printf "%s\n" "$OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -5573,11 +5905,12 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
   ac_ct_OBJDUMP=$OBJDUMP
   # Extract the first word of "objdump", so it can be a program name with args.
 set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_OBJDUMP"; then
   ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
 else
@@ -5585,11 +5918,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5600,11 +5937,11 @@ fi
 fi
 ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
 if test -n "$ac_ct_OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_OBJDUMP" = x; then
@@ -5612,8 +5949,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     OBJDUMP=$ac_ct_OBJDUMP
@@ -5647,8 +5984,8 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 case `pwd` in
   *\ * | *\    *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
 esac
 
 
@@ -5668,6 +6005,7 @@ macro_revision='2.4.6'
 
 
 
+
 ltmain=$ac_aux_dir/ltmain.sh
 
 # Backslashify metacharacters that are still active within
@@ -5691,8 +6029,8 @@ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
-$as_echo_n "checking how to print strings... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+printf %s "checking how to print strings... " >&6; }
 # Test print first, because it will be a builtin if present.
 if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
    test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
@@ -5718,12 +6056,12 @@ func_echo_all ()
 }
 
 case $ECHO in
-  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
-$as_echo "printf" >&6; } ;;
-  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
-$as_echo "print -r" >&6; } ;;
-  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
-$as_echo "cat" >&6; } ;;
+  printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+printf "%s\n" "printf" >&6; } ;;
+  print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+printf "%s\n" "print -r" >&6; } ;;
+  *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+printf "%s\n" "cat" >&6; } ;;
 esac
 
 
@@ -5739,11 +6077,12 @@ esac
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+printf %s "checking for a sed that does not truncate output... " >&6; }
+if test ${ac_cv_path_SED+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
      for ac_i in 1 2 3 4 5 6 7; do
        ac_script="$ac_script$as_nl$ac_script"
@@ -5757,10 +6096,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in sed gsed
+   do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
       as_fn_executable_p "$ac_path_SED" || continue
 # Check for GNU ac_path_SED and select it if it is found.
   # Check for GNU $ac_path_SED
@@ -5769,13 +6113,13 @@ case `"$ac_path_SED" --version 2>&1` in
   ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
 *)
   ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
+  printf %s 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
+    printf "%s\n" '' >> "conftest.nl"
     "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
     as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -5803,8 +6147,8 @@ else
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+printf "%s\n" "$ac_cv_path_SED" >&6; }
  SED="$ac_cv_path_SED"
   rm -f conftest.sed
 
@@ -5821,11 +6165,154 @@ Xsed="$SED -e 1s/^X//"
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
-$as_echo_n "checking for fgrep... " >&6; }
-if ${ac_cv_path_FGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in grep ggrep
+   do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  printf %s 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    printf "%s\n" 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in egrep
+   do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  printf %s 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    printf "%s\n" 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+printf %s "checking for fgrep... " >&6; }
+if test ${ac_cv_path_FGREP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
    then ac_cv_path_FGREP="$GREP -F"
    else
@@ -5836,10 +6323,15 @@ else
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in fgrep; do
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in fgrep
+   do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext"
       as_fn_executable_p "$ac_path_FGREP" || continue
 # Check for GNU ac_path_FGREP and select it if it is found.
   # Check for GNU $ac_path_FGREP
@@ -5848,13 +6340,13 @@ case `"$ac_path_FGREP" --version 2>&1` in
   ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
 *)
   ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
+  printf %s 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    $as_echo 'FGREP' >> "conftest.nl"
+    printf "%s\n" 'FGREP' >> "conftest.nl"
     "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
     as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -5883,8 +6375,8 @@ fi
 
    fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
-$as_echo "$ac_cv_path_FGREP" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+printf "%s\n" "$ac_cv_path_FGREP" >&6; }
  FGREP="$ac_cv_path_FGREP"
 
 
@@ -5909,17 +6401,18 @@ test -z "$GREP" && GREP=grep
 
 
 # Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
+if test ${with_gnu_ld+y}
+then :
   withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
-else
+else $as_nop
   with_gnu_ld=no
 fi
 
 ac_prog=ld
 if test yes = "$GCC"; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return, which upsets mingw
@@ -5948,15 +6441,16 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     ;;
   esac
 elif test yes = "$with_gnu_ld"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
 fi
-if ${lt_cv_path_LD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${lt_cv_path_LD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -z "$LD"; then
   lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
@@ -5985,18 +6479,19 @@ fi
 
 LD=$lt_cv_path_LD
 if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${lt_cv_prog_gnu_ld+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${lt_cv_prog_gnu_ld+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
 case `$LD -v 2>&1 </dev/null` in
 *GNU* | *'with BFD'*)
@@ -6007,8 +6502,8 @@ case `$LD -v 2>&1 </dev/null` in
   ;;
 esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
-$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
@@ -6019,11 +6514,12 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
-$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if ${lt_cv_path_NM+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test ${lt_cv_path_NM+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$NM"; then
   # Let the user override the test.
   lt_cv_path_NM=$NM
@@ -6073,8 +6569,8 @@ else
   : ${lt_cv_path_NM=no}
 fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
-$as_echo "$lt_cv_path_NM" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+printf "%s\n" "$lt_cv_path_NM" >&6; }
 if test no != "$lt_cv_path_NM"; then
   NM=$lt_cv_path_NM
 else
@@ -6087,11 +6583,12 @@ else
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DUMPBIN+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DUMPBIN+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$DUMPBIN"; then
   ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
 else
@@ -6099,11 +6596,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6114,11 +6615,11 @@ fi
 fi
 DUMPBIN=$ac_cv_prog_DUMPBIN
 if test -n "$DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
-$as_echo "$DUMPBIN" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+printf "%s\n" "$DUMPBIN" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -6131,11 +6632,12 @@ if test -z "$DUMPBIN"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DUMPBIN+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_DUMPBIN"; then
   ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
 else
@@ -6143,11 +6645,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6158,11 +6664,11 @@ fi
 fi
 ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
 if test -n "$ac_ct_DUMPBIN"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
-$as_echo "$ac_ct_DUMPBIN" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+printf "%s\n" "$ac_ct_DUMPBIN" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -6174,8 +6680,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     DUMPBIN=$ac_ct_DUMPBIN
@@ -6203,11 +6709,12 @@ test -z "$NM" && NM=nm
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
-$as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if ${lt_cv_nm_interface+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+printf %s "checking the name lister ($NM) interface... " >&6; }
+if test ${lt_cv_nm_interface+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
   (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
@@ -6223,26 +6730,27 @@ else
   fi
   rm -f conftest*
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
-$as_echo "$lt_cv_nm_interface" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+printf "%s\n" "$lt_cv_nm_interface" >&6; }
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
 LN_S=$as_ln_s
 if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
 fi
 
 # find the maximum length of command line arguments
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
-$as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if ${lt_cv_sys_max_cmd_len+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+printf %s "checking the maximum length of command line arguments... " >&6; }
+if test ${lt_cv_sys_max_cmd_len+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
     i=0
   teststring=ABCD
 
@@ -6369,11 +6877,11 @@ else
 fi
 
 if test -n "$lt_cv_sys_max_cmd_len"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
-$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
+printf "%s\n" "none" >&6; }
 fi
 max_cmd_len=$lt_cv_sys_max_cmd_len
 
@@ -6417,11 +6925,12 @@ esac
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
-$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
-if ${lt_cv_to_host_file_cmd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+printf %s "checking how to convert $build file names to $host format... " >&6; }
+if test ${lt_cv_to_host_file_cmd+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $host in
   *-*-mingw* )
     case $build in
@@ -6457,18 +6966,19 @@ esac
 fi
 
 to_host_file_cmd=$lt_cv_to_host_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
-$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; }
 
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
-$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
-if ${lt_cv_to_tool_file_cmd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+printf %s "checking how to convert $build file names to toolchain format... " >&6; }
+if test ${lt_cv_to_tool_file_cmd+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   #assume ordinary cross tools, or native build.
 lt_cv_to_tool_file_cmd=func_convert_file_noop
 case $host in
@@ -6484,22 +6994,23 @@ esac
 fi
 
 to_tool_file_cmd=$lt_cv_to_tool_file_cmd
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
-$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; }
 
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
-$as_echo_n "checking for $LD option to reload object files... " >&6; }
-if ${lt_cv_ld_reload_flag+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+printf %s "checking for $LD option to reload object files... " >&6; }
+if test ${lt_cv_ld_reload_flag+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_ld_reload_flag='-r'
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
-$as_echo "$lt_cv_ld_reload_flag" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+printf "%s\n" "$lt_cv_ld_reload_flag" >&6; }
 reload_flag=$lt_cv_ld_reload_flag
 case $reload_flag in
 "" | " "*) ;;
@@ -6532,11 +7043,12 @@ esac
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OBJDUMP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$OBJDUMP"; then
   ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
 else
@@ -6544,11 +7056,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6559,11 +7075,11 @@ fi
 fi
 OBJDUMP=$ac_cv_prog_OBJDUMP
 if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+printf "%s\n" "$OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -6572,11 +7088,12 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
   ac_ct_OBJDUMP=$OBJDUMP
   # Extract the first word of "objdump", so it can be a program name with args.
 set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_OBJDUMP"; then
   ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
 else
@@ -6584,11 +7101,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6599,11 +7120,11 @@ fi
 fi
 ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
 if test -n "$ac_ct_OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_OBJDUMP" = x; then
@@ -6611,8 +7132,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     OBJDUMP=$ac_ct_OBJDUMP
@@ -6628,11 +7149,12 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
-$as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if ${lt_cv_deplibs_check_method+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+printf %s "checking how to recognize dependent libraries... " >&6; }
+if test ${lt_cv_deplibs_check_method+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_file_magic_cmd='$MAGIC_CMD'
 lt_cv_file_magic_test_file=
 lt_cv_deplibs_check_method='unknown'
@@ -6828,8 +7350,8 @@ os2*)
 esac
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
-$as_echo "$lt_cv_deplibs_check_method" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+printf "%s\n" "$lt_cv_deplibs_check_method" >&6; }
 
 file_magic_glob=
 want_nocaseglob=no
@@ -6873,11 +7395,12 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
 set dummy ${ac_tool_prefix}dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DLLTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$DLLTOOL"; then
   ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
 else
@@ -6885,11 +7408,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6900,11 +7427,11 @@ fi
 fi
 DLLTOOL=$ac_cv_prog_DLLTOOL
 if test -n "$DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+printf "%s\n" "$DLLTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -6913,11 +7440,12 @@ if test -z "$ac_cv_prog_DLLTOOL"; then
   ac_ct_DLLTOOL=$DLLTOOL
   # Extract the first word of "dlltool", so it can be a program name with args.
 set dummy dlltool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_DLLTOOL"; then
   ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
 else
@@ -6925,11 +7453,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -6940,11 +7472,11 @@ fi
 fi
 ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
 if test -n "$ac_ct_DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+printf "%s\n" "$ac_ct_DLLTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_DLLTOOL" = x; then
@@ -6952,8 +7484,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     DLLTOOL=$ac_ct_DLLTOOL
@@ -6970,11 +7502,12 @@ test -z "$DLLTOOL" && DLLTOOL=dlltool
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
-$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
-if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+printf %s "checking how to associate runtime and link libraries... " >&6; }
+if test ${lt_cv_sharedlib_from_linklib_cmd+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_sharedlib_from_linklib_cmd='unknown'
 
 case $host_os in
@@ -6997,8 +7530,8 @@ cygwin* | mingw* | pw32* | cegcc*)
 esac
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
-$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
 sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
 test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
 
@@ -7013,11 +7546,12 @@ if test -n "$ac_tool_prefix"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$AR"; then
   ac_cv_prog_AR="$AR" # Let the user override the test.
 else
@@ -7025,11 +7559,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7040,11 +7578,11 @@ fi
 fi
 AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7057,11 +7595,12 @@ if test -z "$AR"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_AR"; then
   ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
 else
@@ -7069,11 +7608,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7084,11 +7627,11 @@ fi
 fi
 ac_ct_AR=$ac_cv_prog_ac_ct_AR
 if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7100,8 +7643,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     AR=$ac_ct_AR
@@ -7121,30 +7664,32 @@ fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
-$as_echo_n "checking for archiver @FILE support... " >&6; }
-if ${lt_cv_ar_at_file+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+printf %s "checking for archiver @FILE support... " >&6; }
+if test ${lt_cv_ar_at_file+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_ar_at_file=no
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   echo conftest.$ac_objext > conftest.lst
       lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
       { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
   (eval $lt_ar_try) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
       if test 0 -eq "$ac_status"; then
        # Ensure the archiver fails upon bogus file names.
@@ -7152,7 +7697,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
   (eval $lt_ar_try) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
        if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
@@ -7161,11 +7706,11 @@ if ac_fn_c_try_compile "$LINENO"; then :
       rm -f conftest.* libconftest.a
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
-$as_echo "$lt_cv_ar_at_file" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+printf "%s\n" "$lt_cv_ar_at_file" >&6; }
 
 if test no = "$lt_cv_ar_at_file"; then
   archiver_list_spec=
@@ -7182,11 +7727,12 @@ fi
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$STRIP"; then
   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 else
@@ -7194,11 +7740,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7209,11 +7759,11 @@ fi
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7222,11 +7772,12 @@ if test -z "$ac_cv_prog_STRIP"; then
   ac_ct_STRIP=$STRIP
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_STRIP"; then
   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 else
@@ -7234,11 +7785,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7249,11 +7804,11 @@ fi
 fi
 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_STRIP" = x; then
@@ -7261,8 +7816,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     STRIP=$ac_ct_STRIP
@@ -7281,11 +7836,12 @@ test -z "$STRIP" && STRIP=:
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 else
@@ -7293,11 +7849,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7308,11 +7868,11 @@ fi
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7321,11 +7881,12 @@ if test -z "$ac_cv_prog_RANLIB"; then
   ac_ct_RANLIB=$RANLIB
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_RANLIB"; then
   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
 else
@@ -7333,11 +7894,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7348,11 +7913,11 @@ fi
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_RANLIB" = x; then
@@ -7360,8 +7925,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     RANLIB=$ac_ct_RANLIB
@@ -7450,11 +8015,12 @@ compiler=$CC
 
 
 # Check for command to grab the raw symbol name followed by C symbol from nm.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
-$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if ${lt_cv_sys_global_symbol_pipe+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+printf %s "checking command to parse $NM output from $compiler object... " >&6; }
+if test ${lt_cv_sys_global_symbol_pipe+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
 # These are sane defaults that work on at least a few old systems.
 # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
@@ -7606,7 +8172,7 @@ _LT_EOF
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     # Now try to grab the symbols.
     nlist=conftest.nm
@@ -7679,7 +8245,7 @@ _LT_EOF
          if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s conftest$ac_exeext; then
            pipe_works=yes
          fi
@@ -7714,11 +8280,11 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then
   lt_cv_sys_global_symbol_to_cdecl=
 fi
 if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
-$as_echo "failed" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+printf "%s\n" "failed" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
-$as_echo "ok" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+printf "%s\n" "ok" >&6; }
 fi
 
 # Response file support.
@@ -7764,13 +8330,14 @@ fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
-$as_echo_n "checking for sysroot... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+printf %s "checking for sysroot... " >&6; }
 
 # Check whether --with-sysroot was given.
-if test "${with_sysroot+set}" = set; then :
+if test ${with_sysroot+y}
+then :
   withval=$with_sysroot;
-else
+else $as_nop
   with_sysroot=no
 fi
 
@@ -7788,24 +8355,25 @@ case $with_sysroot in #(
  no|'')
    ;; #(
  *)
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
-$as_echo "$with_sysroot" >&6; }
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+printf "%s\n" "$with_sysroot" >&6; }
    as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
    ;;
 esac
 
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
-$as_echo "${lt_sysroot:-no}" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+printf "%s\n" "${lt_sysroot:-no}" >&6; }
 
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
-$as_echo_n "checking for a working dd... " >&6; }
-if ${ac_cv_path_lt_DD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+printf %s "checking for a working dd... " >&6; }
+if test ${ac_cv_path_lt_DD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   printf 0123456789abcdef0123456789abcdef >conftest.i
 cat conftest.i conftest.i >conftest2.i
 : ${lt_DD:=$DD}
@@ -7816,10 +8384,15 @@ if test -z "$lt_DD"; then
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in dd; do
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in dd
+   do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+      ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext"
       as_fn_executable_p "$ac_path_lt_DD" || continue
 if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
   cmp -s conftest.i conftest.out \
@@ -7839,15 +8412,16 @@ fi
 
 rm -f conftest.i conftest2.i conftest.out
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
-$as_echo "$ac_cv_path_lt_DD" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+printf "%s\n" "$ac_cv_path_lt_DD" >&6; }
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
-$as_echo_n "checking how to truncate binary pipes... " >&6; }
-if ${lt_cv_truncate_bin+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+printf %s "checking how to truncate binary pipes... " >&6; }
+if test ${lt_cv_truncate_bin+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   printf 0123456789abcdef0123456789abcdef >conftest.i
 cat conftest.i conftest.i >conftest2.i
 lt_cv_truncate_bin=
@@ -7858,8 +8432,8 @@ fi
 rm -f conftest.i conftest2.i conftest.out
 test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
-$as_echo "$lt_cv_truncate_bin" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+printf "%s\n" "$lt_cv_truncate_bin" >&6; }
 
 
 
@@ -7882,7 +8456,8 @@ func_cc_basename ()
 }
 
 # Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then :
+if test ${enable_libtool_lock+y}
+then :
   enableval=$enable_libtool_lock;
 fi
 
@@ -7898,7 +8473,7 @@ ia64-*-hpux*)
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
@@ -7918,7 +8493,7 @@ ia64-*-hpux*)
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     if test yes = "$lt_cv_prog_gnu_ld"; then
       case `/usr/bin/file conftest.$ac_objext` in
@@ -7956,7 +8531,7 @@ mips64*-*linux*)
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     emul=elf
     case `/usr/bin/file conftest.$ac_objext` in
@@ -7997,7 +8572,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.o` in
       *32-bit*)
@@ -8060,11 +8635,12 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
   SAVE_CFLAGS=$CFLAGS
   CFLAGS="$CFLAGS -belf"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
-$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if ${lt_cv_cc_needs_belf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+printf %s "checking whether the C compiler needs -belf... " >&6; }
+if test ${lt_cv_cc_needs_belf+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -8075,19 +8651,20 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   lt_cv_cc_needs_belf=yes
-else
+else $as_nop
   lt_cv_cc_needs_belf=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -8096,8 +8673,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
-$as_echo "$lt_cv_cc_needs_belf" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
   if test yes != "$lt_cv_cc_needs_belf"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
     CFLAGS=$SAVE_CFLAGS
@@ -8110,7 +8687,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
@@ -8147,11 +8724,12 @@ need_locks=$enable_libtool_lock
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
 set dummy ${ac_tool_prefix}mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_MANIFEST_TOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$MANIFEST_TOOL"; then
   ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
 else
@@ -8159,11 +8737,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8174,11 +8756,11 @@ fi
 fi
 MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
 if test -n "$MANIFEST_TOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
-$as_echo "$MANIFEST_TOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+printf "%s\n" "$MANIFEST_TOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8187,11 +8769,12 @@ if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
   ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
   # Extract the first word of "mt", so it can be a program name with args.
 set dummy mt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_MANIFEST_TOOL"; then
   ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
 else
@@ -8199,11 +8782,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8214,11 +8801,11 @@ fi
 fi
 ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
 if test -n "$ac_ct_MANIFEST_TOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
-$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_MANIFEST_TOOL" = x; then
@@ -8226,8 +8813,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
@@ -8237,11 +8824,12 @@ else
 fi
 
 test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
-$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
-if ${lt_cv_path_mainfest_tool+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if test ${lt_cv_path_mainfest_tool+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_path_mainfest_tool=no
   echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
   $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
@@ -8251,8 +8839,8 @@ else
   fi
   rm -f conftest*
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
-$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; }
 if test yes != "$lt_cv_path_mainfest_tool"; then
   MANIFEST_TOOL=:
 fi
@@ -8267,11 +8855,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
 set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DSYMUTIL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DSYMUTIL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$DSYMUTIL"; then
   ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
 else
@@ -8279,11 +8868,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8294,11 +8887,11 @@ fi
 fi
 DSYMUTIL=$ac_cv_prog_DSYMUTIL
 if test -n "$DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
-$as_echo "$DSYMUTIL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+printf "%s\n" "$DSYMUTIL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8307,11 +8900,12 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then
   ac_ct_DSYMUTIL=$DSYMUTIL
   # Extract the first word of "dsymutil", so it can be a program name with args.
 set dummy dsymutil; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DSYMUTIL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_DSYMUTIL"; then
   ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
 else
@@ -8319,11 +8913,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8334,11 +8932,11 @@ fi
 fi
 ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
 if test -n "$ac_ct_DSYMUTIL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
-$as_echo "$ac_ct_DSYMUTIL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+printf "%s\n" "$ac_ct_DSYMUTIL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_DSYMUTIL" = x; then
@@ -8346,8 +8944,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     DSYMUTIL=$ac_ct_DSYMUTIL
@@ -8359,11 +8957,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
 set dummy ${ac_tool_prefix}nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NMEDIT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_NMEDIT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$NMEDIT"; then
   ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
 else
@@ -8371,11 +8970,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8386,11 +8989,11 @@ fi
 fi
 NMEDIT=$ac_cv_prog_NMEDIT
 if test -n "$NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
-$as_echo "$NMEDIT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+printf "%s\n" "$NMEDIT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8399,11 +9002,12 @@ if test -z "$ac_cv_prog_NMEDIT"; then
   ac_ct_NMEDIT=$NMEDIT
   # Extract the first word of "nmedit", so it can be a program name with args.
 set dummy nmedit; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_NMEDIT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_NMEDIT"; then
   ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
 else
@@ -8411,11 +9015,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8426,11 +9034,11 @@ fi
 fi
 ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
 if test -n "$ac_ct_NMEDIT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
-$as_echo "$ac_ct_NMEDIT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+printf "%s\n" "$ac_ct_NMEDIT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_NMEDIT" = x; then
@@ -8438,8 +9046,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     NMEDIT=$ac_ct_NMEDIT
@@ -8451,11 +9059,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
 set dummy ${ac_tool_prefix}lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LIPO+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LIPO+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$LIPO"; then
   ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
 else
@@ -8463,11 +9072,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8478,11 +9091,11 @@ fi
 fi
 LIPO=$ac_cv_prog_LIPO
 if test -n "$LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
-$as_echo "$LIPO" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+printf "%s\n" "$LIPO" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8491,11 +9104,12 @@ if test -z "$ac_cv_prog_LIPO"; then
   ac_ct_LIPO=$LIPO
   # Extract the first word of "lipo", so it can be a program name with args.
 set dummy lipo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_LIPO+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_LIPO"; then
   ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
 else
@@ -8503,11 +9117,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_LIPO="lipo"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8518,11 +9136,11 @@ fi
 fi
 ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
 if test -n "$ac_ct_LIPO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
-$as_echo "$ac_ct_LIPO" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+printf "%s\n" "$ac_ct_LIPO" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_LIPO" = x; then
@@ -8530,8 +9148,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     LIPO=$ac_ct_LIPO
@@ -8543,11 +9161,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
 set dummy ${ac_tool_prefix}otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$OTOOL"; then
   ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
 else
@@ -8555,11 +9174,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8570,11 +9193,11 @@ fi
 fi
 OTOOL=$ac_cv_prog_OTOOL
 if test -n "$OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
-$as_echo "$OTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+printf "%s\n" "$OTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8583,11 +9206,12 @@ if test -z "$ac_cv_prog_OTOOL"; then
   ac_ct_OTOOL=$OTOOL
   # Extract the first word of "otool", so it can be a program name with args.
 set dummy otool; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_OTOOL"; then
   ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
 else
@@ -8595,11 +9219,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL="otool"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8610,11 +9238,11 @@ fi
 fi
 ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
 if test -n "$ac_ct_OTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
-$as_echo "$ac_ct_OTOOL" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+printf "%s\n" "$ac_ct_OTOOL" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_OTOOL" = x; then
@@ -8622,8 +9250,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     OTOOL=$ac_ct_OTOOL
@@ -8635,11 +9263,12 @@ fi
     if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
 set dummy ${ac_tool_prefix}otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OTOOL64+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL64+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$OTOOL64"; then
   ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
 else
@@ -8647,11 +9276,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8662,11 +9295,11 @@ fi
 fi
 OTOOL64=$ac_cv_prog_OTOOL64
 if test -n "$OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
-$as_echo "$OTOOL64" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+printf "%s\n" "$OTOOL64" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -8675,11 +9308,12 @@ if test -z "$ac_cv_prog_OTOOL64"; then
   ac_ct_OTOOL64=$OTOOL64
   # Extract the first word of "otool64", so it can be a program name with args.
 set dummy otool64; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL64+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_OTOOL64"; then
   ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
 else
@@ -8687,11 +9321,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL64="otool64"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -8702,11 +9340,11 @@ fi
 fi
 ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
 if test -n "$ac_ct_OTOOL64"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
-$as_echo "$ac_ct_OTOOL64" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+printf "%s\n" "$ac_ct_OTOOL64" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_OTOOL64" = x; then
@@ -8714,8 +9352,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     OTOOL64=$ac_ct_OTOOL64
@@ -8750,11 +9388,12 @@ fi
 
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
-$as_echo_n "checking for -single_module linker flag... " >&6; }
-if ${lt_cv_apple_cc_single_mod+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+printf %s "checking for -single_module linker flag... " >&6; }
+if test ${lt_cv_apple_cc_single_mod+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_apple_cc_single_mod=no
       if test -z "$LT_MULTI_MODULE"; then
        # By default we will add the -single_module flag. You can override
@@ -8783,14 +9422,15 @@ else
        rm -f conftest.*
       fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
-$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
-$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if ${lt_cv_ld_exported_symbols_list+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+printf %s "checking for -exported_symbols_list linker flag... " >&6; }
+if test ${lt_cv_ld_exported_symbols_list+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_ld_exported_symbols_list=no
       save_LDFLAGS=$LDFLAGS
       echo "_main" > conftest.sym
@@ -8799,31 +9439,33 @@ else
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   lt_cv_ld_exported_symbols_list=yes
-else
+else $as_nop
   lt_cv_ld_exported_symbols_list=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
        LDFLAGS=$save_LDFLAGS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
-$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
-$as_echo_n "checking for -force_load linker flag... " >&6; }
-if ${lt_cv_ld_force_load+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+printf %s "checking for -force_load linker flag... " >&6; }
+if test ${lt_cv_ld_force_load+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_ld_force_load=no
       cat > conftest.c << _LT_EOF
 int forced_loaded() { return 2;}
@@ -8851,8 +9493,8 @@ _LT_EOF
         rm -rf conftest.dSYM
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
-$as_echo "$lt_cv_ld_force_load" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+printf "%s\n" "$lt_cv_ld_force_load" >&6; }
     case $host_os in
     rhapsody* | darwin1.[012])
       _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
@@ -8863,11 +9505,11 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
       # to the OS version, if on x86, and 10.4, the deployment
       # target defaults to 10.4. Don't you love it?
       case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
-       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+       10.0,*86*-darwin8*|10.0,*-darwin[912]*)
          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
        10.[012][,.]*)
          _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
-       10.*)
+       10.*|11.*)
          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
@@ -8923,19 +9565,14 @@ func_munge_path_list ()
     esac
 }
 
-for ac_header in dlfcn.h
-do :
-  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
 "
-if test "x$ac_cv_header_dlfcn_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DLFCN_H 1
-_ACEOF
+if test "x$ac_cv_header_dlfcn_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h
 
 fi
 
-done
-
 
 
 
@@ -8949,7 +9586,8 @@ done
 
 
             # Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
+if test ${enable_shared+y}
+then :
   enableval=$enable_shared; p=${PACKAGE-default}
     case $enableval in
     yes) enable_shared=yes ;;
@@ -8967,7 +9605,7 @@ if test "${enable_shared+set}" = set; then :
       IFS=$lt_save_ifs
       ;;
     esac
-else
+else $as_nop
   enable_shared=yes
 fi
 
@@ -8980,7 +9618,8 @@ fi
 
 
   # Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then :
+if test ${enable_static+y}
+then :
   enableval=$enable_static; p=${PACKAGE-default}
     case $enableval in
     yes) enable_static=yes ;;
@@ -8998,7 +9637,7 @@ if test "${enable_static+set}" = set; then :
       IFS=$lt_save_ifs
       ;;
     esac
-else
+else $as_nop
   enable_static=yes
 fi
 
@@ -9012,7 +9651,8 @@ fi
 
 
 # Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then :
+if test ${with_pic+y}
+then :
   withval=$with_pic; lt_p=${PACKAGE-default}
     case $withval in
     yes|no) pic_mode=$withval ;;
@@ -9029,7 +9669,7 @@ if test "${with_pic+set}" = set; then :
       IFS=$lt_save_ifs
       ;;
     esac
-else
+else $as_nop
   pic_mode=default
 fi
 
@@ -9041,7 +9681,8 @@ fi
 
 
   # Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then :
+if test ${enable_fast_install+y}
+then :
   enableval=$enable_fast_install; p=${PACKAGE-default}
     case $enableval in
     yes) enable_fast_install=yes ;;
@@ -9059,7 +9700,7 @@ if test "${enable_fast_install+set}" = set; then :
       IFS=$lt_save_ifs
       ;;
     esac
-else
+else $as_nop
   enable_fast_install=yes
 fi
 
@@ -9073,11 +9714,12 @@ fi
   shared_archive_member_spec=
 case $host,$enable_shared in
 power*-*-aix[5-9]*,yes)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
-$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+printf %s "checking which variant of shared library versioning to provide... " >&6; }
 
 # Check whether --with-aix-soname was given.
-if test "${with_aix_soname+set}" = set; then :
+if test ${with_aix_soname+y}
+then :
   withval=$with_aix_soname; case $withval in
     aix|svr4|both)
       ;;
@@ -9086,18 +9728,19 @@ if test "${with_aix_soname+set}" = set; then :
       ;;
     esac
     lt_cv_with_aix_soname=$with_aix_soname
-else
-  if ${lt_cv_with_aix_soname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  if test ${lt_cv_with_aix_soname+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_with_aix_soname=aix
 fi
 
     with_aix_soname=$lt_cv_with_aix_soname
 fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
-$as_echo "$with_aix_soname" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+printf "%s\n" "$with_aix_soname" >&6; }
   if test aix != "$with_aix_soname"; then
     # For the AIX way of multilib, we name the shared archive member
     # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
@@ -9179,11 +9822,12 @@ if test -n "${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
-$as_echo_n "checking for objdir... " >&6; }
-if ${lt_cv_objdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+printf %s "checking for objdir... " >&6; }
+if test ${lt_cv_objdir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   rm -f .libs 2>/dev/null
 mkdir .libs 2>/dev/null
 if test -d .libs; then
@@ -9194,17 +9838,15 @@ else
 fi
 rmdir .libs 2>/dev/null
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
-$as_echo "$lt_cv_objdir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+printf "%s\n" "$lt_cv_objdir" >&6; }
 objdir=$lt_cv_objdir
 
 
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define LT_OBJDIR "$lt_cv_objdir/"
-_ACEOF
+printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h
 
 
 
@@ -9250,11 +9892,12 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file
 case $deplibs_check_method in
 file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
-$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+printf %s "checking for ${ac_tool_prefix}file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
   lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
@@ -9303,11 +9946,11 @@ fi
 
 MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -9316,11 +9959,12 @@ fi
 
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
-$as_echo_n "checking for file... " >&6; }
-if ${lt_cv_path_MAGIC_CMD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+printf %s "checking for file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
   lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
 
 MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
-$as_echo "$MAGIC_CMD" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -9454,11 +10098,12 @@ if test yes = "$GCC"; then
     lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
   esac
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test ${lt_cv_prog_compiler_rtti_exceptions+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_rtti_exceptions=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
@@ -9489,8 +10134,8 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
 
 if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
     lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
@@ -9853,26 +10498,28 @@ case $host_os in
     ;;
 esac
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
-$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
-if ${lt_cv_prog_compiler_pic+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+printf %s "checking for $compiler option to produce PIC... " >&6; }
+if test ${lt_cv_prog_compiler_pic+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
-$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; }
 lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
 
 #
 # Check to make sure the PIC flag actually works.
 #
 if test -n "$lt_prog_compiler_pic"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if ${lt_cv_prog_compiler_pic_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test ${lt_cv_prog_compiler_pic_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_pic_works=no
    ac_outfile=conftest.$ac_objext
    echo "$lt_simple_compile_test_code" > conftest.$ac_ext
@@ -9903,8 +10550,8 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
-$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; }
 
 if test yes = "$lt_cv_prog_compiler_pic_works"; then
     case $lt_prog_compiler_pic in
 # Check to make sure the static flag actually works.
 #
 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if ${lt_cv_prog_compiler_static_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test ${lt_cv_prog_compiler_static_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_static_works=no
    save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
@@ -9960,8 +10608,8 @@ else
    LDFLAGS=$save_LDFLAGS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
-$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; }
 
 if test yes = "$lt_cv_prog_compiler_static_works"; then
     :
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_c_o=no
    $RM -r conftest 2>/dev/null
    mkdir conftest
@@ -10022,19 +10671,20 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
 
 
 
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
-$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if ${lt_cv_prog_compiler_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler_c_o=no
    $RM -r conftest 2>/dev/null
    mkdir conftest
@@ -10077,8 +10727,8 @@ else
    $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
-$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
 
 
 
@@ -10086,19 +10736,19 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 hard_links=nottested
 if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
   # do not overwrite the value of need_locks provided by the user
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
-$as_echo_n "checking if we can lock with hard links... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+printf %s "checking if we can lock with hard links... " >&6; }
   hard_links=yes
   $RM conftest*
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
   touch conftest.a
   ln conftest.a conftest.b 2>&5 || hard_links=no
   ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
-$as_echo "$hard_links" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+printf "%s\n" "$hard_links" >&6; }
   if test no = "$hard_links"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
-$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
     need_locks=warn
   fi
 else
@@ -10110,8 +10760,8 @@ fi
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
 
   runpath_var=
   allow_undefined_flag=
@@ -10669,21 +11319,23 @@ _LT_EOF
         if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
-  if ${lt_cv_aix_libpath_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${lt_cv_aix_libpath_+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
   lt_aix_libpath_sed='
       /Import File Strings/,/^$/ {
@@ -10698,7 +11350,7 @@ if ac_fn_c_try_link "$LINENO"; then :
     lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
   fi
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
     lt_cv_aix_libpath_=/usr/lib:/lib
         if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
-  if ${lt_cv_aix_libpath_+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${lt_cv_aix_libpath_+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
   lt_aix_libpath_sed='
       /Import File Strings/,/^$/ {
@@ -10751,7 +11405,7 @@ if ac_fn_c_try_link "$LINENO"; then :
     lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
   fi
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
     lt_cv_aix_libpath_=/usr/lib:/lib
 
          # Older versions of the 11.00 compiler do not understand -b yet
          # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
-         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
-$as_echo_n "checking if $CC understands -b... " >&6; }
-if ${lt_cv_prog_compiler__b+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+printf %s "checking if $CC understands -b... " >&6; }
+if test ${lt_cv_prog_compiler__b+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_prog_compiler__b=no
    save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS -b"
@@ -11030,8 +11685,8 @@ else
    LDFLAGS=$save_LDFLAGS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
-$as_echo "$lt_cv_prog_compiler__b" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+printf "%s\n" "$lt_cv_prog_compiler__b" >&6; }
 
 if test yes = "$lt_cv_prog_compiler__b"; then
     archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
        # work, assume that -exports_file does not work either and
        # implicitly export all symbols.
        # This should be the same for all languages, so no per-tag cache variable.
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
-$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
-if ${lt_cv_irix_exported_symbol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if test ${lt_cv_irix_exported_symbol+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   save_LDFLAGS=$LDFLAGS
           LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 int foo (void) { return 0; }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   lt_cv_irix_exported_symbol=yes
-else
+else $as_nop
   lt_cv_irix_exported_symbol=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
            LDFLAGS=$save_LDFLAGS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
-$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
        if test yes = "$lt_cv_irix_exported_symbol"; then
           archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
        fi
@@ -11373,8 +12030,8 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
     fi
   fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
-$as_echo "$ld_shlibs" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+printf "%s\n" "$ld_shlibs" >&6; }
 test no = "$ld_shlibs" && can_build_shared=no
 
 with_gnu_ld=$with_gnu_ld
@@ -11410,18 +12067,19 @@ x|xyes)
       # Test whether the compiler implicitly links with -lc since on some
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
-$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
-if ${lt_cv_archive_cmds_need_lc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+printf %s "checking whether -lc should be explicitly linked in... " >&6; }
+if test ${lt_cv_archive_cmds_need_lc+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   $RM conftest*
        echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } 2>conftest.err; then
          soname=conftest
          lib=conftest
@@ -11439,7 +12097,7 @@ else
          if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
   (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
          then
            lt_cv_archive_cmds_need_lc=no
@@ -11453,8 +12111,8 @@ else
        $RM conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
-$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; }
       archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
       ;;
     esac
@@ -11613,8 +12271,8 @@ esac
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
-$as_echo_n "checking dynamic linker characteristics... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+printf %s "checking dynamic linker characteristics... " >&6; }
 
 if test yes = "$GCC"; then
   case $host_os in
@@ -12175,9 +12833,10 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   shlibpath_overrides_runpath=no
 
   # Some binutils ld are patched to set DT_RUNPATH
-  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${lt_cv_shlibpath_overrides_runpath+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   lt_cv_shlibpath_overrides_runpath=no
     save_LDFLAGS=$LDFLAGS
     save_libdir=$libdir
@@ -12187,19 +12846,21 @@ else
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+if ac_fn_c_try_link "$LINENO"
+then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null
+then :
   lt_cv_shlibpath_overrides_runpath=yes
 fi
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     LDFLAGS=$save_LDFLAGS
     libdir=$save_libdir
@@ -12443,8 +13104,8 @@ uts4*)
   dynamic_linker=no
   ;;
 esac
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
-$as_echo "$dynamic_linker" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+printf "%s\n" "$dynamic_linker" >&6; }
 test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
@@ -12565,8 +13226,8 @@ configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
-$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+printf %s "checking how to hardcode library paths into programs... " >&6; }
 hardcode_action=
 if test -n "$hardcode_libdir_flag_spec" ||
    test -n "$runpath_var" ||
@@ -12590,8 +13251,8 @@ else
   # directories.
   hardcode_action=unsupported
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
-$as_echo "$hardcode_action" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+printf "%s\n" "$hardcode_action" >&6; }
 
 if test relink = "$hardcode_action" ||
    test yes = "$inherit_rpath"; then
@@ -12635,11 +13296,12 @@ else
 
   darwin*)
     # if libdl is installed we need to link against it
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldl  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12648,32 +13310,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dlopen ();
 int
-main ()
+main (void)
 {
 return dlopen ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_dl_dlopen=yes
-else
+else $as_nop
   ac_cv_lib_dl_dlopen=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
   lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
+else $as_nop
 
     lt_cv_dlopen=dyld
     lt_cv_dlopen_libs=
 
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = xyes; then :
+if test "x$ac_cv_func_shl_load" = xyes
+then :
   lt_cv_dlopen=shl_load
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
-$as_echo_n "checking for shl_load in -ldld... " >&6; }
-if ${ac_cv_lib_dld_shl_load+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+printf %s "checking for shl_load in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_shl_load+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldld  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12709,41 +13372,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char shl_load ();
 int
-main ()
+main (void)
 {
 return shl_load ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_dld_shl_load=yes
-else
+else $as_nop
   ac_cv_lib_dld_shl_load=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
-$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes
+then :
   lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
-else
+else $as_nop
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = xyes; then :
+if test "x$ac_cv_func_dlopen" = xyes
+then :
   lt_cv_dlopen=dlopen
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldl  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12752,37 +13416,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dlopen ();
 int
-main ()
+main (void)
 {
 return dlopen ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_dl_dlopen=yes
-else
+else $as_nop
   ac_cv_lib_dl_dlopen=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
   lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
-$as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if ${ac_cv_lib_svld_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+printf %s "checking for dlopen in -lsvld... " >&6; }
+if test ${ac_cv_lib_svld_dlopen+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsvld  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12791,37 +13455,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dlopen ();
 int
-main ()
+main (void)
 {
 return dlopen ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_svld_dlopen=yes
-else
+else $as_nop
   ac_cv_lib_svld_dlopen=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
-$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes
+then :
   lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
-$as_echo_n "checking for dld_link in -ldld... " >&6; }
-if ${ac_cv_lib_dld_dld_link+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+printf %s "checking for dld_link in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_dld_link+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldld  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12830,30 +13494,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dld_link ();
 int
-main ()
+main (void)
 {
 return dld_link ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_dld_dld_link=yes
-else
+else $as_nop
   ac_cv_lib_dld_dld_link=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
-$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes
+then :
   lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
 fi
 
     save_LIBS=$LIBS
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
-$as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+printf %s "checking whether a program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
          if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self=cross
 else
@@ -12975,7 +13639,7 @@ _LT_EOF
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
@@ -12993,16 +13657,17 @@ rm -fr conftest*
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
-$as_echo "$lt_cv_dlopen_self" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+printf "%s\n" "$lt_cv_dlopen_self" >&6; }
 
     if test yes = "$lt_cv_dlopen_self"; then
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
-$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if ${lt_cv_dlopen_self_static+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+printf %s "checking whether a statically linked program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self_static+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
          if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self_static=cross
 else
@@ -13081,7 +13746,7 @@ _LT_EOF
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
     (./conftest; exit; ) >&5 2>/dev/null
     lt_status=$?
@@ -13099,8 +13764,8 @@ rm -fr conftest*
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
-$as_echo "$lt_cv_dlopen_self_static" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+printf "%s\n" "$lt_cv_dlopen_self_static" >&6; }
     fi
 
     CPPFLAGS=$save_CPPFLAGS
 
 striplib=
 old_striplib=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
-$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+printf %s "checking whether stripping libraries is possible... " >&6; }
 if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
   test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
   test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 else
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
@@ -13152,16 +13817,16 @@ else
     if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
     else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
     fi
     ;;
   *)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
     ;;
   esac
 fi
 
 
   # Report what library types will actually be built
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
-$as_echo_n "checking if libtool supports shared libraries... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
-$as_echo "$can_build_shared" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+printf %s "checking if libtool supports shared libraries... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+printf "%s\n" "$can_build_shared" >&6; }
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
-$as_echo_n "checking whether to build shared libraries... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+printf %s "checking whether to build shared libraries... " >&6; }
   test no = "$can_build_shared" && enable_shared=no
 
   # On AIX, shared libraries and static libraries use the same namespace, and
@@ -13208,15 +13873,15 @@ $as_echo_n "checking whether to build shared libraries... " >&6; }
     fi
     ;;
   esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
-$as_echo "$enable_shared" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+printf "%s\n" "$enable_shared" >&6; }
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
-$as_echo_n "checking whether to build static libraries... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+printf %s "checking whether to build static libraries... " >&6; }
   # Make sure either enable_shared or enable_static is yes.
   test yes = "$enable_shared" || enable_static=yes
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
-$as_echo "$enable_static" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+printf "%s\n" "$enable_static" >&6; }
 
 
 
@@ -13255,11 +13920,12 @@ CC=$lt_save_CC
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$STRIP"; then
   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 else
@@ -13267,11 +13933,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 fi
 STRIP=$ac_cv_prog_STRIP
 if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -13295,11 +13965,12 @@ if test -z "$ac_cv_prog_STRIP"; then
   ac_ct_STRIP=$STRIP
   # Extract the first word of "strip", so it can be a program name with args.
 set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_STRIP"; then
   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 else
@@ -13307,11 +13978,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 fi
 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_STRIP" = x; then
@@ -13334,8 +14009,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     STRIP=$ac_ct_STRIP
 # Default is to build bsdtar, but allow people to override that.
 #
 # Check whether --enable-bsdtar was given.
-if test "${enable_bsdtar+set}" = set; then :
+if test ${enable_bsdtar+y}
+then :
   enableval=$enable_bsdtar;
-else
+else $as_nop
   enable_bsdtar=yes
 fi
 
@@ -13370,8 +14046,8 @@ yes)
        ;;
 dynamic|shared)
        if test "$enable_shared" = "no"; then
-               { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+               { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "Shared linking of bsdtar requires shared libarchive
 See \`config.log' for more details" "$LINENO" 5; }
        fi
@@ -13387,8 +14063,8 @@ no)
        static_bsdtar=no
        ;;
 *)
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "Unsupported value for --enable-bsdtar
 See \`config.log' for more details" "$LINENO" 5; }
        ;;
 # Default is to build bsdcat, but allow people to override that.
 #
 # Check whether --enable-bsdcat was given.
-if test "${enable_bsdcat+set}" = set; then :
+if test ${enable_bsdcat+y}
+then :
   enableval=$enable_bsdcat;
-else
+else $as_nop
   enable_bsdcat=yes
 fi
 
@@ -13435,8 +14112,8 @@ yes)
        ;;
 dynamic|shared)
        if test "$enable_shared" = "no"; then
-               { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+               { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "Shared linking of bsdcat requires shared libarchive
 See \`config.log' for more details" "$LINENO" 5; }
        fi
@@ -13452,8 +14129,8 @@ no)
        static_bsdcat=no
        ;;
 *)
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "Unsupported value for --enable-bsdcat
 See \`config.log' for more details" "$LINENO" 5; }
        ;;
 # Default is not to build bsdcpio, but that can be overridden.
 #
 # Check whether --enable-bsdcpio was given.
-if test "${enable_bsdcpio+set}" = set; then :
+if test ${enable_bsdcpio+y}
+then :
   enableval=$enable_bsdcpio;
-else
+else $as_nop
   enable_bsdcpio=yes
 fi
 
@@ -13500,8 +14178,8 @@ yes)
        ;;
 dynamic|shared)
        if test "$enabled_shared" = "no"; then
-          { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+          { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "Shared linking of bsdcpio requires shared libarchive
 See \`config.log' for more details" "$LINENO" 5; }
        fi
@@ -13516,8 +14194,8 @@ no)
        static_bsdcpio=no
        ;;
 *)
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "Unsupported value for --enable-bsdcpio
 See \`config.log' for more details" "$LINENO" 5; }
        ;;
 # Set up defines needed before including any headers
 case $host in
   *mingw* | *cygwin* | *msys*  )
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef _WIN32_WINNT
      # error _WIN32_WINNT already defined
      #endif
 
 int
-main ()
+main (void)
 {
 ;
   ;
@@ -13558,13 +14237,14 @@ main ()
 }
 
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
 
 
-$as_echo "#define _WIN32_WINNT 0x0502" >>confdefs.h
+printf "%s\n" "#define _WIN32_WINNT 0x0502" >>confdefs.h
 
 
-$as_echo "#define NTDDI_VERSION 0x05020000" >>confdefs.h
+printf "%s\n" "#define NTDDI_VERSION 0x05020000" >>confdefs.h
 
 
 fi
@@ -13576,7 +14256,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
      #endif
 
 int
-main ()
+main (void)
 {
 ;
   ;
@@ -13584,10 +14264,11 @@ main ()
 }
 
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+if ac_fn_c_try_cpp "$LINENO"
+then :
 
 
-$as_echo "#define WINVER 0x0502" >>confdefs.h
+printf "%s\n" "#define WINVER 0x0502" >>confdefs.h
 
 
 fi
@@ -13595,22 +14276,97 @@ rm -f conftest.err conftest.i conftest.$ac_ext
   ;;
 esac
 
+#
+# Options for building bsdunzip.
+#
+# Default is to build bsdunzip, but allow people to override that.
+# Bsdunzip has not yet been ported for Windows
+#
+case "$host_os" in
+  *mingw* | *msys*)
+       enable_bsdunzip=no
+       ;;
+  *)
+       # Check whether --enable-bsdunzip was given.
+if test ${enable_bsdunzip+y}
+then :
+  enableval=$enable_bsdunzip;
+else $as_nop
+  enable_bsdunzip=yes
+fi
+
+       ;;
+esac
+
+case "$enable_bsdunzip" in
+yes)
+       if test "$enable_static" = "no"; then
+               static_bsdunzip=no
+       else
+               static_bsdunzip=yes
+       fi
+       build_bsdunzip=yes
+       ;;
+dynamic|shared)
+       if test "$enable_shared" = "no"; then
+               { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Shared linking of bsdunzip requires shared libarchive
+See \`config.log' for more details" "$LINENO" 5; }
+       fi
+       build_bsdunzip=yes
+       static_bsdunzip=no
+       ;;
+static)
+       build_bsdunzip=yes
+       static_bsdunzip=yes
+       ;;
+no)
+       build_bsdunzip=no
+       static_bsdunzip=no
+       ;;
+*)
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Unsupported value for --enable-bsdunzip
+See \`config.log' for more details" "$LINENO" 5; }
+       ;;
+esac
+
+ if  test "$build_bsdunzip" = yes ; then
+  BUILD_BSDUNZIP_TRUE=
+  BUILD_BSDUNZIP_FALSE='#'
+else
+  BUILD_BSDUNZIP_TRUE='#'
+  BUILD_BSDUNZIP_FALSE=
+fi
+
+ if  test "$static_bsdunzip" = yes ; then
+  STATIC_BSDUNZIP_TRUE=
+  STATIC_BSDUNZIP_FALSE='#'
+else
+  STATIC_BSDUNZIP_TRUE='#'
+  STATIC_BSDUNZIP_FALSE=
+fi
+
+
 # Checks for header files.
 ac_header_dirent=no
 for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
-  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval \${$as_ac_Header+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+printf %s "checking for $ac_hdr that defines DIR... " >&6; }
+if eval test \${$as_ac_Header+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 #include <$ac_hdr>
 
 int
-main ()
+main (void)
 {
 if ((DIR *) 0)
 return 0;
@@ -13618,19 +14374,21 @@ return 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$as_ac_Header=yes"
-else
+else $as_nop
   eval "$as_ac_Header=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 eval ac_res=\$$as_ac_Header
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1
 _ACEOF
 
 ac_header_dirent=$ac_hdr; break
 done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -13651,56 +14410,59 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char opendir ();
 int
-main ()
+main (void)
 {
 return opendir ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' dir; do
+for ac_lib in '' dir
+do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
+  if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_search_opendir=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
+  if test ${ac_cv_search_opendir+y}
+then :
   break
 fi
 done
-if ${ac_cv_search_opendir+:} false; then :
+if test ${ac_cv_search_opendir+y}
+then :
 
-else
+else $as_nop
   ac_cv_search_opendir=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
 ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -13708,57 +14470,60 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char opendir ();
 int
-main ()
+main (void)
 {
 return opendir ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' x; do
+for ac_lib in '' x
+do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
+  if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_search_opendir=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
+  if test ${ac_cv_search_opendir+y}
+then :
   break
 fi
 done
-if ${ac_cv_search_opendir+:} false; then :
+if test ${ac_cv_search_opendir+y}
+then :
 
-else
+else $as_nop
   ac_cv_search_opendir=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
 ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
-$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
-if ${ac_cv_header_sys_wait_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
+printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+if test ${ac_cv_header_sys_wait_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
@@ -13771,7 +14536,7 @@ else
 #endif
 
 int
-main ()
+main (void)
 {
   int s;
   wait (&s);
@@ -13780,332 +14545,493 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_header_sys_wait_h=yes
-else
+else $as_nop
   ac_cv_header_sys_wait_h=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
-$as_echo "$ac_cv_header_sys_wait_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
+printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; }
 if test $ac_cv_header_sys_wait_h = yes; then
 
-$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
 
 fi
 
-for ac_header in acl/libacl.h attr/xattr.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "acl/libacl.h" "ac_cv_header_acl_libacl_h" "$ac_includes_default"
+if test "x$ac_cv_header_acl_libacl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_LIBACL_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "attr/xattr.h" "ac_cv_header_attr_xattr_h" "$ac_includes_default"
+if test "x$ac_cv_header_attr_xattr_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ATTR_XATTR_H 1" >>confdefs.h
 
-done
+fi
 
-for ac_header in copyfile.h ctype.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "copyfile.h" "ac_cv_header_copyfile_h" "$ac_includes_default"
+if test "x$ac_cv_header_copyfile_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_COPYFILE_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default"
+if test "x$ac_cv_header_ctype_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_CTYPE_H 1" >>confdefs.h
 
-done
+fi
 
-for ac_header in errno.h ext2fs/ext2_fs.h fcntl.h grp.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default"
+if test "x$ac_cv_header_errno_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ERRNO_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "ext2fs/ext2_fs.h" "ac_cv_header_ext2fs_ext2_fs_h" "$ac_includes_default"
+if test "x$ac_cv_header_ext2fs_ext2_fs_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_EXT2FS_EXT2_FS_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "fnmatch.h" "ac_cv_header_fnmatch_h" "$ac_includes_default"
+if test "x$ac_cv_header_fnmatch_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_FNMATCH_H 1" >>confdefs.h
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether EXT2_IOC_GETFLAGS is usable" >&5
-$as_echo_n "checking whether EXT2_IOC_GETFLAGS is usable... " >&6; }
-if ${ac_cv_have_decl_EXT2_IOC_GETFLAGS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+fi
+ac_fn_c_check_header_compile "$LINENO" "grp.h" "ac_cv_header_grp_h" "$ac_includes_default"
+if test "x$ac_cv_header_grp_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_GRP_H 1" >>confdefs.h
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether EXT2_IOC_GETFLAGS is usable" >&5
+printf %s "checking whether EXT2_IOC_GETFLAGS is usable... " >&6; }
+if test ${ac_cv_have_decl_EXT2_IOC_GETFLAGS+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/ioctl.h>
 #include <ext2fs/ext2_fs.h>
 int
-main ()
+main (void)
 {
 int x = EXT2_IOC_GETFLAGS
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_have_decl_EXT2_IOC_GETFLAGS=yes
-else
+else $as_nop
   ac_cv_have_decl_EXT2_IOC_GETFLAGS=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_EXT2_IOC_GETFLAGS" >&5
-$as_echo "$ac_cv_have_decl_EXT2_IOC_GETFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_EXT2_IOC_GETFLAGS" >&5
+printf "%s\n" "$ac_cv_have_decl_EXT2_IOC_GETFLAGS" >&6; }
 
-if test "x$ac_cv_have_decl_EXT2_IOC_GETFLAGS" = xyes; then :
+if test "x$ac_cv_have_decl_EXT2_IOC_GETFLAGS" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_EXT2_IOC_GETFLAGS 1
-_ACEOF
+printf "%s\n" "#define HAVE_WORKING_EXT2_IOC_GETFLAGS 1" >>confdefs.h
 
 fi
 
-for ac_header in inttypes.h io.h langinfo.h limits.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "io.h" "ac_cv_header_io_h" "$ac_includes_default"
+if test "x$ac_cv_header_io_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_IO_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_langinfo_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LANGINFO_H 1" >>confdefs.h
 
-for ac_header in linux/fiemap.h linux/fs.h linux/magic.h linux/types.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default"
+if test "x$ac_cv_header_limits_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h
 
 fi
 
-done
+ac_fn_c_check_header_compile "$LINENO" "linux/fiemap.h" "ac_cv_header_linux_fiemap_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_fiemap_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LINUX_FIEMAP_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "linux/fs.h" "ac_cv_header_linux_fs_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_fs_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LINUX_FS_H 1" >>confdefs.h
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FS_IOC_GETFLAGS is usable" >&5
-$as_echo_n "checking whether FS_IOC_GETFLAGS is usable... " >&6; }
-if ${ac_cv_have_decl_FS_IOC_GETFLAGS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+fi
+ac_fn_c_check_header_compile "$LINENO" "linux/magic.h" "ac_cv_header_linux_magic_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_magic_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LINUX_MAGIC_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "linux/types.h" "ac_cv_header_linux_types_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_types_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LINUX_TYPES_H 1" >>confdefs.h
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether FS_IOC_GETFLAGS is usable" >&5
+printf %s "checking whether FS_IOC_GETFLAGS is usable... " >&6; }
+if test ${ac_cv_have_decl_FS_IOC_GETFLAGS+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/ioctl.h>
 #include <linux/fs.h>
 int
-main ()
+main (void)
 {
 int x = FS_IOC_GETFLAGS
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_have_decl_FS_IOC_GETFLAGS=yes
-else
+else $as_nop
   ac_cv_have_decl_FS_IOC_GETFLAGS=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_FS_IOC_GETFLAGS" >&5
-$as_echo "$ac_cv_have_decl_FS_IOC_GETFLAGS" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_FS_IOC_GETFLAGS" >&5
+printf "%s\n" "$ac_cv_have_decl_FS_IOC_GETFLAGS" >&6; }
 
-if test "x$ac_cv_have_decl_FS_IOC_GETFLAGS" = xyes; then :
+if test "x$ac_cv_have_decl_FS_IOC_GETFLAGS" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_FS_IOC_GETFLAGS 1
-_ACEOF
+printf "%s\n" "#define HAVE_WORKING_FS_IOC_GETFLAGS 1" >>confdefs.h
 
 fi
 
-for ac_header in locale.h membership.h paths.h poll.h pthread.h pwd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default"
+if test "x$ac_cv_header_locale_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "membership.h" "ac_cv_header_membership_h" "$ac_includes_default"
+if test "x$ac_cv_header_membership_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_MEMBERSHIP_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "paths.h" "ac_cv_header_paths_h" "$ac_includes_default"
+if test "x$ac_cv_header_paths_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_PATHS_H 1" >>confdefs.h
 
-for ac_header in readpassphrase.h signal.h spawn.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default"
+if test "x$ac_cv_header_poll_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_POLL_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_PTHREAD_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "pwd.h" "ac_cv_header_pwd_h" "$ac_includes_default"
+if test "x$ac_cv_header_pwd_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_PWD_H 1" >>confdefs.h
 
-for ac_header in stdarg.h stdint.h stdlib.h string.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "readpassphrase.h" "ac_cv_header_readpassphrase_h" "$ac_includes_default"
+if test "x$ac_cv_header_readpassphrase_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_READPASSPHRASE_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default"
+if test "x$ac_cv_header_signal_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SIGNAL_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "spawn.h" "ac_cv_header_spawn_h" "$ac_includes_default"
+if test "x$ac_cv_header_spawn_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SPAWN_H 1" >>confdefs.h
 
-for ac_header in sys/acl.h sys/cdefs.h sys/ea.h sys/extattr.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdarg_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDARG_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h
 
-for ac_header in sys/ioctl.h sys/mkdev.h sys/mount.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h
 
 fi
 
-done
+ac_fn_c_check_header_compile "$LINENO" "sys/acl.h" "ac_cv_header_sys_acl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_acl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_ACL_H 1" >>confdefs.h
 
-for ac_header in sys/param.h sys/poll.h sys/richacl.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/cdefs.h" "ac_cv_header_sys_cdefs_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_cdefs_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_CDEFS_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "sys/ea.h" "ac_cv_header_sys_ea_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ea_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_EA_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/extattr.h" "ac_cv_header_sys_extattr_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_extattr_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_EXTATTR_H 1" >>confdefs.h
 
-for ac_header in sys/select.h sys/statfs.h sys/statvfs.h sys/sysmacros.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ioctl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mkdev_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_MKDEV_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/mount.h" "ac_cv_header_sys_mount_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mount_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_MOUNT_H 1" >>confdefs.h
 
-for ac_header in sys/time.h sys/utime.h sys/utsname.h sys/vfs.h sys/xattr.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/queue.h" "ac_cv_header_sys_queue_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_queue_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_QUEUE_H 1" >>confdefs.h
 
 fi
 
-done
+ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_param_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h
 
-for ac_header in time.h unistd.h utime.h wchar.h wctype.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/poll.h" "ac_cv_header_sys_poll_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_poll_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_POLL_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "sys/richacl.h" "ac_cv_header_sys_richacl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_richacl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_RICHACL_H 1" >>confdefs.h
 
-done
+fi
 
-for ac_header in windows.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
-if test "x$ac_cv_header_windows_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_WINDOWS_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/statfs.h" "ac_cv_header_sys_statfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_statfs_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_STATFS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/statvfs.h" "ac_cv_header_sys_statvfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_statvfs_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_STATVFS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sysmacros_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_SYSMACROS_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_time_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/utime.h" "ac_cv_header_sys_utime_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_utime_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_UTIME_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_utsname_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_UTSNAME_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/vfs.h" "ac_cv_header_sys_vfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_vfs_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_VFS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/xattr.h" "ac_cv_header_sys_xattr_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_xattr_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_XATTR_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_time_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_TIME_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default"
+if test "x$ac_cv_header_utime_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_UTIME_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default"
+if test "x$ac_cv_header_wchar_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCHAR_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default"
+if test "x$ac_cv_header_wctype_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCTYPE_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
+if test "x$ac_cv_header_windows_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h
 
 fi
 
-done
-
 # check windows.h first; the other headers require it.
-for ac_header in wincrypt.h winioctl.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#ifdef HAVE_WINDOWS_H
+ac_fn_c_check_header_compile "$LINENO" "wincrypt.h" "ac_cv_header_wincrypt_h" "#ifdef HAVE_WINDOWS_H
 # include <windows.h>
 #endif
 
 "
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+if test "x$ac_cv_header_wincrypt_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_WINCRYPT_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "winioctl.h" "ac_cv_header_winioctl_h" "#ifdef HAVE_WINDOWS_H
+# include <windows.h>
+#endif
 
-done
+"
+if test "x$ac_cv_header_winioctl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_WINIOCTL_H 1" >>confdefs.h
+
+fi
 
 
 # Checks for libraries.
 
 # Check whether --with-zlib was given.
-if test "${with_zlib+set}" = set; then :
+if test ${with_zlib+y}
+then :
   withval=$with_zlib;
 fi
 
 
 if test "x$with_zlib" != "xno"; then
-  for ac_header in zlib.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_zlib_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_ZLIB_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_zlib_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ZLIB_H 1" >>confdefs.h
 
 fi
 
-done
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5
-$as_echo_n "checking for inflate in -lz... " >&6; }
-if ${ac_cv_lib_z_inflate+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5
+printf %s "checking for inflate in -lz... " >&6; }
+if test ${ac_cv_lib_z_inflate+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lz  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14114,33 +15040,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char inflate ();
 int
-main ()
+main (void)
 {
 return inflate ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_z_inflate=yes
-else
+else $as_nop
   ac_cv_lib_z_inflate=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5
-$as_echo "$ac_cv_lib_z_inflate" >&6; }
-if test "x$ac_cv_lib_z_inflate" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBZ 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5
+printf "%s\n" "$ac_cv_lib_z_inflate" >&6; }
+if test "x$ac_cv_lib_z_inflate" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h
 
   LIBS="-lz $LIBS"
 
 
 
 # Check whether --with-bz2lib was given.
-if test "${with_bz2lib+set}" = set; then :
+if test ${with_bz2lib+y}
+then :
   withval=$with_bz2lib;
 fi
 
 
 if test "x$with_bz2lib" != "xno"; then
-  for ac_header in bzlib.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_bzlib_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_BZLIB_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_bzlib_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_BZLIB_H 1" >>confdefs.h
 
 fi
 
-done
-
   case "$host_os" in
     *mingw* | *cygwin* | *msys*)
-                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzDecompressInit in -lbz2" >&5
-$as_echo_n "checking for BZ2_bzDecompressInit in -lbz2... " >&6; }
+                 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzDecompressInit in -lbz2" >&5
+printf %s "checking for BZ2_bzDecompressInit in -lbz2... " >&6; }
       old_LIBS="$LIBS"
       LIBS="-lbz2 $LIBS"
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14179,29 +15098,31 @@ $as_echo_n "checking for BZ2_bzDecompressInit in -lbz2... " >&6; }
 #include <bzlib.h>
           int main() { return BZ2_bzDecompressInit(NULL, 0, 0); }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_bz2_BZ2_bzDecompressInit=yes
-else
+else $as_nop
   ac_cv_lib_bz2_BZ2_bzDecompressInit=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
       LIBS="$old_LIBS"
-         { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzDecompressInit" >&5
-$as_echo "$ac_cv_lib_bz2_BZ2_bzDecompressInit" >&6; }
+         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzDecompressInit" >&5
+printf "%s\n" "$ac_cv_lib_bz2_BZ2_bzDecompressInit" >&6; }
       if test "x$ac_cv_lib_bz2_BZ2_bzDecompressInit" = xyes; then
 
-$as_echo "#define HAVE_LIBBZ2 1" >>confdefs.h
+printf "%s\n" "#define HAVE_LIBBZ2 1" >>confdefs.h
 
         LIBS="-lbz2 $LIBS"
       fi
     ;;
     *)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzDecompressInit in -lbz2" >&5
-$as_echo_n "checking for BZ2_bzDecompressInit in -lbz2... " >&6; }
-if ${ac_cv_lib_bz2_BZ2_bzDecompressInit+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzDecompressInit in -lbz2" >&5
+printf %s "checking for BZ2_bzDecompressInit in -lbz2... " >&6; }
+if test ${ac_cv_lib_bz2_BZ2_bzDecompressInit+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lbz2  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14210,33 +15131,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char BZ2_bzDecompressInit ();
 int
-main ()
+main (void)
 {
 return BZ2_bzDecompressInit ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_bz2_BZ2_bzDecompressInit=yes
-else
+else $as_nop
   ac_cv_lib_bz2_BZ2_bzDecompressInit=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzDecompressInit" >&5
-$as_echo "$ac_cv_lib_bz2_BZ2_bzDecompressInit" >&6; }
-if test "x$ac_cv_lib_bz2_BZ2_bzDecompressInit" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBBZ2 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzDecompressInit" >&5
+printf "%s\n" "$ac_cv_lib_bz2_BZ2_bzDecompressInit" >&6; }
+if test "x$ac_cv_lib_bz2_BZ2_bzDecompressInit" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBBZ2 1" >>confdefs.h
 
   LIBS="-lbz2 $LIBS"
 
 
 
 # Check whether --with-libb2 was given.
-if test "${with_libb2+set}" = set; then :
+if test ${with_libb2+y}
+then :
   withval=$with_libb2;
 fi
 
 
 if test "x$with_libb2" != "xno"; then
-  for ac_header in blake2.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "blake2.h" "ac_cv_header_blake2_h" "$ac_includes_default"
-if test "x$ac_cv_header_blake2_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_BLAKE2_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "blake2.h" "ac_cv_header_blake2_h" "$ac_includes_default"
+if test "x$ac_cv_header_blake2_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_BLAKE2_H 1" >>confdefs.h
 
 fi
 
-done
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for blake2sp_init in -lb2" >&5
-$as_echo_n "checking for blake2sp_init in -lb2... " >&6; }
-if ${ac_cv_lib_b2_blake2sp_init+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for blake2sp_init in -lb2" >&5
+printf %s "checking for blake2sp_init in -lb2... " >&6; }
+if test ${ac_cv_lib_b2_blake2sp_init+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lb2  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14279,33 +15194,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char blake2sp_init ();
 int
-main ()
+main (void)
 {
 return blake2sp_init ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_b2_blake2sp_init=yes
-else
+else $as_nop
   ac_cv_lib_b2_blake2sp_init=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_b2_blake2sp_init" >&5
-$as_echo "$ac_cv_lib_b2_blake2sp_init" >&6; }
-if test "x$ac_cv_lib_b2_blake2sp_init" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBB2 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_b2_blake2sp_init" >&5
+printf "%s\n" "$ac_cv_lib_b2_blake2sp_init" >&6; }
+if test "x$ac_cv_lib_b2_blake2sp_init" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBB2 1" >>confdefs.h
 
   LIBS="-lb2 $LIBS"
 
@@ -14324,7 +15236,8 @@ fi
 
 
 # Check whether --with-iconv was given.
-if test "${with_iconv+set}" = set; then :
+if test ${with_iconv+y}
+then :
   withval=$with_iconv;
 fi
 
@@ -14348,9 +15261,10 @@ if test "x$with_iconv" != "xno"; then
 
 
 # Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
+if test ${with_gnu_ld+y}
+then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
+else $as_nop
   with_gnu_ld=no
 fi
 
@@ -14369,8 +15283,8 @@ fi
 ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
-$as_echo_n "checking for ld used by GCC... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
+printf %s "checking for ld used by GCC... " >&6; }
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -14399,15 +15313,16 @@ $as_echo_n "checking for ld used by GCC... " >&6; }
     ;;
   esac
 elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
 fi
-if ${acl_cv_path_LD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${acl_cv_path_LD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -z "$LD"; then
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
   for ac_dir in $PATH; do
 
 LD="$acl_cv_path_LD"
 if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${acl_cv_prog_gnu_ld+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${acl_cv_prog_gnu_ld+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   # I'd rather use --version here, but apparently some GNU ld's only accept -v.
 case `$LD -v 2>&1 </dev/null` in
 *GNU* | *'with BFD'*)
@@ -14453,18 +15369,20 @@ case `$LD -v 2>&1 </dev/null` in
   acl_cv_prog_gnu_ld=no ;;
 esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
-$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$acl_cv_prog_gnu_ld
 
 
 
 
-                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
-$as_echo_n "checking for shared library run path origin... " >&6; }
-if ${acl_cv_rpath+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+                                                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+printf %s "checking for shared library run path origin... " >&6; }
+if test ${acl_cv_rpath+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
     ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
@@ -14473,8 +15391,8 @@ else
     acl_cv_rpath=done
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
-$as_echo "$acl_cv_rpath" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+printf "%s\n" "$acl_cv_rpath" >&6; }
   wl="$acl_cv_wl"
   acl_libext="$acl_cv_libext"
   acl_shlibext="$acl_cv_shlibext"
@@ -14485,9 +15403,10 @@ $as_echo "$acl_cv_rpath" >&6; }
   acl_hardcode_direct="$acl_cv_hardcode_direct"
   acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
     # Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then :
+if test ${enable_rpath+y}
+then :
   enableval=$enable_rpath; :
-else
+else $as_nop
   enable_rpath=yes
 fi
 
   acl_libdirstem2=
   case "$host_os" in
     solaris*)
-                                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
-$as_echo_n "checking for 64-bit host... " >&6; }
-if ${gl_cv_solaris_64bit+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                                    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+printf %s "checking for 64-bit host... " >&6; }
+if test ${gl_cv_solaris_64bit+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -14512,17 +15432,18 @@ sixtyfour bits
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sixtyfour bits" >/dev/null 2>&1; then :
+  $EGREP "sixtyfour bits" >/dev/null 2>&1
+then :
   gl_cv_solaris_64bit=yes
-else
+else $as_nop
   gl_cv_solaris_64bit=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
-$as_echo "$gl_cv_solaris_64bit" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+printf "%s\n" "$gl_cv_solaris_64bit" >&6; }
       if test $gl_cv_solaris_64bit = yes; then
         acl_libdirstem=lib/64
         case "$host_cpu" in
@@ -14581,7 +15502,8 @@ $as_echo "$gl_cv_solaris_64bit" >&6; }
 
 
 # Check whether --with-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then :
+if test ${with_libiconv_prefix+y}
+then :
   withval=$with_libiconv_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
   done
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
-$as_echo_n "checking for iconv... " >&6; }
-if ${am_cv_func_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+printf %s "checking for iconv... " >&6; }
+if test ${am_cv_func_iconv+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
@@ -15066,7 +15989,7 @@ else
 #include <iconv.h>
 
 int
-main ()
+main (void)
 {
 iconv_t cd = iconv_open("","");
            iconv(cd,NULL,NULL,NULL,NULL);
@@ -15075,10 +15998,11 @@ iconv_t cd = iconv_open("","");
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   am_cv_func_iconv=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     if test "$am_cv_func_iconv" != yes; then
       am_save_LIBS="$LIBS"
@@ -15090,7 +16014,7 @@ rm -f core conftest.err conftest.$ac_objext \
 #include <iconv.h>
 
 int
-main ()
+main (void)
 {
 iconv_t cd = iconv_open("","");
              iconv(cd,NULL,NULL,NULL,NULL);
@@ -15099,24 +16023,26 @@ iconv_t cd = iconv_open("","");
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
       LIBS="$am_save_LIBS"
     fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
-$as_echo "$am_cv_func_iconv" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+printf "%s\n" "$am_cv_func_iconv" >&6; }
   if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
-$as_echo_n "checking for working iconv... " >&6; }
-if ${am_cv_func_iconv_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+printf %s "checking for working iconv... " >&6; }
+if test ${am_cv_func_iconv_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
                   am_save_LIBS="$LIBS"
       if test $am_cv_lib_iconv = yes; then
@@ -15124,12 +16050,13 @@ else
       fi
       am_cv_func_iconv_works=no
       for ac_iconv_const in '' 'const'; do
-        if test "$cross_compiling" = yes; then :
+        if test "$cross_compiling" = yes
+then :
   case "$host_os" in
              aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
              *)            am_cv_func_iconv_works="guessing yes" ;;
            esac
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -15141,7 +16068,7 @@ else
 #endif
 
 int
-main ()
+main (void)
 {
 int result = 0;
   /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
@@ -15241,7 +16168,8 @@ int result = 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   am_cv_func_iconv_works=yes
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -15253,8 +16181,8 @@ fi
       LIBS="$am_save_LIBS"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
-$as_echo "$am_cv_func_iconv_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+printf "%s\n" "$am_cv_func_iconv_works" >&6; }
     case "$am_cv_func_iconv_works" in
       *no) am_func_iconv=no am_cv_lib_iconv=no ;;
       *)   am_func_iconv=yes ;;
@@ -15264,14 +16192,14 @@ $as_echo "$am_cv_func_iconv_works" >&6; }
   fi
   if test "$am_func_iconv" = yes; then
 
-$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
 
   fi
   if test "$am_cv_lib_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
-$as_echo_n "checking how to link with libiconv... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
-$as_echo "$LIBICONV" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+printf %s "checking how to link with libiconv... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+printf "%s\n" "$LIBICONV" >&6; }
   else
             CPPFLAGS="$am_save_CPPFLAGS"
     LIBICONV=
@@ -15281,11 +16209,12 @@ $as_echo "$LIBICONV" >&6; }
 
 
   if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
-$as_echo_n "checking for iconv declaration... " >&6; }
-    if ${am_cv_proto_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
+printf %s "checking for iconv declaration... " >&6; }
+    if test ${am_cv_proto_iconv+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -15303,82 +16232,71 @@ size_t iconv();
 #endif
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   am_cv_proto_iconv_arg1=""
-else
+else $as_nop
   am_cv_proto_iconv_arg1="const"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
 fi
 
     am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result:
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
          $am_cv_proto_iconv" >&5
-$as_echo "
+printf "%s\n" "
          $am_cv_proto_iconv" >&6; }
 
-cat >>confdefs.h <<_ACEOF
-#define ICONV_CONST $am_cv_proto_iconv_arg1
-_ACEOF
+printf "%s\n" "#define ICONV_CONST $am_cv_proto_iconv_arg1" >>confdefs.h
 
 
   fi
 
-  for ac_header in iconv.h
-do :
   ac_fn_c_check_header_compile "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "#include <stdlib.h>
 "
-if test "x$ac_cv_header_iconv_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_ICONV_H 1
-_ACEOF
+if test "x$ac_cv_header_iconv_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ICONV_H 1" >>confdefs.h
 
 fi
 
-done
-
   if test "x$am_cv_func_iconv" = "xyes"; then
-    for ac_header in localcharset.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "localcharset.h" "ac_cv_header_localcharset_h" "$ac_includes_default"
-if test "x$ac_cv_header_localcharset_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LOCALCHARSET_H 1
-_ACEOF
+    ac_fn_c_check_header_compile "$LINENO" "localcharset.h" "ac_cv_header_localcharset_h" "$ac_includes_default"
+if test "x$ac_cv_header_localcharset_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LOCALCHARSET_H 1" >>confdefs.h
 
 fi
 
-done
-
     am_save_LIBS="$LIBS"
     LIBS="${LIBS} ${LIBICONV}"
-    for ac_func in locale_charset
-do :
-  ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset"
-if test "x$ac_cv_func_locale_charset" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LOCALE_CHARSET 1
-_ACEOF
+    if test -n "$LIBICONV"; then
+      LIBSREQUIRED="$LIBSREQUIRED${LIBSREQUIRED:+ }iconv"
+    fi
+    ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset"
+if test "x$ac_cv_func_locale_charset" = xyes
+then :
+  printf "%s\n" "#define HAVE_LOCALE_CHARSET 1" >>confdefs.h
 
 fi
-done
 
     LIBS="${am_save_LIBS}"
     if test "x$ac_cv_func_locale_charset" != "xyes"; then
       # If locale_charset() is not in libiconv, we have to find libcharset.
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for locale_charset in -lcharset" >&5
-$as_echo_n "checking for locale_charset in -lcharset... " >&6; }
-if ${ac_cv_lib_charset_locale_charset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for locale_charset in -lcharset" >&5
+printf %s "checking for locale_charset in -lcharset... " >&6; }
+if test ${ac_cv_lib_charset_locale_charset+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcharset  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15387,33 +16305,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char locale_charset ();
 int
-main ()
+main (void)
 {
 return locale_charset ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_charset_locale_charset=yes
-else
+else $as_nop
   ac_cv_lib_charset_locale_charset=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_charset_locale_charset" >&5
-$as_echo "$ac_cv_lib_charset_locale_charset" >&6; }
-if test "x$ac_cv_lib_charset_locale_charset" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBCHARSET 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_charset_locale_charset" >&5
+printf "%s\n" "$ac_cv_lib_charset_locale_charset" >&6; }
+if test "x$ac_cv_lib_charset_locale_charset" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBCHARSET 1" >>confdefs.h
 
   LIBS="-lcharset $LIBS"
 
 
 
 # Check whether --with-lz4 was given.
-if test "${with_lz4+set}" = set; then :
+if test ${with_lz4+y}
+then :
   withval=$with_lz4;
 fi
 
 
 if test "x$with_lz4" != "xno"; then
-  for ac_header in lz4.h lz4hc.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "lz4.h" "ac_cv_header_lz4_h" "$ac_includes_default"
+if test "x$ac_cv_header_lz4_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LZ4_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "lz4hc.h" "ac_cv_header_lz4hc_h" "$ac_includes_default"
+if test "x$ac_cv_header_lz4hc_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LZ4HC_H 1" >>confdefs.h
 
-done
+fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LZ4_decompress_safe in -llz4" >&5
-$as_echo_n "checking for LZ4_decompress_safe in -llz4... " >&6; }
-if ${ac_cv_lib_lz4_LZ4_decompress_safe+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LZ4_decompress_safe in -llz4" >&5
+printf %s "checking for LZ4_decompress_safe in -llz4... " >&6; }
+if test ${ac_cv_lib_lz4_LZ4_decompress_safe+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-llz4  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15457,33 +16374,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char LZ4_decompress_safe ();
 int
-main ()
+main (void)
 {
 return LZ4_decompress_safe ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_lz4_LZ4_decompress_safe=yes
-else
+else $as_nop
   ac_cv_lib_lz4_LZ4_decompress_safe=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lz4_LZ4_decompress_safe" >&5
-$as_echo "$ac_cv_lib_lz4_LZ4_decompress_safe" >&6; }
-if test "x$ac_cv_lib_lz4_LZ4_decompress_safe" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBLZ4 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lz4_LZ4_decompress_safe" >&5
+printf "%s\n" "$ac_cv_lib_lz4_LZ4_decompress_safe" >&6; }
+if test "x$ac_cv_lib_lz4_LZ4_decompress_safe" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBLZ4 1" >>confdefs.h
 
   LIBS="-llz4 $LIBS"
 
 
 
 # Check whether --with-zstd was given.
-if test "${with_zstd+set}" = set; then :
+if test ${with_zstd+y}
+then :
   withval=$with_zstd;
 fi
 
 
 if test "x$with_zstd" != "xno"; then
-  for ac_header in zstd.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "zstd.h" "ac_cv_header_zstd_h" "$ac_includes_default"
-if test "x$ac_cv_header_zstd_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_ZSTD_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "zstd.h" "ac_cv_header_zstd_h" "$ac_includes_default"
+if test "x$ac_cv_header_zstd_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ZSTD_H 1" >>confdefs.h
 
 fi
 
-done
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ZSTD_decompressStream in -lzstd" >&5
+printf %s "checking for ZSTD_decompressStream in -lzstd... " >&6; }
+if test ${ac_cv_lib_zstd_ZSTD_decompressStream+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lzstd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ZSTD_compressStream in -lzstd" >&5
-$as_echo_n "checking for ZSTD_compressStream in -lzstd... " >&6; }
-if ${ac_cv_lib_zstd_ZSTD_compressStream+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+char ZSTD_decompressStream ();
+int
+main (void)
+{
+return ZSTD_decompressStream ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+  ac_cv_lib_zstd_ZSTD_decompressStream=yes
+else $as_nop
+  ac_cv_lib_zstd_ZSTD_decompressStream=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zstd_ZSTD_decompressStream" >&5
+printf "%s\n" "$ac_cv_lib_zstd_ZSTD_decompressStream" >&6; }
+if test "x$ac_cv_lib_zstd_ZSTD_decompressStream" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBZSTD 1" >>confdefs.h
+
+  LIBS="-lzstd $LIBS"
+
+fi
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ZSTD_compressStream in -lzstd" >&5
+printf %s "checking for ZSTD_compressStream in -lzstd... " >&6; }
+if test ${ac_cv_lib_zstd_ZSTD_compressStream+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lzstd  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15524,35 +16478,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char ZSTD_compressStream ();
 int
-main ()
+main (void)
 {
 return ZSTD_compressStream ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_zstd_ZSTD_compressStream=yes
-else
+else $as_nop
   ac_cv_lib_zstd_ZSTD_compressStream=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zstd_ZSTD_compressStream" >&5
-$as_echo "$ac_cv_lib_zstd_ZSTD_compressStream" >&6; }
-if test "x$ac_cv_lib_zstd_ZSTD_compressStream" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBZSTD 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zstd_ZSTD_compressStream" >&5
+printf "%s\n" "$ac_cv_lib_zstd_ZSTD_compressStream" >&6; }
+if test "x$ac_cv_lib_zstd_ZSTD_compressStream" = xyes
+then :
 
-  LIBS="-lzstd $LIBS"
+printf "%s\n" "#define HAVE_LIBZSTD_COMPRESSOR 1" >>confdefs.h
 
 fi
 
 
 
 # Check whether --with-lzma was given.
-if test "${with_lzma+set}" = set; then :
+if test ${with_lzma+y}
+then :
   withval=$with_lzma;
 fi
 
 
 if test "x$with_lzma" != "xno"; then
-  for ac_header in lzma.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default"
-if test "x$ac_cv_header_lzma_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LZMA_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default"
+if test "x$ac_cv_header_lzma_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LZMA_H 1" >>confdefs.h
 
 fi
 
-done
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzma_stream_decoder in -llzma" >&5
-$as_echo_n "checking for lzma_stream_decoder in -llzma... " >&6; }
-if ${ac_cv_lib_lzma_lzma_stream_decoder+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lzma_stream_decoder in -llzma" >&5
+printf %s "checking for lzma_stream_decoder in -llzma... " >&6; }
+if test ${ac_cv_lib_lzma_lzma_stream_decoder+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-llzma  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15591,33 +16538,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char lzma_stream_decoder ();
 int
-main ()
+main (void)
 {
 return lzma_stream_decoder ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_lzma_lzma_stream_decoder=yes
-else
+else $as_nop
   ac_cv_lib_lzma_lzma_stream_decoder=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_stream_decoder" >&5
-$as_echo "$ac_cv_lib_lzma_lzma_stream_decoder" >&6; }
-if test "x$ac_cv_lib_lzma_lzma_stream_decoder" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBLZMA 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_stream_decoder" >&5
+printf "%s\n" "$ac_cv_lib_lzma_lzma_stream_decoder" >&6; }
+if test "x$ac_cv_lib_lzma_lzma_stream_decoder" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBLZMA 1" >>confdefs.h
 
   LIBS="-llzma $LIBS"
 
   # included a disabled version of lzma_stream_encoder_mt that
   # fools a naive AC_CHECK_LIB or AC_CHECK_FUNC, so we need
   # to do something more complex here:
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we have multithread support in lzma" >&5
-$as_echo_n "checking whether we have multithread support in lzma... " >&6; }
-if ${ac_cv_lzma_has_mt+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we have multithread support in lzma" >&5
+printf %s "checking whether we have multithread support in lzma... " >&6; }
+if test ${ac_cv_lzma_has_mt+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -15640,56 +16585,97 @@ else
                        #error unsupported
                        #endif
 int
-main ()
+main (void)
 {
 lzma_stream_encoder_mt(0, 0);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lzma_has_mt=yes
-else
+else $as_nop
   ac_cv_lzma_has_mt=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lzma_has_mt" >&5
-$as_echo "$ac_cv_lzma_has_mt" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lzma_has_mt" >&5
+printf "%s\n" "$ac_cv_lzma_has_mt" >&6; }
   if test "x$ac_cv_lzma_has_mt" != xno; then
 
-$as_echo "#define HAVE_LZMA_STREAM_ENCODER_MT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_LZMA_STREAM_ENCODER_MT 1" >>confdefs.h
+
+  fi
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we have ARM64 filter support in lzma" >&5
+printf %s "checking whether we have ARM64 filter support in lzma... " >&6; }
+if test ${ac_cv_lzma_has_arm64+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+      #include <lzma.h>
+                       #ifndef LZMA_FILTER_ARM64
+                       #error unsupported
+                       #endif
+int
+main (void)
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+  ac_cv_lzma_has_arm64=yes
+else $as_nop
+  ac_cv_lzma_has_arm64=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lzma_has_arm64" >&5
+printf "%s\n" "$ac_cv_lzma_has_arm64" >&6; }
+  if test "x$ac_cv_lzma_has_arm64" != xno; then
+
+printf "%s\n" "#define HAVE_LZMA_FILTER_ARM64 1" >>confdefs.h
 
   fi
 fi
 
 
 # Check whether --with-lzo2 was given.
-if test "${with_lzo2+set}" = set; then :
+if test ${with_lzo2+y}
+then :
   withval=$with_lzo2;
 fi
 
 
 if test "x$with_lzo2" = "xyes"; then
-  for ac_header in lzo/lzoconf.h lzo/lzo1x.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "lzo/lzoconf.h" "ac_cv_header_lzo_lzoconf_h" "$ac_includes_default"
+if test "x$ac_cv_header_lzo_lzoconf_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LZO_LZOCONF_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "lzo/lzo1x.h" "ac_cv_header_lzo_lzo1x_h" "$ac_includes_default"
+if test "x$ac_cv_header_lzo_lzo1x_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LZO_LZO1X_H 1" >>confdefs.h
 
-done
+fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzo1x_decompress_safe in -llzo2" >&5
-$as_echo_n "checking for lzo1x_decompress_safe in -llzo2... " >&6; }
-if ${ac_cv_lib_lzo2_lzo1x_decompress_safe+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lzo1x_decompress_safe in -llzo2" >&5
+printf %s "checking for lzo1x_decompress_safe in -llzo2... " >&6; }
+if test ${ac_cv_lib_lzo2_lzo1x_decompress_safe+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-llzo2  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15698,33 +16684,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char lzo1x_decompress_safe ();
 int
-main ()
+main (void)
 {
 return lzo1x_decompress_safe ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_lzo2_lzo1x_decompress_safe=yes
-else
+else $as_nop
   ac_cv_lib_lzo2_lzo1x_decompress_safe=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzo2_lzo1x_decompress_safe" >&5
-$as_echo "$ac_cv_lib_lzo2_lzo1x_decompress_safe" >&6; }
-if test "x$ac_cv_lib_lzo2_lzo1x_decompress_safe" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBLZO2 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzo2_lzo1x_decompress_safe" >&5
+printf "%s\n" "$ac_cv_lib_lzo2_lzo1x_decompress_safe" >&6; }
+if test "x$ac_cv_lib_lzo2_lzo1x_decompress_safe" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBLZO2 1" >>confdefs.h
 
   LIBS="-llzo2 $LIBS"
 
 
 
 # Check whether --with-cng was given.
-if test "${with_cng+set}" = set; then :
+if test ${with_cng+y}
+then :
   withval=$with_cng;
 fi
 
 
 
 # Check whether --with-mbedtls was given.
-if test "${with_mbedtls+set}" = set; then :
+if test ${with_mbedtls+y}
+then :
   withval=$with_mbedtls;
 fi
 
 
 # Check whether --with-nettle was given.
-if test "${with_nettle+set}" = set; then :
+if test ${with_nettle+y}
+then :
   withval=$with_nettle;
 fi
 
 
 # Check whether --with-openssl was given.
-if test "${with_openssl+set}" = set; then :
+if test ${with_openssl+y}
+then :
   withval=$with_openssl;
 fi
 
@@ -15763,13 +16750,15 @@ esac
 
 
 # Check whether --with-xml2 was given.
-if test "${with_xml2+set}" = set; then :
+if test ${with_xml2+y}
+then :
   withval=$with_xml2;
 fi
 
 
 # Check whether --with-expat was given.
-if test "${with_expat+set}" = set; then :
+if test ${with_expat+y}
+then :
   withval=$with_expat;
 fi
 
@@ -15786,11 +16775,12 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
        if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKG_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PKG_CONFIG+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $PKG_CONFIG in
   [\\/]* | ?:[\\/]*)
   ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
@@ -15800,11 +16790,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -15816,11 +16810,11 @@ esac
 fi
 PKG_CONFIG=$ac_cv_path_PKG_CONFIG
 if test -n "$PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
-$as_echo "$PKG_CONFIG" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+printf "%s\n" "$PKG_CONFIG" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -15829,11 +16823,12 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then
   ac_pt_PKG_CONFIG=$PKG_CONFIG
   # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_PKG_CONFIG+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $ac_pt_PKG_CONFIG in
   [\\/]* | ?:[\\/]*)
   ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
@@ -15843,11 +16838,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -15859,11 +16858,11 @@ esac
 fi
 ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
 if test -n "$ac_pt_PKG_CONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
-$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_pt_PKG_CONFIG" = x; then
@@ -15871,8 +16870,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     PKG_CONFIG=$ac_pt_PKG_CONFIG
 fi
 if test -n "$PKG_CONFIG"; then
        _pkg_min_version=0.9.0
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
-$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; }
        if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
        else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
                PKG_CONFIG=""
        fi
 fi
 
 pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBXML2_PC" >&5
-$as_echo_n "checking for LIBXML2_PC... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0" >&5
+printf %s "checking for libxml-2.0... " >&6; }
 
 if test -n "$LIBXML2_PC_CFLAGS"; then
     pkg_cv_LIBXML2_PC_CFLAGS="$LIBXML2_PC_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5
   ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_LIBXML2_PC_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -15921,10 +16920,10 @@ if test -n "$LIBXML2_PC_LIBS"; then
     pkg_cv_LIBXML2_PC_LIBS="$LIBXML2_PC_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5
   ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
   pkg_cv_LIBXML2_PC_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
@@ -15938,8 +16937,8 @@ fi
 
 
 if test $pkg_failed = yes; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
         _pkg_short_errors_supported=yes
        echo "$LIBXML2_PC_PKG_ERRORS" >&5
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlInitParser in -lxml2" >&5
-$as_echo_n "checking for xmlInitParser in -lxml2... " >&6; }
-if ${ac_cv_lib_xml2_xmlInitParser+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xmlInitParser in -lxml2" >&5
+printf %s "checking for xmlInitParser in -lxml2... " >&6; }
+if test ${ac_cv_lib_xml2_xmlInitParser+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lxml2  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15968,33 +16968,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char xmlInitParser ();
 int
-main ()
+main (void)
 {
 return xmlInitParser ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_xml2_xmlInitParser=yes
-else
+else $as_nop
   ac_cv_lib_xml2_xmlInitParser=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xml2_xmlInitParser" >&5
-$as_echo "$ac_cv_lib_xml2_xmlInitParser" >&6; }
-if test "x$ac_cv_lib_xml2_xmlInitParser" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBXML2 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xml2_xmlInitParser" >&5
+printf "%s\n" "$ac_cv_lib_xml2_xmlInitParser" >&6; }
+if test "x$ac_cv_lib_xml2_xmlInitParser" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBXML2 1" >>confdefs.h
 
   LIBS="-lxml2 $LIBS"
 
 
 
 elif test $pkg_failed = untried; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlInitParser in -lxml2" >&5
-$as_echo_n "checking for xmlInitParser in -lxml2... " >&6; }
-if ${ac_cv_lib_xml2_xmlInitParser+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xmlInitParser in -lxml2" >&5
+printf %s "checking for xmlInitParser in -lxml2... " >&6; }
+if test ${ac_cv_lib_xml2_xmlInitParser+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lxml2  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16018,33 +17016,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char xmlInitParser ();
 int
-main ()
+main (void)
 {
 return xmlInitParser ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_xml2_xmlInitParser=yes
-else
+else $as_nop
   ac_cv_lib_xml2_xmlInitParser=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xml2_xmlInitParser" >&5
-$as_echo "$ac_cv_lib_xml2_xmlInitParser" >&6; }
-if test "x$ac_cv_lib_xml2_xmlInitParser" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBXML2 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xml2_xmlInitParser" >&5
+printf "%s\n" "$ac_cv_lib_xml2_xmlInitParser" >&6; }
+if test "x$ac_cv_lib_xml2_xmlInitParser" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBXML2 1" >>confdefs.h
 
   LIBS="-lxml2 $LIBS"
 
 else
        LIBXML2_PC_CFLAGS=$pkg_cv_LIBXML2_PC_CFLAGS
        LIBXML2_PC_LIBS=$pkg_cv_LIBXML2_PC_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
     CPPFLAGS="${CPPFLAGS} ${LIBXML2_PC_CFLAGS}"
     LIBS="${LIBS} ${LIBXML2_PC_LIBS}"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlInitParser in -lxml2" >&5
-$as_echo_n "checking for xmlInitParser in -lxml2... " >&6; }
-if ${ac_cv_lib_xml2_xmlInitParser+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xmlInitParser in -lxml2" >&5
+printf %s "checking for xmlInitParser in -lxml2... " >&6; }
+if test ${ac_cv_lib_xml2_xmlInitParser+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lxml2  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16072,73 +17068,68 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char xmlInitParser ();
 int
-main ()
+main (void)
 {
 return xmlInitParser ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_xml2_xmlInitParser=yes
-else
+else $as_nop
   ac_cv_lib_xml2_xmlInitParser=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xml2_xmlInitParser" >&5
-$as_echo "$ac_cv_lib_xml2_xmlInitParser" >&6; }
-if test "x$ac_cv_lib_xml2_xmlInitParser" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xml2_xmlInitParser" >&5
+printf "%s\n" "$ac_cv_lib_xml2_xmlInitParser" >&6; }
+if test "x$ac_cv_lib_xml2_xmlInitParser" = xyes
+then :
   true
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+  { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "Missing xml2 library
 See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 
 fi
-  for ac_header in libxml/xmlreader.h libxml/xmlwriter.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "libxml/xmlreader.h" "ac_cv_header_libxml_xmlreader_h" "$ac_includes_default"
+if test "x$ac_cv_header_libxml_xmlreader_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBXML_XMLREADER_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "libxml/xmlwriter.h" "ac_cv_header_libxml_xmlwriter_h" "$ac_includes_default"
+if test "x$ac_cv_header_libxml_xmlwriter_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBXML_XMLWRITER_H 1" >>confdefs.h
 
-done
+fi
 
 fi
 if test "x$ac_cv_header_libxml_xmlreader_h" != "xyes"; then
   if test "x$with_expat" != "xno"; then
-    for ac_header in expat.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default"
-if test "x$ac_cv_header_expat_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_EXPAT_H 1
-_ACEOF
+    ac_fn_c_check_header_compile "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default"
+if test "x$ac_cv_header_expat_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_EXPAT_H 1" >>confdefs.h
 
 fi
 
-done
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML_ParserCreate in -lexpat" >&5
-$as_echo_n "checking for XML_ParserCreate in -lexpat... " >&6; }
-if ${ac_cv_lib_expat_XML_ParserCreate+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XML_ParserCreate in -lexpat" >&5
+printf %s "checking for XML_ParserCreate in -lexpat... " >&6; }
+if test ${ac_cv_lib_expat_XML_ParserCreate+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lexpat  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16147,33 +17138,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char XML_ParserCreate ();
 int
-main ()
+main (void)
 {
 return XML_ParserCreate ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_expat_XML_ParserCreate=yes
-else
+else $as_nop
   ac_cv_lib_expat_XML_ParserCreate=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_expat_XML_ParserCreate" >&5
-$as_echo "$ac_cv_lib_expat_XML_ParserCreate" >&6; }
-if test "x$ac_cv_lib_expat_XML_ParserCreate" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBEXPAT 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_expat_XML_ParserCreate" >&5
+printf "%s\n" "$ac_cv_lib_expat_XML_ParserCreate" >&6; }
+if test "x$ac_cv_lib_expat_XML_ParserCreate" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBEXPAT 1" >>confdefs.h
 
   LIBS="-lexpat $LIBS"
 
 fi
 
 # Check whether --enable-posix-regex-lib was given.
-if test "${enable_posix_regex_lib+set}" = set; then :
+if test ${enable_posix_regex_lib+y}
+then :
   enableval=$enable_posix_regex_lib;
-else
+else $as_nop
   enable_posix_regex_lib=auto
 fi
 
 
 posix_regex_lib_found=
 if test "$enable_posix_regex_lib" = "auto" || test "$enable_posix_regex_lib" = "libc" || test "$enable_posix_regex_lib" = "libregex"; then
-  for ac_header in regex.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "regex.h" "ac_cv_header_regex_h" "$ac_includes_default"
-if test "x$ac_cv_header_regex_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_REGEX_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "regex.h" "ac_cv_header_regex_h" "$ac_includes_default"
+if test "x$ac_cv_header_regex_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_REGEX_H 1" >>confdefs.h
 
 fi
 
-done
-
   if test "x$ac_cv_header_regex_h" != "xno"; then
     ac_fn_c_check_func "$LINENO" "regcomp" "ac_cv_func_regcomp"
-if test "x$ac_cv_func_regcomp" = xyes; then :
+if test "x$ac_cv_func_regcomp" = xyes
+then :
 
 fi
 
     if test "x$ac_cv_func_regcomp" = xyes; then
       posix_regex_lib_found=1
     else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcomp in -lregex" >&5
-$as_echo_n "checking for regcomp in -lregex... " >&6; }
-if ${ac_cv_lib_regex_regcomp+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for regcomp in -lregex" >&5
+printf %s "checking for regcomp in -lregex... " >&6; }
+if test ${ac_cv_lib_regex_regcomp+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lregex  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16226,33 +17212,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char regcomp ();
 int
-main ()
+main (void)
 {
 return regcomp ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_regex_regcomp=yes
-else
+else $as_nop
   ac_cv_lib_regex_regcomp=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_regex_regcomp" >&5
-$as_echo "$ac_cv_lib_regex_regcomp" >&6; }
-if test "x$ac_cv_lib_regex_regcomp" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBREGEX 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_regex_regcomp" >&5
+printf "%s\n" "$ac_cv_lib_regex_regcomp" >&6; }
+if test "x$ac_cv_lib_regex_regcomp" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBREGEX 1" >>confdefs.h
 
   LIBS="-lregex $LIBS"
 
   fi
 fi
 if test -z $posix_regex_lib_found && (test "$enable_posix_regex_lib" = "auto" || test "$enable_posix_regex_lib" = "libpcreposix"); then
-  for ac_header in pcreposix.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "pcreposix.h" "ac_cv_header_pcreposix_h" "$ac_includes_default"
-if test "x$ac_cv_header_pcreposix_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_PCREPOSIX_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "pcreposix.h" "ac_cv_header_pcreposix_h" "$ac_includes_default"
+if test "x$ac_cv_header_pcreposix_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_PCREPOSIX_H 1" >>confdefs.h
 
 fi
 
-done
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcomp in -lpcreposix" >&5
-$as_echo_n "checking for regcomp in -lpcreposix... " >&6; }
-if ${ac_cv_lib_pcreposix_regcomp+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for regcomp in -lpcreposix" >&5
+printf %s "checking for regcomp in -lpcreposix... " >&6; }
+if test ${ac_cv_lib_pcreposix_regcomp+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpcreposix  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16290,47 +17269,45 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char regcomp ();
 int
-main ()
+main (void)
 {
 return regcomp ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_pcreposix_regcomp=yes
-else
+else $as_nop
   ac_cv_lib_pcreposix_regcomp=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcreposix_regcomp" >&5
-$as_echo "$ac_cv_lib_pcreposix_regcomp" >&6; }
-if test "x$ac_cv_lib_pcreposix_regcomp" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPCREPOSIX 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcreposix_regcomp" >&5
+printf "%s\n" "$ac_cv_lib_pcreposix_regcomp" >&6; }
+if test "x$ac_cv_lib_pcreposix_regcomp" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBPCREPOSIX 1" >>confdefs.h
 
   LIBS="-lpcreposix $LIBS"
 
 fi
 
   if test "x$ac_cv_lib_pcreposix_regcomp" != xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: trying libpcreposix check again with libpcre" >&5
-$as_echo "$as_me: trying libpcreposix check again with libpcre" >&6;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying libpcreposix check again with libpcre" >&5
+printf "%s\n" "$as_me: trying libpcreposix check again with libpcre" >&6;}
        unset ac_cv_lib_pcreposix_regcomp
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pcre_exec in -lpcre" >&5
-$as_echo_n "checking for pcre_exec in -lpcre... " >&6; }
-if ${ac_cv_lib_pcre_pcre_exec+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pcre_exec in -lpcre" >&5
+printf %s "checking for pcre_exec in -lpcre... " >&6; }
+if test ${ac_cv_lib_pcre_pcre_exec+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpcre  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16339,43 +17316,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char pcre_exec ();
 int
-main ()
+main (void)
 {
 return pcre_exec ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_pcre_pcre_exec=yes
-else
+else $as_nop
   ac_cv_lib_pcre_pcre_exec=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre_pcre_exec" >&5
-$as_echo "$ac_cv_lib_pcre_pcre_exec" >&6; }
-if test "x$ac_cv_lib_pcre_pcre_exec" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPCRE 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre_pcre_exec" >&5
+printf "%s\n" "$ac_cv_lib_pcre_pcre_exec" >&6; }
+if test "x$ac_cv_lib_pcre_pcre_exec" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBPCRE 1" >>confdefs.h
 
   LIBS="-lpcre $LIBS"
 
 fi
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcomp in -lpcreposix" >&5
-$as_echo_n "checking for regcomp in -lpcreposix... " >&6; }
-if ${ac_cv_lib_pcreposix_regcomp+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for regcomp in -lpcreposix" >&5
+printf %s "checking for regcomp in -lpcreposix... " >&6; }
+if test ${ac_cv_lib_pcreposix_regcomp+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpcreposix  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -16383,53 +17358,51 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
+   builtin and then its argument prototype would still apply.  */
 char regcomp ();
 int
-main ()
+main (void)
 {
 return regcomp ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_pcreposix_regcomp=yes
-else
+else $as_nop
   ac_cv_lib_pcreposix_regcomp=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcreposix_regcomp" >&5
-$as_echo "$ac_cv_lib_pcreposix_regcomp" >&6; }
-if test "x$ac_cv_lib_pcreposix_regcomp" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPCREPOSIX 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcreposix_regcomp" >&5
+printf "%s\n" "$ac_cv_lib_pcreposix_regcomp" >&6; }
+if test "x$ac_cv_lib_pcreposix_regcomp" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBPCREPOSIX 1" >>confdefs.h
 
   LIBS="-lpcreposix $LIBS"
 
 fi
 
     if test "x$ac_cv_lib_pcre_pcre_exec" = xyes && test "x$ac_cv_lib_pcreposix_regcomp" = xyes; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if PCRE_STATIC needs to be defined" >&5
-$as_echo_n "checking if PCRE_STATIC needs to be defined... " >&6; }
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if PCRE_STATIC needs to be defined" >&5
+printf %s "checking if PCRE_STATIC needs to be defined... " >&6; }
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pcreposix.h>
           int main() { return regcomp(NULL, NULL, 0); }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   without_pcre_static=yes
-else
+else $as_nop
   without_pcre_static=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -16437,22 +17410,23 @@ rm -f core conftest.err conftest.$ac_objext \
           #include <pcreposix.h>
           int main() { return regcomp(NULL, NULL, 0); }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   with_pcre_static=yes
-else
+else $as_nop
   with_pcre_static=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
       if test "x$without_pcre_static" != xyes && test "x$with_pcre_static" = xyes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
 
-$as_echo "#define PCRE_STATIC 1" >>confdefs.h
+printf "%s\n" "#define PCRE_STATIC 1" >>confdefs.h
 
       elif test "x$without_pcre_static" = xyes || test "x$with_pcre_static" = xyes; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
       fi
       posix_regex_lib_found=1
     fi
 
 
 for flag in -Wall -Wformat -Wformat-security; do
-  as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
-$as_echo_n "checking whether C compiler accepts $flag... " >&6; }
-if eval \${$as_CACHEVAR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
   ax_check_save_flags=$CFLAGS
   CFLAGS="$CFLAGS  $flag"
@@ -16487,75 +17462,184 @@ else
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$as_CACHEVAR=yes"
-else
+else $as_nop
   eval "$as_CACHEVAR=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   CFLAGS=$ax_check_save_flags
 fi
 eval ac_res=\$$as_CACHEVAR
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then :
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
 
-if ${CFLAGS+:} false; then :
+if test ${CFLAGS+y}
+then :
 
   case " $CFLAGS " in #(
   *" $flag "*) :
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5
   (: CFLAGS already contains $flag) 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } ;; #(
   *) :
 
      as_fn_append CFLAGS " $flag"
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5
   (: CFLAGS="$CFLAGS") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
      ;;
 esac
 
-else
+else $as_nop
 
   CFLAGS=$flag
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5
+  { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5
   (: CFLAGS="$CFLAGS") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 
 fi
 
-else
+else $as_nop
+  :
+fi
+
+done
+
+
+# Place the functions and data into separate sections, allowing the linker
+# to garbage collect the unused ones.
+save_LDFLAGS=$LDFLAGS
+LDFLAGS="$LDFLAGS -Wl,--gc-sections"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ld supports --gc-sections" >&5
+printf %s "checking whether ld supports --gc-sections... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+static char UnusedFunc() { return 5; } int main() { return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+        GC_SECTIONS="-Wl,--gc-sections";
+
+
+
+
+for flag in -ffunction-sections -fdata-sections; do
+  as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  $flag"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main (void)
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  eval "$as_CACHEVAR=yes"
+else $as_nop
+  eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${CFLAGS+y}
+then :
+
+  case " $CFLAGS " in #(
+  *" $flag "*) :
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5
+  (: CFLAGS already contains $flag) 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } ;; #(
+  *) :
+
+     as_fn_append CFLAGS " $flag"
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5
+  (: CFLAGS="$CFLAGS") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+     ;;
+esac
+
+else $as_nop
+
+  CFLAGS=$flag
+  { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5
+  (: CFLAGS="$CFLAGS") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+
+fi
+
+else $as_nop
   :
 fi
 
 done
 
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+        GC_SECTIONS="";
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
+LDFLAGS=$save_LDFLAGS
+
+
 
 # Checks for typedefs, structures, and compiler characteristics.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+printf %s "checking for an ANSI C-conforming const... " >&6; }
+if test ${ac_cv_c_const+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
 #ifndef __cplusplus
@@ -16568,7 +17652,7 @@ main ()
   /* NEC SVR4.0.2 mips cc rejects this.  */
   struct point {int x, y;};
   static struct point const zero = {0,0};
-  /* AIX XL C 1.02.0.0 rejects this.
+  /* IBM XL C 1.02.0.0 rejects this.
      It does not let you subtract one const X* pointer from another in
      an arm of an if-expression whose if-part is not a constant
      expression */
@@ -16596,7 +17680,7 @@ main ()
     iptr p = 0;
     ++p;
   }
-  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+  { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying
        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
     struct s { int j; const int *ap[3]; } bx;
     struct s *b = &bx; b->j = 5;
@@ -16612,115 +17696,109 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_const=yes
-else
+else $as_nop
   ac_cv_c_const=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+printf "%s\n" "$ac_cv_c_const" >&6; }
 if test $ac_cv_c_const = no; then
 
-$as_echo "#define const /**/" >>confdefs.h
+printf "%s\n" "#define const /**/" >>confdefs.h
 
 fi
 
 # la_TYPE_UID_T defaults to "int", which is incorrect for MinGW
 # and MSVC. Use a customized version.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
-$as_echo_n "checking for uid_t in sys/types.h... " >&6; }
-if ${la_cv_type_uid_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+printf %s "checking for uid_t in sys/types.h... " >&6; }
+if test ${la_cv_type_uid_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "uid_t" >/dev/null 2>&1; then :
+  $EGREP "uid_t" >/dev/null 2>&1
+then :
   la_cv_type_uid_t=yes
-else
+else $as_nop
   la_cv_type_uid_t=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $la_cv_type_uid_t" >&5
-$as_echo "$la_cv_type_uid_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $la_cv_type_uid_t" >&5
+printf "%s\n" "$la_cv_type_uid_t" >&6; }
 if test $la_cv_type_uid_t = no; then
   case $host in
     *mingw*) def_uid_t=short ;;
     *) def_uid_t=int ;;
   esac
 
-cat >>confdefs.h <<_ACEOF
-#define uid_t $def_uid_t
-_ACEOF
+printf "%s\n" "#define uid_t $def_uid_t" >>confdefs.h
 
 
-cat >>confdefs.h <<_ACEOF
-#define gid_t $def_uid_t
-_ACEOF
+printf "%s\n" "#define gid_t $def_uid_t" >>confdefs.h
 
 fi
 
 ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
-if test "x$ac_cv_type_mode_t" = xyes; then :
+if test "x$ac_cv_type_mode_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define mode_t int
-_ACEOF
+printf "%s\n" "#define mode_t int" >>confdefs.h
 
 fi
 
 # AC_TYPE_OFF_T defaults to "long", which limits us to 4GB files on
 # most systems... default to "long long" instead.
 ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = xyes; then :
+if test "x$ac_cv_type_off_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define off_t long long
-_ACEOF
+printf "%s\n" "#define off_t long long" >>confdefs.h
 
 fi
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
+if test "x$ac_cv_type_size_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
+printf "%s\n" "#define size_t unsigned int" >>confdefs.h
 
 fi
 
 ac_fn_c_check_type "$LINENO" "id_t" "ac_cv_type_id_t" "$ac_includes_default"
-if test "x$ac_cv_type_id_t" = xyes; then :
+if test "x$ac_cv_type_id_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define id_t unsigned long
-_ACEOF
+printf "%s\n" "#define id_t unsigned long" >>confdefs.h
 
 fi
 
 ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
-if test "x$ac_cv_type_uintptr_t" = xyes; then :
+if test "x$ac_cv_type_uintptr_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define uintptr_t unsigned int
-_ACEOF
+printf "%s\n" "#define uintptr_t unsigned int" >>confdefs.h
 
 fi
 
@@ -16730,11 +17808,10 @@ ac_fn_c_check_member "$LINENO" "struct tm" "tm_gmtoff" "ac_cv_member_struct_tm_t
 #include <time.h>
 
 "
-if test "x$ac_cv_member_struct_tm_tm_gmtoff" = xyes; then :
+if test "x$ac_cv_member_struct_tm_tm_gmtoff" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_TM_TM_GMTOFF 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_TM_TM_GMTOFF 1" >>confdefs.h
 
 
 fi
@@ -16742,11 +17819,10 @@ ac_fn_c_check_member "$LINENO" "struct tm" "__tm_gmtoff" "ac_cv_member_struct_tm
 #include <time.h>
 
 "
-if test "x$ac_cv_member_struct_tm___tm_gmtoff" = xyes; then :
+if test "x$ac_cv_member_struct_tm___tm_gmtoff" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_TM___TM_GMTOFF 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_TM___TM_GMTOFF 1" >>confdefs.h
 
 
 fi
@@ -16758,11 +17834,10 @@ ac_fn_c_check_member "$LINENO" "struct statfs" "f_namemax" "ac_cv_member_struct_
 #include <sys/mount.h>
 
 "
-if test "x$ac_cv_member_struct_statfs_f_namemax" = xyes; then :
+if test "x$ac_cv_member_struct_statfs_f_namemax" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STATFS_F_NAMEMAX 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STATFS_F_NAMEMAX 1" >>confdefs.h
 
 
 fi
@@ -16774,11 +17849,10 @@ ac_fn_c_check_member "$LINENO" "struct statfs" "f_iosize" "ac_cv_member_struct_s
 #include <sys/mount.h>
 
 "
-if test "x$ac_cv_member_struct_statfs_f_iosize" = xyes; then :
+if test "x$ac_cv_member_struct_statfs_f_iosize" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STATFS_F_IOSIZE 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STATFS_F_IOSIZE 1" >>confdefs.h
 
 
 fi
@@ -16789,11 +17863,10 @@ ac_fn_c_check_member "$LINENO" "struct statvfs" "f_iosize" "ac_cv_member_struct_
 #include <sys/statvfs.h>
 
 "
-if test "x$ac_cv_member_struct_statvfs_f_iosize" = xyes; then :
+if test "x$ac_cv_member_struct_statvfs_f_iosize" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STATVFS_F_IOSIZE 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STATVFS_F_IOSIZE 1" >>confdefs.h
 
 
 fi
 
 # Check for birthtime in struct stat
 ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtime" "ac_cv_member_struct_stat_st_birthtime" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_birthtime" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_birthtime" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIME 1" >>confdefs.h
 
 
 fi
 
 # Check for high-resolution timestamps in struct stat
 ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec.tv_nsec" "ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1" >>confdefs.h
 
 
 fi
 
 ac_fn_c_check_member "$LINENO" "struct stat" "st_mtimespec.tv_nsec" "ac_cv_member_struct_stat_st_mtimespec_tv_nsec" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_mtimespec_tv_nsec" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_mtimespec_tv_nsec" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC 1" >>confdefs.h
 
 
 fi
 
 ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim.tv_nsec" "ac_cv_member_struct_stat_st_mtim_tv_nsec" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_mtim_tv_nsec" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_mtim_tv_nsec" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1" >>confdefs.h
 
 
 fi
 
 ac_fn_c_check_member "$LINENO" "struct stat" "st_mtime_n" "ac_cv_member_struct_stat_st_mtime_n" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_mtime_n" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_mtime_n" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_MTIME_N 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_MTIME_N 1" >>confdefs.h
 
 
 fi
  # AIX
 ac_fn_c_check_member "$LINENO" "struct stat" "st_umtime" "ac_cv_member_struct_stat_st_umtime" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_umtime" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_umtime" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_UMTIME 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_UMTIME 1" >>confdefs.h
 
 
 fi
  # Tru64
 ac_fn_c_check_member "$LINENO" "struct stat" "st_mtime_usec" "ac_cv_member_struct_stat_st_mtime_usec" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_mtime_usec" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_mtime_usec" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_MTIME_USEC 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_MTIME_USEC 1" >>confdefs.h
 
 
 fi
  # Hurd
 # Check for block size support in struct stat
 ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_blksize" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLKSIZE 1" >>confdefs.h
 
 
 fi
 
 # Check for st_flags in struct stat (BSD fflags)
 ac_fn_c_check_member "$LINENO" "struct stat" "st_flags" "ac_cv_member_struct_stat_st_flags" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_flags" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_flags" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_FLAGS 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_FLAGS 1" >>confdefs.h
 
 
 fi
 # If you have unsigned long long, we assume printf supports %llu
 # TODO: Check for %ju and %llu support directly.
 ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default"
-if test "x$ac_cv_type_uintmax_t" = xyes; then :
+if test "x$ac_cv_type_uintmax_t" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UINTMAX_T 1
-_ACEOF
+printf "%s\n" "#define HAVE_UINTMAX_T 1" >>confdefs.h
 
 
 fi
 ac_fn_c_check_type "$LINENO" "unsigned long long" "ac_cv_type_unsigned_long_long" "$ac_includes_default"
-if test "x$ac_cv_type_unsigned_long_long" = xyes; then :
+if test "x$ac_cv_type_unsigned_long_long" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UNSIGNED_LONG_LONG 1
-_ACEOF
+printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG 1" >>confdefs.h
 
 
 fi
 # We use C99-style integer types
 # Declare them if the local platform doesn't already do so.
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
-$as_echo_n "checking for unsigned long long int... " >&6; }
-if ${ac_cv_type_unsigned_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+printf %s "checking for unsigned long long int... " >&6; }
+if test ${ac_cv_type_unsigned_long_long_int+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_type_unsigned_long_long_int=yes
-     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+     case $ac_prog_cc_stdc in
+       no | c89) ;;
+       *)
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
   /* For now, do not test the preprocessor; as of 2007 there are too many
@@ -16946,7 +18011,7 @@ else
                     ? 1 : -1)];
       int i = 63;
 int
-main ()
+main (void)
 {
 /* Test availability of runtime routines for shift and division.  */
       long long int llmax = 9223372036854775807ll;
@@ -16960,98 +18025,103 @@ main ()
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
-else
+else $as_nop
   ac_cv_type_unsigned_long_long_int=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext;;
+     esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
-$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+printf "%s\n" "$ac_cv_type_unsigned_long_long_int" >&6; }
   if test $ac_cv_type_unsigned_long_long_int = yes; then
 
-$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
 
   fi
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
-$as_echo_n "checking for long long int... " >&6; }
-if ${ac_cv_type_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
+printf %s "checking for long long int... " >&6; }
+if test ${ac_cv_type_long_long_int+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_type_long_long_int=yes
-      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
-       if test $ac_cv_type_long_long_int = yes; then
-                                 if test "$cross_compiling" = yes; then :
+      case $ac_prog_cc_stdc in
+       no | c89) ;;
+       *)
+         ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+         if test $ac_cv_type_long_long_int = yes; then
+                                   if test "$cross_compiling" = yes
+then :
   :
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <limits.h>
-                #ifndef LLONG_MAX
-                # define HALF \
-                         (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-                # define LLONG_MAX (HALF - 1 + HALF)
-                #endif
+                  #ifndef LLONG_MAX
+                  # define HALF \
+                           (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                  # define LLONG_MAX (HALF - 1 + HALF)
+                  #endif
 int
-main ()
+main (void)
 {
 long long int n = 1;
-                int i;
-                for (i = 0; ; i++)
-                  {
-                    long long int m = n << i;
-                    if (m >> i != n)
-                      return 1;
-                    if (LLONG_MAX / 2 < m)
-                      break;
-                  }
-                return 0;
+                  int i;
+                  for (i = 0; ; i++)
+                    {
+                      long long int m = n << i;
+                      if (m >> i != n)
+                        return 1;
+                      if (LLONG_MAX / 2 < m)
+                        break;
+                    }
+                  return 0;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
 
-else
+else $as_nop
   ac_cv_type_long_long_int=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-       fi
-      fi
+         fi;;
+      esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
-$as_echo "$ac_cv_type_long_long_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
+printf "%s\n" "$ac_cv_type_long_long_int" >&6; }
   if test $ac_cv_type_long_long_int = yes; then
 
-$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
 
   fi
 
 
 
   ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default"
-if test "x$ac_cv_type_intmax_t" = xyes; then :
+if test "x$ac_cv_type_intmax_t" = xyes
+then :
 
-$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_INTMAX_T 1" >>confdefs.h
 
-else
+else $as_nop
   test $ac_cv_type_long_long_int = yes \
        && ac_type='long long int' \
        || ac_type='long int'
 
-cat >>confdefs.h <<_ACEOF
-#define intmax_t $ac_type
-_ACEOF
+printf "%s\n" "#define intmax_t $ac_type" >>confdefs.h
 
 fi
 
 
 
   ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default"
-if test "x$ac_cv_type_uintmax_t" = xyes; then :
+if test "x$ac_cv_type_uintmax_t" = xyes
+then :
 
-$as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_UINTMAX_T 1" >>confdefs.h
 
-else
+else $as_nop
   test $ac_cv_type_unsigned_long_long_int = yes \
        && ac_type='unsigned long long int' \
        || ac_type='unsigned long int'
 
-cat >>confdefs.h <<_ACEOF
-#define uintmax_t $ac_type
-_ACEOF
+printf "%s\n" "#define uintmax_t $ac_type" >>confdefs.h
 
 fi
 
@@ -17080,9 +18149,7 @@ case $ac_cv_c_int64_t in #(
   no|yes) ;; #(
   *)
 
-cat >>confdefs.h <<_ACEOF
-#define int64_t $ac_cv_c_int64_t
-_ACEOF
+printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h
 ;;
 esac
 
@@ -17091,12 +18158,10 @@ case $ac_cv_c_uint64_t in #(
   no|yes) ;; #(
   *)
 
-$as_echo "#define _UINT64_T 1" >>confdefs.h
+printf "%s\n" "#define _UINT64_T 1" >>confdefs.h
 
 
-cat >>confdefs.h <<_ACEOF
-#define uint64_t $ac_cv_c_uint64_t
-_ACEOF
+printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h
 ;;
   esac
 
@@ -17105,9 +18170,7 @@ case $ac_cv_c_int32_t in #(
   no|yes) ;; #(
   *)
 
-cat >>confdefs.h <<_ACEOF
-#define int32_t $ac_cv_c_int32_t
-_ACEOF
+printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h
 ;;
 esac
 
@@ -17116,12 +18179,10 @@ case $ac_cv_c_uint32_t in #(
   no|yes) ;; #(
   *)
 
-$as_echo "#define _UINT32_T 1" >>confdefs.h
+printf "%s\n" "#define _UINT32_T 1" >>confdefs.h
 
 
-cat >>confdefs.h <<_ACEOF
-#define uint32_t $ac_cv_c_uint32_t
-_ACEOF
+printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h
 ;;
   esac
 
@@ -17130,9 +18191,7 @@ case $ac_cv_c_int16_t in #(
   no|yes) ;; #(
   *)
 
-cat >>confdefs.h <<_ACEOF
-#define int16_t $ac_cv_c_int16_t
-_ACEOF
+printf "%s\n" "#define int16_t $ac_cv_c_int16_t" >>confdefs.h
 ;;
 esac
 
@@ -17142,9 +18201,7 @@ case $ac_cv_c_uint16_t in #(
   *)
 
 
-cat >>confdefs.h <<_ACEOF
-#define uint16_t $ac_cv_c_uint16_t
-_ACEOF
+printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h
 ;;
   esac
 
@@ -17153,166 +18210,225 @@ case $ac_cv_c_uint8_t in #(
   no|yes) ;; #(
   *)
 
-$as_echo "#define _UINT8_T 1" >>confdefs.h
+printf "%s\n" "#define _UINT8_T 1" >>confdefs.h
 
 
-cat >>confdefs.h <<_ACEOF
-#define uint8_t $ac_cv_c_uint8_t
-_ACEOF
+printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h
 ;;
   esac
 
 
-ac_fn_c_check_decl "$LINENO" "SIZE_MAX" "ac_cv_have_decl_SIZE_MAX" "$ac_includes_default"
-if test "x$ac_cv_have_decl_SIZE_MAX" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
+printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
+if test ${ac_cv_c_undeclared_builtin_options+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_save_CFLAGS=$CFLAGS
+   ac_cv_c_undeclared_builtin_options='cannot detect'
+   for ac_arg in '' -fno-builtin; do
+     CFLAGS="$ac_save_CFLAGS $ac_arg"
+     # This test program should *not* compile successfully.
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main (void)
+{
+(void) strchr;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+  # This test program should compile successfully.
+        # No library function is consistently available on
+        # freestanding implementations, so test against a dummy
+        # declaration.  Include always-available headers on the
+        # off chance that they somehow elicit warnings.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stddef.h>
+extern void ac_decl (int, char *);
+
+int
+main (void)
+{
+(void) ac_decl (0, (char *) 0);
+  (void) ac_decl;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  if test x"$ac_arg" = x
+then :
+  ac_cv_c_undeclared_builtin_options='none needed'
+else $as_nop
+  ac_cv_c_undeclared_builtin_options=$ac_arg
+fi
+          break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+    done
+    CFLAGS=$ac_save_CFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
+printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
+  case $ac_cv_c_undeclared_builtin_options in #(
+  'cannot detect') :
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot make $CC report undeclared builtins
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+  'none needed') :
+    ac_c_undeclared_builtin_options='' ;; #(
+  *) :
+    ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;;
+esac
+
+ac_fn_check_decl "$LINENO" "SIZE_MAX" "ac_cv_have_decl_SIZE_MAX" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SIZE_MAX" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SIZE_MAX $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "INT32_MAX" "ac_cv_have_decl_INT32_MAX" "$ac_includes_default"
-if test "x$ac_cv_have_decl_INT32_MAX" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_SIZE_MAX $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "INT32_MAX" "ac_cv_have_decl_INT32_MAX" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_INT32_MAX" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_INT32_MAX $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "INT32_MIN" "ac_cv_have_decl_INT32_MIN" "$ac_includes_default"
-if test "x$ac_cv_have_decl_INT32_MIN" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_INT32_MAX $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "INT32_MIN" "ac_cv_have_decl_INT32_MIN" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_INT32_MIN" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_INT32_MIN $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_INT32_MIN $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "INT64_MAX" "ac_cv_have_decl_INT64_MAX" "$ac_includes_default"
-if test "x$ac_cv_have_decl_INT64_MAX" = xyes; then :
+ac_fn_check_decl "$LINENO" "INT64_MAX" "ac_cv_have_decl_INT64_MAX" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_INT64_MAX" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_INT64_MAX $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "INT64_MIN" "ac_cv_have_decl_INT64_MIN" "$ac_includes_default"
-if test "x$ac_cv_have_decl_INT64_MIN" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_INT64_MAX $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "INT64_MIN" "ac_cv_have_decl_INT64_MIN" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_INT64_MIN" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_INT64_MIN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "UINT64_MAX" "ac_cv_have_decl_UINT64_MAX" "$ac_includes_default"
-if test "x$ac_cv_have_decl_UINT64_MAX" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_INT64_MIN $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "UINT64_MAX" "ac_cv_have_decl_UINT64_MAX" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_UINT64_MAX" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_UINT64_MAX $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "UINT32_MAX" "ac_cv_have_decl_UINT32_MAX" "$ac_includes_default"
-if test "x$ac_cv_have_decl_UINT32_MAX" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_UINT64_MAX $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "UINT32_MAX" "ac_cv_have_decl_UINT32_MAX" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_UINT32_MAX" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_UINT32_MAX $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_UINT32_MAX $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "INTMAX_MAX" "ac_cv_have_decl_INTMAX_MAX" "$ac_includes_default"
-if test "x$ac_cv_have_decl_INTMAX_MAX" = xyes; then :
+ac_fn_check_decl "$LINENO" "INTMAX_MAX" "ac_cv_have_decl_INTMAX_MAX" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_INTMAX_MAX" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_INTMAX_MAX $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "INTMAX_MIN" "ac_cv_have_decl_INTMAX_MIN" "$ac_includes_default"
-if test "x$ac_cv_have_decl_INTMAX_MIN" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_INTMAX_MAX $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "INTMAX_MIN" "ac_cv_have_decl_INTMAX_MIN" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_INTMAX_MIN" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_INTMAX_MIN $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "UINTMAX_MAX" "ac_cv_have_decl_UINTMAX_MAX" "$ac_includes_default"
-if test "x$ac_cv_have_decl_UINTMAX_MAX" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_INTMAX_MIN $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "UINTMAX_MAX" "ac_cv_have_decl_UINTMAX_MAX" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_UINTMAX_MAX" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_UINTMAX_MAX $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_UINTMAX_MAX $ac_have_decl" >>confdefs.h
 
 
-ac_fn_c_check_decl "$LINENO" "SSIZE_MAX" "ac_cv_have_decl_SSIZE_MAX" "#include <limits.h>
-"
-if test "x$ac_cv_have_decl_SSIZE_MAX" = xyes; then :
+ac_fn_check_decl "$LINENO" "SSIZE_MAX" "ac_cv_have_decl_SSIZE_MAX" "#include <limits.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SSIZE_MAX" = xyes
+then :
 
-$as_echo "#define HAVE_DECL_SSIZE_MAX 1" >>confdefs.h
+printf "%s\n" "#define HAVE_DECL_SSIZE_MAX 1" >>confdefs.h
 
 fi
 
+ac_fn_check_decl "$LINENO" "EFTYPE" "ac_cv_have_decl_EFTYPE" "#include <errno.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_EFTYPE" = xyes
+then :
 
-ac_fn_c_check_decl "$LINENO" "EFTYPE" "ac_cv_have_decl_EFTYPE" "#include <errno.h>
-"
-if test "x$ac_cv_have_decl_EFTYPE" = xyes; then :
-
-$as_echo "#define HAVE_EFTYPE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_EFTYPE 1" >>confdefs.h
 
 fi
+ac_fn_check_decl "$LINENO" "EILSEQ" "ac_cv_have_decl_EILSEQ" "#include <errno.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_EILSEQ" = xyes
+then :
 
-ac_fn_c_check_decl "$LINENO" "EILSEQ" "ac_cv_have_decl_EILSEQ" "#include <errno.h>
-"
-if test "x$ac_cv_have_decl_EILSEQ" = xyes; then :
-
-$as_echo "#define HAVE_EILSEQ 1" >>confdefs.h
+printf "%s\n" "#define HAVE_EILSEQ 1" >>confdefs.h
 
 fi
-
 ac_fn_c_check_type "$LINENO" "wchar_t" "ac_cv_type_wchar_t" "$ac_includes_default"
-if test "x$ac_cv_type_wchar_t" = xyes; then :
+if test "x$ac_cv_type_wchar_t" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WCHAR_T 1
-_ACEOF
+printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h
                # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5
-$as_echo_n "checking size of wchar_t... " >&6; }
-if ${ac_cv_sizeof_wchar_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t"        "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5
+printf %s "checking size of wchar_t... " >&6; }
+if test ${ac_cv_sizeof_wchar_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_wchar_t" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (wchar_t)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -17321,62 +18437,109 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5
-$as_echo "$ac_cv_sizeof_wchar_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5
+printf "%s\n" "$ac_cv_sizeof_wchar_t" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t
-_ACEOF
+printf "%s\n" "#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t" >>confdefs.h
 
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
-$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if ${ac_cv_header_time+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+printf %s "checking size of int... " >&6; }
+if test ${ac_cv_sizeof_int+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  for ac_size in 4 8 1 2 16  ; do # List sizes in rough order of prevalence.
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
+
 
 int
-main ()
+main (void)
 {
-if ((struct tm *) 0)
-return 0;
+switch (0) case 0: case (sizeof (int) == $ac_size):;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_time=yes
-else
-  ac_cv_header_time=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_sizeof_int=$ac_size
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+  if test x$ac_cv_sizeof_int != x ; then break; fi
+done
+
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test x$ac_cv_sizeof_int = x ; then
+  as_fn_error $? "cannot determine a size for int" "$LINENO" 5
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+printf "%s\n" "$ac_cv_sizeof_int" >&6; }
+
+printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+printf %s "checking size of long... " >&6; }
+if test ${ac_cv_sizeof_long+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  for ac_size in 4 8 1 2 16  ; do # List sizes in rough order of prevalence.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/types.h>
+
+
+int
+main (void)
+{
+switch (0) case 0: case (sizeof (long) == $ac_size):;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_sizeof_long=$ac_size
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
-$as_echo "$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+  if test x$ac_cv_sizeof_long != x ; then break; fi
+done
 
-$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+fi
 
+if test x$ac_cv_sizeof_long = x ; then
+  as_fn_error $? "cannot determine a size for long" "$LINENO" 5
 fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long" >&6; }
+
+printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h
+
+
+
+
 
 
 # Checks for library functions.
 if test $ac_cv_c_compiler_gnu = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
-$as_echo_n "checking whether $CC needs -traditional... " >&6; }
-if ${ac_cv_prog_gcc_traditional+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
+printf %s "checking whether $CC needs -traditional... " >&6; }
+if test ${ac_cv_prog_gcc_traditional+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
     ac_pattern="Autoconf.*'x'"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -17384,12 +18547,13 @@ else
 Autoconf TIOCGETP
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+  $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
   ac_cv_prog_gcc_traditional=yes
-else
+else $as_nop
   ac_cv_prog_gcc_traditional=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
   if test $ac_cv_prog_gcc_traditional = no; then
@@ -17399,82 +18563,54 @@ rm -f conftest*
 Autoconf TCGETA
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+  $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
   ac_cv_prog_gcc_traditional=yes
 fi
-rm -f conftest*
+rm -rf conftest*
 
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
-$as_echo "$ac_cv_prog_gcc_traditional" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
+printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; }
   if test $ac_cv_prog_gcc_traditional = yes; then
     CC="$CC -traditional"
   fi
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5
-$as_echo_n "checking whether sys/types.h defines makedev... " >&6; }
-if ${ac_cv_header_sys_types_h_makedev+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-int
-main ()
-{
-return makedev(0, 0);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_header_sys_types_h_makedev=yes
-else
-  ac_cv_header_sys_types_h_makedev=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5
-$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; }
 
-if test $ac_cv_header_sys_types_h_makedev = no; then
-ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_mkdev_h" = xyes; then :
+ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mkdev_h" = xyes
+then :
 
-$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h
+printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h
 
 fi
 
+if test $ac_cv_header_sys_mkdev_h = no; then
+  ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sysmacros_h" = xyes
+then :
 
-
-  if test $ac_cv_header_sys_mkdev_h = no; then
-    ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then :
-
-$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h
+printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h
 
 fi
 
-
-  fi
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
-$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
-if ${ac_cv_sys_largefile_source+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+printf %s "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
+if test ${ac_cv_sys_largefile_source+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   while :; do
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h> /* for off_t */
      #include <stdio.h>
 int
-main ()
+main (void)
 {
 int (*fp) (FILE *, off_t, int) = fseeko;
      return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
@@ -17482,10 +18618,11 @@ int (*fp) (FILE *, off_t, int) = fseeko;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_sys_largefile_source=no; break
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -17493,7 +18630,7 @@ rm -f core conftest.err conftest.$ac_objext \
 #include <sys/types.h> /* for off_t */
      #include <stdio.h>
 int
-main ()
+main (void)
 {
 int (*fp) (FILE *, off_t, int) = fseeko;
      return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
@@ -17501,23 +18638,22 @@ int (*fp) (FILE *, off_t, int) = fseeko;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_sys_largefile_source=1; break
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   ac_cv_sys_largefile_source=unknown
   break
 done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5
-$as_echo "$ac_cv_sys_largefile_source" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5
+printf "%s\n" "$ac_cv_sys_largefile_source" >&6; }
 case $ac_cv_sys_largefile_source in #(
   no | unknown) ;;
   *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source
-_ACEOF
+printf "%s\n" "#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source" >>confdefs.h
 ;;
 esac
 rm -rf conftest*
@@ -17527,23 +18663,25 @@ rm -rf conftest*
 # If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
 if test $ac_cv_sys_largefile_source != unknown; then
 
-$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h
+printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
-$as_echo_n "checking for working memcmp... " >&6; }
-if ${ac_cv_func_memcmp_working+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working memcmp" >&5
+printf %s "checking for working memcmp... " >&6; }
+if test ${ac_cv_func_memcmp_working+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   ac_cv_func_memcmp_working=no
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 
   /* Some versions of memcmp are not 8-bit clean.  */
@@ -17574,9 +18712,10 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_func_memcmp_working=yes
-else
+else $as_nop
   ac_cv_func_memcmp_working=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -17584,8 +18723,8 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5
-$as_echo "$ac_cv_func_memcmp_working" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_memcmp_working" >&5
+printf "%s\n" "$ac_cv_func_memcmp_working" >&6; }
 test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
   *" memcmp.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS memcmp.$ac_objext"
@@ -17593,22 +18732,29 @@ test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
 esac
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
-$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
-if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
+printf %s "checking whether lstat correctly handles trailing slash... " >&6; }
+if test ${ac_cv_func_lstat_dereferences_slashed_symlink+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   rm -f conftest.sym conftest.file
 echo >conftest.file
 if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_lstat_dereferences_slashed_symlink=no
-else
+  if test "$cross_compiling" = yes
+then :
+  case "$host_os" in # ((
+                          # Guess yes on glibc systems.
+                  *-gnu*) ac_cv_func_lstat_dereferences_slashed_symlink=yes ;;
+                          # If we don't know, assume the worst.
+                  *)      ac_cv_func_lstat_dereferences_slashed_symlink=no ;;
+                esac
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 struct stat sbuf;
      /* Linux will dereference the symlink and fail, as required by POSIX.
@@ -17619,9 +18765,10 @@ struct stat sbuf;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_func_lstat_dereferences_slashed_symlink=yes
-else
+else $as_nop
   ac_cv_func_lstat_dereferences_slashed_symlink=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 rm -f conftest.sym conftest.file
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
-$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
+printf "%s\n" "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
 
 test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
 
-cat >>confdefs.h <<_ACEOF
-#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
-_ACEOF
+printf "%s\n" "#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1" >>confdefs.h
 
 
 if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
@@ -17655,19 +18800,21 @@ esac
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat accepts an empty string" >&5
-$as_echo_n "checking whether lstat accepts an empty string... " >&6; }
-if ${ac_cv_func_lstat_empty_string_bug+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat accepts an empty string" >&5
+printf %s "checking whether lstat accepts an empty string... " >&6; }
+if test ${ac_cv_func_lstat_empty_string_bug+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   ac_cv_func_lstat_empty_string_bug=yes
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 struct stat sbuf;
   return lstat ("", &sbuf) == 0;
@@ -17675,9 +18822,10 @@ struct stat sbuf;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_func_lstat_empty_string_bug=no
-else
+else $as_nop
   ac_cv_func_lstat_empty_string_bug=yes
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -17685,8 +18833,8 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_empty_string_bug" >&5
-$as_echo "$ac_cv_func_lstat_empty_string_bug" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_empty_string_bug" >&5
+printf "%s\n" "$ac_cv_func_lstat_empty_string_bug" >&6; }
 if test $ac_cv_func_lstat_empty_string_bug = yes; then
   case " $LIBOBJS " in
   *" lstat.$ac_objext "* ) ;;
@@ -17695,25 +18843,25 @@ if test $ac_cv_func_lstat_empty_string_bug = yes; then
 esac
 
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LSTAT_EMPTY_STRING_BUG 1
-_ACEOF
+printf "%s\n" "#define HAVE_LSTAT_EMPTY_STRING_BUG 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5
-$as_echo_n "checking whether stat accepts an empty string... " >&6; }
-if ${ac_cv_func_stat_empty_string_bug+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5
+printf %s "checking whether stat accepts an empty string... " >&6; }
+if test ${ac_cv_func_stat_empty_string_bug+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   ac_cv_func_stat_empty_string_bug=yes
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 struct stat sbuf;
   return stat ("", &sbuf) == 0;
@@ -17721,9 +18869,10 @@ struct stat sbuf;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_func_stat_empty_string_bug=no
-else
+else $as_nop
   ac_cv_func_stat_empty_string_bug=yes
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -17731,8 +18880,8 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5
-$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5
+printf "%s\n" "$ac_cv_func_stat_empty_string_bug" >&6; }
 if test $ac_cv_func_stat_empty_string_bug = yes; then
   case " $LIBOBJS " in
   *" stat.$ac_objext "* ) ;;
@@ -17741,47 +18890,43 @@ if test $ac_cv_func_stat_empty_string_bug = yes; then
 esac
 
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STAT_EMPTY_STRING_BUG 1
-_ACEOF
+printf "%s\n" "#define HAVE_STAT_EMPTY_STRING_BUG 1" >>confdefs.h
 
 fi
 
-ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strerror_r" = xyes; then :
+ac_fn_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strerror_r" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_STRERROR_R $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRERROR_R $ac_have_decl
-_ACEOF
 
-for ac_func in strerror_r
-do :
-  ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r"
-if test "x$ac_cv_func_strerror_r" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STRERROR_R 1
-_ACEOF
+if test $ac_cv_have_decl_strerror_r = yes; then
+  # For backward compatibility's sake, define HAVE_STRERROR_R.
+  # (We used to run AC_CHECK_FUNCS_ONCE for strerror_r, as well
+  # as AC_CHECK_DECLS_ONCE.)
+
+printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h
 
 fi
-done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5
-$as_echo_n "checking whether strerror_r returns char *... " >&6; }
-if ${ac_cv_func_strerror_r_char_p+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5
+printf %s "checking whether strerror_r returns char *... " >&6; }
+if test ${ac_cv_func_strerror_r_char_p+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     ac_cv_func_strerror_r_char_p=no
     if test $ac_cv_have_decl_strerror_r = yes; then
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-$ac_includes_default
+#include <string.h>
 int
-main ()
+main (void)
 {
 
          char buf[100];
@@ -17793,67 +18938,39 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_func_strerror_r_char_p=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    else
-      # strerror_r is not declared.  Choose between
-      # systems that have relatively inaccessible declarations for the
-      # function.  BeOS and DEC UNIX 4.0 fall in this category, but the
-      # former has a strerror_r that returns char*, while the latter
-      # has a strerror_r that returns `int'.
-      # This test should segfault on the DEC system.
-      if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-       extern char *strerror_r ();
-int
-main ()
-{
-char buf[100];
-         char x = *strerror_r (0, buf, sizeof buf);
-         return ! isalpha (x);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_func_strerror_r_char_p=yes
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 
     fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5
-$as_echo "$ac_cv_func_strerror_r_char_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5
+printf "%s\n" "$ac_cv_func_strerror_r_char_p" >&6; }
 if test $ac_cv_func_strerror_r_char_p = yes; then
 
-$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h
+printf "%s\n" "#define STRERROR_R_CHAR_P 1" >>confdefs.h
 
 fi
 
-for ac_func in strftime
+
+  for ac_func in strftime
 do :
   ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
-if test "x$ac_cv_func_strftime" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STRFTIME 1
-_ACEOF
+if test "x$ac_cv_func_strftime" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h
 
-else
+else $as_nop
   # strftime is in -lintl on SCO UNIX.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5
-$as_echo_n "checking for strftime in -lintl... " >&6; }
-if ${ac_cv_lib_intl_strftime+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5
+printf %s "checking for strftime in -lintl... " >&6; }
+if test ${ac_cv_lib_intl_strftime+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lintl  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -17862,66 +18979,72 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char strftime ();
 int
-main ()
+main (void)
 {
 return strftime ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_intl_strftime=yes
-else
+else $as_nop
   ac_cv_lib_intl_strftime=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5
-$as_echo "$ac_cv_lib_intl_strftime" >&6; }
-if test "x$ac_cv_lib_intl_strftime" = xyes; then :
-  $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5
+printf "%s\n" "$ac_cv_lib_intl_strftime" >&6; }
+if test "x$ac_cv_lib_intl_strftime" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h
 
 LIBS="-lintl $LIBS"
 fi
 
 fi
-done
 
-for ac_func in vprintf
-do :
-  ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
-if test "x$ac_cv_func_vprintf" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_VPRINTF 1
-_ACEOF
+done
+ac_func=
+for ac_item in $ac_func_c_list
+do
+  if test $ac_func; then
+    ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func
+    if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then
+      echo "#define $ac_item 1" >> confdefs.h
+    fi
+    ac_func=
+  else
+    ac_func=$ac_item
+  fi
+done
 
-ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
-if test "x$ac_cv_func__doprnt" = xyes; then :
+if test "x$ac_cv_func_vprintf" = xno
+then :
+  ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
+if test "x$ac_cv_func__doprnt" = xyes
+then :
 
-$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_DOPRNT 1" >>confdefs.h
 
 fi
 
 fi
-done
-
-
 # check for:
 #   CreateHardLinkA(LPCSTR, LPCSTR, LPSECURITY_ATTRIBUTES)
 # To avoid necessity for including windows.h or special forward declaration
 # workarounds, we use 'void *' for 'struct SECURITY_ATTRIBUTES *'
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CreateHardLinkA" >&5
-$as_echo_n "checking for CreateHardLinkA... " >&6; }
-if ${ac_cv_func_CreateHardLinkA+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CreateHardLinkA" >&5
+printf %s "checking for CreateHardLinkA... " >&6; }
+if test ${ac_cv_func_CreateHardLinkA+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 /* System header to define __stub macros and hopefully few prototypes,
@@ -17937,7 +19060,7 @@ char __stdcall CreateHardLinkA ( const char *, const char *, void * );
 char (*f) ( const char *, const char *, void * );
 
 int
-main ()
+main (void)
 {
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
@@ -17952,233 +19075,582 @@ f = CreateHardLinkA;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_func_CreateHardLinkA=yes
-else
+else $as_nop
   ac_cv_func_CreateHardLinkA=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_CreateHardLinkA" >&5
-$as_echo "$ac_cv_func_CreateHardLinkA" >&6; }
-if test $ac_cv_func_CreateHardLinkA = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_CreateHardLinkA" >&5
+printf "%s\n" "$ac_cv_func_CreateHardLinkA" >&6; }
+if test $ac_cv_func_CreateHardLinkA = yes
+then :
 
 fi
-for ac_func in arc4random_buf chflags chown chroot ctime_r
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "arc4random_buf" "ac_cv_func_arc4random_buf"
+if test "x$ac_cv_func_arc4random_buf" = xyes
+then :
+  printf "%s\n" "#define HAVE_ARC4RANDOM_BUF 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "chflags" "ac_cv_func_chflags"
+if test "x$ac_cv_func_chflags" = xyes
+then :
+  printf "%s\n" "#define HAVE_CHFLAGS 1" >>confdefs.h
 
-for ac_func in fchdir fchflags fchmod fchown fcntl fdopendir fork
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "chown" "ac_cv_func_chown"
+if test "x$ac_cv_func_chown" = xyes
+then :
+  printf "%s\n" "#define HAVE_CHOWN 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "chroot" "ac_cv_func_chroot"
+if test "x$ac_cv_func_chroot" = xyes
+then :
+  printf "%s\n" "#define HAVE_CHROOT 1" >>confdefs.h
 
-for ac_func in fstat fstatat fstatfs fstatvfs ftruncate
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "ctime_r" "ac_cv_func_ctime_r"
+if test "x$ac_cv_func_ctime_r" = xyes
+then :
+  printf "%s\n" "#define HAVE_CTIME_R 1" >>confdefs.h
 
 fi
-done
 
-for ac_func in futimens futimes futimesat
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "fchdir" "ac_cv_func_fchdir"
+if test "x$ac_cv_func_fchdir" = xyes
+then :
+  printf "%s\n" "#define HAVE_FCHDIR 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "fchflags" "ac_cv_func_fchflags"
+if test "x$ac_cv_func_fchflags" = xyes
+then :
+  printf "%s\n" "#define HAVE_FCHFLAGS 1" >>confdefs.h
 
-for ac_func in geteuid getpid getgrgid_r getgrnam_r
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "fchmod" "ac_cv_func_fchmod"
+if test "x$ac_cv_func_fchmod" = xyes
+then :
+  printf "%s\n" "#define HAVE_FCHMOD 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "fchown" "ac_cv_func_fchown"
+if test "x$ac_cv_func_fchown" = xyes
+then :
+  printf "%s\n" "#define HAVE_FCHOWN 1" >>confdefs.h
 
-for ac_func in getpwnam_r getpwuid_r getvfsbyname gmtime_r
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl"
+if test "x$ac_cv_func_fcntl" = xyes
+then :
+  printf "%s\n" "#define HAVE_FCNTL 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "fdopendir" "ac_cv_func_fdopendir"
+if test "x$ac_cv_func_fdopendir" = xyes
+then :
+  printf "%s\n" "#define HAVE_FDOPENDIR 1" >>confdefs.h
 
-for ac_func in lchflags lchmod lchown link linkat localtime_r lstat lutimes
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "fnmatch" "ac_cv_func_fnmatch"
+if test "x$ac_cv_func_fnmatch" = xyes
+then :
+  printf "%s\n" "#define HAVE_FNMATCH 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "fork" "ac_cv_func_fork"
+if test "x$ac_cv_func_fork" = xyes
+then :
+  printf "%s\n" "#define HAVE_FORK 1" >>confdefs.h
 
-for ac_func in mbrtowc memmove memset
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+ac_fn_c_check_func "$LINENO" "fstat" "ac_cv_func_fstat"
+if test "x$ac_cv_func_fstat" = xyes
+then :
+  printf "%s\n" "#define HAVE_FSTAT 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "fstatat" "ac_cv_func_fstatat"
+if test "x$ac_cv_func_fstatat" = xyes
+then :
+  printf "%s\n" "#define HAVE_FSTATAT 1" >>confdefs.h
 
-for ac_func in mkdir mkfifo mknod mkstemp
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "fstatfs" "ac_cv_func_fstatfs"
+if test "x$ac_cv_func_fstatfs" = xyes
+then :
+  printf "%s\n" "#define HAVE_FSTATFS 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "fstatvfs" "ac_cv_func_fstatvfs"
+if test "x$ac_cv_func_fstatvfs" = xyes
+then :
+  printf "%s\n" "#define HAVE_FSTATVFS 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate"
+if test "x$ac_cv_func_ftruncate" = xyes
+then :
+  printf "%s\n" "#define HAVE_FTRUNCATE 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "futimens" "ac_cv_func_futimens"
+if test "x$ac_cv_func_futimens" = xyes
+then :
+  printf "%s\n" "#define HAVE_FUTIMENS 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "futimes" "ac_cv_func_futimes"
+if test "x$ac_cv_func_futimes" = xyes
+then :
+  printf "%s\n" "#define HAVE_FUTIMES 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "futimesat" "ac_cv_func_futimesat"
+if test "x$ac_cv_func_futimesat" = xyes
+then :
+  printf "%s\n" "#define HAVE_FUTIMESAT 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "geteuid" "ac_cv_func_geteuid"
+if test "x$ac_cv_func_geteuid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETEUID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline"
+if test "x$ac_cv_func_getline" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETLINE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid"
+if test "x$ac_cv_func_getpid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETPID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getgrgid_r" "ac_cv_func_getgrgid_r"
+if test "x$ac_cv_func_getgrgid_r" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETGRGID_R 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getgrnam_r" "ac_cv_func_getgrnam_r"
+if test "x$ac_cv_func_getgrnam_r" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETGRNAM_R 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "getpwnam_r" "ac_cv_func_getpwnam_r"
+if test "x$ac_cv_func_getpwnam_r" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETPWNAM_R 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getpwuid_r" "ac_cv_func_getpwuid_r"
+if test "x$ac_cv_func_getpwuid_r" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETPWUID_R 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getvfsbyname" "ac_cv_func_getvfsbyname"
+if test "x$ac_cv_func_getvfsbyname" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETVFSBYNAME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r"
+if test "x$ac_cv_func_gmtime_r" = xyes
+then :
+  printf "%s\n" "#define HAVE_GMTIME_R 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "lchflags" "ac_cv_func_lchflags"
+if test "x$ac_cv_func_lchflags" = xyes
+then :
+  printf "%s\n" "#define HAVE_LCHFLAGS 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "lchmod" "ac_cv_func_lchmod"
+if test "x$ac_cv_func_lchmod" = xyes
+then :
+  printf "%s\n" "#define HAVE_LCHMOD 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "lchown" "ac_cv_func_lchown"
+if test "x$ac_cv_func_lchown" = xyes
+then :
+  printf "%s\n" "#define HAVE_LCHOWN 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "link" "ac_cv_func_link"
+if test "x$ac_cv_func_link" = xyes
+then :
+  printf "%s\n" "#define HAVE_LINK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "linkat" "ac_cv_func_linkat"
+if test "x$ac_cv_func_linkat" = xyes
+then :
+  printf "%s\n" "#define HAVE_LINKAT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r"
+if test "x$ac_cv_func_localtime_r" = xyes
+then :
+  printf "%s\n" "#define HAVE_LOCALTIME_R 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat"
+if test "x$ac_cv_func_lstat" = xyes
+then :
+  printf "%s\n" "#define HAVE_LSTAT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "lutimes" "ac_cv_func_lutimes"
+if test "x$ac_cv_func_lutimes" = xyes
+then :
+  printf "%s\n" "#define HAVE_LUTIMES 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "mbrtowc" "ac_cv_func_mbrtowc"
+if test "x$ac_cv_func_mbrtowc" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove"
+if test "x$ac_cv_func_memmove" = xyes
+then :
+  printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset"
+if test "x$ac_cv_func_memset" = xyes
+then :
+  printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "mkdir" "ac_cv_func_mkdir"
+if test "x$ac_cv_func_mkdir" = xyes
+then :
+  printf "%s\n" "#define HAVE_MKDIR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo"
+if test "x$ac_cv_func_mkfifo" = xyes
+then :
+  printf "%s\n" "#define HAVE_MKFIFO 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mknod" "ac_cv_func_mknod"
+if test "x$ac_cv_func_mknod" = xyes
+then :
+  printf "%s\n" "#define HAVE_MKNOD 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
+if test "x$ac_cv_func_mkstemp" = xyes
+then :
+  printf "%s\n" "#define HAVE_MKSTEMP 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes
+then :
+  printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "openat" "ac_cv_func_openat"
+if test "x$ac_cv_func_openat" = xyes
+then :
+  printf "%s\n" "#define HAVE_OPENAT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "pipe" "ac_cv_func_pipe"
+if test "x$ac_cv_func_pipe" = xyes
+then :
+  printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll"
+if test "x$ac_cv_func_poll" = xyes
+then :
+  printf "%s\n" "#define HAVE_POLL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "posix_spawnp" "ac_cv_func_posix_spawnp"
+if test "x$ac_cv_func_posix_spawnp" = xyes
+then :
+  printf "%s\n" "#define HAVE_POSIX_SPAWNP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "readlink" "ac_cv_func_readlink"
+if test "x$ac_cv_func_readlink" = xyes
+then :
+  printf "%s\n" "#define HAVE_READLINK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "readlinkat" "ac_cv_func_readlinkat"
+if test "x$ac_cv_func_readlinkat" = xyes
+then :
+  printf "%s\n" "#define HAVE_READLINKAT 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "readpassphrase" "ac_cv_func_readpassphrase"
+if test "x$ac_cv_func_readpassphrase" = xyes
+then :
+  printf "%s\n" "#define HAVE_READPASSPHRASE 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select"
+if test "x$ac_cv_func_select" = xyes
+then :
+  printf "%s\n" "#define HAVE_SELECT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv"
+if test "x$ac_cv_func_setenv" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETENV 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
+if test "x$ac_cv_func_setlocale" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction"
+if test "x$ac_cv_func_sigaction" = xyes
+then :
+  printf "%s\n" "#define HAVE_SIGACTION 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "statfs" "ac_cv_func_statfs"
+if test "x$ac_cv_func_statfs" = xyes
+then :
+  printf "%s\n" "#define HAVE_STATFS 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "statvfs" "ac_cv_func_statvfs"
+if test "x$ac_cv_func_statvfs" = xyes
+then :
+  printf "%s\n" "#define HAVE_STATVFS 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr"
+if test "x$ac_cv_func_strchr" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRCHR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
+if test "x$ac_cv_func_strerror" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strncpy_s" "ac_cv_func_strncpy_s"
+if test "x$ac_cv_func_strncpy_s" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRNCPY_S 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen"
+if test "x$ac_cv_func_strnlen" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRNLEN 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strrchr" "ac_cv_func_strrchr"
+if test "x$ac_cv_func_strrchr" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRRCHR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "symlink" "ac_cv_func_symlink"
+if test "x$ac_cv_func_symlink" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYMLINK 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm"
+if test "x$ac_cv_func_timegm" = xyes
+then :
+  printf "%s\n" "#define HAVE_TIMEGM 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "tzset" "ac_cv_func_tzset"
+if test "x$ac_cv_func_tzset" = xyes
+then :
+  printf "%s\n" "#define HAVE_TZSET 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "unlinkat" "ac_cv_func_unlinkat"
+if test "x$ac_cv_func_unlinkat" = xyes
+then :
+  printf "%s\n" "#define HAVE_UNLINKAT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv"
+if test "x$ac_cv_func_unsetenv" = xyes
+then :
+  printf "%s\n" "#define HAVE_UNSETENV 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "utime" "ac_cv_func_utime"
+if test "x$ac_cv_func_utime" = xyes
+then :
+  printf "%s\n" "#define HAVE_UTIME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "utimensat" "ac_cv_func_utimensat"
+if test "x$ac_cv_func_utimensat" = xyes
+then :
+  printf "%s\n" "#define HAVE_UTIMENSAT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes"
+if test "x$ac_cv_func_utimes" = xyes
+then :
+  printf "%s\n" "#define HAVE_UTIMES 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "vfork" "ac_cv_func_vfork"
+if test "x$ac_cv_func_vfork" = xyes
+then :
+  printf "%s\n" "#define HAVE_VFORK 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb"
+if test "x$ac_cv_func_wcrtomb" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCRTOMB 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "wcscmp" "ac_cv_func_wcscmp"
+if test "x$ac_cv_func_wcscmp" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCSCMP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "wcscpy" "ac_cv_func_wcscpy"
+if test "x$ac_cv_func_wcscpy" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCSCPY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "wcslen" "ac_cv_func_wcslen"
+if test "x$ac_cv_func_wcslen" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCSLEN 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "wctomb" "ac_cv_func_wctomb"
+if test "x$ac_cv_func_wctomb" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCTOMB 1" >>confdefs.h
 
-for ac_func in nl_langinfo openat pipe poll posix_spawnp readlink readlinkat
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "wmemcmp" "ac_cv_func_wmemcmp"
+if test "x$ac_cv_func_wmemcmp" = xyes
+then :
+  printf "%s\n" "#define HAVE_WMEMCMP 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "wmemcpy" "ac_cv_func_wmemcpy"
+if test "x$ac_cv_func_wmemcpy" = xyes
+then :
+  printf "%s\n" "#define HAVE_WMEMCPY 1" >>confdefs.h
 
-for ac_func in readpassphrase
-do :
-  ac_fn_c_check_func "$LINENO" "readpassphrase" "ac_cv_func_readpassphrase"
-if test "x$ac_cv_func_readpassphrase" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_READPASSPHRASE 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "wmemmove" "ac_cv_func_wmemmove"
+if test "x$ac_cv_func_wmemmove" = xyes
+then :
+  printf "%s\n" "#define HAVE_WMEMMOVE 1" >>confdefs.h
 
 fi
-done
 
-for ac_func in select setenv setlocale sigaction statfs statvfs
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "_fseeki64" "ac_cv_func__fseeki64"
+if test "x$ac_cv_func__fseeki64" = xyes
+then :
+  printf "%s\n" "#define HAVE__FSEEKI64 1" >>confdefs.h
 
 fi
-done
-
-for ac_func in strchr strdup strerror strncpy_s strnlen strrchr symlink
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "_get_timezone" "ac_cv_func__get_timezone"
+if test "x$ac_cv_func__get_timezone" = xyes
+then :
+  printf "%s\n" "#define HAVE__GET_TIMEZONE 1" >>confdefs.h
 
 fi
-done
 
-for ac_func in timegm tzset unlinkat unsetenv utime utimensat utimes vfork
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_check_decl "$LINENO" "cmtime_s" "ac_cv_have_decl_cmtime_s" "#include <time.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_cmtime_s" = xyes
+then :
+
+printf "%s\n" "#define HAVE_CMTIME_S 1" >>confdefs.h
 
 fi
-done
+ac_fn_check_decl "$LINENO" "gmtime_s" "ac_cv_have_decl_gmtime_s" "#include <time.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_gmtime_s" = xyes
+then :
 
-for ac_func in wcrtomb wcscmp wcscpy wcslen wctomb wmemcmp wmemcpy wmemmove
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+printf "%s\n" "#define HAVE_GMTIME_S 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_type "$LINENO" "localtime_s" "ac_cv_type_localtime_s" "#include <time.h>
+"
+if test "x$ac_cv_type_localtime_s" = xyes
+then :
 
-for ac_func in _ctime64_s _fseeki64
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+printf "%s\n" "#define HAVE_LOCALTIME_S 1" >>confdefs.h
 
 fi
-done
 
-for ac_func in _get_timezone _gmtime64_s _localtime64_s _mkgmtime64
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_check_decl "$LINENO" "_mkgmtime" "ac_cv_have_decl__mkgmtime" "#include <time.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl__mkgmtime" = xyes
+then :
+
+printf "%s\n" "#define HAVE__MKGMTIME 1" >>confdefs.h
 
 fi
-done
 
 # detects cygwin-1.7, as opposed to older versions
-for ac_func in cygwin_conv_path
-do :
-  ac_fn_c_check_func "$LINENO" "cygwin_conv_path" "ac_cv_func_cygwin_conv_path"
-if test "x$ac_cv_func_cygwin_conv_path" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_CYGWIN_CONV_PATH 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "cygwin_conv_path" "ac_cv_func_cygwin_conv_path"
+if test "x$ac_cv_func_cygwin_conv_path" = xyes
+then :
+  printf "%s\n" "#define HAVE_CYGWIN_CONV_PATH 1" >>confdefs.h
 
 fi
-done
 
 
 # DragonFly uses vfsconf, FreeBSD xvfsconf.
@@ -18188,11 +19660,10 @@ ac_fn_c_check_type "$LINENO" "struct vfsconf" "ac_cv_type_struct_vfsconf" "#if H
        #include <sys/mount.h>
 
 "
-if test "x$ac_cv_type_struct_vfsconf" = xyes; then :
+if test "x$ac_cv_type_struct_vfsconf" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_VFSCONF 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_VFSCONF 1" >>confdefs.h
 
 
 fi
@@ -18204,11 +19675,10 @@ ac_fn_c_check_type "$LINENO" "struct xvfsconf" "ac_cv_type_struct_xvfsconf" "#if
        #include <sys/mount.h>
 
 "
-if test "x$ac_cv_type_struct_xvfsconf" = xyes; then :
+if test "x$ac_cv_type_struct_xvfsconf" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_XVFSCONF 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_XVFSCONF 1" >>confdefs.h
 
 
 fi
@@ -18220,11 +19690,10 @@ ac_fn_c_check_type "$LINENO" "struct statfs" "ac_cv_type_struct_statfs" "#if HAV
        #include <sys/mount.h>
 
 "
-if test "x$ac_cv_type_struct_statfs" = xyes; then :
+if test "x$ac_cv_type_struct_statfs" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STATFS 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STATFS 1" >>confdefs.h
 
 
 fi
@@ -18236,7 +19705,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <dirent.h>
 int
-main ()
+main (void)
 {
 DIR *dir; struct dirent e, *r;
                    return(readdir_r(dir, &e, &r));
@@ -18244,49 +19713,53 @@ DIR *dir; struct dirent e, *r;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
-$as_echo "#define HAVE_READDIR_R 1" >>confdefs.h
+printf "%s\n" "#define HAVE_READDIR_R 1" >>confdefs.h
 
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
 # dirfd can be either a function or a macro.
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <dirent.h>
                     DIR *dir;
 int
-main ()
+main (void)
 {
 return(dirfd(dir));
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
-$as_echo "#define HAVE_DIRFD 1" >>confdefs.h
+printf "%s\n" "#define HAVE_DIRFD 1" >>confdefs.h
 
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
 
 # FreeBSD's nl_langinfo supports an option to specify whether the
 # current locale uses month/day or day/month ordering.  It makes the
 # output a little prettier...
-ac_fn_c_check_decl "$LINENO" "D_MD_ORDER" "ac_cv_have_decl_D_MD_ORDER" "#if HAVE_LANGINFO_H
+ac_fn_check_decl "$LINENO" "D_MD_ORDER" "ac_cv_have_decl_D_MD_ORDER" "#if HAVE_LANGINFO_H
 #include <langinfo.h>
 #endif
 
-"
-if test "x$ac_cv_have_decl_D_MD_ORDER" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_D_MD_ORDER" = xyes
+then :
 
-$as_echo "#define HAVE_D_MD_ORDER 1" >>confdefs.h
+printf "%s\n" "#define HAVE_D_MD_ORDER 1" >>confdefs.h
 
 fi
 
-
 # Check for dirent.d_namlen field explicitly
 # (This is a bit more straightforward than, if not quite as portable as,
 # the recipe given by the autoconf maintainers.)
@@ -18295,24 +19768,27 @@ ac_fn_c_check_member "$LINENO" "struct dirent" "d_namlen" "ac_cv_member_struct_d
 #endif
 
 "
-if test "x$ac_cv_member_struct_dirent_d_namlen" = xyes; then :
+if test "x$ac_cv_member_struct_dirent_d_namlen" = xyes
+then :
 
 fi
 
 
 # Check for Extended Attributes support
 # Check whether --enable-xattr was given.
-if test "${enable_xattr+set}" = set; then :
+if test ${enable_xattr+y}
+then :
   enableval=$enable_xattr;
 fi
 
 
 if test "x$enable_xattr" != "xno"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setxattr" >&5
-$as_echo_n "checking for library containing setxattr... " >&6; }
-if ${ac_cv_search_setxattr+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing setxattr" >&5
+printf %s "checking for library containing setxattr... " >&6; }
+if test ${ac_cv_search_setxattr+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -18320,102 +19796,98 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char setxattr ();
 int
-main ()
+main (void)
 {
 return setxattr ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' attr gnu; do
+for ac_lib in '' attr gnu
+do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
+  if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_search_setxattr=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext
-  if ${ac_cv_search_setxattr+:} false; then :
+  if test ${ac_cv_search_setxattr+y}
+then :
   break
 fi
 done
-if ${ac_cv_search_setxattr+:} false; then :
+if test ${ac_cv_search_setxattr+y}
+then :
 
-else
+else $as_nop
   ac_cv_search_setxattr=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setxattr" >&5
-$as_echo "$ac_cv_search_setxattr" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setxattr" >&5
+printf "%s\n" "$ac_cv_search_setxattr" >&6; }
 ac_res=$ac_cv_search_setxattr
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-    ac_fn_c_check_decl "$LINENO" "EXTATTR_NAMESPACE_USER" "ac_cv_have_decl_EXTATTR_NAMESPACE_USER" "#include <sys/types.h>
+    ac_fn_check_decl "$LINENO" "EXTATTR_NAMESPACE_USER" "ac_cv_have_decl_EXTATTR_NAMESPACE_USER" "#include <sys/types.h>
 #include <sys/extattr.h>
 
-"
-if test "x$ac_cv_have_decl_EXTATTR_NAMESPACE_USER" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_EXTATTR_NAMESPACE_USER" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_EXTATTR_NAMESPACE_USER $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_EXTATTR_NAMESPACE_USER $ac_have_decl
-_ACEOF
-
-    ac_fn_c_check_decl "$LINENO" "XATTR_NOFOLLOW" "ac_cv_have_decl_XATTR_NOFOLLOW" "#include <sys/xattr.h>
+    ac_fn_check_decl "$LINENO" "XATTR_NOFOLLOW" "ac_cv_have_decl_XATTR_NOFOLLOW" "#include <sys/xattr.h>
 
-"
-if test "x$ac_cv_have_decl_XATTR_NOFOLLOW" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_XATTR_NOFOLLOW" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_XATTR_NOFOLLOW $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_XATTR_NOFOLLOW $ac_have_decl" >>confdefs.h
 
     if test "x$ac_cv_header_sys_xattr_h" = "xyes" \
         -a "x$ac_cv_have_decl_XATTR_NOFOLLOW" = "xyes"; then
        # Darwin extended attributes support
-       if ${ac_cv_archive_xattr_darwin+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  for ac_func in fgetxattr \
-                         flistxattr \
-                         fsetxattr \
-                         getxattr \
-                         listxattr \
-                         setxattr
+       if test ${ac_cv_archive_xattr_darwin+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+  for ac_func in fgetxattr flistxattr fsetxattr getxattr listxattr setxattr
 do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+  as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"
+then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
  ac_cv_archive_xattr_darwin=yes
-else
+else $as_nop
   ac_cv_archive_xattr_darwin=no
 fi
-done
 
+done
 
 
 fi
     elif test "x$ac_cv_header_sys_extattr_h" = "xyes" \
            -a "x$ac_cv_have_decl_EXTATTR_NAMESPACE_USER" = "xyes"; then
        # FreeBSD extended attributes support
-       if ${ac_cv_archive_xattr_freebsd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  for ac_func in extattr_get_fd \
-                         extattr_get_file \
-                         extattr_get_link \
-                         extattr_list_fd \
-                         extattr_list_file \
-                         extattr_list_link \
-                         extattr_set_fd \
-                         extattr_set_link
+       if test ${ac_cv_archive_xattr_freebsd+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+  for ac_func in extattr_get_fd extattr_get_file extattr_get_link extattr_list_fd extattr_list_file extattr_list_link extattr_set_fd extattr_set_link
 do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+  as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"
+then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
  ac_cv_archive_xattr_freebsd=yes
-else
+else $as_nop
   ac_cv_archive_xattr_freebsd=no
 fi
-done
 
+done
 
 
 fi
     elif test "x$ac_cv_header_sys_xattr_h" = "xyes" \
           -o "x$ac_cv_header_attr_xattr_h" = "xyes"; then
        # Linux extended attributes support
-       if ${ac_cv_archive_xattr_linux+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  for ac_func in fgetxattr \
-                         flistxattr \
-                         fsetxattr \
-                         getxattr \
-                         lgetxattr \
-                         listxattr \
-                         llistxattr \
-                         lsetxattr
+       if test ${ac_cv_archive_xattr_linux+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+  for ac_func in fgetxattr flistxattr fsetxattr getxattr lgetxattr listxattr llistxattr lsetxattr
 do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+  as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"
+then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
  ac_cv_archive_xattr_linux=yes
-else
+else $as_nop
   ac_cv_archive_xattr_linux=no
 fi
-done
 
+done
 
 
 fi
 
     elif test "x$ac_cv_header_sys_ea_h" = "xyes"; then
        # AIX extended attributes support
-       if ${ac_cv_archive_xattr_aix+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  for ac_func in fgetea \
-                         flistea \
-                         fsetea \
-                         getea \
-                         lgetea \
-                         listea \
-                         llistea \
-                         lsetea
+       if test ${ac_cv_archive_xattr_aix+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+  for ac_func in fgetea flistea fsetea getea lgetea listea llistea lsetea
 do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+  as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"
+then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
  ac_cv_archive_xattr_aix=yes
-else
+else $as_nop
   ac_cv_archive_xattr_aix=no
 fi
-done
 
+done
 
 
 fi
 
     fi
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extended attributes support" >&5
-$as_echo_n "checking for extended attributes support... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for extended attributes support" >&5
+printf %s "checking for extended attributes support... " >&6; }
     if test "x$ac_cv_archive_xattr_linux" = "xyes"; then
 
-$as_echo "#define ARCHIVE_XATTR_LINUX 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_XATTR_LINUX 1" >>confdefs.h
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Linux" >&5
-$as_echo "Linux" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Linux" >&5
+printf "%s\n" "Linux" >&6; }
     elif test "x$ac_cv_archive_xattr_darwin" = "xyes"; then
 
-$as_echo "#define ARCHIVE_XATTR_DARWIN 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_XATTR_DARWIN 1" >>confdefs.h
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Darwin" >&5
-$as_echo "Darwin" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Darwin" >&5
+printf "%s\n" "Darwin" >&6; }
     elif test "x$ac_cv_archive_xattr_freebsd" = "xyes"; then
 
-$as_echo "#define ARCHIVE_XATTR_FREEBSD 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_XATTR_FREEBSD 1" >>confdefs.h
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: FreeBSD" >&5
-$as_echo "FreeBSD" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FreeBSD" >&5
+printf "%s\n" "FreeBSD" >&6; }
     elif test "x$ac_cv_archive_xattr_aix" = "xyes"; then
 
-$as_echo "#define ARCHIVE_XATTR_AIX 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_XATTR_AIX 1" >>confdefs.h
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: AIX" >&5
-$as_echo "AIX" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: AIX" >&5
+printf "%s\n" "AIX" >&6; }
     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
+printf "%s\n" "none" >&6; }
     fi
 fi
 
 # which makes the following checks rather more complex than I would like.
 #
 # Check whether --enable-acl was given.
-if test "${enable_acl+set}" = set; then :
+if test ${enable_acl+y}
+then :
   enableval=$enable_acl;
 fi
 
 
 if test "x$enable_acl" != "xno"; then
     # Libacl
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get_file in -lacl" >&5
-$as_echo_n "checking for acl_get_file in -lacl... " >&6; }
-if ${ac_cv_lib_acl_acl_get_file+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for acl_get_file in -lacl" >&5
+printf %s "checking for acl_get_file in -lacl... " >&6; }
+if test ${ac_cv_lib_acl_acl_get_file+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lacl  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -18574,33 +20036,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char acl_get_file ();
 int
-main ()
+main (void)
 {
 return acl_get_file ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_acl_acl_get_file=yes
-else
+else $as_nop
   ac_cv_lib_acl_acl_get_file=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_acl_acl_get_file" >&5
-$as_echo "$ac_cv_lib_acl_acl_get_file" >&6; }
-if test "x$ac_cv_lib_acl_acl_get_file" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBACL 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_acl_acl_get_file" >&5
+printf "%s\n" "$ac_cv_lib_acl_acl_get_file" >&6; }
+if test "x$ac_cv_lib_acl_acl_get_file" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBACL 1" >>confdefs.h
 
   LIBS="-lacl $LIBS"
 
       #endif
 
 "
-if test "x$ac_cv_type_acl_t" = xyes; then :
+if test "x$ac_cv_type_acl_t" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ACL_T 1
-_ACEOF
+printf "%s\n" "#define HAVE_ACL_T 1" >>confdefs.h
 
 
 fi
@@ -18633,11 +20091,10 @@ ac_fn_c_check_type "$LINENO" "acl_entry_t" "ac_cv_type_acl_entry_t" "
       #endif
 
 "
-if test "x$ac_cv_type_acl_entry_t" = xyes; then :
+if test "x$ac_cv_type_acl_entry_t" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ACL_ENTRY_T 1
-_ACEOF
+printf "%s\n" "#define HAVE_ACL_ENTRY_T 1" >>confdefs.h
 
 
 fi
@@ -18650,11 +20107,10 @@ ac_fn_c_check_type "$LINENO" "acl_permset_t" "ac_cv_type_acl_permset_t" "
       #endif
 
 "
-if test "x$ac_cv_type_acl_permset_t" = xyes; then :
+if test "x$ac_cv_type_acl_permset_t" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ACL_PERMSET_T 1
-_ACEOF
+printf "%s\n" "#define HAVE_ACL_PERMSET_T 1" >>confdefs.h
 
 
 fi
@@ -18667,21 +20123,21 @@ ac_fn_c_check_type "$LINENO" "acl_tag_t" "ac_cv_type_acl_tag_t" "
       #endif
 
 "
-if test "x$ac_cv_type_acl_tag_t" = xyes; then :
+if test "x$ac_cv_type_acl_tag_t" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ACL_TAG_T 1
-_ACEOF
+printf "%s\n" "#define HAVE_ACL_TAG_T 1" >>confdefs.h
 
 
 fi
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for richacl_get_file in -lrichacl" >&5
-$as_echo_n "checking for richacl_get_file in -lrichacl... " >&6; }
-if ${ac_cv_lib_richacl_richacl_get_file+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for richacl_get_file in -lrichacl" >&5
+printf %s "checking for richacl_get_file in -lrichacl... " >&6; }
+if test ${ac_cv_lib_richacl_richacl_get_file+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lrichacl  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -18690,33 +20146,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char richacl_get_file ();
 int
-main ()
+main (void)
 {
 return richacl_get_file ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_richacl_richacl_get_file=yes
-else
+else $as_nop
   ac_cv_lib_richacl_richacl_get_file=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_richacl_richacl_get_file" >&5
-$as_echo "$ac_cv_lib_richacl_richacl_get_file" >&6; }
-if test "x$ac_cv_lib_richacl_richacl_get_file" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBRICHACL 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_richacl_richacl_get_file" >&5
+printf "%s\n" "$ac_cv_lib_richacl_richacl_get_file" >&6; }
+if test "x$ac_cv_lib_richacl_richacl_get_file" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBRICHACL 1" >>confdefs.h
 
   LIBS="-lrichacl $LIBS"
 
       #endif
 
 "
-if test "x$ac_cv_type_struct_richace" = xyes; then :
+if test "x$ac_cv_type_struct_richace" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_RICHACE 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_RICHACE 1" >>confdefs.h
 
 
 fi
@@ -18743,56 +20195,53 @@ ac_fn_c_check_type "$LINENO" "struct richacl" "ac_cv_type_struct_richacl" "
       #endif
 
 "
-if test "x$ac_cv_type_struct_richacl" = xyes; then :
+if test "x$ac_cv_type_struct_richacl" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_RICHACL 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_RICHACL 1" >>confdefs.h
 
 
 fi
 
 
     # Solaris and derivates ACLs
-    for ac_func in acl facl
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+    ac_fn_c_check_func "$LINENO" "acl" "ac_cv_func_acl"
+if test "x$ac_cv_func_acl" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "facl" "ac_cv_func_facl"
+if test "x$ac_cv_func_facl" = xyes
+then :
+  printf "%s\n" "#define HAVE_FACL 1" >>confdefs.h
 
 fi
-done
 
 
     if test "x$ac_cv_lib_richacl_richacl_get_file" = "xyes" \
         -a "x$ac_cv_type_struct_richace" = "xyes" \
         -a "x$ac_cv_type_struct_richacl" = "xyes"; then
-       if ${ac_cv_archive_acl_librichacl+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  for ac_func in richacl_alloc \
-                         richacl_equiv_mode \
-                         richacl_free \
-                         richacl_get_fd \
-                         richacl_get_file \
-                         richacl_set_fd \
-                         richacl_set_file
+       if test ${ac_cv_archive_acl_librichacl+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+  for ac_func in richacl_alloc richacl_equiv_mode richacl_free richacl_get_fd richacl_get_file richacl_set_fd richacl_set_file
 do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+  as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"
+then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
  ac_cv_archive_acl_librichacl=yes
-else
+else $as_nop
   ac_cv_archive_acl_librichacl=no
 fi
-done
 
+done
 fi
 
     fi
         -a "x$ac_cv_func_facl" = "xyes"; then
        ac_fn_c_check_type "$LINENO" "aclent_t" "ac_cv_type_aclent_t" "#include <sys/acl.h>
 "
-if test "x$ac_cv_type_aclent_t" = xyes; then :
+if test "x$ac_cv_type_aclent_t" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ACLENT_T 1
-_ACEOF
+printf "%s\n" "#define HAVE_ACLENT_T 1" >>confdefs.h
 
 
 fi
 
        if test "x$ac_cv_type_aclent_t" = "xyes"; then
-           if ${ac_cv_archive_acl_sunos+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_fn_c_check_decl "$LINENO" "GETACL" "ac_cv_have_decl_GETACL" "#include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_GETACL" = xyes; then :
+           if test ${ac_cv_archive_acl_sunos+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_fn_check_decl "$LINENO" "GETACL" "ac_cv_have_decl_GETACL" "#include <sys/acl.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_GETACL" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETACL $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
+printf "%s\n" "#define HAVE_DECL_GETACL $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
   ac_cv_archive_acl_sunos=yes
-else
+else $as_nop
   ac_cv_archive_acl_sunos=no
 fi
-ac_fn_c_check_decl "$LINENO" "SETACL" "ac_cv_have_decl_SETACL" "#include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_SETACL" = xyes; then :
+ac_fn_check_decl "$LINENO" "SETACL" "ac_cv_have_decl_SETACL" "#include <sys/acl.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_SETACL" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SETACL $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
+printf "%s\n" "#define HAVE_DECL_SETACL $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
   ac_cv_archive_acl_sunos=yes
-else
+else $as_nop
   ac_cv_archive_acl_sunos=no
 fi
-ac_fn_c_check_decl "$LINENO" "GETACLCNT" "ac_cv_have_decl_GETACLCNT" "#include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_GETACLCNT" = xyes; then :
+ac_fn_check_decl "$LINENO" "GETACLCNT" "ac_cv_have_decl_GETACLCNT" "#include <sys/acl.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_GETACLCNT" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETACLCNT $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
+printf "%s\n" "#define HAVE_DECL_GETACLCNT $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
   ac_cv_archive_acl_sunos=yes
-else
+else $as_nop
   ac_cv_archive_acl_sunos=no
 fi
 
 
            ac_fn_c_check_type "$LINENO" "ace_t" "ac_cv_type_ace_t" "#include <sys/acl.h>
 "
-if test "x$ac_cv_type_ace_t" = xyes; then :
+if test "x$ac_cv_type_ace_t" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ACE_T 1
-_ACEOF
+printf "%s\n" "#define HAVE_ACE_T 1" >>confdefs.h
 
 
 fi
 
            if test "x$ac_cv_type_ace_t" = "xyes"; then
-               if ${ac_cv_archive_acl_sunos_nfs4+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_fn_c_check_decl "$LINENO" "ACE_GETACL" "ac_cv_have_decl_ACE_GETACL" "#include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_ACE_GETACL" = xyes; then :
+               if test ${ac_cv_archive_acl_sunos_nfs4+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_fn_check_decl "$LINENO" "ACE_GETACL" "ac_cv_have_decl_ACE_GETACL" "#include <sys/acl.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ACE_GETACL" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACE_GETACL $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
+printf "%s\n" "#define HAVE_DECL_ACE_GETACL $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
   ac_cv_archive_acl_sunos_nfs4=yes
-else
+else $as_nop
   ac_cv_archive_acl_sonos_nfs4=no
 fi
-ac_fn_c_check_decl "$LINENO" "ACE_SETACL" "ac_cv_have_decl_ACE_SETACL" "#include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_ACE_SETACL" = xyes; then :
+ac_fn_check_decl "$LINENO" "ACE_SETACL" "ac_cv_have_decl_ACE_SETACL" "#include <sys/acl.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ACE_SETACL" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACE_SETACL $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
+printf "%s\n" "#define HAVE_DECL_ACE_SETACL $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
   ac_cv_archive_acl_sunos_nfs4=yes
-else
+else $as_nop
   ac_cv_archive_acl_sonos_nfs4=no
 fi
-ac_fn_c_check_decl "$LINENO" "ACE_GETACLCNT" "ac_cv_have_decl_ACE_GETACLCNT" "#include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_ACE_GETACLCNT" = xyes; then :
+ac_fn_check_decl "$LINENO" "ACE_GETACLCNT" "ac_cv_have_decl_ACE_GETACLCNT" "#include <sys/acl.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ACE_GETACLCNT" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACE_GETACLCNT $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
+printf "%s\n" "#define HAVE_DECL_ACE_GETACLCNT $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
   ac_cv_archive_acl_sunos_nfs4=yes
-else
+else $as_nop
   ac_cv_archive_acl_sonos_nfs4=no
 fi
 
         -a "x$ac_cv_type_acl_permset_t" = "xyes" \
         -a "x$ac_cv_type_acl_tag_t" = "xyes"; then
        # POSIX.1e ACL functions
-       if ${ac_cv_posix_acl_funcs+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  for ac_func in acl_add_perm \
-                         acl_clear_perms \
-                         acl_create_entry \
-                         acl_delete_def_file \
-                         acl_free \
-                         acl_get_entry \
-                         acl_get_fd \
-                         acl_get_file \
-                         acl_get_permset \
-                         acl_get_qualifier \
-                         acl_get_tag_type \
-                         acl_init \
-                         acl_set_fd \
-                         acl_set_file \
-                         acl_set_qualifier \
-                         acl_set_tag_type
+       if test ${ac_cv_posix_acl_funcs+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+  for ac_func in acl_add_perm acl_clear_perms acl_create_entry acl_delete_def_file acl_free acl_get_entry acl_get_fd acl_get_file acl_get_permset acl_get_qualifier acl_get_tag_type acl_init acl_set_fd acl_set_file acl_set_qualifier acl_set_tag_type
 do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+  as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+if eval test \"x\$"$as_ac_var"\" = x"yes"
+then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
  ac_cv_posix_acl_funcs=yes
-else
+else $as_nop
   ac_cv_posix_acl_funcs=no
 fi
-done
 
+done
 
 fi
 
 
-       for ac_func in acl_get_perm
-do :
-  ac_fn_c_check_func "$LINENO" "acl_get_perm" "ac_cv_func_acl_get_perm"
-if test "x$ac_cv_func_acl_get_perm" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_ACL_GET_PERM 1
-_ACEOF
+       ac_fn_c_check_func "$LINENO" "acl_get_perm" "ac_cv_func_acl_get_perm"
+if test "x$ac_cv_func_acl_get_perm" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_GET_PERM 1" >>confdefs.h
 
 fi
-done
 
 
        if test "x$ac_cv_posix_acl_funcs" = "xyes" \
             -a "x$ac_cv_header_acl_libacl_h" = "xyes" \
             -a "x$ac_cv_lib_acl_acl_get_file" = "xyes" \
             -a "x$ac_cv_func_acl_get_perm"; then
-           if ${ac_cv_archive_acl_libacl+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+           if test ${ac_cv_archive_acl_libacl+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_archive_acl_libacl=yes
 fi
 
 
-$as_echo "#define ARCHIVE_ACL_LIBACL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_LIBACL 1" >>confdefs.h
 
        else
             # FreeBSD/Darwin
-            for ac_func in acl_add_flag_np \
-                           acl_clear_flags_np \
-                           acl_get_brand_np \
-                           acl_get_entry_type_np \
-                           acl_get_flag_np \
-                           acl_get_flagset_np \
-                           acl_get_fd_np \
-                           acl_get_link_np \
-                           acl_get_perm_np \
-                           acl_is_trivial_np \
-                           acl_set_entry_type_np \
-                           acl_set_fd_np \
-                           acl_set_link_np
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+            ac_fn_c_check_func "$LINENO" "acl_add_flag_np" "ac_cv_func_acl_add_flag_np"
+if test "x$ac_cv_func_acl_add_flag_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_ADD_FLAG_NP 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "acl_clear_flags_np" "ac_cv_func_acl_clear_flags_np"
+if test "x$ac_cv_func_acl_clear_flags_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_CLEAR_FLAGS_NP 1" >>confdefs.h
 
+fi
+ac_fn_c_check_func "$LINENO" "acl_get_brand_np" "ac_cv_func_acl_get_brand_np"
+if test "x$ac_cv_func_acl_get_brand_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_GET_BRAND_NP 1" >>confdefs.h
 
-           for ac_func in mbr_uid_to_uuid \
-                          mbr_uuid_to_id \
-                          mbr_gid_to_uuid
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "acl_get_entry_type_np" "ac_cv_func_acl_get_entry_type_np"
+if test "x$ac_cv_func_acl_get_entry_type_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_GET_ENTRY_TYPE_NP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "acl_get_flag_np" "ac_cv_func_acl_get_flag_np"
+if test "x$ac_cv_func_acl_get_flag_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_GET_FLAG_NP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "acl_get_flagset_np" "ac_cv_func_acl_get_flagset_np"
+if test "x$ac_cv_func_acl_get_flagset_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_GET_FLAGSET_NP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "acl_get_fd_np" "ac_cv_func_acl_get_fd_np"
+if test "x$ac_cv_func_acl_get_fd_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_GET_FD_NP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "acl_get_link_np" "ac_cv_func_acl_get_link_np"
+if test "x$ac_cv_func_acl_get_link_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_GET_LINK_NP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "acl_get_perm_np" "ac_cv_func_acl_get_perm_np"
+if test "x$ac_cv_func_acl_get_perm_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_GET_PERM_NP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "acl_is_trivial_np" "ac_cv_func_acl_is_trivial_np"
+if test "x$ac_cv_func_acl_is_trivial_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_IS_TRIVIAL_NP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "acl_set_entry_type_np" "ac_cv_func_acl_set_entry_type_np"
+if test "x$ac_cv_func_acl_set_entry_type_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_SET_ENTRY_TYPE_NP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "acl_set_fd_np" "ac_cv_func_acl_set_fd_np"
+if test "x$ac_cv_func_acl_set_fd_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_SET_FD_NP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "acl_set_link_np" "ac_cv_func_acl_set_link_np"
+if test "x$ac_cv_func_acl_set_link_np" = xyes
+then :
+  printf "%s\n" "#define HAVE_ACL_SET_LINK_NP 1" >>confdefs.h
+
+fi
+
+
+           ac_fn_c_check_func "$LINENO" "mbr_uid_to_uuid" "ac_cv_func_mbr_uid_to_uuid"
+if test "x$ac_cv_func_mbr_uid_to_uuid" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBR_UID_TO_UUID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mbr_uuid_to_id" "ac_cv_func_mbr_uuid_to_id"
+if test "x$ac_cv_func_mbr_uuid_to_id" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBR_UUID_TO_ID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mbr_gid_to_uuid" "ac_cv_func_mbr_gid_to_uuid"
+if test "x$ac_cv_func_mbr_gid_to_uuid" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBR_GID_TO_UUID 1" >>confdefs.h
 
 fi
-done
 
 
-           ac_fn_c_check_decl "$LINENO" "ACL_TYPE_EXTENDED" "ac_cv_have_decl_ACL_TYPE_EXTENDED" "#include <sys/types.h>
+           ac_fn_check_decl "$LINENO" "ACL_TYPE_EXTENDED" "ac_cv_have_decl_ACL_TYPE_EXTENDED" "#include <sys/types.h>
               #include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_ACL_TYPE_EXTENDED" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ACL_TYPE_EXTENDED" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACL_TYPE_EXTENDED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ACL_TYPE_NFS4" "ac_cv_have_decl_ACL_TYPE_NFS4" "#include <sys/types.h>
+printf "%s\n" "#define HAVE_DECL_ACL_TYPE_EXTENDED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "ACL_TYPE_NFS4" "ac_cv_have_decl_ACL_TYPE_NFS4" "#include <sys/types.h>
               #include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_ACL_TYPE_NFS4" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ACL_TYPE_NFS4" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACL_TYPE_NFS4 $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ACL_USER" "ac_cv_have_decl_ACL_USER" "#include <sys/types.h>
+printf "%s\n" "#define HAVE_DECL_ACL_TYPE_NFS4 $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "ACL_USER" "ac_cv_have_decl_ACL_USER" "#include <sys/types.h>
               #include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_ACL_USER" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ACL_USER" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACL_USER $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ACL_SYNCHRONIZE" "ac_cv_have_decl_ACL_SYNCHRONIZE" "#include <sys/types.h>
+printf "%s\n" "#define HAVE_DECL_ACL_USER $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "ACL_SYNCHRONIZE" "ac_cv_have_decl_ACL_SYNCHRONIZE" "#include <sys/types.h>
               #include <sys/acl.h>
-"
-if test "x$ac_cv_have_decl_ACL_SYNCHRONIZE" = xyes; then :
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ACL_SYNCHRONIZE" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ACL_SYNCHRONIZE $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_ACL_SYNCHRONIZE $ac_have_decl" >>confdefs.h
 
            if test "x$ac_cv_posix_acl_funcs" = "xyes" \
                 -a "x$ac_cv_func_acl_get_fd_np" = "xyes" \
@@ -19096,9 +20576,10 @@ _ACEOF
                 -a "x$ac_cv_func_acl_get_perm_np" = "xyes" \
                 -a "x$ac_cv_func_acl_set_fd_np" = "xyes"; then
                if test "x$ac_cv_have_decl_ACL_USER" = "xyes"; then
-                   if ${ac_cv_archive_acl_freebsd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                   if test ${ac_cv_archive_acl_freebsd+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_archive_acl_freebsd=yes
 fi
 
                         -a "x$ac_cv_func_acl_get_entry_type_np" = "xyes" \
                         -a "x$ac_cv_func_acl_get_flagset_np" = "xyes" \
                         -a "x$ac_cv_func_acl_set_entry_type_np" = "xyes"; then
-                       if ${ac_cv_archive_acl_freebsd_nfs4+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                       if test ${ac_cv_archive_acl_freebsd_nfs4+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_archive_acl_freebsd_nfs4=yes
 fi
 
                       -a "x$ac_cv_func_mbr_uid_to_uuid" = "xyes" \
                       -a "x$ac_cv_func_mbr_uuid_to_id" = "xyes" \
                       -a "x$ac_cv_func_mbr_gid_to_uuid" = "xyes"; then
-                   if ${ac_cv_archive_acl_darwin+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                   if test ${ac_cv_archive_acl_darwin+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_archive_acl_darwin=yes
 fi
 
            fi
        fi
     fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ACL support" >&5
-$as_echo_n "checking for ACL support... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ACL support" >&5
+printf %s "checking for ACL support... " >&6; }
     if test "x$ac_cv_archive_acl_libacl" = "xyes" \
         -a "x$ac_cv_archive_acl_librichacl" = "xyes"; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: libacl (POSIX.1e) + librichacl (NFSv4)" >&5
-$as_echo "libacl (POSIX.1e) + librichacl (NFSv4)" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: libacl (POSIX.1e) + librichacl (NFSv4)" >&5
+printf "%s\n" "libacl (POSIX.1e) + librichacl (NFSv4)" >&6; }
 
-$as_echo "#define ARCHIVE_ACL_LIBACL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_LIBACL 1" >>confdefs.h
 
 
-$as_echo "#define ARCHIVE_ACL_LIBRICHACL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_LIBRICHACL 1" >>confdefs.h
 
     elif test "x$ac_cv_archive_acl_libacl" = "xyes"; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: libacl (POSIX.1e)" >&5
-$as_echo "libacl (POSIX.1e)" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: libacl (POSIX.1e)" >&5
+printf "%s\n" "libacl (POSIX.1e)" >&6; }
 
-$as_echo "#define ARCHIVE_ACL_LIBACL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_LIBACL 1" >>confdefs.h
 
     elif test "x$ac_cv_archive_acl_librichacl" = "xyes"; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: librichacl (NFSv4)" >&5
-$as_echo "librichacl (NFSv4)" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: librichacl (NFSv4)" >&5
+printf "%s\n" "librichacl (NFSv4)" >&6; }
 
-$as_echo "#define ARCHIVE_ACL_LIBRICHACL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_LIBRICHACL 1" >>confdefs.h
 
     elif test "x$ac_cv_archive_acl_darwin" = "xyes"; then
 
-$as_echo "#define ARCHIVE_ACL_DARWIN 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_DARWIN 1" >>confdefs.h
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: Darwin (limited NFSv4)" >&5
-$as_echo "Darwin (limited NFSv4)" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Darwin (limited NFSv4)" >&5
+printf "%s\n" "Darwin (limited NFSv4)" >&6; }
     elif test "x$ac_cv_archive_acl_sunos" = "xyes"; then
 
-$as_echo "#define ARCHIVE_ACL_SUNOS 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_SUNOS 1" >>confdefs.h
 
        if test "x$ac_cv_archive_acl_sunos_nfs4" = "xyes"; then
 
-$as_echo "#define ARCHIVE_ACL_SUNOS_NFS4 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_SUNOS_NFS4 1" >>confdefs.h
 
-           { $as_echo "$as_me:${as_lineno-$LINENO}: result: Solaris (POSIX.1e and NFSv4)" >&5
-$as_echo "Solaris (POSIX.1e and NFSv4)" >&6; }
+           { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Solaris (POSIX.1e and NFSv4)" >&5
+printf "%s\n" "Solaris (POSIX.1e and NFSv4)" >&6; }
        else
-           { $as_echo "$as_me:${as_lineno-$LINENO}: result: Solaris (POSIX.1e)" >&5
-$as_echo "Solaris (POSIX.1e)" >&6; }
+           { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Solaris (POSIX.1e)" >&5
+printf "%s\n" "Solaris (POSIX.1e)" >&6; }
        fi
     elif test "x$ac_cv_archive_acl_freebsd" = "xyes"; then
 
-$as_echo "#define ARCHIVE_ACL_FREEBSD 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_FREEBSD 1" >>confdefs.h
 
        if test "x$ac_cv_archive_acl_freebsd_nfs4" = "xyes"; then
 
-$as_echo "#define ARCHIVE_ACL_FREEBSD_NFS4 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_ACL_FREEBSD_NFS4 1" >>confdefs.h
 
-           { $as_echo "$as_me:${as_lineno-$LINENO}: result: FreeBSD (POSIX.1e and NFSv4)" >&5
-$as_echo "FreeBSD (POSIX.1e and NFSv4)" >&6; }
+           { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FreeBSD (POSIX.1e and NFSv4)" >&5
+printf "%s\n" "FreeBSD (POSIX.1e and NFSv4)" >&6; }
        else
-           { $as_echo "$as_me:${as_lineno-$LINENO}: result: FreeBSD (POSIX.1e)" >&5
-$as_echo "FreeBSD (POSIX.1e)" >&6; }
+           { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FreeBSD (POSIX.1e)" >&5
+printf "%s\n" "FreeBSD (POSIX.1e)" >&6; }
        fi
     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
-$as_echo "none" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
+printf "%s\n" "none" >&6; }
     fi
 fi
 
 
 # Additional requirements
 # Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then :
+if test ${enable_largefile+y}
+then :
   enableval=$enable_largefile;
 fi
 
 if test "$enable_largefile" != no; then
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if ${ac_cv_sys_largefile_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+printf %s "checking for special C compiler options needed for large files... " >&6; }
+if test ${ac_cv_sys_largefile_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_sys_largefile_CC=no
      if test "$GCC" != yes; then
        ac_save_CC=$CC
@@ -19258,44 +20743,47 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-        if ac_fn_c_try_compile "$LINENO"; then :
+        if ac_fn_c_try_compile "$LINENO"
+then :
   break
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
         CC="$CC -n32"
-        if ac_fn_c_try_compile "$LINENO"; then :
+        if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_largefile_CC=' -n32'; break
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
         break
        done
        CC=$ac_save_CC
        rm -f conftest.$ac_ext
     fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; }
   if test "$ac_cv_sys_largefile_CC" != no; then
     CC=$CC$ac_cv_sys_largefile_CC
   fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if ${ac_cv_sys_file_offset_bits+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test ${ac_cv_sys_file_offset_bits+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   while :; do
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -19304,22 +20792,23 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_file_offset_bits=no; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #define _FILE_OFFSET_BITS 64
@@ -19328,43 +20817,43 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_file_offset_bits=64; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   ac_cv_sys_file_offset_bits=unknown
   break
 done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; }
 case $ac_cv_sys_file_offset_bits in #(
   no | unknown) ;;
   *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
+printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h
 ;;
 esac
 rm -rf conftest*
   if test $ac_cv_sys_file_offset_bits = unknown; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if ${ac_cv_sys_large_files+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+printf %s "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test ${ac_cv_sys_large_files+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   while :; do
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -19373,22 +20862,23 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_large_files=no; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #define _LARGE_FILES 1
@@ -19397,40 +20887,37 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_large_files=1; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   ac_cv_sys_large_files=unknown
   break
 done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-$as_echo "$ac_cv_sys_large_files" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+printf "%s\n" "$ac_cv_sys_large_files" >&6; }
 case $ac_cv_sys_large_files in #(
   no | unknown) ;;
   *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
+printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h
 ;;
 esac
 rm -rf conftest*
   fi
-
-
 fi
 
 
@@ -19447,8 +20934,8 @@ case "$host_os" in
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_LIBC" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_MD5_LIBC... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_LIBC" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_MD5_LIBC... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19469,20 +20956,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_MD5=yes
       found_LIBC=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_MD5_LIBC 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_MD5_LIBC 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19493,8 +20981,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_LIBSYSTEM" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_MD5_LIBSYSTEM... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_LIBSYSTEM" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_MD5_LIBSYSTEM... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19515,20 +21003,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_MD5=yes
       found_LIBSYSTEM=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_MD5_LIBSYSTEM 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_MD5_LIBSYSTEM 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19539,8 +21028,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_LIBC" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_RMD160_LIBC... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_LIBC" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_RMD160_LIBC... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19561,20 +21050,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_RMD160=yes
       found_LIBC=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_RMD160_LIBC 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_RMD160_LIBC 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19585,8 +21075,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_LIBC" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA1_LIBC... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_LIBC" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA1_LIBC... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19607,20 +21097,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA1=yes
       found_LIBC=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA1_LIBC 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA1_LIBC 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19631,8 +21122,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_LIBSYSTEM" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA1_LIBSYSTEM... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_LIBSYSTEM" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA1_LIBSYSTEM... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19653,20 +21144,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA1=yes
       found_LIBSYSTEM=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA1_LIBSYSTEM 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA1_LIBSYSTEM 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19677,8 +21169,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBC" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA256_LIBC... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBC" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA256_LIBC... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19699,20 +21191,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA256=yes
       found_LIBC=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA256_LIBC 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA256_LIBC 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19723,8 +21216,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBC2" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA256_LIBC2... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBC2" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA256_LIBC2... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19745,20 +21238,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA256=yes
       found_LIBC2=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA256_LIBC2 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA256_LIBC2 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19769,8 +21263,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBC3" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA256_LIBC3... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBC3" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA256_LIBC3... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19791,20 +21285,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA256=yes
       found_LIBC3=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA256_LIBC3 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA256_LIBC3 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19815,8 +21310,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBSYSTEM" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA256_LIBSYSTEM... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBSYSTEM" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA256_LIBSYSTEM... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19837,20 +21332,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA256=yes
       found_LIBSYSTEM=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA256_LIBSYSTEM 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA256_LIBSYSTEM 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19861,8 +21357,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_LIBC" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA384_LIBC... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_LIBC" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA384_LIBC... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19883,20 +21379,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA384=yes
       found_LIBC=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA384_LIBC 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA384_LIBC 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19907,8 +21404,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_LIBC2" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA384_LIBC2... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_LIBC2" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA384_LIBC2... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19929,20 +21426,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA384=yes
       found_LIBC2=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA384_LIBC2 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA384_LIBC2 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19953,8 +21451,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_LIBC3" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA384_LIBC3... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_LIBC3" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA384_LIBC3... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19975,20 +21473,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA384=yes
       found_LIBC3=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA384_LIBC3 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA384_LIBC3 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -19999,8 +21498,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_LIBSYSTEM" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA384_LIBSYSTEM... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_LIBSYSTEM" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA384_LIBSYSTEM... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20021,20 +21520,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA384=yes
       found_LIBSYSTEM=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA384_LIBSYSTEM 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA384_LIBSYSTEM 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20045,8 +21545,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBC" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA512_LIBC... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBC" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA512_LIBC... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20067,20 +21567,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA512=yes
       found_LIBC=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA512_LIBC 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA512_LIBC 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20091,8 +21592,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBC2" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA512_LIBC2... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBC2" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA512_LIBC2... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20113,20 +21614,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA512=yes
       found_LIBC2=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA512_LIBC2 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA512_LIBC2 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20137,8 +21639,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBC3" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA512_LIBC3... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBC3" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA512_LIBC3... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20159,20 +21661,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA512=yes
       found_LIBC3=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA512_LIBC3 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA512_LIBC3 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20183,8 +21686,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBSYSTEM" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA512_LIBSYSTEM... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBSYSTEM" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA512_LIBSYSTEM... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20205,20 +21708,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA512=yes
       found_LIBSYSTEM=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA512_LIBSYSTEM 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA512_LIBSYSTEM 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20228,46 +21732,51 @@ rm -f core conftest.err conftest.$ac_objext \
 esac
 
 if test "x$with_cng" != "xno"; then
-    for ac_header in bcrypt.h
+           for ac_header in bcrypt.h
 do :
   ac_fn_c_check_header_compile "$LINENO" "bcrypt.h" "ac_cv_header_bcrypt_h" "#ifdef HAVE_WINDOWS_H
     # include <windows.h>
     #endif
 
 "
-if test "x$ac_cv_header_bcrypt_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_BCRYPT_H 1
-_ACEOF
+if test "x$ac_cv_header_bcrypt_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_BCRYPT_H 1" >>confdefs.h
 
         LIBS="$LIBS -lbcrypt"
 
 fi
 
 done
-
 fi
 
-if test "x$with_mbedtls" = "xyes"; then
-    for ac_header in mbedtls/aes.h mbedtls/md.h mbedtls/pkcs5.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+if test "x$with_mbedtls" = "xyes"; then
+    ac_fn_c_check_header_compile "$LINENO" "mbedtls/aes.h" "ac_cv_header_mbedtls_aes_h" "$ac_includes_default"
+if test "x$ac_cv_header_mbedtls_aes_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBEDTLS_AES_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "mbedtls/md.h" "ac_cv_header_mbedtls_md_h" "$ac_includes_default"
+if test "x$ac_cv_header_mbedtls_md_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBEDTLS_MD_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "mbedtls/pkcs5.h" "ac_cv_header_mbedtls_pkcs5_h" "$ac_includes_default"
+if test "x$ac_cv_header_mbedtls_pkcs5_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBEDTLS_PKCS5_H 1" >>confdefs.h
+
+fi
 
     saved_LIBS=$LIBS
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbedtls_sha1_init in -lmbedcrypto" >&5
-$as_echo_n "checking for mbedtls_sha1_init in -lmbedcrypto... " >&6; }
-if ${ac_cv_lib_mbedcrypto_mbedtls_sha1_init+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbedtls_sha1_init in -lmbedcrypto" >&5
+printf %s "checking for mbedtls_sha1_init in -lmbedcrypto... " >&6; }
+if test ${ac_cv_lib_mbedcrypto_mbedtls_sha1_init+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lmbedcrypto  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20276,33 +21785,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char mbedtls_sha1_init ();
 int
-main ()
+main (void)
 {
 return mbedtls_sha1_init ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_mbedcrypto_mbedtls_sha1_init=yes
-else
+else $as_nop
   ac_cv_lib_mbedcrypto_mbedtls_sha1_init=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mbedcrypto_mbedtls_sha1_init" >&5
-$as_echo "$ac_cv_lib_mbedcrypto_mbedtls_sha1_init" >&6; }
-if test "x$ac_cv_lib_mbedcrypto_mbedtls_sha1_init" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBMBEDCRYPTO 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mbedcrypto_mbedtls_sha1_init" >&5
+printf "%s\n" "$ac_cv_lib_mbedcrypto_mbedtls_sha1_init" >&6; }
+if test "x$ac_cv_lib_mbedcrypto_mbedtls_sha1_init" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBMBEDCRYPTO 1" >>confdefs.h
 
   LIBS="-lmbedcrypto $LIBS"
 
@@ -20313,8 +21819,8 @@ fi
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_MBEDTLS" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_MD5_MBEDTLS... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_MBEDTLS" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_MD5_MBEDTLS... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20335,20 +21841,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_MD5=yes
       found_MBEDTLS=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_MD5_MBEDTLS 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_MD5_MBEDTLS 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20359,8 +21866,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_MBEDTLS" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_RMD160_MBEDTLS... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_MBEDTLS" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_RMD160_MBEDTLS... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20381,20 +21888,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_RMD160=yes
       found_MBEDTLS=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_RMD160_MBEDTLS 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_RMD160_MBEDTLS 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20405,8 +21913,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_MBEDTLS" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA1_MBEDTLS... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_MBEDTLS" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA1_MBEDTLS... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20427,20 +21935,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA1=yes
       found_MBEDTLS=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA1_MBEDTLS 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA1_MBEDTLS 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20451,8 +21960,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_MBEDTLS" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA256_MBEDTLS... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_MBEDTLS" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA256_MBEDTLS... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20473,20 +21982,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA256=yes
       found_MBEDTLS=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA256_MBEDTLS 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA256_MBEDTLS 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20497,8 +22007,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_MBEDTLS" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA384_MBEDTLS... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_MBEDTLS" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA384_MBEDTLS... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20519,20 +22029,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA384=yes
       found_MBEDTLS=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA384_MBEDTLS 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA384_MBEDTLS 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20543,8 +22054,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_MBEDTLS" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA512_MBEDTLS... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_MBEDTLS" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA512_MBEDTLS... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20565,20 +22076,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA512=yes
       found_MBEDTLS=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA512_MBEDTLS 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA512_MBEDTLS 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20590,38 +22102,51 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 
 if test "x$with_nettle" = "xyes"; then
-    for ac_header in nettle/md5.h nettle/ripemd160.h nettle/sha.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+    ac_fn_c_check_header_compile "$LINENO" "nettle/md5.h" "ac_cv_header_nettle_md5_h" "$ac_includes_default"
+if test "x$ac_cv_header_nettle_md5_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETTLE_MD5_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "nettle/ripemd160.h" "ac_cv_header_nettle_ripemd160_h" "$ac_includes_default"
+if test "x$ac_cv_header_nettle_ripemd160_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETTLE_RIPEMD160_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "nettle/sha.h" "ac_cv_header_nettle_sha_h" "$ac_includes_default"
+if test "x$ac_cv_header_nettle_sha_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETTLE_SHA_H 1" >>confdefs.h
 
-    for ac_header in nettle/pbkdf2.h nettle/aes.h nettle/hmac.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+
+    ac_fn_c_check_header_compile "$LINENO" "nettle/pbkdf2.h" "ac_cv_header_nettle_pbkdf2_h" "$ac_includes_default"
+if test "x$ac_cv_header_nettle_pbkdf2_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETTLE_PBKDF2_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "nettle/aes.h" "ac_cv_header_nettle_aes_h" "$ac_includes_default"
+if test "x$ac_cv_header_nettle_aes_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETTLE_AES_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "nettle/hmac.h" "ac_cv_header_nettle_hmac_h" "$ac_includes_default"
+if test "x$ac_cv_header_nettle_hmac_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETTLE_HMAC_H 1" >>confdefs.h
+
+fi
 
     saved_LIBS=$LIBS
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nettle_sha1_init in -lnettle" >&5
-$as_echo_n "checking for nettle_sha1_init in -lnettle... " >&6; }
-if ${ac_cv_lib_nettle_nettle_sha1_init+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nettle_sha1_init in -lnettle" >&5
+printf %s "checking for nettle_sha1_init in -lnettle... " >&6; }
+if test ${ac_cv_lib_nettle_nettle_sha1_init+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lnettle  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20630,33 +22155,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char nettle_sha1_init ();
 int
-main ()
+main (void)
 {
 return nettle_sha1_init ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_nettle_nettle_sha1_init=yes
-else
+else $as_nop
   ac_cv_lib_nettle_nettle_sha1_init=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nettle_nettle_sha1_init" >&5
-$as_echo "$ac_cv_lib_nettle_nettle_sha1_init" >&6; }
-if test "x$ac_cv_lib_nettle_nettle_sha1_init" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNETTLE 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nettle_nettle_sha1_init" >&5
+printf "%s\n" "$ac_cv_lib_nettle_nettle_sha1_init" >&6; }
+if test "x$ac_cv_lib_nettle_nettle_sha1_init" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBNETTLE 1" >>confdefs.h
 
   LIBS="-lnettle $LIBS"
 
@@ -20667,8 +22189,8 @@ fi
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_NETTLE" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_MD5_NETTLE... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_NETTLE" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_MD5_NETTLE... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20689,20 +22211,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_MD5=yes
       found_NETTLE=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_MD5_NETTLE 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_MD5_NETTLE 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20713,8 +22236,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_NETTLE" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_RMD160_NETTLE... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_NETTLE" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_RMD160_NETTLE... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20735,20 +22258,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_RMD160=yes
       found_NETTLE=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_RMD160_NETTLE 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_RMD160_NETTLE 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20759,8 +22283,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_NETTLE" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA1_NETTLE... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_NETTLE" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA1_NETTLE... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20781,20 +22305,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA1=yes
       found_NETTLE=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA1_NETTLE 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA1_NETTLE 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20805,8 +22330,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_NETTLE" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA256_NETTLE... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_NETTLE" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA256_NETTLE... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20827,20 +22352,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA256=yes
       found_NETTLE=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA256_NETTLE 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA256_NETTLE 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20851,8 +22377,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_NETTLE" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA384_NETTLE... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_NETTLE" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA384_NETTLE... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20873,20 +22399,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA384=yes
       found_NETTLE=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA384_NETTLE 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA384_NETTLE 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20897,8 +22424,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_NETTLE" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA512_NETTLE... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_NETTLE" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA512_NETTLE... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -20919,20 +22446,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA512=yes
       found_NETTLE=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA512_NETTLE 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA512_NETTLE 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -20944,171 +22472,21 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 
 if test "x$with_openssl" != "xno"; then
-    for ac_header in openssl/evp.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "openssl/evp.h" "ac_cv_header_openssl_evp_h" "$ac_includes_default"
-if test "x$ac_cv_header_openssl_evp_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_OPENSSL_EVP_H 1
-_ACEOF
+    ac_fn_c_check_header_compile "$LINENO" "openssl/evp.h" "ac_cv_header_openssl_evp_h" "$ac_includes_default"
+if test "x$ac_cv_header_openssl_evp_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_OPENSSL_EVP_H 1" >>confdefs.h
 
 fi
 
-done
-
     saved_LIBS=$LIBS
-    case "$host_os" in
-      *mingw* | *cygwin* | *msys*)
-        case "$host_cpu" in
-          x86_64)
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENSSL_config in -leay64" >&5
-$as_echo_n "checking for OPENSSL_config in -leay64... " >&6; }
-if ${ac_cv_lib_eay64_OPENSSL_config+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-leay64  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char OPENSSL_config ();
-int
-main ()
-{
-return OPENSSL_config ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_eay64_OPENSSL_config=yes
-else
-  ac_cv_lib_eay64_OPENSSL_config=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_eay64_OPENSSL_config" >&5
-$as_echo "$ac_cv_lib_eay64_OPENSSL_config" >&6; }
-if test "x$ac_cv_lib_eay64_OPENSSL_config" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBEAY64 1
-_ACEOF
-
-  LIBS="-leay64 $LIBS"
-
-fi
-
-            if test "x$ac_cv_lib_eay64_main" != "xyes"; then
-              { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENSSL_config in -leay32" >&5
-$as_echo_n "checking for OPENSSL_config in -leay32... " >&6; }
-if ${ac_cv_lib_eay32_OPENSSL_config+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-leay32  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char OPENSSL_config ();
-int
-main ()
-{
-return OPENSSL_config ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_eay32_OPENSSL_config=yes
-else
-  ac_cv_lib_eay32_OPENSSL_config=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_eay32_OPENSSL_config" >&5
-$as_echo "$ac_cv_lib_eay32_OPENSSL_config" >&6; }
-if test "x$ac_cv_lib_eay32_OPENSSL_config" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBEAY32 1
-_ACEOF
-
-  LIBS="-leay32 $LIBS"
-
-fi
-
-            fi
-            ;;
-          *)
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENSSL_config in -leay32" >&5
-$as_echo_n "checking for OPENSSL_config in -leay32... " >&6; }
-if ${ac_cv_lib_eay32_OPENSSL_config+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-leay32  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char OPENSSL_config ();
-int
-main ()
-{
-return OPENSSL_config ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_eay32_OPENSSL_config=yes
-else
-  ac_cv_lib_eay32_OPENSSL_config=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_eay32_OPENSSL_config" >&5
-$as_echo "$ac_cv_lib_eay32_OPENSSL_config" >&6; }
-if test "x$ac_cv_lib_eay32_OPENSSL_config" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBEAY32 1
-_ACEOF
-
-  LIBS="-leay32 $LIBS"
-
-fi
-
-            ;;
-        esac
-        ;;
-      *)
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENSSL_config in -lcrypto" >&5
-$as_echo_n "checking for OPENSSL_config in -lcrypto... " >&6; }
-if ${ac_cv_lib_crypto_OPENSSL_config+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    LIBSREQUIRED="$LIBSREQUIRED${LIBSREQUIRED:+ }libcrypto"
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OPENSSL_config in -lcrypto" >&5
+printf %s "checking for OPENSSL_config in -lcrypto... " >&6; }
+if test ${ac_cv_lib_crypto_OPENSSL_config+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcrypto  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -21117,47 +22495,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char OPENSSL_config ();
 int
-main ()
+main (void)
 {
 return OPENSSL_config ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_crypto_OPENSSL_config=yes
-else
+else $as_nop
   ac_cv_lib_crypto_OPENSSL_config=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_OPENSSL_config" >&5
-$as_echo "$ac_cv_lib_crypto_OPENSSL_config" >&6; }
-if test "x$ac_cv_lib_crypto_OPENSSL_config" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBCRYPTO 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_OPENSSL_config" >&5
+printf "%s\n" "$ac_cv_lib_crypto_OPENSSL_config" >&6; }
+if test "x$ac_cv_lib_crypto_OPENSSL_config" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBCRYPTO 1" >>confdefs.h
 
   LIBS="-lcrypto $LIBS"
 
 fi
 
-        ;;
-    esac
 
   if test "$found_MD5" != yes; then
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_OPENSSL" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_MD5_OPENSSL... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_OPENSSL" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_MD5_OPENSSL... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21178,20 +22551,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_MD5=yes
       found_OPENSSL=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_MD5_OPENSSL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_MD5_OPENSSL 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21202,8 +22576,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_OPENSSL" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_RMD160_OPENSSL... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_OPENSSL" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_RMD160_OPENSSL... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21224,20 +22598,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_RMD160=yes
       found_OPENSSL=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_RMD160_OPENSSL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_RMD160_OPENSSL 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21248,8 +22623,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_OPENSSL" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA1_OPENSSL... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_OPENSSL" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA1_OPENSSL... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21270,20 +22645,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA1=yes
       found_OPENSSL=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA1_OPENSSL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA1_OPENSSL 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21294,8 +22670,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_OPENSSL" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA256_OPENSSL... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_OPENSSL" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA256_OPENSSL... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21316,20 +22692,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA256=yes
       found_OPENSSL=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA256_OPENSSL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA256_OPENSSL 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21340,8 +22717,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_OPENSSL" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA384_OPENSSL... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_OPENSSL" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA384_OPENSSL... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21362,20 +22739,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA384=yes
       found_OPENSSL=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA384_OPENSSL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA384_OPENSSL 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21386,8 +22764,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_OPENSSL" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA512_OPENSSL... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_OPENSSL" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA512_OPENSSL... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21408,59 +22786,77 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA512=yes
       found_OPENSSL=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA512_OPENSSL 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA512_OPENSSL 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
   fi
 
-    for ac_func in PKCS5_PBKDF2_HMAC_SHA1
-do :
-  ac_fn_c_check_func "$LINENO" "PKCS5_PBKDF2_HMAC_SHA1" "ac_cv_func_PKCS5_PBKDF2_HMAC_SHA1"
-if test "x$ac_cv_func_PKCS5_PBKDF2_HMAC_SHA1" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_PKCS5_PBKDF2_HMAC_SHA1 1
-_ACEOF
+    ac_fn_c_check_func "$LINENO" "PKCS5_PBKDF2_HMAC_SHA1" "ac_cv_func_PKCS5_PBKDF2_HMAC_SHA1"
+if test "x$ac_cv_func_PKCS5_PBKDF2_HMAC_SHA1" = xyes
+then :
+  printf "%s\n" "#define HAVE_PKCS5_PBKDF2_HMAC_SHA1 1" >>confdefs.h
 
 fi
-done
 
 fi
 
+
+
 # Probe libmd AFTER OpenSSL/libcrypto.
 # The two are incompatible and OpenSSL is more complete.
-for ac_header in md5.h ripemd.h sha.h sha256.h sha512.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "md5.h" "ac_cv_header_md5_h" "$ac_includes_default"
+if test "x$ac_cv_header_md5_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_MD5_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "ripemd.h" "ac_cv_header_ripemd_h" "$ac_includes_default"
+if test "x$ac_cv_header_ripemd_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_RIPEMD_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "sha.h" "ac_cv_header_sha_h" "$ac_includes_default"
+if test "x$ac_cv_header_sha_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SHA_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sha256.h" "ac_cv_header_sha256_h" "$ac_includes_default"
+if test "x$ac_cv_header_sha256_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SHA256_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sha512.h" "ac_cv_header_sha512_h" "$ac_includes_default"
+if test "x$ac_cv_header_sha512_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SHA512_H 1" >>confdefs.h
+
+fi
 
 saved_LIBS=$LIBS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MD5Init in -lmd" >&5
-$as_echo_n "checking for MD5Init in -lmd... " >&6; }
-if ${ac_cv_lib_md_MD5Init+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MD5Init in -lmd" >&5
+printf %s "checking for MD5Init in -lmd... " >&6; }
+if test ${ac_cv_lib_md_MD5Init+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lmd  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -21469,33 +22865,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char MD5Init ();
 int
-main ()
+main (void)
 {
 return MD5Init ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_md_MD5Init=yes
-else
+else $as_nop
   ac_cv_lib_md_MD5Init=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_md_MD5Init" >&5
-$as_echo "$ac_cv_lib_md_MD5Init" >&6; }
-if test "x$ac_cv_lib_md_MD5Init" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBMD 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_md_MD5Init" >&5
+printf "%s\n" "$ac_cv_lib_md_MD5Init" >&6; }
+if test "x$ac_cv_lib_md_MD5Init" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBMD 1" >>confdefs.h
 
   LIBS="-lmd $LIBS"
 
@@ -21506,8 +22899,8 @@ fi
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_LIBMD" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_MD5_LIBMD... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_LIBMD" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_MD5_LIBMD... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21528,20 +22921,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_MD5=yes
       found_LIBMD=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_MD5_LIBMD 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_MD5_LIBMD 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21552,8 +22946,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_LIBMD" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_RMD160_LIBMD... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_RMD160_LIBMD" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_RMD160_LIBMD... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21574,20 +22968,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_RMD160=yes
       found_LIBMD=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_RMD160_LIBMD 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_RMD160_LIBMD 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21598,8 +22993,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_LIBMD" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA1_LIBMD... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_LIBMD" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA1_LIBMD... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21620,20 +23015,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA1=yes
       found_LIBMD=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA1_LIBMD 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA1_LIBMD 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21644,8 +23040,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBMD" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA256_LIBMD... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_LIBMD" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA256_LIBMD... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21666,20 +23062,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA256=yes
       found_LIBMD=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA256_LIBMD 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA256_LIBMD 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21690,8 +23087,8 @@ rm -f core conftest.err conftest.$ac_objext \
     saved_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$CPPFLAGS -I. -I$srcdir -I$srcdir/libarchive"
     touch "check_crypto_md.h"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBMD" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA512_LIBMD... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_LIBMD" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA512_LIBMD... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21712,20 +23109,21 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA512=yes
       found_LIBMD=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA512_LIBMD 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA512_LIBMD 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     CPPFLAGS="$saved_CPPFLAGS"
     rm "check_crypto_md.h"
@@ -21739,8 +23137,8 @@ case "$host_os" in
   *mingw* | *cygwin* | *msys*)
 
   if test "$found_MD5" != yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_WIN" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_MD5_WIN... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_MD5_WIN" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_MD5_WIN... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21758,27 +23156,28 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_MD5=yes
       found_WIN=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_MD5_WIN 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_MD5_WIN 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   fi
 
 
   if test "$found_SHA1" != yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_WIN" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA1_WIN... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA1_WIN" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA1_WIN... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21796,27 +23195,28 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA1=yes
       found_WIN=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA1_WIN 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA1_WIN 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   fi
 
 
   if test "$found_SHA256" != yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_WIN" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA256_WIN... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA256_WIN" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA256_WIN... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21834,27 +23234,28 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA256=yes
       found_WIN=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA256_WIN 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA256_WIN 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   fi
 
 
   if test "$found_SHA384" != yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_WIN" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA384_WIN... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA384_WIN" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA384_WIN... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21872,27 +23273,28 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA384=yes
       found_WIN=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA384_WIN 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA384_WIN 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   fi
 
 
   if test "$found_SHA512" != yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_WIN" >&5
-$as_echo_n "checking support for ARCHIVE_CRYPTO_SHA512_WIN... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for ARCHIVE_CRYPTO_SHA512_WIN" >&5
+printf %s "checking support for ARCHIVE_CRYPTO_SHA512_WIN... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -21910,26 +23312,57 @@ main(int argc, char **argv)
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"
+then :
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
       found_SHA512=yes
       found_WIN=yes
 
-$as_echo "#define ARCHIVE_CRYPTO_SHA512_WIN 1" >>confdefs.h
+printf "%s\n" "#define ARCHIVE_CRYPTO_SHA512_WIN 1" >>confdefs.h
 
 
-else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+else $as_nop
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
   fi
 
        ;;
 esac
 
+saved_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -fvisibility=hidden -Werror"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiler supports visibility annotations" >&5
+printf %s "checking whether compiler supports visibility annotations... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+                 int foo( void ) __attribute__((visibility("default")));
+
+int
+main (void)
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+  CFLAGS="$saved_CFLAGS -fvisibility=hidden -D__LIBARCHIVE_ENABLE_VISIBILITY";
+                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else $as_nop
+  CFLAGS="$saved_CFLAGS"
+                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
+
 # Ensure test directories are present if building out-of-tree
 ac_config_commands="$ac_config_commands mkdirs"
 
@@ -21961,8 +23394,8 @@ _ACEOF
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
@@ -21992,15 +23425,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      /^ac_cv_env_/b end
      t clear
      :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
      t end
      s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
     if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
       if test ! -f "$cache_file" || test -h "$cache_file"; then
        cat confcache >"$cache_file"
       else
@@ -22014,8 +23447,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
       fi
     fi
   else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
 rm -f confcache
@@ -22032,7 +23465,7 @@ U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
   #    will be set to the directory where LIBOBJS objects are built.
   as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -22043,14 +23476,14 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
-$as_echo_n "checking that generated files are newer than configure... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+printf %s "checking that generated files are newer than configure... " >&6; }
    if test -n "$am_sleep_pid"; then
      # Hide warnings about reused PIDs.
      wait $am_sleep_pid 2>/dev/null
    fi
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
-$as_echo "done" >&6; }
+   { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5
+printf "%s\n" "done" >&6; }
  if test -n "$EXEEXT"; then
   am__EXEEXT_TRUE=
   am__EXEEXT_FALSE='#'
@@ -22103,6 +23536,14 @@ if test -z "${STATIC_BSDCPIO_TRUE}" && test -z "${STATIC_BSDCPIO_FALSE}"; then
   as_fn_error $? "conditional \"STATIC_BSDCPIO\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${BUILD_BSDUNZIP_TRUE}" && test -z "${BUILD_BSDUNZIP_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_BSDUNZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${STATIC_BSDUNZIP_TRUE}" && test -z "${STATIC_BSDUNZIP_FALSE}"; then
+  as_fn_error $? "conditional \"STATIC_BSDUNZIP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${INC_BLAKE2_TRUE}" && test -z "${INC_BLAKE2_FALSE}"; then
   as_fn_error $? "conditional \"INC_BLAKE2\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -22128,8 +23569,8 @@ fi
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
 as_write_fail=0
 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
 #! $SHELL
@@ -22152,14 +23593,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
-else
+else $as_nop
   case `(set -o) 2>/dev/null` in #(
   *posix*) :
     set -o posix ;; #(
@@ -22169,46 +23612,46 @@ esac
 fi
 
 
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
 as_nl='
 '
 export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" ""       $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi
 
 # The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
   PATH_SEPARATOR=:
   (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
     (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -22217,13 +23660,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
 fi
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
 # Find who we are.  Look in the path if we contain no directory separator.
 as_myself=
 case $0 in #((
@@ -22232,8 +23668,12 @@ case $0 in #((
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
   done
 IFS=$as_save_IFS
 
@@ -22245,30 +23685,10 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
   exit 1
 fi
 
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
 # as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -22281,13 +23701,14 @@ as_fn_error ()
   as_status=$1; test $as_status -eq 0 && as_status=1
   if test "$4"; then
     as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $2" >&2
+  printf "%s\n" "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
 
+
 # as_fn_set_status STATUS
 # -----------------------
 # Set $? to STATUS, without forking.
@@ -22314,18 +23735,20 @@ as_fn_unset ()
   { eval $1=; unset $1;}
 }
 as_unset=as_fn_unset
+
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
 # advantage of any shell optimizations that allow amortized linear growth over
 # repeated appends, instead of the typical quadratic growth present in naive
 # implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
   eval 'as_fn_append ()
   {
     eval $1+=\$2
   }'
-else
+else $as_nop
   as_fn_append ()
   {
     eval $1=\$$1\$2
@@ -22337,12 +23760,13 @@ fi # as_fn_append
 # Perform arithmetic evaluation on the ARGs, and store the result in the
 # global $as_val. Take advantage of shells that can avoid forks. The arguments
 # must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
   eval 'as_fn_arith ()
   {
     as_val=$(( $* ))
   }'
-else
+else $as_nop
   as_fn_arith ()
   {
     as_val=`expr "$@" || test $? -eq 1`
@@ -22373,7 +23797,7 @@ as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -22395,6 +23819,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
 as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
 ECHO_C= ECHO_N= ECHO_T=
 case `echo -n x` in #(((((
 -n*)
@@ -22408,6 +23836,12 @@ case `echo -n x` in #(((((
   ECHO_N='-n';;
 esac
 
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n.  New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
@@ -22449,7 +23883,7 @@ as_fn_mkdir_p ()
     as_dirs=
     while :; do
       case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
       *) as_qdir=$as_dir;;
       esac
       as_dirs="'$as_qdir' $as_dirs"
@@ -22458,7 +23892,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_dir" : 'X\(//\)[^/]' \| \
         X"$as_dir" : 'X\(//\)$' \| \
         X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -22520,8 +23954,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libarchive $as_me 3.5.2, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+This file was extended by libarchive $as_me 3.7.2, which was
+generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -22583,14 +24017,16 @@ $config_commands
 Report bugs to <libarchive-discuss@googlegroups.com>."
 
 _ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libarchive config.status 3.5.2
-configured by $0, generated by GNU Autoconf 2.69,
+libarchive config.status 3.7.2
+configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
+    printf "%s\n" "$ac_cs_version"; exit ;;
   --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
+    printf "%s\n" "$ac_cs_config"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
     case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
     '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
@@ -22646,7 +24082,7 @@ do
   --header | --heade | --head | --hea )
     $ac_shift
     case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     as_fn_append CONFIG_HEADERS " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -22655,7 +24091,7 @@ do
     as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
+    printf "%s\n" "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
@@ -22683,7 +24119,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
   set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
   export CONFIG_SHELL
   exec "\$@"
@@ -22697,7 +24133,7 @@ exec 5>>config.log
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
 ## Running $as_me. ##
 _ASBOX
-  $as_echo "$ac_log"
+  printf "%s\n" "$ac_log"
 } >&5
 
 _ACEOF
@@ -23017,9 +24453,9 @@ done
 # We use the long form for the default assignment because of an extremely
 # bizarre bug on SunOS 4.1.3.
 if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+  test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
+  test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
+  test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands
 fi
 
 # Have a temporary directory for convenience.  Make it in the build tree
@@ -23355,7 +24791,7 @@ do
           esac ||
           as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
     done
 
     # use $as_me), people would be surprised to read:
     #    /* config.h.  Generated by config.status.  */
     configure_input='Generated from '`
-         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+         printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
        `' by configure.'
     if test x"$ac_file" != x-; then
       configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
     fi
     # Neutralize special characters interpreted by sed in replacement strings.
     case $configure_input in #(
     *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
+       ac_sed_conf_input=`printf "%s\n" "$configure_input" |
        sed 's/[\\\\&|]/\\\\&/g'`;; #(
     *) ac_sed_conf_input=$configure_input;;
     esac
@@ -23390,7 +24826,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$ac_file" : 'X\(//\)[^/]' \| \
         X"$ac_file" : 'X\(//\)$' \| \
         X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -23414,9 +24850,9 @@ $as_echo X"$ac_file" |
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -23478,8 +24914,8 @@ ac_sed_dataroot='
 case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
 *datarootdir*) ac_datarootdir_seen=yes;;
 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
   ac_datarootdir_hack='
@@ -23523,9 +24959,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
       "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
   rm -f "$ac_tmp/stdin"
@@ -23541,20 +24977,20 @@ which seems to be undefined.  Please make sure it is defined" >&2;}
   #
   if test x"$ac_file" != x-; then
     {
-      $as_echo "/* $configure_input  */" \
+      printf "%s\n" "/* $configure_input  */" >&1 \
       && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
     } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
       mv "$ac_tmp/config.h" "$ac_file" \
        || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
-    $as_echo "/* $configure_input  */" \
+    printf "%s\n" "/* $configure_input  */" >&1 \
       && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
@@ -23574,7 +25010,7 @@ $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$_am_arg" : 'X\(//\)[^/]' \| \
         X"$_am_arg" : 'X\(//\)$' \| \
         X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
+printf "%s\n" X"$_am_arg" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -23594,8 +25030,8 @@ $as_echo X"$_am_arg" |
          s/.*/./; q'`/stamp-h$_am_stamp_count
  ;;
 
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
+  :C)  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+printf "%s\n" "$as_me: executing $ac_file commands" >&6;}
  ;;
   esac
 
@@ -23621,7 +25057,7 @@ esac
   for am_mf
   do
     # Strip MF so we end up with the name of the file.
-    am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+    am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile which includes
     # dependency-tracking related rules and includes.
     # Grep'ing the whole file directly is not great: AIX grep has a line
@@ -23633,7 +25069,7 @@ $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$am_mf" : 'X\(//\)[^/]' \| \
         X"$am_mf" : 'X\(//\)$' \| \
         X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$am_mf" |
+printf "%s\n" X"$am_mf" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -23655,7 +25091,7 @@ $as_echo X"$am_mf" |
 $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
         X"$am_mf" : 'X\(//\)$' \| \
         X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$am_mf" |
+printf "%s\n" X/"$am_mf" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -23680,10 +25116,12 @@ $as_echo X/"$am_mf" |
    (exit $ac_status); } || am_rc=$?
   done
   if test $am_rc -ne 0; then
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "Something went wrong bootstrapping makefile fragments
-    for automatic dependency tracking.  Try re-running configure with the
+    for automatic dependency tracking.  If GNU make was not used, consider
+    re-running the configure script with MAKE=\"gmake\" (or whatever is
+    necessary).  You can also try re-running configure with the
     '--disable-dependency-tracking' option to at least be able to build
     the package (albeit without support for automatic dependency tracking).
 See \`config.log' for more details" "$LINENO" 5; }
@@ -24225,6 +25663,7 @@ _LT_EOF
   esac
 
 
+
 ltmain=$ac_aux_dir/ltmain.sh
 
 
@@ -24275,7 +25714,8 @@ if test "$no_create" != yes; then
   $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
+
index f59ada9..6c3c704 100644 (file)
@@ -4,15 +4,16 @@ dnl First, define all of the version numbers up front.
 dnl In particular, this allows the version macro to be used in AC_INIT
 
 dnl These first two version numbers are updated automatically on each release.
-m4_define([LIBARCHIVE_VERSION_S],[3.5.2])
-m4_define([LIBARCHIVE_VERSION_N],[3005002])
+m4_define([LIBARCHIVE_VERSION_S],[3.7.2])
+m4_define([LIBARCHIVE_VERSION_N],[3007002])
 
 dnl bsdtar and bsdcpio versioning tracks libarchive
 m4_define([BSDTAR_VERSION_S],LIBARCHIVE_VERSION_S())
 m4_define([BSDCPIO_VERSION_S],LIBARCHIVE_VERSION_S())
 m4_define([BSDCAT_VERSION_S],LIBARCHIVE_VERSION_S())
+m4_define([BSDUNZIP_VERSION_S],LIBARCHIVE_VERSION_S())
 
-AC_PREREQ([2.69])
+AC_PREREQ([2.71])
 
 #
 # Now starts the "real" configure script.
@@ -59,6 +60,8 @@ AC_DEFINE([BSDTAR_VERSION_STRING],"BSDTAR_VERSION_S()",
        [Version number of bsdtar])
 AC_DEFINE([BSDCAT_VERSION_STRING],"BSDTAR_VERSION_S()",
        [Version number of bsdcat])
+AC_DEFINE([BSDUNZIP_VERSION_STRING],"BSDUNZIP_VERSION_S()",
+       [Version number of bsdunzip])
 
 # The shell variables here must be the same as the AC_SUBST() variables
 # below, but the shell variable names apparently cannot be the same as
@@ -66,6 +69,7 @@ AC_DEFINE([BSDCAT_VERSION_STRING],"BSDTAR_VERSION_S()",
 BSDCPIO_VERSION_STRING=BSDCPIO_VERSION_S()
 BSDTAR_VERSION_STRING=BSDTAR_VERSION_S()
 BSDCAT_VERSION_STRING=BSDCAT_VERSION_S()
+BSDUNZIP_VERSION_STRING=BSDUNZIP_VERSION_S()
 LIBARCHIVE_VERSION_STRING=LIBARCHIVE_VERSION_S()
 LIBARCHIVE_VERSION_NUMBER=LIBARCHIVE_VERSION_N()
 
@@ -76,6 +80,7 @@ AC_SUBST(ARCHIVE_LIBTOOL_VERSION)
 AC_SUBST(BSDCPIO_VERSION_STRING)
 AC_SUBST(BSDTAR_VERSION_STRING)
 AC_SUBST(BSDCAT_VERSION_STRING)
+AC_SUBST(BSDUNZIP_VERSION_STRING)
 AC_SUBST(LIBARCHIVE_VERSION_STRING)
 AC_SUBST(LIBARCHIVE_VERSION_NUMBER)
 
@@ -99,13 +104,12 @@ AM_CONDITIONAL([INC_CYGWIN_FILES], [test $inc_cygwin_files = yes])
 dnl Defines that are required for specific platforms (e.g. -D_POSIX_SOURCE, etc)
 PLATFORMCPPFLAGS=
 case "$host_os" in
-  *mingw* ) PLATFORMCPPFLAGS=-D__USE_MINGW_ANSI_STDIO ;;
+  *mingw* ) PLATFORMCPPFLAGS=-D__USE_MINGW_ANSI_STDIO -D__MINGW_USE_VC2005_COMPAT ;;
 esac
 AC_SUBST(PLATFORMCPPFLAGS)
 
 # Checks for programs.
 AC_PROG_CC
-AC_PROG_CC_C99
 AM_PROG_CC_C_O
 AC_PROG_CPP
 AC_USE_SYSTEM_EXTENSIONS
@@ -268,12 +272,64 @@ case $host in
   ;;
 esac
 
+#
+# Options for building bsdunzip.
+#
+# Default is to build bsdunzip, but allow people to override that.
+# Bsdunzip has not yet been ported for Windows
+#
+case "$host_os" in
+  *mingw* | *msys*)
+       enable_bsdunzip=no
+       ;;
+  *)
+       AC_ARG_ENABLE([bsdunzip],
+         [AS_HELP_STRING([--enable-bsdunzip], [enable build of bsdunzip (default)])
+         AS_HELP_STRING([--enable-bsdunzip=static], [force static build of bsdunzip])
+         AS_HELP_STRING([--enable-bsdunzip=shared], [force dynamic build of bsdunzip])
+         AS_HELP_STRING([--disable-bsdunzip], [disable build of bsdunzip])],
+         [], [enable_bsdunzip=yes])
+       ;;
+esac
+
+case "$enable_bsdunzip" in
+yes)
+       if test "$enable_static" = "no"; then
+               static_bsdunzip=no
+       else
+               static_bsdunzip=yes
+       fi
+       build_bsdunzip=yes
+       ;;
+dynamic|shared)
+       if test "$enable_shared" = "no"; then
+               AC_MSG_FAILURE([Shared linking of bsdunzip requires shared libarchive])
+       fi
+       build_bsdunzip=yes
+       static_bsdunzip=no
+       ;;
+static)
+       build_bsdunzip=yes
+       static_bsdunzip=yes
+       ;;
+no)
+       build_bsdunzip=no
+       static_bsdunzip=no
+       ;;
+*)
+       AC_MSG_FAILURE([Unsupported value for --enable-bsdunzip])
+       ;;
+esac
+
+AM_CONDITIONAL([BUILD_BSDUNZIP], [ test "$build_bsdunzip" = yes ])
+AM_CONDITIONAL([STATIC_BSDUNZIP], [ test "$static_bsdunzip" = yes ])
+
 # Checks for header files.
 AC_HEADER_DIRENT
 AC_HEADER_SYS_WAIT
 AC_CHECK_HEADERS([acl/libacl.h attr/xattr.h])
 AC_CHECK_HEADERS([copyfile.h ctype.h])
-AC_CHECK_HEADERS([errno.h ext2fs/ext2_fs.h fcntl.h grp.h])
+AC_CHECK_HEADERS([errno.h ext2fs/ext2_fs.h fcntl.h fnmatch.h grp.h])
 
 AC_CACHE_CHECK([whether EXT2_IOC_GETFLAGS is usable],
     [ac_cv_have_decl_EXT2_IOC_GETFLAGS],
@@ -306,7 +362,7 @@ AC_CHECK_HEADERS([locale.h membership.h paths.h poll.h pthread.h pwd.h])
 AC_CHECK_HEADERS([readpassphrase.h signal.h spawn.h])
 AC_CHECK_HEADERS([stdarg.h stdint.h stdlib.h string.h])
 AC_CHECK_HEADERS([sys/acl.h sys/cdefs.h sys/ea.h sys/extattr.h])
-AC_CHECK_HEADERS([sys/ioctl.h sys/mkdev.h sys/mount.h])
+AC_CHECK_HEADERS([sys/ioctl.h sys/mkdev.h sys/mount.h sys/queue.h])
 AC_CHECK_HEADERS([sys/param.h sys/poll.h sys/richacl.h])
 AC_CHECK_HEADERS([sys/select.h sys/statfs.h sys/statvfs.h sys/sysmacros.h])
 AC_CHECK_HEADERS([sys/time.h sys/utime.h sys/utsname.h sys/vfs.h sys/xattr.h])
@@ -378,6 +434,9 @@ if test "x$with_iconv" != "xno"; then
     AC_CHECK_HEADERS([localcharset.h])
     am_save_LIBS="$LIBS"
     LIBS="${LIBS} ${LIBICONV}"
+    if test -n "$LIBICONV"; then
+      LIBSREQUIRED="$LIBSREQUIRED${LIBSREQUIRED:+ }iconv"
+    fi
     AC_CHECK_FUNCS([locale_charset])
     LIBS="${am_save_LIBS}"
     if test "x$ac_cv_func_locale_charset" != "xyes"; then
@@ -400,7 +459,9 @@ AC_ARG_WITH([zstd],
 
 if test "x$with_zstd" != "xno"; then
   AC_CHECK_HEADERS([zstd.h])
-  AC_CHECK_LIB(zstd,ZSTD_compressStream)
+  AC_CHECK_LIB(zstd,ZSTD_decompressStream)
+  AC_CHECK_LIB(zstd,ZSTD_compressStream,
+    AC_DEFINE([HAVE_LIBZSTD_COMPRESSOR], [1], [Define to 1 if you have the `zstd' library (-lzstd) with compression support.]))
 fi
 
 AC_ARG_WITH([lzma],
@@ -426,6 +487,19 @@ if test "x$with_lzma" != "xno"; then
   if test "x$ac_cv_lzma_has_mt" != xno; then
          AC_DEFINE([HAVE_LZMA_STREAM_ENCODER_MT], [1], [Define to 1 if you have the `lzma_stream_encoder_mt' function.])
   fi
+
+  AC_CACHE_CHECK(
+    [whether we have ARM64 filter support in lzma],
+    ac_cv_lzma_has_arm64,
+    [AC_LINK_IFELSE([
+      AC_LANG_PROGRAM([[#include <lzma.h>]
+                       [#ifndef LZMA_FILTER_ARM64]
+                       [#error unsupported]
+                       [#endif]])],
+      [ac_cv_lzma_has_arm64=yes], [ac_cv_lzma_has_arm64=no])])
+  if test "x$ac_cv_lzma_has_arm64" != xno; then
+         AC_DEFINE([HAVE_LZMA_FILTER_ARM64], [1], [Define to 1 if you have the `LZMA_FILTER_ARM64' macro.])
+  fi
 fi
 
 AC_ARG_WITH([lzo2],
@@ -540,6 +614,22 @@ fi
 # Checks for supported compiler flags
 AX_APPEND_COMPILE_FLAGS([-Wall -Wformat -Wformat-security])
 
+# Place the functions and data into separate sections, allowing the linker
+# to garbage collect the unused ones.
+save_LDFLAGS=$LDFLAGS
+LDFLAGS="$LDFLAGS -Wl,--gc-sections"
+AC_MSG_CHECKING([whether ld supports --gc-sections])
+AC_LINK_IFELSE(
+    [AC_LANG_SOURCE([static char UnusedFunc() { return 5; } int main() { return 0;}])],
+    [AC_MSG_RESULT([yes])
+        GC_SECTIONS="-Wl,--gc-sections";
+        AX_APPEND_COMPILE_FLAGS([-ffunction-sections -fdata-sections])],
+    [AC_MSG_RESULT([no])
+        GC_SECTIONS="";])
+LDFLAGS=$save_LDFLAGS
+
+AC_SUBST(GC_SECTIONS)
+
 # Checks for typedefs, structures, and compiler characteristics.
 AC_C_CONST
 # la_TYPE_UID_T defaults to "int", which is incorrect for MinGW
@@ -633,7 +723,10 @@ AC_CHECK_TYPE([wchar_t],
                AC_CHECK_SIZEOF([wchar_t])],
                [])
 
-AC_HEADER_TIME
+AX_COMPILE_CHECK_SIZEOF(int)
+AX_COMPILE_CHECK_SIZEOF(long)
+
+AC_CHECK_HEADERS_ONCE([sys/time.h])
 
 # Checks for library functions.
 AC_PROG_GCC_TRADITIONAL
@@ -651,10 +744,10 @@ AC_FUNC_VPRINTF
 # workarounds, we use 'void *' for 'struct SECURITY_ATTRIBUTES *'
 AC_CHECK_STDCALL_FUNC([CreateHardLinkA],[const char *, const char *, void *])
 AC_CHECK_FUNCS([arc4random_buf chflags chown chroot ctime_r])
-AC_CHECK_FUNCS([fchdir fchflags fchmod fchown fcntl fdopendir fork])
+AC_CHECK_FUNCS([fchdir fchflags fchmod fchown fcntl fdopendir fnmatch fork])
 AC_CHECK_FUNCS([fstat fstatat fstatfs fstatvfs ftruncate])
 AC_CHECK_FUNCS([futimens futimes futimesat])
-AC_CHECK_FUNCS([geteuid getpid getgrgid_r getgrnam_r])
+AC_CHECK_FUNCS([geteuid getline getpid getgrgid_r getgrnam_r])
 AC_CHECK_FUNCS([getpwnam_r getpwuid_r getvfsbyname gmtime_r])
 AC_CHECK_FUNCS([lchflags lchmod lchown link linkat localtime_r lstat lutimes])
 AC_CHECK_FUNCS([mbrtowc memmove memset])
@@ -665,8 +758,24 @@ AC_CHECK_FUNCS([select setenv setlocale sigaction statfs statvfs])
 AC_CHECK_FUNCS([strchr strdup strerror strncpy_s strnlen strrchr symlink])
 AC_CHECK_FUNCS([timegm tzset unlinkat unsetenv utime utimensat utimes vfork])
 AC_CHECK_FUNCS([wcrtomb wcscmp wcscpy wcslen wctomb wmemcmp wmemcpy wmemmove])
-AC_CHECK_FUNCS([_ctime64_s _fseeki64])
-AC_CHECK_FUNCS([_get_timezone _gmtime64_s _localtime64_s _mkgmtime64])
+AC_CHECK_FUNCS([_fseeki64 _get_timezone])
+AC_CHECK_DECL([cmtime_s],
+               [AC_DEFINE(HAVE_CMTIME_S, 1, [cmtime_s function])],
+               [],
+               [#include <time.h>])
+AC_CHECK_DECL([gmtime_s],
+               [AC_DEFINE(HAVE_GMTIME_S, 1, [gmtime_s function])],
+               [],
+               [#include <time.h>])
+AC_CHECK_TYPE([localtime_s],
+               [AC_DEFINE(HAVE_LOCALTIME_S, 1, [localtime_s function])],
+               [],
+               [#include <time.h>])
+AC_CHECK_DECL([_mkgmtime],
+               [AC_DEFINE(HAVE__MKGMTIME, 1, [_mkgmtime function])],
+               [],
+               [#include <time.h>])
+
 # detects cygwin-1.7, as opposed to older versions
 AC_CHECK_FUNCS([cygwin_conv_path])
 
@@ -694,14 +803,14 @@ AC_CHECK_TYPES(struct statfs,,,
 
 # There are several variants of readdir_r around; we only
 # accept the POSIX-compliant version.
-AC_COMPILE_IFELSE(
+AC_LINK_IFELSE(
  [AC_LANG_PROGRAM([[#include <dirent.h>]],
                   [[DIR *dir; struct dirent e, *r;
                    return(readdir_r(dir, &e, &r));]])],
  [AC_DEFINE(HAVE_READDIR_R,1,[Define to 1 if you have a POSIX compatible readdir_r])]
 )
 # dirfd can be either a function or a macro.
-AC_COMPILE_IFELSE(
+AC_LINK_IFELSE(
  [AC_LANG_PROGRAM([[#include <dirent.h>
                     DIR *dir;]],
                   [[return(dirfd(dir));]])],
@@ -1188,24 +1297,8 @@ fi
 if test "x$with_openssl" != "xno"; then
     AC_CHECK_HEADERS([openssl/evp.h])
     saved_LIBS=$LIBS
-    case "$host_os" in
-      *mingw* | *cygwin* | *msys*)
-        case "$host_cpu" in
-          x86_64)
-            AC_CHECK_LIB(eay64,OPENSSL_config)
-            if test "x$ac_cv_lib_eay64_main" != "xyes"; then
-              AC_CHECK_LIB(eay32,OPENSSL_config)
-            fi
-            ;;
-          *)
-            AC_CHECK_LIB(eay32,OPENSSL_config)
-            ;;
-        esac
-        ;;
-      *)
-        AC_CHECK_LIB(crypto,OPENSSL_config)
-        ;;
-    esac
+    LIBSREQUIRED="$LIBSREQUIRED${LIBSREQUIRED:+ }libcrypto"
+    AC_CHECK_LIB(crypto,OPENSSL_config)
     CRYPTO_CHECK(MD5, OPENSSL, md5)
     CRYPTO_CHECK(RMD160, OPENSSL, rmd160)
     CRYPTO_CHECK(SHA1, OPENSSL, sha1)
@@ -1215,6 +1308,8 @@ if test "x$with_openssl" != "xno"; then
     AC_CHECK_FUNCS([PKCS5_PBKDF2_HMAC_SHA1])
 fi
 
+AC_SUBST(LIBSREQUIRED)
+
 # Probe libmd AFTER OpenSSL/libcrypto.
 # The two are incompatible and OpenSSL is more complete.
 AC_CHECK_HEADERS([md5.h ripemd.h sha.h sha256.h sha512.h])
@@ -1239,6 +1334,18 @@ case "$host_os" in
        ;;
 esac
 
+dnl Visibility annotations...
+saved_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -fvisibility=hidden -Werror"
+AC_MSG_CHECKING(whether compiler supports visibility annotations)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([
+                 int foo( void ) __attribute__((visibility("default")));
+               ])],
+               [CFLAGS="$saved_CFLAGS -fvisibility=hidden -D__LIBARCHIVE_ENABLE_VISIBILITY";
+                AC_MSG_RESULT(yes)],
+               [CFLAGS="$saved_CFLAGS"
+                AC_MSG_RESULT(no)])
+
 # Ensure test directories are present if building out-of-tree
 AC_CONFIG_COMMANDS([mkdirs],
                   [mkdir -p libarchive/test tar/test cat/test cpio/test])
index 8e18312..0ccb20c 100644 (file)
 #define SIZEOF_WCHAR_T 4
 #define STDC_HEADERS 1
 #define STRERROR_R_CHAR_P 1
-#define TIME_WITH_SYS_TIME 1
+#define HAVE_SYS_TIME_H 1
 #endif
index 709b657..371c6cc 100644 (file)
 #define SIZEOF_WCHAR_T 4
 #define STDC_HEADERS 1
 #define STRERROR_R_CHAR_P 1
-#define TIME_WITH_SYS_TIME 1
+#define HAVE_SYS_TIME_H 1
 #define _GNU_SOURCE 1
 
 #endif
index 2d899d1..6550e5e 100644 (file)
 /* Define to 1 if you have the <attr/xattr.h> header file. */
 /* #undef HAVE_ATTR_XATTR_H */
 
-/* Define to 1 if you have the <Bcrypt.h> header file. */
+/* Define to 1 if you have the <bcrypt.h> header file. */
 #define HAVE_BCRYPT_H
 
 /* Define to 1 if you have the <bzlib.h> header file. */
 /* Define to 1 if you have the <zlib.h> header file. */
 /* #undef HAVE_ZLIB_H */
 
-/* Define to 1 if you have the `_ctime64_s' function. */
-#define HAVE__CTIME64_S 1
+/* Define to 1 if you have the `ctime_s' function. */
+#define HAVE_CTIME_S 1
 
 /* Define to 1 if you have the `_fseeki64' function. */
 #define HAVE__FSEEKI64 1
 /* Define to 1 if you have the `_get_timezone' function. */
 /* #undef HAVE__GET_TIMEZONE */
 
-/* Define to 1 if you have the `_localtime64_s' function. */
-#define HAVE__LOCALTIME64_S 1
+/* Define to 1 if you have the `localtime_s' function. */
+#define HAVE_LOCALTIME_S 1
 
-/* Define to 1 if you have the `_mkgmtime64' function. */
-/* #define HAVE__MKGMTIME64 1 */
+/* Define to 1 if you have the `_mkgmtime' function. */
+/* #define HAVE__MKGMTIME 1 */
 
 /* Define as const if the declaration of iconv() needs const. */
 /* #undef ICONV_CONST */
 /* #undef STRERROR_R_CHAR_P */
 
 /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
+#define HAVE_SYS_TIME_H 1
 
 
 
index e4a25e3..794221f 100644 (file)
@@ -83,6 +83,7 @@ static void printhelp()
            "  -f filename      Filename to verify\n"
            "  -h               Show this help\n"
            "  -q               Quiet mode\n"
+           "  -r               Enforce raw archive format\n"
            "  -s               Verify only headers (skip data)\n\n"
            "If no filename is specified, data is read from standard input.\n"
            "\n%s\n", archive_version_details());
@@ -110,15 +111,17 @@ int main(int argc, char *argv[])
        const char *p;
        char buffer[4096];
        int c;
-       int v, skip_data;
+       int v, skip_data, raw;
        int r = ARCHIVE_OK;
        int format_printed;
+       mode_t mode;
 
        filename = NULL;
        skip_data = 0;
+       raw = 0;
        v = 1;
 
-       while ((c = getopt (argc, argv, "f:hqs")) != -1) {
+       while ((c = getopt (argc, argv, "f:hrqs")) != -1) {
                switch (c) {
                        case 'f':
                                filename = optarg;
@@ -129,6 +132,9 @@ int main(int argc, char *argv[])
                        case 'q':
                                v = 0;
                                break;
+                       case 'r':
+                               raw = 1;
+                               break;
                        case 's':
                                skip_data = 1;
                                break;
@@ -153,7 +159,10 @@ int main(int argc, char *argv[])
        a = archive_read_new();
 
        archive_read_support_filter_all(a);
-       archive_read_support_format_all(a);
+       if (raw)
+               archive_read_support_format_raw(a);
+       else
+               archive_read_support_format_all(a);
 
        v_print(v, "Data source: ");
 
@@ -191,16 +200,18 @@ int main(int argc, char *argv[])
                if (r == ARCHIVE_EOF)
                        break;
                p = archive_entry_pathname(entry);
+               mode = archive_entry_mode(entry);
                v_print(v, "Entry %d: %s, pathname", c, errnostr(r));
                if (p == NULL || p[0] == '\0')
                        v_print(v, " unreadable");
                else
                        v_print(v, ": %s", p);
+               v_print(v, ", mode: %o", mode);
                v_print(v, ", data: ");
                if (skip_data) {
                        v_print(v, "skipping");
                } else {
-                       while ((r = archive_read_data(a, buffer, 4096) > 0))
+                       while ((r = archive_read_data(a, buffer, 4096)) > 0)
                        ;
                        if (r == ARCHIVE_FATAL) {
                                v_print(v, "ERROR\nError string: %s\n",
index 3d954f6..db25118 100644 (file)
 /* This is for mkdir(); this may need to be changed for some platforms. */
 #include <sys/stat.h>  /* For mkdir() */
 
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#define NUM_FORMAT "zu"
+#include <direct.h>
+#elif defined(__linux__) || defined(linux) || defined(__linux)
+#define NUM_FORMAT "d"
+#else
+#define NUM_FORMAT "lu"
+#endif /* defined(_WIN32) && !defined(__CYGWIN__) */
+
+#define TO_STRING(x) #x
+#define STR(x) TO_STRING(x)
+
 /* Parse an octal number, ignoring leading and trailing nonsense. */
 static int
 parseoct(const char *p, size_t n)
@@ -78,7 +90,11 @@ create_dir(char *pathname, int mode)
                pathname[strlen(pathname) - 1] = '\0';
 
        /* Try creating the directory. */
+#if defined(_WIN32) && !defined(__CYGWIN__)
+       r = _mkdir(pathname);
+#else
        r = mkdir(pathname, mode);
+#endif
 
        if (r != 0) {
                /* On failure, try creating parent directory. */
@@ -87,7 +103,11 @@ create_dir(char *pathname, int mode)
                        *p = '\0';
                        create_dir(pathname, 0755);
                        *p = '/';
+#if defined(_WIN32) && !defined(__CYGWIN__)
+                       r = _mkdir(pathname);
+#else
                        r = mkdir(pathname, mode);
+#endif
                }
        }
        if (r != 0)
@@ -133,18 +153,19 @@ verify_checksum(const char *p)
 static void
 untar(FILE *a, const char *path)
 {
-       char buff[512];
+    enum { BUF_SIZE=512 };
+       char buff[BUF_SIZE];
        FILE *f = NULL;
        size_t bytes_read;
-       int filesize;
+       off_t filesize;
 
        printf("Extracting from %s\n", path);
        for (;;) {
-               bytes_read = fread(buff, 1, 512, a);
-               if (bytes_read < 512) {
+               bytes_read = fread(buff, 1, BUF_SIZE, a);
+               if (bytes_read < BUF_SIZE) {
                        fprintf(stderr,
-                           "Short read on %s: expected 512, got %d\n",
-                           path, (int)bytes_read);
+                                       "Short read on %s: expected " STR(BUF_SIZE) ", got %"NUM_FORMAT"\n",
+                                       path, bytes_read);
                        return;
                }
                if (is_end_of_archive(buff)) {
@@ -157,51 +178,51 @@ untar(FILE *a, const char *path)
                }
                filesize = parseoct(buff + 124, 12);
                switch (buff[156]) {
-               case '1':
-                       printf(" Ignoring hardlink %s\n", buff);
-                       break;
-               case '2':
-                       printf(" Ignoring symlink %s\n", buff);
-                       break;
-               case '3':
-                       printf(" Ignoring character device %s\n", buff);
+                       case '1':
+                               printf(" Ignoring hardlink %s\n", buff);
+                               break;
+                       case '2':
+                               printf(" Ignoring symlink %s\n", buff);
+                               break;
+                       case '3':
+                               printf(" Ignoring character device %s\n", buff);
+                               break;
+                       case '4':
+                               printf(" Ignoring block device %s\n", buff);
+                               break;
+                       case '5':
+                               printf(" Extracting dir %s\n", buff);
+                               create_dir(buff, parseoct(buff + 100, 8));
+                               filesize = 0;
+                               break;
+                       case '6':
+                               printf(" Ignoring FIFO %s\n", buff);
+                               break;
+                       default:
+                               printf(" Extracting file %s\n", buff);
+                               f = create_file(buff, parseoct(buff + 100, 8));
                                break;
-               case '4':
-                       printf(" Ignoring block device %s\n", buff);
-                       break;
-               case '5':
-                       printf(" Extracting dir %s\n", buff);
-                       create_dir(buff, parseoct(buff + 100, 8));
-                       filesize = 0;
-                       break;
-               case '6':
-                       printf(" Ignoring FIFO %s\n", buff);
-                       break;
-               default:
-                       printf(" Extracting file %s\n", buff);
-                       f = create_file(buff, parseoct(buff + 100, 8));
-                       break;
                }
                while (filesize > 0) {
-                       bytes_read = fread(buff, 1, 512, a);
-                       if (bytes_read < 512) {
+                       bytes_read = fread(buff, 1, BUF_SIZE, a);
+                       if (bytes_read < BUF_SIZE) {
                                fprintf(stderr,
-                                   "Short read on %s: Expected 512, got %d\n",
-                                   path, (int)bytes_read);
+                                               "Short read on %s: Expected " STR(BUF_SIZE) ", got %"NUM_FORMAT"\n",
+                                               path, bytes_read);
                                return;
                        }
-                       if (filesize < 512)
+                       if (filesize < BUF_SIZE)
                                bytes_read = filesize;
                        if (f != NULL) {
                                if (fwrite(buff, 1, bytes_read, f)
-                                   != bytes_read)
+                                       != bytes_read)
                                {
                                        fprintf(stderr, "Failed write\n");
                                        fclose(f);
                                        f = NULL;
                                }
                        }
-                       filesize -= bytes_read;
+                       filesize -= (off_t)bytes_read;
                }
                if (f != NULL) {
                        fclose(f);
index 68a6301..b02a142 100644 (file)
@@ -442,6 +442,8 @@ main(int argc, char *argv[])
        archive_match_free(cpio->matching);
        free_cache(cpio->gname_cache);
        free_cache(cpio->uname_cache);
+       archive_read_close(cpio->archive_read_disk);
+       archive_read_free(cpio->archive_read_disk);
        free(cpio->destdir);
        passphrase_free(cpio->ppbuff);
        return (cpio->return_value);
@@ -1144,20 +1146,16 @@ list_item_verbose(struct cpio *cpio, struct archive_entry *entry)
 {
        char                     size[32];
        char                     date[32];
-       char                     uids[16], gids[16];
+       char                     uids[22], gids[22];
        const char              *uname, *gname;
        FILE                    *out = stdout;
        const char              *fmt;
        time_t                   mtime;
        static time_t            now;
        struct tm               *ltime;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
        struct tm               tmbuf;
 #endif
-#if defined(HAVE__LOCALTIME64_S)
-       errno_t                 terr;
-       __time64_t              tmptime;
-#endif
 
        if (!now)
                time(&now);
@@ -1205,19 +1203,17 @@ list_item_verbose(struct cpio *cpio, struct archive_entry *entry)
        else
                fmt = cpio->day_first ? "%e %b %H:%M" : "%b %e %H:%M";
 #endif
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+       ltime = localtime_s(&tmbuf, &mtime) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
        ltime = localtime_r(&mtime, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
-       tmptime = mtime;
-       terr = _localtime64_s(&tmbuf, &tmptime);
-       if (terr)
-               ltime = NULL;
-       else
-               ltime = &tmbuf;
 #else
        ltime = localtime(&mtime);
 #endif
-       strftime(date, sizeof(date), fmt, ltime);
+       if (ltime != NULL)
+               strftime(date, sizeof(date), fmt, ltime);
+       else
+               strcpy(date, "invalid mtime");
 
        fprintf(out, "%s%3d %-8s %-8s %8s %12s %s",
            archive_entry_strmode(entry),
index 63f6df0..2809ca8 100644 (file)
@@ -156,7 +156,11 @@ cpio_CreateFile(const char *path, DWORD dwDesiredAccess, DWORD dwShareMode,
 {
        wchar_t *wpath;
        HANDLE handle;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
 
+#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
        handle = CreateFileA(path, dwDesiredAccess, dwShareMode,
            lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
            hTemplateFile);
@@ -164,12 +168,25 @@ cpio_CreateFile(const char *path, DWORD dwDesiredAccess, DWORD dwShareMode,
                return (handle);
        if (GetLastError() != ERROR_PATH_NOT_FOUND)
                return (handle);
+#endif
        wpath = permissive_name(path);
        if (wpath == NULL)
-               return (handle);
+               return INVALID_HANDLE_VALUE;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       ZeroMemory(&createExParams, sizeof(createExParams));
+       createExParams.dwSize = sizeof(createExParams);
+       createExParams.dwFileAttributes = dwFlagsAndAttributes & 0xFFFF;
+       createExParams.dwFileFlags = dwFlagsAndAttributes & 0xFFF00000;
+       createExParams.dwSecurityQosFlags = dwFlagsAndAttributes & 0x000F0000;
+       createExParams.lpSecurityAttributes = lpSecurityAttributes;
+       createExParams.hTemplateFile = hTemplateFile;
+       handle = CreateFile2(wpath, dwDesiredAccess, dwShareMode,
+           dwCreationDisposition, &createExParams);
+#else
        handle = CreateFileW(wpath, dwDesiredAccess, dwShareMode,
            lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
            hTemplateFile);
+#endif
        free(wpath);
        return (handle);
 }
index 1d7d051..e19d599 100644 (file)
@@ -43,6 +43,7 @@ DEFINE_TEST(test_option_J_upper)
                if (strstr(p, "compression not available") != NULL) {
                        skipping("This version of bsdcpio was compiled "
                            "without xz support");
+                       free(p);
                        return;
                }
                failure("-J option is broken");
index 013caed..dfa62c1 100644 (file)
@@ -37,10 +37,10 @@ is_octal(const char *p, size_t l)
        return (1);
 }
 
-static int
+static long long int
 from_octal(const char *p, size_t l)
 {
-       int r = 0;
+       long long int r = 0;
 
        while (l > 0) {
                r *= 8;
@@ -161,7 +161,7 @@ DEFINE_TEST(test_option_c)
                assertEqualInt(from_octal(e + 24, 6), uid); /* uid */
                assertEqualInt(gid, from_octal(e + 30, 6)); /* gid */
                assertEqualMem(e + 36, "000001", 6); /* nlink */
-               failure("file entries should have rdev == 0 (dev was 0%o)",
+               failure("file entries should have rdev == 0 (dev was 0%llo)",
                    from_octal(e + 6, 6));
                assertEqualMem(e + 42, "000000", 6); /* rdev */
                t = from_octal(e + 48, 11); /* mtime */
index eaa73fa..9eef0da 100644 (file)
@@ -36,6 +36,10 @@ DEFINE_TEST(test_option_t)
        time_t mtime;
        char date[32];
        char date2[32];
+       struct tm *tmptr;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+       struct tm tmbuf;
+#endif
 
        /* List reference archive, make sure the TOC is correct. */
        extract_reference_file("test_option_t.cpio");
@@ -87,11 +91,18 @@ DEFINE_TEST(test_option_t)
 #ifdef HAVE_LOCALE_H
        setlocale(LC_ALL, "");
 #endif
+#if defined(HAVE_LOCALTIME_S)
+        tmptr = localtime_s(&tmbuf, &mtime) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+        tmptr = localtime_r(&mtime, &tmbuf);
+#else
+        tmptr = localtime(&mtime);
+#endif
 #if defined(_WIN32) && !defined(__CYGWIN__)
-       strftime(date2, sizeof(date2)-1, "%b %d  %Y", localtime(&mtime));
+       strftime(date2, sizeof(date2)-1, "%b %d  %Y", tmptr);
        _snprintf(date, sizeof(date)-1, "%12.12s file", date2);
 #else
-       strftime(date2, sizeof(date2)-1, "%b %e  %Y", localtime(&mtime));
+       strftime(date2, sizeof(date2)-1, "%b %e  %Y", tmptr);
        snprintf(date, sizeof(date)-1, "%12.12s file", date2);
 #endif
        assertEqualMem(p + 42, date, strlen(date));
index f0d0023..29c2c58 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:24 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:18 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index fe89601..6234b62 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:24 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:18 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index c6f214c..17fd278 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:24 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:18 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index a0365c1..58f90e7 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:24 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:18 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 127c394..189dc50 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:18 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 7a912cd..3264852 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:18 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 5b0e476..873a668 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index fd62535..e1ebb82 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 13a14b1..a5b33fe 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index d39b665..7287edf 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index a610e15..1bf9c1e 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index c1dc2d6..dd827f3 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
@@ -26,6 +26,8 @@ ARCHIVE_READ_DISK(3)</p>
 <p style="margin-top: 1em"><b>NAME</b></p>
 
 <p style="margin-left:6%;"><b>archive_read_disk_new</b>,
+<b>archive_read_disk_open</b>,
+<b>archive_read_disk_open_w</b>,
 <b>archive_read_disk_set_behavior</b>,
 <b>archive_read_disk_set_symlink_logical</b>,
 <b>archive_read_disk_set_symlink_physical</b>,
@@ -35,8 +37,15 @@ ARCHIVE_READ_DISK(3)</p>
 <b>archive_read_disk_uname</b>,
 <b>archive_read_disk_set_uname_lookup</b>,
 <b>archive_read_disk_set_gname_lookup</b>,
-<b>archive_read_disk_set_standard_lookup</b> &mdash;
-functions for reading objects from disk</p>
+<b>archive_read_disk_set_standard_lookup</b>,
+<b>archive_read_disk_descend</b>,
+<b>archive_read_disk_can_descend</b>,
+<b>archive_read_disk_current_filesystem</b>,
+<b>archive_read_disk_current_filesystem_is_synthetic</b>,
+<b>archive_read_disk_current_filesystem_is_remote</b>,
+<b>archive_read_disk_set_matching</b>,
+<b>archive_read_disk_set_metadata_filter_callback</b>,
+&mdash; functions for reading objects from disk</p>
 
 <p style="margin-top: 1em"><b>LIBRARY</b></p>
 
@@ -57,6 +66,18 @@ archive *</i></p>
 <p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
 
 
+<p style="margin-left:12%;"><b>archive_read_disk_open</b>(<i>struct&nbsp;archive&nbsp;*</i>,
+<i>const&nbsp;char&nbsp;*</i>);</p>
+
+<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
+
+
+<p style="margin-left:12%;"><b>archive_read_disk_open_w</b>(<i>struct&nbsp;archive&nbsp;*</i>,
+<i>const&nbsp;wchar_t&nbsp;*</i>);</p>
+
+<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
+
+
 <p style="margin-left:12%;"><b>archive_read_disk_set_behavior</b>(<i>struct&nbsp;archive&nbsp;*</i>,
 <i>int</i>);</p>
 
@@ -117,6 +138,46 @@ archive *</i></p>
 <i>struct&nbsp;archive_entry&nbsp;*</i>, <i>int&nbsp;fd</i>,
 <i>const&nbsp;struct&nbsp;stat&nbsp;*</i>);</p>
 
+<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
+
+
+<p style="margin-left:12%;"><b>archive_read_disk_descend</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
+
+<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
+
+
+<p style="margin-left:12%;"><b>archive_read_disk_can_descend</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
+
+<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
+
+
+<p style="margin-left:12%;"><b>archive_read_disk_current_filesystem</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
+
+<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
+
+
+<p style="margin-left:12%;"><b>archive_read_disk_current_filesystem_is_synthetic</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
+
+<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
+
+
+<p style="margin-left:12%;"><b>archive_read_disk_current_filesystem_is_remote</b>(<i>struct&nbsp;archive&nbsp;*</i>);</p>
+
+<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
+
+
+<p><b>archive_read_disk_set_matching</b>(<i>struct&nbsp;archive&nbsp;*</i>,
+<i>struct&nbsp;archive&nbsp;*</i>,
+<i>void&nbsp;(*excluded_func)(struct&nbsp;archive&nbsp;*,&nbsp;void&nbsp;*,&nbsp;struct&nbsp;archive&nbsp;entry&nbsp;*)</i>,
+<i>void&nbsp;*</i>);</p>
+
+<p style="margin-left:6%; margin-top: 1em"><i>int</i></p>
+
+
+<p><b>archive_read_disk_set_metadata_filter_callback</b>(<i>struct&nbsp;archive&nbsp;*</i>,
+<i>int&nbsp;(*metadata_filter_func)(struct&nbsp;archive&nbsp;*,&nbsp;void*,&nbsp;struct&nbsp;archive_entry&nbsp;*)</i>,
+<i>void&nbsp;*</i>);</p>
+
 <p style="margin-top: 1em"><b>DESCRIPTION</b></p>
 
 <p style="margin-left:6%;">These functions provide an API
@@ -132,6 +193,20 @@ struct archive object suitable for reading object
 information from disk.</p>
 
 
+<p style="margin-top: 1em"><b>archive_read_disk_open</b>()</p>
+
+<p style="margin-left:17%;">Opens the file or directory
+from the given path and prepares the struct archive to read
+it from disk.</p>
+
+
+<p style="margin-top: 1em"><b>archive_read_disk_open_w</b>()</p>
+
+<p style="margin-left:17%;">Opens the file or directory
+from the given path as a wide character string and prepares
+the struct archive to read it from disk.</p>
+
+
 <p style="margin-top: 1em"><b>archive_read_disk_set_behavior</b>()</p>
 
 <p style="margin-left:17%;">Configures various behavior
@@ -182,6 +257,12 @@ extended file attributes.</p>
 traversed files. By default, access time of traversed files
 is not restored.</p>
 
+<p><b>ARCHIVE_READDISK_NO_SPARSE</b></p>
+
+<p style="margin-left:27%;">Do not read sparse file
+information. By default, sparse file information is read
+from disk.</p>
+
 
 <p style="margin-top: 1em"><b>archive_read_disk_set_symlink_logical</b>(),
 <b>archive_read_disk_set_symlink_physical</b>(),
@@ -255,6 +336,65 @@ group names using the currently-registered lookup functions
 above. This affects the file ownership fields and ACL values
 in the struct archive_entry object.</p>
 
+
+<p style="margin-top: 1em"><b>archive_read_disk_descend</b>()</p>
+
+<p style="margin-left:17%;">If the current entry can be
+descended, this function will mark the directory as the next
+entry for archive_read_header(3) to visit.</p>
+
+
+<p style="margin-top: 1em"><b>archive_read_disk_can_descend</b>()</p>
+
+<p style="margin-left:17%;">Returns 1 if the current entry
+is an unvisited directory and 0 otherwise.</p>
+
+
+<p style="margin-top: 1em"><b>archive_read_disk_current_filesystem</b>()</p>
+
+<p style="margin-left:17%;">Returns the index of the most
+recent filesystem entry that has been visited through
+archive_read_disk</p>
+
+
+<p style="margin-top: 1em"><b>archive_read_disk_current_filesystem_is_synthetic</b>()</p>
+
+<p style="margin-left:17%;">Returns 1 if the current
+filesystem is a virtual filesystem. Returns 0 if the current
+filesystem is not a virtual filesystem. Returns -1 if it is
+unknown.</p>
+
+
+<p style="margin-top: 1em"><b>archive_read_disk_current_filesystem_is_remote</b>()</p>
+
+<p style="margin-left:17%;">Returns 1 if the current
+filesystem is a remote filesystem. Returns 0 if the current
+filesystem is not a remote filesystem. Returns -1 if it is
+unknown.</p>
+
+
+<p style="margin-top: 1em"><b>archive_read_disk_set_matching</b>()</p>
+
+<p style="margin-left:17%;">Allows the caller to set struct
+archive *_ma to compare each entry during
+archive_read_header(3) calls. If matched based on calls to
+archive_match_path_excluded, archive_match_time_excluded, or
+archive_match_owner_excluded, then the callback function
+specified by the _excluded_func parameter will execute. This
+function will recieve data provided to the fourth parameter,
+void *_client_data.</p>
+
+
+<p style="margin-top: 1em"><b>archive_read_disk_set_metadata_filter_callback</b>()</p>
+
+<p style="margin-left:17%;">Allows the caller to set a
+callback function during calls to archive_read_header(3) to
+filter out metadata for each entry. The callback function
+recieves the struct archive object, void* custom filter
+data, and the struct archive_entry. If the callback function
+returns an error, ARCHIVE_RETRY will be returned and the
+entry will not be further processed.</p>
+
 <p style="margin-left:6%;">More information about the
 <i>struct archive</i> object and the overall design of the
 library can be found in the libarchive(3) overview.</p>
index c98352c..02f343a 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index d38e9df..b275bb8 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:25 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index cbc8261..0cf5617 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 2f54cca..839d188 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index e6711d6..2ec4a48 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:19 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 3cd3b64..c39962b 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 0ed14df..b3b2e3a 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index ce14464..dfbf279 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
@@ -248,6 +248,33 @@ concatenated together. Without this option, only the
 contents of the first concatenated archive would be
 read.</p>
 
+<p>Format zip <b><br>
+compat-2x</b></p>
+
+<p style="margin-left:27%;">Libarchive 2.x incorrectly
+encoded Unicode filenames on some platforms. This option
+mimics the libarchive 2.x filename handling so that such
+archives can be read correctly.</p>
+
+<p><b>hdrcharset</b></p>
+
+<p style="margin-left:27%;">The value is used as a
+character set name that will be used when translating file
+names.</p>
+
+<p><b>ignorecrc32</b></p>
+
+<p style="margin-left:27%;">Skip the CRC32 check. Mostly
+used for testing.</p>
+
+<p><b>mac-ext</b></p>
+
+<p style="margin-left:27%;">Support Mac OS metadata
+extension that records data in special files beginning with
+a period and underscore. Defaults to enabled on Mac OS,
+disabled on other platforms. Use <b>!mac-ext</b> to
+disable.</p>
+
 <p style="margin-top: 1em"><b>ERRORS</b></p>
 
 <p style="margin-left:6%;">Detailed error codes and textual
index acd2ee7..f1d8297 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 9657293..a1bc0fb 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index e87406f..b594a7f 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 3a6c693..ae8041e 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 9d8aaad..b6fccdf 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
@@ -198,17 +198,17 @@ whose final location would be altered by a symlink on disk.
 This is intended to help guard against a variety of mischief
 caused by archives that (deliberately or otherwise) extract
 files outside of the current directory. The default is not
-to perform this check. If</p>
+to perform this check. If <b>ARCHIVE_EXTRACT_UNLINK</b> is
+specified together with this option, the library will remove
+any intermediate symlinks it finds and return an error only
+if such symlink could not be removed.</p>
 
 <p><b>ARCHIVE_EXTRACT_SPARSE</b></p>
 
 <p style="margin-left:27%;">Scan data for blocks of NUL
 bytes and try to recreate them with holes. This results in
 sparse files, independent of whether the archive format
-supports or uses them. <b>ARCHIVE_EXTRACT_UNLINK</b> is
-specified together with this option, the library will remove
-any intermediate symlinks it finds and return an error only
-if such symlink could not be removed.</p>
+supports or uses them.</p>
 
 <p><b>ARCHIVE_EXTRACT_TIME</b></p>
 
index a1b24ef..61b36c1 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 843e0b0..12540ae 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 50f5bd1..fe88f7c 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index e3c2621..b8de8c5 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:26 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 9195154..c1c2dcb 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:20 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index c02916f..7a5c5b5 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:21 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 01f3603..df01df6 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:21 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
@@ -221,7 +221,7 @@ processing is complete. If the open callback fails, the
 close callback is not invoked. The callback should return
 <b>ARCHIVE_OK</b> on success. On failure, the callback
 should invoke <b>archive_set_error</b>() to register an
-error code and message and return</p>
+error code and message and return <b>ARCHIVE_FATAL</b>.</p>
 
 <p style="margin-left:14%; margin-top: 1em"><i>typedef
 int</i> <b>archive_free_callback</b>(<i>struct archive
index 1c23d5e..21b6e03 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:21 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
@@ -266,6 +266,21 @@ decimal integer specifying the compression level. Supported
 values depend on the library version, common values are from
 1 to 22.</p>
 
+<p><b>long</b></p>
+
+<p style="margin-left:27%; margin-top: 1em">Enables long
+distance matching. The value is interpreted as a decimal
+integer specifying log2 window size in bytes. Values from 10
+to 30 for 32 bit, or 31 for 64 bit, are supported.</p>
+
+<p><b>threads</b></p>
+
+<p style="margin-left:27%;">The value is interpreted as a
+decimal integer specifying the number of threads for
+multi-threaded zstd compression. If set to 0, zstd will
+attempt to detect and use the number of physical CPU
+cores.</p>
+
 <p>Format 7zip <b><br>
 compression</b></p>
 
index 30734c9..3529337 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:21 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index d68897c..31a6f06 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:28 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:22 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 7ae3e72..776bd32 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:28 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:22 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
@@ -534,6 +534,12 @@ attributes using copyfile(3) in AppleDouble format. This is
 the reverse of <b>--mac-metadata</b>. and the default
 behavior if <b>tar</b> is run as non-root in x mode.</p>
 
+<p style="margin-top: 1em"><b>--no-read-sparse</b></p>
+
+<p style="margin-left:17%;">(c, r, u modes only) Do not
+read sparse file information from disk. This is the reverse
+of <b>--read-sparse</b>.</p>
+
 <p style="margin-top: 1em"><b>--no-safe-writes</b></p>
 
 <p style="margin-left:17%;">(x mode only) Do not create
@@ -736,6 +742,30 @@ improve compression ratio.</p>
 the zstd compression level. Supported values depend on the
 library version, common values are from 1 to 22.</p>
 
+<p><b>zstd:threads</b></p>
+
+<p style="margin-left:27%;">Specify the number of worker
+threads to use. Setting threads to a special value 0 makes
+zstd(1) use as many threads as there are CPU cores on the
+system.</p>
+
+<p><b>zstd:frame-per-file</b></p>
+
+<p style="margin-left:27%;">Start a new compression frame
+at the beginning of each file in the archive.</p>
+
+<p><b>zstd:min-frame-size</b>=<i>N</i></p>
+
+<p style="margin-left:27%;">In combination with
+<b>zstd:frame-per-file</b>, do not start a new compression
+frame unless the current frame is at least <i>N</i>
+bytes.</p>
+
+<p><b>zstd:max-frame-size</b>=<i>N</i></p>
+
+<p style="margin-left:27%;">Start a new compression frame
+as soon as the current frame exceeds <i>N</i> bytes.</p>
+
 <p><b>lzop:compression-level</b></p>
 
 <p style="margin-left:27%;">A decimal integer from 1 to 9
@@ -746,6 +776,13 @@ specifying the lzop compression level.</p>
 <p style="margin-left:27%;">A decimal integer from 0 to 9
 specifying the xz compression level.</p>
 
+<p><b>xz:threads</b></p>
+
+<p style="margin-left:27%;">Specify the number of worker
+threads to use. Setting threads to a special value 0 makes
+xz(1) use as many threads as there are CPU cores on the
+system.</p>
+
 <p><b>mtree:</b><i>keyword</i></p>
 
 <p style="margin-left:27%;">The mtree writer module allows
@@ -856,6 +893,12 @@ entries with the same name and, by convention, later entries
 overwrite earlier entries. This option is provided as a
 performance optimization.</p>
 
+<p style="margin-top: 1em"><b>--read-sparse</b></p>
+
+<p style="margin-left:17%;">(c, r, u modes only) Read
+sparse file information from disk. This is the reverse of
+<b>--no-read-sparse</b> and the default behavior.</p>
+
 <p style="margin-top: 1em"><b>-S</b></p>
 
 <p style="margin-left:17%; margin-top: 1em">(x mode only)
@@ -1043,31 +1086,31 @@ variables affect the execution of <b>tar</b>:</p>
 
 <p style="margin-top: 1em">TAR_READER_OPTIONS</p>
 
-<p style="margin-left:21%;">The default options for format
+<p style="margin-left:17%;">The default options for format
 readers and compression readers. The <b>--options</b> option
 overrides this.</p>
 
 <p style="margin-top: 1em">TAR_WRITER_OPTIONS</p>
 
-<p style="margin-left:21%;">The default options for format
+<p style="margin-left:17%;">The default options for format
 writers and compression writers. The <b>--options</b> option
 overrides this.</p>
 
 <p style="margin-top: 1em">LANG</p>
 
-<p style="margin-left:21%; margin-top: 1em">The locale to
+<p style="margin-left:17%; margin-top: 1em">The locale to
 use. See environ(7) for more information.</p>
 
 <p style="margin-top: 1em">TAPE</p>
 
-<p style="margin-left:21%; margin-top: 1em">The default
+<p style="margin-left:17%; margin-top: 1em">The default
 device. The <b>-f</b> option overrides this. Please see the
 description of the <b>-f</b> option above for more
 details.</p>
 
 <p style="margin-top: 1em">TZ</p>
 
-<p style="margin-left:21%; margin-top: 1em">The timezone to
+<p style="margin-left:17%; margin-top: 1em">The timezone to
 use when displaying dates. See environ(7) for more
 information.</p>
 
@@ -1378,7 +1421,7 @@ incompatible ways that different archive formats store
 hardlink information.)</p>
 
 <p style="margin-left:6%; margin-top: 1em">BSD
-January&nbsp;31, 2020 BSD</p>
+December&nbsp;1, 2022 BSD</p>
 <hr>
 </body>
 </html>
index 672be05..5d670c2 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:21 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
@@ -434,7 +434,7 @@ part of the specification for the pax(1) utility.</p>
 written by Dick Haight while working in AT&amp;T&rsquo;s
 Unix Support Group. It appeared in 1977 as part of PWB/UNIX
 1.0, the &ldquo;Programmer&rsquo;s Work Bench&rdquo; derived
-from AT&amp;T UNIX 6th Edition UNIX that was used internally
+from Version&nbsp;6 AT&amp;T UNIX that was used internally
 at AT&amp;T. Both the new binary and old character formats
 were in use by 1980, according to the System III source
 released by SCO under their &ldquo;Ancient Unix&rdquo;
index 037207b..32f5220 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:22 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 647e86a..f168edf 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:21 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
@@ -71,12 +71,7 @@ formats,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">ISO9660 CD images (including
-RockRidge and Joliet extensions),</p>
-
-<p><b>&bull;</b></p>
-
-<p style="margin-left:12%;">Zip archives,</p>
+<p style="margin-left:12%;">7-Zip archives,</p>
 
 <p><b>&bull;</b></p>
 
@@ -89,6 +84,11 @@ and BSD extensions),</p>
 
 <p><b>&bull;</b></p>
 
+<p style="margin-left:12%;">ISO9660 CD images (including
+RockRidge and Joliet extensions),</p>
+
+<p><b>&bull;</b></p>
+
 <p style="margin-left:12%;">LHA archives,</p>
 
 <p><b>&bull;</b></p>
@@ -98,17 +98,28 @@ descriptions,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">RAR archives,</p>
+<p style="margin-left:12%;">RAR and most RAR5 archives,</p>
+
+<p><b>&bull;</b></p>
+
+<p style="margin-left:12%;">WARC archives,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">XAR archives.</p>
+<p style="margin-left:12%;">XAR archives,</p>
+
+<p><b>&bull;</b></p>
+
+<p style="margin-left:12%;">Zip archives.</p>
 
 <p style="margin-left:6%;">The library automatically
-detects archives compressed with gzip(1), bzip2(1), xz(1),
-lzip(1), or compress(1) and decompresses them transparently.
-It can similarly detect and decode archives processed with
-uuencode(1) or which have an rpm(1) header.</p>
+detects archives compressed with compress(1), bzip2(1),
+grzip(1), gzip(1), lrzip(1), lz4(1), lzip(1), lzop(1),
+xz(1), or zstd(1) and decompresses them transparently.
+Decompression of some formats requires external decompressor
+utilities. It can similarly detect and decode archives
+processed with uuencode(1) or which have an rpm(1)
+header.</p>
 
 <p style="margin-left:6%; margin-top: 1em">When writing an
 archive, you can specify the compression to be used and the
@@ -130,33 +141,33 @@ format&rdquo; archives,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">Zip archive,</p>
+<p style="margin-left:12%;">7-Zip archives,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">two different variants of shar
-archives,</p>
+<p style="margin-left:12%;">ar archives,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">ISO9660 CD images,</p>
+<p style="margin-left:12%;">two different variants of shar
+archives,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">7-Zip archives,</p>
+<p style="margin-left:12%;">ISO9660 CD images,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">ar archives,</p>
+<p style="margin-left:12%;">mtree file tree
+descriptions,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">mtree file tree
-descriptions,</p>
+<p style="margin-left:12%;">XAR archives,</p>
 
 <p><b>&bull;</b></p>
 
-<p style="margin-left:12%;">XAR archives.</p>
+<p style="margin-left:12%;">Zip archive.</p>
 
 <p style="margin-left:6%;">Pax interchange format is an
 extension of the tar archive format that eliminates
index 0ac6352..472ffd3 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:21 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 2220bca..ddec987 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:22 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index 812aba3..3b181c8 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:27 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:22 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index d009950..d67128e 100644 (file)
@@ -1,5 +1,5 @@
 <!-- Creator     : groff version 1.22.4 -->
-<!-- CreationDate: Sun Aug 22 23:03:28 2021 -->
+<!-- CreationDate: Mon Sep 11 22:06:22 2023 -->
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
 <html>
index bd02537..9d89316 100644 (file)
@@ -2,6 +2,8 @@
 .SH NAME
 .ad l
 \fB\%archive_read_disk_new\fP,
+\fB\%archive_read_disk_open\fP,
+\fB\%archive_read_disk_open_w\fP,
 \fB\%archive_read_disk_set_behavior\fP,
 \fB\%archive_read_disk_set_symlink_logical\fP,
 \fB\%archive_read_disk_set_symlink_physical\fP,
 \fB\%archive_read_disk_uname\fP,
 \fB\%archive_read_disk_set_uname_lookup\fP,
 \fB\%archive_read_disk_set_gname_lookup\fP,
-\fB\%archive_read_disk_set_standard_lookup\fP
+\fB\%archive_read_disk_set_standard_lookup\fP,
+\fB\%archive_read_disk_descend\fP,
+\fB\%archive_read_disk_can_descend\fP,
+\fB\%archive_read_disk_current_filesystem\fP,
+\fB\%archive_read_disk_current_filesystem_is_synthetic\fP,
+\fB\%archive_read_disk_current_filesystem_is_remote\fP,
+\fB\%archive_read_disk_set_matching\fP,
+\fB\%archive_read_disk_set_metadata_filter_callback\fP,
 \- functions for reading objects from disk
 .SH LIBRARY
 .ad l
@@ -26,6 +35,14 @@ Streaming Archive Library (libarchive, -larchive)
 .br
 \fIint\fP
 .br
+\fB\%archive_read_disk_open\fP(\fI\%struct\ archive\ *\fP, \fI\%const\ char\ *\fP);
+.br
+\fIint\fP
+.br
+\fB\%archive_read_disk_open_w\fP(\fI\%struct\ archive\ *\fP, \fI\%const\ wchar_t\ *\fP, \fI\%\fP);
+.br
+\fIint\fP
+.br
 \fB\%archive_read_disk_set_behavior\fP(\fI\%struct\ archive\ *\fP, \fI\%int\fP);
 .br
 \fIint\fP
@@ -63,6 +80,34 @@ Streaming Archive Library (libarchive, -larchive)
 \fIint\fP
 .br
 \fB\%archive_read_disk_entry_from_file\fP(\fI\%struct\ archive\ *\fP, \fI\%struct\ archive_entry\ *\fP, \fI\%int\ fd\fP, \fI\%const\ struct\ stat\ *\fP);
+.br
+\fIint\fP
+.br
+\fB\%archive_read_disk_descend\fP(\fI\%struct\ archive\ *\fP);
+.br
+\fIint\fP
+.br
+\fB\%archive_read_disk_can_descend\fP(\fI\%struct\ archive\ *\fP);
+.br
+\fIint\fP
+.br
+\fB\%archive_read_disk_current_filesystem\fP(\fI\%struct\ archive\ *\fP);
+.br
+\fIint\fP
+.br
+\fB\%archive_read_disk_current_filesystem_is_synthetic\fP(\fI\%struct\ archive\ *\fP);
+.br
+\fIint\fP
+.br
+\fB\%archive_read_disk_current_filesystem_is_remote\fP(\fI\%struct\ archive\ *\fP);
+.br
+\fIint\fP
+.br
+\fB\%archive_read_disk_set_matching\fP(\fI\%struct\ archive\ *\fP, \fI\%struct\ archive\ *\fP, \fI\%void\ (*excluded_func)(struct\ archive\ *,\ void\ *,\ struct\ archive\ entry\ *)\fP, \fI\%void\ *\fP);
+.br
+\fIint\fP
+.br
+\fB\%archive_read_disk_set_metadata_filter_callback\fP(\fI\%struct\ archive\ *\fP, \fI\%int\ (*metadata_filter_func)(struct\ archive\ *,\ void*,\ struct\ archive_entry\ *)\fP, \fI\%void\ *\fP);
 .SH DESCRIPTION
 .ad l
 These functions provide an API for reading information about
@@ -77,6 +122,16 @@ Allocates and initializes a
 Tn struct archive
 object suitable for reading object information from disk.
 .TP
+\fB\%archive_read_disk_open\fP()
+Opens the file or directory from the given path and prepares the
+Tn struct archive
+to read it from disk.
+.TP
+\fB\%archive_read_disk_open_w\fP()
+Opens the file or directory from the given path as a wide character string and prepares the
+Tn struct archive
+to read it from disk.
+.TP
 \fB\%archive_read_disk_set_behavior\fP()
 Configures various behavior options when reading entries from disk.
 The flags field consists of a bitwise OR of one or more of the
@@ -129,6 +184,10 @@ for more information on extended file attributes.
 \fBARCHIVE_READDISK_RESTORE_ATIME\fP
 Restore access time of traversed files.
 By default, access time of traversed files is not restored.
+.TP
+\fBARCHIVE_READDISK_NO_SPARSE\fP
+Do not read sparse file information.
+By default, sparse file information is read from disk.
 .RE
 .TP
 \fB\%archive_read_disk_set_symlink_logical\fP(),
@@ -212,6 +271,44 @@ using the currently-registered lookup functions above.
 This affects the file ownership fields and ACL values in the
 Tn struct archive_entry
 object.
+.TP
+\fB\%archive_read_disk_descend\fP()
+If the current entry can be descended, this function will mark the directory as the next entry for 
+\fBarchive_read_header\fP(3)
+to visit.
+.TP
+\fB\%archive_read_disk_can_descend\fP()
+Returns 1 if the current entry is an unvisited directory and 0 otherwise.
+.TP
+\fB\%archive_read_disk_current_filesystem\fP()
+Returns the index of the most recent filesystem entry that has been visited through archive_read_disk
+.TP
+\fB\%archive_read_disk_current_filesystem_is_synthetic\fP()
+Returns 1 if the current filesystem is a virtual filesystem. Returns 0 if the current filesystem is not a virtual filesystem. Returns -1 if it is unknown.
+.TP
+\fB\%archive_read_disk_current_filesystem_is_remote\fP()
+Returns 1 if the current filesystem is a remote filesystem. Returns 0 if the current filesystem is not a remote filesystem. Returns -1 if it is unknown.
+.TP
+\fB\%archive_read_disk_set_matching\fP()
+Allows the caller to set
+Tn struct archive
+*_ma to compare each entry during
+\fBarchive_read_header\fP(3)
+calls. If matched based on calls to
+Tn archive_match_path_excluded,
+Tn archive_match_time_excluded,
+or
+Tn archive_match_owner_excluded,
+then the callback function specified by the _excluded_func parameter will execute. This function will recieve data provided to the fourth parameter, void *_client_data.
+.TP
+\fB\%archive_read_disk_set_metadata_filter_callback\fP()
+Allows the caller to set a callback function during calls to
+\fBarchive_read_header\fP(3)
+to filter out metadata for each entry. The callback function recieves the
+Tn struct archive
+object, void* custom filter data, and the 
+Tn struct archive_entry.
+If the callback function returns an error, ARCHIVE_RETRY will be returned and the entry will not be further processed.
 .RE
 More information about the
 \fIstruct\fP archive
index 01a87c9..b44ae61 100644 (file)
@@ -239,6 +239,32 @@ have been concatenated together.
 Without this option, only the contents of
 the first concatenated archive would be read.
 .RE
+.TP
+Format zip
+.RS 5
+.TP
+\fBcompat-2x\fP
+Libarchive 2.x incorrectly encoded Unicode filenames on
+some platforms.
+This option mimics the libarchive 2.x filename handling
+so that such archives can be read correctly.
+.TP
+\fBhdrcharset\fP
+The value is used as a character set name that will be
+used when translating file names.
+.TP
+\fBignorecrc32\fP
+Skip the CRC32 check.
+Mostly used for testing.
+.TP
+\fBmac-ext\fP
+Support Mac OS metadata extension that records data in special
+files beginning with a period and underscore.
+Defaults to enabled on Mac OS, disabled on other platforms.
+Use
+\fB!mac-ext\fP
+to disable.
+.RE
 .RE
 .SH ERRORS
 .ad l
index a4ee482..fa13fe4 100644 (file)
@@ -155,15 +155,15 @@ caused by archives that (deliberately or otherwise) extract
 files outside of the current directory.
 The default is not to perform this check.
 If
+\fBARCHIVE_EXTRACT_UNLINK\fP
+is specified together with this option, the library will
+remove any intermediate symlinks it finds and return an
+error only if such symlink could not be removed.
 .TP
 \fBARCHIVE_EXTRACT_SPARSE\fP
 Scan data for blocks of NUL bytes and try to recreate them with holes.
 This results in sparse files, independent of whether the archive format
 supports or uses them.
-\fBARCHIVE_EXTRACT_UNLINK\fP
-is specified together with this option, the library will
-remove any intermediate symlinks it finds and return an
-error only if such symlink could not be removed.
 .TP
 \fBARCHIVE_EXTRACT_TIME\fP
 The timestamps (mtime, ctime, and atime) should be restored.
index f14f33d..9aeafc0 100644 (file)
@@ -190,6 +190,7 @@ On failure, the callback should invoke
 \fB\%archive_set_error\fP()
 to register an error code and message and
 return
+\fBARCHIVE_FATAL\fP.
 .RS 5
 .IP
 \fItypedef int\fP
index b5b8009..15663de 100644 (file)
@@ -253,6 +253,17 @@ Filter zstd
 The value is interpreted as a decimal integer specifying the
 compression level. Supported values depend on the library version,
 common values are from 1 to 22.
+.TP
+\fBlong\fP
+Enables long distance matching. The value is interpreted as a
+decimal integer specifying log2 window size in bytes. Values from
+10 to 30 for 32 bit, or 31 for 64 bit, are supported.
+.TP
+\fBthreads\fP
+The value is interpreted as a decimal integer specifying the
+number of threads for multi-threaded zstd compression.
+If set to 0, zstd will attempt to detect and use the number
+of physical CPU cores.
 .RE
 .TP
 Format 7zip
index 512db63..337dfa5 100644 (file)
@@ -1,4 +1,4 @@
-.TH TAR 1 "January 31, 2020" ""
+.TH TAR 1 "December 1, 2022" ""
 .SH NAME
 .ad l
 \fB\%tar\fP
@@ -519,6 +519,12 @@ and the default behavior if
 \fB\%tar\fP
 is run as non-root in x mode.
 .TP
+\fB\-Fl\fP no-read-sparse
+(c, r, u modes only)
+Do not read sparse file information from disk.
+This is the reverse of
+\fB\-Fl\fP read-sparse.
+.TP
 \fB\-Fl\fP no-safe-writes
 (x mode only)
 Do not create temporary files and use
@@ -712,12 +718,40 @@ a compression dictionary to improve compression ratio.
 A decimal integer specifying the zstd compression level. Supported values depend
 on the library version, common values are from 1 to 22.
 .TP
+\fBzstd:threads\fP
+Specify the number of worker threads to use.
+Setting threads to a special value 0 makes
+\fBzstd\fP(1)
+use as many threads as there are CPU cores on the system.
+.TP
+\fBzstd:frame-per-file\fP
+Start a new compression frame at the beginning of each file in the
+archive.
+.TP
+\fBzstd:min-frame-size\fP=\fIN\fP
+In combination with
+\fBzstd:frame-per-file\fP,
+do not start a new compression frame unless the current frame is at least
+\fIN\fP
+bytes.
+.TP
+\fBzstd:max-frame-size\fP=\fIN\fP
+Start a new compression frame as soon as the current frame exceeds
+\fIN\fP
+bytes.
+.TP
 \fBlzop:compression-level\fP
 A decimal integer from 1 to 9 specifying the lzop compression level.
 .TP
 \fBxz:compression-level\fP
 A decimal integer from 0 to 9 specifying the xz compression level.
 .TP
+\fBxz:threads\fP
+Specify the number of worker threads to use.
+Setting threads to a special value 0 makes
+\fBxz\fP(1)
+use as many threads as there are CPU cores on the system.
+.TP
 \fBmtree:\fP \fIkeyword\fP
 The mtree writer module allows you to specify which mtree keywords
 will be included in the output.
@@ -824,6 +858,13 @@ there can be multiple entries with the same name and, by convention,
 later entries overwrite earlier entries.
 This option is provided as a performance optimization.
 .TP
+\fB\-Fl\fP read-sparse
+(c, r, u modes only)
+Read sparse file information from disk.
+This is the reverse of
+\fB\-Fl\fP no-read-sparse
+and the default behavior.
+.TP
 \fB\-S\fP
 (x mode only)
 Extract files as sparse files.
index 4dd0bc8..f049dad 100644 (file)
@@ -367,7 +367,7 @@ while working in AT&T's Unix Support Group.
 It appeared in 1977 as part of PWB/UNIX 1.0, the
 ``Programmer's Work Bench''
 derived from
-At 6th Edition UNIX
+At v6
 that was used internally at AT&T.
 Both the new binary and old character formats were in use
 by 1980, according to the System III source released
index 310ad15..5e9fe79 100644 (file)
@@ -36,30 +36,40 @@ GNU-format tar archives,
 .IP \(bu
 most common cpio archive formats,
 .IP \(bu
-ISO9660 CD images (including RockRidge and Joliet extensions),
-.IP \(bu
-Zip archives,
+7-Zip archives,
 .IP \(bu
 ar archives (including GNU/SysV and BSD extensions),
 .IP \(bu
 Microsoft CAB archives,
 .IP \(bu
+ISO9660 CD images (including RockRidge and Joliet extensions),
+.IP \(bu
 LHA archives,
 .IP \(bu
 mtree file tree descriptions,
 .IP \(bu
-RAR archives,
+RAR and most RAR5 archives,
 .IP \(bu
-XAR archives.
+WARC archives,
+.IP \(bu
+XAR archives,
+.IP \(bu
+Zip archives.
 .RE
 The library automatically detects archives compressed with
-\fBgzip\fP(1),
+\fBcompress\fP(1),
 \fBbzip2\fP(1),
-\fBxz\fP(1),
+\fBgrzip\fP(1),
+\fBgzip\fP(1),
+\fBlrzip\fP(1),
+\fBlz4\fP(1),
 \fBlzip\fP(1),
+\fBlzop\fP(1),
+\fBxz\fP(1),
 or
-\fBcompress\fP(1)
-and decompresses them transparently.
+\fBzstd\fP(1)
+and decompresses them transparently. Decompression of some formats
+requires external decompressor utilities.
 It can similarly detect and decode archives processed with
 \fBuuencode\fP(1)
 or which have an
@@ -81,19 +91,19 @@ archives,
 .IP \(bu
 cpio archives,
 .IP \(bu
-Zip archive,
+7-Zip archives,
+.IP \(bu
+ar archives,
 .IP \(bu
 two different variants of shar archives,
 .IP \(bu
 ISO9660 CD images,
 .IP \(bu
-7-Zip archives,
-.IP \(bu
-ar archives,
-.IP \(bu
 mtree file tree descriptions,
 .IP \(bu
-XAR archives.
+XAR archives,
+.IP \(bu
+Zip archive.
 .RE
 Pax interchange format is an extension of the tar archive format that
 eliminates essentially all of the limitations of historic tar formats
index 0a159f2..87939dc 100644 (file)
Binary files a/doc/pdf/archive_entry.3.pdf and b/doc/pdf/archive_entry.3.pdf differ
index a428f40..9293627 100644 (file)
Binary files a/doc/pdf/archive_entry_acl.3.pdf and b/doc/pdf/archive_entry_acl.3.pdf differ
index 983eb0c..7db1011 100644 (file)
Binary files a/doc/pdf/archive_entry_linkify.3.pdf and b/doc/pdf/archive_entry_linkify.3.pdf differ
index 4a815f3..4ae70b6 100644 (file)
Binary files a/doc/pdf/archive_entry_misc.3.pdf and b/doc/pdf/archive_entry_misc.3.pdf differ
index 3165b31..c51f4cd 100644 (file)
Binary files a/doc/pdf/archive_entry_paths.3.pdf and b/doc/pdf/archive_entry_paths.3.pdf differ
index cd4a6dd..431d9bd 100644 (file)
Binary files a/doc/pdf/archive_entry_perms.3.pdf and b/doc/pdf/archive_entry_perms.3.pdf differ
index 432760b..62a3d53 100644 (file)
Binary files a/doc/pdf/archive_entry_stat.3.pdf and b/doc/pdf/archive_entry_stat.3.pdf differ
index 29289ce..5ba5269 100644 (file)
Binary files a/doc/pdf/archive_entry_time.3.pdf and b/doc/pdf/archive_entry_time.3.pdf differ
index 553e24f..1ea5140 100644 (file)
Binary files a/doc/pdf/archive_read.3.pdf and b/doc/pdf/archive_read.3.pdf differ
index 4600a06..c103b3a 100644 (file)
Binary files a/doc/pdf/archive_read_add_passphrase.3.pdf and b/doc/pdf/archive_read_add_passphrase.3.pdf differ
index ed8628f..b3de533 100644 (file)
Binary files a/doc/pdf/archive_read_data.3.pdf and b/doc/pdf/archive_read_data.3.pdf differ
index ff4845e..6f6cd2d 100644 (file)
Binary files a/doc/pdf/archive_read_disk.3.pdf and b/doc/pdf/archive_read_disk.3.pdf differ
index 3d0f002..8ae80f3 100644 (file)
Binary files a/doc/pdf/archive_read_extract.3.pdf and b/doc/pdf/archive_read_extract.3.pdf differ
index 830ff89..c3045a9 100644 (file)
Binary files a/doc/pdf/archive_read_filter.3.pdf and b/doc/pdf/archive_read_filter.3.pdf differ
index 554df99..cd169ad 100644 (file)
Binary files a/doc/pdf/archive_read_format.3.pdf and b/doc/pdf/archive_read_format.3.pdf differ
index 5c5c370..bb48728 100644 (file)
Binary files a/doc/pdf/archive_read_free.3.pdf and b/doc/pdf/archive_read_free.3.pdf differ
index aabfcba..2e2e791 100644 (file)
Binary files a/doc/pdf/archive_read_header.3.pdf and b/doc/pdf/archive_read_header.3.pdf differ
index 69eab90..3d0bfc2 100644 (file)
Binary files a/doc/pdf/archive_read_new.3.pdf and b/doc/pdf/archive_read_new.3.pdf differ
index 3fad700..206cc26 100644 (file)
Binary files a/doc/pdf/archive_read_open.3.pdf and b/doc/pdf/archive_read_open.3.pdf differ
index 084687f..7e4ec1a 100644 (file)
Binary files a/doc/pdf/archive_read_set_options.3.pdf and b/doc/pdf/archive_read_set_options.3.pdf differ
index 3cee5fe..1f8fbbf 100644 (file)
Binary files a/doc/pdf/archive_util.3.pdf and b/doc/pdf/archive_util.3.pdf differ
index 5c318d5..0c4c212 100644 (file)
Binary files a/doc/pdf/archive_write.3.pdf and b/doc/pdf/archive_write.3.pdf differ
index 99473f7..918df92 100644 (file)
Binary files a/doc/pdf/archive_write_blocksize.3.pdf and b/doc/pdf/archive_write_blocksize.3.pdf differ
index f40d118..5293a05 100644 (file)
Binary files a/doc/pdf/archive_write_data.3.pdf and b/doc/pdf/archive_write_data.3.pdf differ
index 03ec498..4dd59cc 100644 (file)
Binary files a/doc/pdf/archive_write_disk.3.pdf and b/doc/pdf/archive_write_disk.3.pdf differ
index 5953814..5f53b7c 100644 (file)
Binary files a/doc/pdf/archive_write_filter.3.pdf and b/doc/pdf/archive_write_filter.3.pdf differ
index c06343c..eb70be0 100644 (file)
Binary files a/doc/pdf/archive_write_finish_entry.3.pdf and b/doc/pdf/archive_write_finish_entry.3.pdf differ
index 777a497..5c876d7 100644 (file)
Binary files a/doc/pdf/archive_write_format.3.pdf and b/doc/pdf/archive_write_format.3.pdf differ
index 0ef0d7d..e1ca9d0 100644 (file)
Binary files a/doc/pdf/archive_write_free.3.pdf and b/doc/pdf/archive_write_free.3.pdf differ
index 9cd7603..b14fc5f 100644 (file)
Binary files a/doc/pdf/archive_write_header.3.pdf and b/doc/pdf/archive_write_header.3.pdf differ
index 3688e70..1ddb0e0 100644 (file)
Binary files a/doc/pdf/archive_write_new.3.pdf and b/doc/pdf/archive_write_new.3.pdf differ
index 09bdadb..2a3dbe5 100644 (file)
Binary files a/doc/pdf/archive_write_open.3.pdf and b/doc/pdf/archive_write_open.3.pdf differ
index 686be86..fe3a4e8 100644 (file)
Binary files a/doc/pdf/archive_write_set_options.3.pdf and b/doc/pdf/archive_write_set_options.3.pdf differ
index 3681f06..dd4bf4e 100644 (file)
Binary files a/doc/pdf/archive_write_set_passphrase.3.pdf and b/doc/pdf/archive_write_set_passphrase.3.pdf differ
index ff11dc5..b7664af 100644 (file)
Binary files a/doc/pdf/bsdcpio.1.pdf and b/doc/pdf/bsdcpio.1.pdf differ
index 07804d0..81aa392 100644 (file)
Binary files a/doc/pdf/bsdtar.1.pdf and b/doc/pdf/bsdtar.1.pdf differ
index 29722b2..64a4202 100644 (file)
Binary files a/doc/pdf/cpio.5.pdf and b/doc/pdf/cpio.5.pdf differ
index b4f1b57..ec532b7 100644 (file)
Binary files a/doc/pdf/libarchive-formats.5.pdf and b/doc/pdf/libarchive-formats.5.pdf differ
index 6450684..f382031 100644 (file)
Binary files a/doc/pdf/libarchive.3.pdf and b/doc/pdf/libarchive.3.pdf differ
index 566bd8d..aa52946 100644 (file)
Binary files a/doc/pdf/libarchive_changes.3.pdf and b/doc/pdf/libarchive_changes.3.pdf differ
index 03fc168..faf4d7d 100644 (file)
Binary files a/doc/pdf/libarchive_internals.3.pdf and b/doc/pdf/libarchive_internals.3.pdf differ
index 13b63f0..93d26e5 100644 (file)
Binary files a/doc/pdf/mtree.5.pdf and b/doc/pdf/mtree.5.pdf differ
index 84e5eff..c4c6308 100644 (file)
Binary files a/doc/pdf/tar.5.pdf and b/doc/pdf/tar.5.pdf differ
index f3d57db..a231826 100644 (file)
@@ -24,7 +24,7 @@ SYNOPSIS
 
 DESCRIPTION
      These functions create and manipulate data objects that represent entries
-     within an archive.  You can think of a struct archive_entry as a heavy-
+     within an archive.         You can think of a struct archive_entry as a heavy-
      duty version of struct stat: it includes everything from struct stat plus
      associated pathname, textual group and user names, etc.  These objects
      are used by libarchive(3) to represent the metadata associated with a
@@ -89,4 +89,4 @@ HISTORY
 AUTHORS
      The libarchive library was written by Tim Kientzle <kientzle@acm.org>.
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index f0e118c..563a23d 100644 (file)
@@ -206,7 +206,7 @@ DESCRIPTION
           ARCHIVE_ENTRY_ACL_TYPE_NFS4
      Supports all formats that can be created with archive_entry_acl_to_text()
      or respectively archive_entry_acl_to_text_w().  Existing ACL entries are
-     preserved.  To get a clean new ACL from text archive_entry_acl_clear()
+     preserved.         To get a clean new ACL from text archive_entry_acl_clear()
      must be called first.  Entries prefixed with “default:” are treated as
      ARCHIVE_ENTRY_ACL_TYPE_DEFAULT unless type is
      ARCHIVE_ENTRY_ACL_TYPE_NFS4.  Invalid entries, non-parseable ACL entries
@@ -218,7 +218,7 @@ DESCRIPTION
 
      archive_entry_acl_reset() prepare reading the list of ACL entries with
      archive_entry_acl_next(). The function returns 0 if no non-extended ACLs
-     are found.  In this case, the access permissions should be obtained by
+     are found.         In this case, the access permissions should be obtained by
      archive_entry_mode(3) or set using chmod(2).  Otherwise, the function re‐
      turns the same value as archive_entry_acl_count().
 
@@ -257,13 +257,13 @@ DESCRIPTION
      are prefixed with “default:”.
 
      archive_entry_acl_types() get ACL entry types contained in an archive en‐
-     try's ACL.  As POSIX.1e and NFSv4 ACL entries cannot be mixed, this func‐
+     try's ACL.         As POSIX.1e and NFSv4 ACL entries cannot be mixed, this func‐
      tion is a very efficient way to detect if an ACL already contains
      POSIX.1e or NFSv4 ACL entries.
 
 RETURN VALUES
      archive_entry_acl_count() and archive_entry_acl_reset() returns the num‐
-     ber of ACL entries that match the given type mask.  For POSIX.1e ACLS if
+     ber of ACL entries that match the given type mask.         For POSIX.1e ACLS if
      the type mask includes ARCHIVE_ENTRY_ACL_TYPE_ACCESS and at least one ex‐
      tended ACL entry exists, the three classic Unix permissions are counted.
 
index 6c8a5dd..a67576b 100644 (file)
@@ -30,12 +30,12 @@ DESCRIPTION
      Hardlinks are handled in different ways by the archive formats.  The ba‐
      sic strategies are:
 
-     1.   Ignore hardlinks and store the body for each reference (old cpio,
+     1.          Ignore hardlinks and store the body for each reference (old cpio,
          zip).
 
-     2.   Store the body the first time an inode is seen (ustar, pax).
+     2.          Store the body the first time an inode is seen (ustar, pax).
 
-     3.   Store the body the last time an inode is seen (new cpio).
+     3.          Store the body the last time an inode is seen (new cpio).
 
      The archive_entry_linkresolver functions help by providing a unified in‐
      terface and handling the complexity behind the scene.
@@ -48,7 +48,7 @@ DESCRIPTION
 
      The archive_entry_linkresolver_new() function allocates a new link re‐
      solver.  The instance can be freed using
-     archive_entry_linkresolver_free().  All deferred entries are flushed and
+     archive_entry_linkresolver_free().         All deferred entries are flushed and
      the internal storage is freed.
 
      The archive_entry_linkresolver_set_strategy() function selects the opti‐
@@ -61,23 +61,23 @@ DESCRIPTION
      archive_entry that should be written.  Depending on the strategy one of
      the following actions is taken:
 
-     1.   For the simple archive formats *entry is left unmodified and *sparse
+     1.          For the simple archive formats *entry is left unmodified and *sparse
          is set to NULL.
 
-     2.   For tar like archive formats, *sparse is set to NULL.  If *entry is
+     2.          For tar like archive formats, *sparse is set to NULL.  If *entry is
          NULL, no action is taken.  If the hardlink count of *entry is larger
          than 1 and the file type is a regular file or symbolic link, the in‐
-         ternal list is searched for a matching inode.  If such an inode is
+         ternal list is searched for a matching inode.  If such an inode is
          found, the link count is decremented and the file size of *entry is
          set to 0 to notify that no body should be written.  If no such inode
          is found, a copy of the entry is added to the internal cache with a
          link count reduced by one.
 
-     3.   For new cpio like archive formats a value for *entry of NULL is used
+     3.          For new cpio like archive formats a value for *entry of NULL is used
          to flush deferred entries.  In that case *entry is set to an arbi‐
          trary deferred entry and the entry itself is removed from the inter‐
          nal list.  If the internal list is empty, *entry is set to NULL.  In
-         either case, *sparse is set to NULL and the function returns.  If
+         either case, *sparse is set to NULL and the function returns.  If
          the hardlink count of *entry is one or the file type is a directory
          or device, *sparse is set to NULL and no further action is taken.
          Otherwise, the internal list is searched for a matching inode.  If
@@ -92,15 +92,15 @@ DESCRIPTION
 
      The general usage is therefore:
 
-     1.   For each new archive entry, call archive_entry_linkify().
+     1.          For each new archive entry, call archive_entry_linkify().
 
-     2.   Keep in mind that the entries returned may have a size of 0 now.
+     2.          Keep in mind that the entries returned may have a size of 0 now.
 
-     3.   If *entry is not NULL, archive it.
+     3.          If *entry is not NULL, archive it.
 
-     4.   If *sparse is not NULL, archive it.
+     4.          If *sparse is not NULL, archive it.
 
-     5.   After all entries have been written to disk, call
+     5.          After all entries have been written to disk, call
          archive_entry_linkify() with *entry set to NULL and archive the re‐
          turned entry as long as it is not NULL.
 
@@ -110,4 +110,4 @@ RETURN VALUES
 SEE ALSO
      archive_entry(3)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index b883257..e4f0716 100644 (file)
@@ -107,7 +107,7 @@ DESCRIPTION
                 wise, make the entry a hardlink and alter the destination for
                 that.
      pathname   Path in the archive
-     sourcepath  Path on the disk for use by archive_read_disk(3).
+     sourcepath         Path on the disk for use by archive_read_disk(3).
      symlink    Destination of the symbolic link.
 
      Path names can be provided in one of three different ways:
@@ -124,7 +124,7 @@ DESCRIPTION
      The sourcepath is a pure filesystem concept and never stored in an ar‐
      chive directly.
 
-     For that reason, it is only available as multibyte string.  The link path
+     For that reason, it is only available as multibyte string.         The link path
      is a convenience function for conditionally setting hardlink or symlink
      destination.  It doesn't have a corresponding get accessor function.
 
@@ -133,4 +133,4 @@ DESCRIPTION
 SEE ALSO
      archive_entry(3), libarchive(3)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index ace02cc..1f50b2c 100644 (file)
@@ -146,7 +146,7 @@ DESCRIPTION
      Converting a bitmap to a textual string is a platform-specific operation;
      bits that are not meaningful on the current platform will be ignored.
 
-     The canonical text format is a comma-separated list of flag names.  The
+     The canonical text format is a comma-separated list of flag names.         The
      archive_entry_copy_fflags_text() and archive_entry_copy_fflags_text_w()
      functions parse the provided text and set the internal bitmap values.
      This is a platform-specific operation; names that are not meaningful on
@@ -166,4 +166,4 @@ BUGS
      case it is possible that the ids can not be correctly restored from ar‐
      chives and get truncated.
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 9969685..d20fd02 100644 (file)
@@ -126,7 +126,7 @@ DESCRIPTION
 
    General accessor functions
      The functions archive_entry_filetype() and archive_entry_set_filetype()
-     get respectively set the filetype.  The file type is one of the following
+     get respectively set the filetype.         The file type is one of the following
      constants:
           AE_IFREG   Regular file
           AE_IFLNK   Symbolic link
@@ -135,7 +135,7 @@ DESCRIPTION
           AE_IFBLK   Block device
           AE_IFDIR   Directory
           AE_IFIFO   Named pipe (fifo)
-     Not all file types are supported by all platforms.  The constants used by
+     Not all file types are supported by all platforms.         The constants used by
      stat(2) may have different numeric values from the corresponding con‐
      stants above.
 
@@ -173,7 +173,7 @@ DESCRIPTION
      Block and character devices are characterised either using a device num‐
      ber or a pair of major and minor number.  The combined device number can
      be obtained with archive_device_rdev() and set with
-     archive_device_set_rdev().  The major and minor numbers are accessed by
+     archive_device_set_rdev().         The major and minor numbers are accessed by
      archive_device_rdevmajor(), archive_device_rdevminor()
      archive_device_set_rdevmajor() and archive_device_set_rdevminor().
 
@@ -186,4 +186,4 @@ SEE ALSO
      stat(2), archive_entry_acl(3), archive_entry_perms(3),
      archive_entry_time(3), libarchive(3)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 49052c3..2ab6bbb 100644 (file)
@@ -93,7 +93,7 @@ DESCRIPTION
      truncated automatically depending on the archive format (for archiving)
      or the filesystem capabilities (for restoring).
 
-     All timestamp fields are optional.  The XXX_unset() functions can be used
+     All timestamp fields are optional.         The XXX_unset() functions can be used
      to mark the corresponding field as missing.  The current state can be
      queried using XXX_is_set().  Unset time fields have a second and nanosec‐
      ond field of 0.
@@ -107,4 +107,4 @@ HISTORY
 AUTHORS
      The libarchive library was written by Tim Kientzle <kientzle@acm.org>.
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index a9c3ad1..f5f33d3 100644 (file)
@@ -1,4 +1,4 @@
-ARCHIVE_READ(3)         BSD Library Functions Manual          ARCHIVE_READ(3)
+ARCHIVE_READ(3)                 BSD Library Functions Manual          ARCHIVE_READ(3)
 
 NAME
      archive_read — functions for reading streaming archives
@@ -63,7 +63,7 @@ DESCRIPTION
      file, then the header will be followed by the file data.  You can use
      archive_read_data() (which works much like the read(2) system call) to
      read this data from the archive, or archive_read_data_block() which pro‐
-     vides a slightly more efficient interface.  You may prefer to use the
+     vides a slightly more efficient interface.         You may prefer to use the
      higher-level archive_read_data_skip(), which reads and discards the data
      for this entry, archive_read_data_into_fd(), which copies the data to the
      provided file descriptor, or archive_read_extract(), which recreates the
@@ -153,4 +153,4 @@ BUGS
      format of an empty file by inspecting the contents, so this library
      treats empty files as having a special “empty” format.
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index b39ebe0..14603ed 100644 (file)
@@ -70,4 +70,4 @@ SEE ALSO
      archive_read_format(3), archive_read_header(3), archive_read_open(3),
      archive_read_set_options(3), archive_util(3), libarchive(3), tar(5)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index b9f8d90..3600d9d 100644 (file)
@@ -1,14 +1,19 @@
 ARCHIVE_READ_DISK(3)    BSD Library Functions Manual     ARCHIVE_READ_DISK(3)
 
 NAME
-     archive_read_disk_new, archive_read_disk_set_behavior,
-     archive_read_disk_set_symlink_logical,
+     archive_read_disk_new, archive_read_disk_open, archive_read_disk_open_w,
+     archive_read_disk_set_behavior, archive_read_disk_set_symlink_logical,
      archive_read_disk_set_symlink_physical,
      archive_read_disk_set_symlink_hybrid, archive_read_disk_entry_from_file,
      archive_read_disk_gname, archive_read_disk_uname,
      archive_read_disk_set_uname_lookup, archive_read_disk_set_gname_lookup,
-     archive_read_disk_set_standard_lookup — functions for reading objects
-     from disk
+     archive_read_disk_set_standard_lookup, archive_read_disk_descend,
+     archive_read_disk_can_descend, archive_read_disk_current_filesystem,
+     archive_read_disk_current_filesystem_is_synthetic,
+     archive_read_disk_current_filesystem_is_remote,
+     archive_read_disk_set_matching,
+     archive_read_disk_set_metadata_filter_callback, — functions for reading
+     objects from disk
 
 LIBRARY
      Streaming Archive Library (libarchive, -larchive)
@@ -20,6 +25,12 @@ SYNOPSIS
      archive_read_disk_new(void);
 
      int
+     archive_read_disk_open(struct archive *, const char *);
+
+     int
+     archive_read_disk_open_w(struct archive *, const wchar_t *);
+
+     int
      archive_read_disk_set_behavior(struct archive *, int);
 
      int
@@ -52,6 +63,31 @@ SYNOPSIS
      archive_read_disk_entry_from_file(struct archive *,
         struct archive_entry *, int fd, const struct stat *);
 
+     int
+     archive_read_disk_descend(struct archive *);
+
+     int
+     archive_read_disk_can_descend(struct archive *);
+
+     int
+     archive_read_disk_current_filesystem(struct archive *);
+
+     int
+     archive_read_disk_current_filesystem_is_synthetic(struct archive *);
+
+     int
+     archive_read_disk_current_filesystem_is_remote(struct archive *);
+
+     int
+     archive_read_disk_set_matching(struct archive *, struct archive *,
+        void (*excluded_func)(struct archive *, void *, struct archive entry *),
+        void *);
+
+     int
+     archive_read_disk_set_metadata_filter_callback(struct archive *,
+        int (*metadata_filter_func)(struct archive *, void*, struct archive_entry *),
+        void *);
+
 DESCRIPTION
      These functions provide an API for reading information about objects on
      disk.  In particular, they provide an interface for populating struct
@@ -61,6 +97,14 @@ DESCRIPTION
             Allocates and initializes a struct archive object suitable for
             reading object information from disk.
 
+     archive_read_disk_open()
+            Opens the file or directory from the given path and prepares the
+            struct archive to read it from disk.
+
+     archive_read_disk_open_w()
+            Opens the file or directory from the given path as a wide charac‐
+            ter string and prepares the struct archive to read it from disk.
+
      archive_read_disk_set_behavior()
             Configures various behavior options when reading entries from
             disk.  The flags field consists of a bitwise OR of one or more of
@@ -70,7 +114,7 @@ DESCRIPTION
                     (file flag) set.  By default, the nodump file attribute
                     is ignored.
             ARCHIVE_READDISK_MAC_COPYFILE
-                    Mac OS X specific.  Read metadata (ACLs and extended at‐
+                    Mac OS X specific.  Read metadata (ACLs and extended at‐
                     tributes) with copyfile(3).  By default, metadata is read
                     using copyfile(3).
             ARCHIVE_READDISK_NO_ACL
@@ -93,12 +137,15 @@ DESCRIPTION
             ARCHIVE_READDISK_RESTORE_ATIME
                     Restore access time of traversed files.  By default, ac‐
                     cess time of traversed files is not restored.
+            ARCHIVE_READDISK_NO_SPARSE
+                    Do not read sparse file information.  By default, sparse
+                    file information is read from disk.
 
      archive_read_disk_set_symlink_logical(),
             archive_read_disk_set_symlink_physical(),
             archive_read_disk_set_symlink_hybrid()
             This sets the mode used for handling symbolic links.  The
-            “logical” mode follows all symbolic links.  The “physical” mode
+            “logical” mode follows all symbolic links.      The “physical” mode
             does not follow any symbolic links.  The “hybrid” mode currently
             behaves identically to the “logical” mode.
 
@@ -118,7 +165,7 @@ DESCRIPTION
             This convenience function installs a standard set of user and
             group name lookup functions.  These functions use getpwuid(3) and
             getgrgid(3) to convert ids to names, defaulting to NULL if the
-            names cannot be looked up.  These functions also implement a sim‐
+            names cannot be looked up.  These functions also implement a sim‐
             ple memory cache to reduce the number of calls to getpwuid(3) and
             getgrgid(3).
 
@@ -136,7 +183,7 @@ DESCRIPTION
 
             If a pointer to a struct stat is provided, information from that
             structure will be used instead of reading from the disk where ap‐
-            propriate.  This can provide performance benefits in scenarios
+            propriate.  This can provide performance benefits in scenarios
             where struct stat information has already been read from the disk
             as a side effect of some other operation.  (For example, direc‐
             tory traversal libraries often provide this information.)
@@ -145,6 +192,46 @@ DESCRIPTION
             group names using the currently-registered lookup functions
             above.  This affects the file ownership fields and ACL values in
             the struct archive_entry object.
+
+     archive_read_disk_descend()
+            If the current entry can be descended, this function will mark
+            the directory as the next entry for archive_read_header(3) to
+            visit.
+
+     archive_read_disk_can_descend()
+            Returns 1 if the current entry is an unvisited directory and 0
+            otherwise.
+
+     archive_read_disk_current_filesystem()
+            Returns the index of the most recent filesystem entry that has
+            been visited through archive_read_disk
+
+     archive_read_disk_current_filesystem_is_synthetic()
+            Returns 1 if the current filesystem is a virtual filesystem. Re‐
+            turns 0 if the current filesystem is not a virtual filesystem.
+            Returns -1 if it is unknown.
+
+     archive_read_disk_current_filesystem_is_remote()
+            Returns 1 if the current filesystem is a remote filesystem. Re‐
+            turns 0 if the current filesystem is not a remote filesystem. Re‐
+            turns -1 if it is unknown.
+
+     archive_read_disk_set_matching()
+            Allows the caller to set struct archive *_ma to compare each en‐
+            try during archive_read_header(3) calls. If matched based on
+            calls to archive_match_path_excluded,
+            archive_match_time_excluded, or archive_match_owner_excluded,
+            then the callback function specified by the _excluded_func param‐
+            eter will execute. This function will recieve data provided to
+            the fourth parameter, void *_client_data.
+
+     archive_read_disk_set_metadata_filter_callback()
+            Allows the caller to set a callback function during calls to
+            archive_read_header(3) to filter out metadata for each entry. The
+            callback function recieves the struct archive object, void* cus‐
+            tom filter data, and the struct archive_entry.  If the callback
+            function returns an error, ARCHIVE_RETRY will be returned and the
+            entry will not be further processed.
      More information about the struct archive object and the overall design
      of the library can be found in the libarchive(3) overview.
 
index aaf1237..db60036 100644 (file)
@@ -1,4 +1,4 @@
-ARCHIVE_READ_EXTRACT(3)  BSD Library Functions Manual  ARCHIVE_READ_EXTRACT(3)
+ARCHIVE_READ_EXTRACT(3)         BSD Library Functions Manual  ARCHIVE_READ_EXTRACT(3)
 
 NAME
      archive_read_extract, archive_read_extract2,
@@ -70,4 +70,4 @@ SEE ALSO
      archive_read_format(3), archive_read_open(3),
      archive_read_set_options(3), archive_util(3), libarchive(3), tar(5)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index cd80251..934c005 100644 (file)
@@ -126,4 +126,4 @@ BUGS
      Using the “raw” handler together with any other handler will often work
      but can produce surprising results.
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 508b267..f0f66a7 100644 (file)
@@ -49,4 +49,4 @@ SEE ALSO
      archive_read_new(3), archive_read_open(3), archive_read_set_options(3),
      archive_util(3), libarchive(3)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 855711a..6a27946 100644 (file)
@@ -42,4 +42,4 @@ SEE ALSO
      archive_read_filter(3), archive_read_format(3), archive_read_open(3),
      archive_read_set_options(3), archive_util(3), libarchive(3), tar(5)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 706285c..e799af8 100644 (file)
@@ -24,4 +24,4 @@ SEE ALSO
      archive_read_format(3), archive_read_set_options(3), archive_util(3),
      libarchive(3), tar(5)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 7ef2937..1288da6 100644 (file)
@@ -53,7 +53,7 @@ DESCRIPTION
             other devices that require strict I/O blocking.
      archive_read_open_fd()
             Like archive_read_open(), except that it accepts a file descrip‐
-            tor and block size rather than a set of function pointers.  Note
+            tor and block size rather than a set of function pointers.  Note
             that the file descriptor will not be automatically closed at end-
             of-archive.  This function is safe for use with tape drives or
             other blocked devices.
@@ -127,4 +127,4 @@ SEE ALSO
      archive_read_format(3), archive_read_set_options(3), archive_util(3),
      libarchive(3), tar(5)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index fa516fd..3d1bc02 100644 (file)
@@ -1,4 +1,4 @@
-ARCHIVE_READ_OPTIONS(3)  BSD Library Functions Manual  ARCHIVE_READ_OPTIONS(3)
+ARCHIVE_READ_OPTIONS(3)         BSD Library Functions Manual  ARCHIVE_READ_OPTIONS(3)
 
 NAME
      archive_read_set_filter_option, archive_read_set_format_option,
@@ -43,7 +43,7 @@ DESCRIPTION
             returned.
 
             If module is NULL, option and value will be provided to every
-            registered module.  If any module returns ARCHIVE_FATAL, this
+            registered module.  If any module returns ARCHIVE_FATAL, this
             value will be returned immediately.  Otherwise, ARCHIVE_OK will
             be returned if any module accepts the option, and ARCHIVE_FAILED
             in all other cases.
@@ -51,7 +51,7 @@ DESCRIPTION
      archive_read_set_option()
             Calls archive_read_set_format_option(), then
             archive_read_set_filter_option().  If either function returns
-            ARCHIVE_FATAL, ARCHIVE_FATAL will be returned immediately.  Oth‐
+            ARCHIVE_FATAL, ARCHIVE_FATAL will be returned immediately.  Oth‐
             erwise, greater of the two values will be returned.
 
      archive_read_set_options()
@@ -94,7 +94,7 @@ OPTIONS
                     the original PWB cpio format, and handle file mode bits
                     accordingly.  The default is to assume v7 format.
      Format iso9660
-            joliet  Support Joliet extensions.  Defaults to enabled, use
+            joliet  Support Joliet extensions.  Defaults to enabled, use
                     !joliet to disable.
             rockridge
                     Support RockRidge extensions.  Defaults to enabled, use
@@ -130,6 +130,22 @@ OPTIONS
                     multiple tar archives have been concatenated together.
                     Without this option, only the contents of the first con‐
                     catenated archive would be read.
+     Format zip
+            compat-2x
+                    Libarchive 2.x incorrectly encoded Unicode filenames on
+                    some platforms.  This option mimics the libarchive 2.x
+                    filename handling so that such archives can be read cor‐
+                    rectly.
+            hdrcharset
+                    The value is used as a character set name that will be
+                    used when translating file names.
+            ignorecrc32
+                    Skip the CRC32 check.  Mostly used for testing.
+            mac-ext
+                    Support Mac OS metadata extension that records data in
+                    special files beginning with a period and underscore.
+                    Defaults to enabled on Mac OS, disabled on other plat‐
+                    forms.  Use !mac-ext to disable.
 
 ERRORS
      Detailed error codes and textual descriptions are available from the
@@ -138,4 +154,4 @@ ERRORS
 SEE ALSO
      tar(1), archive_read(3), archive_write_set_options(3), libarchive(3)
 
-BSD                           January 31, 2020                            BSD
+BSD                           January 31, 2020                            BSD
index 4827c0a..01910d7 100644 (file)
@@ -1,4 +1,4 @@
-ARCHIVE_UTIL(3)         BSD Library Functions Manual          ARCHIVE_UTIL(3)
+ARCHIVE_UTIL(3)                 BSD Library Functions Manual          ARCHIVE_UTIL(3)
 
 NAME
      archive_clear_error, archive_compression, archive_compression_name,
@@ -131,7 +131,7 @@ DESCRIPTION
             returned by archive_errno() and archive_error_string().  This
             function should be used within I/O callbacks to set system-spe‐
             cific error codes and error descriptions.  This function accepts
-            a printf-like format string and arguments.  However, you should
+            a printf-like format string and arguments.  However, you should
             be careful to use only the following printf format specifiers:
             “%c”, “%d”, “%jd”, “%jo”, “%ju”, “%jx”, “%ld”, “%lo”, “%lu”,
             “%lx”, “%o”, “%u”, “%s”, “%x”, “%%”.  Field-width specifiers and
@@ -147,4 +147,4 @@ HISTORY
 AUTHORS
      The libarchive library was written by Tim Kientzle <kientzle@acm.org>.
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index f8d08b3..7e54288 100644 (file)
@@ -49,7 +49,7 @@ DESCRIPTION
 
      Individual archive entries are written in a three-step process: You first
      initialize a struct archive_entry structure with information about the
-     new entry.  At a minimum, you should set the pathname of the entry and
+     new entry.         At a minimum, you should set the pathname of the entry and
      provide a struct stat with a valid st_mode field, which specifies the
      type of object and st_size field, which specifies the size of the data
      portion of the object.
@@ -172,7 +172,7 @@ AUTHORS
 
 BUGS
      There are many peculiar bugs in historic tar implementations that may
-     cause certain programs to reject archives written by this library.  For
+     cause certain programs to reject archives written by this library.         For
      example, several historic implementations calculated header checksums in‐
      correctly and will thus reject valid archives; GNU tar does not fully
      support pax interchange format; some old tar implementations required
@@ -189,4 +189,4 @@ BUGS
      restore device nodes with large device numbers from archives created by
      this library.
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 8f92638..ed38c90 100644 (file)
@@ -28,13 +28,13 @@ DESCRIPTION
             Sets the block size used for writing the archive data.  Every
             call to the write callback function, except possibly the last
             one, will use this value for the length.  The default is to use a
-            block size of 10240 bytes.  Note that a block size of zero will
+            block size of 10240 bytes.  Note that a block size of zero will
             suppress internal blocking and cause writes to be sent directly
             to the write callback as they occur.
 
      archive_write_get_bytes_per_block()
             Retrieve the block size to be used for writing.  A value of -1
-            here indicates that the library should use default values.  A
+            here indicates that the library should use default values.  A
             value of zero indicates that internal blocking is suppressed.
 
      archive_write_set_bytes_in_last_block()
@@ -71,4 +71,4 @@ SEE ALSO
      tar(1), archive_write_set_options(3), libarchive(3), cpio(5), mtree(5),
      tar(5)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 96f8d1c..a863390 100644 (file)
@@ -26,7 +26,7 @@ DESCRIPTION
             like archive_write_data() except that it performs a seek on the
             file being written to the specified offset before writing the
             data.  This is useful when restoring sparse files from archive
-            formats that support sparse files.  Returns number of bytes writ‐
+            formats that support sparse files.  Returns number of bytes writ‐
             ten or -1 on error.  (Note: This is currently not supported for
             archive_write handles, only for archive_write_disk handles.
 
@@ -41,7 +41,7 @@ ERRORS
 BUGS
      In libarchive 3.x, this function sometimes returns zero on success in‐
      stead of returning the number of bytes written.  Specifically, this oc‐
-     curs when writing to an archive_write_disk handle.  Clients should treat
+     curs when writing to an archive_write_disk handle.         Clients should treat
      any value less than zero as an error and consider any non-negative value
      as success.
 
index 1536edc..6716274 100644 (file)
@@ -37,7 +37,7 @@ SYNOPSIS
 
 DESCRIPTION
      These functions provide a complete API for creating objects on disk from
-     struct archive_entry descriptions.  They are most naturally used when ex‐
+     struct archive_entry descriptions.         They are most naturally used when ex‐
      tracting objects from an archive using the archive_read() interface.  The
      general process is to read struct archive_entry objects from an archive,
      then write those objects to a struct archive object created using the
@@ -72,7 +72,7 @@ DESCRIPTION
                     (Linux) or chflags(1) (FreeBSD, Mac OS X) for more infor‐
                     mation on file attributes.
             ARCHIVE_EXTRACT_MAC_METADATA
-                    Mac OS X specific.  Restore metadata using copyfile(3).
+                    Mac OS X specific.  Restore metadata using copyfile(3).
                     By default, copyfile(3) metadata is ignored.
             ARCHIVE_EXTRACT_NO_OVERWRITE
                     Existing files on disk will not be overwritten.  By de‐
@@ -87,7 +87,7 @@ DESCRIPTION
             ARCHIVE_EXTRACT_PERM
                     Full permissions (including SGID, SUID, and sticky bits)
                     should be restored exactly as specified, without obeying
-                    the current umask.  Note that SUID and SGID bits can only
+                    the current umask.  Note that SUID and SGID bits can only
                     be restored if the user and group ID of the object on
                     disk are correct.  If ARCHIVE_EXTRACT_OWNER is not speci‐
                     fied, then SUID and SGID bits will only be restored if
@@ -98,7 +98,7 @@ DESCRIPTION
             ARCHIVE_EXTRACT_SAFE_WRITES
                     Extract files atomically, by first creating a unique tem‐
                     porary file and then renaming it to its required destina‐
-                    tion name.  This avoids a race where an application might
+                    tion name.  This avoids a race where an application might
                     see a partial file (or no file) during extraction.
             ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS
                     Refuse to extract an absolute path.  The default is to
@@ -114,15 +114,14 @@ DESCRIPTION
                     help guard against a variety of mischief caused by ar‐
                     chives that (deliberately or otherwise) extract files
                     outside of the current directory.  The default is not to
-                    perform this check.  If
+                    perform this check.  If ARCHIVE_EXTRACT_UNLINK is speci‐
+                    fied together with this option, the library will remove
+                    any intermediate symlinks it finds and return an error
+                    only if such symlink could not be removed.
             ARCHIVE_EXTRACT_SPARSE
                     Scan data for blocks of NUL bytes and try to recreate
                     them with holes.  This results in sparse files, indepen‐
                     dent of whether the archive format supports or uses them.
-                    ARCHIVE_EXTRACT_UNLINK is specified together with this
-                    option, the library will remove any intermediate symlinks
-                    it finds and return an error only if such symlink could
-                    not be removed.
             ARCHIVE_EXTRACT_TIME
                     The timestamps (mtime, ctime, and atime) should be re‐
                     stored.  By default, they are ignored.  Note that restor‐
@@ -157,11 +156,11 @@ DESCRIPTION
             This convenience function installs a standard set of user and
             group lookup functions.  These functions use getpwnam(3) and
             getgrnam(3) to convert names to ids, defaulting to the ids if the
-            names cannot be looked up.  These functions also implement a sim‐
+            names cannot be looked up.  These functions also implement a sim‐
             ple memory cache to reduce the number of calls to getpwnam(3) and
             getgrnam(3).
      More information about the struct archive object and the overall design
-     of the library can be found in the libarchive(3) overview.  Many of these
+     of the library can be found in the libarchive(3) overview.         Many of these
      functions are also documented under archive_write(3).
 
 RETURN VALUES
@@ -194,7 +193,7 @@ AUTHORS
      The libarchive library was written by Tim Kientzle <kientzle@acm.org>.
 
 BUGS
-     Directories are actually extracted in two distinct phases.  Directories
+     Directories are actually extracted in two distinct phases.         Directories
      are created during archive_write_header(), but final permissions are not
      set until archive_write_close().  This separation is necessary to cor‐
      rectly handle borderline cases such as a non-writable directory contain‐
@@ -207,7 +206,7 @@ BUGS
 
      The library attempts to create objects with filenames longer than
      PATH_MAX by creating prefixes of the full path and changing the current
-     directory.  Currently, this logic is limited in scope; the fixup pass
+     directory.         Currently, this logic is limited in scope; the fixup pass
      does not work correctly for such objects and the symlink security check
      option disables the support for very long pathnames.
 
@@ -217,14 +216,14 @@ BUGS
      with a single request.  Of course, this does not work if the
      ARCHIVE_EXTRACT_NODOTDOT option is specified.
 
-     Implicit directories are always created obeying the current umask.  Ex‐
+     Implicit directories are always created obeying the current umask.         Ex‐
      plicit objects are created obeying the current umask unless
      ARCHIVE_EXTRACT_PERM is specified, in which case they current umask is
      ignored.
 
      SGID and SUID bits are restored only if the correct user and group could
      be set.  If ARCHIVE_EXTRACT_OWNER is not specified, then no attempt is
-     made to set the ownership.  In this case, SGID and SUID bits are restored
+     made to set the ownership.         In this case, SGID and SUID bits are restored
      only if the user and group of the final object happen to match those
      specified in the entry.
 
@@ -236,4 +235,4 @@ BUGS
      There should be a corresponding archive_read_disk interface that walks a
      directory hierarchy and returns archive entry objects.
 
-BSD                           January 19, 2020                            BSD
+BSD                           January 19, 2020                            BSD
index 99523f3..60e02d1 100644 (file)
@@ -1,4 +1,4 @@
-ARCHIVE_WRITE_FILTER(3)  BSD Library Functions Manual  ARCHIVE_WRITE_FILTER(3)
+ARCHIVE_WRITE_FILTER(3)         BSD Library Functions Manual  ARCHIVE_WRITE_FILTER(3)
 
 NAME
      archive_write_add_filter_b64encode, archive_write_add_filter_by_name,
@@ -98,4 +98,4 @@ SEE ALSO
      tar(1), archive_write(3), archive_write_format(3),
      archive_write_set_options(3), libarchive(3), cpio(5), mtree(5), tar(5)
 
-BSD                            August 14, 2014                            BSD
+BSD                            August 14, 2014                            BSD
index 1acbe7b..747d4d4 100644 (file)
@@ -1,4 +1,4 @@
-ARCHIVE_WRITE_FORMAT(3)  BSD Library Functions Manual  ARCHIVE_WRITE_FORMAT(3)
+ARCHIVE_WRITE_FORMAT(3)         BSD Library Functions Manual  ARCHIVE_WRITE_FORMAT(3)
 
 NAME
      archive_write_set_format, archive_write_set_format_7zip,
@@ -120,7 +120,7 @@ DESCRIPTION
 
      archive_write_set_format_filter_by_ext()
             archive_write_set_format_filter_by_ext_def()
-            Sets both filters and format based on the output filename.  Sup‐
+            Sets both filters and format based on the output filename.  Sup‐
             ported extensions: .7z, .zip, .jar, .cpio, .iso, .a, .ar, .tar,
             .tgz, .tar.gz, .tar.bz2, .tar.xz
 
index 34a047f..38415eb 100644 (file)
@@ -55,4 +55,4 @@ SEE ALSO
      tar(1), archive_write_set_options(3), libarchive(3), cpio(5), mtree(5),
      tar(5)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 430c018..4185941 100644 (file)
@@ -1,4 +1,4 @@
-ARCHIVE_WRITE_HEADER(3)  BSD Library Functions Manual  ARCHIVE_WRITE_HEADER(3)
+ARCHIVE_WRITE_HEADER(3)         BSD Library Functions Manual  ARCHIVE_WRITE_HEADER(3)
 
 NAME
      archive_write_header — functions for creating archives
@@ -32,4 +32,4 @@ SEE ALSO
      tar(1), archive_write_set_options(3), libarchive(3), cpio(5), mtree(5),
      tar(5)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index 38608c8..355d075 100644 (file)
@@ -23,4 +23,4 @@ SEE ALSO
      tar(1), archive_write(3), archive_write_set_options(3), libarchive(3),
      cpio(5), mtree(5), tar(5)
 
-BSD                           February 2, 2012                            BSD
+BSD                           February 2, 2012                            BSD
index c8dbec0..03019b0 100644 (file)
@@ -64,12 +64,12 @@ DESCRIPTION
             A convenience form of archive_write_open() that accepts a file‐
             name.  A NULL argument indicates that the output should be writ‐
             ten to standard output; an argument of “-” will open a file with
-            that name.  If you have not invoked
+            that name.  If you have not invoked
             archive_write_set_bytes_in_last_block(), then
             archive_write_open_filename() will adjust the last-block padding
             depending on the file: it will enable padding when writing to
             standard output or to a character or block device node, it will
-            disable padding otherwise.  You can override this by manually in‐
+            disable padding otherwise.  You can override this by manually in‐
             voking archive_write_set_bytes_in_last_block() before calling
             archive_write_open2().  The archive_write_open_filename() func‐
             tion is safe for use with tape drives or other block-oriented de‐
@@ -81,7 +81,7 @@ DESCRIPTION
             final size_t * argument points to a variable that will be updated
             after each write to reflect how much of the buffer is currently
             in use.  You should be careful to ensure that this variable re‐
-            mains allocated until after the archive is closed.  This function
+            mains allocated until after the archive is closed.  This function
             will disable padding unless you have specifically set the block
             size.
      More information about the struct archive object and the overall design
@@ -93,7 +93,7 @@ DESCRIPTION
 
 CLIENT CALLBACKS
      To use this library, you will need to define and register callback func‐
-     tions that will be invoked to write data to the resulting archive.  These
+     tions that will be invoked to write data to the resulting archive.         These
      functions are registered by calling archive_write_open2():
 
           typedef int archive_open_callback(struct archive *, void
@@ -111,7 +111,7 @@ CLIENT CALLBACKS
 
      The write callback is invoked whenever the library needs to write raw
      bytes to the archive.  For correct blocking, each call to the write call‐
-     back function should translate into a single write(2) system call.  This
+     back function should translate into a single write(2) system call.         This
      is especially critical when writing archives to tape drives.  On success,
      the write callback should return the number of bytes actually written.
      On error, the callback should invoke archive_set_error() to register an
@@ -124,7 +124,7 @@ CLIENT CALLBACKS
      ing is complete. If the open callback fails, the close callback is not
      invoked.  The callback should return ARCHIVE_OK on success.  On failure,
      the callback should invoke archive_set_error() to register an error code
-     and message and return
+     and message and return ARCHIVE_FATAL.
 
           typedef int archive_free_callback(struct archive *, void
           *client_data)
index 094fa40..7a50e4b 100644 (file)
@@ -46,15 +46,15 @@ DESCRIPTION
             be returned.
 
             If module is NULL, option and value will be provided to every
-            registered module.  If any module returns ARCHIVE_FATAL, this
+            registered module.  If any module returns ARCHIVE_FATAL, this
             value will be returned immediately.  Otherwise, ARCHIVE_OK will
             be returned if any module accepts the option, and ARCHIVE_FAILED
             in all other cases.
 
      archive_write_set_option()
             Calls archive_write_set_format_option(), then
-            archive_write_set_filter_option().  If either function returns
-            ARCHIVE_FATAL, ARCHIVE_FATAL will be returned immediately.  Oth‐
+            archive_write_set_filter_option().  If either function returns
+            ARCHIVE_FATAL, ARCHIVE_FATAL will be returned immediately.  Oth‐
             erwise, the greater of the two values will be returned.
 
      archive_write_set_options()
@@ -141,6 +141,15 @@ OPTIONS
                     The value is interpreted as a decimal integer specifying
                     the compression level. Supported values depend on the li‐
                     brary version, common values are from 1 to 22.
+            long    Enables long distance matching. The value is interpreted
+                    as a decimal integer specifying log2 window size in
+                    bytes. Values from 10 to 30 for 32 bit, or 31 for 64 bit,
+                    are supported.
+            threads
+                    The value is interpreted as a decimal integer specifying
+                    the number of threads for multi-threaded zstd compres‐
+                    sion.  If set to 0, zstd will attempt to detect and use
+                    the number of physical CPU cores.
      Format 7zip
             compression
                     The value is one of “store”, “deflate”, “bzip2”, “lzma1”,
@@ -228,7 +237,7 @@ OPTIONS
                     period will have that period replaced by an underscore
                     character in the standard ISO9660 namespace.  This does
                     not impact names stored in the Rockridge or Joliet exten‐
-                    sion area.  Default: disabled.
+                    sion area.  Default: disabled.
             allow-lowercase
                     If enabled, allows filenames to contain lowercase charac‐
                     ters.  If disabled, filenames will be forced to upper‐
@@ -239,7 +248,7 @@ OPTIONS
                     characters, in violation of the ISO9660 specification.
                     If disabled, additional periods will be converted to un‐
                     derscore characters.  This does not impact names stored
-                    in the Rockridge or Joliet extension area.  Default: dis‐
+                    in the Rockridge or Joliet extension area.  Default: dis‐
                     abled.
             allow-period
                     If enabled, allows filenames to contain trailing period
@@ -290,7 +299,7 @@ OPTIONS
             joliet  Microsoft's Joliet extensions store a completely separate
                     set of directory information about each file.  In partic‐
                     ular, this information includes Unicode filenames of up
-                    to 255 characters.  Default: enabled.
+                    to 255 characters.  Default: enabled.
             limit-depth
                     If enabled, libarchive will use directory relocation
                     records to ensure that no pathname exceeds the ISO9660
@@ -306,7 +315,7 @@ OPTIONS
                     If enabled, all 7-bit ASCII characters are permitted in
                     filenames (except lowercase characters unless
                     allow-lowercase is also specified).  This violates
-                    ISO9660 standards.  This does not impact names stored in
+                    ISO9660 standards.  This does not impact names stored in
                     the Rockridge or Joliet extension area.  Default: dis‐
                     abled.
             rockridge
@@ -328,7 +337,7 @@ OPTIONS
                     fault: 6
             zisofs  Synonym for zisofs=direct.
             zisofs=direct
-                    Compress each file in the archive.  Unlike
+                    Compress each file in the archive.  Unlike
                     zisofs=indirect, this is handled entirely within
                     libarchive and does not require a separate utility.  For
                     best results, libarchive tests each file and will store
@@ -489,4 +498,4 @@ AUTHORS
      Michihiro NAKAJIMA.
 
 BUGS
-BSD                           January 31, 2020                            BSD
+BSD                           January 31, 2020                            BSD
index 2acea6e..2aa3ec1 100644 (file)
@@ -19,7 +19,7 @@ SYNOPSIS
 
 DESCRIPTION
      archive_write_set_passphrase()
-            Set a passphrase for writing an encrypted archive.  If passphrase
+            Set a passphrase for writing an encrypted archive.  If passphrase
             is NULL or empty, this function will do nothing and
             ARCHIVE_FAILED will be returned.  Otherwise, ARCHIVE_OK will be
             returned.
index 6a0d3be..d7eb886 100644 (file)
@@ -1,4 +1,4 @@
-CPIO(1)                  BSD General Commands Manual                  CPIO(1)
+CPIO(1)                          BSD General Commands Manual                  CPIO(1)
 
 NAME
      cpio — copy files to and from archives
@@ -14,15 +14,15 @@ DESCRIPTION
      and can create tar, pax, cpio, ar, and shar archives.
 
      The first option to cpio is a mode indicator from the following list:
-     -i      Input.  Read an archive from standard input (unless overridden)
+     -i             Input.  Read an archive from standard input (unless overridden)
             and extract the contents to disk or (if the -t option is speci‐
             fied) list the contents to standard output.  If one or more file
             patterns are specified, only files matching one of the patterns
             will be extracted.
-     -o      Output.  Read a list of filenames from standard input and produce
+     -o             Output.  Read a list of filenames from standard input and produce
             a new archive on standard output (unless overridden) containing
             the specified items.
-     -p      Pass-through.  Read a list of filenames from standard input and
+     -p             Pass-through.  Read a list of filenames from standard input and
             copy the files to the specified directory.
 
 OPTIONS
@@ -43,17 +43,17 @@ OPTIONS
             (o mode only) When writing a cpio archive, use the (newer, non-
             PWB) binary format.
 
-     -A      (o mode only) Append to the specified archive.  (Not yet imple‐
+     -A             (o mode only) Append to the specified archive.  (Not yet imple‐
             mented.)
 
-     -a      (o and p modes) Reset access times on files after they are read.
+     -a             (o and p modes) Reset access times on files after they are read.
 
-     -B      (o mode only) Block output to records of 5120 bytes.
+     -B             (o mode only) Block output to records of 5120 bytes.
 
      -C size
             (o mode only) Block output to records of size bytes.
 
-     -c      (o mode only) Use the old POSIX portable character format.
+     -c             (o mode only) Use the old POSIX portable character format.
             Equivalent to --format odc.
 
      -d, --make-directories
@@ -80,7 +80,7 @@ OPTIONS
                      mat.
             ustar    The POSIX.1 tar format.
 
-            The default format is odc.  See libarchive-formats(5) for more
+            The default format is odc.  See libarchive-formats(5) for more
             complete information about the formats currently supported by the
             underlying libarchive(3) library.
 
@@ -100,12 +100,12 @@ OPTIONS
 
      -J, --xz
             (o mode only) Compress the file with xz-compatible compression
-            before writing it.  In input mode, this option is ignored; xz
+            before writing it.  In input mode, this option is ignored; xz
             compression is recognized automatically on input.
 
-     -j      Synonym for -y.
+     -j             Synonym for -y.
 
-     -L      (o and p modes) All symbolic links will be followed.  Normally,
+     -L             (o and p modes) All symbolic links will be followed.  Normally,
             symbolic links are archived and copied as symbolic links.  With
             this option, the target of the link will be archived or copied
             instead.
@@ -127,10 +127,10 @@ OPTIONS
             zstd compression is recognized automatically on input.
 
      --lzma  (o mode only) Compress the file with lzma-compatible compression
-            before writing it.  In input mode, this option is ignored; lzma
+            before writing it.  In input mode, this option is ignored; lzma
             compression is recognized automatically on input.
 
-     --lzop  (o mode only) Compress the resulting archive with lzop(1).  In
+     --lzop  (o mode only) Compress the resulting archive with lzop(1).         In
             input mode, this option is ignored.
 
      --passphrase passphrase
@@ -160,7 +160,7 @@ OPTIONS
             Output mode.  See above for description.
 
      -p, --pass-through
-            Pass-through mode.  See above for description.
+            Pass-through mode.  See above for description.
 
      --preserve-owner
             (i mode only) Restore file ownership.  This is the default when
@@ -170,17 +170,17 @@ OPTIONS
             Suppress unnecessary messages.
 
      -R [user][:][group], --owner [user][:][group]
-            Set the owner and/or group on files in the output.  If group is
+            Set the owner and/or group on files in the output.  If group is
             specified with no user (for example, -R :wheel) then the group
             will be set but not the user.  If the user is specified with a
             trailing colon and no group (for example, -R root:) then the
             group will be set to the user's default group.  If the user is
             specified with no trailing colon, then the user will be set but
             not the group.  In -i and -p modes, this option can only be used
-            by the super-user.  (For compatibility, a period can be used in
+            by the super-user.  (For compatibility, a period can be used in
             place of the colon.)
 
-     -r      (All modes.)  Rename files interactively. For each file, a
+     -r             (All modes.)  Rename files interactively.  For each file, a
             prompt is written to /dev/tty containing the name of the file and
             a line is read from /dev/tty.  If the line read is blank, the
             file is skipped.  If the line contains a single period, the file
@@ -206,15 +206,15 @@ OPTIONS
      --version
             Print the program version information and exit.
 
-     -y      (o mode only) Compress the archive with bzip2-compatible compres‐
+     -y             (o mode only) Compress the archive with bzip2-compatible compres‐
             sion before writing it.  In input mode, this option is ignored;
             bzip2 compression is recognized automatically on input.
 
-     -Z      (o mode only) Compress the archive with compress-compatible com‐
+     -Z             (o mode only) Compress the archive with compress-compatible com‐
             pression before writing it.  In input mode, this option is ig‐
             nored; compression is recognized automatically on input.
 
-     -z      (o mode only) Compress the archive with gzip-compatible compres‐
+     -z             (o mode only) Compress the archive with gzip-compatible compres‐
             sion before writing it.  In input mode, this option is ignored;
             gzip compression is recognized automatically on input.
 
@@ -226,12 +226,12 @@ ENVIRONMENT
 
      LANG      The locale to use.  See environ(7) for more information.
 
-     TZ        The timezone to use when displaying dates.  See environ(7) for
+     TZ                The timezone to use when displaying dates.  See environ(7) for
                more information.
 
 EXAMPLES
      The cpio command is traditionally used to copy file hierarchies in con‐
-     junction with the find(1) command.  The first example here simply copies
+     junction with the find(1) command.         The first example here simply copies
      all files from src to dest:
           find src | cpio -pmud dest
 
@@ -285,8 +285,8 @@ BUGS
      The cpio archive format has several basic limitations: It does not store
      user and group names, only numbers.  As a result, it cannot be reliably
      used to transfer files between systems with dissimilar user and group
-     numbering.  Older cpio formats limit the user and group numbers to 16 or
-     18 bits, which is insufficient for modern systems.  The cpio archive for‐
+     numbering.         Older cpio formats limit the user and group numbers to 16 or
+     18 bits, which is insufficient for modern systems.         The cpio archive for‐
      mats cannot support files over 4 gigabytes, except for the “odc” variant,
      which can support files up to 8 gigabytes.
 
index 75d6f0c..4a363f7 100644 (file)
@@ -19,20 +19,20 @@ DESCRIPTION
      provided for compatibility with historical implementations.  See COMPATI‐
      BILITY below for details.
 
-     The other synopsis forms show the preferred usage.  The first option to
+     The other synopsis forms show the preferred usage.         The first option to
      tar is a mode indicator from the following list:
-     -c      Create a new archive containing the specified items.  The long
+     -c             Create a new archive containing the specified items.  The long
             option form is --create.
-     -r      Like -c, but new entries are appended to the archive.  Note that
+     -r             Like -c, but new entries are appended to the archive.  Note that
             this only works on uncompressed archives stored in regular files.
-            The -f option is required.  The long option form is --append.
-     -t      List archive contents to stdout.  The long option form is --list.
-     -u      Like -r, but new entries are added only if they have a modifica‐
+            The -f option is required.  The long option form is --append.
+     -t             List archive contents to stdout.  The long option form is --list.
+     -u             Like -r, but new entries are added only if they have a modifica‐
             tion date newer than the corresponding entry in the archive.
             Note that this only works on uncompressed archives stored in reg‐
             ular files.  The -f option is required.  The long form is
             --update.
-     -x      Extract to disk from the archive. If a file with the same name
+     -x             Extract to disk from the archive.  If a file with the same name
             appears more than once in the archive, each copy will be ex‐
             tracted, with later copies overwriting (replacing) earlier
             copies.  The long option form is --extract.
@@ -159,13 +159,13 @@ OPTIONS
             group name that will be stored in the archive; the name will not
             be verified against the system group database.
 
-     -H      (c and r modes only) Symbolic links named on the command line
+     -H             (c and r modes only) Symbolic links named on the command line
             will be followed; the target of the link will be archived, not
             the link itself.
 
-     -h      (c and r modes only) Synonym for -L.
+     -h             (c and r modes only) Synonym for -L.
 
-     -I      Synonym for -T.
+     -I             Synonym for -T.
 
      --help  Show usage.
 
@@ -240,7 +240,7 @@ OPTIONS
             be created with --xz instead.  Note that this tar implementation
             recognizes LZMA compression automatically when reading archives.
 
-     --lzop  (c mode only) Compress the resulting archive with lzop(1).  In
+     --lzop  (c mode only) Compress the resulting archive with lzop(1).         In
             extract or list modes, this option is ignored.  Note that this
             tar implementation recognizes LZO compression automatically when
             reading archives.
@@ -306,9 +306,13 @@ OPTIONS
             format.  This is the reverse of --mac-metadata.  and the default
             behavior if tar is run as non-root in x mode.
 
+     --no-read-sparse
+            (c, r, u modes only) Do not read sparse file information from
+            disk.  This is the reverse of --read-sparse.
+
      --no-safe-writes
             (x mode only) Do not create temporary files and use rename(2) to
-            replace the original ones.  This is the reverse of --safe-writes.
+            replace the original ones.  This is the reverse of --safe-writes.
 
      --no-same-owner
             (x mode only) Do not extract owner and group IDs.  This is the
@@ -329,7 +333,7 @@ OPTIONS
      --numeric-owner
             This is equivalent to --uname "" --gname "".  On extract, it
             causes user and group names in the archive to be ignored in favor
-            of the numeric user and group ids.  On create, it causes user and
+            of the numeric user and group ids.  On create, it causes user and
             group names to not be stored in the archive.
 
      -O, --to-stdout
@@ -338,14 +342,14 @@ OPTIONS
             mode, the file listing will be written to stderr rather than the
             usual stdout.
 
-     -o      (x mode) Use the user and group of the user running the program
+     -o             (x mode) Use the user and group of the user running the program
             rather than those specified in the archive.  Note that this has
             no significance unless -p is specified, and the program is being
             run by the root user.  In this case, the file modes and flags
             from the archive will be restored, but ACLs or owner information
             in the archive will be discarded.
 
-     -o      (c, r, u mode) A synonym for --format ustar
+     -o             (c, r, u mode) A synonym for --format ustar
 
      --older date
             (c, r, u modes only) Only include files and directories older
@@ -390,7 +394,7 @@ OPTIONS
 
             Examples of supported options:
             iso9660:joliet
-                    Support Joliet extensions.  This is enabled by default,
+                    Support Joliet extensions.  This is enabled by default,
                     use !joliet or iso9660:!joliet to disable.
             iso9660:rockridge
                     Support Rock Ridge extensions.  This is enabled by de‐
@@ -426,12 +430,30 @@ OPTIONS
                     A decimal integer specifying the zstd compression level.
                     Supported values depend on the library version, common
                     values are from 1 to 22.
+            zstd:threads
+                    Specify the number of worker threads to use.  Setting
+                    threads to a special value 0 makes zstd(1) use as many
+                    threads as there are CPU cores on the system.
+            zstd:frame-per-file
+                    Start a new compression frame at the beginning of each
+                    file in the archive.
+            zstd:min-frame-size=N
+                    In combination with zstd:frame-per-file, do not start a
+                    new compression frame unless the current frame is at
+                    least N bytes.
+            zstd:max-frame-size=N
+                    Start a new compression frame as soon as the current
+                    frame exceeds N bytes.
             lzop:compression-level
                     A decimal integer from 1 to 9 specifying the lzop com‐
                     pression level.
             xz:compression-level
                     A decimal integer from 0 to 9 specifying the xz compres‐
                     sion level.
+            xz:threads
+                    Specify the number of worker threads to use.  Setting
+                    threads to a special value 0 makes xz(1) use as many
+                    threads as there are CPU cores on the system.
             mtree:keyword
                     The mtree writer module allows you to specify which mtree
                     keywords will be included in the output.  Supported key‐
@@ -441,7 +463,7 @@ OPTIONS
                     lent to: “device, flags, gid, gname, link, mode, nlink,
                     size, time, type, uid, uname”.
             mtree:all
-                    Enables all of the above keywords.  You can also use
+                    Enables all of the above keywords.  You can also use
                     mtree:!all to disable all keywords.
             mtree:use-set
                     Enable generation of /set lines in the output.
@@ -502,9 +524,13 @@ OPTIONS
             tries overwrite earlier entries.  This option is provided as a
             performance optimization.
 
-     -S      (x mode only) Extract files as sparse files.  For every block on
+     --read-sparse
+            (c, r, u modes only) Read sparse file information from disk.
+            This is the reverse of --no-read-sparse and the default behavior.
+
+     -S             (x mode only) Extract files as sparse files.  For every block on
             disk, check first if it contains only NULL bytes and seek over it
-            otherwise.  This works similar to the conv=sparse option of dd.
+            otherwise.  This works similar to the conv=sparse option of dd.
 
      -s pattern
             Modify file or archive member names according to pattern.  The
@@ -541,7 +567,7 @@ OPTIONS
             times.
 
      --same-owner
-            (x mode only) Extract owner and group IDs.  This is the reverse
+            (x mode only) Extract owner and group IDs.  This is the reverse
             of --no-same-owner and the default behavior if tar is run as
             root.
 
@@ -558,7 +584,7 @@ OPTIONS
             cause the current directory to be changed to the directory speci‐
             fied on the following line.  Names are terminated by newlines un‐
             less --null is specified.  Note that --null also disables the
-            special handling of lines containing “-C”.  Note:      If you are
+            special handling of lines containing “-C”.      Note:  If you are
             generating lists of files using find(1), you probably want to use
             -n as well.
 
@@ -569,7 +595,7 @@ OPTIONS
      -U, --unlink, --unlink-first
             (x mode only) Unlink files before creating them.  This can be a
             minor performance optimization if most files already exist, but
-            can make things slower if most files do not already exist.  This
+            can make things slower if most files do not already exist.  This
             flag also causes tar to remove intervening directory symlinks in‐
             stead of reporting an error.  See the SECURITY section below for
             more details.
@@ -605,7 +631,7 @@ OPTIONS
             Ask for confirmation for every action.
 
      -X filename, --exclude-from filename
-            Read a list of exclusion patterns from the specified file.  See
+            Read a list of exclusion patterns from the specified file.  See
             --exclude for more information about the handling of exclusions.
 
      --xattrs
@@ -613,7 +639,7 @@ OPTIONS
             tributes.  This is the reverse of --no-xattrs and the default be‐
             havior in c, r, and u modes or if tar is run in x mode as root.
 
-     -y      (c mode only) Compress the resulting archive with bzip2(1).  In
+     -y             (c mode only) Compress the resulting archive with bzip2(1).  In
             extract or list modes, this option is ignored.  Note that this
             tar implementation recognizes bzip2 compression automatically
             when reading archives.
@@ -625,7 +651,7 @@ OPTIONS
             when reading archives.
 
      -z, --gunzip, --gzip
-            (c mode only) Compress the resulting archive with gzip(1).  In
+            (c mode only) Compress the resulting archive with gzip(1).  In
             extract or list modes, this option is ignored.  Note that this
             tar implementation recognizes gzip compression automatically when
             reading archives.
@@ -634,20 +660,20 @@ ENVIRONMENT
      The following environment variables affect the execution of tar:
 
      TAR_READER_OPTIONS
-               The default options for format readers and compression read‐
-               ers.  The --options option overrides this.
+            The default options for format readers and compression readers.
+            The --options option overrides this.
 
      TAR_WRITER_OPTIONS
-               The default options for format writers and compression writ‐
-               ers.  The --options option overrides this.
+            The default options for format writers and compression writers.
+            The --options option overrides this.
 
-     LANG      The locale to use.  See environ(7) for more information.
+     LANG    The locale to use.         See environ(7) for more information.
 
-     TAPE      The default device.  The -f option overrides this.  Please see
-               the description of the -f option above for more details.
+     TAPE    The default device.  The -f option overrides this.         Please see
+            the description of the -f option above for more details.
 
-     TZ        The timezone to use when displaying dates.  See environ(7) for
-               more information.
+     TZ             The timezone to use when displaying dates.  See environ(7) for
+            more information.
 
 EXIT STATUS
      The tar utility exits 0 on success, and >0 if an error occurs.
@@ -675,7 +701,7 @@ EXAMPLES
      include directory change instructions of the form -Cfoo/baz and archive
      inclusions of the form @archive-file.  For example, the command line
           tar -c -f new.tar foo1 @old.tgz -C/tmp foo2
-     will create a new archive new.tar.  tar will read the file foo1 from the
+     will create a new archive new.tar.         tar will read the file foo1 from the
      current directory and add it to the output archive.  It will then read
      each entry from old.tgz and add those entries to the output archive.  Fi‐
      nally, it will switch to the /tmp directory and add foo2 to the output
@@ -712,7 +738,7 @@ COMPATIBILITY
      separate words.  The order of the arguments must match the order of the
      corresponding characters in the bundled command word.  For example,
           tar tbf 32 file.tar
-     specifies three flags t, b, and f.  The b and f flags both require argu‐
+     specifies three flags t, b, and f.         The b and f flags both require argu‐
      ments, so there must be two additional items on the command line. The 32
      is the argument to the b flag, and file.tar is the argument to the f
      flag.
@@ -746,18 +772,18 @@ SECURITY
             in their pathname.
 
      •            Archive entries can exploit symbolic links to restore files to
-            other directories.  An archive can restore a symbolic link to an‐
+            other directories.  An archive can restore a symbolic link to an‐
             other directory, then use that link to restore a file into that
-            directory.  To guard against this, tar checks each extracted path
+            directory.  To guard against this, tar checks each extracted path
             for symlinks.  If the final path element is a symlink, it will be
             removed and replaced with the archive entry.  If -U is specified,
             any intermediate symlink will also be unconditionally removed.
             If neither -U nor -P is specified, tar will refuse to extract the
             entry.
      To protect yourself, you should be wary of any archives that come from
-     untrusted sources.  You should examine the contents of an archive with
+     untrusted sources.         You should examine the contents of an archive with
           tar -tf filename
-     before extraction.  You should use the -k option to ensure that tar will
+     before extraction.         You should use the -k option to ensure that tar will
      not overwrite any existing files or the -U option to remove any pre-ex‐
      isting files.  You should generally not extract archives while running
      with super-user privileges.  Note that the -P option to tar disables the
@@ -837,4 +863,4 @@ BUGS
      is a consequence of the incompatible ways that different archive formats
      store hardlink information.)
 
-BSD                           January 31, 2020                            BSD
+BSD                           December 1, 2022                            BSD
index d9c9cfd..bf4d677 100644 (file)
@@ -1,4 +1,4 @@
-CPIO(5)                    BSD File Formats Manual                    CPIO(5)
+CPIO(5)                            BSD File Formats Manual                    CPIO(5)
 
 NAME
      cpio — format of cpio archive files
@@ -11,7 +11,7 @@ DESCRIPTION
    General Format
      Each file system object in a cpio archive comprises a header record with
      basic numeric metadata followed by the full pathname of the entry and the
-     file data.  The header record stores a series of integer values that gen‐
+     file data.         The header record stores a series of integer values that gen‐
      erally follow the fields in struct stat.  (See stat(2) for details.)  The
      variants differ primarily in how they store those integers (binary, oc‐
      tal, or hexadecimal).  The header is followed by the pathname of the en‐
@@ -34,9 +34,9 @@ DESCRIPTION
                   short   h_gid;
                   short   h_nlink;
                   short   h_majmin;
-                  long    h_mtime;
+                  long    h_mtime;
                   short   h_namesize;
-                  long    h_filesize;
+                  long    h_filesize;
           };
 
      The short fields here are 16-bit integer values, while the long fields
@@ -107,7 +107,7 @@ DESCRIPTION
             only used an unsigned 24 bit integer for the file size inter‐
             nally.
 
-     The pathname immediately follows the fixed header.  If h_namesize is odd,
+     The pathname immediately follows the fixed header.         If h_namesize is odd,
      an additional NUL byte is added after the pathname.  The file data is
      then appended, again with an additional NUL appended if needed to get the
      next header at an even offset.
@@ -125,7 +125,7 @@ DESCRIPTION
      start of the header.  The 32 bit integers are still always stored with
      the most significant word first, though, so each of those two, in the
      struct shown above, was stored as an array of two 16 bit integers, in the
-     traditional order.  Those 16 bit integers, like all the others in the
+     traditional order.         Those 16 bit integers, like all the others in the
      struct, were accessed using a macro that byte swapped them if necessary.
 
      Next, 7th Edition had more file types to store, and the IALLOC and ILARG
@@ -169,22 +169,22 @@ DESCRIPTION
      6-character or 11-character octal values.
 
           struct cpio_odc_header {
-                  char    c_magic[6];
-                  char    c_dev[6];
-                  char    c_ino[6];
-                  char    c_mode[6];
-                  char    c_uid[6];
-                  char    c_gid[6];
-                  char    c_nlink[6];
-                  char    c_rdev[6];
-                  char    c_mtime[11];
-                  char    c_namesize[6];
-                  char    c_filesize[11];
+                  char    c_magic[6];
+                  char    c_dev[6];
+                  char    c_ino[6];
+                  char    c_mode[6];
+                  char    c_uid[6];
+                  char    c_gid[6];
+                  char    c_nlink[6];
+                  char    c_rdev[6];
+                  char    c_mtime[11];
+                  char    c_namesize[6];
+                  char    c_filesize[11];
           };
 
      The fields are identical to those in the new binary format.  The name and
-     file body follow the fixed header.  Unlike the binary formats, there is
-     no additional padding after the pathname or file contents.  If the files
+     file body follow the fixed header.         Unlike the binary formats, there is
+     no additional padding after the pathname or file contents.         If the files
      being archived are themselves entirely ASCII, then the resulting archive
      will be entirely ASCII, except for the NUL byte that terminates the name
      field.
@@ -195,20 +195,20 @@ DESCRIPTION
      bers.
 
           struct cpio_newc_header {
-                  char    c_magic[6];
-                  char    c_ino[8];
-                  char    c_mode[8];
-                  char    c_uid[8];
-                  char    c_gid[8];
-                  char    c_nlink[8];
-                  char    c_mtime[8];
-                  char    c_filesize[8];
-                  char    c_devmajor[8];
-                  char    c_devminor[8];
-                  char    c_rdevmajor[8];
-                  char    c_rdevminor[8];
-                  char    c_namesize[8];
-                  char    c_check[8];
+                  char    c_magic[6];
+                  char    c_ino[8];
+                  char    c_mode[8];
+                  char    c_uid[8];
+                  char    c_gid[8];
+                  char    c_nlink[8];
+                  char    c_mtime[8];
+                  char    c_filesize[8];
+                  char    c_devmajor[8];
+                  char    c_devminor[8];
+                  char    c_rdevmajor[8];
+                  char    c_rdevminor[8];
+                  char    c_namesize[8];
+                  char    c_check[8];
           };
 
      Except as specified below, the fields here match those specified for the
@@ -252,27 +252,27 @@ SEE ALSO
 STANDARDS
      The cpio utility is no longer a part of POSIX or the Single Unix Stan‐
      dard.  It last appeared in Version 2 of the Single UNIX Specification
-     (“SUSv2”).  It has been supplanted in subsequent standards by pax(1).
+     (“SUSv2”).     It has been supplanted in subsequent standards by pax(1).
      The portable ASCII format is currently part of the specification for the
      pax(1) utility.
 
 HISTORY
      The original cpio utility was written by Dick Haight while working in
-     AT&T's Unix Support Group.  It appeared in 1977 as part of PWB/UNIX 1.0,
-     the “Programmer's Work Bench” derived from AT&T UNIX 6th Edition UNIX
-     that was used internally at AT&T. Both the new binary and old character
-     formats were in use by 1980, according to the System III source released
-     by SCO under their “Ancient Unix” license.  The character format was
-     adopted as part of IEEE Std 1003.1-1988 (“POSIX.1”).  XXX when did "newc"
-     appear?  Who invented it? When did HP come out with their variant?  When
-     did Sun introduce ACLs and extended attributes? XXX
+     AT&T's Unix Support Group.         It appeared in 1977 as part of PWB/UNIX 1.0,
+     the “Programmer's Work Bench” derived from Version 6 AT&T UNIX that was
+     used internally at AT&T.  Both the new binary and old character formats
+     were in use by 1980, according to the System III source released by SCO
+     under their “Ancient Unix” license.  The character format was adopted as
+     part of IEEE Std 1003.1-1988 (“POSIX.1”).     XXX when did "newc" appear?
+     Who invented it?  When did HP come out with their variant?         When did Sun
+     introduce ACLs and extended attributes? XXX
 
 BUGS
      The “CRC” format is mis-named, as it uses a simple checksum and not a
      cyclic redundancy check.
 
      The binary formats are limited to 16 bits for user id, group id, device,
-     and inode numbers.  They are limited to 16 megabyte and 2 gigabyte file
+     and inode numbers.         They are limited to 16 megabyte and 2 gigabyte file
      sizes for the older and newer variants, respectively.
 
      The old ASCII format is limited to 18 bits for the user id, group id, de‐
index 92fb8d5..36f136b 100644 (file)
@@ -45,13 +45,13 @@ DESCRIPTION
             interchange format archives.  Pax interchange format archives are
             an extension of the older ustar format that adds a separate entry
             with additional attributes stored as key/value pairs immediately
-            before each regular entry.  The presence of these additional en‐
+            before each regular entry.  The presence of these additional en‐
             tries is the only difference between pax interchange format and
             the older ustar format.  The extended attributes are of unlimited
             length and are stored as UTF-8 Unicode strings.  Keywords defined
             in the standard are in all lowercase; vendors are allowed to de‐
             fine custom keys by preceding them with the vendor name in all
-            uppercase.  When writing pax archives, libarchive uses many of
+            uppercase.  When writing pax archives, libarchive uses many of
             the SCHILY keys defined by Joerg Schilling's “star” archiver and
             a few LIBARCHIVE keys.  The libarchive library can read most of
             the SCHILY keys and most of the GNU keys introduced by GNU tar.
@@ -80,7 +80,7 @@ DESCRIPTION
 
      ustar   The libarchive library can both read and write this format.  This
             format has the following limitations:
-            •         Device major and minor numbers are limited to 21 bits.  Nodes
+            •         Device major and minor numbers are limited to 21 bits.  Nodes
                 with larger numbers will not be added to the archive.
             •         Path names in the archive are limited to 255 bytes.  (Shorter
                 if there is no / character in exactly the right place.)
@@ -94,7 +94,7 @@ DESCRIPTION
             tions.  The ustar format is old and widely supported.  It is rec‐
             ommended when compatibility is the primary concern.
 
-     v7      The libarchive library can read and write the legacy v7 tar for‐
+     v7             The libarchive library can read and write the legacy v7 tar for‐
             mat.  This format has the following limitations:
             •         Only regular files, directories, and symbolic links can be
                 archived.  Block and character device nodes, FIFOs, and sock‐
@@ -159,7 +159,7 @@ DESCRIPTION
             archive format” and sometimes unofficially referred to as the
             “old character format”.  This format stores the header contents
             as octal values in ASCII.  It is standard, portable, and immune
-            from byte-order confusion.  File sizes and mtime are limited to
+            from byte-order confusion.  File sizes and mtime are limited to
             33 bits (8GB file size), other fields are limited to 18 bits.
 
      SVR4/newc
@@ -175,7 +175,7 @@ DESCRIPTION
      of AT&T in 1981.  This makes cpio older than tar, although cpio was not
      included in Version 7 AT&T Unix.  As a result, the tar command became
      much better known in universities and research groups that used Version
-     7.  The combination of the find and cpio utilities provided very precise
+     7.         The combination of the find and cpio utilities provided very precise
      control over file selection.  Unfortunately, the format has many limita‐
      tions that make it unsuitable for widespread use. Only the POSIX format
      permits files over 4GB, and its 18-bit limit for most other fields makes
@@ -199,7 +199,7 @@ DESCRIPTION
      shardump
             This format is similar to shar but encodes files using
             uuencode(1) so that the result will be a plain text file regard‐
-            less of the file contents.  It also includes additional shell
+            less of the file contents.  It also includes additional shell
             commands that attempt to reproduce as many file attributes as
             possible, including owner, mode, and flags.  The additional com‐
             mands used to restore file attributes make shardump archives less
@@ -220,7 +220,7 @@ DESCRIPTION
      Libarchive reads ISO9660 images using a streaming strategy.  This allows
      it to read compressed images directly (decompressing on the fly) and al‐
      lows it to read images directly from network sockets, pipes, and other
-     non-seekable data sources.  This strategy works well for optimized
+     non-seekable data sources.         This strategy works well for optimized
      ISO9660 images created by many popular programs.  Such programs collect
      all directory information at the beginning of the ISO9660 image so it can
      be read from a physical disk with a minimum of seeking.  However, not all
@@ -247,9 +247,9 @@ DESCRIPTION
 
      The streaming reader processes Zip archives as they are read.  It can
      read archives of arbitrary size from tape or network sockets, and can de‐
-     code Zip archives that have been separately compressed or encoded.  How‐
+     code Zip archives that have been separately compressed or encoded.         How‐
      ever, self-extracting Zip archives and archives with certain types of
-     modifications cannot be correctly handled.  Such archives require that
+     modifications cannot be correctly handled.         Such archives require that
      the reader first process the Central Directory, which is ordinarily lo‐
      cated at the end of a Zip archive and is thus inaccessible to the stream‐
      ing reader.  If the program using libarchive has enabled seek support,
@@ -272,7 +272,7 @@ DESCRIPTION
      primarily in their handling of filenames longer than 15 characters: the
      GNU/SVR4 variant writes a filename table at the beginning of the archive;
      the BSD format stores each long filename in an extension area adjacent to
-     the entry.  Libarchive can read both extensions, including archives that
+     the entry.         Libarchive can read both extensions, including archives that
      may include both types of long filenames. Programs using libarchive can
      write GNU/SVR4 format if they provide an entry called // containing a
      filename table to be written into the archive before any of the entries.
@@ -289,7 +289,7 @@ DESCRIPTION
      many of the keywords cannot currently be stored in an archive_entry ob‐
      ject.  When writing, libarchive supports use of the
      archive_write_set_options(3) interface to specify which keywords should
-     be included in the output.  If libarchive was compiled with access to
+     be included in the output.         If libarchive was compiled with access to
      suitable cryptographic libraries (such as the OpenSSL libraries), it can
      compute hash entries such as sha512 or md5 from file data being written
      to the mtree writer.
index b570d04..9cf869e 100644 (file)
@@ -20,31 +20,35 @@ OVERVIEW
      •        the POSIX “pax interchange” format,
      •        GNU-format tar archives,
      •        most common cpio archive formats,
-     •        ISO9660 CD images (including RockRidge and Joliet extensions),
-     •        Zip archives,
+     •        7-Zip archives,
      •        ar archives (including GNU/SysV and BSD extensions),
      •        Microsoft CAB archives,
+     •        ISO9660 CD images (including RockRidge and Joliet extensions),
      •        LHA archives,
      •        mtree file tree descriptions,
-     •        RAR archives,
-     •        XAR archives.
-     The library automatically detects archives compressed with gzip(1),
-     bzip2(1), xz(1), lzip(1), or compress(1) and decompresses them transpar‐
-     ently.  It can similarly detect and decode archives processed with
-     uuencode(1) or which have an rpm(1) header.
+     •        RAR and most RAR5 archives,
+     •        WARC archives,
+     •        XAR archives,
+     •        Zip archives.
+     The library automatically detects archives compressed with compress(1),
+     bzip2(1), grzip(1), gzip(1), lrzip(1), lz4(1), lzip(1), lzop(1), xz(1),
+     or zstd(1) and decompresses them transparently. Decompression of some
+     formats requires external decompressor utilities. It can similarly de‐
+     tect and decode archives processed with uuencode(1) or which have an
+     rpm(1) header.
 
      When writing an archive, you can specify the compression to be used and
-     the format to use.  The library can write
+     the format to use.         The library can write
      •        POSIX-standard “ustar” archives,
      •        POSIX “pax interchange format” archives,
      •        cpio archives,
-     •        Zip archive,
-     •        two different variants of shar archives,
-     •        ISO9660 CD images,
      •        7-Zip archives,
      •        ar archives,
+     •        two different variants of shar archives,
+     •        ISO9660 CD images,
      •        mtree file tree descriptions,
-     •        XAR archives.
+     •        XAR archives,
+     •        Zip archive.
      Pax interchange format is an extension of the tar archive format that
      eliminates essentially all of the limitations of historic tar formats in
      a standard fashion that is supported by POSIX-compliant pax(1) implemen‐
@@ -69,7 +73,7 @@ WRITING AN ARCHIVE
 
 WRITING ENTRIES TO DISK
      The archive_write_disk(3) API allows you to write archive_entry(3) ob‐
-     jects to disk using the same API used by archive_write(3).  The
+     jects to disk using the same API used by archive_write(3).         The
      archive_write_disk(3) API is used internally by archive_read_extract();
      using it directly can provide greater control over how entries get writ‐
      ten to disk.  This API also makes it possible to share code between ar‐
@@ -97,7 +101,7 @@ DESCRIPTION
      Users familiar with historic formats should be aware that the newer vari‐
      ants have eliminated most restrictions on the length of textual fields.
      Clients should not assume that filenames, link names, user names, or
-     group names are limited in length.  In particular, pax interchange format
+     group names are limited in length.         In particular, pax interchange format
      can easily accommodate pathnames in arbitrary character sets that exceed
      PATH_MAX.
 
@@ -115,7 +119,7 @@ RETURN VALUES
      cated and initialized struct archive object.
 
      archive_read_data() and archive_write_data() return a count of the number
-     of bytes actually read or written.  A value of zero indicates the end of
+     of bytes actually read or written.         A value of zero indicates the end of
      the data for this entry.  A negative value indicates an error, in which
      case the archive_errno() and archive_error_string() functions can be used
      to obtain more information.
index d649ab8..38ba442 100644 (file)
@@ -1,4 +1,4 @@
-LIBARCHIVE_INTERNALS(3)  BSD Library Functions Manual  LIBARCHIVE_INTERNALS(3)
+LIBARCHIVE_INTERNALS(3)         BSD Library Functions Manual  LIBARCHIVE_INTERNALS(3)
 
 NAME
      libarchive_internals — description of libarchive internal interfaces
@@ -32,7 +32,7 @@ READ ARCHITECTURE
      archive object to read entries and bodies from an archive stream. Inter‐
      nally, the archive object is cast to an archive_read object, which holds
      all read-specific data.  The API has four layers: The lowest layer is the
-     I/O layer.  This layer can be overridden by clients, but most clients use
+     I/O layer.         This layer can be overridden by clients, but most clients use
      the packaged I/O callbacks provided, for example, by
      archive_read_open_memory(3), and archive_read_open_fd(3). The compres‐
      sion layer calls the I/O layer to read bytes and decompresses them for
@@ -55,11 +55,11 @@ READ ARCHITECTURE
 
      The client read callback is expected to provide a block of data on each
      call.  A zero-length return does indicate end of file, but otherwise
-     blocks may be as small as one byte or as large as the entire file.  In
+     blocks may be as small as one byte or as large as the entire file.         In
      particular, blocks may be of different sizes.
 
      The client skip callback returns the number of bytes actually skipped,
-     which may be much smaller than the skip requested.  The only requirement
+     which may be much smaller than the skip requested.         The only requirement
      is that the skip not be larger.  In particular, clients are allowed to
      return zero for any skip that they don't want to handle.  The skip call‐
      back must never be invoked with a negative value.
@@ -96,7 +96,7 @@ READ ARCHITECTURE
             pression handler invokes the internal
             __archive_read_register_compression() function to provide bid and
             initialization functions.  This function returns NULL on error or
-            else a pointer to a struct decompressor_t.  This structure con‐
+            else a pointer to a struct decompressor_t.  This structure con‐
             tains a void * config slot that can be used for storing any cus‐
             tomization information.
      Bid     The bid function is invoked with a pointer and size of a block of
@@ -148,7 +148,7 @@ READ ARCHITECTURE
             The header read is usually the most complex part of any format.
             There are a few strategies worth mentioning: For formats such as
             tar or cpio, reading and parsing the header is straightforward
-            since headers alternate with data.  For formats that store all
+            since headers alternate with data.  For formats that store all
             header data at the beginning of the file, the first header read
             request may have to read all headers into memory and store that
             data, sorted by the location of the file data.  Subsequent header
@@ -162,7 +162,7 @@ READ ARCHITECTURE
             ber that the decompressor will return as much data as it has.
             Generally, you will want to request one byte, examine the return
             value to see how much data is available, and possibly trim that
-            to the amount you can use.  You should invoke consume for each
+            to the amount you can use.  You should invoke consume for each
             block just before you return it.
      Skip All Data
             The skip data call should skip over all file data and trailing
@@ -202,7 +202,7 @@ WRITE_DISK ARCHITECTURE
 GENERAL SERVICES
      The archive_read, archive_write, and archive_write_disk objects all con‐
      tain an initial archive object which provides common support for a set of
-     standard services.  (Recall that ANSI/ISO C90 guarantees that you can
+     standard services.         (Recall that ANSI/ISO C90 guarantees that you can
      cast freely between a pointer to a structure and a pointer to the first
      element of that structure.)  The archive object has a magic value that
      indicates which API this object is associated with, slots for storing er‐
@@ -212,7 +212,7 @@ MISCELLANEOUS NOTES
      Connecting existing archiving libraries into libarchive is generally
      quite difficult.  In particular, many existing libraries strongly assume
      that you are reading from a file; they seek forwards and backwards as
-     necessary to locate various pieces of information.  In contrast,
+     necessary to locate various pieces of information.         In contrast,
      libarchive never seeks backwards in its input, which sometimes requires
      very different approaches.
 
@@ -244,4 +244,4 @@ HISTORY
 AUTHORS
      The libarchive library was written by Tim Kientzle <kientzle@acm.org>.
 
-BSD                           January 26, 2011                            BSD
+BSD                           January 26, 2011                            BSD
index f9e309f..c916e30 100644 (file)
@@ -33,7 +33,7 @@ DESCRIPTION
                 rectory.
 
      dot-dot    As a special case, a relative entry with the filename ..
-                changes the current directory to the parent directory.  Op‐
+                changes the current directory to the parent directory.  Op‐
                 tions on dot-dot entries are always ignored.
 
      Full       If the first whitespace-delimited word has a / character af‐
@@ -51,7 +51,7 @@ DESCRIPTION
 
      /set       This command defines default values for one or more keywords.
                 It is followed on the same line by one or more whitespace-
-                separated keyword definitions.  These definitions apply to
+                separated keyword definitions.  These definitions apply to
                 all following files that do not specify a value for that key‐
                 word.
 
@@ -92,7 +92,7 @@ DESCRIPTION
                 file.
 
      flags      The file flags as a symbolic name.  See chflags(1) for infor‐
-                mation on these names.  If no flags are to be set the string
+                mation on these names.  If no flags are to be set the string
                 “none” may be used to override the current default.
 
      gid        The file group as a numeric value.
@@ -121,7 +121,7 @@ DESCRIPTION
                 not in the file hierarchy.
 
      resdevice  The “resident” device number of the file, e.g. the ID of the
-                device that contains the file.  Its format is the same as the
+                device that contains the file.  Its format is the same as the
                 one for device.
 
      ripemd160digest
@@ -134,7 +134,7 @@ DESCRIPTION
 
      sha1       The FIPS 160-1 (“SHA-1”) message digest of the file.
 
-     sha1digest  A synonym for sha1.
+     sha1digest         A synonym for sha1.
 
      sha256     The FIPS 180-2 (“SHA-256”) message digest of the file.
 
@@ -163,7 +163,7 @@ DESCRIPTION
                 fifo        fifo
                 file        regular file
                 link        symbolic link
-                socket      socket
+                socket      socket
 
      uid        The file owner as a numeric value.
 
@@ -173,7 +173,7 @@ SEE ALSO
      cksum(1), find(1), mtree(8)
 
 HISTORY
-     The mtree utility appeared in 4.3BSD-Reno.  The MD5 digest capability was
+     The mtree utility appeared in 4.3BSD-Reno.         The MD5 digest capability was
      added in FreeBSD 2.1, in response to the widespread use of programs which
      can spoof cksum(1).  The SHA-1 and RIPEMD160 digests were added in
      FreeBSD 4.0, as new attacks have demonstrated weaknesses in MD5.  The
index 72aaee1..0069724 100644 (file)
@@ -62,9 +62,9 @@ DESCRIPTION
             User id and group id of owner, as octal numbers in ASCII.
 
      size    Size of file, as octal number in ASCII.  For regular files only,
-            this indicates the amount of data that follows the header.  In
+            this indicates the amount of data that follows the header.  In
             particular, this field was ignored by early tar implementations
-            when extracting hardlinks.  Modern writers should always store a
+            when extracting hardlinks.  Modern writers should always store a
             zero length for hardlink entries.
 
      mtime   Modification time of file, as an octal number in ASCII.  This in‐
@@ -77,7 +77,7 @@ DESCRIPTION
             the checksum, set the checksum field to all spaces, then sum all
             bytes in the header using unsigned arithmetic.  This field should
             be stored as six octal digits followed by a null and a space
-            character.  Note that many early implementations of tar used
+            character.  Note that many early implementations of tar used
             signed arithmetic for the checksum field, which can cause inter‐
             operability problems when transferring archives between systems.
             Modern robust readers compute the checksum both ways and accept
@@ -119,7 +119,7 @@ DESCRIPTION
      IEEE Std 1003.1-1988 (“POSIX.1”) defined a standard tar file format to be
      read and written by compliant implementations of tar(1).  This format is
      often called the “ustar” format, after the magic value used in the
-     header.  (The name is an acronym for “Unix Standard TAR”.)  It extends
+     header.  (The name is an acronym for “Unix Standard TAR”.)     It extends
      the historic format with new fields:
 
           struct header_posix_ustar {
@@ -189,7 +189,7 @@ DESCRIPTION
      name, prefix
             If the pathname is too long to fit in the 100 bytes provided by
             the standard format, it can be split at any / character with the
-            first portion going into the prefix field.  If the prefix field
+            first portion going into the prefix field.  If the prefix field
             is not empty, the reader will prepend the prefix value and a /
             character to the regular name field to obtain the full pathname.
             The standard does not require a trailing / character on directory
@@ -222,7 +222,7 @@ DESCRIPTION
      allows file sizes up to 64 GB.
 
      Another extension, utilized by GNU tar, star, and other newer tar imple‐
-     mentations, permits binary numbers in the standard numeric fields.  This
+     mentations, permits binary numbers in the standard numeric fields.         This
      is flagged by setting the high bit of the first byte.  The remainder of
      the field is treated as a signed twos-complement value.  This permits
      95-bit values for the length and time fields and 63-bit values for the
@@ -266,7 +266,7 @@ DESCRIPTION
      mal, not octal.  A description of some common keys follows:
 
      atime, ctime, mtime
-            File access, inode change, and modification times.  These fields
+            File access, inode change, and modification times.  These fields
             can be negative or include a decimal point and a fractional
             value.
 
@@ -279,7 +279,7 @@ DESCRIPTION
             character ASCII string “BINARY”, then all textual values are as‐
             sumed to be in a platform-dependent multi-byte encoding.  Note
             that there are only two valid values for this key: “BINARY” or
-            “ISO-IR 10646 2000 UTF-8”.  No other values are permitted by the
+            “ISO-IR 10646 2000 UTF-8”.      No other values are permitted by the
             standard, and the latter value should generally not be used as it
             is the default when this key is not specified.  In particular,
             this flag should not be used as a general mechanism to allow
@@ -326,7 +326,7 @@ DESCRIPTION
             The file flags.
 
      SCHILY.realsize
-            The full size of the file on disk.  XXX explain? XXX
+            The full size of the file on disk.  XXX explain? XXX
 
      SCHILY.dev, SCHILY.ino, SCHILY.nlinks
             The device number, inode number, and link count for the entry.
@@ -526,8 +526,8 @@ DESCRIPTION
                                   char offset[12];
                                   char numbytes[12];
                           } sparse[21];
-                          char    isextended[1];
-                          char    padding[7];
+                          char    isextended[1];
+                          char    padding[7];
                   };
 
      realsize
@@ -540,9 +540,9 @@ DESCRIPTION
 
    GNU tar pax archives
      GNU tar 1.14 (XXX check this XXX) and later will write pax interchange
-     format archives when you specify the --posix flag.  This format follows
+     format archives when you specify the --posix flag.         This format follows
      the pax interchange format closely, using some SCHILY tags and introduc‐
-     ing new keywords to store sparse file information.  There have been three
+     ing new keywords to store sparse file information.         There have been three
      iterations of the sparse file support, referred to as “0.0”, “0.1”, and
      “1.0”.
 
@@ -552,7 +552,7 @@ DESCRIPTION
             to indicate the number of blocks in the file, a pair of
             GNU.sparse.offset and GNU.sparse.numbytes to indicate the offset
             and size of each block, and a single GNU.sparse.size to indicate
-            the full size of the file.  This is not the same as the size in
+            the full size of the file.  This is not the same as the size in
             the tar header because the latter value does not include the size
             of any holes.  This format required that the order of attributes
             be preserved and relied on readers accepting multiple appearances
@@ -623,7 +623,7 @@ DESCRIPTION
 
    Summary of tar type codes
      The following list is a condensed summary of the type codes used in tar
-     header records generated by different tar implementations.  More details
+     header records generated by different tar implementations.         More details
      about specific implementations can be found above:
      NUL  Early tar programs stored a zero byte for regular files.
      0   POSIX standard type code for a regular file.
@@ -656,7 +656,7 @@ STANDARDS
      The tar utility is no longer a part of POSIX or the Single Unix Standard.
      It last appeared in Version 2 of the Single UNIX Specification (“SUSv2”).
      It has been supplanted in subsequent standards by pax(1). The ustar for‐
-     mat is currently part of the specification for the pax(1) utility.  The
+     mat is currently part of the specification for the pax(1) utility.         The
      pax interchange file format is new with IEEE Std 1003.1-2001 (“POSIX.1”).
 
 HISTORY
index 7fb056a..eec92b2 100644 (file)
@@ -1,6 +1,8 @@
 ARCHIVE_READ_DISK(3) manual page 
 == NAME == 
 '''archive_read_disk_new''', 
+'''archive_read_disk_open''', 
+'''archive_read_disk_open_w''', 
 '''archive_read_disk_set_behavior''', 
 '''archive_read_disk_set_symlink_logical''', 
 '''archive_read_disk_set_symlink_physical''', 
@@ -10,7 +12,14 @@ ARCHIVE_READ_DISK(3) manual page
 '''archive_read_disk_uname''', 
 '''archive_read_disk_set_uname_lookup''', 
 '''archive_read_disk_set_gname_lookup''', 
-'''archive_read_disk_set_standard_lookup''' 
+'''archive_read_disk_set_standard_lookup''', 
+'''archive_read_disk_descend''', 
+'''archive_read_disk_can_descend''', 
+'''archive_read_disk_current_filesystem''', 
+'''archive_read_disk_current_filesystem_is_synthetic''', 
+'''archive_read_disk_current_filesystem_is_remote''', 
+'''archive_read_disk_set_matching''', 
+'''archive_read_disk_set_metadata_filter_callback''', 
 - functions for reading objects from disk 
 == LIBRARY == 
 Streaming Archive Library (libarchive, -larchive) 
@@ -23,6 +32,14 @@ Streaming Archive Library (libarchive, -larchive)
 <br> 
 ''int'' 
 <br> 
+'''archive_read_disk_open'''(''struct archive *'', ''const char *''); 
+<br> 
+''int'' 
+<br> 
+'''archive_read_disk_open_w'''(''struct archive *'', ''const wchar_t *'', ''''); 
+<br> 
+''int'' 
+<br> 
 '''archive_read_disk_set_behavior'''(''struct archive *'', ''int''); 
 <br> 
 ''int'' 
@@ -60,6 +77,34 @@ Streaming Archive Library (libarchive, -larchive)
 ''int'' 
 <br> 
 '''archive_read_disk_entry_from_file'''(''struct archive *'', ''struct archive_entry *'', ''int fd'', ''const struct stat *''); 
+<br> 
+''int'' 
+<br> 
+'''archive_read_disk_descend'''(''struct archive *''); 
+<br> 
+''int'' 
+<br> 
+'''archive_read_disk_can_descend'''(''struct archive *''); 
+<br> 
+''int'' 
+<br> 
+'''archive_read_disk_current_filesystem'''(''struct archive *''); 
+<br> 
+''int'' 
+<br> 
+'''archive_read_disk_current_filesystem_is_synthetic'''(''struct archive *''); 
+<br> 
+''int'' 
+<br> 
+'''archive_read_disk_current_filesystem_is_remote'''(''struct archive *''); 
+<br> 
+''int'' 
+<br> 
+'''archive_read_disk_set_matching'''(''struct archive *'', ''struct archive *'', ''void (*excluded_func)(struct archive *, void *, struct archive entry *)'', ''void *''); 
+<br> 
+''int'' 
+<br> 
+'''archive_read_disk_set_metadata_filter_callback'''(''struct archive *'', ''int (*metadata_filter_func)(struct archive *, void*, struct archive_entry *)'', ''void *''); 
 == DESCRIPTION == 
 These functions provide an API for reading information about 
 objects on disk. 
@@ -71,6 +116,14 @@ objects.
 Allocates and initializes a 
 '''struct archive''' 
 object suitable for reading object information from disk. 
+</dd><dt>'''archive_read_disk_open'''()</dt><dd> 
+Opens the file or directory from the given path and prepares the 
+'''struct archive''' 
+to read it from disk. 
+</dd><dt>'''archive_read_disk_open_w'''()</dt><dd> 
+Opens the file or directory from the given path as a wide character string and prepares the 
+'''struct archive''' 
+to read it from disk. 
 </dd><dt>'''archive_read_disk_set_behavior'''()</dt><dd> 
 Configures various behavior options when reading entries from disk. 
 The flags field consists of a bitwise OR of one or more of the 
@@ -116,6 +169,9 @@ for more information on extended file attributes.
 </dd><dt>'''ARCHIVE_READDISK_RESTORE_ATIME'''</dt><dd> 
 Restore access time of traversed files. 
 By default, access time of traversed files is not restored. 
+</dd><dt>'''ARCHIVE_READDISK_NO_SPARSE'''</dt><dd> 
+Do not read sparse file information. 
+By default, sparse file information is read from disk. 
 </dd></dl> 
 </dd><dt> 
 '''archive_read_disk_set_symlink_logical'''(), 
@@ -200,6 +256,37 @@ using the currently-registered lookup functions above.
 This affects the file ownership fields and ACL values in the 
 '''struct archive_entry''' 
 object. 
+</dd><dt>'''archive_read_disk_descend'''()</dt><dd> 
+If the current entry can be descended, this function will mark the directory as the next entry for  
+[[ManPageArchiveReadHeader3]] 
+to visit. 
+</dd><dt>'''archive_read_disk_can_descend'''()</dt><dd> 
+Returns 1 if the current entry is an unvisited directory and 0 otherwise. 
+</dd><dt>'''archive_read_disk_current_filesystem'''()</dt><dd> 
+Returns the index of the most recent filesystem entry that has been visited through archive_read_disk 
+</dd><dt>'''archive_read_disk_current_filesystem_is_synthetic'''()</dt><dd> 
+Returns 1 if the current filesystem is a virtual filesystem. Returns 0 if the current filesystem is not a virtual filesystem. Returns -1 if it is unknown. 
+</dd><dt>'''archive_read_disk_current_filesystem_is_remote'''()</dt><dd> 
+Returns 1 if the current filesystem is a remote filesystem. Returns 0 if the current filesystem is not a remote filesystem. Returns -1 if it is unknown. 
+</dd><dt>'''archive_read_disk_set_matching'''()</dt><dd> 
+Allows the caller to set 
+'''struct archive''' 
+*_ma to compare each entry during 
+[[ManPageArchiveReadHeader3]] 
+calls. If matched based on calls to 
+'''archive_match_path_excluded ,''' 
+'''archive_match_time_excluded ,''' 
+or 
+'''archive_match_owner_excluded ,''' 
+then the callback function specified by the _excluded_func parameter will execute. This function will recieve data provided to the fourth parameter, void *_client_data. 
+</dd><dt>'''archive_read_disk_set_metadata_filter_callback'''()</dt><dd> 
+Allows the caller to set a callback function during calls to 
+[[ManPageArchiveReadHeader3]] 
+to filter out metadata for each entry. The callback function recieves the 
+'''struct archive''' 
+object, void* custom filter data, and the  
+'''struct archive_entry .''' 
+If the callback function returns an error, ARCHIVE_RETRY will be returned and the entry will not be further processed. 
 </dd></dl> 
 More information about the 
 ''struct'' archive 
index 49be450..4431e19 100644 (file)
@@ -213,6 +213,27 @@ have been concatenated together.
 Without this option, only the contents of 
 the first concatenated archive would be read. 
 </dd></dl> 
+</dd><dt>Format zip</dt><dd> 
+<dl> 
+<dt>'''compat-2x'''</dt><dd> 
+Libarchive 2.x incorrectly encoded Unicode filenames on 
+some platforms. 
+This option mimics the libarchive 2.x filename handling 
+so that such archives can be read correctly. 
+</dd><dt>'''hdrcharset'''</dt><dd> 
+The value is used as a character set name that will be 
+used when translating file names. 
+</dd><dt>'''ignorecrc32'''</dt><dd> 
+Skip the CRC32 check. 
+Mostly used for testing. 
+</dd><dt>'''mac-ext'''</dt><dd> 
+Support Mac OS metadata extension that records data in special 
+files beginning with a period and underscore. 
+Defaults to enabled on Mac OS, disabled on other platforms. 
+Use 
+'''!mac-ext''' 
+to disable. 
+</dd></dl> 
 </dd></dl> 
 == ERRORS == 
 Detailed error codes and textual descriptions are available from the 
index 1fca52c..e208be7 100644 (file)
@@ -137,14 +137,14 @@ caused by archives that (deliberately or otherwise) extract
 files outside of the current directory. 
 The default is not to perform this check. 
 If 
-</dd><dt>'''ARCHIVE_EXTRACT_SPARSE'''</dt><dd> 
-Scan data for blocks of NUL bytes and try to recreate them with holes. 
-This results in sparse files, independent of whether the archive format 
-supports or uses them. 
 '''ARCHIVE_EXTRACT_UNLINK''' 
 is specified together with this option, the library will 
 remove any intermediate symlinks it finds and return an 
 error only if such symlink could not be removed. 
+</dd><dt>'''ARCHIVE_EXTRACT_SPARSE'''</dt><dd> 
+Scan data for blocks of NUL bytes and try to recreate them with holes. 
+This results in sparse files, independent of whether the archive format 
+supports or uses them. 
 </dd><dt>'''ARCHIVE_EXTRACT_TIME'''</dt><dd> 
 The timestamps (mtime, ctime, and atime) should be restored. 
 By default, they are ignored. 
index 31abd29..092683c 100644 (file)
@@ -178,6 +178,7 @@ On failure, the callback should invoke
 '''archive_set_error'''() 
 to register an error code and message and 
 return 
+'''ARCHIVE_FATAL'''. 
 <ul> 
 <li> 
 ''typedef int'' 
index 177fe3d..d67c3d0 100644 (file)
@@ -216,6 +216,15 @@ If supported, the default value is read from
 The value is interpreted as a decimal integer specifying the 
 compression level. Supported values depend on the library version, 
 common values are from 1 to 22. 
+</dd><dt>'''long'''</dt><dd> 
+Enables long distance matching. The value is interpreted as a 
+decimal integer specifying log2 window size in bytes. Values from 
+10 to 30 for 32 bit, or 31 for 64 bit, are supported. 
+</dd><dt>'''threads'''</dt><dd> 
+The value is interpreted as a decimal integer specifying the 
+number of threads for multi-threaded zstd compression. 
+If set to 0, zstd will attempt to detect and use the number 
+of physical CPU cores. 
 </dd></dl> 
 </dd><dt>Format 7zip</dt><dd> 
 <dl> 
index 4736bbb..b946537 100644 (file)
@@ -463,6 +463,11 @@ This is the reverse of
 and the default behavior if 
 '''tar''' 
 is run as non-root in x mode. 
+</dd><dt>--no-read-sparse</dt><dd> 
+(c, r, u modes only) 
+Do not read sparse file information from disk. 
+This is the reverse of 
+--read-sparse. 
 </dd><dt>--no-safe-writes</dt><dd> 
 (x mode only) 
 Do not create temporary files and use 
@@ -626,10 +631,33 @@ a compression dictionary to improve compression ratio.
 </dd><dt>'''zstd:compression-level'''</dt><dd> 
 A decimal integer specifying the zstd compression level. Supported values depend 
 on the library version, common values are from 1 to 22. 
+</dd><dt>'''zstd:threads'''</dt><dd> 
+Specify the number of worker threads to use. 
+Setting threads to a special value 0 makes 
+[[zstd(1)|http://www.freebsd.org/cgi/man.cgi?query=zstd&sektion=1]] 
+use as many threads as there are CPU cores on the system. 
+</dd><dt>'''zstd:frame-per-file'''</dt><dd> 
+Start a new compression frame at the beginning of each file in the 
+archive. 
+</dd><dt>'''zstd:min-frame-size'''=''N''</dt><dd> 
+In combination with 
+'''zstd:frame-per-file''', 
+do not start a new compression frame unless the current frame is at least 
+''N'' 
+bytes. 
+</dd><dt>'''zstd:max-frame-size'''=''N''</dt><dd> 
+Start a new compression frame as soon as the current frame exceeds 
+''N'' 
+bytes. 
 </dd><dt>'''lzop:compression-level'''</dt><dd> 
 A decimal integer from 1 to 9 specifying the lzop compression level. 
 </dd><dt>'''xz:compression-level'''</dt><dd> 
 A decimal integer from 0 to 9 specifying the xz compression level. 
+</dd><dt>'''xz:threads'''</dt><dd> 
+Specify the number of worker threads to use. 
+Setting threads to a special value 0 makes 
+[[xz(1)|http://www.freebsd.org/cgi/man.cgi?query=xz&sektion=1]] 
+use as many threads as there are CPU cores on the system. 
 </dd><dt>'''mtree:'''''keyword''</dt><dd> 
 The mtree writer module allows you to specify which mtree keywords 
 will be included in the output. 
@@ -723,6 +751,12 @@ By default, the archive is always read to the very end, since
 there can be multiple entries with the same name and, by convention, 
 later entries overwrite earlier entries. 
 This option is provided as a performance optimization. 
+</dd><dt>--read-sparse</dt><dd> 
+(c, r, u modes only) 
+Read sparse file information from disk. 
+This is the reverse of 
+--no-read-sparse 
+and the default behavior. 
 </dd><dt>-S</dt><dd> 
 (x mode only) 
 Extract files as sparse files. 
index 4850863..a15d3c5 100644 (file)
@@ -326,7 +326,7 @@ while working in AT&T's Unix Support Group.
 It appeared in 1977 as part of PWB/UNIX 1.0, the 
 "Programmer's Work Bench" 
 derived from 
-At 6th Edition UNIX 
+At v6 
 that was used internally at AT&T. 
 Both the new binary and old character formats were in use 
 by 1980, according to the System III source released 
index 40f0340..fa79427 100644 (file)
@@ -34,30 +34,40 @@ GNU-format tar archives,
 </li><li> 
 most common cpio archive formats, 
 </li><li> 
-ISO9660 CD images (including RockRidge and Joliet extensions), 
-</li><li> 
-Zip archives, 
+7-Zip archives, 
 </li><li> 
 ar archives (including GNU/SysV and BSD extensions), 
 </li><li> 
 Microsoft CAB archives, 
 </li><li> 
+ISO9660 CD images (including RockRidge and Joliet extensions), 
+</li><li> 
 LHA archives, 
 </li><li> 
 mtree file tree descriptions, 
 </li><li> 
-RAR archives, 
+RAR and most RAR5 archives, 
 </li><li> 
-XAR archives. 
+WARC archives, 
+</li><li> 
+XAR archives, 
+</li><li> 
+Zip archives. 
 </li></ul> 
 The library automatically detects archives compressed with 
-[[gzip(1)|http://www.freebsd.org/cgi/man.cgi?query=gzip&sektion=1]], 
+[[compress(1)|http://www.freebsd.org/cgi/man.cgi?query=compress&sektion=1]], 
 [[bzip2(1)|http://www.freebsd.org/cgi/man.cgi?query=bzip2&sektion=1]], 
-[[xz(1)|http://www.freebsd.org/cgi/man.cgi?query=xz&sektion=1]], 
+[[grzip(1)|http://www.freebsd.org/cgi/man.cgi?query=grzip&sektion=1]], 
+[[gzip(1)|http://www.freebsd.org/cgi/man.cgi?query=gzip&sektion=1]], 
+[[lrzip(1)|http://www.freebsd.org/cgi/man.cgi?query=lrzip&sektion=1]], 
+[[lz4(1)|http://www.freebsd.org/cgi/man.cgi?query=lz4&sektion=1]], 
 [[lzip(1)|http://www.freebsd.org/cgi/man.cgi?query=lzip&sektion=1]], 
+[[lzop(1)|http://www.freebsd.org/cgi/man.cgi?query=lzop&sektion=1]], 
+[[xz(1)|http://www.freebsd.org/cgi/man.cgi?query=xz&sektion=1]], 
 or 
-[[compress(1)|http://www.freebsd.org/cgi/man.cgi?query=compress&sektion=1]] 
-and decompresses them transparently. 
+[[zstd(1)|http://www.freebsd.org/cgi/man.cgi?query=zstd&sektion=1]] 
+and decompresses them transparently. Decompression of some formats 
+requires external decompressor utilities. 
 It can similarly detect and decode archives processed with 
 [[uuencode(1)|http://www.freebsd.org/cgi/man.cgi?query=uuencode&sektion=1]] 
 or which have an 
@@ -79,19 +89,19 @@ archives,
 </li><li> 
 cpio archives, 
 </li><li> 
-Zip archive, 
+7-Zip archives, 
+</li><li> 
+ar archives, 
 </li><li> 
 two different variants of shar archives, 
 </li><li> 
 ISO9660 CD images, 
 </li><li> 
-7-Zip archives, 
-</li><li> 
-ar archives, 
-</li><li> 
 mtree file tree descriptions, 
 </li><li> 
-XAR archives. 
+XAR archives, 
+</li><li> 
+Zip archive. 
 </li></ul> 
 Pax interchange format is an extension of the tar archive format that 
 eliminates essentially all of the limitations of historic tar formats 
index e1d76a5..f7fdfb6 100644 (file)
@@ -5,6 +5,10 @@
 #
 ############################################
 
+if (ANDROID)
+  include_directories(${PROJECT_SOURCE_DIR}/contrib/android/include)
+endif()
+
 # Public headers
 SET(include_HEADERS
   archive.h
@@ -78,6 +82,7 @@ SET(libarchive_SOURCES
   archive_read_set_format.c
   archive_read_set_options.c
   archive_read_support_filter_all.c
+  archive_read_support_filter_by_code.c
   archive_read_support_filter_bzip2.c
   archive_read_support_filter_compress.c
   archive_read_support_filter_gzip.c
@@ -238,10 +243,12 @@ ELSEIF(ARCHIVE_ACL_SUNOS)
 ENDIF()
 
 # Libarchive is a shared library
-ADD_LIBRARY(archive SHARED ${libarchive_SOURCES} ${include_HEADERS})
-TARGET_INCLUDE_DIRECTORIES(archive PUBLIC .)
-TARGET_LINK_LIBRARIES(archive ${ADDITIONAL_LIBS})
-SET_TARGET_PROPERTIES(archive PROPERTIES SOVERSION ${SOVERSION})
+IF(BUILD_SHARED_LIBS)
+  ADD_LIBRARY(archive SHARED ${libarchive_SOURCES} ${include_HEADERS})
+  TARGET_INCLUDE_DIRECTORIES(archive PUBLIC .)
+  TARGET_LINK_LIBRARIES(archive ${ADDITIONAL_LIBS})
+  SET_TARGET_PROPERTIES(archive PROPERTIES SOVERSION ${SOVERSION})
+ENDIF(BUILD_SHARED_LIBS)
 
 # archive_static is a static library
 ADD_LIBRARY(archive_static STATIC ${libarchive_SOURCES} ${include_HEADERS})
@@ -249,13 +256,19 @@ TARGET_LINK_LIBRARIES(archive_static ${ADDITIONAL_LIBS})
 SET_TARGET_PROPERTIES(archive_static PROPERTIES COMPILE_DEFINITIONS
   LIBARCHIVE_STATIC)
 # On Posix systems, libarchive.so and libarchive.a can co-exist.
-IF(NOT WIN32 OR CYGWIN)
+IF(NOT WIN32 OR CYGWIN OR NOT BUILD_SHARED_LIBS)
   SET_TARGET_PROPERTIES(archive_static PROPERTIES OUTPUT_NAME archive)
-ENDIF(NOT WIN32 OR CYGWIN)
+ENDIF(NOT WIN32 OR CYGWIN OR NOT BUILD_SHARED_LIBS)
 
 IF(ENABLE_INSTALL)
   # How to install the libraries
-  INSTALL(TARGETS archive archive_static
+  IF(BUILD_SHARED_LIBS)
+    INSTALL(TARGETS archive
+            RUNTIME DESTINATION bin
+            LIBRARY DESTINATION lib
+            ARCHIVE DESTINATION lib)
+  ENDIF(BUILD_SHARED_LIBS)
+  INSTALL(TARGETS archive_static
           RUNTIME DESTINATION bin
           LIBRARY DESTINATION lib
           ARCHIVE DESTINATION lib)
index ca83cbd..a18b81f 100644 (file)
@@ -36,7 +36,7 @@
  * assert that ARCHIVE_VERSION_NUMBER >= 2012108.
  */
 /* Note: Compiler will complain if this does not match archive_entry.h! */
-#define        ARCHIVE_VERSION_NUMBER 3005002
+#define        ARCHIVE_VERSION_NUMBER 3007002
 
 #include <sys/stat.h>
 #include <stddef.h>  /* for wchar_t */
@@ -97,7 +97,7 @@ typedef ssize_t la_ssize_t;
 #endif
 
 /* Large file support for Android */
-#ifdef __ANDROID__
+#if defined(__LIBARCHIVE_BUILD) && defined(__ANDROID__)
 #include "android_lf.h"
 #endif
 
@@ -120,6 +120,8 @@ typedef ssize_t la_ssize_t;
 #   define __LA_DECL   __declspec(dllimport)
 #  endif
 # endif
+#elif defined __LIBARCHIVE_ENABLE_VISIBILITY
+#  define __LA_DECL __attribute__((visibility("default")))
 #else
 /* Static libraries or non-Windows needs no special declaration. */
 # define __LA_DECL
@@ -155,7 +157,7 @@ __LA_DECL int               archive_version_number(void);
 /*
  * Textual name/version of the library, useful for version displays.
  */
-#define        ARCHIVE_VERSION_ONLY_STRING "3.5.2"
+#define        ARCHIVE_VERSION_ONLY_STRING "3.7.2"
 #define        ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
 __LA_DECL const char * archive_version_string(void);
 
@@ -1024,6 +1026,8 @@ __LA_DECL int  archive_read_disk_set_atime_restored(struct archive *);
 #define        ARCHIVE_READDISK_NO_ACL                 (0x0020)
 /* Default: File flags are read from disk. */
 #define        ARCHIVE_READDISK_NO_FFLAGS              (0x0040)
+/* Default: Sparse file information is read from disk. */
+#define        ARCHIVE_READDISK_NO_SPARSE              (0x0080)
 
 __LA_DECL int  archive_read_disk_set_behavior(struct archive *,
                    int flags);
index dd6fe6f..8f6b5e9 100644 (file)
 
 #if defined(_MSC_VER)
 #define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop))
-#else
+#elif defined(__GNUC__)
 #define BLAKE2_PACKED(x) x __attribute__((packed))
+#else
+#define BLAKE2_PACKED(x) _Pragma("pack 1") x _Pragma("pack 0")
 #endif
 
 #if defined(__cplusplus)
index 0f05def..eb8619c 100644 (file)
@@ -154,7 +154,7 @@ static BLAKE2_INLINE uint64_t rotr64( const uint64_t w, const unsigned c )
 /* prevents compiler optimizing out memset() */
 static BLAKE2_INLINE void secure_zero_memory(void *v, size_t n)
 {
-  static void *(*const volatile memset_v)(void *, int, size_t) = &memset;
+  static void *(__LA_LIBC_CC *const volatile memset_v)(void *, int, size_t) = &memset;
   memset_v(v, 0, n);
 }
 
index d92ffd0..93d3281 100644 (file)
@@ -13,6 +13,8 @@
    https://blake2.net.
 */
 
+#include "archive_platform.h"
+
 #include <stdint.h>
 #include <string.h>
 #include <stdio.h>
index aef1010..b913a4d 100644 (file)
@@ -13,6 +13,8 @@
    https://blake2.net.
 */
 
+#include "archive_platform.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
index d4bca90..112baf1 100644 (file)
@@ -401,14 +401,6 @@ aes_ctr_init(archive_crypto_ctx *ctx, const uint8_t *key, size_t key_len)
        memcpy(ctx->key, key, key_len);
        memset(ctx->nonce, 0, sizeof(ctx->nonce));
        ctx->encr_pos = AES_BLOCK_SIZE;
-#if OPENSSL_VERSION_NUMBER  >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
-       if (!EVP_CIPHER_CTX_reset(ctx->ctx)) {
-               EVP_CIPHER_CTX_free(ctx->ctx);
-               ctx->ctx = NULL;
-       }
-#else
-       EVP_CIPHER_CTX_init(ctx->ctx);
-#endif
        return 0;
 }
 
index 410df01..3776831 100644 (file)
 #error Cannot use both OpenSSL and libmd.
 #endif
 
+/* Common in other bcrypt implementations, but missing from VS2008. */
+#ifndef BCRYPT_SUCCESS
+#define BCRYPT_SUCCESS(r) ((NTSTATUS)(r) == STATUS_SUCCESS)
+#endif
+
 /*
  * Message digest functions for Windows platform.
  */
 /*
  * Initialize a Message digest.
  */
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+static int
+win_crypto_init(Digest_CTX *ctx, const WCHAR *algo)
+{
+       NTSTATUS status;
+       ctx->valid = 0;
+
+       status = BCryptOpenAlgorithmProvider(&ctx->hAlg, algo, NULL, 0);
+       if (!BCRYPT_SUCCESS(status))
+               return (ARCHIVE_FAILED);
+       status = BCryptCreateHash(ctx->hAlg, &ctx->hHash, NULL, 0, NULL, 0, 0);
+       if (!BCRYPT_SUCCESS(status)) {
+               BCryptCloseAlgorithmProvider(ctx->hAlg, 0);
+               return (ARCHIVE_FAILED);
+       }
+
+       ctx->valid = 1;
+       return (ARCHIVE_OK);
+}
+#else
 static int
-win_crypto_init(Digest_CTX *ctx, ALG_ID algId)
+win_crypto_init(Digest_CTX *ctx, DWORD prov, ALG_ID algId)
 {
 
        ctx->valid = 0;
        if (!CryptAcquireContext(&ctx->cryptProv, NULL, NULL,
-           PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
+           prov, CRYPT_VERIFYCONTEXT)) {
                if (GetLastError() != (DWORD)NTE_BAD_KEYSET)
                        return (ARCHIVE_FAILED);
                if (!CryptAcquireContext(&ctx->cryptProv, NULL, NULL,
-                   PROV_RSA_FULL, CRYPT_NEWKEYSET))
+                   prov, CRYPT_NEWKEYSET))
                        return (ARCHIVE_FAILED);
        }
 
@@ -70,6 +95,7 @@ win_crypto_init(Digest_CTX *ctx, ALG_ID algId)
        ctx->valid = 1;
        return (ARCHIVE_OK);
 }
+#endif
 
 /*
  * Update a Message digest.
@@ -81,23 +107,37 @@ win_crypto_Update(Digest_CTX *ctx, const unsigned char *buf, size_t len)
        if (!ctx->valid)
                return (ARCHIVE_FAILED);
 
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+       BCryptHashData(ctx->hHash,
+                     (PUCHAR)(uintptr_t)buf,
+                     (ULONG)len, 0);
+#else
        CryptHashData(ctx->hash,
                      (unsigned char *)(uintptr_t)buf,
                      (DWORD)len, 0);
+#endif
        return (ARCHIVE_OK);
 }
 
 static int
 win_crypto_Final(unsigned char *buf, size_t bufsize, Digest_CTX *ctx)
 {
+#if !(defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA)
        DWORD siglen = (DWORD)bufsize;
+#endif
 
        if (!ctx->valid)
                return (ARCHIVE_FAILED);
 
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+       BCryptFinishHash(ctx->hHash, buf, (ULONG)bufsize, 0);
+       BCryptDestroyHash(ctx->hHash);
+       BCryptCloseAlgorithmProvider(ctx->hAlg, 0);
+#else
        CryptGetHashParam(ctx->hash, HP_HASHVAL, buf, &siglen, 0);
        CryptDestroyHash(ctx->hash);
        CryptReleaseContext(ctx->cryptProv, 0);
+#endif
        ctx->valid = 0;
        return (ARCHIVE_OK);
 }
@@ -243,7 +283,8 @@ __archive_md5init(archive_md5_ctx *ctx)
 {
   if ((*ctx = EVP_MD_CTX_new()) == NULL)
        return (ARCHIVE_FAILED);
-  EVP_DigestInit(*ctx, EVP_md5());
+  if (!EVP_DigestInit(*ctx, EVP_md5()))
+       return (ARCHIVE_FAILED);
   return (ARCHIVE_OK);
 }
 
@@ -275,7 +316,11 @@ __archive_md5final(archive_md5_ctx *ctx, void *md)
 static int
 __archive_md5init(archive_md5_ctx *ctx)
 {
-  return (win_crypto_init(ctx, CALG_MD5));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+  return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM));
+#else
+  return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5));
+#endif
 }
 
 static int
@@ -434,7 +479,8 @@ __archive_ripemd160init(archive_rmd160_ctx *ctx)
 {
   if ((*ctx = EVP_MD_CTX_new()) == NULL)
        return (ARCHIVE_FAILED);
-  EVP_DigestInit(*ctx, EVP_ripemd160());
+  if (!EVP_DigestInit(*ctx, EVP_ripemd160()))
+       return (ARCHIVE_FAILED);
   return (ARCHIVE_OK);
 }
 
@@ -624,7 +670,8 @@ __archive_sha1init(archive_sha1_ctx *ctx)
 {
   if ((*ctx = EVP_MD_CTX_new()) == NULL)
        return (ARCHIVE_FAILED);
-  EVP_DigestInit(*ctx, EVP_sha1());
+  if (!EVP_DigestInit(*ctx, EVP_sha1()))
+       return (ARCHIVE_FAILED);
   return (ARCHIVE_OK);
 }
 
@@ -656,7 +703,11 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md)
 static int
 __archive_sha1init(archive_sha1_ctx *ctx)
 {
-  return (win_crypto_init(ctx, CALG_SHA1));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+  return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM));
+#else
+  return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1));
+#endif
 }
 
 static int
@@ -887,7 +938,8 @@ __archive_sha256init(archive_sha256_ctx *ctx)
 {
   if ((*ctx = EVP_MD_CTX_new()) == NULL)
        return (ARCHIVE_FAILED);
-  EVP_DigestInit(*ctx, EVP_sha256());
+  if (!EVP_DigestInit(*ctx, EVP_sha256()))
+       return (ARCHIVE_FAILED);
   return (ARCHIVE_OK);
 }
 
@@ -915,7 +967,11 @@ __archive_sha256final(archive_sha256_ctx *ctx, void *md)
 static int
 __archive_sha256init(archive_sha256_ctx *ctx)
 {
-  return (win_crypto_init(ctx, CALG_SHA_256));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+  return (win_crypto_init(ctx, BCRYPT_SHA256_ALGORITHM));
+#else
+  return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_256));
+#endif
 }
 
 static int
@@ -1122,7 +1178,8 @@ __archive_sha384init(archive_sha384_ctx *ctx)
 {
   if ((*ctx = EVP_MD_CTX_new()) == NULL)
        return (ARCHIVE_FAILED);
-  EVP_DigestInit(*ctx, EVP_sha384());
+  if (!EVP_DigestInit(*ctx, EVP_sha384()))
+       return (ARCHIVE_FAILED);
   return (ARCHIVE_OK);
 }
 
@@ -1150,7 +1207,11 @@ __archive_sha384final(archive_sha384_ctx *ctx, void *md)
 static int
 __archive_sha384init(archive_sha384_ctx *ctx)
 {
-  return (win_crypto_init(ctx, CALG_SHA_384));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+  return (win_crypto_init(ctx, BCRYPT_SHA384_ALGORITHM));
+#else
+  return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_384));
+#endif
 }
 
 static int
@@ -1381,7 +1442,8 @@ __archive_sha512init(archive_sha512_ctx *ctx)
 {
   if ((*ctx = EVP_MD_CTX_new()) == NULL)
        return (ARCHIVE_FAILED);
-  EVP_DigestInit(*ctx, EVP_sha512());
+  if (!EVP_DigestInit(*ctx, EVP_sha512()))
+       return (ARCHIVE_FAILED);
   return (ARCHIVE_OK);
 }
 
@@ -1409,7 +1471,11 @@ __archive_sha512final(archive_sha512_ctx *ctx, void *md)
 static int
 __archive_sha512init(archive_sha512_ctx *ctx)
 {
-  return (win_crypto_init(ctx, CALG_SHA_512));
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+  return (win_crypto_init(ctx, BCRYPT_SHA512_ALGORITHM));
+#else
+  return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_512));
+#endif
 }
 
 static int
index 9b3bd66..339b4ed 100644 (file)
   defined(ARCHIVE_CRYPTO_SHA256_WIN) ||\
   defined(ARCHIVE_CRYPTO_SHA384_WIN) ||\
   defined(ARCHIVE_CRYPTO_SHA512_WIN)
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+/* don't use bcrypt when XP needs to be supported */
+#include <bcrypt.h>
+typedef struct {
+  int   valid;
+  BCRYPT_ALG_HANDLE  hAlg;
+  BCRYPT_HASH_HANDLE hHash;
+} Digest_CTX;
+#else
 #include <windows.h>
 #include <wincrypt.h>
 typedef struct {
@@ -172,6 +181,7 @@ typedef struct {
   HCRYPTHASH  hash;
 } Digest_CTX;
 #endif
+#endif
 
 /* typedefs */
 #if defined(ARCHIVE_CRYPTO_MD5_LIBC)
index ca7a4bd..ae6dc33 100644 (file)
@@ -568,6 +568,13 @@ archive_entry_nlink(struct archive_entry *entry)
        return (entry->ae_stat.aest_nlink);
 }
 
+/* Instead, our caller could have chosen a specific encoding
+ * (archive_mstring_get_mbs, archive_mstring_get_utf8,
+ * archive_mstring_get_wcs).  So we should try multiple
+ * encodings.  Try mbs first because of history, even though
+ * utf8 might be better for pathname portability.
+ * Also omit wcs because of type mismatch (char * versus wchar *)
+ */
 const char *
 archive_entry_pathname(struct archive_entry *entry)
 {
@@ -575,6 +582,13 @@ archive_entry_pathname(struct archive_entry *entry)
        if (archive_mstring_get_mbs(
            entry->archive, &entry->ae_pathname, &p) == 0)
                return (p);
+#if HAVE_EILSEQ  /*{*/
+    if (errno == EILSEQ) {
+           if (archive_mstring_get_utf8(
+               entry->archive, &entry->ae_pathname, &p) == 0)
+                   return (p);
+    }
+#endif  /*}*/
        if (errno == ENOMEM)
                __archive_errx(1, "No memory");
        return (NULL);
index bfba54f..e4c0ab3 100644 (file)
@@ -30,7 +30,7 @@
 #define        ARCHIVE_ENTRY_H_INCLUDED
 
 /* Note: Compiler will complain if this does not match archive.h! */
-#define        ARCHIVE_VERSION_NUMBER 3005002
+#define        ARCHIVE_VERSION_NUMBER 3007002
 
 /*
  * Note: archive_entry.h is for use outside of libarchive; the
@@ -99,7 +99,7 @@ typedef ssize_t la_ssize_t;
 #endif
 
 /* Large file support for Android */
-#ifdef __ANDROID__
+#if defined(__LIBARCHIVE_BUILD) && defined(__ANDROID__)
 #include "android_lf.h"
 #endif
 
@@ -122,6 +122,8 @@ typedef ssize_t la_ssize_t;
 #   define __LA_DECL   __declspec(dllimport)
 #  endif
 # endif
+#elif defined __LIBARCHIVE_ENABLE_VISIBILITY
+#  define __LA_DECL __attribute__((visibility("default")))
 #else
 /* Static libraries on all platforms and shared libraries on non-Windows. */
 # define __LA_DECL
index 3ec5bba..20ab1b1 100644 (file)
@@ -698,13 +698,9 @@ Convert(time_t Month, time_t Day, time_t Year,
        time_t          Julian;
        int             i;
        struct tm       *ltime;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
        struct tm       tmbuf;
 #endif
-#if defined(HAVE__LOCALTIME64_S)
-       errno_t         terr;
-       __time64_t      tmptime;
-#endif
 
        if (Year < 69)
                Year += 2000;
@@ -714,7 +710,7 @@ Convert(time_t Month, time_t Day, time_t Year,
            ? 29 : 28;
        /* Checking for 2038 bogusly assumes that time_t is 32 bits.  But
           I'm too lazy to try to check for time_t overflow in another way.  */
-       if (Year < EPOCH || Year > 2038
+       if (Year < EPOCH || Year >= 2038
            || Month < 1 || Month > 12
            /* Lint fluff:  "conversion from long may lose accuracy" */
            || Day < 1 || Day > DaysInMonth[(int)--Month]
@@ -731,15 +727,10 @@ Convert(time_t Month, time_t Day, time_t Year,
        Julian *= DAY;
        Julian += Timezone;
        Julian += Hours * HOUR + Minutes * MINUTE + Seconds;
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+       ltime = localtime_s(&tmbuf, &Julian) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
        ltime = localtime_r(&Julian, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
-       tmptime = Julian;
-       terr = _localtime64_s(&tmbuf, &tmptime);
-       if (terr)
-               ltime = NULL;
-       else
-               ltime = &tmbuf;
 #else
        ltime = localtime(&Julian);
 #endif
@@ -755,36 +746,21 @@ DSTcorrect(time_t Start, time_t Future)
        time_t          StartDay;
        time_t          FutureDay;
        struct tm       *ltime;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
        struct tm       tmbuf;
 #endif
-#if defined(HAVE__LOCALTIME64_S)
-       errno_t         terr;
-       __time64_t      tmptime;
-#endif
-
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+       ltime = localtime_s(&tmbuf, &Start) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
        ltime = localtime_r(&Start, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
-       tmptime = Start;
-       terr = _localtime64_s(&tmbuf, &tmptime);
-       if (terr)
-               ltime = NULL;
-       else
-               ltime = &tmbuf;
 #else
        ltime = localtime(&Start);
 #endif
        StartDay = (ltime->tm_hour + 1) % 24;
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+       ltime = localtime_s(&tmbuf, &Future) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
        ltime = localtime_r(&Future, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
-       tmptime = Future;
-       terr = _localtime64_s(&tmbuf, &tmptime);
-       if (terr)
-               ltime = NULL;
-       else
-               ltime = &tmbuf;
 #else
        ltime = localtime(&Future);
 #endif
@@ -799,24 +775,15 @@ RelativeDate(time_t Start, time_t zone, int dstmode,
 {
        struct tm       *tm;
        time_t  t, now;
-#if defined(HAVE_GMTIME_R) || defined(HAVE__GMTIME64_S)
+#if defined(HAVE_GMTIME_R) || defined(HAVE_GMTIME_S)
        struct tm       tmbuf;
 #endif
-#if defined(HAVE__GMTIME64_S)
-       errno_t         terr;
-       __time64_t      tmptime;
-#endif
 
        t = Start - zone;
-#if defined(HAVE_GMTIME_R)
+#if defined(HAVE_GMTIME_S)
+       tm = gmtime_s(&tmbuf, &t) ? NULL : &tmbuf;
+#elif defined(HAVE_GMTIME_R)
        tm = gmtime_r(&t, &tmbuf);
-#elif defined(HAVE__GMTIME64_S)
-       tmptime = t;
-       terr = _gmtime64_s(&tmbuf, &tmptime);
-       if (terr)
-               tm = NULL;
-       else
-               tm = &tmbuf;
 #else
        tm = gmtime(&t);
 #endif
@@ -835,25 +802,16 @@ RelativeMonth(time_t Start, time_t Timezone, time_t RelMonth)
        struct tm       *tm;
        time_t  Month;
        time_t  Year;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
        struct tm       tmbuf;
 #endif
-#if defined(HAVE__LOCALTIME64_S)
-       errno_t         terr;
-       __time64_t      tmptime;
-#endif
 
        if (RelMonth == 0)
                return 0;
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+       tm = localtime_s(&tmbuf, &Start) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
        tm = localtime_r(&Start, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
-       tmptime = Start;
-       terr = _localtime64_s(&tmbuf, &tmptime);
-       if (terr)
-               tm = NULL;
-       else
-               tm = &tmbuf;
 #else
        tm = localtime(&Start);
 #endif
@@ -993,10 +951,6 @@ __archive_get_date(time_t now, const char *p)
        time_t          Start;
        time_t          tod;
        long            tzone;
-#if defined(HAVE__LOCALTIME64_S) || defined(HAVE__GMTIME64_S)
-       errno_t         terr;
-       __time64_t      tmptime;
-#endif
 
        /* Clear out the parsed token array. */
        memset(tokens, 0, sizeof(tokens));
@@ -1005,36 +959,26 @@ __archive_get_date(time_t now, const char *p)
        gds = &_gds;
 
        /* Look up the current time. */
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+       tm = localtime_s(&local, &now) ? NULL : &local;
+#elif defined(HAVE_LOCALTIME_R)
        tm = localtime_r(&now, &local);
-#elif defined(HAVE__LOCALTIME64_S)
-       tmptime = now;
-       terr = _localtime64_s(&local, &tmptime);
-       if (terr)
-               tm = NULL;
-       else
-               tm = &local;
 #else
        memset(&local, 0, sizeof(local));
        tm = localtime(&now);
 #endif
        if (tm == NULL)
                return -1;
-#if !defined(HAVE_LOCALTIME_R) && !defined(HAVE__LOCALTIME64_S)
+#if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S)
        local = *tm;
 #endif
 
        /* Look up UTC if we can and use that to determine the current
         * timezone offset. */
-#if defined(HAVE_GMTIME_R)
+#if defined(HAVE_GMTIME_S)
+       gmt_ptr = gmtime_s(&gmt, &now) ? NULL : &gmt;
+#elif defined(HAVE_GMTIME_R)
        gmt_ptr = gmtime_r(&now, &gmt);
-#elif defined(HAVE__GMTIME64_S)
-       tmptime = now;
-       terr = _gmtime64_s(&gmt, &tmptime);
-       if (terr)
-               gmt_ptr = NULL;
-       else
-               gmt_ptr = &gmt;
 #else
        memset(&gmt, 0, sizeof(gmt));
        gmt_ptr = gmtime(&now);
@@ -1076,15 +1020,10 @@ __archive_get_date(time_t now, const char *p)
         * time components instead of the local timezone. */
        if (gds->HaveZone && gmt_ptr != NULL) {
                now -= gds->Timezone;
-#if defined(HAVE_GMTIME_R)
+#if defined(HAVE_GMTIME_S)
+               gmt_ptr = gmtime_s(&gmt, &now) ? NULL : &gmt;
+#elif defined(HAVE_GMTIME_R)
                gmt_ptr = gmtime_r(&now, &gmt);
-#elif defined(HAVE__GMTIME64_S)
-               tmptime = now;
-               terr = _gmtime64_s(&gmt, &tmptime);
-               if (terr)
-                       gmt_ptr = NULL;
-               else
-                       gmt_ptr = &gmt;
 #else
                gmt_ptr = gmtime(&now);
 #endif
index 2a9d04c..edb3bf5 100644 (file)
@@ -230,10 +230,28 @@ __hmac_sha1_cleanup(archive_hmac_sha1_ctx *ctx)
 static int
 __hmac_sha1_init(archive_hmac_sha1_ctx *ctx, const uint8_t *key, size_t key_len)
 {
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+       EVP_MAC *mac;
+
+       char sha1[] = "SHA1";
+       OSSL_PARAM params[] = {
+               OSSL_PARAM_utf8_string("digest", sha1, sizeof(sha1) - 1),
+               OSSL_PARAM_END
+       };
+
+       mac = EVP_MAC_fetch(NULL, "HMAC", NULL);
+       *ctx = EVP_MAC_CTX_new(mac);
+       EVP_MAC_free(mac);
+       if (*ctx == NULL)
+               return -1;
+
+       EVP_MAC_init(*ctx, key, key_len, params);
+#else
        *ctx = HMAC_CTX_new();
        if (*ctx == NULL)
                return -1;
        HMAC_Init_ex(*ctx, key, key_len, EVP_sha1(), NULL);
+#endif
        return 0;
 }
 
@@ -241,22 +259,38 @@ static void
 __hmac_sha1_update(archive_hmac_sha1_ctx *ctx, const uint8_t *data,
     size_t data_len)
 {
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+       EVP_MAC_update(*ctx, data, data_len);
+#else
        HMAC_Update(*ctx, data, data_len);
+#endif
 }
 
 static void
 __hmac_sha1_final(archive_hmac_sha1_ctx *ctx, uint8_t *out, size_t *out_len)
 {
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+       size_t len = *out_len;
+#else
        unsigned int len = (unsigned int)*out_len;
+#endif
 
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+       EVP_MAC_final(*ctx, out, &len, *out_len);
+#else
        HMAC_Final(*ctx, out, &len);
+#endif
        *out_len = len;
 }
 
 static void
 __hmac_sha1_cleanup(archive_hmac_sha1_ctx *ctx)
 {
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+       EVP_MAC_CTX_free(*ctx);
+#else
        HMAC_CTX_free(*ctx);
+#endif
        *ctx = NULL;
 }
 
index 13a67d4..d0fda7f 100644 (file)
@@ -74,9 +74,18 @@ typedef mbedtls_md_context_t archive_hmac_sha1_ctx;
 typedef        struct hmac_sha1_ctx archive_hmac_sha1_ctx;
 
 #elif defined(HAVE_LIBCRYPTO)
+#include <openssl/opensslv.h>
+#include <openssl/hmac.h>
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+#include <openssl/params.h>
+
+typedef EVP_MAC_CTX *archive_hmac_sha1_ctx;
+
+#else
 #include "archive_openssl_hmac_private.h"
 
 typedef        HMAC_CTX* archive_hmac_sha1_ctx;
+#endif
 
 #else
 
index ebb0670..8ac4772 100644 (file)
@@ -33,7 +33,8 @@
 #include <openssl/evp.h>
 #include <openssl/opensslv.h>
 
-#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || \
+    (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
 #include <stdlib.h> /* malloc, free */
 #include <string.h> /* memset */
 static inline EVP_MD_CTX *EVP_MD_CTX_new(void)
index f8286d8..d95444d 100644 (file)
@@ -77,7 +77,7 @@ static        pack_t  pack_12_20;
 static pack_t  pack_14_18;
 static pack_t  pack_8_24;
 static pack_t  pack_bsdos;
-static int     compare_format(const void *, const void *);
+static int     __LA_LIBC_CC compare_format(const void *, const void *);
 
 static const char iMajorError[] = "invalid major number";
 static const char iMinorError[] = "invalid minor number";
@@ -310,6 +310,7 @@ static const struct format {
 };
 
 static int
+__LA_LIBC_CC
 compare_format(const void *key, const void *element)
 {
        const char              *name;
index b8bcb52..1038932 100644 (file)
  * either Windows or Posix APIs. */
 #if (defined(__WIN32__) || defined(_WIN32) || defined(__WIN32)) && !defined(__CYGWIN__)
 #include "archive_windows.h"
+/* The C library on Windows specifies a calling convention for callback
+ * functions and exports; when we interact with them (capture pointers,
+ * call and pass function pointers) we need to match their calling
+ * convention.
+ * This only matters when libarchive is built with /Gr, /Gz or /Gv
+ * (which change the default calling convention.) */
+#define __LA_LIBC_CC __cdecl
 #else
 #define la_stat(path,stref)            stat(path,stref)
+#define __LA_LIBC_CC
 #endif
 
 /*
 #define        INTMAX_MIN ((intmax_t)(~INTMAX_MAX))
 #endif
 
+/* Some platforms lack the standard PRIxN/PRIdN definitions. */
+#if !HAVE_INTTYPES_H || !defined(PRIx32) || !defined(PRId32)
+#ifndef PRIx32
+#if SIZEOF_INT == 4
+#define PRIx32 "x"
+#elif SIZEOF_LONG == 4
+#define PRIx32 "lx"
+#else
+#error No suitable 32-bit unsigned integer type found for this platform
+#endif
+#endif // PRIx32
+#ifndef PRId32
+#if SIZEOF_INT == 4
+#define PRId32 "d"
+#elif SIZEOF_LONG == 4
+#define PRId32 "ld"
+#else
+#error No suitable 32-bit signed integer type found for this platform
+#endif
+#endif // PRId32
+#endif // !HAVE_INTTYPES_H || !defined(PRIx32) || !defined(PRId32)
+
 /*
  * If we can't restore metadata using a file descriptor, then
  * for compatibility's sake, close files before trying to restore metadata.
 
 /*
  * glibc 2.24 deprecates readdir_r
+ * bionic c deprecates readdir_r too
  */
-#if defined(HAVE_READDIR_R) && (!defined(__GLIBC__) || !defined(__GLIBC_MINOR__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 24))
+#if defined(HAVE_READDIR_R) && (!defined(__GLIBC__) || !defined(__GLIBC_MINOR__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 24)) && (!defined(__ANDROID__))
 #define        USE_READDIR_R   1
 #else
 #undef USE_READDIR_R
index 55a8da1..b2a2cda 100644 (file)
@@ -107,14 +107,11 @@ struct archive {
         * Some public API functions depend on the "real" type of the
         * archive object.
         */
-       struct archive_vtable *vtable;
+       const struct archive_vtable *vtable;
 
        int               archive_format;
        const char       *archive_format_name;
 
-       int       compression_code;     /* Currently active compression. */
-       const char *compression_name;
-
        /* Number of file entries processed. */
        int               file_count;
 
index 9d1aa49..a410dc0 100644 (file)
@@ -51,16 +51,27 @@ __FBSDID("$FreeBSD$");
 #include <pthread.h>
 #endif
 
-static void arc4random_buf(void *, size_t);
+static void la_arc4random_buf(void *, size_t);
 
 #endif /* HAVE_ARC4RANDOM_BUF */
 
 #include "archive.h"
 #include "archive_random_private.h"
 
-#if defined(HAVE_WINCRYPT_H) && !defined(__CYGWIN__)
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+/* don't use bcrypt when XP needs to be supported */
+#include <bcrypt.h>
+
+/* Common in other bcrypt implementations, but missing from VS2008. */
+#ifndef BCRYPT_SUCCESS
+#define BCRYPT_SUCCESS(r) ((NTSTATUS)(r) == STATUS_SUCCESS)
+#endif
+
+#elif defined(HAVE_WINCRYPT_H)
 #include <wincrypt.h>
 #endif
+#endif
 
 #ifndef O_CLOEXEC
 #define O_CLOEXEC      0
@@ -75,6 +86,20 @@ int
 archive_random(void *buf, size_t nbytes)
 {
 #if defined(_WIN32) && !defined(__CYGWIN__)
+# if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+       NTSTATUS status;
+       BCRYPT_ALG_HANDLE hAlg;
+
+       status = BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_RNG_ALGORITHM, NULL, 0);
+       if (!BCRYPT_SUCCESS(status))
+               return ARCHIVE_FAILED;
+       status = BCryptGenRandom(hAlg, buf, (ULONG)nbytes, 0);
+       BCryptCloseAlgorithmProvider(hAlg, 0);
+       if (!BCRYPT_SUCCESS(status))
+               return ARCHIVE_FAILED;
+
+       return ARCHIVE_OK;
+# else
        HCRYPTPROV hProv;
        BOOL success;
 
@@ -92,6 +117,10 @@ archive_random(void *buf, size_t nbytes)
        }
        /* TODO: Does this case really happen? */
        return ARCHIVE_FAILED;
+# endif
+#elif !defined(HAVE_ARC4RANDOM_BUF) && (!defined(_WIN32) || defined(__CYGWIN__))
+       la_arc4random_buf(buf, nbytes);
+       return ARCHIVE_OK;
 #else
        arc4random_buf(buf, nbytes);
        return ARCHIVE_OK;
@@ -256,7 +285,7 @@ arc4_getbyte(void)
 }
 
 static void
-arc4random_buf(void *_buf, size_t n)
+la_arc4random_buf(void *_buf, size_t n)
 {
        uint8_t *buf = (uint8_t *)_buf;
        _ARC4_LOCK();
index c59f051..45a38ae 100644 (file)
@@ -58,7 +58,6 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_read.c 201157 2009-12-29 05:30:2
 static int     choose_filters(struct archive_read *);
 static int     choose_format(struct archive_read *);
 static int     close_filters(struct archive_read *);
-static struct archive_vtable *archive_read_vtable(void);
 static int64_t _archive_filter_bytes(struct archive *, int);
 static int     _archive_filter_code(struct archive *, int);
 static const char *_archive_filter_name(struct archive *, int);
@@ -73,26 +72,18 @@ static int  _archive_read_next_header2(struct archive *,
                    struct archive_entry *);
 static int64_t  advance_file_pointer(struct archive_read_filter *, int64_t);
 
-static struct archive_vtable *
-archive_read_vtable(void)
-{
-       static struct archive_vtable av;
-       static int inited = 0;
-
-       if (!inited) {
-               av.archive_filter_bytes = _archive_filter_bytes;
-               av.archive_filter_code = _archive_filter_code;
-               av.archive_filter_name = _archive_filter_name;
-               av.archive_filter_count = _archive_filter_count;
-               av.archive_read_data_block = _archive_read_data_block;
-               av.archive_read_next_header = _archive_read_next_header;
-               av.archive_read_next_header2 = _archive_read_next_header2;
-               av.archive_free = _archive_read_free;
-               av.archive_close = _archive_read_close;
-               inited = 1;
-       }
-       return (&av);
-}
+static const struct archive_vtable
+archive_read_vtable = {
+       .archive_filter_bytes = _archive_filter_bytes,
+       .archive_filter_code = _archive_filter_code,
+       .archive_filter_name = _archive_filter_name,
+       .archive_filter_count = _archive_filter_count,
+       .archive_read_data_block = _archive_read_data_block,
+       .archive_read_next_header = _archive_read_next_header,
+       .archive_read_next_header2 = _archive_read_next_header2,
+       .archive_free = _archive_read_free,
+       .archive_close = _archive_read_close,
+};
 
 /*
  * Allocate, initialize and return a struct archive object.
@@ -109,7 +100,7 @@ archive_read_new(void)
 
        a->archive.state = ARCHIVE_STATE_NEW;
        a->entry = archive_entry_new2(&a->archive);
-       a->archive.vtable = archive_read_vtable();
+       a->archive.vtable = &archive_read_vtable;
 
        a->passphrases.last = &a->passphrases.first;
 
@@ -245,18 +236,17 @@ client_seek_proxy(struct archive_read_filter *self, int64_t offset, int whence)
 }
 
 static int
-client_close_proxy(struct archive_read_filter *self)
+read_client_close_proxy(struct archive_read *a)
 {
        int r = ARCHIVE_OK, r2;
        unsigned int i;
 
-       if (self->archive->client.closer == NULL)
+       if (a->client.closer == NULL)
                return (r);
-       for (i = 0; i < self->archive->client.nodes; i++)
+       for (i = 0; i < a->client.nodes; i++)
        {
-               r2 = (self->archive->client.closer)
-                       ((struct archive *)self->archive,
-                               self->archive->client.dataset[i].data);
+               r2 = (a->client.closer)
+                       ((struct archive *)a, a->client.dataset[i].data);
                if (r > r2)
                        r = r2;
        }
@@ -264,6 +254,12 @@ client_close_proxy(struct archive_read_filter *self)
 }
 
 static int
+client_close_proxy(struct archive_read_filter *self)
+{
+       return read_client_close_proxy(self->archive);
+}
+
+static int
 client_open_proxy(struct archive_read_filter *self)
 {
   int r = ARCHIVE_OK;
@@ -298,9 +294,7 @@ client_switch_proxy(struct archive_read_filter *self, unsigned int iindex)
                        r1 = (self->archive->client.closer)
                                ((struct archive *)self->archive, self->data);
                self->data = data2;
-               if (self->archive->client.opener != NULL)
-                       r2 = (self->archive->client.opener)
-                               ((struct archive *)self->archive, self->data);
+               r2 = client_open_proxy(self);
        }
        return (r1 < r2) ? r1 : r2;
 }
@@ -457,13 +451,18 @@ archive_read_prepend_callback_data(struct archive *_a, void *client_data)
        return archive_read_add_callback_data(_a, client_data, 0);
 }
 
+static const struct archive_read_filter_vtable
+none_reader_vtable = {
+       .read = client_read_proxy,
+       .close = client_close_proxy,
+};
+
 int
 archive_read_open1(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
        struct archive_read_filter *filter, *tmp;
        int slot, e = ARCHIVE_OK;
-       unsigned int i;
 
        archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW,
            "archive_read_open");
@@ -481,11 +480,7 @@ archive_read_open1(struct archive *_a)
                e = (a->client.opener)(&a->archive, a->client.dataset[0].data);
                if (e != 0) {
                        /* If the open failed, call the closer to clean up. */
-                       if (a->client.closer) {
-                               for (i = 0; i < a->client.nodes; i++)
-                                       (a->client.closer)(&a->archive,
-                                           a->client.dataset[i].data);
-                       }
+                       read_client_close_proxy(a);
                        return (e);
                }
        }
@@ -497,14 +492,11 @@ archive_read_open1(struct archive *_a)
        filter->upstream = NULL;
        filter->archive = a;
        filter->data = a->client.dataset[0].data;
-       filter->open = client_open_proxy;
-       filter->read = client_read_proxy;
-       filter->skip = client_skip_proxy;
-       filter->seek = client_seek_proxy;
-       filter->close = client_close_proxy;
-       filter->sswitch = client_switch_proxy;
+       filter->vtable = &none_reader_vtable;
        filter->name = "none";
        filter->code = ARCHIVE_FILTER_NONE;
+       filter->can_skip = 1;
+       filter->can_seek = 1;
 
        a->client.dataset[0].begin_position = 0;
        if (!a->filter || !a->bypass_filter_bidding)
@@ -570,12 +562,12 @@ choose_filters(struct archive_read *a)
 
                bidder = a->bidders;
                for (i = 0; i < number_bidders; i++, bidder++) {
-                       if (bidder->bid != NULL) {
-                               bid = (bidder->bid)(bidder, a->filter);
-                               if (bid > best_bid) {
-                                       best_bid = bid;
-                                       best_bidder = bidder;
-                               }
+                       if (bidder->vtable == NULL)
+                               continue;
+                       bid = (bidder->vtable->bid)(bidder, a->filter);
+                       if (bid > best_bid) {
+                               best_bid = bid;
+                               best_bidder = bidder;
                        }
                }
 
@@ -587,8 +579,6 @@ choose_filters(struct archive_read *a)
                                __archive_read_free_filters(a);
                                return (ARCHIVE_FATAL);
                        }
-                       a->archive.compression_name = a->filter->name;
-                       a->archive.compression_code = a->filter->code;
                        return (ARCHIVE_OK);
                }
 
@@ -600,7 +590,7 @@ choose_filters(struct archive_read *a)
                filter->archive = a;
                filter->upstream = a->filter;
                a->filter = filter;
-               r = (best_bidder->init)(a->filter);
+               r = (best_bidder->vtable->init)(a->filter);
                if (r != ARCHIVE_OK) {
                        __archive_read_free_filters(a);
                        return (ARCHIVE_FATAL);
@@ -614,10 +604,9 @@ choose_filters(struct archive_read *a)
 int
 __archive_read_header(struct archive_read *a, struct archive_entry *entry)
 {
-       if (a->filter->read_header)
-               return a->filter->read_header(a->filter, entry);
-       else
+       if (!a->filter->vtable->read_header)
                return (ARCHIVE_OK);
+       return a->filter->vtable->read_header(a->filter, entry);
 }
 
 /*
@@ -1006,8 +995,8 @@ close_filters(struct archive_read *a)
        /* Close each filter in the pipeline. */
        while (f != NULL) {
                struct archive_read_filter *t = f->upstream;
-               if (!f->closed && f->close != NULL) {
-                       int r1 = (f->close)(f);
+               if (!f->closed && f->vtable != NULL) {
+                       int r1 = (f->vtable->close)(f);
                        f->closed = 1;
                        if (r1 < r)
                                r = r1;
@@ -1112,11 +1101,10 @@ _archive_read_free(struct archive *_a)
        /* Release the bidder objects. */
        n = sizeof(a->bidders)/sizeof(a->bidders[0]);
        for (i = 0; i < n; i++) {
-               if (a->bidders[i].free != NULL) {
-                       int r1 = (a->bidders[i].free)(&a->bidders[i]);
-                       if (r1 < r)
-                               r = r1;
-               }
+               if (a->bidders[i].vtable == NULL ||
+                   a->bidders[i].vtable->free == NULL)
+                       continue;
+               (a->bidders[i].vtable->free)(&a->bidders[i]);
        }
 
        /* Release passphrase list. */
@@ -1241,19 +1229,35 @@ __archive_read_register_format(struct archive_read *a,
  * initialization functions.
  */
 int
-__archive_read_get_bidder(struct archive_read *a,
-    struct archive_read_filter_bidder **bidder)
+__archive_read_register_bidder(struct archive_read *a,
+       void *bidder_data,
+       const char *name,
+       const struct archive_read_filter_bidder_vtable *vtable)
 {
+       struct archive_read_filter_bidder *bidder;
        int i, number_slots;
 
+       archive_check_magic(&a->archive, ARCHIVE_READ_MAGIC,
+           ARCHIVE_STATE_NEW, "__archive_read_register_bidder");
+
        number_slots = sizeof(a->bidders) / sizeof(a->bidders[0]);
 
        for (i = 0; i < number_slots; i++) {
-               if (a->bidders[i].bid == NULL) {
-                       memset(a->bidders + i, 0, sizeof(a->bidders[0]));
-                       *bidder = (a->bidders + i);
-                       return (ARCHIVE_OK);
+               if (a->bidders[i].vtable != NULL)
+                       continue;
+               memset(a->bidders + i, 0, sizeof(a->bidders[0]));
+               bidder = (a->bidders + i);
+               bidder->data = bidder_data;
+               bidder->name = name;
+               bidder->vtable = vtable;
+               if (bidder->vtable->bid == NULL || bidder->vtable->init == NULL) {
+                       archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+                                       "Internal error: "
+                                       "no bid/init for filter bidder");
+                       return (ARCHIVE_FATAL);
                }
+
+               return (ARCHIVE_OK);
        }
 
        archive_set_error(&a->archive, ENOMEM,
@@ -1382,7 +1386,7 @@ __archive_read_filter_ahead(struct archive_read_filter *filter,
                                        *avail = 0;
                                return (NULL);
                        }
-                       bytes_read = (filter->read)(filter,
+                       bytes_read = (filter->vtable->read)(filter,
                            &filter->client_buff);
                        if (bytes_read < 0) {           /* Read error. */
                                filter->client_total = filter->client_avail = 0;
@@ -1561,8 +1565,8 @@ advance_file_pointer(struct archive_read_filter *filter, int64_t request)
                return (total_bytes_skipped);
 
        /* If there's an optimized skip function, use it. */
-       if (filter->skip != NULL) {
-               bytes_skipped = (filter->skip)(filter, request);
+       if (filter->can_skip != 0) {
+               bytes_skipped = client_skip_proxy(filter, request);
                if (bytes_skipped < 0) {        /* error */
                        filter->fatal = 1;
                        return (bytes_skipped);
@@ -1576,7 +1580,7 @@ advance_file_pointer(struct archive_read_filter *filter, int64_t request)
 
        /* Use ordinary reads as necessary to complete the request. */
        for (;;) {
-               bytes_read = (filter->read)(filter, &filter->client_buff);
+               bytes_read = (filter->vtable->read)(filter, &filter->client_buff);
                if (bytes_read < 0) {
                        filter->client_buff = NULL;
                        filter->fatal = 1;
@@ -1631,7 +1635,7 @@ __archive_read_filter_seek(struct archive_read_filter *filter, int64_t offset,
 
        if (filter->closed || filter->fatal)
                return (ARCHIVE_FATAL);
-       if (filter->seek == NULL)
+       if (filter->can_seek == 0)
                return (ARCHIVE_FAILED);
 
        client = &(filter->archive->client);
index da7c55b..25dc4b2 100644 (file)
@@ -135,7 +135,7 @@ archive_read_append_filter(struct archive *_a, int code)
     filter->archive = a;
     filter->upstream = a->filter;
     a->filter = filter;
-    r2 = (bidder->init)(a->filter);
+    r2 = (bidder->vtable->init)(a->filter);
     if (r2 != ARCHIVE_OK) {
       __archive_read_free_filters(a);
       return (ARCHIVE_FATAL);
@@ -192,7 +192,7 @@ archive_read_append_filter_program_signature(struct archive *_a,
   filter->archive = a;
   filter->upstream = a->filter;
   a->filter = filter;
-  r = (bidder->init)(a->filter);
+  r = (bidder->vtable->init)(a->filter);
   if (r != ARCHIVE_OK) {
     __archive_read_free_filters(a);
     return (ARCHIVE_FATAL);
index b4398f1..f16ca5c 100644 (file)
@@ -95,8 +95,13 @@ archive_read_data_into_fd(struct archive *a, int fd)
            "archive_read_data_into_fd");
 
        can_lseek = (fstat(fd, &st) == 0) && S_ISREG(st.st_mode);
-       if (!can_lseek)
+       if (!can_lseek) {
                nulls = calloc(1, nulls_size);
+               if (!nulls) {
+                       r = ARCHIVE_FATAL;
+                       goto cleanup;
+               }
+       }
 
        while ((r = archive_read_data_block(a, &buff, &size, &target_offset)) ==
            ARCHIVE_OK) {
index 82d6a5c..8b568d7 100644 (file)
@@ -29,6 +29,8 @@
 .Os
 .Sh NAME
 .Nm archive_read_disk_new ,
+.Nm archive_read_disk_open ,
+.Nm archive_read_disk_open_w ,
 .Nm archive_read_disk_set_behavior ,
 .Nm archive_read_disk_set_symlink_logical ,
 .Nm archive_read_disk_set_symlink_physical ,
 .Nm archive_read_disk_uname ,
 .Nm archive_read_disk_set_uname_lookup ,
 .Nm archive_read_disk_set_gname_lookup ,
-.Nm archive_read_disk_set_standard_lookup
+.Nm archive_read_disk_set_standard_lookup ,
+.Nm archive_read_disk_descend ,
+.Nm archive_read_disk_can_descend ,
+.Nm archive_read_disk_current_filesystem ,
+.Nm archive_read_disk_current_filesystem_is_synthetic ,
+.Nm archive_read_disk_current_filesystem_is_remote ,
+.Nm archive_read_disk_set_matching ,
+.Nm archive_read_disk_set_metadata_filter_callback ,
 .Nd functions for reading objects from disk
 .Sh LIBRARY
 Streaming Archive Library (libarchive, -larchive)
@@ -47,6 +56,10 @@ Streaming Archive Library (libarchive, -larchive)
 .Ft struct archive *
 .Fn archive_read_disk_new "void"
 .Ft int
+.Fn archive_read_disk_open "struct archive *" "const char *"
+.Ft int
+.Fn archive_read_disk_open_w "struct archive *" "const wchar_t *" 
+.Ft int
 .Fn archive_read_disk_set_behavior "struct archive *" "int"
 .Ft int
 .Fn archive_read_disk_set_symlink_logical "struct archive *"
@@ -81,6 +94,29 @@ Streaming Archive Library (libarchive, -larchive)
 .Fa "int fd"
 .Fa "const struct stat *"
 .Fc
+.Ft int
+.Fn archive_read_disk_descend "struct archive *"
+.Ft int
+.Fn archive_read_disk_can_descend "struct archive *"
+.Ft int
+.Fn archive_read_disk_current_filesystem "struct archive *"
+.Ft int
+.Fn archive_read_disk_current_filesystem_is_synthetic "struct archive *"
+.Ft int
+.Fn archive_read_disk_current_filesystem_is_remote "struct archive *"
+.Ft int
+.Fo archive_read_disk_set_matching
+.Fa "struct archive *"
+.Fa "struct archive *"
+.Fa "void (*excluded_func)(struct archive *, void *, struct archive entry *)"
+.Fa "void *"
+.Fc
+.Ft int 
+.Fo archive_read_disk_set_metadata_filter_callback
+.Fa "struct archive *"
+.Fa "int (*metadata_filter_func)(struct archive *, void*, struct archive_entry *)"
+.Fa "void *"
+.Fc
 .Sh DESCRIPTION
 These functions provide an API for reading information about
 objects on disk.
@@ -92,6 +128,14 @@ objects.
 Allocates and initializes a
 .Tn struct archive
 object suitable for reading object information from disk.
+.It Fn archive_read_disk_open
+Opens the file or directory from the given path and prepares the
+.Tn struct archive
+to read it from disk.
+.It Fn archive_read_disk_open_w
+Opens the file or directory from the given path as a wide character string and prepares the
+.Tn struct archive
+to read it from disk.
 .It Fn archive_read_disk_set_behavior
 Configures various behavior options when reading entries from disk.
 The flags field consists of a bitwise OR of one or more of the
@@ -137,6 +181,9 @@ for more information on extended file attributes.
 .It Cm ARCHIVE_READDISK_RESTORE_ATIME
 Restore access time of traversed files.
 By default, access time of traversed files is not restored.
+.It Cm ARCHIVE_READDISK_NO_SPARSE
+Do not read sparse file information.
+By default, sparse file information is read from disk.
 .El
 .It Xo
 .Fn archive_read_disk_set_symlink_logical ,
@@ -221,6 +268,37 @@ using the currently-registered lookup functions above.
 This affects the file ownership fields and ACL values in the
 .Tn struct archive_entry
 object.
+.It Fn archive_read_disk_descend
+If the current entry can be descended, this function will mark the directory as the next entry for 
+.Xr archive_read_header 3
+to visit.
+.It Fn archive_read_disk_can_descend
+Returns 1 if the current entry is an unvisited directory and 0 otherwise.
+.It Fn archive_read_disk_current_filesystem
+Returns the index of the most recent filesystem entry that has been visited through archive_read_disk
+.It Fn archive_read_disk_current_filesystem_is_synthetic
+Returns 1 if the current filesystem is a virtual filesystem. Returns 0 if the current filesystem is not a virtual filesystem. Returns -1 if it is unknown.
+.It Fn archive_read_disk_current_filesystem_is_remote
+Returns 1 if the current filesystem is a remote filesystem. Returns 0 if the current filesystem is not a remote filesystem. Returns -1 if it is unknown.
+.It Fn archive_read_disk_set_matching
+Allows the caller to set
+.Tn struct archive
+*_ma to compare each entry during
+.Xr archive_read_header 3
+calls. If matched based on calls to
+.Tn archive_match_path_excluded ,
+.Tn archive_match_time_excluded ,
+or
+.Tn archive_match_owner_excluded ,
+then the callback function specified by the _excluded_func parameter will execute. This function will recieve data provided to the fourth parameter, void *_client_data.
+.It Fn archive_read_disk_set_metadata_filter_callback
+Allows the caller to set a callback function during calls to
+.Xr archive_read_header 3
+to filter out metadata for each entry. The callback function recieves the
+.Tn struct archive
+object, void* custom filter data, and the 
+.Tn struct archive_entry .
+If the callback function returns an error, ARCHIVE_RETRY will be returned and the entry will not be further processed.
 .El
 More information about the
 .Va struct archive
index 9c9cf38..ab0270b 100644 (file)
@@ -303,9 +303,11 @@ archive_read_disk_entry_from_file(struct archive *_a,
                if (r1 < r)
                        r = r1;
        }
-       r1 = setup_sparse(a, entry, &fd);
-       if (r1 < r)
-               r = r1;
+       if ((a->flags & ARCHIVE_READDISK_NO_SPARSE) == 0) {
+               r1 = setup_sparse(a, entry, &fd);
+               if (r1 < r)
+                       r = r1;
+       }
 
        /* If we opened the file earlier in this function, close it. */
        if (initial_fd != fd)
index 3ee6269..8d5c32f 100644 (file)
@@ -34,9 +34,6 @@ __FBSDID("$FreeBSD$");
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
 #endif
-#ifdef HAVE_SYS_MOUNT_H
-#include <sys/mount.h>
-#endif
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
@@ -54,6 +51,8 @@ __FBSDID("$FreeBSD$");
 #endif
 #ifdef HAVE_LINUX_FS_H
 #include <linux/fs.h>
+#elif HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
 #endif
 /*
  * Some Linux distributions have both linux/ext2_fs.h and ext2fs/ext2_fs.h.
@@ -109,6 +108,11 @@ __FBSDID("$FreeBSD$");
 #define O_CLOEXEC      0
 #endif
 
+#if defined(__hpux) && !defined(HAVE_DIRFD)
+#define dirfd(x) ((x)->__dd_fd)
+#define HAVE_DIRFD
+#endif
+
 /*-
  * This is a new directory-walking system that addresses a number
  * of problems I've had with fts(3).  In particular, it has no
@@ -369,22 +373,14 @@ static int        open_on_current_dir(struct tree *, const char *, int);
 static int     tree_dup(int);
 
 
-static struct archive_vtable *
-archive_read_disk_vtable(void)
-{
-       static struct archive_vtable av;
-       static int inited = 0;
-
-       if (!inited) {
-               av.archive_free = _archive_read_free;
-               av.archive_close = _archive_read_close;
-               av.archive_read_data_block = _archive_read_data_block;
-               av.archive_read_next_header = _archive_read_next_header;
-               av.archive_read_next_header2 = _archive_read_next_header2;
-               inited = 1;
-       }
-       return (&av);
-}
+static const struct archive_vtable
+archive_read_disk_vtable = {
+       .archive_free = _archive_read_free,
+       .archive_close = _archive_read_close,
+       .archive_read_data_block = _archive_read_data_block,
+       .archive_read_next_header = _archive_read_next_header,
+       .archive_read_next_header2 = _archive_read_next_header2,
+};
 
 const char *
 archive_read_disk_gname(struct archive *_a, la_int64_t gid)
@@ -461,7 +457,7 @@ archive_read_disk_new(void)
                return (NULL);
        a->archive.magic = ARCHIVE_READ_DISK_MAGIC;
        a->archive.state = ARCHIVE_STATE_NEW;
-       a->archive.vtable = archive_read_disk_vtable();
+       a->archive.vtable = &archive_read_disk_vtable;
        a->entry = archive_entry_new2(&a->archive);
        a->lookup_uname = trivial_lookup_uname;
        a->lookup_gname = trivial_lookup_gname;
@@ -1290,7 +1286,7 @@ archive_read_disk_descend(struct archive *_a)
            ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
            "archive_read_disk_descend");
 
-       if (t->visit_type != TREE_REGULAR || !t->descend)
+       if (!archive_read_disk_can_descend(_a))
                return (ARCHIVE_OK);
 
        /*
@@ -1674,6 +1670,11 @@ setup_current_filesystem(struct archive_read_disk *a)
        else
                t->current_filesystem->name_max = nm;
 #endif
+       if (t->current_filesystem->name_max == 0) {
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                   "Cannot determine name_max");
+               return (ARCHIVE_FAILED);
+       }
 #endif /* USE_READDIR_R */
        return (ARCHIVE_OK);
 }
@@ -1864,8 +1865,17 @@ setup_current_filesystem(struct archive_read_disk *a)
 
 #if defined(USE_READDIR_R)
        /* Set maximum filename length. */
+#if defined(HAVE_STATVFS)
+       t->current_filesystem->name_max = svfs.f_namemax;
+#else
        t->current_filesystem->name_max = sfs.f_namelen;
 #endif
+       if (t->current_filesystem->name_max == 0) {
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                   "Cannot determine name_max");
+               return (ARCHIVE_FAILED);
+       }
+#endif
        return (ARCHIVE_OK);
 }
 
@@ -1946,6 +1956,11 @@ setup_current_filesystem(struct archive_read_disk *a)
 #if defined(USE_READDIR_R)
        /* Set maximum filename length. */
        t->current_filesystem->name_max = svfs.f_namemax;
+       if (t->current_filesystem->name_max == 0) {
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                   "Cannot determine name_max");
+               return (ARCHIVE_FAILED);
+       }
 #endif
        return (ARCHIVE_OK);
 }
@@ -2000,6 +2015,11 @@ setup_current_filesystem(struct archive_read_disk *a)
        else
                t->current_filesystem->name_max = nm;
 #  endif /* _PC_NAME_MAX */
+       if (t->current_filesystem->name_max == 0) {
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                   "Cannot determine name_max");
+               return (ARCHIVE_FAILED);
+       }
 #endif /* USE_READDIR_R */
        return (ARCHIVE_OK);
 }
@@ -2106,6 +2126,8 @@ tree_push(struct tree *t, const char *path, int filesystem_id,
        struct tree_entry *te;
 
        te = calloc(1, sizeof(*te));
+       if (te == NULL)
+               __archive_errx(1, "Out of memory");
        te->next = t->stack;
        te->parent = t->current;
        if (te->parent)
@@ -2436,7 +2458,7 @@ tree_dir_next_posix(struct tree *t)
 #else /* HAVE_FDOPENDIR */
                if (tree_enter_working_dir(t) == 0) {
                        t->d = opendir(".");
-#if HAVE_DIRFD || defined(dirfd)
+#ifdef HAVE_DIRFD
                        __archive_ensure_cloexec_flag(dirfd(t->d));
 #endif
                }
@@ -2545,7 +2567,11 @@ tree_current_lstat(struct tree *t)
 #else
                if (tree_enter_working_dir(t) != 0)
                        return NULL;
+#ifdef HAVE_LSTAT
                if (lstat(tree_current_access_path(t), &t->lst) != 0)
+#else
+               if (la_stat(tree_current_access_path(t), &t->lst) != 0)
+#endif
 #endif
                        return NULL;
                t->flags |= hasLstat;
index 877bc44..f92a78a 100644 (file)
@@ -418,8 +418,19 @@ la_linkname_from_pathw(const wchar_t *path, wchar_t **outbuf, int *linktype)
            FILE_FLAG_OPEN_REPARSE_POINT;
        int ret;
 
-       h = CreateFileW(path, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, flag,
-           NULL);
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+       ZeroMemory(&createExParams, sizeof(createExParams));
+       createExParams.dwSize = sizeof(createExParams);
+       createExParams.dwFileFlags = flag;
+       h = CreateFile2(path, 0,
+           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+           OPEN_EXISTING, &createExParams);
+#else
+       h = CreateFileW(path, 0,
+           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
+           OPEN_EXISTING, flag, NULL);
+#endif
        if (h == INVALID_HANDLE_VALUE) {
                la_dosmaperr(GetLastError());
                return (-1);
@@ -449,22 +460,14 @@ entry_symlink_from_pathw(struct archive_entry *entry, const wchar_t *path)
        return;
 }
 
-static struct archive_vtable *
-archive_read_disk_vtable(void)
-{
-       static struct archive_vtable av;
-       static int inited = 0;
-
-       if (!inited) {
-               av.archive_free = _archive_read_free;
-               av.archive_close = _archive_read_close;
-               av.archive_read_data_block = _archive_read_data_block;
-               av.archive_read_next_header = _archive_read_next_header;
-               av.archive_read_next_header2 = _archive_read_next_header2;
-               inited = 1;
-       }
-       return (&av);
-}
+static const struct archive_vtable
+archive_read_disk_vtable = {
+       .archive_free = _archive_read_free,
+       .archive_close = _archive_read_close,
+       .archive_read_data_block = _archive_read_data_block,
+       .archive_read_next_header = _archive_read_next_header,
+       .archive_read_next_header2 = _archive_read_next_header2,
+};
 
 const char *
 archive_read_disk_gname(struct archive *_a, la_int64_t gid)
@@ -541,7 +544,7 @@ archive_read_disk_new(void)
                return (NULL);
        a->archive.magic = ARCHIVE_READ_DISK_MAGIC;
        a->archive.state = ARCHIVE_STATE_NEW;
-       a->archive.vtable = archive_read_disk_vtable();
+       a->archive.vtable = &archive_read_disk_vtable;
        a->entry = archive_entry_new2(&a->archive);
        a->lookup_uname = trivial_lookup_uname;
        a->lookup_gname = trivial_lookup_gname;
@@ -1074,14 +1077,29 @@ next_entry(struct archive_read_disk *a, struct tree *t,
        if (archive_entry_filetype(entry) == AE_IFREG &&
            archive_entry_size(entry) > 0) {
                DWORD flags = FILE_FLAG_BACKUP_SEMANTICS;
+#if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+               CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
                if (t->async_io)
                        flags |= FILE_FLAG_OVERLAPPED;
                if (t->direct_io)
                        flags |= FILE_FLAG_NO_BUFFERING;
                else
                        flags |= FILE_FLAG_SEQUENTIAL_SCAN;
+#if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+               ZeroMemory(&createExParams, sizeof(createExParams));
+               createExParams.dwSize = sizeof(createExParams);
+               createExParams.dwFileFlags = flags;
+               t->entry_fh = CreateFile2(tree_current_access_path(t),
+                   GENERIC_READ,
+                   FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                   OPEN_EXISTING, &createExParams);
+#else
                t->entry_fh = CreateFileW(tree_current_access_path(t),
-                   GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, flags, NULL);
+                   GENERIC_READ,
+                   FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                   NULL, OPEN_EXISTING, flags, NULL);
+#endif
                if (t->entry_fh == INVALID_HANDLE_VALUE) {
                        la_dosmaperr(GetLastError());
                        archive_set_error(&a->archive, errno,
@@ -1090,9 +1108,11 @@ next_entry(struct archive_read_disk *a, struct tree *t,
                }
 
                /* Find sparse data from the disk. */
-               if (archive_entry_hardlink(entry) == NULL &&
-                   (st->dwFileAttributes & FILE_ATTRIBUTE_SPARSE_FILE) != 0)
-                       r = setup_sparse_from_disk(a, entry, t->entry_fh);
+               if ((a->flags & ARCHIVE_READDISK_NO_SPARSE) == 0) {
+                       if (archive_entry_hardlink(entry) == NULL &&
+                           (st->dwFileAttributes & FILE_ATTRIBUTE_SPARSE_FILE) != 0)
+                               r = setup_sparse_from_disk(a, entry, t->entry_fh);
+               }
        }
        return (r);
 }
@@ -1300,7 +1320,7 @@ archive_read_disk_descend(struct archive *_a)
            ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
            "archive_read_disk_descend");
 
-       if (t->visit_type != TREE_REGULAR || !t->descend)
+       if (!archive_read_disk_can_descend(_a))
                return (ARCHIVE_OK);
 
        if (tree_current_is_physical_dir(t)) {
@@ -1550,6 +1570,9 @@ close_and_restore_time(HANDLE h, struct tree *t, struct restore_time *rt)
 {
        HANDLE handle;
        int r = 0;
+#if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
 
        if (h == INVALID_HANDLE_VALUE && AE_IFLNK == rt->filetype)
                return (0);
@@ -1563,8 +1586,16 @@ close_and_restore_time(HANDLE h, struct tree *t, struct restore_time *rt)
        if ((t->flags & needsRestoreTimes) == 0)
                return (r);
 
+#if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       ZeroMemory(&createExParams, sizeof(createExParams));
+       createExParams.dwSize = sizeof(createExParams);
+       createExParams.dwFileFlags = FILE_FLAG_BACKUP_SEMANTICS;
+       handle = CreateFile2(rt->full_path, FILE_WRITE_ATTRIBUTES,
+                   0, OPEN_EXISTING, &createExParams);
+#else
        handle = CreateFileW(rt->full_path, FILE_WRITE_ATTRIBUTES,
                    0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
+#endif
        if (handle == INVALID_HANDLE_VALUE) {
                errno = EINVAL;
                return (-1);
@@ -2049,11 +2080,24 @@ tree_current_file_information(struct tree *t, BY_HANDLE_FILE_INFORMATION *st,
        HANDLE h;
        int r;
        DWORD flag = FILE_FLAG_BACKUP_SEMANTICS;
-       
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
+
        if (sim_lstat && tree_current_is_physical_link(t))
                flag |= FILE_FLAG_OPEN_REPARSE_POINT;
-       h = CreateFileW(tree_current_access_path(t), 0, FILE_SHARE_READ, NULL,
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       ZeroMemory(&createExParams, sizeof(createExParams));
+       createExParams.dwSize = sizeof(createExParams);
+       createExParams.dwFileFlags = flag;
+       h = CreateFile2(tree_current_access_path(t), 0,
+           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+           OPEN_EXISTING, &createExParams);
+#else
+       h = CreateFileW(tree_current_access_path(t), 0,
+           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
            OPEN_EXISTING, flag, NULL);
+#endif
        if (h == INVALID_HANDLE_VALUE) {
                la_dosmaperr(GetLastError());
                t->tree_errno = errno;
@@ -2259,7 +2303,10 @@ archive_read_disk_entry_from_file(struct archive *_a,
                } else {
                        WIN32_FIND_DATAW findData;
                        DWORD flag, desiredAccess;
-       
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+                       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
+
                        h = FindFirstFileW(path, &findData);
                        if (h == INVALID_HANDLE_VALUE) {
                                la_dosmaperr(GetLastError());
@@ -2281,8 +2328,18 @@ archive_read_disk_entry_from_file(struct archive *_a,
                        } else
                                desiredAccess = GENERIC_READ;
 
-                       h = CreateFileW(path, desiredAccess, FILE_SHARE_READ, NULL,
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+                       ZeroMemory(&createExParams, sizeof(createExParams));
+                       createExParams.dwSize = sizeof(createExParams);
+                       createExParams.dwFileFlags = flag;
+                       h = CreateFile2(path, desiredAccess,
+                           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                           OPEN_EXISTING, &createExParams);
+#else
+                       h = CreateFileW(path, desiredAccess,
+                           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
                            OPEN_EXISTING, flag, NULL);
+#endif
                        if (h == INVALID_HANDLE_VALUE) {
                                la_dosmaperr(GetLastError());
                                archive_set_error(&a->archive, errno,
@@ -2343,8 +2400,19 @@ archive_read_disk_entry_from_file(struct archive *_a,
                if (fd >= 0) {
                        h = (HANDLE)_get_osfhandle(fd);
                } else {
-                       h = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ, NULL,
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+                       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+                       ZeroMemory(&createExParams, sizeof(createExParams));
+                       createExParams.dwSize = sizeof(createExParams);
+                       createExParams.dwFileFlags = FILE_FLAG_BACKUP_SEMANTICS;
+                       h = CreateFile2(path, GENERIC_READ,
+                           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+                           OPEN_EXISTING, &createExParams);
+#else
+                       h = CreateFileW(path, GENERIC_READ,
+                           FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
                            OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
+#endif
                        if (h == INVALID_HANDLE_VALUE) {
                                la_dosmaperr(GetLastError());
                                archive_set_error(&a->archive, errno,
@@ -2371,9 +2439,11 @@ archive_read_disk_entry_from_file(struct archive *_a,
                return (ARCHIVE_OK);
        }
 
-       r = setup_sparse_from_disk(a, entry, h);
-       if (fd < 0)
-               CloseHandle(h);
+       if ((a->flags & ARCHIVE_READDISK_NO_SPARSE) == 0) {
+               r = setup_sparse_from_disk(a, entry, h);
+               if (fd < 0)
+                       CloseHandle(h);
+       }
 
        return (r);
 }
index 101dae6..03719e8 100644 (file)
@@ -154,10 +154,10 @@ file_skip(struct archive *a, void *client_data, int64_t request)
 #ifdef __ANDROID__
         /* fileno() isn't safe on all platforms ... see above. */
        if (lseek(fileno(mine->f), skip, SEEK_CUR) < 0)
-#elif HAVE_FSEEKO
-       if (fseeko(mine->f, skip, SEEK_CUR) != 0)
 #elif HAVE__FSEEKI64
        if (_fseeki64(mine->f, skip, SEEK_CUR) != 0)
+#elif HAVE_FSEEKO
+       if (fseeko(mine->f, skip, SEEK_CUR) != 0)
 #else
        if (fseek(mine->f, skip, SEEK_CUR) != 0)
 #endif
index c842e6f..383405d 100644 (file)
@@ -42,6 +42,16 @@ struct archive_read;
 struct archive_read_filter_bidder;
 struct archive_read_filter;
 
+struct archive_read_filter_bidder_vtable {
+       /* Taste the upstream filter to see if we handle this. */
+       int (*bid)(struct archive_read_filter_bidder *,
+           struct archive_read_filter *);
+       /* Initialize a newly-created filter. */
+       int (*init)(struct archive_read_filter *);
+       /* Release the bidder's configuration data. */
+       void (*free)(struct archive_read_filter_bidder *);
+};
+
 /*
  * How bidding works for filters:
  *   * The bid manager initializes the client-provided reader as the
@@ -62,16 +72,16 @@ struct archive_read_filter_bidder {
        void *data;
        /* Name of the filter */
        const char *name;
-       /* Taste the upstream filter to see if we handle this. */
-       int (*bid)(struct archive_read_filter_bidder *,
-           struct archive_read_filter *);
-       /* Initialize a newly-created filter. */
-       int (*init)(struct archive_read_filter *);
-       /* Set an option for the filter bidder. */
-       int (*options)(struct archive_read_filter_bidder *,
-           const char *key, const char *value);
-       /* Release the bidder's configuration data. */
-       int (*free)(struct archive_read_filter_bidder *);
+       const struct archive_read_filter_bidder_vtable *vtable;
+};
+
+struct archive_read_filter_vtable {
+       /* Return next block. */
+       ssize_t (*read)(struct archive_read_filter *, const void **);
+       /* Close (just this filter) and free(self). */
+       int (*close)(struct archive_read_filter *self);
+       /* Read any header metadata if available. */
+       int (*read_header)(struct archive_read_filter *self, struct archive_entry *entry);
 };
 
 /*
@@ -86,25 +96,14 @@ struct archive_read_filter {
        struct archive_read_filter_bidder *bidder; /* My bidder. */
        struct archive_read_filter *upstream; /* Who I read from. */
        struct archive_read *archive; /* Associated archive. */
-       /* Open a block for reading */
-       int (*open)(struct archive_read_filter *self);
-       /* Return next block. */
-       ssize_t (*read)(struct archive_read_filter *, const void **);
-       /* Skip forward this many bytes. */
-       int64_t (*skip)(struct archive_read_filter *self, int64_t request);
-       /* Seek to an absolute location. */
-       int64_t (*seek)(struct archive_read_filter *self, int64_t offset, int whence);
-       /* Close (just this filter) and free(self). */
-       int (*close)(struct archive_read_filter *self);
-       /* Function that handles switching from reading one block to the next/prev */
-       int (*sswitch)(struct archive_read_filter *self, unsigned int iindex);
-       /* Read any header metadata if available. */
-       int (*read_header)(struct archive_read_filter *self, struct archive_entry *entry);
+       const struct archive_read_filter_vtable *vtable;
        /* My private data. */
        void *data;
 
        const char      *name;
        int              code;
+       int              can_skip;
+       int              can_seek;
 
        /* Used by reblocking logic. */
        char            *buffer;
@@ -242,8 +241,10 @@ int        __archive_read_register_format(struct archive_read *a,
                int (*format_capabilities)(struct archive_read *),
                int (*has_encrypted_entries)(struct archive_read *));
 
-int __archive_read_get_bidder(struct archive_read *a,
-    struct archive_read_filter_bidder **bidder);
+int __archive_read_register_bidder(struct archive_read *a,
+               void *bidder_data,
+               const char *name,
+               const struct archive_read_filter_bidder_vtable *vtable);
 
 const void *__archive_read_ahead(struct archive_read *, size_t, ssize_t *);
 const void *__archive_read_filter_ahead(struct archive_read_filter *,
index b2db4cb..162b79d 100644 (file)
@@ -255,6 +255,27 @@ have been concatenated together.
 Without this option, only the contents of
 the first concatenated archive would be read.
 .El
+.It Format zip
+.Bl -tag -compact -width indent
+.It Cm compat-2x
+Libarchive 2.x incorrectly encoded Unicode filenames on
+some platforms.
+This option mimics the libarchive 2.x filename handling
+so that such archives can be read correctly.
+.It Cm hdrcharset
+The value is used as a character set name that will be
+used when translating file names.
+.It Cm ignorecrc32
+Skip the CRC32 check.
+Mostly used for testing.
+.It Cm mac-ext
+Support Mac OS metadata extension that records data in special
+files beginning with a period and underscore.
+Defaults to enabled on Mac OS, disabled on other platforms.
+Use
+.Cm !mac-ext
+to disable.
+.El
 .El
 .\"
 .Sh ERRORS
index 2e2eea6..2bd9b81 100644 (file)
@@ -112,37 +112,15 @@ static int
 archive_set_filter_option(struct archive *_a, const char *m, const char *o,
     const char *v)
 {
-       struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter *filter;
-       struct archive_read_filter_bidder *bidder;
-       int r, rv = ARCHIVE_WARN, matched_modules = 0;
-
-       for (filter = a->filter; filter != NULL; filter = filter->upstream) {
-               bidder = filter->bidder;
-               if (bidder == NULL)
-                       continue;
-               if (bidder->options == NULL)
-                       /* This bidder does not support option */
-                       continue;
-               if (m != NULL) {
-                       if (strcmp(filter->name, m) != 0)
-                               continue;
-                       ++matched_modules;
-               }
+       (void)_a; /* UNUSED */
+       (void)o; /* UNUSED */
+       (void)v; /* UNUSED */
 
-               r = bidder->options(bidder, o, v);
-
-               if (r == ARCHIVE_FATAL)
-                       return (ARCHIVE_FATAL);
-
-               if (r == ARCHIVE_OK)
-                       rv = ARCHIVE_OK;
-       }
        /* If the filter name didn't match, return a special code for
         * _archive_set_option[s]. */
-       if (m != NULL && matched_modules == 0)
+       if (m != NULL)
                return ARCHIVE_WARN - 1;
-       return (rv);
+       return ARCHIVE_WARN;
 }
 
 static int
index 3885a7c..9158e66 100644 (file)
@@ -70,7 +70,6 @@ static int    bzip2_filter_close(struct archive_read_filter *);
  */
 static int     bzip2_reader_bid(struct archive_read_filter_bidder *, struct archive_read_filter *);
 static int     bzip2_reader_init(struct archive_read_filter *);
-static int     bzip2_reader_free(struct archive_read_filter_bidder *);
 
 #if ARCHIVE_VERSION_NUMBER < 4000000
 /* Deprecated; remove in libarchive 4.0 */
@@ -81,24 +80,21 @@ archive_read_support_compression_bzip2(struct archive *a)
 }
 #endif
 
+static const struct archive_read_filter_bidder_vtable
+bzip2_bidder_vtable = {
+       .bid = bzip2_reader_bid,
+       .init = bzip2_reader_init,
+};
+
 int
 archive_read_support_filter_bzip2(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *reader;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_bzip2");
 
-       if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, "bzip2",
+                               &bzip2_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       reader->data = NULL;
-       reader->name = "bzip2";
-       reader->bid = bzip2_reader_bid;
-       reader->init = bzip2_reader_init;
-       reader->options = NULL;
-       reader->free = bzip2_reader_free;
 #if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR)
        return (ARCHIVE_OK);
 #else
@@ -108,12 +104,6 @@ archive_read_support_filter_bzip2(struct archive *_a)
 #endif
 }
 
-static int
-bzip2_reader_free(struct archive_read_filter_bidder *self){
-       (void)self; /* UNUSED */
-       return (ARCHIVE_OK);
-}
-
 /*
  * Test whether we can handle this data.
  *
@@ -183,6 +173,12 @@ bzip2_reader_init(struct archive_read_filter *self)
 
 #else
 
+static const struct archive_read_filter_vtable
+bzip2_reader_vtable = {
+       .read = bzip2_filter_read,
+       .close = bzip2_filter_close,
+};
+
 /*
  * Setup the callbacks.
  */
@@ -209,9 +205,7 @@ bzip2_reader_init(struct archive_read_filter *self)
        self->data = state;
        state->out_block_size = out_block_size;
        state->out_block = out_block;
-       self->read = bzip2_filter_read;
-       self->skip = NULL; /* not supported */
-       self->close = bzip2_filter_close;
+       self->vtable = &bzip2_reader_vtable;
 
        return (ARCHIVE_OK);
 }
@@ -236,7 +230,7 @@ bzip2_filter_read(struct archive_read_filter *self, const void **p)
 
        /* Empty our output buffer. */
        state->stream.next_out = state->out_block;
-       state->stream.avail_out = state->out_block_size;
+       state->stream.avail_out = (uint32_t)state->out_block_size;
 
        /* Try to fill the output buffer. */
        for (;;) {
@@ -294,7 +288,7 @@ bzip2_filter_read(struct archive_read_filter *self, const void **p)
                        return (ARCHIVE_FATAL);
                }
                state->stream.next_in = (char *)(uintptr_t)read_buf;
-               state->stream.avail_in = ret;
+               state->stream.avail_in = (uint32_t)ret;
                /* There is no more data, return whatever we have. */
                if (ret == 0) {
                        state->eof = 1;
index e05132d..05b80a5 100644 (file)
@@ -133,7 +133,6 @@ struct private_data {
 
 static int     compress_bidder_bid(struct archive_read_filter_bidder *, struct archive_read_filter *);
 static int     compress_bidder_init(struct archive_read_filter *);
-static int     compress_bidder_free(struct archive_read_filter_bidder *);
 
 static ssize_t compress_filter_read(struct archive_read_filter *, const void **);
 static int     compress_filter_close(struct archive_read_filter *);
@@ -150,25 +149,19 @@ archive_read_support_compression_compress(struct archive *a)
 }
 #endif
 
+static const struct archive_read_filter_bidder_vtable
+compress_bidder_vtable = {
+       .bid = compress_bidder_bid,
+       .init = compress_bidder_init,
+};
+
 int
 archive_read_support_filter_compress(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_compress");
-
-       if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
-               return (ARCHIVE_FATAL);
 
-       bidder->data = NULL;
-       bidder->name = "compress (.Z)";
-       bidder->bid = compress_bidder_bid;
-       bidder->init = compress_bidder_init;
-       bidder->options = NULL;
-       bidder->free = compress_bidder_free;
-       return (ARCHIVE_OK);
+       return __archive_read_register_bidder(a, NULL, "compress (.Z)",
+                       &compress_bidder_vtable);
 }
 
 /*
@@ -205,6 +198,12 @@ compress_bidder_bid(struct archive_read_filter_bidder *self,
        return (bits_checked);
 }
 
+static const struct archive_read_filter_vtable
+compress_reader_vtable = {
+       .read = compress_filter_read,
+       .close = compress_filter_close,
+};
+
 /*
  * Setup the callbacks.
  */
@@ -233,9 +232,7 @@ compress_bidder_init(struct archive_read_filter *self)
        self->data = state;
        state->out_block_size = out_block_size;
        state->out_block = out_block;
-       self->read = compress_filter_read;
-       self->skip = NULL; /* not supported */
-       self->close = compress_filter_close;
+       self->vtable = &compress_reader_vtable;
 
        /* XXX MOVE THE FOLLOWING OUT OF INIT() XXX */
 
@@ -306,16 +303,6 @@ compress_filter_read(struct archive_read_filter *self, const void **pblock)
 }
 
 /*
- * Clean up the reader.
- */
-static int
-compress_bidder_free(struct archive_read_filter_bidder *self)
-{
-       self->data = NULL;
-       return (ARCHIVE_OK);
-}
-
-/*
  * Close and release the filter.
  */
 static int
index 84c86ae..d4d1737 100644 (file)
@@ -54,30 +54,21 @@ static int  grzip_bidder_bid(struct archive_read_filter_bidder *,
 static int     grzip_bidder_init(struct archive_read_filter *);
 
 
-static int
-grzip_reader_free(struct archive_read_filter_bidder *self)
-{
-       (void)self; /* UNUSED */
-       return (ARCHIVE_OK);
-}
+static const struct archive_read_filter_bidder_vtable
+grzip_bidder_vtable = {
+       .bid = grzip_bidder_bid,
+       .init = grzip_bidder_init,
+};
 
 int
 archive_read_support_filter_grzip(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *reader;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_grzip");
 
-       if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, NULL,
+                               &grzip_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       reader->data = NULL;
-       reader->bid = grzip_bidder_bid;
-       reader->init = grzip_bidder_init;
-       reader->options = NULL;
-       reader->free = grzip_reader_free;
        /* This filter always uses an external program. */
        archive_set_error(_a, ARCHIVE_ERRNO_MISC,
            "Using external grzip program for grzip decompression");
index 9fa9e2b..4135a63 100644 (file)
@@ -94,24 +94,21 @@ archive_read_support_compression_gzip(struct archive *a)
 }
 #endif
 
+static const struct archive_read_filter_bidder_vtable
+gzip_bidder_vtable = {
+       .bid = gzip_bidder_bid,
+       .init = gzip_bidder_init,
+};
+
 int
 archive_read_support_filter_gzip(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_gzip");
 
-       if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, "gzip",
+                               &gzip_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       bidder->data = NULL;
-       bidder->name = "gzip";
-       bidder->bid = gzip_bidder_bid;
-       bidder->init = gzip_bidder_init;
-       bidder->options = NULL;
-       bidder->free = NULL; /* No data, so no cleanup necessary. */
        /* Signal the extent of gzip support with the return value here. */
 #if HAVE_ZLIB_H
        return (ARCHIVE_OK);
@@ -291,6 +288,15 @@ gzip_read_header(struct archive_read_filter *self, struct archive_entry *entry)
        return (ARCHIVE_OK);
 }
 
+static const struct archive_read_filter_vtable
+gzip_reader_vtable = {
+       .read = gzip_filter_read,
+       .close = gzip_filter_close,
+#ifdef HAVE_ZLIB_H
+       .read_header = gzip_read_header,
+#endif
+};
+
 /*
  * Initialize the filter object.
  */
@@ -317,12 +323,7 @@ gzip_bidder_init(struct archive_read_filter *self)
        self->data = state;
        state->out_block_size = out_block_size;
        state->out_block = out_block;
-       self->read = gzip_filter_read;
-       self->skip = NULL; /* not supported */
-       self->close = gzip_filter_close;
-#ifdef HAVE_ZLIB_H
-       self->read_header = gzip_read_header;
-#endif
+       self->vtable = &gzip_reader_vtable;
 
        state->in_stream = 0; /* We're not actually within a stream yet. */
 
index c82a8e2..a238989 100644 (file)
@@ -53,31 +53,21 @@ static int  lrzip_bidder_bid(struct archive_read_filter_bidder *,
 static int     lrzip_bidder_init(struct archive_read_filter *);
 
 
-static int
-lrzip_reader_free(struct archive_read_filter_bidder *self)
-{
-       (void)self; /* UNUSED */
-       return (ARCHIVE_OK);
-}
+static const struct archive_read_filter_bidder_vtable
+lrzip_bidder_vtable = {
+       .bid = lrzip_bidder_bid,
+       .init = lrzip_bidder_init,
+};
 
 int
 archive_read_support_filter_lrzip(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *reader;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_lrzip");
 
-       if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, "lrzip",
+                               &lrzip_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       reader->data = NULL;
-       reader->name = "lrzip";
-       reader->bid = lrzip_bidder_bid;
-       reader->init = lrzip_bidder_init;
-       reader->options = NULL;
-       reader->free = lrzip_reader_free;
        /* This filter always uses an external program. */
        archive_set_error(_a, ARCHIVE_ERRNO_MISC,
            "Using external lrzip program for lrzip decompression");
index 43ee6c2..d0fc1a8 100644 (file)
@@ -99,7 +99,6 @@ static int    lz4_filter_close(struct archive_read_filter *);
  */
 static int     lz4_reader_bid(struct archive_read_filter_bidder *, struct archive_read_filter *);
 static int     lz4_reader_init(struct archive_read_filter *);
-static int     lz4_reader_free(struct archive_read_filter_bidder *);
 #if defined(HAVE_LIBLZ4)
 static ssize_t  lz4_filter_read_default_stream(struct archive_read_filter *,
                    const void **);
@@ -107,24 +106,21 @@ static ssize_t  lz4_filter_read_legacy_stream(struct archive_read_filter *,
                    const void **);
 #endif
 
+static const struct archive_read_filter_bidder_vtable
+lz4_bidder_vtable = {
+       .bid = lz4_reader_bid,
+       .init = lz4_reader_init,
+};
+
 int
 archive_read_support_filter_lz4(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *reader;
 
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_lz4");
-
-       if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, "lz4",
+                               &lz4_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       reader->data = NULL;
-       reader->name = "lz4";
-       reader->bid = lz4_reader_bid;
-       reader->init = lz4_reader_init;
-       reader->options = NULL;
-       reader->free = lz4_reader_free;
 #if defined(HAVE_LIBLZ4)
        return (ARCHIVE_OK);
 #else
@@ -134,12 +130,6 @@ archive_read_support_filter_lz4(struct archive *_a)
 #endif
 }
 
-static int
-lz4_reader_free(struct archive_read_filter_bidder *self){
-       (void)self; /* UNUSED */
-       return (ARCHIVE_OK);
-}
-
 /*
  * Test whether we can handle this data.
  *
@@ -218,6 +208,12 @@ lz4_reader_init(struct archive_read_filter *self)
 
 #else
 
+static const struct archive_read_filter_vtable
+lz4_reader_vtable = {
+       .read = lz4_filter_read,
+       .close = lz4_filter_close,
+};
+
 /*
  * Setup the callbacks.
  */
@@ -238,9 +234,7 @@ lz4_reader_init(struct archive_read_filter *self)
 
        self->data = state;
        state->stage = SELECT_STREAM;
-       self->read = lz4_filter_read;
-       self->skip = NULL; /* not supported */
-       self->close = lz4_filter_close;
+       self->vtable = &lz4_reader_vtable;
 
        return (ARCHIVE_OK);
 }
@@ -456,7 +450,9 @@ lz4_filter_read_descriptor(struct archive_read_filter *self)
        chsum = (chsum >> 8) & 0xff;
        chsum_verifier = read_buf[descriptor_bytes-1] & 0xff;
        if (chsum != chsum_verifier)
+#ifndef DONT_FAIL_ON_CRC_ERROR
                goto malformed_error;
+#endif
 
        __archive_read_filter_consume(self->upstream, descriptor_bytes);
 
@@ -527,7 +523,9 @@ lz4_filter_read_data_block(struct archive_read_filter *self, const void **p)
                unsigned int chsum_block =
                    archive_le32dec(read_buf + 4 + compressed_size);
                if (chsum != chsum_block)
+#ifndef DONT_FAIL_ON_CRC_ERROR
                        goto malformed_error;
+#endif
        }
 
 
@@ -586,7 +584,7 @@ lz4_filter_read_data_block(struct archive_read_filter *self, const void **p)
                    state->out_block + prefix64k, (int)compressed_size,
                    state->flags.block_maximum_size,
                    state->out_block,
-                   prefix64k);
+                   (int)prefix64k);
 #else
                uncompressed_size = LZ4_decompress_safe_withPrefix64k(
                    read_buf + 4,
@@ -658,10 +656,12 @@ lz4_filter_read_default_stream(struct archive_read_filter *self, const void **p)
                            state->xxh32_state);
                        state->xxh32_state = NULL;
                        if (checksum != checksum_stream) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
                                archive_set_error(&self->archive->archive,
                                    ARCHIVE_ERRNO_MISC,
                                    "lz4 stream checksum error");
                                return (ARCHIVE_FATAL);
+#endif
                        }
                } else if (ret > 0)
                        __archive_xxhash.XXH32_update(state->xxh32_state,
index a1c392f..4ebdd3b 100644 (file)
@@ -101,23 +101,21 @@ static int lzop_bidder_bid(struct archive_read_filter_bidder *,
     struct archive_read_filter *);
 static int lzop_bidder_init(struct archive_read_filter *);
 
+static const struct archive_read_filter_bidder_vtable
+lzop_bidder_vtable = {
+       .bid = lzop_bidder_bid,
+       .init = lzop_bidder_init,
+};
+
 int
 archive_read_support_filter_lzop(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *reader;
 
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_lzop");
-
-       if (__archive_read_get_bidder(a, &reader) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, NULL,
+                               &lzop_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       reader->data = NULL;
-       reader->bid = lzop_bidder_bid;
-       reader->init = lzop_bidder_init;
-       reader->options = NULL;
-       reader->free = NULL;
        /* Signal the extent of lzop support with the return value here. */
 #if defined(HAVE_LZO_LZOCONF_H) && defined(HAVE_LZO_LZO1X_H)
        return (ARCHIVE_OK);
@@ -171,6 +169,13 @@ lzop_bidder_init(struct archive_read_filter *self)
        return (r);
 }
 #else
+
+static const struct archive_read_filter_vtable
+lzop_reader_vtable = {
+       .read = lzop_filter_read,
+       .close = lzop_filter_close
+};
+
 /*
  * Initialize the filter object.
  */
@@ -190,9 +195,7 @@ lzop_bidder_init(struct archive_read_filter *self)
        }
 
        self->data = state;
-       self->read = lzop_filter_read;
-       self->skip = NULL; /* not supported */
-       self->close = lzop_filter_close;
+       self->vtable = &lzop_reader_vtable;
 
        return (ARCHIVE_OK);
 }
@@ -280,7 +283,9 @@ consume_header(struct archive_read_filter *self)
        else
                checksum = adler32(adler32(0, NULL, 0), p, len);
        if (archive_be32dec(p + len) != checksum)
+#ifndef DONT_FAIL_ON_CRC_ERROR
                goto corrupted;
+#endif
        __archive_read_filter_consume(self->upstream, len + 4);
        if (flags & EXTRA_FIELD) {
                /* Skip extra field */
index bf5b6f2..885b2c2 100644 (file)
@@ -98,7 +98,7 @@ struct program_bidder {
 static int     program_bidder_bid(struct archive_read_filter_bidder *,
                    struct archive_read_filter *upstream);
 static int     program_bidder_init(struct archive_read_filter *);
-static int     program_bidder_free(struct archive_read_filter_bidder *);
+static void    program_bidder_free(struct archive_read_filter_bidder *);
 
 /*
  * The actual filter needs to track input and output data.
@@ -123,43 +123,21 @@ static ssize_t    program_filter_read(struct archive_read_filter *,
 static int     program_filter_close(struct archive_read_filter *);
 static void    free_state(struct program_bidder *);
 
-static int
-set_bidder_signature(struct archive_read_filter_bidder *bidder,
-    struct program_bidder *state, const void *signature, size_t signature_len)
-{
-
-       if (signature != NULL && signature_len > 0) {
-               state->signature_len = signature_len;
-               state->signature = malloc(signature_len);
-               memcpy(state->signature, signature, signature_len);
-       }
-
-       /*
-        * Fill in the bidder object.
-        */
-       bidder->data = state;
-       bidder->bid = program_bidder_bid;
-       bidder->init = program_bidder_init;
-       bidder->options = NULL;
-       bidder->free = program_bidder_free;
-       return (ARCHIVE_OK);
-}
+static const struct archive_read_filter_bidder_vtable
+program_bidder_vtable = {
+       .bid = program_bidder_bid,
+       .init = program_bidder_init,
+       .free = program_bidder_free,
+};
 
 int
 archive_read_support_filter_program_signature(struct archive *_a,
     const char *cmd, const void *signature, size_t signature_len)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder;
        struct program_bidder *state;
 
        /*
-        * Get a bidder object from the read core.
-        */
-       if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
-               return (ARCHIVE_FATAL);
-
-       /*
         * Allocate our private state.
         */
        state = (struct program_bidder *)calloc(1, sizeof (*state));
@@ -169,20 +147,31 @@ archive_read_support_filter_program_signature(struct archive *_a,
        if (state->cmd == NULL)
                goto memerr;
 
-       return set_bidder_signature(bidder, state, signature, signature_len);
+       if (signature != NULL && signature_len > 0) {
+               state->signature_len = signature_len;
+               state->signature = malloc(signature_len);
+               memcpy(state->signature, signature, signature_len);
+       }
+
+       if (__archive_read_register_bidder(a, state, NULL,
+                               &program_bidder_vtable) != ARCHIVE_OK) {
+               free_state(state);
+               return (ARCHIVE_FATAL);
+       }
+       return (ARCHIVE_OK);
+
 memerr:
        free_state(state);
        archive_set_error(_a, ENOMEM, "Can't allocate memory");
        return (ARCHIVE_FATAL);
 }
 
-static int
+static void
 program_bidder_free(struct archive_read_filter_bidder *self)
 {
        struct program_bidder *state = (struct program_bidder *)self->data;
 
        free_state(state);
-       return (ARCHIVE_OK);
 }
 
 static void
@@ -393,6 +382,12 @@ child_read(struct archive_read_filter *self, char *buf, size_t buf_len)
        }
 }
 
+static const struct archive_read_filter_vtable
+program_reader_vtable = {
+       .read = program_filter_read,
+       .close = program_filter_close,
+};
+
 int
 __archive_read_program(struct archive_read_filter *self, const char *cmd)
 {
@@ -439,9 +434,7 @@ __archive_read_program(struct archive_read_filter *self, const char *cmd)
        }
 
        self->data = state;
-       self->read = program_filter_read;
-       self->skip = NULL;
-       self->close = program_filter_close;
+       self->vtable = &program_reader_vtable;
 
        /* XXX Check that we can read at least one byte? */
        return (ARCHIVE_OK);
index ddd6839..67a979c 100644 (file)
@@ -72,25 +72,19 @@ archive_read_support_compression_rpm(struct archive *a)
 }
 #endif
 
+static const struct archive_read_filter_bidder_vtable
+rpm_bidder_vtable = {
+       .bid = rpm_bidder_bid,
+       .init = rpm_bidder_init,
+};
+
 int
 archive_read_support_filter_rpm(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_rpm");
-
-       if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
-               return (ARCHIVE_FATAL);
 
-       bidder->data = NULL;
-       bidder->name = "rpm";
-       bidder->bid = rpm_bidder_bid;
-       bidder->init = rpm_bidder_init;
-       bidder->options = NULL;
-       bidder->free = NULL;
-       return (ARCHIVE_OK);
+       return __archive_read_register_bidder(a, NULL, "rpm",
+                       &rpm_bidder_vtable);
 }
 
 static int
@@ -133,6 +127,12 @@ rpm_bidder_bid(struct archive_read_filter_bidder *self,
        return (bits_checked);
 }
 
+static const struct archive_read_filter_vtable
+rpm_reader_vtable = {
+       .read = rpm_filter_read,
+       .close = rpm_filter_close,
+};
+
 static int
 rpm_bidder_init(struct archive_read_filter *self)
 {
@@ -140,9 +140,6 @@ rpm_bidder_init(struct archive_read_filter *self)
 
        self->code = ARCHIVE_FILTER_RPM;
        self->name = "rpm";
-       self->read = rpm_filter_read;
-       self->skip = NULL; /* not supported */
-       self->close = rpm_filter_close;
 
        rpm = (struct rpm *)calloc(sizeof(*rpm), 1);
        if (rpm == NULL) {
@@ -153,6 +150,7 @@ rpm_bidder_init(struct archive_read_filter *self)
 
        self->data = rpm;
        rpm->state = ST_LEAD;
+       self->vtable = &rpm_reader_vtable;
 
        return (ARCHIVE_OK);
 }
index 689c18c..cd79638 100644 (file)
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
 #endif
 
 #include "archive.h"
+#include "archive_entry.h"
 #include "archive_private.h"
 #include "archive_read_private.h"
 
@@ -57,12 +58,17 @@ struct uudecode {
 #define ST_UUEND       2
 #define ST_READ_BASE64 3
 #define ST_IGNORE      4
+       mode_t          mode;
+       int             mode_set;
+       char            *name;
 };
 
 static int     uudecode_bidder_bid(struct archive_read_filter_bidder *,
                    struct archive_read_filter *filter);
 static int     uudecode_bidder_init(struct archive_read_filter *);
 
+static int     uudecode_read_header(struct archive_read_filter *,
+                   struct archive_entry *entry);
 static ssize_t uudecode_filter_read(struct archive_read_filter *,
                    const void **);
 static int     uudecode_filter_close(struct archive_read_filter *);
@@ -76,25 +82,19 @@ archive_read_support_compression_uu(struct archive *a)
 }
 #endif
 
+static const struct archive_read_filter_bidder_vtable
+uudecode_bidder_vtable = {
+       .bid = uudecode_bidder_bid,
+       .init = uudecode_bidder_init,
+};
+
 int
 archive_read_support_filter_uu(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_uu");
-
-       if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
-               return (ARCHIVE_FATAL);
 
-       bidder->data = NULL;
-       bidder->name = "uu";
-       bidder->bid = uudecode_bidder_bid;
-       bidder->init = uudecode_bidder_init;
-       bidder->options = NULL;
-       bidder->free = NULL;
-       return (ARCHIVE_OK);
+       return __archive_read_register_bidder(a, NULL, "uu",
+                       &uudecode_bidder_vtable);
 }
 
 static const unsigned char ascii[256] = {
@@ -357,6 +357,13 @@ uudecode_bidder_bid(struct archive_read_filter_bidder *self,
        return (0);
 }
 
+static const struct archive_read_filter_vtable
+uudecode_reader_vtable = {
+       .read = uudecode_filter_read,
+       .close = uudecode_filter_close,
+       .read_header = uudecode_read_header
+};
+
 static int
 uudecode_bidder_init(struct archive_read_filter *self)
 {
@@ -366,9 +373,6 @@ uudecode_bidder_init(struct archive_read_filter *self)
 
        self->code = ARCHIVE_FILTER_UU;
        self->name = "uu";
-       self->read = uudecode_filter_read;
-       self->skip = NULL; /* not supported */
-       self->close = uudecode_filter_close;
 
        uudecode = (struct uudecode *)calloc(sizeof(*uudecode), 1);
        out_buff = malloc(OUT_BUFF_SIZE);
@@ -388,6 +392,9 @@ uudecode_bidder_init(struct archive_read_filter *self)
        uudecode->in_allocated = IN_BUFF_SIZE;
        uudecode->out_buff = out_buff;
        uudecode->state = ST_FIND_HEAD;
+       uudecode->mode_set = 0;
+       uudecode->name = NULL;
+       self->vtable = &uudecode_reader_vtable;
 
        return (ARCHIVE_OK);
 }
@@ -432,6 +439,22 @@ ensure_in_buff_size(struct archive_read_filter *self,
        return (ARCHIVE_OK);
 }
 
+static int
+uudecode_read_header(struct archive_read_filter *self, struct archive_entry *entry)
+{
+
+       struct uudecode *uudecode;
+       uudecode = (struct uudecode *)self->data;
+
+       if (uudecode->mode_set != 0)
+               archive_entry_set_mode(entry, S_IFREG | uudecode->mode);
+
+       if (uudecode->name != NULL)
+               archive_entry_set_pathname(entry, uudecode->name);
+
+       return (ARCHIVE_OK);
+}
+
 static ssize_t
 uudecode_filter_read(struct archive_read_filter *self, const void **buff)
 {
@@ -441,7 +464,7 @@ uudecode_filter_read(struct archive_read_filter *self, const void **buff)
        ssize_t avail_in, ravail;
        ssize_t used;
        ssize_t total;
-       ssize_t len, llen, nl;
+       ssize_t len, llen, nl, namelen;
 
        uudecode = (struct uudecode *)self->data;
 
@@ -546,6 +569,28 @@ read_more:
                                        uudecode->state = ST_READ_UU;
                                else
                                        uudecode->state = ST_READ_BASE64;
+                               uudecode->mode = (mode_t)(
+                                   ((int)(b[l] - '0') * 64) +
+                                   ((int)(b[l+1] - '0') * 8) +
+                                    (int)(b[l+2] - '0'));
+                               uudecode->mode_set = 1;
+                               namelen = len - nl - 4 - l;
+                               if (namelen > 1) {
+                                       if (uudecode->name != NULL)
+                                               free(uudecode->name);
+                                       uudecode->name = malloc(namelen + 1);
+                                       if (uudecode->name == NULL) {
+                                       archive_set_error(
+                                           &self->archive->archive,
+                                           ENOMEM,
+                                           "Can't allocate data for uudecode");
+                                               return (ARCHIVE_FATAL);
+                                       }
+                                       strncpy(uudecode->name,
+                                           (const char *)(b + l + 4),
+                                           namelen);
+                                       uudecode->name[namelen] = '\0';
+                               }
                        }
                        break;
                case ST_READ_UU:
@@ -678,6 +723,7 @@ uudecode_filter_close(struct archive_read_filter *self)
        uudecode = (struct uudecode *)self->data;
        free(uudecode->in_buff);
        free(uudecode->out_buff);
+       free(uudecode->name);
        free(uudecode);
 
        return (ARCHIVE_OK);
index 11807cf..e313d39 100644 (file)
@@ -108,24 +108,21 @@ archive_read_support_compression_xz(struct archive *a)
 }
 #endif
 
+static const struct archive_read_filter_bidder_vtable
+xz_bidder_vtable = {
+       .bid = xz_bidder_bid,
+       .init = xz_bidder_init,
+};
+
 int
 archive_read_support_filter_xz(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_xz");
 
-       if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, "xz",
+                               &xz_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       bidder->data = NULL;
-       bidder->name = "xz";
-       bidder->bid = xz_bidder_bid;
-       bidder->init = xz_bidder_init;
-       bidder->options = NULL;
-       bidder->free = NULL;
 #if HAVE_LZMA_H && HAVE_LIBLZMA
        return (ARCHIVE_OK);
 #else
@@ -143,24 +140,21 @@ archive_read_support_compression_lzma(struct archive *a)
 }
 #endif
 
+static const struct archive_read_filter_bidder_vtable
+lzma_bidder_vtable = {
+       .bid = lzma_bidder_bid,
+       .init = lzma_bidder_init,
+};
+
 int
 archive_read_support_filter_lzma(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_lzma");
 
-       if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, "lzma",
+                               &lzma_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       bidder->data = NULL;
-       bidder->name = "lzma";
-       bidder->bid = lzma_bidder_bid;
-       bidder->init = lzma_bidder_init;
-       bidder->options = NULL;
-       bidder->free = NULL;
 #if HAVE_LZMA_H && HAVE_LIBLZMA
        return (ARCHIVE_OK);
 #else
@@ -179,24 +173,21 @@ archive_read_support_compression_lzip(struct archive *a)
 }
 #endif
 
+static const struct archive_read_filter_bidder_vtable
+lzip_bidder_vtable = {
+       .bid = lzip_bidder_bid,
+       .init = lzip_bidder_init,
+};
+
 int
 archive_read_support_filter_lzip(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_lzip");
 
-       if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, "lzip",
+                               &lzip_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       bidder->data = NULL;
-       bidder->name = "lzip";
-       bidder->bid = lzip_bidder_bid;
-       bidder->init = lzip_bidder_init;
-       bidder->options = NULL;
-       bidder->free = NULL;
 #if HAVE_LZMA_H && HAVE_LIBLZMA
        return (ARCHIVE_OK);
 #else
@@ -293,8 +284,8 @@ lzma_bidder_bid(struct archive_read_filter_bidder *self,
        /* Second through fifth bytes are dictionary size, stored in
         * little-endian order. The minimum dictionary size is
         * 1 << 12(4KiB) which the lzma of LZMA SDK uses with option
-        * -d12 and the maximum dictionary size is 1 << 27(128MiB)
-        * which the one uses with option -d27.
+        * -d12 and the maximum dictionary size is 1 << 29(512MiB)
+        * which the one uses with option -d29.
         * NOTE: A comment of LZMA SDK source code says this dictionary
         * range is from 1 << 12 to 1 << 30. */
        dicsize = archive_le32dec(buffer+1);
@@ -377,7 +368,7 @@ lzip_has_member(struct archive_read_filter *filter)
 
        /* Dictionary size. */
        log2dic = buffer[5] & 0x1f;
-       if (log2dic < 12 || log2dic > 27)
+       if (log2dic < 12 || log2dic > 29)
                return (0);
        bits_checked += 8;
 
@@ -470,6 +461,12 @@ set_error(struct archive_read_filter *self, int ret)
        }
 }
 
+static const struct archive_read_filter_vtable
+xz_lzma_reader_vtable = {
+       .read = xz_filter_read,
+       .close = xz_filter_close,
+};
+
 /*
  * Setup the callbacks.
  */
@@ -494,9 +491,7 @@ xz_lzma_bidder_init(struct archive_read_filter *self)
        self->data = state;
        state->out_block_size = out_block_size;
        state->out_block = out_block;
-       self->read = xz_filter_read;
-       self->skip = NULL; /* not supported */
-       self->close = xz_filter_close;
+       self->vtable = &xz_lzma_reader_vtable;
 
        state->stream.avail_in = 0;
 
@@ -562,7 +557,7 @@ lzip_init(struct archive_read_filter *self)
 
        /* Get dictionary size. */
        log2dic = h[5] & 0x1f;
-       if (log2dic < 12 || log2dic > 27)
+       if (log2dic < 12 || log2dic > 29)
                return (ARCHIVE_FATAL);
        dicsize = 1U << log2dic;
        if (log2dic > 12)
@@ -617,9 +612,11 @@ lzip_tail(struct archive_read_filter *self)
        /* Check the crc32 value of the uncompressed data of the current
         * member */
        if (state->crc32 != archive_le32dec(f)) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
                archive_set_error(&self->archive->archive, ARCHIVE_ERRNO_MISC,
                    "Lzip: CRC32 error");
                return (ARCHIVE_FAILED);
+#endif
        }
 
        /* Check the uncompressed size of the current member */
index af7eeb7..1959b5a 100644 (file)
@@ -79,24 +79,21 @@ static int  zstd_bidder_bid(struct archive_read_filter_bidder *,
                    struct archive_read_filter *);
 static int     zstd_bidder_init(struct archive_read_filter *);
 
+static const struct archive_read_filter_bidder_vtable
+zstd_bidder_vtable = {
+       .bid = zstd_bidder_bid,
+       .init = zstd_bidder_init,
+};
+
 int
 archive_read_support_filter_zstd(struct archive *_a)
 {
        struct archive_read *a = (struct archive_read *)_a;
-       struct archive_read_filter_bidder *bidder;
-
-       archive_check_magic(_a, ARCHIVE_READ_MAGIC,
-           ARCHIVE_STATE_NEW, "archive_read_support_filter_zstd");
 
-       if (__archive_read_get_bidder(a, &bidder) != ARCHIVE_OK)
+       if (__archive_read_register_bidder(a, NULL, "zstd",
+                               &zstd_bidder_vtable) != ARCHIVE_OK)
                return (ARCHIVE_FATAL);
 
-       bidder->data = NULL;
-       bidder->name = "zstd";
-       bidder->bid = zstd_bidder_bid;
-       bidder->init = zstd_bidder_init;
-       bidder->options = NULL;
-       bidder->free = NULL;
 #if HAVE_ZSTD_H && HAVE_LIBZSTD
        return (ARCHIVE_OK);
 #else
@@ -118,9 +115,9 @@ zstd_bidder_bid(struct archive_read_filter_bidder *self,
        unsigned prefix;
 
        /* Zstd frame magic values */
-       const unsigned zstd_magic = 0xFD2FB528U;
-       const unsigned zstd_magic_skippable_start = 0x184D2A50U;
-       const unsigned zstd_magic_skippable_mask = 0xFFFFFFF0;
+       unsigned zstd_magic = 0xFD2FB528U;
+       unsigned zstd_magic_skippable_start = 0x184D2A50U;
+       unsigned zstd_magic_skippable_mask = 0xFFFFFFF0;
 
        (void) self; /* UNUSED */
 
@@ -160,6 +157,12 @@ zstd_bidder_init(struct archive_read_filter *self)
 
 #else
 
+static const struct archive_read_filter_vtable
+zstd_reader_vtable = {
+       .read = zstd_filter_read,
+       .close = zstd_filter_close,
+};
+
 /*
  * Initialize the filter object
  */
@@ -167,7 +170,7 @@ static int
 zstd_bidder_init(struct archive_read_filter *self)
 {
        struct private_data *state;
-       const size_t out_block_size = ZSTD_DStreamOutSize();
+       size_t out_block_size = ZSTD_DStreamOutSize();
        void *out_block;
        ZSTD_DStream *dstream;
 
@@ -192,9 +195,7 @@ zstd_bidder_init(struct archive_read_filter *self)
        state->out_block_size = out_block_size;
        state->out_block = out_block;
        state->dstream = dstream;
-       self->read = zstd_filter_read;
-       self->skip = NULL; /* not supported */
-       self->close = zstd_filter_close;
+       self->vtable = &zstd_reader_vtable;
 
        state->eof = 0;
        state->in_frame = 0;
@@ -210,6 +211,7 @@ zstd_filter_read(struct archive_read_filter *self, const void **p)
        ssize_t avail_in;
        ZSTD_outBuffer out;
        ZSTD_inBuffer in;
+       size_t ret;
 
        state = (struct private_data *)self->data;
 
@@ -218,7 +220,7 @@ zstd_filter_read(struct archive_read_filter *self, const void **p)
        /* Try to fill the output buffer. */
        while (out.pos < out.size && !state->eof) {
                if (!state->in_frame) {
-                       const size_t ret = ZSTD_initDStream(state->dstream);
+                       ret = ZSTD_initDStream(state->dstream);
                        if (ZSTD_isError(ret)) {
                                archive_set_error(&self->archive->archive,
                                    ARCHIVE_ERRNO_MISC,
@@ -248,8 +250,7 @@ zstd_filter_read(struct archive_read_filter *self, const void **p)
                in.pos = 0;
 
                {
-                       const size_t ret =
-                           ZSTD_decompressStream(state->dstream, &out, &in);
+                       ret = ZSTD_decompressStream(state->dstream, &out, &in);
 
                        if (ZSTD_isError(ret)) {
                                archive_set_error(&self->archive->archive,
index 63cbb7d..051082b 100644 (file)
@@ -41,6 +41,9 @@ __FBSDID("$FreeBSD$");
 #ifdef HAVE_ZLIB_H
 #include <zlib.h>
 #endif
+#ifdef HAVE_ZSTD_H
+#include <zstd.h>
+#endif
 
 #include "archive.h"
 #include "archive_entry.h"
@@ -80,8 +83,11 @@ __FBSDID("$FreeBSD$");
 #define _7Z_IA64       0x03030401
 #define _7Z_ARM                0x03030501
 #define _7Z_ARMTHUMB   0x03030701
+#define _7Z_ARM64      0xa
 #define _7Z_SPARC      0x03030805
 
+#define _7Z_ZSTD       0x4F71101 /* Copied from https://github.com/mcmilk/7-Zip-zstd.git */
+
 /*
  * 7-Zip header property IDs.
  */
@@ -110,6 +116,30 @@ __FBSDID("$FreeBSD$");
 #define kEncodedHeader         0x17
 #define kDummy                 0x19
 
+// Check that some windows file attribute constants are defined.
+// Reference: https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants
+#ifndef FILE_ATTRIBUTE_READONLY
+#define FILE_ATTRIBUTE_READONLY 0x00000001
+#endif
+
+#ifndef FILE_ATTRIBUTE_HIDDEN
+#define FILE_ATTRIBUTE_HIDDEN 0x00000002
+#endif
+
+#ifndef FILE_ATTRIBUTE_SYSTEM
+#define FILE_ATTRIBUTE_SYSTEM 0x00000004
+#endif
+
+#ifndef FILE_ATTRIBUTE_DIRECTORY
+#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
+#endif
+
+// This value is defined in 7zip with the comment "trick for Unix".
+//
+// 7z archives created on unix have this bit set in the high 16 bits of
+// the attr field along with the unix permissions.
+#define FILE_ATTRIBUTE_UNIX_EXTENSION 0x8000
+
 struct _7z_digests {
        unsigned char   *defineds;
        uint32_t        *digests;
@@ -278,6 +308,11 @@ struct _7zip {
        z_stream                 stream;
        int                      stream_valid;
 #endif
+       /* Decoding Zstandard data. */
+#if HAVE_ZSTD_H
+       ZSTD_DStream             *zstd_dstream;
+       int                      zstdstream_valid;
+#endif
        /* Decoding PPMd data. */
        int                      ppmd7_stat;
        CPpmd7                   ppmd7_context;
@@ -287,6 +322,7 @@ struct _7zip {
                const unsigned char     *next_in;
                int64_t                  avail_in;
                int64_t                  total_in;
+               int64_t                  stream_in;
                unsigned char           *next_out;
                int64_t                  avail_out;
                int64_t                  total_out;
@@ -396,6 +432,9 @@ static int  setup_decode_folder(struct archive_read *, struct _7z_folder *,
                    int);
 static void    x86_Init(struct _7zip *);
 static size_t  x86_Convert(struct _7zip *, uint8_t *, size_t);
+static void    arm_Init(struct _7zip *);
+static size_t  arm_Convert(struct _7zip *, uint8_t *, size_t);
+static size_t  arm64_Convert(struct _7zip *, uint8_t *, size_t);
 static ssize_t         Bcj2_Decode(struct _7zip *, uint8_t *, size_t);
 
 
@@ -724,6 +763,37 @@ archive_read_format_7zip_read_header(struct archive_read *a,
                archive_entry_set_size(entry, 0);
        }
 
+       // These attributes are supported by the windows implementation of archive_write_disk.
+       const int supported_attrs = FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM;
+
+       if (zip_entry->attr & supported_attrs) {
+               char *fflags_text, *ptr;
+               /* allocate for "rdonly,hidden,system," */
+               fflags_text = malloc(22 * sizeof(char));
+               if (fflags_text != NULL) {
+                       ptr = fflags_text; 
+                       if (zip_entry->attr & FILE_ATTRIBUTE_READONLY) { 
+                       strcpy(ptr, "rdonly,"); 
+                       ptr = ptr + 7; 
+               } 
+               if (zip_entry->attr & FILE_ATTRIBUTE_HIDDEN) { 
+                       strcpy(ptr, "hidden,"); 
+                       ptr = ptr + 7; 
+               } 
+               if (zip_entry->attr & FILE_ATTRIBUTE_SYSTEM) { 
+                       strcpy(ptr, "system,"); 
+                       ptr = ptr + 7; 
+               } 
+               if (ptr > fflags_text) { 
+                       /* Delete trailing comma */ 
+                       *(ptr - 1) = '\0'; 
+                       archive_entry_copy_fflags_text(entry, 
+                               fflags_text); 
+               } 
+               free(fflags_text); 
+               }
+       }
+
        /* If there's no body, force read_data() to return EOF immediately. */
        if (zip->entry_bytes_remaining < 1)
                zip->end_of_entry = 1;
@@ -775,7 +845,7 @@ archive_read_format_7zip_read_header(struct archive_read *a,
        }
 
        /* Set up a more descriptive format name. */
-       sprintf(zip->format_name, "7-Zip");
+       snprintf(zip->format_name, sizeof(zip->format_name), "7-Zip");
        a->archive.archive_format_name = zip->format_name;
 
        return (ret);
@@ -986,15 +1056,30 @@ ppmd_read(void *p)
        struct _7zip *zip = (struct _7zip *)(a->format->data);
        Byte b;
 
-       if (zip->ppstream.avail_in == 0) {
-               archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
-                   "Truncated RAR file data");
-               zip->ppstream.overconsumed = 1;
-               return (0);
+       if (zip->ppstream.avail_in <= 0) {
+               /*
+                * Ppmd7_DecodeSymbol might require reading multiple bytes
+                * and we are on boundary;
+                * last resort to read using __archive_read_ahead.
+                */
+               ssize_t bytes_avail = 0;
+               const uint8_t* data = __archive_read_ahead(a,
+                   zip->ppstream.stream_in+1, &bytes_avail);
+               if(bytes_avail < zip->ppstream.stream_in+1) {
+                       archive_set_error(&a->archive,
+                           ARCHIVE_ERRNO_FILE_FORMAT,
+                           "Truncated 7z file data");
+                       zip->ppstream.overconsumed = 1;
+                       return (0);
+               }
+               zip->ppstream.next_in++;
+               b = data[zip->ppstream.stream_in];
+       } else {
+               b = *zip->ppstream.next_in++;
        }
-       b = *zip->ppstream.next_in++;
        zip->ppstream.avail_in--;
        zip->ppstream.total_in++;
+       zip->ppstream.stream_in++;
        return (b);
 }
 
@@ -1011,10 +1096,13 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
        case _7Z_COPY:
        case _7Z_BZ2:
        case _7Z_DEFLATE:
+       case _7Z_ZSTD:
        case _7Z_PPMD:
                if (coder2 != NULL) {
                        if (coder2->codec != _7Z_X86 &&
-                           coder2->codec != _7Z_X86_BCJ2) {
+                           coder2->codec != _7Z_X86_BCJ2 &&
+                           coder2->codec != _7Z_ARM &&
+                           coder2->codec != _7Z_ARM64) {
                                archive_set_error(&a->archive,
                                    ARCHIVE_ERRNO_MISC,
                                    "Unsupported filter %lx for %lx",
@@ -1025,6 +1113,8 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
                        zip->bcj_state = 0;
                        if (coder2->codec == _7Z_X86)
                                x86_Init(zip);
+                       else if (coder2->codec == _7Z_ARM)
+                               arm_Init(zip);
                }
                break;
        default:
@@ -1121,6 +1211,12 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
                                filters[fi].id = LZMA_FILTER_ARMTHUMB;
                                fi++;
                                break;
+#ifdef LZMA_FILTER_ARM64
+                       case _7Z_ARM64:
+                               filters[fi].id = LZMA_FILTER_ARM64;
+                               fi++;
+                               break;
+#endif
                        case _7Z_SPARC:
                                filters[fi].id = LZMA_FILTER_SPARC;
                                fi++;
@@ -1206,6 +1302,22 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
                    "BZ2 codec is unsupported");
                return (ARCHIVE_FAILED);
 #endif
+       case _7Z_ZSTD:
+       {
+#if defined(HAVE_ZSTD_H)
+               if (zip->zstdstream_valid) {
+                       ZSTD_freeDStream(zip->zstd_dstream);
+                       zip->zstdstream_valid = 0;
+               }
+               zip->zstd_dstream = ZSTD_createDStream();
+               zip->zstdstream_valid = 1;
+               break;
+#else
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                       "ZSTD codec is unsupported");
+               return (ARCHIVE_FAILED);
+#endif
+       }
        case _7Z_DEFLATE:
 #ifdef HAVE_ZLIB_H
                if (zip->stream_valid)
@@ -1276,6 +1388,7 @@ init_decompression(struct archive_read *a, struct _7zip *zip,
        case _7Z_IA64:
        case _7Z_ARM:
        case _7Z_ARMTHUMB:
+       case _7Z_ARM64:
        case _7Z_SPARC:
        case _7Z_DELTA:
                archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -1420,9 +1533,9 @@ decompress(struct archive_read *a, struct _7zip *zip,
 #if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR)
        case _7Z_BZ2:
                zip->bzstream.next_in = (char *)(uintptr_t)t_next_in;
-               zip->bzstream.avail_in = t_avail_in;
+               zip->bzstream.avail_in = (uint32_t)t_avail_in;
                zip->bzstream.next_out = (char *)(uintptr_t)t_next_out;
-               zip->bzstream.avail_out = t_avail_out;
+               zip->bzstream.avail_out = (uint32_t)t_avail_out;
                r = BZ2_bzDecompress(&(zip->bzstream));
                switch (r) {
                case BZ_STREAM_END: /* Found end of stream. */
@@ -1472,6 +1585,22 @@ decompress(struct archive_read *a, struct _7zip *zip,
                t_avail_out = zip->stream.avail_out;
                break;
 #endif
+#ifdef HAVE_ZSTD_H
+       case _7Z_ZSTD:
+       {
+               ZSTD_inBuffer input = { t_next_in, t_avail_in, 0 }; // src, size, pos
+               ZSTD_outBuffer output = { t_next_out, t_avail_out, 0 }; // dst, size, pos
+
+               size_t const zret = ZSTD_decompressStream(zip->zstd_dstream, &output, &input);
+               if (ZSTD_isError(zret)) {
+                       archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Zstd decompression failed: %s", ZSTD_getErrorName(zret));
+                       return ARCHIVE_FAILED;
+               }
+               t_avail_in -= input.pos;
+               t_avail_out -= output.pos;
+               break;
+       }
+#endif
        case _7Z_PPMD:
        {
                uint64_t flush_bytes;
@@ -1485,6 +1614,7 @@ decompress(struct archive_read *a, struct _7zip *zip,
                }
                zip->ppstream.next_in = t_next_in;
                zip->ppstream.avail_in = t_avail_in;
+               zip->ppstream.stream_in = 0;
                zip->ppstream.next_out = t_next_out;
                zip->ppstream.avail_out = t_avail_out;
                if (zip->ppmd7_stat == 0) {
@@ -1555,16 +1685,23 @@ decompress(struct archive_read *a, struct _7zip *zip,
        /*
         * Decord BCJ.
         */
-       if (zip->codec != _7Z_LZMA2 && zip->codec2 == _7Z_X86) {
-               size_t l = x86_Convert(zip, buff, *outbytes);
-               zip->odd_bcj_size = *outbytes - l;
-               if (zip->odd_bcj_size > 0 && zip->odd_bcj_size <= 4 &&
-                   o_avail_in && ret != ARCHIVE_EOF) {
-                       memcpy(zip->odd_bcj, ((unsigned char *)buff) + l,
-                           zip->odd_bcj_size);
-                       *outbytes = l;
-               } else
-                       zip->odd_bcj_size = 0;
+       if (zip->codec != _7Z_LZMA2) {
+               if (zip->codec2 == _7Z_X86) {
+                       size_t l = x86_Convert(zip, buff, *outbytes);
+
+                       zip->odd_bcj_size = *outbytes - l;
+                       if (zip->odd_bcj_size > 0 && zip->odd_bcj_size <= 4 &&
+                       o_avail_in && ret != ARCHIVE_EOF) {
+                               memcpy(zip->odd_bcj, ((unsigned char *)buff) + l,
+                               zip->odd_bcj_size);
+                               *outbytes = l;
+                       } else
+                               zip->odd_bcj_size = 0;
+               } else if (zip->codec2 == _7Z_ARM) {
+                       *outbytes = arm_Convert(zip, buff, *outbytes);
+               } else if (zip->codec2 == _7Z_ARM64) {
+                       *outbytes = arm64_Convert(zip, buff, *outbytes);
+               }
        }
 
        /*
@@ -2585,6 +2722,28 @@ read_Header(struct archive_read *a, struct _7z_header_info *h,
                        entries[i].flg |= HAS_STREAM;
                /* The high 16 bits of attributes is a posix file mode. */
                entries[i].mode = entries[i].attr >> 16;
+
+               if (!(entries[i].attr & FILE_ATTRIBUTE_UNIX_EXTENSION)) {
+                       // Only windows permissions specified for this entry. Translate to
+                       // reasonable corresponding unix permissions.
+
+                       if (entries[i].attr & FILE_ATTRIBUTE_DIRECTORY) {
+                               if (entries[i].attr & FILE_ATTRIBUTE_READONLY) {
+                                       // Read-only directory.
+                                       entries[i].mode = AE_IFDIR | 0555;
+                               } else {
+                                       // Read-write directory.
+                                       entries[i].mode = AE_IFDIR | 0755;
+                               }
+                       } else if (entries[i].attr & FILE_ATTRIBUTE_READONLY) {
+                               // Readonly file.
+                               entries[i].mode = AE_IFREG | 0444;
+                       } else {
+                               // Assume read-write file.
+                               entries[i].mode = AE_IFREG | 0644;
+                       }
+               }
+
                if (entries[i].flg & HAS_STREAM) {
                        if ((size_t)sindex >= si->ss.unpack_streams)
                                return (-1);
@@ -2625,7 +2784,7 @@ read_Header(struct archive_read *a, struct _7z_header_info *h,
                        }
                        entries[i].ssIndex = -1;
                }
-               if (entries[i].attr & 0x01)
+               if (entries[i].attr & FILE_ATTRIBUTE_READONLY)
                        entries[i].mode &= ~0222;/* Read only. */
 
                if ((entries[i].flg & HAS_STREAM) == 0 && indexInFolder == 0) {
@@ -2840,8 +2999,10 @@ slurp_central_directory(struct archive_read *a, struct _7zip *zip,
        /* CRC check. */
        if (crc32(0, (const unsigned char *)p + 12, 20)
            != archive_le32dec(p + 8)) {
+#ifdef DONT_FAIL_ON_CRC_ERROR
                archive_set_error(&a->archive, -1, "Header CRC error");
                return (ARCHIVE_FATAL);
+#endif
        }
 
        next_header_offset = archive_le64dec(p + 12);
@@ -2891,8 +3052,10 @@ slurp_central_directory(struct archive_read *a, struct _7zip *zip,
                /* Check the EncodedHeader CRC.*/
                if (r == 0 && zip->header_crc32 != next_header_crc) {
                        archive_set_error(&a->archive, -1,
+#ifndef DONT_FAIL_ON_CRC_ERROR
                            "Damaged 7-Zip archive");
                        r = -1;
+#endif
                }
                if (r == 0) {
                        if (zip->si.ci.folders[0].digest_defined)
@@ -2943,9 +3106,11 @@ slurp_central_directory(struct archive_read *a, struct _7zip *zip,
 
                /* Check the Header CRC.*/
                if (check_header_crc && zip->header_crc32 != next_header_crc) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
                        archive_set_error(&a->archive, -1,
                            "Malformed 7-Zip archive");
                        return (ARCHIVE_FATAL);
+#endif
                }
                break;
        default:
@@ -3704,6 +3869,116 @@ x86_Convert(struct _7zip *zip, uint8_t *data, size_t size)
        return (bufferPos);
 }
 
+static void
+arm_Init(struct _7zip *zip)
+{
+       zip->bcj_ip = 8;
+}
+
+static size_t
+arm_Convert(struct _7zip *zip, uint8_t *buf, size_t size)
+{
+       // This function was adapted from
+       // static size_t bcj_arm(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
+       // in https://git.tukaani.org/xz-embedded.git
+
+       /*
+        * Branch/Call/Jump (BCJ) filter decoders
+        *
+        * Authors: Lasse Collin <lasse.collin@tukaani.org>
+        *          Igor Pavlov <https://7-zip.org/>
+        *
+        * This file has been put into the public domain.
+        * You can do whatever you want with this file.
+        */
+
+       size_t i;
+       uint32_t addr;
+
+       for (i = 0; i + 4 <= size; i += 4) {
+               if (buf[i + 3] == 0xEB) {
+                       // Calculate the transformed addr.
+                       addr = (uint32_t)buf[i] | ((uint32_t)buf[i + 1] << 8)
+                               | ((uint32_t)buf[i + 2] << 16);
+                       addr <<= 2;
+                       addr -= zip->bcj_ip + (uint32_t)i;
+                       addr >>= 2;
+
+                       // Store the transformed addr in buf.
+                       buf[i] = (uint8_t)addr;
+                       buf[i + 1] = (uint8_t)(addr >> 8);
+                       buf[i + 2] = (uint8_t)(addr >> 16);
+               }
+       }
+
+       zip->bcj_ip += (uint32_t)i;
+
+       return i;
+}
+
+static size_t
+arm64_Convert(struct _7zip *zip, uint8_t *buf, size_t size)
+{
+       // This function was adapted from
+       // static size_t bcj_arm64(struct xz_dec_bcj *s, uint8_t *buf, size_t size)
+       // in https://git.tukaani.org/xz-embedded.git
+
+       /*
+        * Branch/Call/Jump (BCJ) filter decoders
+        *
+        * Authors: Lasse Collin <lasse.collin@tukaani.org>
+        *          Igor Pavlov <https://7-zip.org/>
+        *
+        * This file has been put into the public domain.
+        * You can do whatever you want with this file.
+        */
+
+       size_t i;
+       uint32_t instr;
+       uint32_t addr;
+
+       for (i = 0; i + 4 <= size; i += 4) {
+               instr = (uint32_t)buf[i]
+                       | ((uint32_t)buf[i+1] << 8)
+                       | ((uint32_t)buf[i+2] << 16)
+                       | ((uint32_t)buf[i+3] << 24);
+
+               if ((instr >> 26) == 0x25) {
+                       /* BL instruction */
+                       addr = instr - ((zip->bcj_ip + (uint32_t)i) >> 2);
+                       instr = 0x94000000 | (addr & 0x03FFFFFF);
+
+                       buf[i]   = (uint8_t)instr;
+                       buf[i+1] = (uint8_t)(instr >> 8);
+                       buf[i+2] = (uint8_t)(instr >> 16);
+                       buf[i+3] = (uint8_t)(instr >> 24);
+               } else if ((instr & 0x9F000000) == 0x90000000) {
+                       /* ADRP instruction */
+                       addr = ((instr >> 29) & 3) | ((instr >> 3) & 0x1FFFFC);
+
+                       /* Only convert values in the range +/-512 MiB. */
+                       if ((addr + 0x020000) & 0x1C0000)
+                               continue;
+
+                       addr -= (zip->bcj_ip + (uint32_t)i) >> 12;
+
+                       instr &= 0x9000001F;
+                       instr |= (addr & 3) << 29;
+                       instr |= (addr & 0x03FFFC) << 3;
+                       instr |= (0U - (addr & 0x020000)) & 0xE00000;
+
+                       buf[i]   = (uint8_t)instr;
+                       buf[i+1] = (uint8_t)(instr >> 8);
+                       buf[i+2] = (uint8_t)(instr >> 16);
+                       buf[i+3] = (uint8_t)(instr >> 24);
+               }
+       }
+
+       zip->bcj_ip += (uint32_t)i;
+
+       return i;
+}
+
 /*
  * Brought from LZMA SDK.
  *
index 950f3d2..3b552a8 100644 (file)
@@ -996,7 +996,7 @@ archive_read_format_cab_read_header(struct archive_read *a,
                cab->end_of_entry_cleanup = cab->end_of_entry = 1;
 
        /* Set up a more descriptive format name. */
-       sprintf(cab->format_name, "CAB %d.%d (%s)",
+       snprintf(cab->format_name, sizeof(cab->format_name), "CAB %d.%d (%s)",
            hd->major, hd->minor, cab->entry_cffolder->compname);
        a->archive.archive_format_name = cab->format_name;
 
@@ -1134,7 +1134,7 @@ cab_checksum_update(struct archive_read *a, size_t bytes)
        }
        if (sumbytes) {
                int odd = sumbytes & 3;
-               if (sumbytes - odd > 0)
+               if ((int)(sumbytes - odd) > 0)
                        cfdata->sum_calculated = cab_checksum_cfdata_4(
                            p, sumbytes - odd, cfdata->sum_calculated);
                if (odd)
@@ -1171,12 +1171,14 @@ cab_checksum_finish(struct archive_read *a)
        cfdata->sum_calculated = cab_checksum_cfdata(
            cfdata->memimage + CFDATA_cbData, l, cfdata->sum_calculated);
        if (cfdata->sum_calculated != cfdata->sum) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
                archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                    "Checksum error CFDATA[%d] %" PRIx32 ":%" PRIx32 " in %d bytes",
                    cab->entry_cffolder->cfdata_index -1,
                    cfdata->sum, cfdata->sum_calculated,
                    cfdata->compressed_size);
                return (ARCHIVE_FAILED);
+#endif
        }
        return (ARCHIVE_OK);
 }
@@ -2292,10 +2294,10 @@ lzx_br_fillup(struct lzx_stream *strm, struct lzx_br *br)
                                   (br->cache_buffer << 48) |
                                    ((uint64_t)strm->next_in[1]) << 40 |
                                    ((uint64_t)strm->next_in[0]) << 32 |
-                                   ((uint32_t)strm->next_in[3]) << 24 |
-                                   ((uint32_t)strm->next_in[2]) << 16 |
-                                   ((uint32_t)strm->next_in[5]) << 8 |
-                                    (uint32_t)strm->next_in[4];
+                                   ((uint64_t)strm->next_in[3]) << 24 |
+                                   ((uint64_t)strm->next_in[2]) << 16 |
+                                   ((uint64_t)strm->next_in[5]) << 8 |
+                                    (uint64_t)strm->next_in[4];
                                strm->next_in += 6;
                                strm->avail_in -= 6;
                                br->cache_avail += 6 * 8;
index 6b8ae33..9adcfd3 100644 (file)
@@ -441,7 +441,7 @@ archive_read_format_cpio_read_header(struct archive_read *a,
 
        /* Compare name to "TRAILER!!!" to test for end-of-archive. */
        if (namelength == 11 && strncmp((const char *)h, "TRAILER!!!",
-           11) == 0) {
+           10) == 0) {
                /* TODO: Store file location of start of block. */
                archive_clear_error(&a->archive);
                return (ARCHIVE_EOF);
@@ -985,14 +985,14 @@ archive_read_format_cpio_cleanup(struct archive_read *a)
 static int64_t
 le4(const unsigned char *p)
 {
-       return ((p[0] << 16) + (((int64_t)p[1]) << 24) + (p[2] << 0) + (p[3] << 8));
+       return ((p[0] << 16) | (((int64_t)p[1]) << 24) | (p[2] << 0) | (p[3] << 8));
 }
 
 
 static int64_t
 be4(const unsigned char *p)
 {
-       return ((((int64_t)p[0]) << 24) + (p[1] << 16) + (p[2] << 8) + (p[3]));
+       return ((((int64_t)p[0]) << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]));
 }
 
 /*
index db14d41..f5414be 100644 (file)
@@ -1007,7 +1007,8 @@ read_children(struct archive_read *a, struct file_info *parent)
                p = b;
                b += iso9660->logical_block_size;
                step -= iso9660->logical_block_size;
-               for (; *p != 0 && p < b && p + *p <= b; p += *p) {
+               for (; *p != 0 && p + DR_name_offset < b && p + *p <= b;
+                       p += *p) {
                        struct file_info *child;
 
                        /* N.B.: these special directory identifiers
@@ -1756,7 +1757,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
        size_t name_len;
        const unsigned char *rr_start, *rr_end;
        const unsigned char *p;
-       size_t dr_len;
+       size_t dr_len = 0;
        uint64_t fsize, offset;
        int32_t location;
        int flags;
@@ -1900,7 +1901,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
         * NUMBER of RRIP "PX" extension.
         * Note: Old mkisofs did not record that FILE SERIAL NUMBER
         * in ISO images.
-        * Note2: xorriso set 0 to the location of a symlink file. 
+        * Note2: xorriso set 0 to the location of a symlink file.
         */
        if (file->size == 0 && location >= 0) {
                /* If file->size is zero, its location points wrong place,
@@ -1954,7 +1955,7 @@ parse_file_info(struct archive_read *a, struct file_info *parent,
                         * made by makefs is not zero and its location is
                         * the same as those of next regular file. That is
                         * the same as hard like file and it causes unexpected
-                        * error. 
+                        * error.
                         */
                        if (file->size > 0 &&
                            (file->mode & AE_IFMT) == AE_IFLNK) {
@@ -2746,7 +2747,7 @@ next_cache_entry(struct archive_read *a, struct iso9660 *iso9660,
                         * If directory entries all which are descendant of
                         * rr_moved are still remaining, expose their.
                         */
-                       if (iso9660->re_files.first != NULL && 
+                       if (iso9660->re_files.first != NULL &&
                            iso9660->rr_moved != NULL &&
                            iso9660->rr_moved->rr_moved_has_re_only)
                                /* Expose "rr_moved" entry. */
@@ -3179,11 +3180,11 @@ isodate17(const unsigned char *v)
 static time_t
 time_from_tm(struct tm *t)
 {
-#if HAVE_TIMEGM
+#if HAVE__MKGMTIME
+        return _mkgmtime(t);
+#elif HAVE_TIMEGM
         /* Use platform timegm() if available. */
         return (timegm(t));
-#elif HAVE__MKGMTIME64
-        return (_mkgmtime64(t));
 #else
         /* Else use direct calculation using POSIX assumptions. */
         /* First, fix up tm_yday based on the year/month/day. */
index bff0f01..1c64b29 100644 (file)
@@ -739,7 +739,7 @@ archive_read_format_lha_read_header(struct archive_read *a,
        if (lha->directory || lha->compsize == 0)
                lha->end_of_entry = 1;
 
-       sprintf(lha->format_name, "lha -%c%c%c-",
+       snprintf(lha->format_name, sizeof(lha->format_name), "lha -%c%c%c-",
            lha->method[0], lha->method[1], lha->method[2]);
        a->archive.archive_format_name = lha->format_name;
 
@@ -1039,9 +1039,11 @@ lha_read_file_header_2(struct archive_read *a, struct lha *lha)
        }
 
        if (header_crc != lha->header_crc) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
                archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                    "LHa header CRC error");
                return (ARCHIVE_FATAL);
+#endif
        }
        return (err);
 }
@@ -1107,9 +1109,11 @@ lha_read_file_header_3(struct archive_read *a, struct lha *lha)
                return (err);
 
        if (header_crc != lha->header_crc) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
                archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                    "LHa header CRC error");
                return (ARCHIVE_FATAL);
+#endif
        }
        return (err);
 invalid:
@@ -1814,13 +1818,16 @@ lha_crc16(uint16_t crc, const void *pp, size_t len)
                /* This if statement expects compiler optimization will
                 * remove the statement which will not be executed. */
 #undef bswap16
+#ifndef __has_builtin
+#define __has_builtin(x) 0
+#endif
 #if defined(_MSC_VER) && _MSC_VER >= 1400  /* Visual Studio */
 #  define bswap16(x) _byteswap_ushort(x)
 #elif defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || __GNUC__ > 4)
 /* GCC 4.8 and later has __builtin_bswap16() */
 #  define bswap16(x) __builtin_bswap16(x)
-#elif defined(__clang__)
-/* All clang versions have __builtin_bswap16() */
+#elif defined(__clang__) && __has_builtin(__builtin_bswap16)
+/* Newer clang versions have __builtin_bswap16() */
 #  define bswap16(x) __builtin_bswap16(x)
 #else
 #  define bswap16(x) ((((x) >> 8) & 0xff) | ((x) << 8))
@@ -2005,10 +2012,10 @@ lzh_br_fillup(struct lzh_stream *strm, struct lzh_br *br)
                                    ((uint64_t)strm->next_in[0]) << 48 |
                                    ((uint64_t)strm->next_in[1]) << 40 |
                                    ((uint64_t)strm->next_in[2]) << 32 |
-                                   ((uint32_t)strm->next_in[3]) << 24 |
-                                   ((uint32_t)strm->next_in[4]) << 16 |
-                                   ((uint32_t)strm->next_in[5]) << 8 |
-                                    (uint32_t)strm->next_in[6];
+                                   ((uint64_t)strm->next_in[3]) << 24 |
+                                   ((uint64_t)strm->next_in[4]) << 16 |
+                                   ((uint64_t)strm->next_in[5]) << 8 |
+                                    (uint64_t)strm->next_in[6];
                                strm->next_in += 7;
                                strm->avail_in -= 7;
                                br->cache_avail += 7 * 8;
@@ -2018,10 +2025,10 @@ lzh_br_fillup(struct lzh_stream *strm, struct lzh_br *br)
                                   (br->cache_buffer << 48) |
                                    ((uint64_t)strm->next_in[0]) << 40 |
                                    ((uint64_t)strm->next_in[1]) << 32 |
-                                   ((uint32_t)strm->next_in[2]) << 24 |
-                                   ((uint32_t)strm->next_in[3]) << 16 |
-                                   ((uint32_t)strm->next_in[4]) << 8 |
-                                    (uint32_t)strm->next_in[5];
+                                   ((uint64_t)strm->next_in[2]) << 24 |
+                                   ((uint64_t)strm->next_in[3]) << 16 |
+                                   ((uint64_t)strm->next_in[4]) << 8 |
+                                    (uint64_t)strm->next_in[5];
                                strm->next_in += 6;
                                strm->avail_in -= 6;
                                br->cache_avail += 6 * 8;
index c87a154..a5fa30e 100644 (file)
@@ -692,7 +692,7 @@ detect_form(struct archive_read *a, int *is_form_d)
 {
        const char *p;
        ssize_t avail, ravail;
-       ssize_t detected_bytes = 0, len, nl;
+       ssize_t len, nl;
        int entry_cnt = 0, multiline = 0;
        int form_D = 0;/* The archive is generated by `NetBSD mtree -D'
                        * (In this source we call it `form D') . */
@@ -728,8 +728,6 @@ detect_form(struct archive_read *a, int *is_form_d)
                         * character of previous line was '\' character. */
                        if (bid_keyword_list(p, len, 0, 0) <= 0)
                                break;
-                       if (multiline == 1)
-                               detected_bytes += len;
                        if (p[len-nl-1] != '\\') {
                                if (multiline == 1 &&
                                    ++entry_cnt >= MAX_BID_ENTRY)
@@ -745,7 +743,6 @@ detect_form(struct archive_read *a, int *is_form_d)
 
                        keywords = bid_entry(p, len, nl, &last_is_path);
                        if (keywords >= 0) {
-                               detected_bytes += len;
                                if (form_D == 0) {
                                        if (last_is_path)
                                                form_D = 1;
@@ -997,9 +994,11 @@ process_add_entry(struct archive_read *a, struct mtree *mtree,
                        struct mtree_entry *alt;
                        alt = (struct mtree_entry *)__archive_rb_tree_find_node(
                            &mtree->rbtree, entry->name);
-                       while (alt->next_dup)
-                               alt = alt->next_dup;
-                       alt->next_dup = entry;
+                       if (alt != NULL) {
+                               while (alt->next_dup)
+                                       alt = alt->next_dup;
+                               alt->next_dup = entry;
+                       }
                }
        }
 
@@ -1074,7 +1073,7 @@ read_mtree(struct archive_read *a, struct mtree *mtree)
                        continue;
                /* Non-printable characters are not allowed */
                for (s = p;s < p + len - 1; s++) {
-                       if (!isprint((unsigned char)*s)) {
+                       if (!isprint((unsigned char)*s) && *s != '\t') {
                                r = ARCHIVE_FATAL;
                                break;
                        }
@@ -1253,9 +1252,17 @@ parse_file(struct archive_read *a, struct archive_entry *entry,
                                archive_entry_filetype(entry) == AE_IFDIR) {
                        mtree->fd = open(path, O_RDONLY | O_BINARY | O_CLOEXEC);
                        __archive_ensure_cloexec_flag(mtree->fd);
-                       if (mtree->fd == -1 &&
-                               (errno != ENOENT ||
-                                archive_strlen(&mtree->contents_name) > 0)) {
+                       if (mtree->fd == -1 && (
+#if defined(_WIN32) && !defined(__CYGWIN__)
+        /*
+         * On Windows, attempting to open a file with an
+         * invalid name result in EINVAL (Error 22)
+         */
+                               (errno != ENOENT && errno != EINVAL)
+#else
+                               errno != ENOENT
+#endif
+        || archive_strlen(&mtree->contents_name) > 0)) {
                                archive_set_error(&a->archive, errno,
                                                "Can't open %s", path);
                                r = ARCHIVE_WARN;
@@ -1273,7 +1280,13 @@ parse_file(struct archive_read *a, struct archive_entry *entry,
                                mtree->fd = -1;
                                st = NULL;
                        }
-               } else if (lstat(path, st) == -1) {
+               }
+#ifdef HAVE_LSTAT
+               else if (lstat(path, st) == -1)
+#else
+               else if (la_stat(path, st) == -1)
+#endif
+               {
                        st = NULL;
                }
 
@@ -1629,11 +1642,11 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
                    || strcmp(key, "contents") == 0) {
                        parse_escapes(val, NULL);
                        archive_strcpy(&mtree->contents_name, val);
-                       break;
+                       return (ARCHIVE_OK);
                }
                if (strcmp(key, "cksum") == 0)
-                       break;
-               __LA_FALLTHROUGH;
+                       return (ARCHIVE_OK);
+               break;
        case 'd':
                if (strcmp(key, "device") == 0) {
                        /* stat(2) st_rdev field, e.g. the major/minor IDs
@@ -1647,65 +1660,64 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
                                archive_entry_set_rdev(entry, dev);
                        return r;
                }
-               __LA_FALLTHROUGH;
+               break;
        case 'f':
                if (strcmp(key, "flags") == 0) {
                        *parsed_kws |= MTREE_HAS_FFLAGS;
                        archive_entry_copy_fflags_text(entry, val);
-                       break;
+                       return (ARCHIVE_OK);
                }
-               __LA_FALLTHROUGH;
+               break;
        case 'g':
                if (strcmp(key, "gid") == 0) {
                        *parsed_kws |= MTREE_HAS_GID;
                        archive_entry_set_gid(entry, mtree_atol(&val, 10));
-                       break;
+                       return (ARCHIVE_OK);
                }
                if (strcmp(key, "gname") == 0) {
                        *parsed_kws |= MTREE_HAS_GNAME;
                        archive_entry_copy_gname(entry, val);
-                       break;
+                       return (ARCHIVE_OK);
                }
-               __LA_FALLTHROUGH;
+               break;
        case 'i':
                if (strcmp(key, "inode") == 0) {
                        archive_entry_set_ino(entry, mtree_atol(&val, 10));
-                       break;
+                       return (ARCHIVE_OK);
                }
-               __LA_FALLTHROUGH;
+               break;
        case 'l':
                if (strcmp(key, "link") == 0) {
+                       parse_escapes(val, NULL);
                        archive_entry_copy_symlink(entry, val);
-                       break;
+                       return (ARCHIVE_OK);
                }
-               __LA_FALLTHROUGH;
+               break;
        case 'm':
                if (strcmp(key, "md5") == 0 || strcmp(key, "md5digest") == 0) {
                        return parse_digest(a, entry, val,
                            ARCHIVE_ENTRY_DIGEST_MD5);
                }
                if (strcmp(key, "mode") == 0) {
-                       if (val[0] >= '0' && val[0] <= '7') {
-                               *parsed_kws |= MTREE_HAS_PERM;
-                               archive_entry_set_perm(entry,
-                                   (mode_t)mtree_atol(&val, 8));
-                       } else {
+                       if (val[0] < '0' || val[0] > '7') {
                                archive_set_error(&a->archive,
                                    ARCHIVE_ERRNO_FILE_FORMAT,
                                    "Symbolic or non-octal mode \"%s\" unsupported", val);
-                               return ARCHIVE_WARN;
+                               return (ARCHIVE_WARN);
                        }
-                       break;
+                       *parsed_kws |= MTREE_HAS_PERM;
+                       archive_entry_set_perm(entry, (mode_t)mtree_atol(&val, 8));
+                       return (ARCHIVE_OK);
                }
-               __LA_FALLTHROUGH;
+               break;
        case 'n':
                if (strcmp(key, "nlink") == 0) {
                        *parsed_kws |= MTREE_HAS_NLINK;
                        archive_entry_set_nlink(entry,
                                (unsigned int)mtree_atol(&val, 10));
-                       break;
+                       return (ARCHIVE_OK);
                }
-               __LA_FALLTHROUGH;
+               break;
        case 'r':
                if (strcmp(key, "resdevice") == 0) {
                        /* stat(2) st_dev field, e.g. the device ID where the
@@ -1723,7 +1735,7 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
                        return parse_digest(a, entry, val,
                            ARCHIVE_ENTRY_DIGEST_RMD160);
                }
-               __LA_FALLTHROUGH;
+               break;
        case 's':
                if (strcmp(key, "sha1") == 0 ||
                    strcmp(key, "sha1digest") == 0) {
@@ -1747,9 +1759,9 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
                }
                if (strcmp(key, "size") == 0) {
                        archive_entry_set_size(entry, mtree_atol(&val, 10));
-                       break;
+                       return (ARCHIVE_OK);
                }
-               __LA_FALLTHROUGH;
+               break;
        case 't':
                if (strcmp(key, "tags") == 0) {
                        /*
@@ -1757,7 +1769,7 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
                         * Ignore the tags for now, but the interface
                         * should be extended to allow inclusion/exclusion.
                         */
-                       break;
+                       return (ARCHIVE_OK);
                }
                if (strcmp(key, "time") == 0) {
                        int64_t m;
@@ -1783,79 +1795,85 @@ parse_keyword(struct archive_read *a, struct mtree *mtree,
                        else if (m < my_time_t_min)
                                m = my_time_t_min;
                        archive_entry_set_mtime(entry, (time_t)m, ns);
-                       break;
+                       return (ARCHIVE_OK);
                }
                if (strcmp(key, "type") == 0) {
                        switch (val[0]) {
                        case 'b':
                                if (strcmp(val, "block") == 0) {
-                                       archive_entry_set_filetype(entry, AE_IFBLK);
-                                       break;
+                                       *parsed_kws |= MTREE_HAS_TYPE;
+                                       archive_entry_set_filetype(entry,
+                                               AE_IFBLK);
+                                       return (ARCHIVE_OK);
                                }
-                               __LA_FALLTHROUGH;
+                               break;
                        case 'c':
                                if (strcmp(val, "char") == 0) {
+                                       *parsed_kws |= MTREE_HAS_TYPE;
                                        archive_entry_set_filetype(entry,
                                                AE_IFCHR);
-                                       break;
+                                       return (ARCHIVE_OK);
                                }
-                               __LA_FALLTHROUGH;
+                               break;
                        case 'd':
                                if (strcmp(val, "dir") == 0) {
+                                       *parsed_kws |= MTREE_HAS_TYPE;
                                        archive_entry_set_filetype(entry,
                                                AE_IFDIR);
-                                       break;
+                                       return (ARCHIVE_OK);
                                }
-                               __LA_FALLTHROUGH;
+                               break;
                        case 'f':
                                if (strcmp(val, "fifo") == 0) {
+                                       *parsed_kws |= MTREE_HAS_TYPE;
                                        archive_entry_set_filetype(entry,
                                                AE_IFIFO);
-                                       break;
+                                       return (ARCHIVE_OK);
                                }
                                if (strcmp(val, "file") == 0) {
+                                       *parsed_kws |= MTREE_HAS_TYPE;
                                        archive_entry_set_filetype(entry,
                                                AE_IFREG);
-                                       break;
+                                       return (ARCHIVE_OK);
                                }
-                               __LA_FALLTHROUGH;
+                               break;
                        case 'l':
                                if (strcmp(val, "link") == 0) {
+                                       *parsed_kws |= MTREE_HAS_TYPE;
                                        archive_entry_set_filetype(entry,
                                                AE_IFLNK);
-                                       break;
+                                       return (ARCHIVE_OK);
                                }
-                               __LA_FALLTHROUGH;
+                               break;
                        default:
-                               archive_set_error(&a->archive,
-                                   ARCHIVE_ERRNO_FILE_FORMAT,
-                                   "Unrecognized file type \"%s\"; "
-                                   "assuming \"file\"", val);
-                               archive_entry_set_filetype(entry, AE_IFREG);
-                               return (ARCHIVE_WARN);
+                               break;
                        }
-                       *parsed_kws |= MTREE_HAS_TYPE;
-                       break;
+                       archive_set_error(&a->archive,
+                           ARCHIVE_ERRNO_FILE_FORMAT,
+                           "Unrecognized file type \"%s\"; "
+                           "assuming \"file\"", val);
+                       archive_entry_set_filetype(entry, AE_IFREG);
+                       return (ARCHIVE_WARN);
                }
-               __LA_FALLTHROUGH;
+               break;
        case 'u':
                if (strcmp(key, "uid") == 0) {
                        *parsed_kws |= MTREE_HAS_UID;
                        archive_entry_set_uid(entry, mtree_atol(&val, 10));
-                       break;
+                       return (ARCHIVE_OK);
                }
                if (strcmp(key, "uname") == 0) {
                        *parsed_kws |= MTREE_HAS_UNAME;
                        archive_entry_copy_uname(entry, val);
-                       break;
+                       return (ARCHIVE_OK);
                }
-               __LA_FALLTHROUGH;
+               break;
        default:
-               archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
-                   "Unrecognized key %s=%s", key, val);
-               return (ARCHIVE_WARN);
+               break;
        }
-       return (ARCHIVE_OK);
+       archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+           "Unrecognized key %s=%s", key, val);
+       return (ARCHIVE_WARN);
 }
 
 static int
index c2666b2..16b6e6e 100644 (file)
 #define MAX_SYMBOL_LENGTH 0xF
 #define MAX_SYMBOLS       20
 
+/* Virtual Machine Properties */
+#define VM_MEMORY_SIZE 0x40000
+#define VM_MEMORY_MASK (VM_MEMORY_SIZE - 1)
+#define PROGRAM_WORK_SIZE 0x3C000
+#define PROGRAM_GLOBAL_SIZE 0x2000
+#define PROGRAM_SYSTEM_GLOBAL_ADDRESS PROGRAM_WORK_SIZE
+#define PROGRAM_SYSTEM_GLOBAL_SIZE 0x40
+#define PROGRAM_USER_GLOBAL_ADDRESS (PROGRAM_SYSTEM_GLOBAL_ADDRESS + PROGRAM_SYSTEM_GLOBAL_SIZE)
+#define PROGRAM_USER_GLOBAL_SIZE (PROGRAM_GLOBAL_SIZE - PROGRAM_SYSTEM_GLOBAL_SIZE)
+
 /*
  * Considering L1,L2 cache miss and a calling of write system-call,
  * the best size of the output buffer(uncompressed buffer) is 128K.
@@ -213,6 +223,69 @@ struct data_block_offsets
   int64_t end_offset;
 };
 
+struct rar_program_code
+{
+  uint8_t *staticdata;
+  uint32_t staticdatalen;
+  uint8_t *globalbackup;
+  uint32_t globalbackuplen;
+  uint64_t fingerprint;
+  uint32_t usagecount;
+  uint32_t oldfilterlength;
+  struct rar_program_code *next;
+};
+
+struct rar_filter
+{
+  struct rar_program_code *prog;
+  uint32_t initialregisters[8];
+  uint8_t *globaldata;
+  uint32_t globaldatalen;
+  size_t blockstartpos;
+  uint32_t blocklength;
+  uint32_t filteredblockaddress;
+  uint32_t filteredblocklength;
+  struct rar_filter *next;
+};
+
+struct memory_bit_reader
+{
+  const uint8_t *bytes;
+  size_t length;
+  size_t offset;
+  uint64_t bits;
+  int available;
+  int at_eof;
+};
+
+struct rar_virtual_machine
+{
+  uint32_t registers[8];
+  uint8_t memory[VM_MEMORY_SIZE + sizeof(uint32_t)];
+};
+
+struct rar_filters
+{
+  struct rar_virtual_machine *vm;
+  struct rar_program_code *progs;
+  struct rar_filter *stack;
+  int64_t filterstart;
+  uint32_t lastfilternum;
+  int64_t lastend;
+  uint8_t *bytes;
+  size_t bytes_ready;
+};
+
+struct audio_state
+{
+  int8_t weight[5];
+  int16_t delta[4];
+  int8_t lastdelta;
+  int error[11];
+  int count;
+  uint8_t lastbyte;
+};
+
 struct rar
 {
   /* Entries from main RAR header */
@@ -273,15 +346,16 @@ struct rar
   struct huffman_code lengthcode;
   unsigned char lengthtable[HUFFMAN_TABLE_SIZE];
   struct lzss lzss;
-  char output_last_match;
   unsigned int lastlength;
   unsigned int lastoffset;
   unsigned int oldoffset[4];
   unsigned int lastlowoffset;
   unsigned int numlowoffsetrepeats;
-  int64_t filterstart;
   char start_new_table;
 
+  /* Filters */
+  struct rar_filters filters;
+
   /* PPMd Variant H members */
   char ppmd_valid;
   char ppmd_eod;
@@ -343,23 +417,43 @@ static int read_symlink_stored(struct archive_read *, struct archive_entry *,
 static int read_data_stored(struct archive_read *, const void **, size_t *,
                             int64_t *);
 static int read_data_compressed(struct archive_read *, const void **, size_t *,
-                          int64_t *, size_t);
+                                int64_t *, size_t);
 static int rar_br_preparation(struct archive_read *, struct rar_br *);
 static int parse_codes(struct archive_read *);
 static void free_codes(struct archive_read *);
 static int read_next_symbol(struct archive_read *, struct huffman_code *);
 static int create_code(struct archive_read *, struct huffman_code *,
-                        unsigned char *, int, char);
+                       unsigned char *, int, char);
 static int add_value(struct archive_read *, struct huffman_code *, int, int,
                      int);
 static int new_node(struct huffman_code *);
 static int make_table(struct archive_read *, struct huffman_code *);
 static int make_table_recurse(struct archive_read *, struct huffman_code *, int,
                               struct huffman_table_entry *, int, int);
-static int64_t expand(struct archive_read *, int64_t);
-static int copy_from_lzss_window(struct archive_read *, const void **,
-                                   int64_t, int);
+static int expand(struct archive_read *, int64_t *);
+static int copy_from_lzss_window_to_unp(struct archive_read *, const void **,
+                                        int64_t, int);
 static const void *rar_read_ahead(struct archive_read *, size_t, ssize_t *);
+static int parse_filter(struct archive_read *, const uint8_t *, uint16_t,
+                        uint8_t);
+static int run_filters(struct archive_read *);
+static void clear_filters(struct rar_filters *);
+static struct rar_filter *create_filter(struct rar_program_code *,
+                                        const uint8_t *, uint32_t,
+                                        uint32_t[8], size_t, uint32_t);
+static void delete_filter(struct rar_filter *filter);
+static struct rar_program_code *compile_program(const uint8_t *, size_t);
+static void delete_program_code(struct rar_program_code *prog);
+static uint32_t membr_next_rarvm_number(struct memory_bit_reader *br);
+static inline uint32_t membr_bits(struct memory_bit_reader *br, int bits);
+static int membr_fill(struct memory_bit_reader *br, int bits);
+static int read_filter(struct archive_read *, int64_t *);
+static int rar_decode_byte(struct archive_read*, uint8_t *);
+static int execute_filter(struct archive_read*, struct rar_filter *,
+                          struct rar_virtual_machine *, size_t);
+static int copy_from_lzss_window(struct archive_read *, void *, int64_t, int);
+static inline void vm_write_32(struct rar_virtual_machine*, size_t, uint32_t);
+static inline uint32_t vm_read_32(struct rar_virtual_machine*, size_t);
 
 /*
  * Bit stream reader.
@@ -913,9 +1007,11 @@ archive_read_format_rar_read_header(struct archive_read *a,
 
       crc32_val = crc32(0, (const unsigned char *)p + 2, (unsigned)skip - 2);
       if ((crc32_val & 0xffff) != archive_le16dec(p)) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
         archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
           "Header CRC error");
         return (ARCHIVE_FATAL);
+#endif
       }
       __archive_read_consume(a, skip);
       break;
@@ -966,14 +1062,16 @@ archive_read_format_rar_read_header(struct archive_read *a,
                      return (ARCHIVE_FATAL);
              }
              p = h;
-             crc32_val = crc32(crc32_val, (const unsigned char *)p, to_read);
+             crc32_val = crc32(crc32_val, (const unsigned char *)p, (unsigned int)to_read);
              __archive_read_consume(a, to_read);
              skip -= to_read;
       }
       if ((crc32_val & 0xffff) != crc32_expected) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
              archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                  "Header CRC error");
              return (ARCHIVE_FATAL);
+#endif
       }
       if (head_type == ENDARC_HEAD)
              return (ARCHIVE_EOF);
@@ -1244,6 +1342,7 @@ archive_read_format_rar_cleanup(struct archive_read *a)
 
   rar = (struct rar *)(a->format->data);
   free_codes(a);
+  clear_filters(&rar->filters);
   free(rar->filename);
   free(rar->filename_save);
   free(rar->dbo);
@@ -1337,9 +1436,11 @@ read_header(struct archive_read *a, struct archive_entry *entry,
   /* File Header CRC check. */
   crc32_val = crc32(crc32_val, h, (unsigned)(header_size - 7));
   if ((crc32_val & 0xffff) != archive_le16dec(rar_header.crc)) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
     archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
       "Header CRC error");
     return (ARCHIVE_FATAL);
+#endif
   }
   /* If no CRC error, Go on parsing File Header. */
   p = h;
@@ -1662,6 +1763,7 @@ read_header(struct archive_read *a, struct archive_entry *entry,
   memset(rar->lengthtable, 0, sizeof(rar->lengthtable));
   __archive_ppmd7_functions.Ppmd7_Free(&rar->ppmd7_context);
   rar->ppmd_valid = rar->ppmd_eod = 0;
+  rar->filters.filterstart = INT64_MAX;
 
   /* Don't set any archive entries for non-file header types */
   if (head_type == NEWSUB_HEAD)
@@ -1728,13 +1830,9 @@ read_exttime(const char *p, struct rar *rar, const char *endp)
   struct tm *tm;
   time_t t;
   long nsec;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
   struct tm tmbuf;
 #endif
-#if defined(HAVE__LOCALTIME64_S)
-  errno_t terr;
-  __time64_t tmptime;
-#endif
 
   if (p + 2 > endp)
     return (-1);
@@ -1766,15 +1864,10 @@ read_exttime(const char *p, struct rar *rar, const char *endp)
         rem = (((unsigned)(unsigned char)*p) << 16) | (rem >> 8);
         p++;
       }
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+      tm = localtime_s(&tmbuf, &t) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
       tm = localtime_r(&t, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
-      tmptime = t;
-      terr = _localtime64_s(&tmbuf, &tmptime);
-      if (terr)
-        tm = NULL;
-      else
-        tm = &tmbuf;
 #else
       tm = localtime(&t);
 #endif
@@ -1856,9 +1949,11 @@ read_data_stored(struct archive_read *a, const void **buff, size_t *size,
     *size = 0;
     *offset = rar->offset;
     if (rar->file_crc != rar->crc_calculated) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
       archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                         "File CRC error");
       return (ARCHIVE_FATAL);
+#endif
     }
     rar->entry_eof = 1;
     return (ARCHIVE_EOF);
@@ -1886,13 +1981,13 @@ read_data_stored(struct archive_read *a, const void **buff, size_t *size,
 
 static int
 read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
-               int64_t *offset, size_t looper)
+                     int64_t *offset, size_t looper)
 {
   if (looper++ > MAX_COMPRESS_DEPTH)
     return (ARCHIVE_FATAL);
 
   struct rar *rar;
-  int64_t start, end, actualend;
+  int64_t start, end;
   size_t bs;
   int ret = (ARCHIVE_OK), sym, code, lzss_offset, length, i;
 
@@ -1901,6 +1996,33 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
   do {
     if (!rar->valid)
       return (ARCHIVE_FATAL);
+
+    if (rar->filters.bytes_ready > 0)
+    {
+      /* Flush unp_buffer first */
+      if (rar->unp_offset > 0)
+      {
+        *buff = rar->unp_buffer;
+        *size = rar->unp_offset;
+        rar->unp_offset = 0;
+        *offset = rar->offset_outgoing;
+        rar->offset_outgoing += *size;
+      }
+      else
+      {
+        *buff = rar->filters.bytes;
+        *size = rar->filters.bytes_ready;
+
+        rar->offset += *size;
+        *offset = rar->offset_outgoing;
+        rar->offset_outgoing += *size;
+
+        rar->filters.bytes_ready -= *size;
+        rar->filters.bytes += *size;
+      }
+      goto ending_block;
+    }
+
     if (rar->ppmd_eod ||
        (rar->dictionary_size && rar->offset >= rar->unp_size))
     {
@@ -1922,9 +2044,11 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
       *size = 0;
       *offset = rar->offset;
       if (rar->file_crc != rar->crc_calculated) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
         archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                           "File CRC error");
         return (ARCHIVE_FATAL);
+#endif
       }
       rar->entry_eof = 1;
       return (ARCHIVE_EOF);
@@ -1936,7 +2060,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
         bs = rar->unp_buffer_size - rar->unp_offset;
       else
         bs = (size_t)rar->bytes_uncopied;
-      ret = copy_from_lzss_window(a, buff, rar->offset, (int)bs);
+      ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs);
       if (ret != ARCHIVE_OK)
         return (ret);
       rar->offset += bs;
@@ -1954,6 +2078,13 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
       continue;
     }
 
+    if (rar->filters.lastend == rar->filters.filterstart)
+    {
+      if (!run_filters(a))
+        return (ARCHIVE_FATAL);
+      continue;
+    }
+
     if (!rar->br.next_in &&
       (ret = rar_br_preparation(a, &(rar->br))) < ARCHIVE_WARN)
       return (ret);
@@ -2045,13 +2176,17 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
     {
       start = rar->offset;
       end = start + rar->dictionary_size;
-      rar->filterstart = INT64_MAX;
+      if (rar->filters.filterstart < end) {
+        end = rar->filters.filterstart;
+      }
 
-      if ((actualend = expand(a, end)) < 0)
-        return ((int)actualend);
+      ret = expand(a, &end);
+      if (ret != ARCHIVE_OK)
+             return (ret);
 
-      rar->bytes_uncopied = actualend - start;
-      if (rar->bytes_uncopied == 0) {
+      rar->bytes_uncopied = end - start;
+      rar->filters.lastend = end;
+      if (rar->filters.lastend != rar->filters.filterstart && rar->bytes_uncopied == 0) {
           /* Broken RAR files cause this case.
           * NOTE: If this case were possible on a normal RAR file
           * we would find out where it was actually bad and
@@ -2065,7 +2200,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
       bs = rar->unp_buffer_size - rar->unp_offset;
     else
       bs = (size_t)rar->bytes_uncopied;
-    ret = copy_from_lzss_window(a, buff, rar->offset, (int)bs);
+    ret = copy_from_lzss_window_to_unp(a, buff, rar->offset, (int)bs);
     if (ret != ARCHIVE_OK)
       return (ret);
     rar->offset += bs;
@@ -2080,6 +2215,7 @@ read_data_compressed(struct archive_read *a, const void **buff, size_t *size,
   *size = rar->unp_buffer_size;
   *offset = rar->offset_outgoing;
   rar->offset_outgoing += *size;
+ending_block:
   /* Calculate File CRC. */
   rar->crc_calculated = crc32(rar->crc_calculated, *buff, (unsigned)*size);
   return ret;
@@ -2691,8 +2827,8 @@ make_table_recurse(struct archive_read *a, struct huffman_code *code, int node,
   return ret;
 }
 
-static int64_t
-expand(struct archive_read *a, int64_t end)
+static int
+expand(struct archive_read *a, int64_t *end)
 {
   static const unsigned char lengthbases[] =
     {   0,   1,   2,   3,   4,   5,   6,
@@ -2739,25 +2875,22 @@ expand(struct archive_read *a, int64_t end)
   struct rar *rar = (struct rar *)(a->format->data);
   struct rar_br *br = &(rar->br);
 
-  if (rar->filterstart < end)
-    end = rar->filterstart;
+  if (rar->filters.filterstart < *end)
+    *end = rar->filters.filterstart;
 
   while (1)
   {
-    if (rar->output_last_match &&
-      lzss_position(&rar->lzss) + rar->lastlength <= end)
-    {
-      lzss_emit_match(rar, rar->lastoffset, rar->lastlength);
-      rar->output_last_match = 0;
+    if(lzss_position(&rar->lzss) >= *end) {
+      return (ARCHIVE_OK);
     }
 
-    if(rar->is_ppmd_block || rar->output_last_match ||
-      lzss_position(&rar->lzss) >= end)
-      return lzss_position(&rar->lzss);
+    if(rar->is_ppmd_block) {
+      *end = lzss_position(&rar->lzss);
+      return (ARCHIVE_OK);
+    }
 
     if ((symbol = read_next_symbol(a, &rar->maincode)) < 0)
       return (ARCHIVE_FATAL);
-    rar->output_last_match = 0;
 
     if (symbol < 256)
     {
@@ -2778,7 +2911,8 @@ expand(struct archive_read *a, int64_t end)
           goto truncated_data;
         rar->start_new_table = rar_br_bits(br, 1);
         rar_br_consume(br, 1);
-        return lzss_position(&rar->lzss);
+        *end = lzss_position(&rar->lzss);
+        return (ARCHIVE_OK);
       }
       else
       {
@@ -2789,9 +2923,9 @@ expand(struct archive_read *a, int64_t end)
     }
     else if(symbol==257)
     {
-      archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-                        "Parsing filters is unsupported.");
-      return (ARCHIVE_FAILED);
+      if (!read_filter(a, end))
+          return (ARCHIVE_FATAL);
+      continue;
     }
     else if(symbol==258)
     {
@@ -2864,7 +2998,7 @@ expand(struct archive_read *a, int64_t end)
               goto truncated_data;
             offs += rar_br_bits(br, offsetbits[offssymbol] - 4) << 4;
             rar_br_consume(br, offsetbits[offssymbol] - 4);
-         }
+          }
 
           if(rar->numlowoffsetrepeats > 0)
           {
@@ -2908,7 +3042,8 @@ expand(struct archive_read *a, int64_t end)
 
     rar->lastoffset = offs;
     rar->lastlength = len;
-    rar->output_last_match = 1;
+
+    lzss_emit_match(rar, rar->lastoffset, rar->lastlength);
   }
 truncated_data:
   archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
@@ -2922,8 +3057,31 @@ bad_data:
 }
 
 static int
-copy_from_lzss_window(struct archive_read *a, const void **buffer,
-                        int64_t startpos, int length)
+copy_from_lzss_window(struct archive_read *a, void *buffer,
+                      int64_t startpos, int length)
+{
+  int windowoffs, firstpart;
+  struct rar *rar = (struct rar *)(a->format->data);
+
+  windowoffs = lzss_offset_for_position(&rar->lzss, startpos);
+  firstpart = lzss_size(&rar->lzss) - windowoffs;
+  if (firstpart < 0) {
+    archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+                      "Bad RAR file data");
+    return (ARCHIVE_FATAL);
+  }
+  if (firstpart < length) {
+    memcpy(buffer, &rar->lzss.window[windowoffs], firstpart);
+    memcpy(buffer, &rar->lzss.window[0], length - firstpart);
+  } else {
+    memcpy(buffer, &rar->lzss.window[windowoffs], length);
+  }
+  return (ARCHIVE_OK);
+}
+
+static int
+copy_from_lzss_window_to_unp(struct archive_read *a, const void **buffer,
+                             int64_t startpos, int length)
 {
   int windowoffs, firstpart;
   struct rar *rar = (struct rar *)(a->format->data);
@@ -3003,3 +3161,628 @@ rar_read_ahead(struct archive_read *a, size_t min, ssize_t *avail)
   }
   return h;
 }
+
+static int
+parse_filter(struct archive_read *a, const uint8_t *bytes, uint16_t length, uint8_t flags)
+{
+  struct rar *rar = (struct rar *)(a->format->data);
+  struct rar_filters *filters = &rar->filters;
+
+  struct memory_bit_reader br = { 0 };
+  struct rar_program_code *prog;
+  struct rar_filter *filter, **nextfilter;
+
+  uint32_t numprogs, num, blocklength, globaldatalen;
+  uint8_t *globaldata;
+  size_t blockstartpos;
+  uint32_t registers[8] = { 0 };
+  uint32_t i;
+
+  br.bytes = bytes;
+  br.length = length;
+
+  numprogs = 0;
+  for (prog = filters->progs; prog; prog = prog->next)
+    numprogs++;
+
+  if ((flags & 0x80))
+  {
+    num = membr_next_rarvm_number(&br);
+    if (num == 0)
+    {
+      delete_filter(filters->stack);
+      filters->stack = NULL;
+      delete_program_code(filters->progs);
+      filters->progs = NULL;
+    }
+    else
+      num--;
+    if (num > numprogs) {
+      return 0;
+    }
+    filters->lastfilternum = num;
+  }
+  else
+    num = filters->lastfilternum;
+
+  prog = filters->progs;
+  for (i = 0; i < num; i++)
+    prog = prog->next;
+  if (prog)
+    prog->usagecount++;
+
+  blockstartpos = membr_next_rarvm_number(&br) + (size_t)lzss_position(&rar->lzss);
+  if ((flags & 0x40))
+    blockstartpos += 258;
+  if ((flags & 0x20))
+    blocklength = membr_next_rarvm_number(&br);
+  else
+    blocklength = prog ? prog->oldfilterlength : 0;
+
+  registers[3] = PROGRAM_SYSTEM_GLOBAL_ADDRESS;
+  registers[4] = blocklength;
+  registers[5] = prog ? prog->usagecount : 0;
+  registers[7] = VM_MEMORY_SIZE;
+
+  if ((flags & 0x10))
+  {
+    uint8_t mask = (uint8_t)membr_bits(&br, 7);
+    for (i = 0; i < 7; i++)
+      if ((mask & (1 << i)))
+        registers[i] = membr_next_rarvm_number(&br);
+  }
+
+  if (!prog)
+  {
+    uint32_t len = membr_next_rarvm_number(&br);
+    uint8_t *bytecode;
+    struct rar_program_code **next;
+
+    if (len == 0 || len > 0x10000)
+      return 0;
+    bytecode = malloc(len);
+    if (!bytecode)
+      return 0;
+    for (i = 0; i < len; i++)
+      bytecode[i] = (uint8_t)membr_bits(&br, 8);
+    prog = compile_program(bytecode, len);
+    if (!prog) {
+      free(bytecode);
+      return 0;
+    }
+    free(bytecode);
+    next = &filters->progs;
+    while (*next)
+      next = &(*next)->next;
+    *next = prog;
+  }
+  prog->oldfilterlength = blocklength;
+
+  globaldata = NULL;
+  globaldatalen = 0;
+  if ((flags & 0x08))
+  {
+    globaldatalen = membr_next_rarvm_number(&br);
+    if (globaldatalen > PROGRAM_USER_GLOBAL_SIZE)
+      return 0;
+    globaldata = malloc(globaldatalen + PROGRAM_SYSTEM_GLOBAL_SIZE);
+    if (!globaldata)
+      return 0;
+    for (i = 0; i < globaldatalen; i++)
+      globaldata[i + PROGRAM_SYSTEM_GLOBAL_SIZE] = (uint8_t)membr_bits(&br, 8);
+  }
+
+  if (br.at_eof)
+  {
+      free(globaldata);
+      return 0;
+  }
+
+  filter = create_filter(prog, globaldata, globaldatalen, registers, blockstartpos, blocklength);
+  free(globaldata);
+  if (!filter)
+    return 0;
+
+  for (i = 0; i < 7; i++)
+    archive_le32enc(&filter->globaldata[i * 4], registers[i]);
+  archive_le32enc(&filter->globaldata[0x1C], blocklength);
+  archive_le32enc(&filter->globaldata[0x20], 0);
+  archive_le32enc(&filter->globaldata[0x2C], prog->usagecount);
+
+  nextfilter = &filters->stack;
+  while (*nextfilter)
+    nextfilter = &(*nextfilter)->next;
+  *nextfilter = filter;
+
+  if (!filters->stack->next)
+    filters->filterstart = blockstartpos;
+
+  return 1;
+}
+
+static struct rar_filter *
+create_filter(struct rar_program_code *prog, const uint8_t *globaldata, uint32_t globaldatalen, uint32_t registers[8], size_t startpos, uint32_t length)
+{
+  struct rar_filter *filter;
+
+  filter = calloc(1, sizeof(*filter));
+  if (!filter)
+    return NULL;
+  filter->prog = prog;
+  filter->globaldatalen = globaldatalen > PROGRAM_SYSTEM_GLOBAL_SIZE ? globaldatalen : PROGRAM_SYSTEM_GLOBAL_SIZE;
+  filter->globaldata = calloc(1, filter->globaldatalen);
+  if (!filter->globaldata)
+    return NULL;
+  if (globaldata)
+    memcpy(filter->globaldata, globaldata, globaldatalen);
+  if (registers)
+    memcpy(filter->initialregisters, registers, sizeof(filter->initialregisters));
+  filter->blockstartpos = startpos;
+  filter->blocklength = length;
+
+  return filter;
+}
+
+static int
+run_filters(struct archive_read *a)
+{
+  struct rar *rar = (struct rar *)(a->format->data);
+  struct rar_filters *filters = &rar->filters;
+  struct rar_filter *filter = filters->stack;
+  struct rar_filter *f;
+  size_t start, end;
+  int64_t tend;
+  uint32_t lastfilteraddress;
+  uint32_t lastfilterlength;
+  int ret;
+
+  if (filters == NULL || filter == NULL)
+    return (0);
+
+  start = filters->filterstart;
+  end = start + filter->blocklength;
+
+  filters->filterstart = INT64_MAX;
+  tend = (int64_t)end;
+  ret = expand(a, &tend);
+  if (ret != ARCHIVE_OK)
+    return 0;
+
+  /* Check if filter stack was modified in expand() */
+  ret = ARCHIVE_FATAL;
+  f = filters->stack;
+  while (f)
+  {
+    if (f == filter)
+    {
+      ret = ARCHIVE_OK;
+      break;
+    }
+    f = f->next;
+  }
+  if (ret != ARCHIVE_OK)
+    return 0;
+
+  if (tend < 0)
+    return 0;
+  end = (size_t)tend;
+  if (end != start + filter->blocklength)
+    return 0;
+
+  if (!filters->vm)
+  {
+    filters->vm = calloc(1, sizeof(*filters->vm));
+    if (!filters->vm)
+      return 0;
+  }
+
+  ret = copy_from_lzss_window(a, filters->vm->memory, start, filter->blocklength);
+  if (ret != ARCHIVE_OK)
+    return 0;
+  if (!execute_filter(a, filter, filters->vm, rar->offset))
+    return 0;
+
+  lastfilteraddress = filter->filteredblockaddress;
+  lastfilterlength = filter->filteredblocklength;
+  filters->stack = filter->next;
+  filter->next = NULL;
+  delete_filter(filter);
+
+  while ((filter = filters->stack) != NULL && (int64_t)filter->blockstartpos == filters->filterstart && filter->blocklength == lastfilterlength)
+  {
+    memmove(&filters->vm->memory[0], &filters->vm->memory[lastfilteraddress], lastfilterlength);
+    if (!execute_filter(a, filter, filters->vm, rar->offset))
+      return 0;
+
+    lastfilteraddress = filter->filteredblockaddress;
+    lastfilterlength = filter->filteredblocklength;
+    filters->stack = filter->next;
+    filter->next = NULL;
+    delete_filter(filter);
+  }
+
+  if (filters->stack)
+  {
+    if (filters->stack->blockstartpos < end)
+      return 0;
+    filters->filterstart = filters->stack->blockstartpos;
+  }
+
+  filters->lastend = end;
+  filters->bytes = &filters->vm->memory[lastfilteraddress];
+  filters->bytes_ready = lastfilterlength;
+
+  return 1;
+}
+
+static struct rar_program_code *
+compile_program(const uint8_t *bytes, size_t length)
+{
+  struct memory_bit_reader br = { 0 };
+  struct rar_program_code *prog;
+  // uint32_t instrcount = 0;
+  uint8_t xor;
+  size_t i;
+
+  xor = 0;
+  for (i = 1; i < length; i++)
+    xor ^= bytes[i];
+  if (!length || xor != bytes[0])
+    return NULL;
+
+  br.bytes = bytes;
+  br.length = length;
+  br.offset = 1;
+
+  prog = calloc(1, sizeof(*prog));
+  if (!prog)
+    return NULL;
+  prog->fingerprint = crc32(0, bytes, (unsigned int)length) | ((uint64_t)length << 32);
+
+  if (membr_bits(&br, 1))
+  {
+    prog->staticdatalen = membr_next_rarvm_number(&br) + 1;
+    prog->staticdata = malloc(prog->staticdatalen);
+    if (!prog->staticdata)
+    {
+      delete_program_code(prog);
+      return NULL;
+    }
+    for (i = 0; i < prog->staticdatalen; i++)
+      prog->staticdata[i] = (uint8_t)membr_bits(&br, 8);
+  }
+
+  return prog;
+}
+
+static void
+delete_filter(struct rar_filter *filter)
+{
+  while (filter)
+  {
+    struct rar_filter *next = filter->next;
+    free(filter->globaldata);
+    free(filter);
+    filter = next;
+  }
+}
+
+static void
+clear_filters(struct rar_filters *filters)
+{
+  delete_filter(filters->stack);
+  delete_program_code(filters->progs);
+  free(filters->vm);
+}
+
+static void
+delete_program_code(struct rar_program_code *prog)
+{
+  while (prog)
+  {
+    struct rar_program_code *next = prog->next;
+    free(prog->staticdata);
+    free(prog->globalbackup);
+    free(prog);
+    prog = next;
+  }
+}
+
+static uint32_t
+membr_next_rarvm_number(struct memory_bit_reader *br)
+{
+  uint32_t val;
+  switch (membr_bits(br, 2))
+  {
+    case 0:
+      return membr_bits(br, 4);
+    case 1:
+      val = membr_bits(br, 8);
+      if (val >= 16)
+        return val;
+      return 0xFFFFFF00 | (val << 4) | membr_bits(br, 4);
+    case 2:
+      return membr_bits(br, 16);
+    default:
+      return membr_bits(br, 32);
+  }
+}
+
+static inline uint32_t
+membr_bits(struct memory_bit_reader *br, int bits)
+{
+  if (bits > br->available && (br->at_eof || !membr_fill(br, bits)))
+    return 0;
+  return (uint32_t)((br->bits >> (br->available -= bits)) & (((uint64_t)1 << bits) - 1));
+}
+
+static int
+membr_fill(struct memory_bit_reader *br, int bits)
+{
+  while (br->available < bits && br->offset < br->length)
+  {
+    br->bits = (br->bits << 8) | br->bytes[br->offset++];
+    br->available += 8;
+  }
+  if (bits > br->available)
+  {
+    br->at_eof = 1;
+    return 0;
+  }
+  return 1;
+}
+
+static int
+read_filter(struct archive_read *a, int64_t *end)
+{
+  struct rar *rar = (struct rar *)(a->format->data);
+  uint8_t flags, val, *code;
+  uint16_t length, i;
+
+  if (!rar_decode_byte(a, &flags))
+    return 0;
+  length = (flags & 0x07) + 1;
+  if (length == 7)
+  {
+    if (!rar_decode_byte(a, &val))
+      return 0;
+    length = val + 7;
+  }
+  else if (length == 8)
+  {
+    if (!rar_decode_byte(a, &val))
+      return 0;
+    length = val << 8;
+    if (!rar_decode_byte(a, &val))
+      return 0;
+    length |= val;
+  }
+
+  code = malloc(length);
+  if (!code)
+    return 0;
+  for (i = 0; i < length; i++)
+  {
+    if (!rar_decode_byte(a, &code[i]))
+    {
+      free(code);
+      return 0;
+    }
+  }
+  if (!parse_filter(a, code, length, flags))
+  {
+    free(code);
+    return 0;
+  }
+  free(code);
+
+  if (rar->filters.filterstart < *end)
+    *end = rar->filters.filterstart;
+
+  return 1;
+}
+
+static int
+execute_filter_delta(struct rar_filter *filter, struct rar_virtual_machine *vm)
+{
+  uint32_t length = filter->initialregisters[4];
+  uint32_t numchannels = filter->initialregisters[0];
+  uint8_t *src, *dst;
+  uint32_t i, idx;
+
+  if (length > PROGRAM_WORK_SIZE / 2)
+    return 0;
+
+  src = &vm->memory[0];
+  dst = &vm->memory[length];
+  for (i = 0; i < numchannels; i++)
+  {
+    uint8_t lastbyte = 0;
+    for (idx = i; idx < length; idx += numchannels)
+      lastbyte = dst[idx] = lastbyte - *src++;
+  }
+
+  filter->filteredblockaddress = length;
+  filter->filteredblocklength = length;
+
+  return 1;
+}
+
+static int
+execute_filter_e8(struct rar_filter *filter, struct rar_virtual_machine *vm, size_t pos, int e9also)
+{
+  uint32_t length = filter->initialregisters[4];
+  uint32_t filesize = 0x1000000;
+  uint32_t i;
+
+  if (length > PROGRAM_WORK_SIZE || length < 4)
+    return 0;
+
+  for (i = 0; i <= length - 5; i++)
+  {
+    if (vm->memory[i] == 0xE8 || (e9also && vm->memory[i] == 0xE9))
+    {
+      uint32_t currpos = (uint32_t)pos + i + 1;
+      int32_t address = (int32_t)vm_read_32(vm, i + 1);
+      if (address < 0 && currpos >= (uint32_t)-address)
+        vm_write_32(vm, i + 1, address + filesize);
+      else if (address >= 0 && (uint32_t)address < filesize)
+        vm_write_32(vm, i + 1, address - currpos);
+      i += 4;
+    }
+  }
+
+  filter->filteredblockaddress = 0;
+  filter->filteredblocklength = length;
+
+  return 1;
+}
+
+static int
+execute_filter_rgb(struct rar_filter *filter, struct rar_virtual_machine *vm)
+{
+  uint32_t stride = filter->initialregisters[0];
+  uint32_t byteoffset = filter->initialregisters[1];
+  uint32_t blocklength = filter->initialregisters[4];
+  uint8_t *src, *dst;
+  uint32_t i, j;
+
+  if (blocklength > PROGRAM_WORK_SIZE / 2 || stride > blocklength)
+    return 0;
+
+  src = &vm->memory[0];
+  dst = &vm->memory[blocklength];
+  for (i = 0; i < 3; i++) {
+    uint8_t byte = 0;
+    uint8_t *prev = dst + i - stride;
+    for (j = i; j < blocklength; j += 3)
+    {
+      if (prev >= dst)
+      {
+        uint32_t delta1 = abs(prev[3] - prev[0]);
+        uint32_t delta2 = abs(byte - prev[0]);
+        uint32_t delta3 = abs(prev[3] - prev[0] + byte - prev[0]);
+        if (delta1 > delta2 || delta1 > delta3)
+          byte = delta2 <= delta3 ? prev[3] : prev[0];
+      }
+      byte -= *src++;
+      dst[j] = byte;
+      prev += 3;
+    }
+  }
+  for (i = byteoffset; i < blocklength - 2; i += 3)
+  {
+    dst[i] += dst[i + 1];
+    dst[i + 2] += dst[i + 1];
+  }
+
+  filter->filteredblockaddress = blocklength;
+  filter->filteredblocklength = blocklength;
+
+  return 1;
+}
+
+static int
+execute_filter_audio(struct rar_filter *filter, struct rar_virtual_machine *vm)
+{
+  uint32_t length = filter->initialregisters[4];
+  uint32_t numchannels = filter->initialregisters[0];
+  uint8_t *src, *dst;
+  uint32_t i, j;
+
+  if (length > PROGRAM_WORK_SIZE / 2)
+    return 0;
+
+  src = &vm->memory[0];
+  dst = &vm->memory[length];
+  for (i = 0; i < numchannels; i++)
+  {
+    struct audio_state state;
+    memset(&state, 0, sizeof(state));
+    for (j = i; j < length; j += numchannels)
+    {
+      int8_t delta = (int8_t)*src++;
+      uint8_t predbyte, byte;
+      int prederror;
+      state.delta[2] = state.delta[1];
+      state.delta[1] = state.lastdelta - state.delta[0];
+      state.delta[0] = state.lastdelta;
+      predbyte = ((8 * state.lastbyte + state.weight[0] * state.delta[0] + state.weight[1] * state.delta[1] + state.weight[2] * state.delta[2]) >> 3) & 0xFF;
+      byte = (predbyte - delta) & 0xFF;
+      prederror = delta << 3;
+      state.error[0] += abs(prederror);
+      state.error[1] += abs(prederror - state.delta[0]); state.error[2] += abs(prederror + state.delta[0]);
+      state.error[3] += abs(prederror - state.delta[1]); state.error[4] += abs(prederror + state.delta[1]);
+      state.error[5] += abs(prederror - state.delta[2]); state.error[6] += abs(prederror + state.delta[2]);
+      state.lastdelta = (int8_t)(byte - state.lastbyte);
+      dst[j] = state.lastbyte = byte;
+      if (!(state.count++ & 0x1F))
+      {
+        uint8_t k, idx = 0;
+        for (k = 1; k < 7; k++)
+        {
+          if (state.error[k] < state.error[idx])
+            idx = k;
+        }
+        memset(state.error, 0, sizeof(state.error));
+        switch (idx)
+        {
+          case 1: if (state.weight[0] >= -16) state.weight[0]--; break;
+          case 2: if (state.weight[0] < 16) state.weight[0]++; break;
+          case 3: if (state.weight[1] >= -16) state.weight[1]--; break;
+          case 4: if (state.weight[1] < 16) state.weight[1]++; break;
+          case 5: if (state.weight[2] >= -16) state.weight[2]--; break;
+          case 6: if (state.weight[2] < 16) state.weight[2]++; break;
+        }
+      }
+    }
+  }
+
+  filter->filteredblockaddress = length;
+  filter->filteredblocklength = length;
+
+  return 1;
+}
+
+
+static int
+execute_filter(struct archive_read *a, struct rar_filter *filter, struct rar_virtual_machine *vm, size_t pos)
+{
+  if (filter->prog->fingerprint == 0x1D0E06077D)
+    return execute_filter_delta(filter, vm);
+  if (filter->prog->fingerprint == 0x35AD576887)
+    return execute_filter_e8(filter, vm, pos, 0);
+  if (filter->prog->fingerprint == 0x393CD7E57E)
+    return execute_filter_e8(filter, vm, pos, 1);
+  if (filter->prog->fingerprint == 0x951C2C5DC8)
+    return execute_filter_rgb(filter, vm);
+  if (filter->prog->fingerprint == 0xD8BC85E701)
+    return execute_filter_audio(filter, vm);
+
+  archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "No support for RAR VM program filter");
+  return 0;
+}
+
+static int
+rar_decode_byte(struct archive_read *a, uint8_t *byte)
+{
+  struct rar *rar = (struct rar *)(a->format->data);
+  struct rar_br *br = &(rar->br);
+  if (!rar_br_read_ahead(a, br, 8))
+    return 0;
+  *byte = (uint8_t)rar_br_bits(br, 8);
+  rar_br_consume(br, 8);
+  return 1;
+}
+
+static inline void
+vm_write_32(struct rar_virtual_machine* vm, size_t offset, uint32_t u32)
+{
+  archive_le32enc(vm->memory + offset, u32);
+}
+
+static inline uint32_t
+vm_read_32(struct rar_virtual_machine* vm, size_t offset)
+{
+  return archive_le32dec(vm->memory + offset);
+}
index 5d62d16..1f90994 100644 (file)
@@ -632,7 +632,7 @@ static int run_arm_filter(struct rar5* rar, struct filter_info* flt) {
                        /* 0xEB = ARM's BL (branch + link) instruction. */
                        offset = read_filter_data(rar,
                            (rar->cstate.solid_offset + flt->block_start + i) &
-                            rar->cstate.window_mask) & 0x00ffffff;
+                            (uint32_t)rar->cstate.window_mask) & 0x00ffffff;
 
                        offset -= (uint32_t) ((i + flt->block_start) / 4);
                        offset = (offset & 0x00ffffff) | 0xeb000000;
@@ -1012,7 +1012,16 @@ static int read_var_sized(struct archive_read* a, size_t* pvalue,
        return ret;
 }
 
-static int read_bits_32(struct rar5* rar, const uint8_t* p, uint32_t* value) {
+static int read_bits_32(struct archive_read* a, struct rar5* rar,
+       const uint8_t* p, uint32_t* value)
+{
+       if(rar->bits.in_addr >= rar->cstate.cur_block_size) {
+               archive_set_error(&a->archive,
+                       ARCHIVE_ERRNO_PROGRAMMER,
+                       "Premature end of stream during extraction of data (#1)");
+               return ARCHIVE_FATAL;
+       }
+
        uint32_t bits = ((uint32_t) p[rar->bits.in_addr]) << 24;
        bits |= p[rar->bits.in_addr + 1] << 16;
        bits |= p[rar->bits.in_addr + 2] << 8;
@@ -1023,7 +1032,16 @@ static int read_bits_32(struct rar5* rar, const uint8_t* p, uint32_t* value) {
        return ARCHIVE_OK;
 }
 
-static int read_bits_16(struct rar5* rar, const uint8_t* p, uint16_t* value) {
+static int read_bits_16(struct archive_read* a, struct rar5* rar,
+       const uint8_t* p, uint16_t* value)
+{
+       if(rar->bits.in_addr >= rar->cstate.cur_block_size) {
+               archive_set_error(&a->archive,
+                       ARCHIVE_ERRNO_PROGRAMMER,
+                       "Premature end of stream during extraction of data (#2)");
+               return ARCHIVE_FATAL;
+       }
+
        int bits = (int) ((uint32_t) p[rar->bits.in_addr]) << 16;
        bits |= (int) p[rar->bits.in_addr + 1] << 8;
        bits |= (int) p[rar->bits.in_addr + 2];
@@ -1039,8 +1057,8 @@ static void skip_bits(struct rar5* rar, int bits) {
 }
 
 /* n = up to 16 */
-static int read_consume_bits(struct rar5* rar, const uint8_t* p, int n,
-    int* value)
+static int read_consume_bits(struct archive_read* a, struct rar5* rar,
+       const uint8_t* p, int n, int* value)
 {
        uint16_t v;
        int ret, num;
@@ -1051,7 +1069,7 @@ static int read_consume_bits(struct rar5* rar, const uint8_t* p, int n,
                return ARCHIVE_FATAL;
        }
 
-       ret = read_bits_16(rar, p, &v);
+       ret = read_bits_16(a, rar, p, &v);
        if(ret != ARCHIVE_OK)
                return ret;
 
@@ -1099,6 +1117,44 @@ static int bid_standard(struct archive_read* a) {
        return -1;
 }
 
+static int bid_sfx(struct archive_read *a)
+{
+       const char *p;
+
+       if ((p = __archive_read_ahead(a, 7, NULL)) == NULL)
+               return -1;
+
+       if ((p[0] == 'M' && p[1] == 'Z') || memcmp(p, "\x7F\x45LF", 4) == 0) {
+               /* This is a PE file */
+               char signature[sizeof(rar5_signature_xor)];
+               ssize_t offset = 0x10000;
+               ssize_t window = 4096;
+               ssize_t bytes_avail;
+
+               rar5_signature(signature);
+
+               while (offset + window <= (1024 * 512)) {
+                       const char *buff = __archive_read_ahead(a, offset + window, &bytes_avail);
+                       if (buff == NULL) {
+                               /* Remaining bytes are less than window. */
+                               window >>= 1;
+                               if (window < 0x40)
+                                       return 0;
+                               continue;
+                       }
+                       p = buff + offset;
+                       while (p + 8 < buff + bytes_avail) {
+                               if (memcmp(p, signature, sizeof(signature)) == 0)
+                                       return 30;
+                               p += 0x10;
+                       }
+                       offset = p - buff;
+               }
+       }
+
+       return 0;
+}
+
 static int rar5_bid(struct archive_read* a, int best_bid) {
        int my_bid;
 
@@ -1109,6 +1165,10 @@ static int rar5_bid(struct archive_read* a, int best_bid) {
        if(my_bid > -1) {
                return my_bid;
        }
+       my_bid = bid_sfx(a);
+       if (my_bid > -1) {
+               return my_bid;
+       }
 
        return -1;
 }
@@ -1712,14 +1772,29 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
                }
        }
 
-       /* If we're currently switching volumes, ignore the new definition of
-        * window_size. */
-       if(rar->cstate.switch_multivolume == 0) {
-               /* Values up to 64M should fit into ssize_t on every
-                * architecture. */
-               rar->cstate.window_size = (ssize_t) window_size;
+       if(rar->cstate.window_size < (ssize_t) window_size &&
+           rar->cstate.window_buf)
+       {
+               /* If window_buf has been allocated before, reallocate it, so
+                * that its size will match new window_size. */
+
+               uint8_t* new_window_buf =
+                       realloc(rar->cstate.window_buf, window_size);
+
+               if(!new_window_buf) {
+                       archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER,
+                               "Not enough memory when trying to realloc the window "
+                               "buffer.");
+                       return ARCHIVE_FATAL;
+               }
+
+               rar->cstate.window_buf = new_window_buf;
        }
 
+       /* Values up to 64M should fit into ssize_t on every
+        * architecture. */
+       rar->cstate.window_size = (ssize_t) window_size;
+
        if(rar->file.solid > 0 && rar->file.solid_window_size == 0) {
                /* Solid files have to have the same window_size across
                   whole archive. Remember the window_size parameter
@@ -2273,6 +2348,62 @@ static int skip_base_block(struct archive_read* a) {
                return ret;
 }
 
+static int try_skip_sfx(struct archive_read *a)
+{
+       const char *p;
+
+       if ((p = __archive_read_ahead(a, 7, NULL)) == NULL)
+               return ARCHIVE_EOF;
+
+       if ((p[0] == 'M' && p[1] == 'Z') || memcmp(p, "\x7F\x45LF", 4) == 0)
+       {
+               char signature[sizeof(rar5_signature_xor)];
+               const void *h;
+               const char *q;
+               size_t skip, total = 0;
+               ssize_t bytes, window = 4096;
+
+               rar5_signature(signature);
+
+               while (total + window <= (1024 * 512)) {
+                       h = __archive_read_ahead(a, window, &bytes);
+                       if (h == NULL) {
+                               /* Remaining bytes are less than window. */
+                               window >>= 1;
+                               if (window < 0x40)
+                                       goto fatal;
+                               continue;
+                       }
+                       if (bytes < 0x40)
+                               goto fatal;
+                       p = h;
+                       q = p + bytes;
+
+                       /*
+                        * Scan ahead until we find something that looks
+                        * like the RAR header.
+                        */
+                       while (p + 8 < q) {
+                               if (memcmp(p, signature, sizeof(signature)) == 0) {
+                                       skip = p - (const char *)h;
+                                       __archive_read_consume(a, skip);
+                                       return (ARCHIVE_OK);
+                               }
+                               p += 0x10;
+                       }
+                       skip = p - (const char *)h;
+                       __archive_read_consume(a, skip);
+                       total += skip;
+               }
+       }
+
+       return ARCHIVE_OK;
+fatal:
+       archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+                       "Couldn't find out RAR header");
+       return (ARCHIVE_FATAL);
+}
+
 static int rar5_read_header(struct archive_read *a,
     struct archive_entry *entry)
 {
@@ -2281,6 +2412,8 @@ static int rar5_read_header(struct archive_read *a,
 
        if(rar->header_initialized == 0) {
                init_header(a);
+               if ((ret = try_skip_sfx(a)) < ARCHIVE_WARN)
+                       return ret;
                rar->header_initialized = 1;
        }
 
@@ -2342,7 +2475,7 @@ static void update_crc(struct rar5* rar, const uint8_t* p, size_t to_read) {
                 * `stored_crc32` info filled in. */
                if(rar->file.stored_crc32 > 0) {
                        rar->file.calculated_crc32 =
-                               crc32(rar->file.calculated_crc32, p, to_read);
+                               crc32(rar->file.calculated_crc32, p, (unsigned int)to_read);
                }
 
                /* Check if the file uses an optional BLAKE2sp checksum
@@ -2425,13 +2558,13 @@ static int create_decode_tables(uint8_t* bit_length,
 static int decode_number(struct archive_read* a, struct decode_table* table,
     const uint8_t* p, uint16_t* num)
 {
-       int i, bits, dist;
+       int i, bits, dist, ret;
        uint16_t bitfield;
        uint32_t pos;
        struct rar5* rar = get_context(a);
 
-       if(ARCHIVE_OK != read_bits_16(rar, p, &bitfield)) {
-               return ARCHIVE_EOF;
+       if(ARCHIVE_OK != (ret = read_bits_16(a, rar, p, &bitfield))) {
+               return ret;
        }
 
        bitfield &= 0xfffe;
@@ -2537,14 +2670,6 @@ static int parse_tables(struct archive_read* a, struct rar5* rar,
        for(i = 0; i < HUFF_TABLE_SIZE;) {
                uint16_t num;
 
-               if((rar->bits.in_addr + 6) >= rar->cstate.cur_block_size) {
-                       /* Truncated data, can't continue. */
-                       archive_set_error(&a->archive,
-                           ARCHIVE_ERRNO_FILE_FORMAT,
-                           "Truncated data in huffman tables (#2)");
-                       return ARCHIVE_FATAL;
-               }
-
                ret = decode_number(a, &rar->cstate.bd, p, &num);
                if(ret != ARCHIVE_OK) {
                        archive_set_error(&a->archive,
@@ -2561,8 +2686,8 @@ static int parse_tables(struct archive_read* a, struct rar5* rar,
                        /* 16..17: repeat previous code */
                        uint16_t n;
 
-                       if(ARCHIVE_OK != read_bits_16(rar, p, &n))
-                               return ARCHIVE_EOF;
+                       if(ARCHIVE_OK != (ret = read_bits_16(a, rar, p, &n)))
+                               return ret;
 
                        if(num == 16) {
                                n >>= 13;
@@ -2590,8 +2715,8 @@ static int parse_tables(struct archive_read* a, struct rar5* rar,
                        /* other codes: fill with zeroes `n` times */
                        uint16_t n;
 
-                       if(ARCHIVE_OK != read_bits_16(rar, p, &n))
-                               return ARCHIVE_EOF;
+                       if(ARCHIVE_OK != (ret = read_bits_16(a, rar, p, &n)))
+                               return ret;
 
                        if(num == 18) {
                                n >>= 13;
@@ -2696,33 +2821,35 @@ static int parse_block_header(struct archive_read* a, const uint8_t* p,
            ^ (uint8_t) (*block_size >> 16);
 
        if(calculated_cksum != hdr->block_cksum) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
                archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                    "Block checksum error: got 0x%x, expected 0x%x",
                    hdr->block_cksum, calculated_cksum);
 
                return ARCHIVE_FATAL;
+#endif
        }
 
        return ARCHIVE_OK;
 }
 
 /* Convenience function used during filter processing. */
-static int parse_filter_data(struct rar5* rar, const uint8_t* p,
-    uint32_t* filter_data)
+static int parse_filter_data(struct archive_read* a, struct rar5* rar,
+       const uint8_t* p, uint32_t* filter_data)
 {
-       int i, bytes;
+       int i, bytes, ret;
        uint32_t data = 0;
 
-       if(ARCHIVE_OK != read_consume_bits(rar, p, 2, &bytes))
-               return ARCHIVE_EOF;
+       if(ARCHIVE_OK != (ret = read_consume_bits(a, rar, p, 2, &bytes)))
+               return ret;
 
        bytes++;
 
        for(i = 0; i < bytes; i++) {
                uint16_t byte;
 
-               if(ARCHIVE_OK != read_bits_16(rar, p, &byte)) {
-                       return ARCHIVE_EOF;
+               if(ARCHIVE_OK != (ret = read_bits_16(a, rar, p, &byte))) {
+                       return ret;
                }
 
                /* Cast to uint32_t will ensure the shift operation will not
@@ -2765,16 +2892,17 @@ static int parse_filter(struct archive_read* ar, const uint8_t* p) {
        uint16_t filter_type;
        struct filter_info* filt = NULL;
        struct rar5* rar = get_context(ar);
+       int ret;
 
        /* Read the parameters from the input stream. */
-       if(ARCHIVE_OK != parse_filter_data(rar, p, &block_start))
-               return ARCHIVE_EOF;
+       if(ARCHIVE_OK != (ret = parse_filter_data(ar, rar, p, &block_start)))
+               return ret;
 
-       if(ARCHIVE_OK != parse_filter_data(rar, p, &block_length))
-               return ARCHIVE_EOF;
+       if(ARCHIVE_OK != (ret = parse_filter_data(ar, rar, p, &block_length)))
+               return ret;
 
-       if(ARCHIVE_OK != read_bits_16(rar, p, &filter_type))
-               return ARCHIVE_EOF;
+       if(ARCHIVE_OK != (ret = read_bits_16(ar, rar, p, &filter_type)))
+               return ret;
 
        filter_type >>= 13;
        skip_bits(rar, 3);
@@ -2814,8 +2942,8 @@ static int parse_filter(struct archive_read* ar, const uint8_t* p) {
        if(filter_type == FILTER_DELTA) {
                int channels;
 
-               if(ARCHIVE_OK != read_consume_bits(rar, p, 5, &channels))
-                       return ARCHIVE_EOF;
+               if(ARCHIVE_OK != (ret = read_consume_bits(ar, rar, p, 5, &channels)))
+                       return ret;
 
                filt->channels = channels + 1;
        }
@@ -2823,10 +2951,11 @@ static int parse_filter(struct archive_read* ar, const uint8_t* p) {
        return ARCHIVE_OK;
 }
 
-static int decode_code_length(struct rar5* rar, const uint8_t* p,
-    uint16_t code)
+static int decode_code_length(struct archive_read* a, struct rar5* rar,
+       const uint8_t* p, uint16_t code)
 {
        int lbits, length = 2;
+
        if(code < 8) {
                lbits = 0;
                length += code;
@@ -2838,7 +2967,7 @@ static int decode_code_length(struct rar5* rar, const uint8_t* p,
        if(lbits > 0) {
                int add;
 
-               if(ARCHIVE_OK != read_consume_bits(rar, p, lbits, &add))
+               if(ARCHIVE_OK != read_consume_bits(a, rar, p, lbits, &add))
                        return -1;
 
                length += add;
@@ -2933,7 +3062,7 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
                        continue;
                } else if(num >= 262) {
                        uint16_t dist_slot;
-                       int len = decode_code_length(rar, p, num - 262),
+                       int len = decode_code_length(a, rar, p, num - 262),
                                dbits,
                                dist = 1;
 
@@ -2975,12 +3104,12 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
                                        uint16_t low_dist;
 
                                        if(dbits > 4) {
-                                               if(ARCHIVE_OK != read_bits_32(
-                                                   rar, p, &add)) {
+                                               if(ARCHIVE_OK != (ret = read_bits_32(
+                                                   a, rar, p, &add))) {
                                                        /* Return EOF if we
                                                         * can't read more
                                                         * data. */
-                                                       return ARCHIVE_EOF;
+                                                       return ret;
                                                }
 
                                                skip_bits(rar, dbits - 4);
@@ -3015,11 +3144,11 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
                                        /* dbits is one of [0,1,2,3] */
                                        int add;
 
-                                       if(ARCHIVE_OK != read_consume_bits(rar,
-                                            p, dbits, &add)) {
+                                       if(ARCHIVE_OK != (ret = read_consume_bits(a, rar,
+                                            p, dbits, &add))) {
                                                /* Return EOF if we can't read
                                                 * more data. */
-                                               return ARCHIVE_EOF;
+                                               return ret;
                                        }
 
                                        dist += add;
@@ -3076,7 +3205,11 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
                                return ARCHIVE_FATAL;
                        }
 
-                       len = decode_code_length(rar, p, len_slot);
+                       len = decode_code_length(a, rar, p, len_slot);
+                       if (len == -1) {
+                               return ARCHIVE_FATAL;
+                       }
+
                        rar->cstate.last_len = len;
 
                        if(ARCHIVE_OK != copy_string(a, len, dist))
@@ -3600,6 +3733,16 @@ static int do_uncompress_file(struct archive_read* a) {
                rar->cstate.initialized = 1;
        }
 
+       /* Don't allow extraction if window_size is invalid. */
+       if(rar->cstate.window_size == 0) {
+               archive_set_error(&a->archive,
+                       ARCHIVE_ERRNO_FILE_FORMAT,
+                       "Invalid window size declaration in this file");
+
+               /* This should never happen in valid files. */
+               return ARCHIVE_FATAL;
+       }
+
        if(rar->cstate.all_filters_applied == 1) {
                /* We use while(1) here, but standard case allows for just 1
                 * iteration. The loop will iterate if process_block() didn't
@@ -3770,6 +3913,13 @@ static int do_unpack(struct archive_read* a, struct rar5* rar,
                        case GOOD:
                                /* fallthrough */
                        case BEST:
+                               /* No data is returned here. But because a sparse-file aware
+                                * caller (like archive_read_data_into_fd) may treat zero-size
+                                * as a sparse file block, we need to update the offset
+                                * accordingly. At this point the decoder doesn't have any
+                                * pending uncompressed data blocks, so the current position in
+                                * the output file should be last_write_ptr. */
+                               if (offset) *offset = rar->cstate.last_write_ptr;
                                return uncompress_file(a);
                        default:
                                archive_set_error(&a->archive,
index 7e8feba..93c3fd5 100644 (file)
@@ -407,14 +407,13 @@ archive_read_format_tar_bid(struct archive_read *a, int best_bid)
        /*
         * Check format of mode/uid/gid/mtime/size/rdevmajor/rdevminor fields.
         */
-       if (bid > 0 && (
-           validate_number_field(header->mode, sizeof(header->mode)) == 0
+       if (validate_number_field(header->mode, sizeof(header->mode)) == 0
            || validate_number_field(header->uid, sizeof(header->uid)) == 0
            || validate_number_field(header->gid, sizeof(header->gid)) == 0
            || validate_number_field(header->mtime, sizeof(header->mtime)) == 0
            || validate_number_field(header->size, sizeof(header->size)) == 0
            || validate_number_field(header->rdevmajor, sizeof(header->rdevmajor)) == 0
-           || validate_number_field(header->rdevminor, sizeof(header->rdevminor)) == 0)) {
+           || validate_number_field(header->rdevminor, sizeof(header->rdevminor)) == 0) {
                bid = 0;
        }
 
@@ -573,11 +572,15 @@ archive_read_format_tar_read_header(struct archive_read *a,
                        l = wcslen(wp);
                        if (l > 0 && wp[l - 1] == L'/') {
                                archive_entry_set_filetype(entry, AE_IFDIR);
+                               tar->entry_bytes_remaining = 0;
+                               tar->entry_padding = 0;
                        }
                } else if ((p = archive_entry_pathname(entry)) != NULL) {
                        l = strlen(p);
                        if (l > 0 && p[l - 1] == '/') {
                                archive_entry_set_filetype(entry, AE_IFDIR);
+                               tar->entry_bytes_remaining = 0;
+                               tar->entry_padding = 0;
                        }
                }
        }
@@ -1396,6 +1399,7 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar,
     struct archive_entry *entry, const void *h, size_t *unconsumed)
 {
        int64_t size;
+       size_t msize;
        const void *data;
        const char *p, *name;
        const wchar_t *wp, *wname;
@@ -1434,6 +1438,11 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar,
 
        /* Read the body as a Mac OS metadata blob. */
        size = archive_entry_size(entry);
+       msize = (size_t)size;
+       if (size < 0 || (uintmax_t)msize != (uintmax_t)size) {
+               *unconsumed = 0;
+               return (ARCHIVE_FATAL);
+       }
 
        /*
         * TODO: Look beyond the body here to peek at the next header.
@@ -1447,13 +1456,13 @@ read_mac_metadata_blob(struct archive_read *a, struct tar *tar,
         * Q: Is the above idea really possible?  Even
         * when there are GNU or pax extension entries?
         */
-       data = __archive_read_ahead(a, (size_t)size, NULL);
+       data = __archive_read_ahead(a, msize, NULL);
        if (data == NULL) {
                *unconsumed = 0;
                return (ARCHIVE_FATAL);
        }
-       archive_entry_copy_mac_metadata(entry, data, (size_t)size);
-       *unconsumed = (size_t)((size + 511) & ~ 511);
+       archive_entry_copy_mac_metadata(entry, data, msize);
+       *unconsumed = (msize + 511) & ~ 511;
        tar_flush_unconsumed(a, unconsumed);
        return (tar_read_header(a, tar, entry, unconsumed));
 }
@@ -2098,6 +2107,21 @@ pax_attribute(struct archive_read *a, struct tar *tar,
                        /* "size" is the size of the data in the entry. */
                        tar->entry_bytes_remaining
                            = tar_atol10(value, strlen(value));
+                       if (tar->entry_bytes_remaining < 0) {
+                               tar->entry_bytes_remaining = 0;
+                               archive_set_error(&a->archive,
+                                   ARCHIVE_ERRNO_MISC,
+                                   "Tar size attribute is negative");
+                               return (ARCHIVE_FATAL);
+                       }
+                       if (tar->entry_bytes_remaining == INT64_MAX) {
+                               /* Note: tar_atol returns INT64_MAX on overflow */
+                               tar->entry_bytes_remaining = 0;
+                               archive_set_error(&a->archive,
+                                   ARCHIVE_ERRNO_MISC,
+                                   "Tar size attribute overflow");
+                               return (ARCHIVE_FATAL);
+                       }
                        /*
                         * The "size" pax header keyword always overrides the
                         * "size" field in the tar header.
index 2732996..61ab29e 100644 (file)
@@ -530,11 +530,11 @@ strtoi_lim(const char *str, const char **ep, int llim, int ulim)
 static time_t
 time_from_tm(struct tm *t)
 {
-#if HAVE_TIMEGM
+#if HAVE__MKGMTIME
+        return _mkgmtime(t);
+#elif HAVE_TIMEGM
         /* Use platform timegm() if available. */
         return (timegm(t));
-#elif HAVE__MKGMTIME64
-        return (_mkgmtime64(t));
 #else
         /* Else use direct calculation using POSIX assumptions. */
         /* First, fix up tm_yday based on the year/month/day. */
index 503ff58..ec9cb19 100644 (file)
@@ -624,7 +624,9 @@ read_toc(struct archive_read *a)
                __archive_read_consume(a, xar->toc_chksum_size);
                xar->offset += xar->toc_chksum_size;
                if (r != ARCHIVE_OK)
+#ifndef DONT_FAIL_ON_CRC_ERROR
                        return (ARCHIVE_FATAL);
+#endif
        }
 
        /*
@@ -827,10 +829,12 @@ xar_read_header(struct archive_read *a, struct archive_entry *entry)
                    xattr->a_sum.val, xattr->a_sum.len,
                    xattr->e_sum.val, xattr->e_sum.len);
                if (r != ARCHIVE_OK) {
+#ifndef DONT_FAIL_ON_CRC_ERROR
                        archive_set_error(&(a->archive), ARCHIVE_ERRNO_MISC,
                            "Xattr checksum error");
                        r = ARCHIVE_WARN;
                        break;
+#endif
                }
                if (xattr->name.s == NULL) {
                        archive_set_error(&(a->archive), ARCHIVE_ERRNO_MISC,
@@ -1123,7 +1127,7 @@ atohex(unsigned char *b, size_t bsize, const char *p, size_t psize)
                        x |= p[1] - '0';
                else
                        return (-1);
-               
+
                *b++ = x;
                bsize--;
                p += 2;
@@ -1135,11 +1139,11 @@ atohex(unsigned char *b, size_t bsize, const char *p, size_t psize)
 static time_t
 time_from_tm(struct tm *t)
 {
-#if HAVE_TIMEGM
+#if HAVE__MKGMTIME
+        return _mkgmtime(t);
+#elif HAVE_TIMEGM
         /* Use platform timegm() if available. */
         return (timegm(t));
-#elif HAVE__MKGMTIME64
-        return (_mkgmtime64(t));
 #else
         /* Else use direct calculation using POSIX assumptions. */
         /* First, fix up tm_yday based on the year/month/day. */
index 21d41cc..c3b9b57 100644 (file)
@@ -58,6 +58,9 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_read_support_format_zip.c 201102
 #ifdef HAVE_LZMA_H
 #include <lzma.h>
 #endif
+#ifdef HAVE_ZSTD_H
+#include <zstd.h>
+#endif
 
 #include "archive.h"
 #include "archive_digest_private.h"
@@ -191,6 +194,11 @@ struct zip {
        char            bzstream_valid;
 #endif
 
+#if HAVE_ZSTD_H && HAVE_LIBZSTD
+       ZSTD_DStream    *zstdstream;
+       char            zstdstream_valid;
+#endif
+
        IByteIn                 zipx_ppmd_stream;
        ssize_t                 zipx_ppmd_read_compressed;
        CPpmd8                  ppmd8;
@@ -435,6 +443,7 @@ static const struct {
        {17, "reserved"}, /* Reserved by PKWARE */
        {18, "ibm-terse-new"}, /* File is compressed using IBM TERSE (new) */
        {19, "ibm-lz777"},/* IBM LZ77 z Architecture (PFS) */
+       {93, "zstd"},     /*  Zstandard (zstd) Compression */
        {95, "xz"},       /* XZ compressed data */
        {96, "jpeg"},     /* JPEG compressed data */
        {97, "wav-pack"}, /* WavPack compressed data */
@@ -1144,7 +1153,8 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry,
                            (intmax_t)zip_entry->compressed_size);
                        ret = ARCHIVE_WARN;
                }
-               if (zip_entry->uncompressed_size == 0) {
+               if (zip_entry->uncompressed_size == 0 ||
+                       zip_entry->uncompressed_size == 0xffffffff) {
                        zip_entry->uncompressed_size
                            = zip_entry_central_dir.uncompressed_size;
                } else if (zip_entry->uncompressed_size
@@ -1186,7 +1196,7 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry,
                {
                        // symlink target string appeared to be compressed
                        int status = ARCHIVE_FATAL;
-                       const void *uncompressed_buffer;
+                       const void *uncompressed_buffer = NULL;
 
                        switch (zip->entry->compression)
                        {
@@ -1657,7 +1667,7 @@ zipx_lzma_alone_init(struct archive_read *a, struct zip *zip)
         */
 
        /* Read magic1,magic2,lzma_params from the ZIPX stream. */
-       if((p = __archive_read_ahead(a, 9, NULL)) == NULL) {
+       if(zip->entry_bytes_remaining < 9 || (p = __archive_read_ahead(a, 9, NULL)) == NULL) {
                archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
                    "Truncated lzma data");
                return (ARCHIVE_FATAL);
@@ -2176,11 +2186,11 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
 
        /* Setup buffer boundaries. */
        zip->bzstream.next_in = (char*)(uintptr_t) compressed_buff;
-       zip->bzstream.avail_in = in_bytes;
+       zip->bzstream.avail_in = (uint32_t)in_bytes;
        zip->bzstream.total_in_hi32 = 0;
        zip->bzstream.total_in_lo32 = 0;
        zip->bzstream.next_out = (char*) zip->uncompressed_buffer;
-       zip->bzstream.avail_out = zip->uncompressed_buffer_size;
+       zip->bzstream.avail_out = (uint32_t)zip->uncompressed_buffer_size;
        zip->bzstream.total_out_hi32 = 0;
        zip->bzstream.total_out_lo32 = 0;
 
@@ -2217,7 +2227,7 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
        to_consume = zip->bzstream.total_in_lo32;
        __archive_read_consume(a, to_consume);
 
-       total_out = ((uint64_t) zip->bzstream.total_out_hi32 << 32) +
+       total_out = ((uint64_t) zip->bzstream.total_out_hi32 << 32) |
            zip->bzstream.total_out_lo32;
 
        zip->entry_bytes_remaining -= to_consume;
@@ -2238,6 +2248,140 @@ zip_read_data_zipx_bzip2(struct archive_read *a, const void **buff,
 
 #endif
 
+#if HAVE_ZSTD_H && HAVE_LIBZSTD
+static int
+zipx_zstd_init(struct archive_read *a, struct zip *zip)
+{
+       size_t r;
+
+       /* Deallocate already existing Zstd decompression context if it
+        * exists. */
+       if(zip->zstdstream_valid) {
+               ZSTD_freeDStream(zip->zstdstream);
+               zip->zstdstream_valid = 0;
+       }
+
+       /* Allocate a new Zstd decompression context. */
+       zip->zstdstream = ZSTD_createDStream();
+
+       r = ZSTD_initDStream(zip->zstdstream);
+       if (ZSTD_isError(r)) {
+                archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                       "Error initializing zstd decompressor: %s",
+                       ZSTD_getErrorName(r));
+
+               return ARCHIVE_FAILED;
+       }
+
+       /* Mark the zstdstream field to be released in cleanup phase. */
+       zip->zstdstream_valid = 1;
+
+       /* (Re)allocate the buffer that will contain decompressed bytes. */
+       free(zip->uncompressed_buffer);
+
+       zip->uncompressed_buffer_size = ZSTD_DStreamOutSize();
+       zip->uncompressed_buffer =
+           (uint8_t*) malloc(zip->uncompressed_buffer_size);
+       if (zip->uncompressed_buffer == NULL) {
+               archive_set_error(&a->archive, ENOMEM,
+                       "No memory for Zstd decompression");
+
+               return ARCHIVE_FATAL;
+       }
+
+       /* Initialization done. */
+       zip->decompress_init = 1;
+       return ARCHIVE_OK;
+}
+
+static int
+zip_read_data_zipx_zstd(struct archive_read *a, const void **buff,
+    size_t *size, int64_t *offset)
+{
+       struct zip *zip = (struct zip *)(a->format->data);
+       ssize_t bytes_avail = 0, in_bytes, to_consume;
+       const void *compressed_buff;
+       int r;
+       size_t ret;
+       uint64_t total_out;
+       ZSTD_outBuffer out;
+       ZSTD_inBuffer in;
+
+       (void) offset; /* UNUSED */
+
+       /* Initialize decompression context if we're here for the first time. */
+       if(!zip->decompress_init) {
+               r = zipx_zstd_init(a, zip);
+               if(r != ARCHIVE_OK)
+                       return r;
+       }
+
+       /* Fetch more compressed bytes */
+       compressed_buff = __archive_read_ahead(a, 1, &bytes_avail);
+       if(bytes_avail < 0) {
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+                   "Truncated zstd file body");
+               return (ARCHIVE_FATAL);
+       }
+
+       in_bytes = zipmin(zip->entry_bytes_remaining, bytes_avail);
+       if(in_bytes < 1) {
+               /* zstd doesn't complain when caller feeds avail_in == 0.
+                * It will actually return success in this case, which is
+                * undesirable. This is why we need to make this check
+                * manually. */
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
+                   "Truncated zstd file body");
+               return (ARCHIVE_FATAL);
+       }
+
+       /* Setup buffer boundaries */
+       in.src = compressed_buff;
+       in.size = in_bytes;
+       in.pos = 0;
+       out = (ZSTD_outBuffer) { zip->uncompressed_buffer, zip->uncompressed_buffer_size, 0 };
+
+       /* Perform the decompression. */
+       ret = ZSTD_decompressStream(zip->zstdstream, &out, &in);
+       if (ZSTD_isError(ret)) {
+               archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+                       "Error during zstd decompression: %s",
+                       ZSTD_getErrorName(ret));
+               return (ARCHIVE_FATAL);
+       }
+
+       /* Check end of the stream. */
+       if (ret == 0) {
+               if ((in.pos == in.size) && (out.pos < out.size)) {
+                       zip->end_of_entry = 1;
+                       ZSTD_freeDStream(zip->zstdstream);
+                       zip->zstdstream_valid = 0;
+               }
+       }
+
+       /* Update the pointers so decompressor can continue decoding. */
+       to_consume = in.pos;
+       __archive_read_consume(a, to_consume);
+
+       total_out = out.pos;
+
+       zip->entry_bytes_remaining -= to_consume;
+       zip->entry_compressed_bytes_read += to_consume;
+       zip->entry_uncompressed_bytes_read += total_out;
+
+       /* Give libarchive its due. */
+       *size = total_out;
+       *buff = zip->uncompressed_buffer;
+
+       /* Seek for optional marker, like in other entries. */
+       r = consume_optional_marker(a, zip);
+       if(r != ARCHIVE_OK)
+               return r;
+
+       return ARCHIVE_OK;
+}
+#endif
+
 #ifdef HAVE_ZLIB_H
 static int
 zip_deflate_init(struct archive_read *a, struct zip *zip)
@@ -2858,6 +3002,11 @@ archive_read_format_zip_read_data(struct archive_read *a,
                r = zip_read_data_zipx_xz(a, buff, size, offset);
                break;
 #endif
+#if HAVE_ZSTD_H && HAVE_LIBZSTD
+       case 93: /* ZIPx Zstd compression. */
+               r = zip_read_data_zipx_zstd(a, buff, size, offset);
+               break;
+#endif
        /* PPMd support is built-in, so we don't need any #if guards. */
        case 98: /* ZIPx PPMd compression. */
                r = zip_read_data_zipx_ppmd(a, buff, size, offset);
@@ -2948,6 +3097,12 @@ archive_read_format_zip_cleanup(struct archive_read *a)
        }
 #endif
 
+#if HAVE_ZSTD_H && HAVE_LIBZSTD
+       if (zip->zstdstream_valid) {
+               ZSTD_freeDStream(zip->zstdstream);
+       }
+#endif
+
        free(zip->uncompressed_buffer);
 
        if (zip->ppmd8_valid)
index 7460ded..accf526 100644 (file)
@@ -745,7 +745,7 @@ archive_string_append_from_wcs_in_codepage(struct archive_string *as,
                                dp = &defchar_used;
                        count = WideCharToMultiByte(to_cp, 0, ws, wslen,
                            as->s + as->length,
-                           (int)as->buffer_length - as->length - 1, NULL, dp);
+                           (int)as->buffer_length - (int)as->length - 1, NULL, dp);
                        if (count == 0 &&
                            GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
                                /* Expand the MBS buffer and retry. */
@@ -1324,6 +1324,10 @@ free_sconv_object(struct archive_string_conv *sc)
 }
 
 #if defined(_WIN32) && !defined(__CYGWIN__)
+# if defined(WINAPI_FAMILY_PARTITION) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+#  define GetOEMCP() CP_OEMCP
+# endif
+
 static unsigned
 my_atoi(const char *p)
 {
@@ -3988,10 +3992,10 @@ int
 archive_mstring_get_mbs_l(struct archive *a, struct archive_mstring *aes,
     const char **p, size_t *length, struct archive_string_conv *sc)
 {
-       int r, ret = 0;
-
-       (void)r; /* UNUSED */
+       int ret = 0;
 #if defined(_WIN32) && !defined(__CYGWIN__)
+       int r;
+
        /*
         * Internationalization programming on Windows must use Wide
         * characters because Windows platform cannot make locale UTF-8.
index b1582ed..40603c4 100644 (file)
@@ -42,9 +42,20 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_util.c 201098 2009-12-28 02:58:1
 #ifdef HAVE_STRING_H
 #include <string.h>
 #endif
-#if defined(HAVE_WINCRYPT_H) && !defined(__CYGWIN__)
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+/* don't use bcrypt when XP needs to be supported */
+#include <bcrypt.h>
+
+/* Common in other bcrypt implementations, but missing from VS2008. */
+#ifndef BCRYPT_SUCCESS
+#define BCRYPT_SUCCESS(r) ((NTSTATUS)(r) == STATUS_SUCCESS)
+#endif
+
+#elif defined(HAVE_WINCRYPT_H)
 #include <wincrypt.h>
 #endif
+#endif
 #ifdef HAVE_ZLIB_H
 #include <zlib.h>
 #endif
@@ -233,14 +244,16 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
                L'm', L'n', L'o', L'p', L'q', L'r', L's', L't',
                L'u', L'v', L'w', L'x', L'y', L'z'
        };
-       HCRYPTPROV hProv;
        struct archive_wstring temp_name;
        wchar_t *ws;
        DWORD attr;
        wchar_t *xp, *ep;
        int fd;
-
-       hProv = (HCRYPTPROV)NULL;
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+       BCRYPT_ALG_HANDLE hAlg = NULL;
+#else
+       HCRYPTPROV hProv = (HCRYPTPROV)NULL;
+#endif
        fd = -1;
        ws = NULL;
 
@@ -314,23 +327,42 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
                        abort();
        }
 
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+       if (!BCRYPT_SUCCESS(BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_RNG_ALGORITHM,
+               NULL, 0))) {
+               la_dosmaperr(GetLastError());
+               goto exit_tmpfile;
+       }
+#else
        if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
                CRYPT_VERIFYCONTEXT)) {
                la_dosmaperr(GetLastError());
                goto exit_tmpfile;
        }
+#endif
 
        for (;;) {
                wchar_t *p;
                HANDLE h;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+               CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
 
                /* Generate a random file name through CryptGenRandom(). */
                p = xp;
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+               if (!BCRYPT_SUCCESS(BCryptGenRandom(hAlg, (PUCHAR)p,
+                   (DWORD)(ep - p)*sizeof(wchar_t), 0))) {
+                       la_dosmaperr(GetLastError());
+                       goto exit_tmpfile;
+               }
+#else
                if (!CryptGenRandom(hProv, (DWORD)(ep - p)*sizeof(wchar_t),
                    (BYTE*)p)) {
                        la_dosmaperr(GetLastError());
                        goto exit_tmpfile;
                }
+#endif
                for (; p < ep; p++)
                        *p = num[((DWORD)*p) % (sizeof(num)/sizeof(num[0]))];
 
@@ -347,6 +379,17 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
                        /* mkstemp */
                        attr = FILE_ATTRIBUTE_NORMAL;
                }
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+               ZeroMemory(&createExParams, sizeof(createExParams));
+               createExParams.dwSize = sizeof(createExParams);
+               createExParams.dwFileAttributes = attr & 0xFFFF;
+               createExParams.dwFileFlags = attr & 0xFFF00000;
+               h = CreateFile2(ws,
+                   GENERIC_READ | GENERIC_WRITE | DELETE,
+                   0,/* Not share */
+                       CREATE_NEW,
+                       &createExParams);
+#else
                h = CreateFileW(ws,
                    GENERIC_READ | GENERIC_WRITE | DELETE,
                    0,/* Not share */
@@ -354,6 +397,7 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
                    CREATE_NEW,/* Create a new file only */
                    attr,
                    NULL);
+#endif
                if (h == INVALID_HANDLE_VALUE) {
                        /* The same file already exists. retry with
                         * a new filename. */
@@ -372,8 +416,13 @@ __archive_mktempx(const char *tmpdir, wchar_t *template)
                        break;/* success! */
        }
 exit_tmpfile:
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+       if (hAlg != NULL)
+               BCryptCloseAlgorithmProvider(hAlg, 0);
+#else
        if (hProv != (HCRYPTPROV)NULL)
                CryptReleaseContext(hProv, 0);
+#endif
        free(ws);
        if (template == temp_name.s)
                archive_wstring_free(&temp_name);
index 624e270..ebc5eef 100644 (file)
@@ -234,7 +234,11 @@ la_CreateFile(const char *path, DWORD dwDesiredAccess, DWORD dwShareMode,
 {
        wchar_t *wpath;
        HANDLE handle;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
 
+#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
        handle = CreateFileA(path, dwDesiredAccess, dwShareMode,
            lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
            hTemplateFile);
@@ -242,12 +246,25 @@ la_CreateFile(const char *path, DWORD dwDesiredAccess, DWORD dwShareMode,
                return (handle);
        if (GetLastError() != ERROR_PATH_NOT_FOUND)
                return (handle);
+#endif
        wpath = __la_win_permissive_name(path);
        if (wpath == NULL)
-               return (handle);
+               return INVALID_HANDLE_VALUE;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       ZeroMemory(&createExParams, sizeof(createExParams));
+       createExParams.dwSize = sizeof(createExParams);
+       createExParams.dwFileAttributes = dwFlagsAndAttributes & 0xFFFF;
+       createExParams.dwFileFlags = dwFlagsAndAttributes & 0xFFF00000;
+       createExParams.dwSecurityQosFlags = dwFlagsAndAttributes & 0x000F00000;
+       createExParams.lpSecurityAttributes = lpSecurityAttributes;
+       createExParams.hTemplateFile = hTemplateFile;
+       handle = CreateFile2(wpath, dwDesiredAccess, dwShareMode,
+           dwCreationDisposition, &createExParams);
+#else /* !WINAPI_PARTITION_DESKTOP */
        handle = CreateFileW(wpath, dwDesiredAccess, dwShareMode,
            lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes,
            hTemplateFile);
+#endif /* !WINAPI_PARTITION_DESKTOP */
        free(wpath);
        return (handle);
 }
@@ -305,7 +322,10 @@ __la_open(const char *path, int flags, ...)
                 * "Permission denied" error.
                 */
                attr = GetFileAttributesA(path);
-               if (attr == (DWORD)-1 && GetLastError() == ERROR_PATH_NOT_FOUND) {
+#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
+               if (attr == (DWORD)-1 && GetLastError() == ERROR_PATH_NOT_FOUND)
+#endif
+               {
                        ws = __la_win_permissive_name(path);
                        if (ws == NULL) {
                                errno = EINVAL;
@@ -320,7 +340,7 @@ __la_open(const char *path, int flags, ...)
                }
                if (attr & FILE_ATTRIBUTE_DIRECTORY) {
                        HANDLE handle;
-
+#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
                        if (ws != NULL)
                                handle = CreateFileW(ws, 0, 0, NULL,
                                    OPEN_EXISTING,
@@ -333,6 +353,15 @@ __la_open(const char *path, int flags, ...)
                                    FILE_FLAG_BACKUP_SEMANTICS |
                                    FILE_ATTRIBUTE_READONLY,
                                        NULL);
+#else /* !WINAPI_PARTITION_DESKTOP */
+                       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+                       ZeroMemory(&createExParams, sizeof(createExParams));
+                       createExParams.dwSize = sizeof(createExParams);
+                       createExParams.dwFileAttributes = FILE_ATTRIBUTE_READONLY;
+                       createExParams.dwFileFlags = FILE_FLAG_BACKUP_SEMANTICS;
+                       handle = CreateFile2(ws, 0, 0,
+                               OPEN_EXISTING, &createExParams);
+#endif /* !WINAPI_PARTITION_DESKTOP */
                        free(ws);
                        if (handle == INVALID_HANDLE_VALUE) {
                                la_dosmaperr(GetLastError());
index 38c14cb..ec3c95c 100644 (file)
@@ -60,8 +60,6 @@ __FBSDID("$FreeBSD: head/lib/libarchive/archive_write.c 201099 2009-12-28 03:03:
 #include "archive_private.h"
 #include "archive_write_private.h"
 
-static struct archive_vtable *archive_write_vtable(void);
-
 static int     _archive_filter_code(struct archive *, int);
 static const char *_archive_filter_name(struct archive *, int);
 static int64_t _archive_filter_bytes(struct archive *, int);
@@ -79,26 +77,18 @@ struct archive_none {
        char *next;
 };
 
-static struct archive_vtable *
-archive_write_vtable(void)
-{
-       static struct archive_vtable av;
-       static int inited = 0;
-
-       if (!inited) {
-               av.archive_close = _archive_write_close;
-               av.archive_filter_bytes = _archive_filter_bytes;
-               av.archive_filter_code = _archive_filter_code;
-               av.archive_filter_name = _archive_filter_name;
-               av.archive_filter_count = _archive_write_filter_count;
-               av.archive_free = _archive_write_free;
-               av.archive_write_header = _archive_write_header;
-               av.archive_write_finish_entry = _archive_write_finish_entry;
-               av.archive_write_data = _archive_write_data;
-               inited = 1;
-       }
-       return (&av);
-}
+static const struct archive_vtable
+archive_write_vtable = {
+       .archive_close = _archive_write_close,
+       .archive_filter_bytes = _archive_filter_bytes,
+       .archive_filter_code = _archive_filter_code,
+       .archive_filter_name = _archive_filter_name,
+       .archive_filter_count = _archive_write_filter_count,
+       .archive_free = _archive_write_free,
+       .archive_write_header = _archive_write_header,
+       .archive_write_finish_entry = _archive_write_finish_entry,
+       .archive_write_data = _archive_write_data,
+};
 
 /*
  * Allocate, initialize and return an archive object.
@@ -114,7 +104,7 @@ archive_write_new(void)
                return (NULL);
        a->archive.magic = ARCHIVE_WRITE_MAGIC;
        a->archive.state = ARCHIVE_STATE_NEW;
-       a->archive.vtable = archive_write_vtable();
+       a->archive.vtable = &archive_write_vtable;
        /*
         * The value 10240 here matches the traditional tar default,
         * but is otherwise arbitrary.
@@ -211,6 +201,10 @@ __archive_write_allocate_filter(struct archive *_a)
        struct archive_write_filter *f;
 
        f = calloc(1, sizeof(*f));
+
+       if (f == NULL)
+               return (NULL);
+
        f->archive = _a;
        f->state = ARCHIVE_WRITE_FILTER_STATE_NEW;
        if (a->filter_first == NULL)
@@ -316,6 +310,25 @@ __archive_write_output(struct archive_write *a, const void *buff, size_t length)
        return (__archive_write_filter(a->filter_first, buff, length));
 }
 
+static int
+__archive_write_filters_flush(struct archive_write *a)
+{
+       struct archive_write_filter *f;
+       int ret, ret1;
+
+       ret = ARCHIVE_OK;
+       for (f = a->filter_first; f != NULL; f = f->next_filter) {
+               if (f->flush != NULL && f->bytes_written > 0) {
+                       ret1 = (f->flush)(f);
+                       if (ret1 < ret)
+                               ret = ret1;
+                       if (ret1 < ARCHIVE_WARN)
+                               f->state = ARCHIVE_WRITE_FILTER_STATE_FATAL;
+               }
+       }
+       return (ret);
+}
+
 int
 __archive_write_nulls(struct archive_write *a, size_t length)
 {
@@ -558,6 +571,10 @@ archive_write_open2(struct archive *_a, void *client_data,
        a->client_data = client_data;
 
        client_filter = __archive_write_allocate_filter(_a);
+
+       if (client_filter == NULL)
+               return (ARCHIVE_FATAL);
+
        client_filter->open = archive_write_client_open;
        client_filter->write = archive_write_client_write;
        client_filter->close = archive_write_client_close;
@@ -742,6 +759,18 @@ _archive_write_header(struct archive *_a, struct archive_entry *entry)
                return (ARCHIVE_FAILED);
        }
 
+       /* Flush filters at boundary. */
+       r2 = __archive_write_filters_flush(a);
+       if (r2 == ARCHIVE_FAILED) {
+               return (ARCHIVE_FAILED);
+       }
+       if (r2 == ARCHIVE_FATAL) {
+               a->archive.state = ARCHIVE_STATE_FATAL;
+               return (ARCHIVE_FATAL);
+       }
+       if (r2 < ret)
+               ret = r2;
+
        /* Format and write header. */
        r2 = ((a->format_write_header)(a, entry));
        if (r2 == ARCHIVE_FAILED) {
index 7001e9c..3e5c089 100644 (file)
@@ -190,7 +190,7 @@ archive_compressor_bzip2_open(struct archive_write_filter *f)
 
        memset(&data->stream, 0, sizeof(data->stream));
        data->stream.next_out = data->compressed;
-       data->stream.avail_out = data->compressed_buffer_size;
+       data->stream.avail_out = (uint32_t)data->compressed_buffer_size;
        f->write = archive_compressor_bzip2_write;
 
        /* Initialize compression library */
@@ -244,7 +244,7 @@ archive_compressor_bzip2_write(struct archive_write_filter *f,
 
        /* Compress input data to output buffer */
        SET_NEXT_IN(data, buff);
-       data->stream.avail_in = length;
+       data->stream.avail_in = (uint32_t)length;
        if (drive_compressor(f, data, 0))
                return (ARCHIVE_FATAL);
        return (ARCHIVE_OK);
@@ -313,7 +313,7 @@ drive_compressor(struct archive_write_filter *f,
                                return (ARCHIVE_FATAL);
                        }
                        data->stream.next_out = data->compressed;
-                       data->stream.avail_out = data->compressed_buffer_size;
+                       data->stream.avail_out = (uint32_t)data->compressed_buffer_size;
                }
 
                /* If there's nothing to do, we're done. */
index d404fae..3ed269f 100644 (file)
@@ -352,7 +352,7 @@ archive_compressor_compress_write(struct archive_write_filter *f,
        while (length--) {
                c = *bp++;
                state->in_count++;
-               state->cur_fcode = (c << 16) + state->cur_code;
+               state->cur_fcode = (c << 16) | state->cur_code;
                i = ((c << HSHIFT) ^ state->cur_code);  /* Xor hashing. */
 
                if (state->hashtab[i] == state->cur_fcode) {
index cf19fad..6ac4503 100644 (file)
@@ -518,10 +518,10 @@ drive_compressor_independence(struct archive_write_filter *f, const char *p,
        } else {
                /* The buffer is not compressed. The compressed size was
                 * bigger than its uncompressed size. */
-               archive_le32enc(data->out, length | 0x80000000);
+               archive_le32enc(data->out, (uint32_t)(length | 0x80000000));
                data->out += 4;
                memcpy(data->out, p, length);
-               outsize = length;
+               outsize = (uint32_t)length;
        }
        data->out += outsize;
        if (data->block_checksum) {
@@ -603,10 +603,10 @@ drive_compressor_dependence(struct archive_write_filter *f, const char *p,
        } else {
                /* The buffer is not compressed. The compressed size was
                 * bigger than its uncompressed size. */
-               archive_le32enc(data->out, length | 0x80000000);
+               archive_le32enc(data->out, (uint32_t)(length | 0x80000000));
                data->out += 4;
                memcpy(data->out, p, length);
-               outsize = length;
+               outsize = (uint32_t)length;
        }
        data->out += outsize;
        if (data->block_checksum) {
index 9dd2c30..04bee90 100644 (file)
@@ -251,13 +251,13 @@ archive_compressor_xz_init_stream(struct archive_write_filter *f,
                int ds, log2dic, wedges;
 
                /* Calculate a coded dictionary size */
-               if (dict_size < (1 << 12) || dict_size > (1 << 27)) {
+               if (dict_size < (1 << 12) || dict_size > (1 << 29)) {
                        archive_set_error(f->archive, ARCHIVE_ERRNO_MISC,
                            "Unacceptable dictionary size for lzip: %d",
                            dict_size);
                        return (ARCHIVE_FATAL);
                }
-               for (log2dic = 27; log2dic >= 12; log2dic--) {
+               for (log2dic = 29; log2dic >= 12; log2dic--) {
                        if (dict_size & (1 << log2dic))
                                break;
                }
index c74a35c..c78e840 100644 (file)
@@ -31,6 +31,9 @@ __FBSDID("$FreeBSD$");
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
 #endif
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
 #endif
@@ -50,9 +53,22 @@ __FBSDID("$FreeBSD$");
 
 struct private_data {
        int              compression_level;
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+       int              threads;
+       int              long_distance;
+#if HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR
+       enum {
+               running,
+               finishing,
+               resetting,
+       } state;
+       int              frame_per_file;
+       size_t           min_frame_size;
+       size_t           max_frame_size;
+       size_t           cur_frame;
+       size_t           cur_frame_in;
+       size_t           cur_frame_out;
+       size_t           total_in;
        ZSTD_CStream    *cstream;
-       int64_t          total_in;
        ZSTD_outBuffer   out;
 #else
        struct archive_write_program_data *pdata;
@@ -66,17 +82,21 @@ struct private_data {
 #define CLEVEL_STD_MAX 19 /* without using --ultra */
 #define CLEVEL_MAX 22
 
+#define LONG_STD 27
+
 #define MINVER_NEGCLEVEL 10304
 #define MINVER_MINCLEVEL 10306
+#define MINVER_LONG 10302
 
 static int archive_compressor_zstd_options(struct archive_write_filter *,
                    const char *, const char *);
 static int archive_compressor_zstd_open(struct archive_write_filter *);
 static int archive_compressor_zstd_write(struct archive_write_filter *,
                    const void *, size_t);
+static int archive_compressor_zstd_flush(struct archive_write_filter *);
 static int archive_compressor_zstd_close(struct archive_write_filter *);
 static int archive_compressor_zstd_free(struct archive_write_filter *);
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+#if HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR
 static int drive_compressor(struct archive_write_filter *,
                    struct private_data *, int, const void *, size_t);
 #endif
@@ -102,12 +122,20 @@ archive_write_add_filter_zstd(struct archive *_a)
        f->data = data;
        f->open = &archive_compressor_zstd_open;
        f->options = &archive_compressor_zstd_options;
+       f->flush = &archive_compressor_zstd_flush;
        f->close = &archive_compressor_zstd_close;
        f->free = &archive_compressor_zstd_free;
        f->code = ARCHIVE_FILTER_ZSTD;
        f->name = "zstd";
        data->compression_level = CLEVEL_DEFAULT;
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+       data->threads = 0;
+       data->long_distance = 0;
+#if HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR
+       data->frame_per_file = 0;
+       data->min_frame_size = 0;
+       data->max_frame_size = SIZE_MAX;
+       data->cur_frame_in = 0;
+       data->cur_frame_out = 0;
        data->cstream = ZSTD_createCStream();
        if (data->cstream == NULL) {
                free(data);
@@ -134,7 +162,7 @@ static int
 archive_compressor_zstd_free(struct archive_write_filter *f)
 {
        struct private_data *data = (struct private_data *)f->data;
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+#if HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR
        ZSTD_freeCStream(data->cstream);
        free(data->out.dst);
 #else
@@ -145,29 +173,18 @@ archive_compressor_zstd_free(struct archive_write_filter *f)
        return (ARCHIVE_OK);
 }
 
-static int string_is_numeric (const char* value)
+static int string_to_number(const char *string, intmax_t *numberp)
 {
-       size_t len = strlen(value);
-       size_t i;
-
-       if (len == 0) {
-               return (ARCHIVE_WARN);
-       }
-       else if (len == 1 && !(value[0] >= '0' && value[0] <= '9')) {
-               return (ARCHIVE_WARN);
-       }
-       else if (!(value[0] >= '0' && value[0] <= '9') &&
-                value[0] != '-' && value[0] != '+') {
-               return (ARCHIVE_WARN);
-       }
-
-       for (i = 1; i < len; i++) {
-               if (!(value[i] >= '0' && value[i] <= '9')) {
-                       return (ARCHIVE_WARN);
-               }
-       }
-
-       return (ARCHIVE_OK);
+       char *end;
+
+       if (string == NULL || *string == '\0')
+               return (ARCHIVE_WARN);
+       *numberp = strtoimax(string, &end, 10);
+       if (end == string || *end != '\0' || errno == EOVERFLOW) {
+               *numberp = 0;
+               return (ARCHIVE_WARN);
+       }
+       return (ARCHIVE_OK);
 }
 
 /*
@@ -180,14 +197,14 @@ archive_compressor_zstd_options(struct archive_write_filter *f, const char *key,
        struct private_data *data = (struct private_data *)f->data;
 
        if (strcmp(key, "compression-level") == 0) {
-               int level = atoi(value);
+               intmax_t level;
+               if (string_to_number(value, &level) != ARCHIVE_OK) {
+                       return (ARCHIVE_WARN);
+               }
                /* If we don't have the library, hard-code the max level */
                int minimum = CLEVEL_MIN;
                int maximum = CLEVEL_MAX;
-               if (string_is_numeric(value) != ARCHIVE_OK) {
-                       return (ARCHIVE_WARN);
-               }
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+#if HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR
                maximum = ZSTD_maxCLevel();
 #if ZSTD_VERSION_NUMBER >= MINVER_MINCLEVEL
                if (ZSTD_versionNumber() >= MINVER_MINCLEVEL) {
@@ -202,7 +219,65 @@ archive_compressor_zstd_options(struct archive_write_filter *f, const char *key,
                if (level < minimum || level > maximum) {
                        return (ARCHIVE_WARN);
                }
-               data->compression_level = level;
+               data->compression_level = (int)level;
+               return (ARCHIVE_OK);
+       } else if (strcmp(key, "threads") == 0) {
+               intmax_t threads;
+               if (string_to_number(value, &threads) != ARCHIVE_OK) {
+                       return (ARCHIVE_WARN);
+               }
+               if (threads < 0) {
+                       return (ARCHIVE_WARN);
+               }
+               data->threads = (int)threads;
+               return (ARCHIVE_OK);
+#if HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR
+       } else if (strcmp(key, "frame-per-file") == 0) {
+               data->frame_per_file = 1;
+               return (ARCHIVE_OK);
+       } else if (strcmp(key, "min-frame-size") == 0) {
+               intmax_t min_frame_size;
+               if (string_to_number(value, &min_frame_size) != ARCHIVE_OK) {
+                       return (ARCHIVE_WARN);
+               }
+               if (min_frame_size < 0) {
+                       return (ARCHIVE_WARN);
+               }
+               data->min_frame_size = min_frame_size;
+               return (ARCHIVE_OK);
+       } else if (strcmp(key, "max-frame-size") == 0) {
+               intmax_t max_frame_size;
+               if (string_to_number(value, &max_frame_size) != ARCHIVE_OK) {
+                       return (ARCHIVE_WARN);
+               }
+               if (max_frame_size < 1024) {
+                       return (ARCHIVE_WARN);
+               }
+               data->max_frame_size = max_frame_size;
+               return (ARCHIVE_OK);
+#endif
+       }
+       else if (strcmp(key, "long") == 0) {
+               intmax_t long_distance;
+               if (string_to_number(value, &long_distance) != ARCHIVE_OK) {
+                       return (ARCHIVE_WARN);
+               }
+#if HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR && ZSTD_VERSION_NUMBER >= MINVER_LONG
+               ZSTD_bounds bounds = ZSTD_cParam_getBounds(ZSTD_c_windowLog);
+               if (ZSTD_isError(bounds.error)) {
+                       int max_distance = ((int)(sizeof(size_t) == 4 ? 30 : 31));
+                       if (((int)long_distance) < 10 || (int)long_distance > max_distance)
+                               return (ARCHIVE_WARN);
+               } else {
+                       if ((int)long_distance < bounds.lowerBound || (int)long_distance > bounds.upperBound)
+                               return (ARCHIVE_WARN);
+               }
+#else
+               int max_distance = ((int)(sizeof(size_t) == 4 ? 30 : 31));
+               if (((int)long_distance) < 10 || (int)long_distance > max_distance)
+                   return (ARCHIVE_WARN);
+#endif
+               data->long_distance = (int)long_distance;
                return (ARCHIVE_OK);
        }
 
@@ -212,7 +287,7 @@ archive_compressor_zstd_options(struct archive_write_filter *f, const char *key,
        return (ARCHIVE_WARN);
 }
 
-#if HAVE_ZSTD_H && HAVE_LIBZSTD
+#if HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR
 /*
  * Setup callback.
  */
@@ -252,6 +327,12 @@ archive_compressor_zstd_open(struct archive_write_filter *f)
                return (ARCHIVE_FATAL);
        }
 
+       ZSTD_CCtx_setParameter(data->cstream, ZSTD_c_nbWorkers, data->threads);
+
+#if ZSTD_VERSION_NUMBER >= MINVER_LONG
+       ZSTD_CCtx_setParameter(data->cstream, ZSTD_c_windowLog, data->long_distance);
+#endif
+
        return (ARCHIVE_OK);
 }
 
@@ -263,15 +344,22 @@ archive_compressor_zstd_write(struct archive_write_filter *f, const void *buff,
     size_t length)
 {
        struct private_data *data = (struct private_data *)f->data;
-       int ret;
 
-       /* Update statistics */
-       data->total_in += length;
+       return (drive_compressor(f, data, 0, buff, length));
+}
 
-       if ((ret = drive_compressor(f, data, 0, buff, length)) != ARCHIVE_OK)
-               return (ret);
+/*
+ * Flush the compressed stream.
+ */
+static int
+archive_compressor_zstd_flush(struct archive_write_filter *f)
+{
+       struct private_data *data = (struct private_data *)f->data;
 
-       return (ARCHIVE_OK);
+       if (data->frame_per_file && data->state == running &&
+           data->cur_frame_out > data->min_frame_size)
+               data->state = finishing;
+       return (drive_compressor(f, data, 1, NULL, 0));
 }
 
 /*
@@ -282,60 +370,75 @@ archive_compressor_zstd_close(struct archive_write_filter *f)
 {
        struct private_data *data = (struct private_data *)f->data;
 
-       /* Finish zstd frame */
-       return drive_compressor(f, data, 1, NULL, 0);
+       if (data->state == running)
+               data->state = finishing;
+       return (drive_compressor(f, data, 1, NULL, 0));
 }
 
 /*
  * Utility function to push input data through compressor,
  * writing full output blocks as necessary.
- *
- * Note that this handles both the regular write case (finishing ==
- * false) and the end-of-archive case (finishing == true).
  */
 static int
 drive_compressor(struct archive_write_filter *f,
-    struct private_data *data, int finishing, const void *src, size_t length)
+    struct private_data *data, int flush, const void *src, size_t length)
 {
-       ZSTD_inBuffer in = (ZSTD_inBuffer) { src, length, 0 };
+       ZSTD_inBuffer in = { .src = src, .size = length, .pos = 0 };
+       size_t ipos, opos, zstdret = 0;
+       int ret;
 
        for (;;) {
-               if (data->out.pos == data->out.size) {
-                       const int ret = __archive_write_filter(f->next_filter,
-                           data->out.dst, data->out.size);
+               ipos = in.pos;
+               opos = data->out.pos;
+               switch (data->state) {
+               case running:
+                       if (in.pos == in.size)
+                               return (ARCHIVE_OK);
+                       zstdret = ZSTD_compressStream(data->cstream,
+                           &data->out, &in);
+                       if (ZSTD_isError(zstdret))
+                               goto zstd_fatal;
+                       break;
+               case finishing:
+                       zstdret = ZSTD_endStream(data->cstream, &data->out);
+                       if (ZSTD_isError(zstdret))
+                               goto zstd_fatal;
+                       if (zstdret == 0)
+                               data->state = resetting;
+                       break;
+               case resetting:
+                       ZSTD_CCtx_reset(data->cstream, ZSTD_reset_session_only);
+                       data->cur_frame++;
+                       data->cur_frame_in = 0;
+                       data->cur_frame_out = 0;
+                       data->state = running;
+                       break;
+               }
+               data->total_in += in.pos - ipos;
+               data->cur_frame_in += in.pos - ipos;
+               data->cur_frame_out += data->out.pos - opos;
+               if (data->state == running &&
+                   data->cur_frame_in >= data->max_frame_size) {
+                       data->state = finishing;
+               }
+               if (data->out.pos == data->out.size ||
+                   (flush && data->out.pos > 0)) {
+                       ret = __archive_write_filter(f->next_filter,
+                           data->out.dst, data->out.pos);
                        if (ret != ARCHIVE_OK)
-                               return (ARCHIVE_FATAL);
+                               goto fatal;
                        data->out.pos = 0;
                }
-
-               /* If there's nothing to do, we're done. */
-               if (!finishing && in.pos == in.size)
-                       return (ARCHIVE_OK);
-
-               {
-                       const size_t zstdret = !finishing ?
-                           ZSTD_compressStream(data->cstream, &data->out, &in)
-                           : ZSTD_endStream(data->cstream, &data->out);
-
-                       if (ZSTD_isError(zstdret)) {
-                               archive_set_error(f->archive,
-                                   ARCHIVE_ERRNO_MISC,
-                                   "Zstd compression failed: %s",
-                                   ZSTD_getErrorName(zstdret));
-                               return (ARCHIVE_FATAL);
-                       }
-
-                       /* If we're finishing, 0 means nothing left to flush */
-                       if (finishing && zstdret == 0) {
-                               const int ret = __archive_write_filter(f->next_filter,
-                                   data->out.dst, data->out.pos);
-                               return (ret);
-                       }
-               }
        }
+zstd_fatal:
+       archive_set_error(f->archive, ARCHIVE_ERRNO_MISC,
+           "Zstd compression failed: %s",
+           ZSTD_getErrorName(zstdret));
+fatal:
+       return (ARCHIVE_FATAL);
 }
 
-#else /* HAVE_ZSTD_H && HAVE_LIBZSTD */
+#else /* HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR */
 
 static int
 archive_compressor_zstd_open(struct archive_write_filter *f)
@@ -349,23 +452,23 @@ archive_compressor_zstd_open(struct archive_write_filter *f)
        archive_strcpy(&as, "zstd --no-check");
 
        if (data->compression_level < CLEVEL_STD_MIN) {
-               struct archive_string as2;
-               archive_string_init(&as2);
-               archive_string_sprintf(&as2, " --fast=%d", -data->compression_level);
-               archive_string_concat(&as, &as2);
-               archive_string_free(&as2);
+               archive_string_sprintf(&as, " --fast=%d", -data->compression_level);
        } else {
-               struct archive_string as2;
-               archive_string_init(&as2);
-               archive_string_sprintf(&as2, " -%d", data->compression_level);
-               archive_string_concat(&as, &as2);
-               archive_string_free(&as2);
+               archive_string_sprintf(&as, " -%d", data->compression_level);
        }
 
        if (data->compression_level > CLEVEL_STD_MAX) {
                archive_strcat(&as, " --ultra");
        }
 
+       if (data->threads != 0) {
+               archive_string_sprintf(&as, " --threads=%d", data->threads);
+       }
+
+       if (data->long_distance != 0) {
+               archive_string_sprintf(&as, " --long=%d", data->long_distance);
+       }
+
        f->write = archive_compressor_zstd_write;
        r = __archive_write_program_open(f, data->pdata, as.s);
        archive_string_free(&as);
@@ -382,6 +485,14 @@ archive_compressor_zstd_write(struct archive_write_filter *f, const void *buff,
 }
 
 static int
+archive_compressor_zstd_flush(struct archive_write_filter *f)
+{
+       (void)f; /* UNUSED */
+
+       return (ARCHIVE_OK);
+}
+
+static int
 archive_compressor_zstd_close(struct archive_write_filter *f)
 {
        struct private_data *data = (struct private_data *)f->data;
@@ -389,4 +500,4 @@ archive_compressor_zstd_close(struct archive_write_filter *f)
        return __archive_write_program_close(f, data->pdata);
 }
 
-#endif /* HAVE_ZSTD_H && HAVE_LIBZSTD */
+#endif /* HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR */
index 2fa016e..97f3fcd 100644 (file)
@@ -163,14 +163,14 @@ caused by archives that (deliberately or otherwise) extract
 files outside of the current directory.
 The default is not to perform this check.
 If
-.It Cm ARCHIVE_EXTRACT_SPARSE
-Scan data for blocks of NUL bytes and try to recreate them with holes.
-This results in sparse files, independent of whether the archive format
-supports or uses them.
 .Cm ARCHIVE_EXTRACT_UNLINK
 is specified together with this option, the library will
 remove any intermediate symlinks it finds and return an
 error only if such symlink could not be removed.
+.It Cm ARCHIVE_EXTRACT_SPARSE
+Scan data for blocks of NUL bytes and try to recreate them with holes.
+This results in sparse files, independent of whether the archive format
+supports or uses them.
 .It Cm ARCHIVE_EXTRACT_TIME
 The timestamps (mtime, ctime, and atime) should be restored.
 By default, they are ignored.
index fcd733a..c8c2e10 100644 (file)
@@ -173,6 +173,7 @@ struct fixup_entry {
        struct fixup_entry      *next;
        struct archive_acl       acl;
        mode_t                   mode;
+       __LA_MODE_T              filetype;
        int64_t                  atime;
        int64_t                  birthtime;
        int64_t                  mtime;
@@ -357,6 +358,7 @@ struct archive_write_disk {
 
 static int     la_opendirat(int, const char *);
 static int     la_mktemp(struct archive_write_disk *);
+static int     la_verify_filetype(mode_t, __LA_MODE_T);
 static void    fsobj_error(int *, struct archive_string *, int, const char *,
                    const char *);
 static int     check_symlinks_fsobj(char *, int *, struct archive_string *,
@@ -395,8 +397,7 @@ static int  set_times_from_entry(struct archive_write_disk *);
 static struct fixup_entry *sort_dir_list(struct fixup_entry *p);
 static ssize_t write_data_block(struct archive_write_disk *,
                    const char *, size_t);
-
-static struct archive_vtable *archive_write_disk_vtable(void);
+static void close_file_descriptor(struct archive_write_disk *);
 
 static int     _archive_write_disk_close(struct archive *);
 static int     _archive_write_disk_free(struct archive *);
@@ -465,6 +466,39 @@ la_opendirat(int fd, const char *path) {
 }
 
 static int
+la_verify_filetype(mode_t mode, __LA_MODE_T filetype) {
+       int ret = 0;
+
+       switch (filetype) {
+       case AE_IFREG:
+               ret = (S_ISREG(mode));
+               break;
+       case AE_IFDIR:
+               ret = (S_ISDIR(mode));
+               break;
+       case AE_IFLNK:
+               ret = (S_ISLNK(mode));
+               break;
+       case AE_IFSOCK:
+               ret = (S_ISSOCK(mode));
+               break;
+       case AE_IFCHR:
+               ret = (S_ISCHR(mode));
+               break;
+       case AE_IFBLK:
+               ret = (S_ISBLK(mode));
+               break;
+       case AE_IFIFO:
+               ret = (S_ISFIFO(mode));
+               break;
+       default:
+               break;
+       }
+
+       return (ret);
+}
+
+static int
 lazy_stat(struct archive_write_disk *a)
 {
        if (a->pst != NULL) {
@@ -481,7 +515,12 @@ lazy_stat(struct archive_write_disk *a)
         * XXX At this point, symlinks should not be hit, otherwise
         * XXX a race occurred.  Do we want to check explicitly for that?
         */
-       if (lstat(a->name, &a->st) == 0) {
+#ifdef HAVE_LSTAT
+       if (lstat(a->name, &a->st) == 0)
+#else
+       if (la_stat(a->name, &a->st) == 0)
+#endif
+       {
                a->pst = &a->st;
                return (ARCHIVE_OK);
        }
@@ -489,25 +528,16 @@ lazy_stat(struct archive_write_disk *a)
        return (ARCHIVE_WARN);
 }
 
-static struct archive_vtable *
-archive_write_disk_vtable(void)
-{
-       static struct archive_vtable av;
-       static int inited = 0;
-
-       if (!inited) {
-               av.archive_close = _archive_write_disk_close;
-               av.archive_filter_bytes = _archive_write_disk_filter_bytes;
-               av.archive_free = _archive_write_disk_free;
-               av.archive_write_header = _archive_write_disk_header;
-               av.archive_write_finish_entry
-                   = _archive_write_disk_finish_entry;
-               av.archive_write_data = _archive_write_disk_data;
-               av.archive_write_data_block = _archive_write_disk_data_block;
-               inited = 1;
-       }
-       return (&av);
-}
+static const struct archive_vtable
+archive_write_disk_vtable = {
+       .archive_close = _archive_write_disk_close,
+       .archive_filter_bytes = _archive_write_disk_filter_bytes,
+       .archive_free = _archive_write_disk_free,
+       .archive_write_header = _archive_write_disk_header,
+       .archive_write_finish_entry = _archive_write_disk_finish_entry,
+       .archive_write_data = _archive_write_disk_data,
+       .archive_write_data_block = _archive_write_disk_data_block,
+};
 
 static int64_t
 _archive_write_disk_filter_bytes(struct archive *_a, int n)
@@ -822,6 +852,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
                fe = current_fixup(a, archive_entry_pathname(entry));
                if (fe == NULL)
                        return (ARCHIVE_FATAL);
+               fe->filetype = archive_entry_filetype(entry);
                fe->fixup |= TODO_MODE_BASE;
                fe->mode = a->mode;
        }
@@ -832,6 +863,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
                fe = current_fixup(a, archive_entry_pathname(entry));
                if (fe == NULL)
                        return (ARCHIVE_FATAL);
+               fe->filetype = archive_entry_filetype(entry);
                fe->mode = a->mode;
                fe->fixup |= TODO_TIMES;
                if (archive_entry_atime_is_set(entry)) {
@@ -865,6 +897,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
                fe = current_fixup(a, archive_entry_pathname(entry));
                if (fe == NULL)
                        return (ARCHIVE_FATAL);
+               fe->filetype = archive_entry_filetype(entry);
                fe->fixup |= TODO_ACLS;
                archive_acl_copy(&fe->acl, archive_entry_acl(entry));
        }
@@ -877,6 +910,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
                        fe = current_fixup(a, archive_entry_pathname(entry));
                        if (fe == NULL)
                                return (ARCHIVE_FATAL);
+                       fe->filetype = archive_entry_filetype(entry);
                        fe->mac_metadata = malloc(metadata_size);
                        if (fe->mac_metadata != NULL) {
                                memcpy(fe->mac_metadata, metadata,
@@ -891,6 +925,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
                fe = current_fixup(a, archive_entry_pathname(entry));
                if (fe == NULL)
                        return (ARCHIVE_FATAL);
+               fe->filetype = archive_entry_filetype(entry);
                fe->fixup |= TODO_FFLAGS;
                /* TODO: Complete this.. defer fflags from below. */
        }
@@ -1576,12 +1611,12 @@ hfs_write_data_block(struct archive_write_disk *a, const char *buff,
                            "Seek failed");
                        return (ARCHIVE_FATAL);
                } else if (a->offset > a->fd_offset) {
-                       int64_t skip = a->offset - a->fd_offset;
+                       uint64_t skip = a->offset - a->fd_offset;
                        char nullblock[1024];
 
                        memset(nullblock, 0, sizeof(nullblock));
                        while (skip > 0) {
-                               if (skip > (int64_t)sizeof(nullblock))
+                               if (skip > sizeof(nullblock))
                                        bytes_written = hfs_write_decmpfs_block(
                                            a, nullblock, sizeof(nullblock));
                                else
@@ -1696,8 +1731,10 @@ _archive_write_disk_finish_entry(struct archive *_a)
                        else
                                r = hfs_write_data_block(
                                    a, null_d, a->file_remaining_bytes);
-                       if (r < 0)
+                       if (r < 0) {
+                               close_file_descriptor(a);
                                return ((int)r);
+                       }
                }
 #endif
        } else {
@@ -1706,6 +1743,7 @@ _archive_write_disk_finish_entry(struct archive *_a)
                    a->filesize == 0) {
                        archive_set_error(&a->archive, errno,
                            "File size could not be restored");
+                       close_file_descriptor(a);
                        return (ARCHIVE_FAILED);
                }
 #endif
@@ -1715,8 +1753,10 @@ _archive_write_disk_finish_entry(struct archive *_a)
                 * to see what happened.
                 */
                a->pst = NULL;
-               if ((ret = lazy_stat(a)) != ARCHIVE_OK)
-                       return (ret);
+        if ((ret = lazy_stat(a)) != ARCHIVE_OK) {
+            close_file_descriptor(a);
+            return (ret);
+        }
                /* We can use lseek()/write() to extend the file if
                 * ftruncate didn't work or isn't available. */
                if (a->st.st_size < a->filesize) {
@@ -1724,11 +1764,13 @@ _archive_write_disk_finish_entry(struct archive *_a)
                        if (lseek(a->fd, a->filesize - 1, SEEK_SET) < 0) {
                                archive_set_error(&a->archive, errno,
                                    "Seek failed");
+                               close_file_descriptor(a);
                                return (ARCHIVE_FATAL);
                        }
                        if (write(a->fd, &nul, 1) < 0) {
                                archive_set_error(&a->archive, errno,
                                    "Write to restore size failed");
+                               close_file_descriptor(a);
                                return (ARCHIVE_FATAL);
                        }
                        a->pst = NULL;
@@ -1956,7 +1998,7 @@ archive_write_disk_new(void)
        a->archive.magic = ARCHIVE_WRITE_DISK_MAGIC;
        /* We're ready to write a header immediately. */
        a->archive.state = ARCHIVE_STATE_HEADER;
-       a->archive.vtable = archive_write_disk_vtable();
+       a->archive.vtable = &archive_write_disk_vtable;
        a->start_time = time(NULL);
        /* Query and restore the umask. */
        umask(a->user_umask = umask(0));
@@ -1967,6 +2009,8 @@ archive_write_disk_new(void)
                free(a);
                return (NULL);
        }
+       a->path_safe.s[0] = 0;
+
 #ifdef HAVE_ZLIB_H
        a->decmpfs_compression_level = 5;
 #endif
@@ -2123,7 +2167,11 @@ restore_entry(struct archive_write_disk *a)
                 * then don't follow it.
                 */
                if (r != 0 || !S_ISDIR(a->mode))
+#ifdef HAVE_LSTAT
                        r = lstat(a->name, &a->st);
+#else
+                       r = la_stat(a->name, &a->st);
+#endif
                if (r != 0) {
                        archive_set_error(&a->archive, errno,
                            "Can't stat existing object");
@@ -2462,7 +2510,8 @@ _archive_write_disk_close(struct archive *_a)
        struct archive_write_disk *a = (struct archive_write_disk *)_a;
        struct fixup_entry *next, *p;
        struct stat st;
-       int fd, ret;
+       char *c;
+       int fd, ret, openflags;
 
        archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
            ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
@@ -2475,24 +2524,80 @@ _archive_write_disk_close(struct archive *_a)
        while (p != NULL) {
                fd = -1;
                a->pst = NULL; /* Mark stat cache as out-of-date. */
-               if (p->fixup &
-                   (TODO_TIMES | TODO_MODE_BASE | TODO_ACLS | TODO_FFLAGS)) {
-                       fd = open(p->name,
-                           O_WRONLY | O_BINARY | O_NOFOLLOW | O_CLOEXEC);
-                       if (fd == -1) {
-                               /* If we cannot lstat, skip entry */
-                               if (lstat(p->name, &st) != 0)
+
+               /* We must strip trailing slashes from the path to avoid
+                  dereferencing symbolic links to directories */
+               c = p->name;
+               while (*c != '\0')
+                       c++;
+               while (c != p->name && *(c - 1) == '/') {
+                       c--;
+                       *c = '\0';
+               }
+
+               if (p->fixup == 0)
+                       goto skip_fixup_entry;
+               else {
+                       /*
+                        * We need to verify if the type of the file
+                        * we are going to open matches the file type
+                        * of the fixup entry.
+                        */
+                       openflags = O_BINARY | O_NOFOLLOW | O_RDONLY
+                           | O_CLOEXEC;
+#if defined(O_DIRECTORY)
+                       if (p->filetype == AE_IFDIR)
+                               openflags |= O_DIRECTORY;
+#endif
+                       fd = open(p->name, openflags);
+
+#if defined(O_DIRECTORY)
+                       /*
+                        * If we support O_DIRECTORY and open was
+                        * successful we can skip the file type check
+                        * for directories. For other file types
+                        * we need to verify via fstat() or lstat()
+                        */
+                       if (fd == -1 || p->filetype != AE_IFDIR) {
+#if HAVE_FSTAT
+                               if (fd > 0 && (
+                                   fstat(fd, &st) != 0 ||
+                                   la_verify_filetype(st.st_mode,
+                                   p->filetype) == 0)) {
+                                       goto skip_fixup_entry;
+                               } else
+#endif
+                               if (
+#ifdef HAVE_LSTAT
+                                       lstat(p->name, &st) != 0 ||
+#else
+                                       la_stat(p->name, &st) != 0 ||
+#endif
+                                   la_verify_filetype(st.st_mode,
+                                   p->filetype) == 0) {
                                        goto skip_fixup_entry;
-                               /*
-                                * If we deal with a symbolic link, mark
-                                * it in the fixup mode to ensure no
-                                * modifications are made to its target.
-                                */
-                               if (S_ISLNK(st.st_mode)) {
-                                       p->mode &= ~S_IFMT;
-                                       p->mode |= S_IFLNK;
                                }
                        }
+#else
+#if HAVE_FSTAT
+                       if (fd > 0 && (
+                           fstat(fd, &st) != 0 ||
+                           la_verify_filetype(st.st_mode,
+                           p->filetype) == 0)) {
+                               goto skip_fixup_entry;
+                       } else
+#endif
+                       if (
+#ifdef HAVE_LSTAT
+                               lstat(p->name, &st) != 0 ||
+#else
+                               la_stat(p->name, &st) != 0 ||
+#endif
+                           la_verify_filetype(st.st_mode,
+                           p->filetype) == 0) {
+                               goto skip_fixup_entry;
+                       }
+#endif
                }
                if (p->fixup & TODO_TIMES) {
                        set_times(a, fd, p->mode, p->name,
@@ -2504,14 +2609,13 @@ _archive_write_disk_close(struct archive *_a)
                if (p->fixup & TODO_MODE_BASE) {
 #ifdef HAVE_FCHMOD
                        if (fd >= 0)
-                               fchmod(fd, p->mode);
+                               fchmod(fd, p->mode & 07777);
                        else
 #endif
 #ifdef HAVE_LCHMOD
-                       lchmod(p->name, p->mode);
+                       lchmod(p->name, p->mode & 07777);
 #else
-                       if (!S_ISLNK(p->mode))
-                               chmod(p->name, p->mode);
+                       chmod(p->name, p->mode & 07777);
 #endif
                }
                if (p->fixup & TODO_ACLS)
@@ -2664,7 +2768,7 @@ new_fixup(struct archive_write_disk *a, const char *pathname)
        fe->next = a->fixup_list;
        a->fixup_list = fe;
        fe->fixup = 0;
-       fe->mode = 0;
+       fe->filetype = 0;
        fe->name = strdup(pathname);
        return (fe);
 }
@@ -2708,8 +2812,8 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
     !(defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT))
        /* Platform doesn't have lstat, so we can't look for symlinks. */
        (void)path; /* UNUSED */
-       (void)error_number; /* UNUSED */
-       (void)error_string; /* UNUSED */
+       (void)a_eno; /* UNUSED */
+       (void)a_estr; /* UNUSED */
        (void)flags; /* UNUSED */
        (void)checking_linkname; /* UNUSED */
        return (ARCHIVE_OK);
@@ -2718,7 +2822,7 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
        char *tail;
        char *head;
        int last;
-       char c;
+       char c = '\0';
        int r;
        struct stat st;
        int chdir_fd;
@@ -2782,8 +2886,10 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
                /* Check that we haven't hit a symlink. */
 #if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
                r = fstatat(chdir_fd, head, &st, AT_SYMLINK_NOFOLLOW);
-#else
+#elif defined(HAVE_LSTAT)
                r = lstat(head, &st);
+#else
+               r = la_stat(head, &st);
 #endif
                if (r != 0) {
                        tail[0] = c;
@@ -3481,7 +3587,9 @@ set_time(int fd, int mode, const char *name,
        (void)fd; /* UNUSED */
        (void)mode; /* UNUSED */
        (void)name; /* UNUSED */
+       (void)atime; /* UNUSED */
        (void)atime_nsec; /* UNUSED */
+       (void)mtime; /* UNUSED */
        (void)mtime_nsec; /* UNUSED */
        return (ARCHIVE_WARN);
 #endif
@@ -3787,6 +3895,7 @@ set_fflags(struct archive_write_disk *a)
                        le = current_fixup(a, a->name);
                        if (le == NULL)
                                return (ARCHIVE_FATAL);
+                       le->filetype = archive_entry_filetype(a->entry);
                        le->fixup |= TODO_FFLAGS;
                        le->fflags_set = set;
                        /* Store the mode if it's not already there. */
@@ -4313,7 +4422,12 @@ fixup_appledouble(struct archive_write_disk *a, const char *pathname)
         */
        archive_strncpy(&datafork, pathname, p - pathname);
        archive_strcat(&datafork, p + 2);
-       if (lstat(datafork.s, &st) == -1 ||
+       if (
+#ifdef HAVE_LSTAT
+               lstat(datafork.s, &st) == -1 ||
+#else
+               la_stat(datafork.s, &st) == -1 ||
+#endif
            (st.st_mode & AE_IFMT) != AE_IFREG)
                goto skip_appledouble;
 
@@ -4629,5 +4743,17 @@ archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
 }
 #endif
 
+/*
+ * Close the file descriptor if one is open.
+ */
+static void close_file_descriptor(struct archive_write_disk* a)
+{
+       if (a->fd >= 0) {
+               close(a->fd);
+               a->fd = -1;
+       }
+}
+
+
 #endif /* !_WIN32 || __CYGWIN__ */
 
index 0c60017..7b9ea74 100644 (file)
@@ -213,7 +213,7 @@ static int  check_symlinks(struct archive_write_disk *);
 static int     create_filesystem_object(struct archive_write_disk *);
 static struct fixup_entry *current_fixup(struct archive_write_disk *,
                    const wchar_t *pathname);
-static int     cleanup_pathname(struct archive_write_disk *);
+static int     cleanup_pathname(struct archive_write_disk *, wchar_t *);
 static int     create_dir(struct archive_write_disk *, wchar_t *);
 static int     create_parent_dir(struct archive_write_disk *, wchar_t *);
 static int     la_chmod(const wchar_t *, mode_t);
@@ -238,8 +238,6 @@ static struct fixup_entry *sort_dir_list(struct fixup_entry *p);
 static ssize_t write_data_block(struct archive_write_disk *,
                    const char *, size_t);
 
-static struct archive_vtable *archive_write_disk_vtable(void);
-
 static int     _archive_write_disk_close(struct archive *);
 static int     _archive_write_disk_free(struct archive *);
 static int     _archive_write_disk_header(struct archive *,
@@ -256,9 +254,9 @@ static ssize_t      _archive_write_disk_data_block(struct archive *, const void *,
  * which is high-16-bits of nFileIndexHigh. */
 #define bhfi_ino(bhfi) \
        ((((int64_t)((bhfi)->nFileIndexHigh & 0x0000FFFFUL)) << 32) \
-    + (bhfi)->nFileIndexLow)
+    | (bhfi)->nFileIndexLow)
 #define bhfi_size(bhfi)        \
-    ((((int64_t)(bhfi)->nFileSizeHigh) << 32) + (bhfi)->nFileSizeLow)
+    ((((int64_t)(bhfi)->nFileSizeHigh) << 32) | (bhfi)->nFileSizeLow)
 
 static int
 file_information(struct archive_write_disk *a, wchar_t *path,
@@ -268,6 +266,9 @@ file_information(struct archive_write_disk *a, wchar_t *path,
        int r;
        DWORD flag = FILE_FLAG_BACKUP_SEMANTICS;
        WIN32_FIND_DATAW        findData;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
 
        if (sim_lstat || mode != NULL) {
                h = FindFirstFileW(path, &findData);
@@ -292,14 +293,27 @@ file_information(struct archive_write_disk *a, wchar_t *path,
                (findData.dwReserved0 == IO_REPARSE_TAG_SYMLINK)))
                flag |= FILE_FLAG_OPEN_REPARSE_POINT;
 
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+       ZeroMemory(&createExParams, sizeof(createExParams));
+       createExParams.dwSize = sizeof(createExParams);
+       createExParams.dwFileFlags = flag;
+       h = CreateFile2(a->name, 0, 0,
+               OPEN_EXISTING, &createExParams);
+#else
        h = CreateFileW(a->name, 0, 0, NULL,
            OPEN_EXISTING, flag, NULL);
+#endif
        if (h == INVALID_HANDLE_VALUE &&
            GetLastError() == ERROR_INVALID_NAME) {
                wchar_t *full;
                full = __la_win_permissive_name_w(path);
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+               h = CreateFile2(full, 0, 0,
+                       OPEN_EXISTING, &createExParams);
+#else
                h = CreateFileW(full, 0, 0, NULL,
                    OPEN_EXISTING, flag, NULL);
+#endif
                free(full);
        }
        if (h == INVALID_HANDLE_VALUE) {
@@ -561,6 +575,7 @@ la_mktemp(struct archive_write_disk *a)
        return (fd);
 }
 
+#if _WIN32_WINNT < _WIN32_WINNT_VISTA
 static void *
 la_GetFunctionKernel32(const char *name)
 {
@@ -576,18 +591,24 @@ la_GetFunctionKernel32(const char *name)
        }
        return (void *)GetProcAddress(lib, name);
 }
+#endif
 
 static int
 la_CreateHardLinkW(wchar_t *linkname, wchar_t *target)
 {
-       static BOOLEAN (WINAPI *f)(LPWSTR, LPWSTR, LPSECURITY_ATTRIBUTES);
-       static int set;
+       static BOOL (WINAPI *f)(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES);
        BOOL ret;
 
+#if _WIN32_WINNT < _WIN32_WINNT_XP
+       static int set;
+/* CreateHardLinkW is available since XP and always loaded */
        if (!set) {
                set = 1;
                f = la_GetFunctionKernel32("CreateHardLinkW");
        }
+#else
+       f = CreateHardLinkW;
+#endif
        if (!f) {
                errno = ENOTSUP;
                return (0);
@@ -626,18 +647,27 @@ static int
 la_CreateSymbolicLinkW(const wchar_t *linkname, const wchar_t *target,
     int linktype) {
        static BOOLEAN (WINAPI *f)(LPCWSTR, LPCWSTR, DWORD);
-       static int set;
        wchar_t *ttarget, *p;
-       int len;
+       size_t len;
        DWORD attrs = 0;
        DWORD flags = 0;
        DWORD newflags = 0;
        BOOL ret = 0;
 
+#if _WIN32_WINNT < _WIN32_WINNT_VISTA
+/* CreateSymbolicLinkW is available since Vista and always loaded */
+       static int set;
        if (!set) {
                set = 1;
                f = la_GetFunctionKernel32("CreateSymbolicLinkW");
        }
+#else
+# if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+       f = CreateSymbolicLinkW;
+# else
+       f = NULL;
+# endif
+#endif
        if (!f)
                return (0);
 
@@ -759,25 +789,16 @@ lazy_stat(struct archive_write_disk *a)
        return (ARCHIVE_WARN);
 }
 
-static struct archive_vtable *
-archive_write_disk_vtable(void)
-{
-       static struct archive_vtable av;
-       static int inited = 0;
-
-       if (!inited) {
-               av.archive_close = _archive_write_disk_close;
-               av.archive_filter_bytes = _archive_write_disk_filter_bytes;
-               av.archive_free = _archive_write_disk_free;
-               av.archive_write_header = _archive_write_disk_header;
-               av.archive_write_finish_entry
-                   = _archive_write_disk_finish_entry;
-               av.archive_write_data = _archive_write_disk_data;
-               av.archive_write_data_block = _archive_write_disk_data_block;
-               inited = 1;
-       }
-       return (&av);
-}
+static const struct archive_vtable
+archive_write_disk_vtable = {
+       .archive_close = _archive_write_disk_close,
+       .archive_filter_bytes = _archive_write_disk_filter_bytes,
+       .archive_free = _archive_write_disk_free,
+       .archive_write_header = _archive_write_disk_header,
+       .archive_write_finish_entry = _archive_write_disk_finish_entry,
+       .archive_write_data = _archive_write_disk_data,
+       .archive_write_data_block = _archive_write_disk_data_block,
+};
 
 static int64_t
 _archive_write_disk_filter_bytes(struct archive *_a, int n)
@@ -854,7 +875,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
         * dir restores; the dir restore logic otherwise gets messed
         * up by nonsense like "dir/.".
         */
-       ret = cleanup_pathname(a);
+       ret = cleanup_pathname(a, a->name);
        if (ret != ARCHIVE_OK)
                return (ret);
 
@@ -1196,6 +1217,8 @@ _archive_write_disk_finish_entry(struct archive *_a)
                if (la_ftruncate(a->fh, a->filesize) == -1) {
                        archive_set_error(&a->archive, errno,
                            "File size could not be restored");
+                       CloseHandle(a->fh);
+                       a->fh = INVALID_HANDLE_VALUE;
                        return (ARCHIVE_FAILED);
                }
        }
@@ -1373,7 +1396,7 @@ archive_write_disk_new(void)
        a->archive.magic = ARCHIVE_WRITE_DISK_MAGIC;
        /* We're ready to write a header immediately. */
        a->archive.state = ARCHIVE_STATE_HEADER;
-       a->archive.vtable = archive_write_disk_vtable();
+       a->archive.vtable = &archive_write_disk_vtable;
        a->start_time = time(NULL);
        /* Query and restore the umask. */
        umask(a->user_umask = umask(0));
@@ -1381,6 +1404,7 @@ archive_write_disk_new(void)
                free(a);
                return (NULL);
        }
+       a->path_safe.s[0] = 0;
        return (&a->archive);
 }
 
@@ -1666,14 +1690,30 @@ create_filesystem_object(struct archive_write_disk *a)
        mode_t final_mode, mode;
        int r;
        DWORD attrs = 0;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+               CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
 
        /* We identify hard/symlinks according to the link names. */
        /* Since link(2) and symlink(2) don't handle modes, we're done here. */
        linkname = archive_entry_hardlink_w(a->entry);
        if (linkname != NULL) {
-               wchar_t *linkfull, *namefull;
-
-               linkfull = __la_win_permissive_name_w(linkname);
+               wchar_t *linksanitized, *linkfull, *namefull;
+               size_t l = (wcslen(linkname) + 1) * sizeof(wchar_t);
+               linksanitized = malloc(l);
+               if (linksanitized == NULL) {
+                       archive_set_error(&a->archive, ENOMEM,
+                           "Can't allocate memory for hardlink target");
+                       return (-1);
+               }
+               memcpy(linksanitized, linkname, l);
+               r = cleanup_pathname(a, linksanitized);
+               if (r != ARCHIVE_OK) {
+                       free(linksanitized);
+                       return (r);
+               }
+               linkfull = __la_win_permissive_name_w(linksanitized);
+               free(linksanitized);
                namefull = __la_win_permissive_name_w(a->name);
                if (linkfull == NULL || namefull == NULL) {
                        errno = EINVAL;
@@ -1716,8 +1756,16 @@ create_filesystem_object(struct archive_write_disk *a)
                        a->todo = 0;
                        a->deferred = 0;
                } else if (r == 0 && a->filesize > 0) {
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+                       ZeroMemory(&createExParams, sizeof(createExParams));
+                       createExParams.dwSize = sizeof(createExParams);
+                       createExParams.dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+                       a->fh = CreateFile2(namefull, GENERIC_WRITE, 0,
+                           TRUNCATE_EXISTING, &createExParams);
+#else
                        a->fh = CreateFileW(namefull, GENERIC_WRITE, 0, NULL,
                            TRUNCATE_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+#endif
                        if (a->fh == INVALID_HANDLE_VALUE) {
                                la_dosmaperr(GetLastError());
                                r = errno;
@@ -1780,14 +1828,27 @@ create_filesystem_object(struct archive_write_disk *a)
                a->tmpname = NULL;
                fullname = a->name;
                /* O_WRONLY | O_CREAT | O_EXCL */
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+               ZeroMemory(&createExParams, sizeof(createExParams));
+               createExParams.dwSize = sizeof(createExParams);
+               createExParams.dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
+               a->fh = CreateFile2(fullname, GENERIC_WRITE, 0,
+                   CREATE_NEW, &createExParams);
+#else
                a->fh = CreateFileW(fullname, GENERIC_WRITE, 0, NULL,
                    CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
+#endif
                if (a->fh == INVALID_HANDLE_VALUE &&
                    GetLastError() == ERROR_INVALID_NAME &&
                    fullname == a->name) {
                        fullname = __la_win_permissive_name_w(a->name);
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+                       a->fh = CreateFile2(fullname, GENERIC_WRITE, 0,
+                           CREATE_NEW, &createExParams);
+#else
                        a->fh = CreateFileW(fullname, GENERIC_WRITE, 0, NULL,
                            CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
+#endif
                }
                if (a->fh == INVALID_HANDLE_VALUE) {
                        if (GetLastError() == ERROR_ACCESS_DENIED) {
@@ -2152,6 +2213,8 @@ check_symlinks(struct archive_write_disk *a)
                                return (ARCHIVE_FAILED);
                        }
                }
+               if (!c)
+                       break;
                pn[0] = c;
                pn++;
        }
@@ -2184,12 +2247,12 @@ guidword(wchar_t *p, int n)
  * set) any '..' in the path.
  */
 static int
-cleanup_pathname(struct archive_write_disk *a)
+cleanup_pathname(struct archive_write_disk *a, wchar_t *name)
 {
        wchar_t *dest, *src, *p, *top;
        wchar_t separator = L'\0';
 
-       p = a->name;
+       p = name;
        if (*p == L'\0') {
                archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
                    "Invalid empty pathname");
@@ -2201,7 +2264,7 @@ cleanup_pathname(struct archive_write_disk *a)
                if (*p == L'/')
                        *p = L'\\';
        }
-       p = a->name;
+       p = name;
 
        /* Skip leading "\\.\" or "\\?\" or "\\?\UNC\" or
         * "\\?\Volume{GUID}\"
@@ -2256,6 +2319,9 @@ cleanup_pathname(struct archive_write_disk *a)
                        return (ARCHIVE_FAILED);
                } else
                        p += 4;
+    /* Network drive path like "\\<server-name>\<share-name>\file" */
+    } else if (p[0] == L'\\' && p[1] == L'\\') {
+        p += 2;
        }
 
        /* Skip leading drive letter from archives created
@@ -2543,14 +2609,25 @@ set_times(struct archive_write_disk *a,
                hw = NULL;
        } else {
                wchar_t *ws;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+               CREATEFILE2_EXTENDED_PARAMETERS createExParams;
+#endif
 
                if (S_ISLNK(mode))
                        return (ARCHIVE_OK);
                ws = __la_win_permissive_name_w(name);
                if (ws == NULL)
                        goto settimes_failed;
+# if _WIN32_WINNT >= 0x0602 /* _WIN32_WINNT_WIN8 */
+               ZeroMemory(&createExParams, sizeof(createExParams));
+               createExParams.dwSize = sizeof(createExParams);
+               createExParams.dwFileFlags = FILE_FLAG_BACKUP_SEMANTICS;
+               hw = CreateFile2(ws, FILE_WRITE_ATTRIBUTES, 0,
+                   OPEN_EXISTING, &createExParams);
+#else
                hw = CreateFileW(ws, FILE_WRITE_ATTRIBUTES,
                    0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
+#endif
                free(ws);
                if (hw == INVALID_HANDLE_VALUE)
                        goto settimes_failed;
index 29bffe4..6bceb96 100644 (file)
@@ -218,6 +218,7 @@ On failure, the callback should invoke
 .Fn archive_set_error
 to register an error code and message and
 return
+.Cm ARCHIVE_FATAL .
 .Bl -item -offset indent
 .It
 .Ft typedef int
index 155fdd7..6522e65 100644 (file)
@@ -53,6 +53,7 @@ struct archive_write_filter {
            const char *key, const char *value);
        int     (*open)(struct archive_write_filter *);
        int     (*write)(struct archive_write_filter *, const void *, size_t);
+       int     (*flush)(struct archive_write_filter *);
        int     (*close)(struct archive_write_filter *);
        int     (*free)(struct archive_write_filter *);
        void     *data;
index d5ca9a6..bca48ba 100644 (file)
@@ -91,6 +91,26 @@ __FBSDID("$FreeBSD$");
 #define kAttributes            0x15
 #define kEncodedHeader         0x17
 
+// Check that some windows file attribute constants are defined.
+// Reference: https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants
+#ifndef FILE_ATTRIBUTE_READONLY
+#define FILE_ATTRIBUTE_READONLY 0x00000001
+#endif
+
+#ifndef FILE_ATTRIBUTE_DIRECTORY
+#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
+#endif
+
+#ifndef FILE_ATTRIBUTE_ARCHIVE
+#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
+#endif
+
+// This value is defined in 7zip with the comment "trick for Unix".
+//
+// 7z archives created on unix have this bit set in the high 16 bits of
+// the attr field along with the unix permissions.
+#define FILE_ATTRIBUTE_UNIX_EXTENSION 0x8000
+
 enum la_zaction {
        ARCHIVE_Z_FINISH,
        ARCHIVE_Z_RUN
@@ -165,7 +185,7 @@ struct file {
        mode_t                   mode;
        uint32_t                 crc32;
 
-       signed int               dir:1;
+       unsigned                 dir:1;
 };
 
 struct _7zip {
@@ -1424,14 +1444,19 @@ make_header(struct archive_write *a, uint64_t offset, uint64_t pack_size,
                 * High 16bits is unix mode.
                 * Low 16bits is Windows attributes.
                 */
-               uint32_t encattr, attr;
+               uint32_t encattr, attr = 0;
+
                if (file->dir)
-                       attr = 0x8010;
+                       attr |= FILE_ATTRIBUTE_DIRECTORY;
                else
-                       attr = 0x8020;
+                       attr |= FILE_ATTRIBUTE_ARCHIVE;
+
                if ((file->mode & 0222) == 0)
-                       attr |= 1;/* Read Only. */
+                       attr |= FILE_ATTRIBUTE_READONLY;
+
+               attr |= FILE_ATTRIBUTE_UNIX_EXTENSION;
                attr |= ((uint32_t)file->mode) << 16;
+
                archive_le32enc(&encattr, attr);
                r = (int)compress_out(a, &encattr, 4, ARCHIVE_Z_RUN);
                if (r < 0)
@@ -1809,11 +1834,11 @@ compression_init_encoder_bzip2(struct archive *a,
         * of ugly hackery to convert a const * pointer to
         * a non-const pointer. */
        strm->next_in = (char *)(uintptr_t)(const void *)lastrm->next_in;
-       strm->avail_in = lastrm->avail_in;
+       strm->avail_in = (uint32_t)lastrm->avail_in;
        strm->total_in_lo32 = (uint32_t)(lastrm->total_in & 0xffffffff);
        strm->total_in_hi32 = (uint32_t)(lastrm->total_in >> 32);
        strm->next_out = (char *)lastrm->next_out;
-       strm->avail_out = lastrm->avail_out;
+       strm->avail_out = (uint32_t)lastrm->avail_out;
        strm->total_out_lo32 = (uint32_t)(lastrm->total_out & 0xffffffff);
        strm->total_out_hi32 = (uint32_t)(lastrm->total_out >> 32);
        if (BZ2_bzCompressInit(strm, level, 0, 30) != BZ_OK) {
@@ -1842,11 +1867,11 @@ compression_code_bzip2(struct archive *a,
         * of ugly hackery to convert a const * pointer to
         * a non-const pointer. */
        strm->next_in = (char *)(uintptr_t)(const void *)lastrm->next_in;
-       strm->avail_in = lastrm->avail_in;
+       strm->avail_in = (uint32_t)lastrm->avail_in;
        strm->total_in_lo32 = (uint32_t)(lastrm->total_in & 0xffffffff);
        strm->total_in_hi32 = (uint32_t)(lastrm->total_in >> 32);
        strm->next_out = (char *)lastrm->next_out;
-       strm->avail_out = lastrm->avail_out;
+       strm->avail_out = (uint32_t)lastrm->avail_out;
        strm->total_out_lo32 = (uint32_t)(lastrm->total_out & 0xffffffff);
        strm->total_out_hi32 = (uint32_t)(lastrm->total_out >> 32);
        r = BZ2_bzCompress(strm,
index c1e2f65..d6ce35a 100644 (file)
@@ -124,7 +124,7 @@ PACKED(struct cpio_binary_header {
  * ...but it feels a little better to do it like this:
  */
 
-static uint16_t swap16(uint16_t in) {
+static uint16_t la_swap16(uint16_t in) {
        union {
                uint16_t s[2];
                uint8_t c[4];
@@ -141,7 +141,7 @@ static uint16_t swap16(uint16_t in) {
        /* NOTREACHED */
 }
 
-static uint32_t swap32(uint32_t in) {
+static uint32_t la_swap32(uint32_t in) {
        union {
                uint32_t l;
                uint16_t s[2];
@@ -156,8 +156,8 @@ static uint32_t swap32(uint32_t in) {
                U.s[1] = t;
        } else if (U.c[3]) {    /* Big-endian */
                U.l = in;
-               U.s[0] = swap16(U.s[0]);
-               U.s[1] = swap16(U.s[1]);
+               U.s[0] = la_swap16(U.s[0]);
+               U.s[1] = la_swap16(U.s[1]);
        } else {                /* PDP-endian */
                U.l = in;
        }
@@ -426,8 +426,8 @@ write_header(struct archive_write *a, struct archive_entry *entry)
        /* Include trailing null */
        pathlength = (int)len + 1;
 
-       h.h_magic = swap16(070707);
-       h.h_dev = swap16(archive_entry_dev(entry));
+       h.h_magic = la_swap16(070707);
+       h.h_dev = la_swap16(archive_entry_dev(entry));
 
        ino = synthesize_ino_value(cpio, entry);
        if (ino < 0) {
@@ -441,7 +441,7 @@ write_header(struct archive_write *a, struct archive_entry *entry)
                ret_final = ARCHIVE_FATAL;
                goto exit_write_header;
        }
-       h.h_ino = swap16(ino);
+       h.h_ino = la_swap16((uint16_t)ino);
 
        h.h_mode = archive_entry_mode(entry);
        if (((h.h_mode & AE_IFMT) == AE_IFSOCK) || ((h.h_mode & AE_IFMT) == AE_IFIFO)) {
@@ -460,20 +460,20 @@ write_header(struct archive_write *a, struct archive_entry *entry)
                /* we could turn off AE_IFREG here, but it does no harm, */
                /* and allows v7 cpio to read the entry without confusion */
        }
-       h.h_mode = swap16(h.h_mode);
+       h.h_mode = la_swap16(h.h_mode);
 
-       h.h_uid = swap16(archive_entry_uid(entry));
-       h.h_gid = swap16(archive_entry_gid(entry));
-       h.h_nlink = swap16(archive_entry_nlink(entry));
+       h.h_uid = la_swap16((uint16_t)archive_entry_uid(entry));
+       h.h_gid = la_swap16((uint16_t)archive_entry_gid(entry));
+       h.h_nlink = la_swap16((uint16_t)archive_entry_nlink(entry));
 
        if (archive_entry_filetype(entry) == AE_IFBLK
            || archive_entry_filetype(entry) == AE_IFCHR)
-               h.h_majmin = swap16(archive_entry_rdev(entry));
+               h.h_majmin = la_swap16(archive_entry_rdev(entry));
        else
                h.h_majmin = 0;
 
-       h.h_mtime = swap32(archive_entry_mtime(entry));
-       h.h_namesize = swap16(pathlength);
+       h.h_mtime = la_swap32((uint32_t)archive_entry_mtime(entry));
+       h.h_namesize = la_swap16(pathlength);
 
        /* Non-regular files don't store bodies. */
        if (archive_entry_filetype(entry) != AE_IFREG)
@@ -502,7 +502,7 @@ write_header(struct archive_write *a, struct archive_entry *entry)
                        ret_final = ARCHIVE_FATAL;
                        goto exit_write_header;
                }
-               h.h_filesize = swap32(strlen(p)); /* symlink */
+               h.h_filesize = la_swap32((uint32_t)strlen(p)); /* symlink */
        } else {
                if ((a->archive.archive_format == ARCHIVE_FORMAT_CPIO_PWB) &&
                    (archive_entry_size(entry) > 256*256*256-1)) {
@@ -516,7 +516,7 @@ write_header(struct archive_write *a, struct archive_entry *entry)
                        ret_final = ARCHIVE_FAILED;
                        goto exit_write_header;
                }
-               h.h_filesize = swap32(archive_entry_size(entry)); /* file */
+               h.h_filesize = la_swap32((uint32_t)archive_entry_size(entry)); /* file */
        }
 
        ret = __archive_write_output(a, &h, HSIZE);
index faabd28..2a3ae07 100644 (file)
@@ -289,12 +289,12 @@ struct isoent {
                struct extr_rec *current;
        }                        extr_rec_list;
 
-       signed int               virtual:1;
+       unsigned int             virtual:1;
        /* If set to one, this file type is a directory.
         * A convenience flag to be used as
         * "archive_entry_filetype(isoent->file->entry) == AE_IFDIR".
         */
-       signed int               dir:1;
+       unsigned int             dir:1;
 };
 
 struct hardlink {
@@ -652,7 +652,7 @@ struct iso_option {
 #define VOLUME_IDENTIFIER_SIZE         32
 
        /*
-        * Usage  : !zisofs [DEFAULT] 
+        * Usage  : !zisofs [DEFAULT]
         *        :    Disable to generate RRIP 'ZF' extension.
         *        : zisofs
         *        :    Make files zisofs file and generate RRIP 'ZF'
@@ -689,7 +689,7 @@ struct iso9660 {
        uint64_t                 bytes_remaining;
        int                      need_multi_extent;
 
-       /* Temporary string buffer for Joliet extension. */ 
+       /* Temporary string buffer for Joliet extension. */
        struct archive_string    utf16be;
        struct archive_string    mbs;
 
@@ -755,9 +755,9 @@ struct iso9660 {
 
        /* Used for making zisofs. */
        struct {
-               signed int       detect_magic:1;
-               signed int       making:1;
-               signed int       allzero:1;
+               unsigned int     detect_magic:1;
+               unsigned int     making:1;
+               unsigned int     allzero:1;
                unsigned char    magic_buffer[64];
                int              magic_cnt;
 
@@ -2521,12 +2521,11 @@ get_gmoffset(struct tm *tm)
 static void
 get_tmfromtime(struct tm *tm, time_t *t)
 {
-#if HAVE_LOCALTIME_R
+#if HAVE_LOCALTIME_S
+       localtime_s(tm, t);
+#elif HAVE_LOCALTIME_R
        tzset();
        localtime_r(t, tm);
-#elif HAVE__LOCALTIME64_S
-       __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
@@ -4074,11 +4073,8 @@ write_information_block(struct archive_write *a)
        }
        memset(info.s, 0, info_size);
        opt = 0;
-#if defined(HAVE__CTIME64_S)
-       {
-               __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));
-       }
+#if defined(HAVE_CTIME_S)
+       ctime_s(buf, sizeof(buf), &(iso9660->birth_time));
 #elif defined(HAVE_CTIME_R)
        ctime_r(&(iso9660->birth_time), buf);
 #else
@@ -6802,6 +6798,7 @@ isoent_rr_move(struct archive_write *a)
  * This comparing rule is according to ISO9660 Standard 6.9.1
  */
 static int
+__LA_LIBC_CC
 _compare_path_table(const void *v1, const void *v2)
 {
        const struct isoent *p1, *p2;
@@ -6844,6 +6841,7 @@ _compare_path_table(const void *v1, const void *v2)
 }
 
 static int
+__LA_LIBC_CC
 _compare_path_table_joliet(const void *v1, const void *v2)
 {
        const struct isoent *p1, *p2;
@@ -7800,8 +7798,8 @@ struct zisofs_extract {
        uint64_t         pz_uncompressed_size;
        size_t           uncompressed_buffer_size;
 
-       signed int       initialized:1;
-       signed int       header_passed:1;
+       unsigned int     initialized:1;
+       unsigned int     header_passed:1;
 
        uint32_t         pz_offset;
        unsigned char   *block_pointers;
index a2b2710..1eb9a9a 100644 (file)
@@ -100,6 +100,7 @@ static int           has_non_ASCII(const char *);
 static void             sparse_list_clear(struct pax *);
 static int              sparse_list_add(struct pax *, int64_t, int64_t);
 static char            *url_encode(const char *in);
+static time_t           get_ustar_max_mtime(void);
 
 /*
  * Set output format to 'restricted pax' format.
@@ -367,10 +368,12 @@ archive_write_pax_header_xattr(struct pax *pax, const char *encoded_name,
        struct archive_string s;
        char *encoded_value;
 
+       if (encoded_name == NULL)
+               return;
+
        if (pax->flags & WRITE_LIBARCHIVE_XATTR) {
                encoded_value = base64_encode((const char *)value, value_len);
-
-               if (encoded_name != NULL && encoded_value != NULL) {
+               if (encoded_value != NULL) {
                        archive_string_init(&s);
                        archive_strcpy(&s, "LIBARCHIVE.xattr.");
                        archive_strcat(&s, encoded_name);
@@ -403,17 +406,22 @@ archive_write_pax_header_xattrs(struct archive_write *a,
 
                archive_entry_xattr_next(entry, &name, &value, &size);
                url_encoded_name = url_encode(name);
-               if (url_encoded_name != NULL) {
+               if (url_encoded_name == NULL)
+                       goto malloc_error;
+               else {
                        /* Convert narrow-character to UTF-8. */
                        r = archive_strcpy_l(&(pax->l_url_encoded_name),
                            url_encoded_name, pax->sconv_utf8);
                        free(url_encoded_name); /* Done with this. */
                        if (r == 0)
                                encoded_name = pax->l_url_encoded_name.s;
-                       else if (errno == ENOMEM) {
-                               archive_set_error(&a->archive, ENOMEM,
-                                   "Can't allocate memory for Linkname");
-                               return (ARCHIVE_FATAL);
+                       else if (r == -1)
+                               goto malloc_error;
+                       else {
+                               archive_set_error(&a->archive,
+                                   ARCHIVE_ERRNO_MISC,
+                                   "Error encoding pax extended attribute");
+                               return (ARCHIVE_FAILED);
                        }
                }
 
@@ -422,6 +430,9 @@ archive_write_pax_header_xattrs(struct archive_write *a,
 
        }
        return (ARCHIVE_OK);
+malloc_error:
+       archive_set_error(&a->archive, ENOMEM, "Can't allocate memory");
+       return (ARCHIVE_FATAL);
 }
 
 static int
@@ -595,6 +606,8 @@ archive_write_pax_header(struct archive_write *a,
        need_extension = 0;
        pax = (struct pax *)a->format_data;
 
+       const time_t ustar_max_mtime = get_ustar_max_mtime();
+
        /* Sanity check. */
        if (archive_entry_pathname(entry_original) == NULL) {
                archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -1028,10 +1041,8 @@ archive_write_pax_header(struct archive_write *a,
        archive_string_init(&entry_name);
        archive_strcpy(&entry_name, archive_entry_pathname(entry_main));
 
-       /* If file size is too large, add 'size' to pax extended attrs. */
+       /* If file size is too large, we need pax extended attrs. */
        if (archive_entry_size(entry_main) >= (((int64_t)1) << 33)) {
-               add_pax_attr_int(&(pax->pax_header), "size",
-                   archive_entry_size(entry_main));
                need_extension = 1;
        }
 
@@ -1118,16 +1129,13 @@ archive_write_pax_header(struct archive_write *a,
        }
 
        /*
-        * Technically, the mtime field in the ustar header can
-        * support 33 bits, but many platforms use signed 32-bit time
-        * values.  The cutoff of 0x7fffffff here is a compromise.
         * Yes, this check is duplicated just below; this helps to
         * avoid writing an mtime attribute just to handle a
         * high-resolution timestamp in "restricted pax" mode.
         */
        if (!need_extension &&
            ((archive_entry_mtime(entry_main) < 0)
-               || (archive_entry_mtime(entry_main) >= 0x7fffffff)))
+               || (archive_entry_mtime(entry_main) >= ustar_max_mtime)))
                need_extension = 1;
 
        /* I use a star-compatible file flag attribute. */
@@ -1192,7 +1200,7 @@ archive_write_pax_header(struct archive_write *a,
        if (a->archive.archive_format != ARCHIVE_FORMAT_TAR_PAX_RESTRICTED ||
            need_extension) {
                if (archive_entry_mtime(entry_main) < 0  ||
-                   archive_entry_mtime(entry_main) >= 0x7fffffff  ||
+                   archive_entry_mtime(entry_main) >= ustar_max_mtime  ||
                    archive_entry_mtime_nsec(entry_main) != 0)
                        add_pax_attr_time(&(pax->pax_header), "mtime",
                            archive_entry_mtime(entry_main),
@@ -1347,6 +1355,12 @@ archive_write_pax_header(struct archive_write *a,
                    mapsize + pax->sparse_map_padding + sparse_total);
        }
 
+       /* If file size is too large, add 'size' to pax extended attrs. */
+       if (archive_entry_size(entry_main) >= (((int64_t)1) << 33)) {
+               add_pax_attr_int(&(pax->pax_header), "size",
+                   archive_entry_size(entry_main));
+       }
+
        /* Format 'ustar' header for main entry.
         *
         * The trouble with file size: If the reader can't understand
@@ -1424,7 +1438,7 @@ archive_write_pax_header(struct archive_write *a,
                /* Copy mtime, but clip to ustar limits. */
                s = archive_entry_mtime(entry_main);
                if (s < 0) { s = 0; }
-               if (s >= 0x7fffffff) { s = 0x7fffffff; }
+               if (s > ustar_max_mtime) { s = ustar_max_mtime; }
                archive_entry_set_mtime(pax_attr_entry, s, 0);
 
                /* Standard ustar doesn't support atime. */
@@ -1713,7 +1727,7 @@ build_pax_attribute_name(char *dest, const char *src)
         * to having clients override it.
         */
 #if HAVE_GETPID && 0  /* Disable this for now; see above comment. */
-       sprintf(buff, "PaxHeader.%d", getpid());
+       snprintf(buff, sizeof(buff), "PaxHeader.%d", getpid());
 #else
        /* If the platform can't fetch the pid, don't include it. */
        strcpy(buff, "PaxHeader");
@@ -1900,14 +1914,19 @@ url_encode(const char *in)
 {
        const char *s;
        char *d;
-       int out_len = 0;
+       size_t out_len = 0;
        char *out;
 
        for (s = in; *s != '\0'; s++) {
-               if (*s < 33 || *s > 126 || *s == '%' || *s == '=')
+               if (*s < 33 || *s > 126 || *s == '%' || *s == '=') {
+                       if (SIZE_MAX - out_len < 4)
+                               return (NULL);
                        out_len += 3;
-               else
+               } else {
+                       if (SIZE_MAX - out_len < 2)
+                               return (NULL);
                        out_len++;
+               }
        }
 
        out = (char *)malloc(out_len + 1);
@@ -2042,3 +2061,18 @@ sparse_list_add(struct pax *pax, int64_t offset, int64_t length)
        return (_sparse_list_add_block(pax, offset, length, 0));
 }
 
+static time_t
+get_ustar_max_mtime(void)
+{
+       /*
+        * Technically, the mtime field in the ustar header can
+        * support 33 bits. We are using all of them to keep
+        * tar/test/test_option_C_mtree.c simple and passing after 2038.
+        * For platforms that use signed 32-bit time values we
+        * use the 32-bit maximum.
+        */
+       if (sizeof(time_t) > sizeof(int32_t))
+               return (time_t)0x1ffffffff;
+       else
+               return (time_t)0x7fffffff;
+}
index 46b0573..0ef003e 100644 (file)
@@ -329,30 +329,21 @@ xstrftime(struct archive_string *as, const char *fmt, time_t t)
 {
 /** like strftime(3) but for time_t objects */
        struct tm *rt;
-#if defined(HAVE_GMTIME_R) || defined(HAVE__GMTIME64_S)
+#if defined(HAVE_GMTIME_R) || defined(HAVE_GMTIME_S)
        struct tm timeHere;
 #endif
-#if defined(HAVE__GMTIME64_S)
-       errno_t terr;
-       __time64_t tmptime;
-#endif
        char strtime[100];
        size_t len;
 
-#ifdef HAVE_GMTIME_R
-       if ((rt = gmtime_r(&t, &timeHere)) == NULL)
-               return;
-#elif defined(HAVE__GMTIME64_S)
-       tmptime = t;
-       terr = _gmtime64_s(&timeHere, &tmptime);
-       if (terr)
-               rt = NULL;
-       else
-               rt = &timeHere;
+#if defined(HAVE_GMTIME_S)
+       rt = gmtime_s(&timeHere, &t) ? NULL : &timeHere;
+#elif defined(HAVE_GMTIME_R)
+       rt = gmtime_r(&t, &timeHere);
 #else
-       if ((rt = gmtime(&t)) == NULL)
-               return;
+       rt = gmtime(&t);
 #endif
+       if (!rt)
+               return;
        /* leave the hard yacker to our role model strftime() */
        len = strftime(strtime, sizeof(strtime)-1, fmt, rt);
        archive_strncat(as, strtime, len);
index d885f5c..7307757 100644 (file)
@@ -212,8 +212,8 @@ struct file {
        struct heap_data         data;
         struct archive_string    script;
 
-       signed int               virtual:1;
-       signed int               dir:1;
+       unsigned int             virtual:1;
+       unsigned int             dir:1;
 };
 
 struct hardlink {
@@ -906,15 +906,11 @@ xmlwrite_time(struct archive_write *a, xmlTextWriterPtr writer,
 {
        char timestr[100];
        struct tm tm;
-#if defined(HAVE__GMTIME64_S)
-       __time64_t tmptime;
-#endif
 
-#if defined(HAVE_GMTIME_R)
+#if defined(HAVE_GMTIME_S)
+       gmtime_s(&tm, &t);
+#elif defined(HAVE_GMTIME_R)
        gmtime_r(&t, &tm);
-#elif defined(HAVE__GMTIME64_S)
-       tmptime = t;
-       _gmtime64_s(&tm, &tmptime);
 #else
        memcpy(&tm, gmtime(&t), sizeof(tm));
 #endif
index f4352d5..6821049 100644 (file)
@@ -740,12 +740,16 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
                /* We may know the size, but never the CRC. */
                zip->entry_flags |= ZIP_ENTRY_FLAG_LENGTH_AT_END;
        } else {
-               /* We don't know the size.  In this case, we prefer
-                * deflate (it has a clear end-of-data marker which
-                * makes length-at-end more reliable) and will
-                * enable Zip64 extensions unless we're told not to.
+               /* We don't know the size. Use the default
+                * compression unless specified otherwise.
+                * We enable Zip64 extensions unless we're told not to.
                 */
-               zip->entry_compression = COMPRESSION_DEFAULT;
+
+               zip->entry_compression = zip->requested_compression;
+               if(zip->entry_compression == COMPRESSION_UNSPECIFIED){
+                       zip->entry_compression = COMPRESSION_DEFAULT;
+               }
+
                zip->entry_flags |= ZIP_ENTRY_FLAG_LENGTH_AT_END;
                if ((zip->flags & ZIP_FLAG_AVOID_ZIP64) == 0) {
                        zip->entry_uses_zip64 = 1;
@@ -1378,25 +1382,14 @@ dos_time(const time_t unix_time)
 {
        struct tm *t;
        unsigned int dt;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
        struct tm tmbuf;
 #endif
-#if defined(HAVE__LOCALTIME64_S)
-       errno_t terr;
-       __time64_t tmptime;
-#endif
 
-       /* This will not preserve time when creating/extracting the archive
-        * on two systems with different time zones. */
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+       t = localtime_s(&tmbuf, &unix_time) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
        t = localtime_r(&unix_time, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
-       tmptime = unix_time;
-       terr = _localtime64_s(&tmbuf, &tmptime);
-       if (terr)
-               t = NULL;
-       else
-               t = &tmbuf;
 #else
        t = localtime(&unix_time);
 #endif
index dd57358..f4b5081 100644 (file)
@@ -257,6 +257,15 @@ If supported, the default value is read from
 The value is interpreted as a decimal integer specifying the
 compression level. Supported values depend on the library version,
 common values are from 1 to 22.
+.It Cm long
+Enables long distance matching. The value is interpreted as a
+decimal integer specifying log2 window size in bytes. Values from
+10 to 30 for 32 bit, or 31 for 64 bit, are supported.
+.It Cm threads
+The value is interpreted as a decimal integer specifying the
+number of threads for multi-threaded zstd compression.
+If set to 0, zstd will attempt to detect and use the number
+of physical CPU cores.
 .El
 .It Format 7zip
 .Bl -tag -compact -width indent
index ac651f0..669f272 100644 (file)
 #define HAVE_FCNTL 1
 #define HAVE_FCNTL_H 1
 #define HAVE_FDOPENDIR 1
+#define HAVE_FNMATCH 1
+#define HAVE_FNMATCH_H 1
 #define HAVE_FORK 1
 #define HAVE_FSEEKO 1
 #define HAVE_FSTAT 1
 #define HAVE_GETEUID 1
 #define HAVE_GETGRGID_R 1
 #define HAVE_GETGRNAM_R 1
+#define HAVE_GETLINE 1
+#define HAVE_GETOPT_OPTRESET 1
 #define HAVE_GETPID 1
 #define HAVE_GETPWNAM_R 1
 #define HAVE_GETPWUID_R 1
 #define HAVE_SYS_MOUNT_H 1
 #define HAVE_SYS_PARAM_H 1
 #define HAVE_SYS_POLL_H 1
+#define HAVE_SYS_QUEUE_H 1
 #define HAVE_SYS_SELECT_H 1
 #define HAVE_SYS_STATVFS_H 1
 #define HAVE_SYS_STAT_H 1
 #define HAVE_WMEMCPY 1
 #define HAVE_WMEMMOVE 1
 #define HAVE_ZLIB_H 1
-#define TIME_WITH_SYS_TIME 1
+#define HAVE_SYS_TIME_H 1
+
+#if __FreeBSD_version >= 800505
+#define HAVE_LIBLZMA 1
+#define HAVE_LZMA_H 1
+#if __FreeBSD_version >= 1002504
+#define HAVE_LZMA_STREAM_ENCODER_MT 1
+#endif
+#endif
 
 #if __FreeBSD_version >= 1100056
 #define HAVE_FUTIMENS 1
index 837a456..c71018b 100644 (file)
@@ -354,7 +354,7 @@ while working in AT&T's Unix Support Group.
 It appeared in 1977 as part of PWB/UNIX 1.0, the
 .Dq Programmer's Work Bench
 derived from
-.At 6th Edition UNIX
+.At v6
 that was used internally at AT&T.
 Both the new binary and old character formats were in use
 by 1980, according to the System III source released
index ac255c4..62085a7 100644 (file)
@@ -76,7 +76,7 @@ int
 __archive_create_child(const char *cmd, int *child_stdin, int *child_stdout,
                pid_t *out_child)
 {
-       pid_t child;
+       pid_t child = -1;
        int stdin_pipe[2], stdout_pipe[2], tmp;
 #if HAVE_POSIX_SPAWNP
        posix_spawn_file_actions_t actions;
index 8d11179..9e49c56 100644 (file)
 
 #include "filter_fork.h"
 
+#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
+/* There are some editions of Windows ("nano server," for example) that
+ * do not host user32.dll. If we want to keep running on those editions,
+ * we need to delay-load WaitForInputIdle. */
+static void *
+la_GetFunctionUser32(const char *name)
+{
+       static HINSTANCE lib;
+       static int set;
+       if (!set) {
+               set = 1;
+               lib = LoadLibrary(TEXT("user32.dll"));
+       }
+       if (lib == NULL) {
+               return NULL;
+       }
+       return (void *)GetProcAddress(lib, name);
+}
+
+static int
+la_WaitForInputIdle(HANDLE hProcess, DWORD dwMilliseconds)
+{
+       static DWORD (WINAPI *f)(HANDLE, DWORD);
+       static int set;
+
+       if (!set) {
+               set = 1;
+               f = la_GetFunctionUser32("WaitForInputIdle");
+       }
+
+       if (!f) {
+               /* An inability to wait for input idle is
+                * not _good_, but it is not catastrophic. */
+               return WAIT_FAILED;
+       }
+       return (*f)(hProcess, dwMilliseconds);
+}
+
 int
 __archive_create_child(const char *cmd, int *child_stdin, int *child_stdout,
                HANDLE *out_child)
@@ -149,7 +187,7 @@ __archive_create_child(const char *cmd, int *child_stdin, int *child_stdout,
        if (CreateProcessA(fullpath.s, cmdline.s, NULL, NULL, TRUE, 0,
              NULL, NULL, &staInfo, &childInfo) == 0)
                goto fail;
-       WaitForInputIdle(childInfo.hProcess, INFINITE);
+       la_WaitForInputIdle(childInfo.hProcess, INFINITE);
        CloseHandle(childInfo.hProcess);
        CloseHandle(childInfo.hThread);
 
@@ -187,6 +225,14 @@ fail:
        __archive_cmdline_free(acmd);
        return ARCHIVE_FAILED;
 }
+#else /* !WINAPI_PARTITION_DESKTOP */
+int
+__archive_create_child(const char *cmd, int *child_stdin, int *child_stdout, HANDLE *out_child)
+{
+       (void)cmd; (void)child_stdin; (void) child_stdout; (void) out_child;
+       return ARCHIVE_FAILED;
+}
+#endif /* !WINAPI_PARTITION_DESKTOP */
 
 void
 __archive_check_child(int in, int out)
index 1ef4b7c..6490562 100644 (file)
@@ -62,30 +62,40 @@ GNU-format tar archives,
 .It
 most common cpio archive formats,
 .It
-ISO9660 CD images (including RockRidge and Joliet extensions),
-.It
-Zip archives,
+7-Zip archives,
 .It
 ar archives (including GNU/SysV and BSD extensions),
 .It
 Microsoft CAB archives,
 .It
+ISO9660 CD images (including RockRidge and Joliet extensions),
+.It
 LHA archives,
 .It
 mtree file tree descriptions,
 .It
-RAR archives,
+RAR and most RAR5 archives,
 .It
-XAR archives.
+WARC archives,
+.It
+XAR archives,
+.It
+Zip archives.
 .El
 The library automatically detects archives compressed with
-.Xr gzip 1 ,
+.Xr compress 1 ,
 .Xr bzip2 1 ,
-.Xr xz 1 ,
+.Xr grzip 1 ,
+.Xr gzip 1 ,
+.Xr lrzip 1 ,
+.Xr lz4 1 ,
 .Xr lzip 1 ,
+.Xr lzop 1 ,
+.Xr xz 1 ,
 or
-.Xr compress 1
-and decompresses them transparently.
+.Xr zstd 1
+and decompresses them transparently. Decompression of some formats
+requires external decompressor utilities.
 It can similarly detect and decode archives processed with
 .Xr uuencode 1
 or which have an
@@ -107,19 +117,19 @@ archives,
 .It
 cpio archives,
 .It
-Zip archive,
+7-Zip archives,
+.It
+ar archives,
 .It
 two different variants of shar archives,
 .It
 ISO9660 CD images,
 .It
-7-Zip archives,
-.It
-ar archives,
-.It
 mtree file tree descriptions,
 .It
-XAR archives.
+XAR archives,
+.It
+Zip archive.
 .El
 Pax interchange format is an extension of the tar archive format that
 eliminates essentially all of the limitations of historic tar formats
index 53cc3e2..5e17d62 100644 (file)
@@ -63,6 +63,7 @@ IF(ENABLE_TEST)
     test_compat_solaris_pax_sparse.c
     test_compat_solaris_tar_acl.c
     test_compat_star_acl.c
+    test_compat_tar_directory.c
     test_compat_tar_hardlink.c
     test_compat_uudecode.c
     test_compat_uudecode_large.c
@@ -97,6 +98,7 @@ IF(ENABLE_TEST)
     test_read_filter_program.c
     test_read_filter_program_signature.c
     test_read_filter_uudecode.c
+    test_read_filter_uudecode_raw.c
     test_read_format_7zip.c
     test_read_format_7zip_encryption_data.c
     test_read_format_7zip_encryption_header.c
@@ -152,6 +154,7 @@ IF(ENABLE_TEST)
     test_read_format_rar_encryption_header.c
     test_read_format_rar_encryption_partially.c
     test_read_format_rar_invalid1.c
+    test_read_format_rar_filter.c
     test_read_format_rar5.c
     test_read_format_raw.c
     test_read_format_tar.c
@@ -160,6 +163,7 @@ IF(ENABLE_TEST)
     test_read_format_tar_empty_with_gnulabel.c
     test_read_format_tar_empty_pax.c
     test_read_format_tar_filename.c
+    test_read_format_tar_invalid_pax_size.c
     test_read_format_tbz.c
     test_read_format_tgz.c
     test_read_format_tlz.c
@@ -276,6 +280,7 @@ IF(ENABLE_TEST)
     test_write_format_zip_compression_store.c
     test_write_format_zip_empty.c
     test_write_format_zip_empty_zip64.c
+    test_write_format_zip_entry_size_unset.c
     test_write_format_zip_file.c
     test_write_format_zip_file_zip64.c
     test_write_format_zip_large.c
index 0146e92..557feb5 100644 (file)
@@ -122,6 +122,7 @@ DEFINE_TEST(test_compat_solaris_pax_sparse)
 DEFINE_TEST(test_compat_solaris_tar_acl)
 DEFINE_TEST(test_compat_star_acl_posix1e)
 DEFINE_TEST(test_compat_star_acl_nfs4)
+DEFINE_TEST(test_compat_tar_directory)
 DEFINE_TEST(test_compat_tar_hardlink)
 DEFINE_TEST(test_compat_uudecode)
 DEFINE_TEST(test_compat_uudecode_large)
@@ -188,15 +189,26 @@ DEFINE_TEST(test_read_filter_program)
 DEFINE_TEST(test_read_filter_program_signature)
 DEFINE_TEST(test_read_filter_uudecode)
 DEFINE_TEST(test_read_filter_uudecode_base64)
+DEFINE_TEST(test_read_filter_uudecode_raw)
+DEFINE_TEST(test_read_filter_uudecode_base64_raw)
 DEFINE_TEST(test_read_format_7zip)
 DEFINE_TEST(test_read_format_7zip_bzip2)
 DEFINE_TEST(test_read_format_7zip_from_fd)
 DEFINE_TEST(test_read_format_7zip_copy)
 DEFINE_TEST(test_read_format_7zip_deflate)
+DEFINE_TEST(test_read_format_7zip_zstd)
+DEFINE_TEST(test_read_format_7zip_zstd_solid)
+DEFINE_TEST(test_read_format_7zip_zstd_bcj)
+DEFINE_TEST(test_read_format_7zip_zstd_nobcj)
 DEFINE_TEST(test_read_format_7zip_empty)
 DEFINE_TEST(test_read_format_7zip_lzma1)
 DEFINE_TEST(test_read_format_7zip_lzma2)
+DEFINE_TEST(test_read_format_7zip_zstd_arm)
+DEFINE_TEST(test_read_format_7zip_lzma2_arm)
 DEFINE_TEST(test_read_format_7zip_ppmd)
+DEFINE_TEST(test_read_format_7zip_lzma2_arm64)
+DEFINE_TEST(test_read_format_7zip_deflate_arm64)
+DEFINE_TEST(test_read_format_7zip_win_attrib)
 DEFINE_TEST(test_read_format_7zip_encryption_data)
 DEFINE_TEST(test_read_format_7zip_encryption_header)
 DEFINE_TEST(test_read_format_7zip_encryption_partially)
@@ -274,6 +286,7 @@ DEFINE_TEST(test_read_format_mtree_nomagic_v2_form)
 DEFINE_TEST(test_read_format_mtree_nomagic_v2_netbsd_form)
 DEFINE_TEST(test_read_format_mtree_nonexistent_contents_file)
 DEFINE_TEST(test_read_format_mtree_noprint)
+DEFINE_TEST(test_read_format_mtree_tab)
 DEFINE_TEST(test_read_format_mtree_crash747)
 DEFINE_TEST(test_read_format_pax_bz2)
 DEFINE_TEST(test_read_format_rar5_set_format)
@@ -315,10 +328,15 @@ DEFINE_TEST(test_read_format_rar5_distance_overflow)
 DEFINE_TEST(test_read_format_rar5_nonempty_dir_stream)
 DEFINE_TEST(test_read_format_rar5_fileattr)
 DEFINE_TEST(test_read_format_rar5_different_window_size)
+DEFINE_TEST(test_read_format_rar5_window_buf_and_size_desync)
 DEFINE_TEST(test_read_format_rar5_arm_filter_on_window_boundary)
 DEFINE_TEST(test_read_format_rar5_different_solid_window_size)
 DEFINE_TEST(test_read_format_rar5_different_winsize_on_merge)
 DEFINE_TEST(test_read_format_rar5_block_size_is_too_small)
+DEFINE_TEST(test_read_format_rar5_sfx)
+DEFINE_TEST(test_read_format_rar5_decode_number_out_of_bounds_read)
+DEFINE_TEST(test_read_format_rar5_bad_window_size_in_multiarchive_file)
+DEFINE_TEST(test_read_format_rar5_read_data_block_uninitialized_offset)
 DEFINE_TEST(test_read_format_rar_set_format)
 DEFINE_TEST(test_read_format_rar_basic)
 DEFINE_TEST(test_read_format_rar_subblock)
@@ -344,6 +362,7 @@ DEFINE_TEST(test_read_format_rar_ppmd_use_after_free2)
 DEFINE_TEST(test_read_format_rar_encryption_data)
 DEFINE_TEST(test_read_format_rar_encryption_header)
 DEFINE_TEST(test_read_format_rar_encryption_partially)
+DEFINE_TEST(test_read_format_rar_filter)
 DEFINE_TEST(test_read_format_rar_invalid1)
 DEFINE_TEST(test_read_format_raw)
 DEFINE_TEST(test_read_format_tar)
@@ -352,6 +371,7 @@ DEFINE_TEST(test_read_format_tar_empty_filename)
 DEFINE_TEST(test_read_format_tar_empty_pax)
 DEFINE_TEST(test_read_format_tar_empty_with_gnulabel)
 DEFINE_TEST(test_read_format_tar_filename)
+DEFINE_TEST(test_read_format_tar_invalid_pax_size)
 DEFINE_TEST(test_read_format_tbz)
 DEFINE_TEST(test_read_format_tgz)
 DEFINE_TEST(test_read_format_tlz)
@@ -374,6 +394,10 @@ DEFINE_TEST(test_read_format_zip_bzip2_one_file)
 DEFINE_TEST(test_read_format_zip_bzip2_one_file_blockread)
 DEFINE_TEST(test_read_format_zip_bzip2_multi)
 DEFINE_TEST(test_read_format_zip_bzip2_multi_blockread)
+DEFINE_TEST(test_read_format_zip_zstd_one_file)
+DEFINE_TEST(test_read_format_zip_zstd_one_file_blockread)
+DEFINE_TEST(test_read_format_zip_zstd_multi)
+DEFINE_TEST(test_read_format_zip_zstd_multi_blockread)
 DEFINE_TEST(test_read_format_zip_xz_multi)
 DEFINE_TEST(test_read_format_zip_xz_multi_blockread)
 DEFINE_TEST(test_read_format_zip_ppmd8_crash_1)
@@ -558,6 +582,7 @@ DEFINE_TEST(test_write_format_zip_winzip_aes256_encryption)
 DEFINE_TEST(test_write_format_zip_compression_store)
 DEFINE_TEST(test_write_format_zip_empty)
 DEFINE_TEST(test_write_format_zip_empty_zip64)
+DEFINE_TEST(test_write_format_zip_size_unset)
 DEFINE_TEST(test_write_format_zip_file)
 DEFINE_TEST(test_write_format_zip_file_zip64)
 DEFINE_TEST(test_write_format_zip_large)
index ae4bb5a..6a5b439 100644 (file)
@@ -907,7 +907,7 @@ DEFINE_TEST(test_acl_platform_nfs4)
        assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
 
        for (i = 0; i < acls_dir_cnt; ++i) {
-         sprintf(buff, "dir%d", i);
+         snprintf(buff, sizeof(buff), "dir%d", i);
          archive_entry_set_pathname(ae, buff);
          archive_entry_set_filetype(ae, AE_IFDIR);
          archive_entry_set_perm(ae, 0654);
@@ -960,7 +960,7 @@ DEFINE_TEST(test_acl_platform_nfs4)
 
        /* Verify single-permission dirs on disk. */
        for (i = 0; i < dircnt; ++i) {
-               sprintf(buff, "dir%d", i);
+               snprintf(buff, sizeof(buff), "dir%d", i);
                assertEqualInt(0, stat(buff, &st));
                assertEqualInt(st.st_mtime, 123456 + i);
 #if ARCHIVE_ACL_SUNOS_NFS4
index 60773ad..d7d1a2d 100644 (file)
@@ -32,7 +32,7 @@ DEFINE_TEST(test_archive_api_feature)
 
        /* This is the (hopefully) final versioning API. */
        assertEqualInt(ARCHIVE_VERSION_NUMBER, archive_version_number());
-       sprintf(buff, "libarchive %d.%d.%d",
+       snprintf(buff, sizeof(buff), "libarchive %d.%d.%d",
            archive_version_number() / 1000000,
            (archive_version_number() / 1000) % 1000,
            archive_version_number() % 1000);
index c6864b3..23754a1 100644 (file)
@@ -321,6 +321,11 @@ test_newer_ctime_than_file_mbs(void)
        struct archive_entry *ae;
        struct archive *m;
 
+#if defined(_WIN32) && !defined(__CYGWIN__)
+        skipping("Can't set ctime on Windows");
+        return;
+#endif
+
        if (!assert((m = archive_match_new()) != NULL))
                return;
        if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -435,6 +440,11 @@ test_newer_ctime_than_file_wcs(void)
        struct archive_entry *ae;
        struct archive *m;
 
+#if defined(_WIN32) && !defined(__CYGWIN__)
+        skipping("Can't set ctime on Windows");
+        return;
+#endif
+
        if (!assert((m = archive_match_new()) != NULL))
                return;
        if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -782,6 +792,11 @@ test_older_ctime_than_file_mbs(void)
        struct archive_entry *ae;
        struct archive *m;
 
+#if defined(_WIN32) && !defined(__CYGWIN__)
+        skipping("Can't set ctime on Windows");
+        return;
+#endif
+
        if (!assert((m = archive_match_new()) != NULL))
                return;
        if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -897,6 +912,11 @@ test_older_ctime_than_file_wcs(void)
        struct archive_entry *ae;
        struct archive *m;
 
+#if defined(_WIN32) && !defined(__CYGWIN__)
+        skipping("Can't set ctime on Windows");
+        return;
+#endif
+
        if (!assert((m = archive_match_new()) != NULL))
                return;
        if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -1073,6 +1093,11 @@ test_ctime_between_files_mbs(void)
        struct archive_entry *ae;
        struct archive *m;
 
+#if defined(_WIN32) && !defined(__CYGWIN__)
+        skipping("Can't set ctime on Windows");
+        return;
+#endif
+
        if (!assert((m = archive_match_new()) != NULL))
                return;
        if (!assert((ae = archive_entry_new()) != NULL)) {
@@ -1132,6 +1157,11 @@ test_ctime_between_files_wcs(void)
        struct archive_entry *ae;
        struct archive *m;
 
+#if defined(_WIN32) && !defined(__CYGWIN__)
+        skipping("Can't set ctime on Windows");
+        return;
+#endif
+
        if (!assert((m = archive_match_new()) != NULL))
                return;
        if (!assert((ae = archive_entry_new()) != NULL)) {
index fb5359b..7faf58b 100644 (file)
@@ -847,6 +847,7 @@ test_archive_string_set_get(void)
        assertEqualInt(0, archive_mstring_update_utf8(a, &mstr, "EEEEE---H"));
        check_string(a, &mstr, sc, "EEEEE---H", L"EEEEE---H");
 
+        archive_mstring_clean(&mstr);
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 
 }
index ba8c1d0..49f91ac 100644 (file)
@@ -142,12 +142,6 @@ canAlways(void)
        return 1;
 }
 
-static int
-cannot(void)
-{
-       return 0;
-}
-
 DEFINE_TEST(test_archive_write_add_filter_by_name_b64encode)
 {
        test_filter_by_name("b64encode", ARCHIVE_FILTER_UU, canAlways);
@@ -185,12 +179,12 @@ DEFINE_TEST(test_archive_write_add_filter_by_name_lz4)
 
 DEFINE_TEST(test_archive_write_add_filter_by_name_lzip)
 {
-       test_filter_by_name("lzip", ARCHIVE_FILTER_LZIP, cannot);
+       test_filter_by_name("lzip", ARCHIVE_FILTER_LZIP, canLzip);
 }
 
 DEFINE_TEST(test_archive_write_add_filter_by_name_lzma)
 {
-       test_filter_by_name("lzma", ARCHIVE_FILTER_LZMA, cannot);
+       test_filter_by_name("lzma", ARCHIVE_FILTER_LZMA, canLzma);
 }
 
 DEFINE_TEST(test_archive_write_add_filter_by_name_lzop)
@@ -205,7 +199,7 @@ DEFINE_TEST(test_archive_write_add_filter_by_name_uuencode)
 
 DEFINE_TEST(test_archive_write_add_filter_by_name_xz)
 {
-       test_filter_by_name("xz", ARCHIVE_FILTER_XZ, cannot);
+       test_filter_by_name("xz", ARCHIVE_FILTER_XZ, canXz);
 }
 
 DEFINE_TEST(test_archive_write_add_filter_by_name_zstd)
diff --git a/libarchive/test/test_compat_tar_directory.c b/libarchive/test/test_compat_tar_directory.c
new file mode 100644 (file)
index 0000000..5750db3
--- /dev/null
@@ -0,0 +1,77 @@
+/*-
+ * Copyright (c) 2021 Samanta Navarro
+ * 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$");
+
+/*
+ * Background:  Original tar file format did not use its linkflag to
+ * specify directories.  Instead regular files simply have a slash
+ * appended to their names.  No data blocks follow directories in
+ * archives.  This means that a possibly specified file size must not
+ * be used to determine the amount of data blocks to skip.
+ */
+
+static void
+test_compat_tar_directory_1(void)
+{
+       char name[] = "test_compat_tar_directory_1.tar";
+       struct archive_entry *ae;
+       struct archive *a;
+
+       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(name);
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 10240));
+
+       /* Read first entry, which is a directory in a regular file header. */
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("directory1/", archive_entry_pathname(ae));
+       assertEqualInt(AE_IFDIR, archive_entry_filetype(ae));
+       assertEqualInt(1, archive_entry_size(ae));
+
+       /* Read second entry, which is a ustar directory entry. */
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("directory2/", archive_entry_pathname(ae));
+       assertEqualInt(AE_IFDIR, archive_entry_filetype(ae));
+       assertEqualInt(0, archive_entry_size(ae));
+
+       /* Verify the end-of-archive. */
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+       /* Verify that the format detection worked. */
+       assertEqualInt(archive_filter_code(a, 0), ARCHIVE_FILTER_NONE);
+       assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR);
+
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_compat_tar_directory)
+{
+       test_compat_tar_directory_1();
+}
+
+
diff --git a/libarchive/test/test_compat_tar_directory_1.tar.uu b/libarchive/test/test_compat_tar_directory_1.tar.uu
new file mode 100644 (file)
index 0000000..3e1ead9
--- /dev/null
@@ -0,0 +1,50 @@
+$FreeBSD$
+begin 644 test_compat_tar_directory_1.tar
+M9&ER96-T;W)Y,2\`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#`W,#``,#`P,#`P,``P,#`P,#`P`#`P,#`P,#`P,#`Q
+M`#`P,#`P,#`P,#`P`#`P-C4Q-0`@````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````!D:7)E8W1O<GDR+P``````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````,#`P,#<P,``P,#`P,#`P`#`P
+M,#`P,#``,#`P,#`P,#`P,#``,#`P,#`P,#`P,#``,#`V-3$U`"``````````
+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````````````````````````````````````````````````````````````
+7````````````````````````````````
+`
+end
index b2654c4..8af4c2f 100644 (file)
@@ -124,10 +124,9 @@ test_fuzz(const struct files *filesets)
                                newraw = realloc(rawimage, oldsize + size);
                                if (!assert(newraw != NULL))
                                {
-                                       free(rawimage);
-                                       rawimage = NULL;
                                        free(tmp);
-                                       continue;
+                                       size = 0;
+                                       break;
                                }
                                rawimage = newraw;
                                memcpy(rawimage + oldsize, tmp, size);
@@ -428,6 +427,10 @@ DEFINE_TEST(test_fuzz_tar)
                NULL
        };
 #endif
+       static const char *fileset11[] = {
+               "test_compat_tar_directory_1.tar",
+               NULL
+       };
        static const struct files filesets[] = {
                {0, fileset1}, /* Exercise bzip2 decompressor. */
                {1, fileset1},
@@ -444,6 +447,7 @@ DEFINE_TEST(test_fuzz_tar)
 #if HAVE_ZSTD_H && HAVE_LIBZSTD
                {0, fileset10}, /* Exercise zstd decompressor. */
 #endif
+               {0, fileset11},
                {1, NULL}
        };
        test_fuzz(filesets);
index 418020d..a86bcc0 100644 (file)
@@ -49,7 +49,6 @@ DEFINE_TEST(test_read_data_large)
        char tmpfilename[] = "largefile";
        int tmpfilefd;
        FILE *f;
-       unsigned int i;
        size_t used;
 
        /* Create a new archive in memory. */
@@ -64,8 +63,7 @@ DEFINE_TEST(test_read_data_large)
        assert((ae = archive_entry_new()) != NULL);
        archive_entry_copy_pathname(ae, "file");
        archive_entry_set_mode(ae, S_IFREG | 0755);
-       for (i = 0; i < sizeof(buff2); i++)
-               buff2[i] = (unsigned char)rand();
+       fill_with_pseudorandom_data(buff2, sizeof(buff2));
        archive_entry_set_size(ae, sizeof(buff2));
        assertA(0 == archive_write_header(a, ae));
        archive_entry_free(ae);
index bca3ce5..ad99acf 100644 (file)
@@ -1608,6 +1608,12 @@ test_parent(void)
        int file_count;
        int match_count;
        int r;
+#if defined(O_PATH) || defined(O_SEARCH) || \
+ (defined(__FreeBSD__) && defined(O_EXEC))
+       const char *ignore_traversals_test4;
+
+       ignore_traversals_test4 = getenv("IGNORE_TRAVERSALS_TEST4");
+#endif
 
        assertMakeDir("lock", 0311);
        assertMakeDir("lock/dir1", 0755);
@@ -1784,7 +1790,8 @@ test_parent(void)
        if (r == ARCHIVE_FAILED) {
 #if defined(O_PATH) || defined(O_SEARCH) || \
  (defined(__FreeBSD__) && defined(O_EXEC))
-               assertEqualIntA(a, ARCHIVE_OK, r);
+               if (ignore_traversals_test4 == NULL)
+                       assertEqualIntA(a, ARCHIVE_OK, r);
 #endif
                /* Close the disk object. */
                archive_read_close(a);
index 2b1a21e..da0f226 100644 (file)
@@ -59,8 +59,7 @@ DEFINE_TEST(test_read_extract)
        assert((ae = archive_entry_new()) != NULL);
        archive_entry_copy_pathname(ae, "file");
        archive_entry_set_mode(ae, S_IFREG | 0755);
-       for (i = 0; i < FILE_BUFF_SIZE; i++)
-               file_buff[i] = (unsigned char)rand();
+       fill_with_pseudorandom_data(file_buff, FILE_BUFF_SIZE);
        archive_entry_set_size(ae, FILE_BUFF_SIZE);
        assertA(0 == archive_write_header(a, ae));
        assertA(FILE_BUFF_SIZE == archive_write_data(a, file_buff, FILE_BUFF_SIZE));
diff --git a/libarchive/test/test_read_filter_uudecode_base64_raw.uu b/libarchive/test/test_read_filter_uudecode_base64_raw.uu
new file mode 100644 (file)
index 0000000..b4ddfb0
--- /dev/null
@@ -0,0 +1,11 @@
+begin-base64 600 LICENSE2.txt
+VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIOKAnEFTIElT4oCdLCBXSVRIT1VUIFdBUlJBTlRZIE9G
+IEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg
+VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJ
+Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
+QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN
+QUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
+LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
+TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBT
+T0ZUV0FSRS4K
+====
diff --git a/libarchive/test/test_read_filter_uudecode_raw.c b/libarchive/test/test_read_filter_uudecode_raw.c
new file mode 100644 (file)
index 0000000..6f02dc5
--- /dev/null
@@ -0,0 +1,67 @@
+/*-
+ * Copyright (c) 2023 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"
+
+DEFINE_TEST(test_read_filter_uudecode_raw)
+{
+        struct archive_entry *ae;
+        struct archive *a;
+
+       const char *name = "test_read_filter_uudecode_raw.uu";
+
+        assert((a = archive_read_new()) != NULL);
+        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
+        copy_reference_file(name);
+        assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 670));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("LICENSE.txt", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFREG | 0755), archive_entry_mode(ae));
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_filter_uudecode_base64_raw)
+{
+        struct archive_entry *ae;
+        struct archive *a;
+
+       const char *name = "test_read_filter_uudecode_base64_raw.uu";
+
+        assert((a = archive_read_new()) != NULL);
+        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
+        copy_reference_file(name);
+        assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 670));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("LICENSE2.txt", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFREG | 0600), archive_entry_mode(ae));
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/libarchive/test/test_read_filter_uudecode_raw.uu b/libarchive/test/test_read_filter_uudecode_raw.uu
new file mode 100644 (file)
index 0000000..8a5f8b5
--- /dev/null
@@ -0,0 +1,14 @@
+begin 755 LICENSE.txt
+M5$A%(%-/1E1705)%($E3(%!23U9)1$5$(.*`G$%3($E3XH"=+"!7251(3U54
+M(%=!4E)!3E19($]&($%.62!+24Y$+"!%6%!215-3($]2($E-4$Q)140L($E.
+M0TQ51$E.1R!"550@3D]4($Q)34E4140@5$\@5$A%(%=!4E)!3E1)15,@3T8@
+M34520TA!3E1!0DE,2519+"!&251.15-3($9/4B!!(%!!4E1)0U5,05(@4%52
+M4$]312!!3D0@3D].24Y&4DE.1T5-14Y4+B!)3B!.3R!%5D5.5"!32$%,3"!4
+M2$4@05542$]24R!/4B!#3U!94DE'2%0@2$],1$524R!"12!,24%"3$4@1D]2
+M($%.62!#3$%)32P@1$%-04=%4R!/4B!/5$A%4B!,24%"24Q)5%DL(%=(151(
+M15(@24X@04X@04-424].($]&($-/3E1204-4+"!43U)4($]2($]42$525TE3
+M12P@05))4TE.1R!&4D]-+"!/550@3T8@3U(@24X@0T].3D5#5$E/3B!7251(
+M(%1(12!33T945T%212!/4B!42$4@55-%($]2($]42$52($1%04Q)3D=3($E.
+/(%1(12!33T945T%212X*
+`
+end
index 3c72595..1249963 100644 (file)
@@ -30,6 +30,9 @@ __FBSDID("$FreeBSD");
 #define        open            _open
 #endif
 
+#define __LIBARCHIVE_BUILD
+#include <archive_crc32.h>
+
 /*
  * Extract a non-encoded file.
  * The header of the 7z archive files is not encoded.
@@ -58,7 +61,7 @@ test_copy(int use_open_fd)
 
        /* Verify regular file1. */
        assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-       assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+       assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
        assertEqualString("file1", archive_entry_pathname(ae));
        assertEqualInt(86401, archive_entry_mtime(ae));
        assertEqualInt(60, archive_entry_size(ae));
@@ -284,6 +287,141 @@ test_extract_all_files(const char *refname)
 }
 
 /*
+ * Extract multi files.
+ * Like test_extract_all_files, but with zstandard compression.
+ */
+static void
+test_extract_all_files_zstd(const char *refname)
+{
+       struct archive_entry *ae;
+       struct archive *a;
+       char buff[128];
+
+       extract_reference_file(refname);
+       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));
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_read_open_filename(a, refname, 10240));
+
+       /* Verify directory dir1. Note that this comes before the dir1/file1 entry in recent versions of 7-Zip. */
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae));
+       assertEqualString("dir1/", archive_entry_pathname(ae));
+       assertEqualInt(2764801, archive_entry_mtime(ae));
+       assertEqualInt(archive_entry_is_encrypted(ae), 0);
+       assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+
+       /* Verify regular file1. */
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+       assertEqualString("dir1/file1", archive_entry_pathname(ae));
+       assertEqualInt(86401, archive_entry_mtime(ae));
+       assertEqualInt(13, archive_entry_size(ae));
+       assertEqualInt(archive_entry_is_encrypted(ae), 0);
+       assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+       assertEqualInt(13, archive_read_data(a, buff, sizeof(buff)));
+       assertEqualMem(buff, "aaaaaaaaaaaa\n", 13);
+
+       /* Verify regular file2. */
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+       assertEqualString("file2", archive_entry_pathname(ae));
+       assertEqualInt(86401, archive_entry_mtime(ae));
+       assertEqualInt(26, archive_entry_size(ae));
+       assertEqualInt(archive_entry_is_encrypted(ae), 0);
+       assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+       assertEqualInt(26, archive_read_data(a, buff, sizeof(buff)));
+       assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\n", 26);
+
+       /* Verify regular file3. */
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+       assertEqualString("file3", archive_entry_pathname(ae));
+       assertEqualInt(86401, archive_entry_mtime(ae));
+       assertEqualInt(39, archive_entry_size(ae));
+       assertEqualInt(archive_entry_is_encrypted(ae), 0);
+       assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+       assertEqualInt(39, archive_read_data(a, buff, sizeof(buff)));
+       assertEqualMem(buff, "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\n", 39);
+
+       /* Verify regular file4. */
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+       assertEqualString("file4", archive_entry_pathname(ae));
+       assertEqualInt(86401, archive_entry_mtime(ae));
+       assertEqualInt(52, archive_entry_size(ae));
+       assertEqualInt(archive_entry_is_encrypted(ae), 0);
+       assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+       assertEqualInt(52, archive_read_data(a, buff, sizeof(buff)));
+       assertEqualMem(buff,
+           "aaaaaaaaaaaa\nbbbbbbbbbbbb\ncccccccccccc\ndddddddddddd\n", 52);
+
+       assertEqualInt(5, archive_file_count(a));
+
+       /* End of archive. */
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+       /* Verify archive format. */
+       assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
+       assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a));
+
+       /* Close the archive. */
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+/*
+ * Extract file from an archives using ZSTD compression with and without BCJ.
+ */
+static void
+test_extract_file_zstd_bcj_nobjc(const char *refname)
+{
+       struct archive_entry *ae;
+       struct archive *a;
+       char buff[4096];
+       uint32_t computed_crc = 0;
+       uint32_t expected_crc = 0xbd66eebc;
+
+       extract_reference_file(refname);
+       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));
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_read_open_filename(a, refname, 10240));
+
+       /* Verify regular file: hw. */
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualInt((AE_IFREG | 0775), archive_entry_mode(ae));
+       assertEqualString("hw", archive_entry_pathname(ae));
+       assertEqualInt(1685913368, archive_entry_mtime(ae));
+       assertEqualInt(15952, archive_entry_size(ae));
+       assertEqualInt(archive_entry_is_encrypted(ae), 0);
+       assertEqualIntA(a, archive_read_has_encrypted_entries(a), 0);
+
+       for (;;) {
+               la_ssize_t bytes_read = archive_read_data(a, buff, sizeof(buff));
+               assert(bytes_read >= 0);
+               if (bytes_read == 0) break;
+               computed_crc = crc32(computed_crc, buff, bytes_read);
+       }
+       assertEqualInt(computed_crc, expected_crc);
+
+       assertEqualInt(1, archive_file_count(a));
+
+       /* End of archive. */
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+       /* Verify archive format. */
+       assertEqualIntA(a, ARCHIVE_FILTER_NONE, archive_filter_code(a, 0));
+       assertEqualIntA(a, ARCHIVE_FORMAT_7ZIP, archive_format(a));
+
+       /* Close the archive. */
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+/*
  * Extract last file.
  * The header of the 7z archive files is encoded with LZMA.
  */
@@ -627,7 +765,7 @@ test_ppmd(void)
 
        /* Verify regular file1. */
        assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-       assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+       assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
        assertEqualString("ppmd_test.txt", archive_entry_pathname(ae));
        assertEqualInt(1322464589, archive_entry_mtime(ae));
        assertEqualInt(102400, archive_entry_size(ae));
@@ -782,6 +920,74 @@ DEFINE_TEST(test_read_format_7zip_deflate)
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
 
+DEFINE_TEST(test_read_format_7zip_zstd)
+{
+       struct archive *a;
+
+       assert((a = archive_read_new()) != NULL);
+
+       /* Extracting with libzstd */
+       if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+               skipping(
+                   "7zip:zstd decoding is not supported on this platform");
+       } else {
+               test_extract_all_files_zstd("test_read_format_7zip_zstd.7z");
+       }
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_zstd_solid)
+{
+       struct archive *a;
+
+       assert((a = archive_read_new()) != NULL);
+
+       /* Extracting with libzstd */
+       if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+               skipping(
+                   "7zip:zstd decoding is not supported on this platform");
+       } else {
+               test_extract_all_files_zstd("test_read_format_7zip_solid_zstd.7z");
+       }
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_zstd_bcj)
+{
+       struct archive *a;
+
+       assert((a = archive_read_new()) != NULL);
+
+       /* Extracting with libzstd */
+       if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+               skipping(
+                   "7zip:zstd decoding is not supported on this platform");
+       } else {
+               test_extract_file_zstd_bcj_nobjc("test_read_format_7zip_zstd_bcj.7z");
+       }
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_zstd_nobcj)
+{
+       struct archive *a;
+
+       assert((a = archive_read_new()) != NULL);
+
+       /* Extracting with libzstd */
+       if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+               skipping(
+                   "7zip:zstd decoding is not supported on this platform");
+       } else {
+               test_extract_file_zstd_bcj_nobjc("test_read_format_7zip_zstd_nobcj.7z");
+       }
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
 DEFINE_TEST(test_read_format_7zip_empty)
 {
        test_empty_archive();
@@ -832,7 +1038,223 @@ DEFINE_TEST(test_read_format_7zip_lzma2)
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
 
+static void
+test_arm_filter(const char *refname)
+{
+       struct archive *a;
+       struct archive_entry *ae;
+       char buff[7804];
+       uint32_t computed_crc = 0;
+       uint32_t expected_crc = 0x355ec4e1;
+
+       assert((a = archive_read_new()) != NULL);
+
+       extract_reference_file(refname);
+
+       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));
+
+       assertEqualIntA(a, ARCHIVE_OK,
+               archive_read_open_filename(a, refname, 10240));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualInt((AE_IFREG | 0755), archive_entry_mode(ae));
+       assertEqualString("hw-gnueabihf", archive_entry_pathname(ae));
+       assertEqualInt(sizeof(buff), archive_entry_size(ae));
+       assertEqualInt(sizeof(buff), archive_read_data(a, buff, sizeof(buff)));
+       computed_crc = crc32(computed_crc, buff, sizeof(buff));
+       assertEqualInt(computed_crc, expected_crc);
+
+       assertEqualInt(1, archive_file_count(a));
+
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_zstd_arm)
+{
+       struct archive *a;
+
+       assert((a = archive_read_new()) != NULL);
+
+       if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+               skipping(
+                   "7zip:zstd decoding is not supported on this platform");
+       } else {
+               test_arm_filter("test_read_format_7zip_zstd_arm.7z");
+       }
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_lzma2_arm)
+{
+       struct archive *a;
+
+       assert((a = archive_read_new()) != NULL);
+
+       if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
+               skipping(
+                   "7zip:lzma decoding is not supported on this platform");
+       } else {
+               test_arm_filter("test_read_format_7zip_lzma2_arm.7z");
+       }
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
 DEFINE_TEST(test_read_format_7zip_ppmd)
 {
        test_ppmd();
 }
+
+static void
+test_arm64_filter(const char *refname)
+{
+       struct archive *a;
+       struct archive_entry *ae;
+       char buff[70368];
+       uint32_t computed_crc = 0;
+       uint32_t expected_crc = 0xde97d594;
+
+       assert((a = archive_read_new()) != NULL);
+
+       extract_reference_file(refname);
+
+       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));
+
+       assertEqualIntA(a, ARCHIVE_OK,
+               archive_read_open_filename(a, refname, 10240));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualInt((AE_IFREG | 0775), archive_entry_mode(ae));
+       assertEqualString("hw-arm64", archive_entry_pathname(ae));
+       assertEqualInt(sizeof(buff), archive_entry_size(ae));
+       assertEqualInt(sizeof(buff), archive_read_data(a, buff, sizeof(buff)));
+       computed_crc = crc32(computed_crc, buff, sizeof(buff));
+       assertEqualInt(computed_crc, expected_crc);
+
+       assertEqualInt(1, archive_file_count(a));
+
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_lzma2_arm64)
+{
+#ifdef HAVE_LZMA_FILTER_ARM64
+       struct archive *a;
+
+       assert((a = archive_read_new()) != NULL);
+
+       if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
+               skipping(
+                   "7zip:lzma decoding is not supported on this platform");
+       } else {
+               test_arm64_filter("test_read_format_7zip_lzma2_arm64.7z");
+       }
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#else
+       skipping("This version of liblzma does not support LZMA_FILTER_ARM64");
+#endif
+}
+
+DEFINE_TEST(test_read_format_7zip_deflate_arm64)
+{
+       struct archive *a;
+
+       assert((a = archive_read_new()) != NULL);
+
+       if (ARCHIVE_OK != archive_read_support_filter_gzip(a)) {
+               skipping(
+                   "7zip:deflate decoding is not supported on this platform");
+       } else {
+               test_arm64_filter("test_read_format_7zip_deflate_arm64.7z");
+       }
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_7zip_win_attrib)
+{
+       struct archive *a;
+
+       assert((a = archive_read_new()) != NULL);
+
+       if (ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
+               skipping(
+                   "7zip:lzma decoding is not supported on this platform");
+               assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+               return;
+       }
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+
+       // This archive has four files and four directories:
+       // * hidden directory
+       // * readonly directory
+       // * regular directory
+       // * system directory
+       // * regular "archive" file
+       // * hidden file
+       // * readonly file
+       // * system file
+       const char *refname = "test_read_format_7zip_win_attrib.7z";
+       extract_reference_file(refname);
+
+       assertEqualIntA(a, ARCHIVE_OK,
+               archive_read_open_filename(a, refname, 10240));
+
+       struct archive_entry *ae;
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("hidden_dir/", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae));
+       assertEqualString("hidden", archive_entry_fflags_text(ae));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("readonly_dir/", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFDIR | 0555), archive_entry_mode(ae));
+       assertEqualString("rdonly", archive_entry_fflags_text(ae));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("regular_dir/", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae));
+       assertEqualString(NULL, archive_entry_fflags_text(ae));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("system_dir/", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFDIR | 0755), archive_entry_mode(ae));
+       assertEqualString("system", archive_entry_fflags_text(ae));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("archive_file.txt", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+       assertEqualString(NULL, archive_entry_fflags_text(ae));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("hidden_file.txt", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+       assertEqualString("hidden", archive_entry_fflags_text(ae));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("readonly_file.txt", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFREG | 0444), archive_entry_mode(ae));
+       assertEqualString("rdonly", archive_entry_fflags_text(ae));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("system_file.txt", archive_entry_pathname(ae));
+       assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
+       assertEqualString("system", archive_entry_fflags_text(ae));
+
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/libarchive/test/test_read_format_7zip_deflate_arm64.7z.uu b/libarchive/test/test_read_format_7zip_deflate_arm64.7z.uu
new file mode 100644 (file)
index 0000000..e516ca5
--- /dev/null
@@ -0,0 +1,64 @@
+begin 664 libarchive/test/test_read_format_7zip_deflate_arm64.7z
+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
+3`#)5M-E?M]D!%08!`""`_8$`````
+`
+end
diff --git a/libarchive/test/test_read_format_7zip_lzma2_arm.7z.uu b/libarchive/test/test_read_format_7zip_lzma2_arm.7z.uu
new file mode 100644 (file)
index 0000000..5a6ade0
--- /dev/null
@@ -0,0 +1,50 @@
+begin 664 test_read_format_7zip_lzma2_arm.7z
+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
+D80!B`&D`:`!F````&0`4"@$```-.&5"<V0$5!@$`((#M@0``
+`
+end
diff --git a/libarchive/test/test_read_format_7zip_lzma2_arm64.7z.uu b/libarchive/test/test_read_format_7zip_lzma2_arm64.7z.uu
new file mode 100644 (file)
index 0000000..3792a18
--- /dev/null
@@ -0,0 +1,54 @@
+begin 664 libarchive/test/test_read_format_7zip_lzma2_arm64.7z
+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
+C`'(`;0`V`#0````9`!0*`0`R5;397[?9`14&`0`@@/V!````
+`
+end
index 7f105d1..b8e8d9e 100644 (file)
@@ -49,7 +49,7 @@ DEFINE_TEST(test_read_format_7zip_packinfo_digests)
                /* Verify regular file1. */
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_next_header(a, &ae));
-               assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+               assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
                assertEqualString("a.txt", archive_entry_pathname(ae));
                assertEqualInt(1576808819, archive_entry_mtime(ae));
                assertEqualInt(4, archive_entry_size(ae));
@@ -61,7 +61,7 @@ DEFINE_TEST(test_read_format_7zip_packinfo_digests)
                /* Verify regular file2. */
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_next_header(a, &ae));
-               assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+               assertEqualInt((AE_IFREG | 0644), archive_entry_mode(ae));
                assertEqualString("b.txt", archive_entry_pathname(ae));
                assertEqualInt(1576808819, archive_entry_mtime(ae));
                assertEqualInt(4, archive_entry_size(ae));
diff --git a/libarchive/test/test_read_format_7zip_solid_zstd.7z.uu b/libarchive/test/test_read_format_7zip_solid_zstd.7z.uu
new file mode 100644 (file)
index 0000000..3bffb98
--- /dev/null
@@ -0,0 +1,9 @@
+begin 664 test_read_format_7zip_solid_zstd.7z
+M-WJ\KR<<``1&(FS)O@`````````B`````````$V+D*,HM2_]`$@!``!0*DT8
+M!````"$````HM2_]((+%```P80IB8V0*!X"P/JZA4J4;TS.X,9C'`#4``($S
+M!ZX/T5NC)*"0H'?;G=XO-Y<-`+"F*K87M`OOZ1+1#31#M/`2YN,FY:(1).I)
+M(B(+;9$W4?0*8=3V5N;BSZ)(0UGD/'LOSN"0&#DNX!A2*5\#&8IP$1G=7-]@
+MP\EE$]Z;/%6NU^\_,X:MD?57P#S>.+BINH?CHRX,::[Q5P*!X\DH````%P8V
+?`0F`B``'"P$``2,#`0$%70`0```,@-H*`9/CZP``````
+`
+end
diff --git a/libarchive/test/test_read_format_7zip_win_attrib.7z.uu b/libarchive/test/test_read_format_7zip_win_attrib.7z.uu
new file mode 100644 (file)
index 0000000..dc7495b
--- /dev/null
@@ -0,0 +1,10 @@
+begin 644 test_read_format_7zip_win_attrib.7z
+M-WJ\KR<<``0:MZ25^0`````````B`````````,/QN>$!`!IA<F-H:79E:&ED
+M9&5N<F5A9&]N;'ES>7-T96T```"!,P>N#\_\\&P/Z^J<OS8]_GH-_C9=&O:;
+MN?AF5PM%@/8R"MH"PK!D-+92R@HB57B\_G7B9D`HLH<G4Z@!).&WAAA(R4U?
+M%0%=EB_VM=2[WZJHK$/PHCG(E(Y#O[W'JQD2%>%U\S6&7C"[<$<2GL2\B,**
+MW`0[F2;R)EO2:N)4RB6G.3+R6%97BQ]K"X),-'`E&./R#`2A\R&D1#U8FUC&
+MANR65$7S:?$CR7DS8<)L'MR%.5Y)T-;62DU\S8W?$4=U2972R-0]5J81R3E/
+M\K&`%O\H:/`E4``7!A\!"8#:``<+`0`!(P,!`05=`!````R!C@H!`M-R5@``
+`
+end
diff --git a/libarchive/test/test_read_format_7zip_zstd.7z.uu b/libarchive/test/test_read_format_7zip_zstd.7z.uu
new file mode 100644 (file)
index 0000000..acd49c4
--- /dev/null
@@ -0,0 +1,12 @@
+begin 664 test_read_format_7zip_zstd.7z
+M-WJ\KR<<``2QPP_C,`$````````C``````````+H!E<HM2_]`$@!``!0*DT8
+M!````!$````HM2_](`U%```080H!``80`BBU+_T`2`$``%`J31@$````%```
+M`"BU+_T@&ET``"!A"F(*`@#`H`'8*+4O_0!(`0``4"I-&`0````6````*+4O
+M_2`G;0``,&$*8@IC"@,4``@8V2BU+_T`2`$``%`J31@$````&0```"BU+_T@
+M-(4``$!A"F(*8PID"@04``@8(QL``($S!ZYMP-,)%[KY0NUS!EQ9<T<AN:R"
+M7Z^`KZ24FV4LJ?"A)\MX&!"$=31!F6U\W/D!@*G'-=Z@#"&#>8R#*L]U;J=*
+M@K`Q6]^1F4MZF33TE2LJK8X@%5MY%P.#1*EM98=_,9"?K'$*_A0YVC)]1ML=
+MK-5-,X82B;/_L`I&FQ!5HP#H````%P:`J`$)@(@`!PL!``$C`P$!!5T`$```
++#(#Z"@%\$`,4````
+`
+end
diff --git a/libarchive/test/test_read_format_7zip_zstd_arm.7z.uu b/libarchive/test/test_read_format_7zip_zstd_arm.7z.uu
new file mode 100644 (file)
index 0000000..770e99b
--- /dev/null
@@ -0,0 +1,61 @@
+begin 644 test_read_format_7zip_zstd_arm.7z
+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
+166S@9)S9`14&`0`@@.V!````
+`
+end
diff --git a/libarchive/test/test_read_format_7zip_zstd_bcj.7z.uu b/libarchive/test/test_read_format_7zip_zstd_bcj.7z.uu
new file mode 100644 (file)
index 0000000..2a75db8
--- /dev/null
@@ -0,0 +1,56 @@
+begin 664 test_read_format_7zip_zstd_bcj.7z
+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
+@=P```!D$`````!0*`0``'';'*9?9`14&`0`@@/V!````
+`
+end
diff --git a/libarchive/test/test_read_format_7zip_zstd_nobcj.7z.uu b/libarchive/test/test_read_format_7zip_zstd_nobcj.7z.uu
new file mode 100644 (file)
index 0000000..c6fed0b
--- /dev/null
@@ -0,0 +1,56 @@
+begin 664 test_read_format_7zip_zstd_nobcj.7z
+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
+3```<=L<IE]D!%08!`""`_8$`````
+`
+end
index 41d3257..40c6586 100644 (file)
@@ -789,6 +789,7 @@ DEFINE_TEST(test_read_format_mtree_nonexistent_contents_file)
        assertEqualInt(ARCHIVE_OK, archive_read_close(a));
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
+
 /*
  * Check mtree file with non-printable ascii characters
  */
@@ -814,3 +815,32 @@ DEFINE_TEST(test_read_format_mtree_noprint)
        assertEqualInt(ARCHIVE_OK, archive_read_close(a));
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
+
+/*
+ * Check mtree file with tab characters, which are supported but not printable
+ */
+DEFINE_TEST(test_read_format_mtree_tab)
+{
+       static char archive[] =
+           "#mtree\n"
+           "\ta\ttype=file\n";
+       struct archive_entry *ae;
+       struct archive *a;
+
+       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));
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_read_open_memory(a, archive, sizeof(archive)));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString(archive_entry_pathname(ae), "a");
+       assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+
+       assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+       assertEqualInt(1, archive_file_count(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
index f91521e..34f33cc 100644 (file)
@@ -168,7 +168,7 @@ DEFINE_TEST(test_read_format_rar5_compressed)
        assertEqualInt(DATA_SIZE, archive_entry_size(ae));
        assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
        assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
-       verify_data(buff, 0, DATA_SIZE);
+       assertA(1 == verify_data(buff, 0, DATA_SIZE));
 
        EPILOGUE();
 }
@@ -187,25 +187,25 @@ DEFINE_TEST(test_read_format_rar5_multiple_files)
        assertEqualString("test1.bin", archive_entry_pathname(ae));
        assertEqualInt(DATA_SIZE, archive_entry_size(ae));
        assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
-       assertA(verify_data(buff, 1, DATA_SIZE));
+       assertA(1 == verify_data(buff, 1, DATA_SIZE));
 
        assertA(0 == archive_read_next_header(a, &ae));
        assertEqualString("test2.bin", archive_entry_pathname(ae));
        assertEqualInt(DATA_SIZE, archive_entry_size(ae));
        assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
-       assertA(verify_data(buff, 2, DATA_SIZE));
+       assertA(1 == verify_data(buff, 2, DATA_SIZE));
 
        assertA(0 == archive_read_next_header(a, &ae));
        assertEqualString("test3.bin", archive_entry_pathname(ae));
        assertEqualInt(DATA_SIZE, archive_entry_size(ae));
        assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
-       assertA(verify_data(buff, 3, DATA_SIZE));
+       assertA(1 == verify_data(buff, 3, DATA_SIZE));
 
        assertA(0 == archive_read_next_header(a, &ae));
        assertEqualString("test4.bin", archive_entry_pathname(ae));
        assertEqualInt(DATA_SIZE, archive_entry_size(ae));
        assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
-       assertA(verify_data(buff, 4, DATA_SIZE));
+       assertA(1 == verify_data(buff, 4, DATA_SIZE));
 
        /* There should be no more files in this archive. */
 
@@ -230,25 +230,25 @@ DEFINE_TEST(test_read_format_rar5_multiple_files_solid)
        assertEqualString("test1.bin", archive_entry_pathname(ae));
        assertEqualInt(DATA_SIZE, archive_entry_size(ae));
        assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
-       assertA(verify_data(buff, 1, DATA_SIZE));
+       assertA(1 == verify_data(buff, 1, DATA_SIZE));
 
        assertA(0 == archive_read_next_header(a, &ae));
        assertEqualString("test2.bin", archive_entry_pathname(ae));
        assertEqualInt(DATA_SIZE, archive_entry_size(ae));
        assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
-       assertA(verify_data(buff, 2, DATA_SIZE));
+       assertA(1 == verify_data(buff, 2, DATA_SIZE));
 
        assertA(0 == archive_read_next_header(a, &ae));
        assertEqualString("test3.bin", archive_entry_pathname(ae));
        assertEqualInt(DATA_SIZE, archive_entry_size(ae));
        assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
-       assertA(verify_data(buff, 3, DATA_SIZE));
+       assertA(1 == verify_data(buff, 3, DATA_SIZE));
 
        assertA(0 == archive_read_next_header(a, &ae));
        assertEqualString("test4.bin", archive_entry_pathname(ae));
        assertEqualInt(DATA_SIZE, archive_entry_size(ae));
        assertA(DATA_SIZE == archive_read_data(a, buff, DATA_SIZE));
-       assertA(verify_data(buff, 4, DATA_SIZE));
+       assertA(1 == verify_data(buff, 4, DATA_SIZE));
 
        assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae));
        EPILOGUE();
@@ -1206,6 +1206,23 @@ DEFINE_TEST(test_read_format_rar5_different_window_size)
        EPILOGUE();
 }
 
+DEFINE_TEST(test_read_format_rar5_window_buf_and_size_desync)
+{
+       /* oss fuzz 30442 */
+
+       char buf[4096];
+       PROLOGUE("test_read_format_rar5_window_buf_and_size_desync.rar");
+
+       /* Return codes of those calls are ignored, because this sample file
+        * is invalid. However, the unpacker shouldn't produce any SIGSEGV
+        * errors during processing. */
+
+       (void) archive_read_next_header(a, &ae);
+       while(0 < archive_read_data(a, buf, 46)) {}
+
+       EPILOGUE();
+}
+
 DEFINE_TEST(test_read_format_rar5_arm_filter_on_window_boundary)
 {
        char buf[4096];
@@ -1271,3 +1288,87 @@ DEFINE_TEST(test_read_format_rar5_block_size_is_too_small)
 
        EPILOGUE();
 }
+
+DEFINE_TEST(test_read_format_rar5_sfx)
+{
+       struct archive *a;
+       struct archive_entry *ae;
+       int bs = 10240;
+       char buff[32];
+       const char reffile[] = "test_read_format_rar5_sfx.exe";
+       const char test_txt[] = "123";
+       int size = sizeof(test_txt) - 1;
+
+       extract_reference_file(reffile);
+       assert((a = archive_read_new()) != NULL);
+       assertA(0 == archive_read_support_filter_all(a));
+       assertA(0 == archive_read_support_format_all(a));
+       assertA(0 == archive_read_open_filename(a, reffile, bs));
+
+       assertA(0 == archive_read_next_header(a, &ae));
+       assertEqualString("test.txt.txt", archive_entry_pathname(ae));
+
+       assertA(size == archive_read_data(a, buff, size));
+       assertEqualMem(buff, test_txt, size);
+       
+       EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_decode_number_out_of_bounds_read)
+{
+       /* oss fuzz 30448 */
+
+       char buf[4096];
+       PROLOGUE("test_read_format_rar5_decode_number_out_of_bounds_read.rar");
+
+       /* Return codes of those calls are ignored, because this sample file
+        * is invalid. However, the unpacker shouldn't produce any SIGSEGV
+        * errors during processing. */
+
+       (void) archive_read_next_header(a, &ae);
+       while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+       EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_bad_window_size_in_multiarchive_file)
+{
+       /* oss fuzz 30459 */
+
+       char buf[4096];
+       PROLOGUE("test_read_format_rar5_bad_window_sz_in_mltarc_file.rar");
+
+       /* This file is damaged, so those functions should return failure.
+        * Additionally, SIGSEGV shouldn't be raised during execution
+        * of those functions. */
+
+       (void) archive_read_next_header(a, &ae);
+       while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+       (void) archive_read_next_header(a, &ae);
+       while(0 < archive_read_data(a, buf, sizeof(buf))) {}
+
+       EPILOGUE();
+}
+
+DEFINE_TEST(test_read_format_rar5_read_data_block_uninitialized_offset)
+{
+       const void *buf;
+       size_t size;
+       la_int64_t offset;
+
+       PROLOGUE("test_read_format_rar5_compressed.rar");
+       assertA(0 == archive_read_next_header(a, &ae));
+
+       /* A real code may pass a pointer to an uninitialized variable as an offset
+        * output argument. Here we want to check this situation. But because
+        * relying on a value of an uninitialized variable in a test is not a good
+        * idea, let's pretend that 0xdeadbeef is a random value of the
+        * uninitialized variable. */
+       offset = 0xdeadbeef;
+       assertEqualInt(ARCHIVE_OK, archive_read_data_block(a, &buf, &size, &offset));
+       /* The test archive doesn't contain a sparse file. And because of that, here
+        * we assume that the first returned offset should be 0. */
+       assertEqualInt(0, offset);
+
+       EPILOGUE();
+}
diff --git a/libarchive/test/test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu b/libarchive/test/test_read_format_rar5_bad_window_sz_in_mltarc_file.rar.uu
new file mode 100644 (file)
index 0000000..7684bc1
--- /dev/null
@@ -0,0 +1,7 @@
+begin 644 test_read_format_rar5_bad_window_size_in_multiarchive_file.rar
+M4F%R(1H'`0`]/-[E`@$`_R`@1#[Z5P("`PL`("`@@"(`"?\@("#___\@("`@
+M("`@("`@("`@4X`J]`,"YR(#$($@("`@``$@("`@@<L0("`@("`@("`@("`@
+M("`@(""LCTJA`P$%`B`@`2!3@"KT`P+G(@,@("`@_P,!!B`@(/___R`@(('+
+5$"`OX2`@[.SL[.S_("`@("`@("`@
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_decode_number_out_of_bounds_read.rar.uu b/libarchive/test/test_read_format_rar5_decode_number_out_of_bounds_read.rar.uu
new file mode 100644 (file)
index 0000000..34d8ce3
--- /dev/null
@@ -0,0 +1,10 @@
+begin 644 test_read_format_rar5_decode_number_out_of_bounds_read.rar
+M4F%R(1H'`0!3@"KT`P+G(@(0("`@@`L!!"`@("`@(($D_[BJ2"!::7!)210V
+M+0#ZF#)Q!`+>YPW_("`@("``_R````````````````````````````!__P``
+M``````!T72`@/EW_(/\@("`@("`@("`@("`@("`@("`@("`@("`@(/\@("`@
+M("`@("#_("`@("`@("`@("`@("`@("`@("`@("`@("#_("`@("`@("`@_R`@
+M("`@("`@("`@("`@("`@("`@("`@("`@_R`@("`@("`@(/\@("`@("`@("`@
+M("`@("`@("`@("`@("`@(/\@("`@("`@("#_("`@("`@("`@("`@("`@("`@
+E("`@("`@("#_("`@("`@("`@_R`@("`@("`@("`@("`@("`@(```
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_sfx.exe.uu b/libarchive/test/test_read_format_rar5_sfx.exe.uu
new file mode 100644 (file)
index 0000000..fdf83af
--- /dev/null
@@ -0,0 +1,7048 @@
+begin 644 -
+M35J0``,````$````__\``+@`````````0```````````````````````````
+M````````````````````$`$```X?N@X`M`G-(;@!3,TA5&AI<R!P<F]G<F%M
+M(&-A;FYO="!B92!R=6X@:6X@1$]3(&UO9&4N#0T*)`````````!B8/>3)@&9
+MP"8!F<`F`9G`DIUHP"L!F<"2G6K`JP&9P)*=:\`^`9G`N*%>P"0!F<`=7YK!
+M,`&9P!U?G<$U`9G`'5^<P0H!F<`O>1K`+`&9P"]Y"L`C`9G`)@&8P"L`F<"Q
+M7YS!%P&9P+%?F<$G`9G`M%]FP"<!F<"Q7YO!)P&9P%)I8V@F`9G`````````
+M``!010``3`$&`/\IPV```````````.```@$+`0X``!0#``#F`P``````\.X!
+M```0````,`,```!````0`````@``!0`!```````%``$```````!`!P``!```
+M``````(`0,$``!```!``````$```$````````!`````PR`,`-````&3(`P`\
+M`````#`&`-#?`````````````````````````!`'`'PB``#`J@,`5```````
+M``````````````````````````````A5`P!`````````````````,`,`8`(`
+M`,2]`P`@`0```````````````````````"YT97AT````NA,#```0````%`,`
+M``0``````````````````"```&`N<F1A=&$``"*F````,`,``*@````8`P``
+M``````````````!```!`+F1A=&$````H-P(``.`#```0````P`,`````````
+M````````0```P"YD:61A=```C`$````@!@```@```-`#````````````````
+M`$```,`N<G-R8P```-#?````,`8``.````#2`P````````````````!```!`
+M+G)E;&]C``!\(@```!`'```D````L@0`````````````````0```0@``````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````+FP#D0`Z61.``#,
+MS,S,S,RY4`]$`.F<70``S,S,S,S,N>@.1`#HD[X``&A@(T,`Z"#:`0!9P\S,
+MS,S,S,S,S,QH<"-#`.@*V@$`6</,S,S,Z`'R``"CT(%$`,/,S,S,S+G@@40`
+MZ6$&`0#,S,S,S,RY>&I%`.CAW```:(`C0P#HT-D!`%G#S,S,S,S,S,S,S+F"
+MVT4`Z,'<``!HD"-#`.BPV0$`6</,S,S,S,S,S,S,N7+$1`#HH=P``&B@(T,`
+MZ)#9`0!9P\S,S,S,S,S,S,RY>,5$`.A]2@``:+`C0P#H<-D!`%G#S,S,S,S,
+MS,S,S%6+[('L6`0``%-65XM]%(VUJ/O__[L``@``A?]T05-7B\90Z!GP``"+
+MQE#H8R<"`%F-M:K[__^--$:-A:C[__^+SBO(B\/1^2O!4%=6Z._O``!6Z#LG
+M`@!9C31&@\8"C86H^___B\XKR(O#T?DKP5!HH@```.A"SP``4%;HP.\``%;H
+M#"<"`%F-C:C[__^--$:#Q@*+QBO!T?@KV%-HL#5#`%;HF>\``%;HY28"`#/)
+M:EAFB4Q&`HU%J%Y645#H/>0!`(M%"(/$$(I=&(M]$(E%K*'0#D0`B46PC86H
+M^___B46TBT4,B478C46HB76HB7W$QT7(``@``,=%W`P(`0!0A-MT"/\5/"!&
+M`.L&_Q5$($8`B_"%]G4L_Q5`($8`/0(P``!U'3/`9HD'C46H4(3;=`C_%3P@
+M1@#K!O\51"!&`(OPA?9?7@^5P%N+Y5W"%`!5B^R!["P"``"-1?Q0_Q6(($8`
+MA<!T!#+`ZV:+10@SR8E%W(V%U/W__XE%Y(M%#(E%Z(U%W%90B4W@QT7L00``
+M`(E-\(E-]/\5C"!&`(OPA?9U!#+`ZRE7_W405O\5D"!&`(M-_(OX5E&+$8MR
+M%(O._Q5@,D,`_]8SP(7_7P^5P%Z+Y5W"#``/MD0D#%#_="0,_W0D#/\59"%&
+M`%#_%6`A1@#"#``/MD0D#/?8&\"#X`E0_W0D#/]T)`S_%60A1@!0_Q5L(48`
+MP@P`58OL@WT,,'19@7T,$`$``'5=BD4@N>@.1``D`0^VP%#_=1C_=0CH/<H`
+M`/9%(`%T/O]U"/\56"%&`(7`=#%H(3```%#_%60A1@"%P'0A]D4@"'0;:+0U
+M0P!0_Q5<(48`ZPW_=0BYZ`Y$`.C2R0``,L!=PAP`5O]T)`B+\3/`B0:)1@2)
+M1@B)1@R(1A#H5@,``(O&7L($`+AW'T,`Z*C1`0!145-6B_&)=?#H_(,``#/;
+MQP:X-4,`C8XH$```B5W\Z`=,``"-CN@@``#&1?P!Z$RV``"-CH`B``")GM`A
+M``")GM0A``#H2P$``(V.T$4``.A``0``.5T(QD7\!`^4P(F>O"$``(B&N"$`
+M`(3`="-H\((``.CMT`$`68E%[,9%_`6%P'0)B\CH-9X``.L'B\/K`XM%"(F&
+MO"$``(J`H6$``(..P"$``/^#CL0A``#_@X[((0``_VI`B$8BC88((@``4U#'
+MAK!L```"````B9ZT;```B9ZX;```B9[`;```B9[0(0``B9[4(0``B)Z\;```
+M9HF>Q&P``(F>V"$``(F>H&P``(F>I&P``(F>J&P``(F>K&P``.@IX0$`:C2-
+MAD@B``!34.@:X0$`:B"-AI!%``!34.@+X0$`BTWT@\0DB9[8;```,\")GN!L
+M``")GN1L``")GNAL``")GNQL``")GO!L``")GO1L``!FB8;Z;```B\:(GM9L
+M``"(GOAL``"(GN`A``!>6V2)#0````"+Y5W"!`!1,\")#"2)@2@0``")@2P0
+M``")@3`0``")@300``"(@3@0``")@4`0``")@400``")@4@0``")@4P0``")
+M@5`0``")@500``"+P5G#5E>+\;BT-4,`:@A9B_[SJVH@,_^-1B!74.A%X`$`
+MBT0D&(/$#(E^0(E^1(E&2(O&7U["!`!5B^QDH0````!J_VB!'T,`4&2))0``
+M``!6B_&#/@!T&(!^$`!T"O]V"/\VZ.'9``#_-NBE(@(`68M-]&2)#0````!>
+MB^5=PU6+[&2A`````&K_:($?0P!09(DE`````%:+\8,^`'0;@'X0`'0-BT8(
+M`\!0_S;HE]D``/\VZ%LB`@!9BTWT9(D-`````%Z+Y5W#5HOQ@+ZX(0```,<&
+MN#5#`'0@5XN^O"$``(7_=!2+S^CDG```:/""``!7Z,/.`0!965^-COA5``#H
+M,O___XV.J#(``.@G____C8[H(```Z"BT``"-CB@0``#H\4D``(O.7NDW@0``
+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
+MBT<8BW<<*\8/A`T&``"%T@^/!08``'P(.\@/A_L%``"-+`Z+SXEL)"CH<:<`
+M`"MO'(OPB\(SR8E$)"2)3"0@#XS6!0``?PB%[0^"S`4``(-[!`$/A8(```"#
+M_@%U?87`=7F+S\9#'@'H,J<``(E$)!RH`70OB\_H(Z<``(O("\IT'HM,)!B+
+MB:!L```#R(M$)!B+@*1L```3PHE+((E#)(M$)!RH`G0KB\_H\*8``(O("\IT
+M'HM,)!B+B:!L```#R(M$)!B+@*1L```3PHE+,(E#-(M,)""+1"0D@WL$`G0*
+M@WL$`P^%&P4``(7`#X<3!0``<@F#_@</AP@%``"#[@$/A*<#``"#[@$/A'<#
+M``"#[@$/A/$!``"#[@$/A(L!``"#[@$/A`0!``"#[@%T.X/N`0^%S00``(-[
+M!`-U#XM'&"M$)"B#^`%U`X/%`8VS*!```%6+SN@8_?__5?\VB\_HFZ4``.F;
+M!```B\_H+:8``(O(B40D','I`HVK""$``(#A`8B+!B$``(O(P>D#@.$!B(L'
+M(0``QH,((@```,9%``"H`70EB\_H\:4``(OPN/\````[\'("B_!658O/Z#VE
+M``"+1"0<Q@0N`*@"=">+S^C(I0``B_"X_P```#OP<@*+\%:-JP@B``"+SU7H
+M#J4``,8$+@"`NP8A````=`V+S^B8I0``B8,((P``@+L'(0```'0-B\_H@J4`
+M`(F##",``,:#!2$```'IUP,``(O/Z&FE``"+SXF#`!$``.A<I0``)`&+SXB#
+M!"$``.A-I0``B_#&A"3``````('^_Q\``',85HV$),0```"+SU#HC:0``,:$
+M-,``````:``@``"-A"3$````4%#H4)L``&@`"```C8,$$0``4(V$),@```!0
+MZ%OS``#I60,``(7)#XQ1`P``?PF#_0$/@D8#``"+S^C8I```B\_HT:0``(7`
+M#X0P`P``4&AT-D,`C40D.,:#\Q````%J%%#H6QL``(/$$(U$)#!H``@``%"-
+M0RA0Z+_<``#I_`(``(7)#XST`@``?PF#_04/@ND"``"+S^A[I```B$0D$R0!
+MBDPD$XK1B$0D%(#B`HA4)!5T-8O/A,!T%>A7HP``:@!0C8M`$```Z/+K``#K
+M$NB$HP``4E"-BT`0``#H'>P``(I,)!.*1"04@.$$B$PD%G0MB\^$P'05Z!FC
+M``!J`%"-BT@0``#HM.L``.L2Z$:C``!24(V+2!```.C?ZP``BD0D$XK(@.$(
+MB$PD%W0T@'PD%`"+SW05Z-JB``!J`%"-BU`0``#H=>L``.L2Z`>C``!24(V+
+M4!```.B@ZP``BD0D$X!\)!0`#X00`@``J!`/A`@"``"`?"05`'0GB\_HDZ(`
+M`+W___\_O@#*FCLCQ3O&<QIJ`%"-BT`0``#HV^<``.L*O?___S^^`,J:.X!\
+M)!8`=!N+S^A;H@``(\4[QG,.:@!0C8M($```Z*WG``"`?"07``^$HP$``(O/
+MZ#6B```CQ3O&#X.2`0``:@!0C8M0$```Z(/G``#I?P$``(O/Z!&C``"%P`^%
+M<`$``&H@C8-T$```QX-P$````P```%#IL?S__XO/Z.JB``"%P'0L4&A4-D,`
+MC40D.&H44.A_&0``BTPD*(U$)$"#Q!!0C4,H4.@5&0``Z2$!``"+S^BSH@``
+MBLC1Z(#A`20!B(O!$```B\^(@\H0``#H2J$```^VP(F#[!```(/X&'8G4&A<
+M-D,`C40D.&H44.@B&0``BTPD*(U$)$"#Q!!0C4,H4.BX&```:A"-@Z$0``"+
+MSU#HM*$``&H0C8.Q$```B\]0Z*2A``"`N\$0````#X2$````:@B-L\(0``"+
+MSU;HAZ$``&H$C40D,(O/4.AYH0``C40D6%#HR]0``&H(5HU$)&!0Z`35``"-
+M1"0P4(U$)%Q0Z+[3``!J!(U$)#10C40D-%#HEMD!`(/$#/?8&L#^P(-[!`.(
+M@\$0``!U&FH(:&@V0P!6Z'39`0"#Q`R%P'4&B(/!$```QH.@$````<>#G!``
+M``4```#&@YL0```!BTPD*(E/'(M'&"O!@_@"#X/*^?__7EU;7X'$L"```,(,
+M`%6#[%RXR1]#`.C9O0$`N"0@``#HJ[X!`%-6B]F-32174XE=(.C3GP``,\EJ
+M!XE-'(E-_%\XB[QL``!T<(N3P&P``#/``]<3P3F#I&P``'Q<?P@YDZ!L``!V
+M4HO+QD5?`>B3%0``BP.-311J"%&+<`R+SO\58#)#`(O+_]:#^`AU/3/)C444
+M45%145"+@[PA``"-LR@0```%)%```%!J!%&+SNBU.0``B75$ZP.(35]7C4TD
+MZ$^A``"#?3P`=0R+R^C'%@``Z;()``"-323H<)\```^WP(U-)(F#Y"$``,:#
+M]"$```#H0)\``(U-)`^V\.A-GP``#[?`C4TDB8/L(0``P>@.)`&(@_0A``#H
+M,9\```^WR(F+\"$``(FSZ"$``#O/<PR+R^@[]___Z4P)``"#[G-T,X/N`70B
+M@^X&=!&#[@%U+L>#Z"$```4```#K(L>#Z"$```,```#K%L>#Z"$```(```#K
+M"L>#Z"$```$```"+@^@A``")@]PA``"#^'5U!&H&ZQ*#^`%U"?:#["$```)U
+M[HU!^5"-323H9J```/^S\"$``(O+Z"GP__^+BZ!L```#R(N#I&P``(F+J&P`
+M`(N+Z"$``(/0`(F#K&P``(E-4(/Y`0^$'0<```^.[08``(/Y`P^.C````(/Y
+M!0^%VP8``(V[D$4``(VSY"$``/.EBH.810``BY.810``)`&(@ZQ%``"+RHO"
+MT>G!Z`*`X0'!Z@,D`8#B`8B+K44``(B#KD4``(B3KT4``(3)=`Z-323H+IX`
+M`(F#I$4``("[KT4````/A&`'``"-323HWIT```^WP(F#J$4``(F#V&P``.E$
+M!P``,\"#^0)J``^5P(UX_X'GL-S__X''T$4```/[B\^)?4CH&(0``&H%68VS
+MY"$``#/2\Z6+=4A"BWU0BD8(BTX((L*(AI@0``"+P='H(L*(AID0``"+P<'H
+M`B+"B(:;$```B\'!Z`HBPHB&H!```(/_`G4+]L$0=`:+PC/2ZP0STHO"B(;P
+M$```@_\"=`KVP1!T!3/`0.L"B\*(AOH0``"XX````"/(.\@/E,"(AO$0``"!
+M^>````!U!XO"BU8(ZQ*+5@BX```!`(O*P>D%@^$'T^")AO00``"-322+PL'J
+M"\'H`X#B`20!B);S$```B(;R$```Z`>=``"-322)1A3H_)P``(U-)(E%5.BD
+MG```C4TDB$88QX9P$````@```.C<G```C4TDB89T$```Z,Z<``"-322)11CH
+M=IP```^VR(E.'(U-).AHG```+#"-322(1B#H<YP```^WP(U-)(E%3.B:G```
+MBU8<B458B48D@_H4<PNH$'0'QH;Q$````3/)B8Z<$```.(Z;$```=$.#Z@UT
+M-$J#Z@%T(H/J!701@^H&=`S'AIP0```$````ZR+'AIP0```#````ZQ;'AIP0
+M```"````ZPK'AIP0```!````BD88QX;\$````@```#P#=!`\!70,/`9S$HF.
+M_!```.L*QX;\$````0```(F.`!$``#P#=2*+15@E`/```#T`H```=1,SP,>&
+M`!$```$```!FB88$$0``@_\"=`HY3B1]!3/`0.L"B\&(AO@0``"+1@C!Z`@D
+M`8B&^1```'0LC4TDZ*B;``"-322+^.B>FP``@WU4_XO0=0R#^O]U!S/`0#/)
+MZQ$SR8O!ZPN#?53_B]&+^0^4P(B&FA```#/``T84B898$```$_DSP`-%5(F^
+M7!```!/1B89@$```@+Z:$````(F69!```'01N/___W^)AF`0``")AF00``"+
+M14R__Q\``(E]5#O'<P6+^(E%5%>-A=#?__]0C4TDZ'&;```SP(-]4`*(A#W0
+MW___=78SR8U^*&:)#_=&"``"``!T/XU-`.@O/@``C870W___4.CW"P(`BU54
+M0%D[T'8@:``(``!7B\HKR%&-C=#?__\#P5"+P8U-`%)0Z`L^```SP&8Y!W44
+M:@%H``@``%>-A=#?__]0Z-#0``!6B\OHP_+__^E6`0``C48H:``(``!0B450
+MC870W___4.@@Z0``BWX,*WU,@^\@]T8(``0``'0#@^\(A?\/C@8!``"-AB@0
+M``!7B\B)15CH&?+__U?_MB@0``"-323HEYH``&@X-D,`C7XH5^C\"@(`65F%
+MP`^%T0```(.^+!```!0/@L0```"+15B+.`^V1PN9B\B+\@^V1PH/I,X(F<'A
+M"`/(#[9'"1/RF0^DS@C!X0@#R`^V1P@3\ID/I,X(P>$(`\B+P1/RB\X/I,$)
+MP>`)B8/`(0``BP.)B\0A``"+<!2+SO\58#)#`(O+_]:+\HOX5E?_L\0A``#_
+ML\`A``#H=L\``%97:@!HR````%97B8/((0``B458Z!:W`0`#@\`A```3D\0A
+M``!24.A*SP``BTU8BW5(BWU0.\%^#HU!`8F#R"$``.L#C7XH:#`V0P!7Z!8*
+M`@!9687`=0?&@[9L```!]T8(``0``'01:@B-AJ$0``!0C4TDZ'R9``#_=1B-
+MCD`0``#H6.```/=&"``0```/A-X```"-323HPI@```^WR(V#P#(``(E%!(V#
+MR#(``(E%"(V#T#(``(E%##/`B_")11"+P8EU3(E%6&H#62O.B]C`X0+3Z_;#
+M"`^$@0```(-\M00`='J%]G02C4TDZ**8``"+3+4$4.CDWP``BTRU!(U%T%#H
+M`=X``/;#!'0#_T7D,\F)3>B#XP-V+VH#6"O#P>`#B448B_"-323H%Y@``(O.
+M#[;`T^"#Q@B+3>@+R(E-Z(/K`77ABW5,:\%DBTRU!(E%Z(U%T%#HX=\``(M%
+M6$:)=4R#_@0/C%W___^+72"+=4@SP%!0_[9<$```_[98$```_[.L;```_[.H
+M;```Z!$.``")@ZAL``"-322)DZQL``"*AO(0``"(12#_=2#HD9@```^WP#D&
+M#X0:`0``:@&Y4`]$`,:#Q&P```'HF#\``(!]7P`/A?T```!7C4,D4&H<Z#H]
+M``#I[````/>#["$```"````/A-\```"-323HCY<```&#J&P``(.3K&P```#I
+MQ0```(V[""(``(O/Z$A^``!J!5F-L^0A``#SI8U-).@HEP``C4TD9HF#'"(`
+M`.A.EP``BHL0(@``B]"`X0&)DR`B``"(B[5L``"+BQ`B``#!Z0.`X0&(B[1L
+M``"+BQ`B``"+P<'H`B0!B(.W;```B\'!Z`8D`8B#NVP``(O!P>@')`&(@[QL
+M``"%TG4+,\!F.8,<(@``=`,SP$"(@[AL``"+P='H)`&(@R0B``"+P<'H""0!
+MP>D$@.$!B(.Y;```B(NZ;```:@=?:@"-323H7Y<```^WP#F#Y"$```^$G@``
+M`(N#Z"$``(/X>0^$CP```(/X=@^$A@```(/X!753@+NN10```'1*BP.+<!2+
+MSO\58#)#`(O+_]:+,S/)*\=1&]&+3A!24/\58#)#`(O+_U80QD5>`8O+Z%UI
+M``#VV!K`]M`B15Z(15Z#[P%UZ(3`=2YJ`[E0#T0`QH/$;````>CR/0``@'U?
+M`'05C4,D4%!J!.B8.P``QH/%;````>L&BT4\B44<C4TDZ-'C__^+3?2+11Q?
+M7EMDB0T`````C65@7<-5@^QHN-L?0P#H0+,!`+AH(```Z!*T`0!35HO9C4TP
+M5U/H/94``#/)B4U@B4W\.(N\;```#X10`0``BY/`;```,\"#P@@3P3F#I&P`
+M``^,-P$``'\,.9.@;```#X8I`0``BP.-31AJ$%'&16H!BW`,B\[_%6`R0P"+
+MR__6@_@0#X47`0``BX.\(0``@+@D40```'4-Z,_C``#&16L`A,!T!,9%:P&+
+MR^BS"@``C44H,\E04?^S8"(``(U%&%"+@[PA``"-NV0B``!7!210``"-LR@0
+M``!0:@51B\[HXRX``("[7"(```!T?8V#="(``&H(4(U%*%#HF<T!`(/$#(7`
+M=&2`?6L`C4,D4%!U7FB`````Z%4Z``"+B[PA``"!P210``#HU+H``(O+Z#`*
+M``"-12@SR5!1_[-@(@``C4484(N#O"$``%<%)%```%!J!5&+SNAL+@``@+M<
+M(@```(V#="(``'6)B750ZR)J!NCZ.0``:@NY4`]$`,:#Q6P```'H+SP``.F$
+M!@``B$UJ:@>-33#HUY4``(/X!W,,B\OH4`L``.EF!@``C4TPQH/T(0```(V[
+MY"$``.@AE```:@2-33")!^B!E0``C4TPB_#H"Y4``(O("\H/A"H&``"%]@^$
+M(@8``(U._8/&!`/P`\B)=60/B`\&``"#_@</@@8&``!1C4TPZ&25```Y=4AR
+MC8U-,.BGE```C4TPB_#HO90``(U-,(F#Z"$``.BOE```B8/L(0``P>@")`$Y
+M-XB#]"$``(M%9(F#\"$``(N#Z"$``(F#W"$```^5P(A%:X3`=#B+R^AEZ___
+M:@.Y4`]$`,:#Q&P```'H.3L``(!]:@!T&(U#)%!0:@3HWS@``,:#Q6P```'I
+M=04``#/`]H/L(0```8E%6(E%5'0HC4TPZ"R4``"+R(E55#/`B4U8.]!R$@^'
+M004``#N+\"$```^#-04``/:#["$```*+\(EU9(E%7'00C4TPZ/.3``"+\(E%
+M9(E57/^S\"$``(O+Z#[D__^+BZ!L``!J`%I24O]U7`/(BX.D;```5A/"4%'H
+MSP@``(F#J&P``#/`B9.L;```0(N3Z"$``#O0#X0%!```#XZ\!```@_H##XXZ
+M`0``@_H$=#V#^@4/A:4$``!268V[D$4``(VSY"$``/.EC4TPZ&R3```D`8B#
+MK$4``#/`9HF#KD4``(B#K44``.EQ!```:@59C;M((@``C;/D(0``\Z6-33#H
+M-Y,``(7`="A0:$`V0P"-10!J%%#HS0D``(/$$(U%`(O+4(U#)%#H9@D``.D[
+M!```C4TPZ`.3```D`8U-,(B#7"(``.BFD0``#[;`B8-@(@``@_@8=@A0:$@V
+M0P#KL&H0C8-D(@``4(U-,.@ND@``@+M<(@```'1?:@B-LW0B``!6C4TPZ!22
+M``!J!(U%9%"-33#H!I(``(U%C%#H6<4``&H(5HU%C%#HD\4``(U%"%"-18Q0
+MZ$_$``!J!(U%"%"-1610Z"G*`0"#Q`SWV!K`_L"(@UPB``#&@[QL```!Z7D#
+M```SP(/Z`FH`#Y7`C7C_@>>PW/__@<?010```_N+SXE]+.AQ=P``:@59C;/D
+M(0``\Z6+@^@A``"-33"+=2R)16"+162)AE@0``"+15S&AOD0```!B89<$```
+MZ/N1``"-33")AI00``#H[9$``(F&8!```(N&E!```,'H`R0!B99D$```B(::
+M$```=!&X____?XF&8!```(F&9!```(N.7!```(N^9!```(N&6!```(N68!``
+M`#O/?`9_"#O"=P2+PHO/B8YL$```C4TPB89H$```Z(.1``#VAI00```"B48D
+M=!:-33#H;Y```&H`4(V.0!```.@*V0``@Z9P$````/:&E!````1T&(U-,,>&
+M<!````(```#H/Y```(F&=!```(.F`!$```"-33#H*I$``(O(B45DP>D'@.$'
+MB$X@B\B#X3^#P3*)3AR#^3)T!\=&'`\G``"-33#H_9```(U-,(A&&.CRD```
+MBXOL(0``,]+!Z09"B_C'AOP0```"````BD88(LJ(CO@0```ZPG4(B9;\$```
+MZPN$P'4'@Z;\$````(M."(O!P>@#(L*(AI@0``"+P<'I!<'H!"+*(L*(COH0
+M``"#?6`"BTUDB(:9$```=0GVP4!T!(O"ZP(SP(B&\!```(J&E!```"+"P>D*
+MB(;Q$```@^$/#[;`N@```@#3XO?8&\#WT"/"B8;T$```#[:&FQ```/?8&\"#
+MX`6)AIP0``"X_Q\``#OX<@*+^%>-A8S?__]0C4TPZ'V/``#&A#V,W___`(V%
+MC-___V@`"```C7XH5U#H8MX``(M-6(O!"T54=`U648U%,(O+4.CJY___BT5@
+M@_@"=1!6B\OH"^?__XM%8(/X`G08:#`V0P!7Z)G_`0!9687`=0?&@[9L```!
+M@'UK``^$S@```%>-0R10:ASH+S0``.F]````C8L((@``Z&EU``!J!8OWC;L(
+M(@``6?.EC4TPZ'R/``"+T#/`0(K*(LB(B[5L``"+RL'I`B+(B(NT;```B\K!
+MZ00BR(O"B(NW;```,\G!Z`-!(L&(B[IL``"(@[ML```SP(B#N&P``/;"`G05
+MC4TPZ"B/``")@]AL```SR3/`0>L&B8/8;```@+NU;````'0(.8/8;```=`*+
+MR(B+N6P``(M-6(O!"T54=!.-@P@B``!048U%,(O+4.CBYO__BT5(B45@ZP>+
+MR^B_Y?__C4TPZ*;;__^+3?2+16!?7EMDB0T`````C65L7<-7B_F`O\5L````
+M=`0SP%_#BP=6BW`4B\[_%6`R0P"+S__6B8>@;```,\F+A[!L``!(B9>D;```
+M7H/H`70.@^@!=4&+S^B,]___ZP>+S^CJ[/__B\B%R70KBX>L;```.X>D;```
+M?QE\#HN'J&P``#N'H&P``'<)B\_H)>7__S/)A<EU"L>'W"$``/\```"+P5_#
+MN/`?0P#HB*H!`+C@Y@``Z%JK`0!6B_&`OL1L````=!R-1B10:AWH5#(``&H#
+MN5`/1`#HP30``.E4`@``@+[P10``!0^'/`(``#/`@[ZP;````P^5P$B#X!6#
+MP!TYANQ%```/AQT"``"+ABA6```+ABQ6``!U#SB&:58``'4'L`'I#0(``%.-
+MGN@@``!7B\OHU(\``%.-C109___H,.```#/;C8T4&?__4_^VQ%8``(E=_.@E
+M\P``BWT(.5T,=5,YGC16``!\'G\,@;XP5@```````780C48D4&H>Z)\Q``#I
+MCP$``(7_=0G&AA$A```!ZR#_MC!6``"+S^CXX____[8P5@``C8[H(```_S?H
+M)I```#B>:U8``'1:BY:\(0``.)HD40``#X1(`0``#[:.<%8``(V&DE8``%"-
+MAIM6``#WV5#_MKQ6``"-AH%6```;R5"-AG%6```CR(V")%```%%0_[9L5@``
+MC8[H(```4^A?CP``:@'_MD!6``"-CJ`A``#H+W```(N&*%8``(V.Z"```/]U
+M#(F&""$``(N&+%8``%:)A@PA``"(GA`A``#H9X\``(I%$(V.Z"```(B&$2$`
+M`(J&:58``(B&-R$``(V&T$4``(E!.(E9/(N&,%8``(N6-%8``(F%7&7__XF5
+M8&7__XB==&7__SB>\$4``'4*4E!1Z*Q7``#K$E/_MNQ%``"-C109___H;NX`
+M``^VEII6``"-AIM6``#WVHV.H"$``!O2(]"-AD!6``!24.A!;P``A,!U*XV&
+M^$4``%"-1B10:A_H5S```&H#N5`/1`#HDS(``(7_=`N+S^BF````ZP*S`8V-
+M%!G__^BNX```7XK#6^L-C48D4&H>Z.\O```RP(M-]%YDB0T`````B^5=P@P`
+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
+M9@]N;"0$#RC@9@]RT`QF#W+T%&8/[^!F#VY$)"AF#V+H#RA$)%AF#V+I9@_^
+M[V8/_NQF#^_%#RC89@]RT`AF#W+S&&8/[]@/*--F#W#;.68/_M8/*,)F#^_$
+M#RC(9@]RT`=F#W+Q&68/[\AF#W#"3F8/[\5F#W#)DV8/[T0D:&8/[]EF#^]<
+M)#@/*0"+10B+@/0````/*5@0,\"+Y5W""`!6BW0D"%>#O@`!``!`=D6+AO@`
+M``"#`$"+CO@```"#.4`;P/?8`4$$_[;P````5N@HZ?__BX[P````@X8``0``
+MP/^V``$``(U!0%!1Z%V@`0"#Q`R+AO@```"+E@`!```!$(N.^````#D1&\#W
+MV`%!!("^!`$```!T"HN&_````(-(!/^+AOP````S_X,(_[B`````BXX``0``
+M*\%0BX;P`````\%74.BBG@$`@\0,_[;P````5NBAZ/__BTPD$(N&]````(L$
+M!XD$#X/'!(/_('SL7U[""`"#/="!1``"?!P/*`50-T,`#RD%D.Y#``\H!4`W
+M0P`/*06@[D,`5HMT)`B+SNB)`P``,]*+CO0```"+@B`W0P")!`J#P@2#^B!\
+MZ8N&]````($P(``(`HN.]````(M$)`PQ00B+CO0```"+1"00#0`@``#!X!`Q
+M00Q>P@P`45>+?"04A?\/A+(```!358ML)!A6BW0D&(N.``$``+N`````BX;P
+M````*]D#P8E\)!`[^W9F4U50Z!R?`0"+AO@```"#Q`P!G@`!``"#`$"+CO@`
+M``"#.4`;P/?8`4$$@SW0@40``O^V\````%9\!^AH[/__ZP7HC.?__XN.\```
+M`&I`C4%`4%'HS)X!`(.&``$``,"#Q`PK^^L75U50Z+:>`0`!O@`!``"#Q`R+
+M7"00,_\#ZX7_#X5<____7EU;7UG"#`"![``!``!35597B[PD%`$``(UL)!`S
+M]HO?BX=("P``.\9V&BO&@_A`=@-J0%A0C8=("0```\904^C^_O__55/HH_W_
+M_X/&0(/%(('#"`$``('^``(``'+!:@B!QT`(``"-="046VH@5E?HS?[__X/&
+M((/K`77O_[0D&`$``%?H9/W__U]>75N!Q``!``#""`!355:+="00,^U7:``"
+M``!5C89("0``4.B)G`$`@\0,B:Y("P``C89`"```:@%54.C[_?__B_V+WE57
+M4^CO_?__1X'#"`$``(/_"'+L7\:&1`D```'&ACP(```!7EU;P@0`@^QX4XN<
+M)(0```!5BZPDA````%:^``(``%>+A4@+```K\(N\))0```")1"0<B70D((7`
+M=%`[_G),5@5("0```\534.A<G0$`@\0,C;U("0``:@A>:D!75>CM_?__@\=`
+M@<4(`0``@^X!=>F+O"24`````UPD("M\)"`A="0<BZPDC````(E<)!2!_P`0
+M``!S!3/V1NL3B[50"P``@_X&=`6#_@=U`VH$7C/`B40D&(-D)!``A?9T>FG0
+M"`$``(O(P>$&`]4#RXE4)"2-7"0HB4PD((/X"'-6B7L(B4L$B1.#_@%V$XN-
+M3`L``%-HL#]``.@JL```ZP>+R^@1Y?__BT0D&(/##(M,)"!`BU0D)(/!0('"
+M"`$``(E$)!C_1"00B4PD((E4)"0Y="00<J6+7"04BXU,"P``A<ET">@DL@``
+MBT0D&(/X"`^"8?___XOW@>;_`0``*_X#WXM\)!R%]G035HV'2`D```/%4U#H
+M,IP!`(/$#(T$-U]>B85("P``75N#Q'C"#`!6:/````"+\6H`5NBLF@$`@Z8`
+M`0```(/$#,:&!`$```!>P[A(($,`Z/.)`0!15HOQB77PZ`!7``"#9?P`C8X<
+MHP``Z.JE``"-CGRC``#&1?P!Z-NE``"-CMRC``#&1?P"Z,RE``"-CCRD``#&
+M1?P#Z+VE``"-CIRD``#&1?P$Z*ZE``"+SL9%_`7HB0$``(M-](O&7F2)#0``
+M``"+Y5W#Z3"Z__^!P3RD``#II*4``+@$(```Z$**`0!35597:@!J`/^T)"@@
+M``#HT5@``(N,)!@@``"+V.A!I@``O0`(``#IH@```(U$)!!0Z$EB``"+\`^W
+M#E'HSEX``("\)!P@````=`N$P'0;,\!FB0;K%(3`=!!5:+`U0P"-1"084.BQ
+MI```:@!J`(U$)!B+^U#H:U@``(OP9H,^*G4Z#[=.`E'H@UX``(3`="QJ+EAJ
+M7&:)A"04$```6%5FB80D%A```(V$)!@0``!34.B.I```C;PD$!```/^T)"@@
+M``!75NB=4@``A,!U)XN,)!@@``"-1"0055#H1J4``(3`#X5$____7UY=6X'$
+M!"```,(4`+`!Z^]5B^Q6:@;_=1"+\?]U"/]U#(V&?*,``%#HX/[__X3`=`2P
+M`>LP@'T4`'0H@[[THP```'0?:@;_=1"-AMRC``#_=0C_=0Q0Z++^___VV!K`
+M_L#K`C+`7EW"$`"!P3RD``#IR*0``%:+\>@Q5@``,\"-CARC``!FB8;Z@@``
+M9HF&&I,``&:)AO""``")AO2"``"(AOB"``#HN:0``(V.?*,``.BNI```C8[<
+MHP``Z*.D``"-CIRD``#HF*0``(V./*0``.B-I```C8YP80``7ND>X/__45%3
+M55:+="0H5XOYA?9T#(-\)#``=@4SP&:)!HM,)!PSVT-3:@"*@?$0``"-:2B(
+M1"08B\__="08B6PD(%7HZO[__X3`=32!QQRC``"+SXE\)!#H/Z0``(O/ZQ3_
+M="0D55?H-%$``(3`=1N+3"000^B5HP``B_B%_W7A,\!?7EU;65G"&`"+;"0@
+MA>UT$_]T)!17Z+*B``#WV!K`_L"(10"%]G0+_W0D,%=6Z,>B``"+P^O)4U56
+M5VBP[D,`B]GH)`$``+JP\D,`O@`!``"+B@#\__^+^FH'70^VP<'I"#,,A;#N
+M0P")#XV_``0``(/M`77F@\($@^X!==-?7EV+PUO#58OLBU4,4XM="%:+=1"%
+M]G0@]L('=!L/M@H/ML,SR,'K"#,<C;#N0P!"B54,@^X!=>"#_@@/@H<```!7
+MB_[![P,S&H/N"(M2!(O*P>D8B\+!Z!`/ML"+#(VP[D,`,PR%L/)#`(O"P>@(
+M#[;`,PR%L/9#`(O#P>@8,PR%L/Y#`(O#P>@0#[;`,PR%L`)$`(O#P>@(#[;`
+M,PR%L`9$``^VPHM5#(/""(E5##,,A;#Z0P`/ML,S#(6P"D0`B]F#[P%U@%^%
+M]G08#[8*#[;#,\C!ZP@S'(VP[D,`0H/N`77H7HO#6UW"#`"+5"0$,\DY2@1U
+M)U9J"(O!7J@!=`G1Z#4@@[CMZP+1Z(/N`77LB02*08'Y``$``'+;7L($`+B"
+M($,`Z'.%`0!14U97:!!A0`!HD&!``&H$B_EH+`$``%>)??#H7(8!`&@084``
+M:)!@0`!J!&AX`0``C;>T!```,]M6B5W\Z#J&`0"-CYP*``#&1?P!Z/R```!H
+ML`0``%-7B9^8"@``Z*R5`0!HX`4``%-6Z*"5`0!H``0``(V'I`L``(F?L`0`
+M`%-0B9^4"@``Z(*5`0"+3?2#Q"2+QV2)#0````!?7EN+Y5W#S,S,S,S,S,S,
+MS,S,45:+\8ET)`3HOHP``(O&7EG#58OL9*$`````:O]H@1]#`%!DB24`````
+M5E>+^6BP!```5^@*CP``:.`%``"-M[0$``!6Z/F.``!H$&%``&H$:'@!``!6
+MZ-J%`0!H$&%``&H$:"P!``!7Z,B%`0"+3?1?9(D-`````%Z+Y5W#S,SI>HP`
+M`(/L)%-55HMT)#0SVVH@78,^`G5#BT8$5U-34U.)1"0@C40D)%!J!(U$)"A0
+M5?]T)%SHI`8``(E>!(O3B_L/MD04%(O*@^$#P>$#T^`S^$([U7+JB7X$7X,^
+M`W4G4U-34XU$)""#Q@105595_W0D6.AF!@``58U$)!105NB[E0$`@\0,7EU;
+M@\0DP@@`BX&8"@``@\#\@_@!=Q?_="0$@<&<"@``_W0D#/]T)`SHM8,``,((
+M`('L@`$``%-65XN\))@!``"+V8"_``$````/A+L```"+M"24`0``A?8/A*P`
+M``!5O8````")LY@*``!5C40D%(O/4.@%C```58V$)!0!``!0C40D&%#HB[8`
+M`(/N!'0^@^X!=53_M"2P`0``C40D%(O+_[0DL`$``/^T)+`!``#_M"2P`0``
+M_[0DL`$``%!7_[0DL`$``.@T`P``ZQO_M"2@`0``C40D%(O+4%?_M"2@`0``
+MZ#````!5C80D%`$``%#H1(T``&@``0``C40D%%#H-8T``+`!7>L",L!?7EN!
+MQ(`!``#"(`"![!@"``!358O95E>)7"04,_^-LRH!``#_M"0P`@``C8[6_O__
+MZ+F*``"$P'0Q@[PD.`(```!U!8`^`.L<@#X`=!UJ"/^T)#P"``"-1MA0Z)6=
+M`0"#Q`R%P`^$/0(``$>!QBP!``"#_P1RK6@(`0``C80D)`$``%#_M"0\`@``
+MZ+&U``#_M"0T`@``Z$+5`0"+Z`/M@[PD/`(```!9=!YJ"/^T)#P"``"-C"0H
+M`0```\U1Z.B3`0"#Q`R#Q0B-1"1@4.BBE0``,]M5C80D)`$``%"-1"1H4.A=
+ME@``B\.(7"00P>@(B$0D$8O#P>@0B$0D$HU$)!!J`U"-1"1H4.B7E0``]\/_
+M/P``=2]J&%F-1"0X4(V$),0```"-="1DC;PDQ````/.E4.AVE```BD0D2(O+
+MP>D.B$0,*$.!^P``!`!RAHU$)$Q0C40D9%#H490``(M<)!0STFH078UT)!@#
+M\C/)BT043-/H@\$(B`9&@_D@<N^#P@0[U7+@:;NP!```+`$``(NT)#`"``!J
+M0%D#^_.E,\DYC"0X`@``#Y7!9J5I@[`$```L`0``B(P8*@$``(#Y`74C:8.P
+M!```+`$``&H(_[0D/`(```4"`0```\-0Z,B2`0"#Q`Q5C40D'%!I@[`$```L
+M`0``!0H!```#PU#HJ)(!`&F#L`0``"P!``"#Q`QJ`&H!!0H!``!5`\-0Z`:*
+M``!5C40D+%!I@[`$```L`0``!1H!```#PU#H;)(!`(N#L`0``(/$#$"#X`.)
+M@[`$``"-A"0@`0``:`@!``!0Z,J*``"-1"0H4&B`````C40D(%#_M"0X`@``
+MC8N<"@``Z"!_``!5C40D'%#HGHH``%6-1"0L4.B3B@``7UY=6X'$&`(``,(0
+M`&H0:?<L`0``C8,*`0``754#QE"-1"0@4.CFD0$`@\0,C40D&&H`:@!54.A1
+MB0``C8,:`0```\954(U$)#!0Z,"1`0"#Q`SI<?___X'L9`(``%.+G"2``@``
+MB\&)1"0$@_L8#X??`0``558S[8VPM`0``%>+_3F>-`$``'4R_[0D?`(``(O.
+MZ+R'``"$P'0@:A#_M"2(`@``C88"`0``4.BIF@$`@\0,A<`/A*(!``!'@<9X
+M`0``@_\$<KJ^``(``(U$)'164/^T)(@"``#H_;(``#/`B\M`T^!0C40D.%"-
+M1"1<4(U$)"!0:A#_M"28`@``C80DC````%#HM-(!`%E0C80DD````%#HGP,`
+M`%:-1"1X4.AMB0``BU0D$(NT)'P"``!J0(N*E`H``(V:M`0``(O!@^`#:<!X
+M`0```]B-00&)@I0*``"+^XN$))`"``!9B8,T`0``C8,"`0``\Z5J$/^T)(@"
+M``!09J7HDI`!`&H@7U>-1"0D4(VS$@$``%;H?9`!`%>-1"104(V#.`$``%#H
+M:Y`!`%>-1"1\4(V#6`$``%#H69`!`(/$,%5J`5=6Z,F'```YK"20`@``=!57
+MC40D6%#_M"28`@``Z#&0`0"#Q`R+M"24`@``A?9T*&H(55;HNHX!`(/$#(I$
+M+#2+S8/A!S`$,44[[W+O5XU$)#A0Z'Z(``"#O"2(`@```'0G_[0DB`(``(M,
+M)!2-1"08:``!``!0_[0DA`(``('!G`H``.C$?```5XU$)!A0Z$*(``!?7EU;
+M@<1D`@``PB``:B!?5XV&$@$``%"-1"0<4.B=CP$`@\0,C40D%%555U#H"H<`
+M`%>-AC@!``!0C40D/%#H>X\!`%>-AE@!``!0C40D:%#H:8\!`(/$&.D5____
+M@>R\`0``4XN<),@!``!55E=J0%\[WW8]C80D9`$``%#HCI,``%/_M"34`0``
+MC80D;`$``%#HOY,``(U$)%10C80D:`$``%#H=I(``&H@C40D6%OK!XN$)-`!
+M``"+K"3D`0``B40D$(7M=!R+E"3H`0``@#H`=!!J&EF+]8V\))0```#SI>MA
+M,]*%VW0:B_"-1"04*_"-3"04`\J*!`XT-D*(`3O3<NX[WW,6B\>-3"04*\,#
+MRU!J-E'H0XT!`(/$#(V$))0```!0Z.62``!7C40D&%"-A"2<````4.@8DP``
+MBY0DZ`$``(7M=!:`.@!U$6H:68VT))0```"+_?.EQ@(!_[0DW`$``(V$))@`
+M``#_M"3<`0``4.C<D@``C40D=%"-A"28````4.B3D0``BZPD[`$``(7M=!R+
+MA"3P`0``@#@`=!!J&EF+]8V\)/P```#SI>MFA=MT'HM4)!"-1"04*]`S]HU,
+M)!0#SHH$"C1<1H@!._-R[H/[0',7:D!8*\.-3"044`/+:EQ1Z'",`0"#Q`R-
+MA"3\````4.@2D@``:D"-1"084(V$)`0!``!0Z$22``"+A"3P`0``A>UT%H`X
+M`'41:AI9C;0D_````(O]\Z7&``%J((U$)'A0C80D!`$``%#H#Y(``/^T).`!
+M``"-A"0``0``4.C$D```7UY=6X'$O`$``,(D`%6-;"2H@>R0`0``4U:+=6Q7
+M:D!8._!S`HO&4/]U:(U%N%#H+XT!`(/$#,=$-;@````!,\!04%!0C44<4(U&
+M!%"-1;A0_W5D_W5@Z*;]__]J(%M3C44<4(U%_%#H]HP!`(M%?(/$#$C&158`
+MB45(,_;&15<`:A!8B45,B450BT5PB44\BT5TB45`BT5XB45$BWPU2(7_=$^-
+M15=0C84P____4(U%5E"-A<C^__]0C4684%.-11Q0_W5D_W5@Z#3]__]3C468
+M4(U%'%#HAXP!`(/$##/)BD0-'#!$#?Q!.\MR\X/O`76Q4XU%_%#_=#4\Z&*,
+M`0"#Q@2#Q`R#_@QRD&I$C46X4.C/A```4XU%_%#HQ80``%.-11Q0Z+N$``!3
+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
+M:!@4``"-3=3H4J'__XMU$#/;:``(``")7?R-A@01``!0C86$[___4.CCC@``
+MC86$[___4.@IQ@$`:@2)1>B-O83O__^+QVCT-T,`4.B&Z`$`@\00]]@:P/[`
+MB47PA,!T-&H$C;V,[___B\=H`#A#`%#H8>@!`(/$#(7`=1AJ7%AFB86$W___
+MC;V2[___C86&W___ZP:-A83?__]74.@3Z`$`C86$W___4.BTQ0$`BWT,@\0,
+MB47LBT4(.)B780``=3PX7?`/A2\#``"-A@01``!0Z"I'``"$P`^%&P,``(V&
+M!!$``%!7C48H4/]U".AM!P``A,`/A/\"``"+10@/MH!'80``4&H!5^C`+@``
+M5^@^,```A,!T'5?H2#```%#HD#```%>$P'0'Z'XO``#K!>C*+P``.)[Q$```
+M#X6V````.)X$(0``#X6J````4VB`````:@%34V@```!`5_\5)#!#`(/X_W40
+M5[E0#T0`Z,'Z___I@@(``%#_%1@P0P"+A@`1``"#^`,/A8P```"+3=2+5>B+
+M1>P#PL<!`P``H(TT$F:)<0J-!$4,````9HE!!#/`B4$&C86$[___4(U!$%#H
+M[^8!`(U&`HMUU&:)1@R+1>P#P&:)1@Z-A83?__]0BT7H@\`)C01&4.C&Y@$`
+M@\00Z:$```!35_\5'#!#`(7`#X5X____5U-J%.A!^?__N5`/1`#IK0```(/X
+M`G0)@_@!#X72`0``BTW4BU7HBT7L`\+'`0P``*"--!)FB7$*C01%$````&:)
+M000SP(E!!HV%A.___U"-0110Z%7F`0"-1@*+==1FB48,BT7L`\!FB48.C86$
+MW___4(M%Z(/`"XT$1E#H+.8!`(M%\(/$$`^VP(/P`8E&$%-H```@`FH#4U-H
+M````P%?_%20P0P"+R(E-\(/Y_W4;OE`/1`!7B\[H;_G__XO.:@GHR_K__^DG
+M`0``4XU%T%`/MT8$4U.#P`A05FBD``D`4?\5$#!#`(7`=7;_=?#_%1@P0P!7
+M4VH5Z$SX____%0`P0P"#^`5T!STB!0``=1OHOHT``(3`=1)J&(U-A.A"H/__
+MC4V$Z+2;``"^4`]$`(O.Z*/Z__]J"8O.Z%+Z__^+=1!7.)[Q$```=`O_%2`P
+M0P#IG````/\5*#!#`.F1````C8U<S___Z"$B``#_=?"-C5S/___&1?P!Z/P&
+M``"+70B+=1"+B]AR``#WV8V&4!```!O)(\B-AD@0``!1BXO4<@``]]D;R2/(
+MC89`$```48N+T'(``/?9&\DCR%&-C5S/___H$2D``(V-7,___^AT(@``@+NH
+M80```'4)_W8D5^@I,```C8U<S___LP'HU2$``(U-U.B?G___BTWTBL-?7EMD
+MB0T`````B^5=P@P`N%,A0P#H$F\!`+A@$```Z.1O`0`SP%>)1>")1>2)1>B)
+M1>R(1?"+?0B+SU!0B47\C47@4.A1Q/__A,`/A,H```"`/;(.1```=29H:#=#
+M`.@X!@``A,!T!\8%L0Y$``%HD#=#`.@C!@``Q@6R#D0``8`]L0Y$``!6:@=>
+M=`-J#UY3BUW@4U;_=0S_%0`@1@"%P'5V:``(``"-A93O__]0_W4,Z'U!``"$
+MP'034U:-A93O__]0_Q4`($8`A<!U2_]U#(U')%!J4NAN]O___Q4`,$,`OU`/
+M1`"+\(O/Z.KX__^#_@5U&^C9BP``A,!U$FH8C4V4Z%V>__^-393HSYD``&H!
+MB\_H>?C__UM>C4W@Z'>>__^+3?1?9(D-`````(OE7<((`%6+[(/L3%;_=12+
+M=1!65NCO1P``5NC]*P``A,!U+/]U#&H6Z+WU__]J%XU-M.C_G?__C4VTZ'&9
+M``!J";E0#T0`Z!CX__\RP.M-BT4(4P^V@$=A``!0:@'_=0SH,RH``&H`5O]U
+M#/\5+#!#`(7`#Y7#A-MU'_]U#&H6Z&;U__^^4`]$`(O.Z!OX__]J"8O.Z,KW
+M__^*PUM>B^5=PA``N,H@0P#H4&T!`+C(8```Z")N`0!35HMU##/`5V8Y!G0M
+M9CE&`G4GOP((``"-A>SO__]7:&`W0P!0Z/F(``!75HV%[.___U#HPX@``.L3
+MOP((``"-A>SO__]75E#HUH@``(M="(V%?+___V@`"```4%/HC0$``&:#O7R_
+M__\Z=!U6C4,D4&I3Z.ST__]J`[E0#T0`Z"CW___I+`$``(!]$`!T+(V-+)__
+M_^@.'P``:@&-A2R?__\S_U!7B\N)??SH!,+__XV-+)___^GU````5XV%?+__
+M_U"-A>SO__]0Z"R(``"-C7S/___H,?C__S/_C85\S___5U!6Z,$M``"+C83?
+M__^(1?/VP0%T"H/A_E%6Z"<M``"-C<3?___HFQX``&H1C87L[___QT7\`0``
+M`%"-C<3?___H.2<``(3`=!]7C87$W___B\M05^AXP?__A,!T"XV-Q-___^@7
+M'P``C8U4K___Z%(>``"`??,`QD7\`G0S:@56C8U4K___Z-0A``"$P'0AC86T
+MW___4(V%K-___U"-A:3?__]0_[58K____Q44,$,`_[6$W___5NB*+```C8U4
+MK___Z#@>``"-C<3?___H+1X``(M-]%]>6V2)#0````"+Y5W"#`"+1"0,@[BP
+M;````W45!8`B``!0_W0D%/]T)`SH\/?__^L",L#"$`!5B^RX`"```.@F;`$`
+MBT4(5X.XL&P```*+B/A5``"+N/Q5``!U(8M%$-'O2#OX<@*+^%:+=0Q75E'H
+MTIP``#/`9HD$?E[K-KC_'P``._AR`HOX5U&-A0#@__]0Z/-\`0"#Q`S&A#T`
+MX/__`(V%`.#___]U$/]U#%#HSIP``%^+Y5W"#`!145-55E?_="0@Z,@_``"$
+MP`^%Y@```(M\)"A7Z+8_``"$P`^%U````(MT)"0SVXOKB5PD$&8Y'W1>:BZ#
+MQP2+PUEF.4_\=31F.4_^=2X/MP=0Z"5```"$P'4%9CD?=14Y7"00=`X/MT?Z
+M4.@,0```A,!T`46+1"00:BY9@\<"0(E$)!!F.5_\=;B%[7X*5NAT````A,!U
+M9?]T)"#H(/;__XE$)!2+1"0<!1(@``!0B40D%.A*O0$`B_A9A?]T)U?_="04
+M5NBMWP$`@\0,A<!U%8TT?NL#@\8"#[<&4.B:/P``A,!U\%;HU?7__SEL)!1\
+M!SO%?`,SVT.*P^L",L!?7EU;65G"$`!5B^RX2"```.B::@$`_W4(Z.6\`0!9
+MN0`(```[P7($L`'K?U91_W4(C84`\/__4.ATA0``C84`\/__4.BZO`$`68VT
+M1?[O___K2P^W!E#H(3\``(3`=#LSP(V-N-___V:)!N@I]?__:@&-A;C?__]0
+MC84`\/__4.BT*@``A,!T$H"]Q>___P!U'X"]Q.___P!T%H/N`HV%`/#__SOP
+M=ZLRP%Z+Y5W"!`"P`>OU5HMT)`Q7BWPD#("_`6(```!U*H"_E&$```!T(8V&
+M^$4``&@,.$,`4.A7O`$`65F%P'4*_W0D%%;HQOG__XV&^$4``&@4.$,`4.@V
+MO`$`65F%P'42#[:'`6(``%#_="085NA?^___7U["#`#"#`!65XOYBP>+<`B+
+MSO\58#)#`(O/_]:+1"0,B4<$7U["!`!5B^R#[!2-1?Q34&H@,]O_%0PP0P!0
+M_Q4(($8`A<!T2HU%\,=%[`$```!0_W4(QT7X`@```%/_%10@1@"%P'0A4U-3
+MC47L4%/_=?S_%0P@1@"%P'0,_Q4`,$,`A<!U`K,!_W7\_Q48,$,`BL-;B^5=
+MP@0`58OL@^Q,_W4(C4VTZ$68__^+3?2#^0AS,(M%#(E$C;2+3?1!B4WT@_D(
+M<QV+11")1(VTBTWT08E-](/Y"',*BT44B42-M/]%](U-M.A_DP``B^5=PA``
+MN.\@0P#HO&<!`%%14U:+\8EU\%>#)@"-7A"#9@0`B\OH>$P``(M]"#/`@V7\
+M`(E^"&:)AO8```!FB8;X$```(8;D````:.#F``#H-6<!`%F)1>S&1?P!A<!T
+M"E.+R.BAG0``ZP(SP(F&X````(O(_[?@@@``QD7\`.A`R```BTWTB\9?7EMD
+MB0T`````B^5=P@0`5E>+^8NWX````(7V=!2+SNBYGP``:.#F``!6Z`1G`0!9
+M68U/$%]>Z8%,``"+5"0$BT$$.T($=PUR!HL!.P)S!3/`0.L",\#"!`"+1"0$
+MBQ&+200[2`1W$W($.Q!W#3L0=04[2`1T!#/`ZP,SP$#"!`!35HMT)`R#OK!L
+M```#=0R#OIPB```R#Y?`ZPJ#OIPB```=#Y7`@+Z@(@````^4P_[+(MAT&O]T
+M)!"#QB2Y4`]$`%;HW_'__U9J).A@[O__#[;#7H/P`5O""`#H]"\``"T!!0``
+M]]@;P"4```P`!0``!`##N$@0``#H(6<!`%-55HOQ,]M7C4PD$(M&"(B>^"``
+M`&:+@/J"``!FB49<Z.7Q__^-OO8```"]``@``.LJ4XU$)!105^AL)P``A,!T
+M&HN$)!`0```!AI@```"+A"04$```$8:<````BTX(55?HS-W__X3`=<B+3@B!
+MP3RD``#HRH(``.M0.)DG40``=`N!P210``#H9FX``&:)GO(```"+SNAC!0``
+M@_@!=/13C40D%%!7Z/XF``"$P'0:BX0D$!````&&D````(N$)!00```1AI0`
+M``"+3@A55^A>W?__BTX(A,!UGSB9)U$``'0+@<$D4```Z`5N```YGN0```!U
+M/(M&"&:#N/J"``!)="^A4`]$`(/X"W0E.)[X(```=0U7:D3H%>W__Z%0#T0`
+MA<!U#&H*N5`/1`#H>>___U]>75N!Q$@0``##N`00``#HVF4!`%>+^8M'"("X
+M`6(````/A=0!``"`N*AA````4XN<)!`0```/E,!55@^VP(VW^!```/^SI"(`
+M`%!6Z&<C``"+Z(7M#X1!`0``5NC0(@``B$0D$X3`=$Y6Z-8B``!0Z!XC``"$
+MP'4R:@"-@\`R``!0_[/D,@``C40D'_^SX#(``%!H``@``%9J`/]W".@C%```
+M,L"(1"03ZP2*1"03A,`/A<$```"+1P@/MH!'80``4&H!5NCC(```BT<(_[.D
+M(@``@+BH80````^4P`^VP%!6Z-$B``"+Z(7M#X2K````5NA&.0``A,!U>8U#
+M)%!J<NCYZ___:``(``!6C40D'%#HV7\``&H!5NC[.@``5N@-(@``A,!T%%;H
+M%R(``%#H7R(``(3`=`2P`>L\,L"(1"03BT<(#[:`1V$``%!J`5;H6"```(M'
+M"/^SI"(``("XJ&$````/E,`/ML!05NA&(@``B^B*1"03A>UT((3`#X2!````
+MBT<(@+BH80```'4,_[.D(@``5NA9)```QH?W$````8"_]Q````!T3%93_W<(
+MZ*CZ__^+5PB-@]`R``"+BMAR``#WV1O)(\B-@\@R``!1BXK4<@``]]D;R2/(
+MC8/`,@``48N*T'(``/?9&\DCR%%6Z&0B``!>75M?@<0$$```P@@`5HU#)%!J
+M%.@?Z___O5`/1`"+S>BC[?__:@F+S>A2[?__Z7C___^X4!```.BY8P$`4U6+
+MZ;,!BT4(#[>0^H(``(/Z170)@_I8#X4B`0``@+@!8@````^%%0$``%97B[PD
+M9!```(VU^!```&H!C8_`,@``4?^WY#(``(U,)!__M^`R``!1:``(``!6_[0D
+MA!```%#H*A(``(3`#X7/````,MLX7"03#X7#````C4<DN5`/1`!64.@NZ___
+M5NAL(```A,!T)%;H=B```%#HOB```(3`=!1J8HU,)!CH9Y+__XU,)!3HV(T`
+M`%;H2C<``(3`=7R-1R10:G+H_>G__V@`"```5HU$)&A0Z-U]``!J`5;H_S@`
+M`(M%"`^V@$=A``!0:@%6Z(`>``!J`8V'P#(``%#_M^0R``"-1"0?_[?@,@``
+M4&@`"```5O^T)(00``#_=0CH:A$``(3`=`2S`>L/5HU')+E0#T0`4.AZZO__
+M7UY=BL-;@<10$```P@@`5HOQBT8(@+@D40```'4?!210``!0_W0D$&H!Z&F2
+M``"$P'0,BTX(QH$G40```;`!7L((`%%3BUPD&%56BW0D'%>+^5.+1P@%$B``
+M`%!6Z!I]``"+1P@SR042(```B4PD$&8Y"'0D4.@].@``#[<H5>C$-@``A,!U
+M$57HJ#4``(3`=0=35NBI+P``BT<(:CI9@[A<80``!`^WJ/J"``!U&8/]6'44
+M4>A\-0``A,!T"C/`QD0D$`%FB0:#_45T$XM'"(.X7&$```%T!U/_="0@ZPM3
+M_W0D(.CJ.0``4%;H8WP``(M'"("XHV$```!U!E;H"C<```^W!E#H])4``(!\
+M)!``#[?X=#IJ7UMF.5X"=1P/MT8$4.@?-@``A,!T#HU'OV:#^!EW!6HZ6.L1
+M9CD>=1!F.5X"=0IJ7%AFB09FB48"7UY=6UG"$`"X!"%#`.@]8`$`N$R=``#H
+M#V$!`%:+\8V-J&+___]V".APCO__@V7\`(V&]@```%"-C:AB___H3QL``(3`
+M#X0Y`0``:@&-C:AB___H:93__X3`=1%J`;E0#T0`Z$WJ___I%P$``("];<__
+M_P`/A0H!``!35S/;,_\XG5W/__]T>V@`"```C87,8O__4(V%\.___U#HC'L`
+M`#B=8L___^L3`[VH[___$YVL[___@+UBS___``^4P`^VP%!H``@``(V%\.__
+M_U#H\#8``(V-J-___^@VZ___:@"-A:C?__]0C87P[___4.C!(```A,!UL0&^
+MF````!&>G````(V%J&+__XO.4.B/````BT8(:DE:7P^WB/J"``!;@_E4=`5F
+M.\IU!\:``6(```&+1@AF.9#Z@@``=!J`N`%B````C8[V````40^4P`^VP%#H
+M%9```(V-J&+__^BYF/__C8VH8O__Z+^S__^-3?-14(V%J&+__XO.4.B$````
+MA,!UWHV-J&+__^B_C___BTWT,\!>9(D-`````(OE7<-35HOQBTPD#.C3$P``
+MB49H,]N+1@B)5FR)GN@```")GNP````XF"11``!U#>B8CP``A,!U!(O#ZP,S
+MP$"+SHB&]A```(A>7XB>]Q```,:&\0````&(GO0```#H\H<``%Y;P@0`N"0A
+M0P#H05X!`+B@40``Z!-?`0!3BUT(,])7B_F)?>"+1P@/MX#Z@@``B47H.54,
+M=2HX5U]T'%!2C4<04%/HL?\``(3`=1-J`;E0#T0`Z%[H__\RP.F3````,])6
+MB[/<(0``@_X"#X23````@_X#=1V`O_<0````#X03#```C8?X$```4%/_=PCH
+MGO3__X/^!0^%^@L``("[K$4````/A`$,``"+=>@SP%90C4<04%/H/_\``(3`
+M=1%J`;E0#T0`Z.SG___IVPL``(L#,\E1_[.D;```BW`0B\[_LZ!L``#_%6`R
+M0P"+R__6L`%>BTWT7UMDB0T`````B^5=P@P`B)?W$```.9/<,@``?Q9\"#F3
+MV#(``',,B9/8,@``B9/<,@``.9/D,@``?Q9\"#F3X#(``',,B9/@,@``B9/D
+M,@``BT\(.9%@80``=1N+@32C```YA^P```!R#8"_\0`````/A3X+``"^``@`
+M`(A5[5:-A52N__]04FH&C47M4(V#@"(``%#H)]7__X7`#Y7`B$7NA,!T#H!]
+M[0!U"#/`B(?Q````B\OH0I?__U:-A<3N__]0C8.H(@``4.@++```,\E!@+MS
+M,P```(E-Y'13BT<(BX#$<@``.\%T9(!][0!U7H7`#Y3`_L@@1>XSP%"-A<3N
+M__]0Z#4U``"+3PB+B<1R``!).\AU$C/)C87$[O__05%0Z!<U``#K)3/`B$7N
+MZQZ+R^BOE___A,!U$XM'"#/)03N(Q'(``!K`]M`@1>Z*@QDS``"(1U\SP(A'
+M8(N+J&P``"N+V#(``(LS4(N#K&P``!N#W#(``%!1BTX0_Q5@,D,`B\O_5A`S
+MTHK"BLJ(3?*(3=PX1>YU%HJ3M&P``(A5\HA5W(32#X3>"0``,]*+1PB+=>AJ
+M28J(`6(``%B$R70'9COPL`%U`HK"_W7<A,E0#Y3`#[;`4(V%Q.[__U#HL(P`
+M`(3`#X3)"0``:``(``"-A_@0``"+SU")1<B-A<3N__]04^CU^?__,\`X1?)U
+M%68YA_@0``!T#,9%\P$X@Q@S``!T`XA%\XM'"&I%66I8@+A780```%J)3<R)
+M5=!U"8"X6&$```!T=V8[\70%9COR=6V-C53.___HP>;__S/`4(V%5,[__U"-
+MA_@0``!0Z$L<``"$P'0VC8/`,@``4(V-9-[__^CG\___A,!T,H"]8-[__P!T
+M$%>-C63>___HL//__X3`=!DSP(A%\^L2BT<(@+A780````^5P/[(($7SC87$
+M[O__B\]04^C)\___A,!U(FH"N5`/1`#HX>3__XO+Z!J4__^`N[1L````#Y3`
+MZ0;]__^`NQLS````=!>-A<3N__^+SU!3Z+WX__^$P`^$W````(MW"(V]Q/[_
+M_VI`@<8D4```6?.E9J4/MHL@,P``C478BWW@,])0C8-+,P``B57\4/^S;#,`
+M`/?9C8,Q,P``4!O)C8,A,P``(\B-A<3^__]14/^S'#,``(U/$%+H)D```("[
+M&S,````/A),```"`NT$S````#X2&````:@B-1=A0C8-",P``4.C_=`$`@\0,
+MA<!T;8"[Q&P```!U9("_]A````"-A<3N__]0C4,D4'4X:(````#HJ>'__XM/
+M"('!)%```.@K8@``@TW\_XV-Q/[__^BI80``Z03____&A_@@```!Z;<'``!J
+M!NATX?__:@NY4`]$`.BPX___,\"(1?.#3?S_C8W$_O__Z'%A``"-C9S>___H
+MC0L``(N#@#,``,=%_`$```")1=1J4%J%P`^$C0```(/X!0^$A````(I-\XMU
+MZ(3)#X3]````9COR#X3K````BT<(@+@!8@````^%VP```#/`B$7OC8?X$```
+M4.CN%@``A,!T-8!][P!U.3/)C8/`,@``45#_L^0R``"-1>__L^`R``!0:``(
+M``"-A_@0``!04?]W".A*"```@'WO``^$A````#/`BLB(3?/K?HO+Z`B4__^$
+MP'10@'WS``^$G@```(M%Z&:#^%`/A)$```!J25EF.\$/A(4```!J15EF.\%T
+M?8M'"#/)03F(7&$``'1O_X?D````C87$[O__4%.+S^@B\___ZUB*3?.$R70B
+MC86<WO__B\]04^@K]?__BW7HBLB(3?/K`XI-\X3)=4SK`XMUZ("[M&P```!T
+M-C/`0%"(1?*(1?,SP%!0C87$[O__4.@2B0``A,!U(#/`B$7DC8V<WO__Z&$*
+M``"*1>3I7OK__X3)#X3$!0``BT<(@+@!8@```'00QH?W$````8"X`6(```!U
+M28I%\H3`=44SP&I0B$7O6&8[\'1`C8V<WO__Z$\-``"$P'0QC8?X$```4(US
+M)%9J.^B"W___C8?X$```N5`/1`!05NC4XO__ZPN*1?+&1>\!A,!U!O^'Y```
+M`/^'Z````(VS\#(``#/`C8_(````B8>`````B8>$````B8>(````B8>,````
+MBT<(_[#@@@``_S;H)QX``(M'"(V/H````/^PX((``/\VZ!$>``"+@]@R``"-
+M=Q"+B]PR``")1S"-A9S>__]0B4\TB\Y3Z%(]``"*5>\SR8I%\HA7.8A'.HE-
+MW(E-Y(32#X6=````.(O$;```#X61````B[/D,@``BY/@,@``._%\?G\(@?I`
+M0@\`=G2+B]@R``"+@]PR```/I,@*P>$*.\9\6'\$.\IV4C/`._!\(W\(@?H`
+MX?4%<AF+R^B$"P``.Y/<,@``?#-_"#N#V#(``'8I_[/D,@``C8V<WO___[/@
+M,@``Z)<-``"+@^`R``")1=R+@^0R``")1>2*1?(SR8UW$(M7"("ZH&$````/
+ME(6UWO__@'WO`'44A,!U$&I06&8Y1>AT!S/`0(K(ZP,SP$"#?=0`B$WPB$7L
+MB$7Q#X0)`0``B[.`,P``@_X$=&>#_@5T8COP=$*#_@)T/8/^`W0XC8?X$```
+M4(U#)%!J1^B]W?__,\F*P8A%\8I-\,9%[`"$R0^$N0```(3`#X2Q````,\!`
+MZ:L```"$R0^$A````(V'^!```%!3C4<04%+HX>G__^M@:``(``"-A52^__^+
+MSU"-@X0S``!04^CF\___BDWPA,ET3F:#O52^__\`=$2-A52^__]H``@``%"-
+MA_@0``!0@_X$=0K_=PCH&>?__^L2C4,DB\]0C86<WO__4.A>`P``B$7QA,`/
+MA%K___^*3?#K`XI%\8.[L&P```(/A4S___^$R0^%3/___^D[____,\"(A_<0
+M``#K?H"[&#,```!U=8"[H"(```!U%/^SY#(``/^SX#(``%;HQ0,``.M8#[:#
+M<#,``(N/X````%#_LW0S``#HT9T``(N'X````(N+X#(``(N3Y#(``(F(2$P`
+M`#/)B9!,3```B(A@3```#[:#<#,``(N/X````%#_LYPB``#H09H``(O+Z.>-
+M__^`NQDS````=3`/MI-*,P``C8-+,P``]]J-C\@````;TB/0C8/P,@``4E#H
+M!!L``(3`=`:Q`3/`ZP0SP(K(@+MP,P```'4(B(?T````ZR:`NZ`B````=!TY
+M@^0R``!\%7\(.8/@,@``=@N$R70'QH?T`````8!]\@"(1?!U7X!][`!T683)
+M=54XBQLS``!T*#B+03,``'0(.(O$;```=!B`O_0`````=0^-A<3N__]0C4,D
+M4&H$ZPV-A<3N__]0C4,D4&H#Z);;__]J`[E0#T0`QD7P`>C.W?__BD7P@WW4
+M`(I5\701@[N`,P``!'4(A-)T!+$!ZP(SR8!][P`/A4X!``"+=>AF.W70=`IF
+M.W7,#X4[`0``@WW4`'09A,EU%8.[@#,```4/A20!``"$T@^$'`$``(3`=!.+
+M1PB`N*!A````#X0(`0``BD7PA,D/A;X```"+5>0SR3O1BTW<=P2%R70?A,!U
+M$#F/B````'4(.9>,````=`N-C9S>___HR@T``(M7"(VST#(``(V[P#(``(N"
+MV'(``(N*U'(``/?8&\`CQO?94!O)C8/(,@``(\B+@M!R``#WV%$;P(V-G-[_
+M_R/'4.@F#```C8V<WO__Z(D%``#_=<B+1>!3_W`(Z*KI__^+1>"+2`B+@=AR
+M``#WV!O`(\90BX'0<@``C8V<WO__]]@;P"/'4.C>"P``BWW@BT<(@+BH80``
+M`'4L_[.D(@``C;?X$```5NCU$@``A,!U%E:-0R10:A'H(-K__[E0#T0`Z*;<
+M___&A_<0```!@TW\_XV-G-[__^A^!```@'WN`(I%\XI5\G0&_X?L````@']@
+M`'4DA,`/A6'T__\X@[1L``!U#(O+Z%F+___I3?3__X32#X5%]/__,L#I0/3_
+M_[A!(4,`Z)51`0"X/!```.AG4@$`4_]U&/]U%/]U%.B'*P``C8VX[___Z-,#
+M``#_=10SVXV-N.___XE=_.BA#```A,!U'/]U$/]U%/]U#&H2Z"WI____=0QJ
+M$^@MV?__ZT-H```0`(U-X.A=?___QD7\`>L,BTT(4/]UX.B:#```Z!UU``#_
+M=>2-C;CO____=>#H10D``(7`==J-3>"S`>AI@?__C8VX[___Z(P#``"+3?2*
+MPUMDB0T`````B^5=PA0`N%,A0P#HTU`!`(/L%%;H8NK__U"-3>#H[7[___]U
+MY(M-"/]UX(-E_`#HRS<``(OPA?9^1%.+71!7BWT,B\:9.]-_!GP&.\=R`HOW
+MA?9^$XM-"%;_=>#H@SD``(O&F2OX&]K_=>2+30C_=>#HB3<``(OPA?9_QE];
+MC4W@Z,N`__^+3?1>9(D-`````(OE7<(,`%-55E>+?"0DA?]T`\8'`(MT)!PR
+MVU;H4`X``(ML)!CK5X3;=0Q6_L/HJP```(3`=4$SP#+;A>T/E,!0_W0D-/]T
+M)#3_="0T_W0D,%;_="0LZ)]_``"%P'0C@_@!=#^#^`9U#VC_````N5`/1`#H
+MZ=C__U;H\PT``(3`=:4SVSA<)#0/E<.#PQ&%[70<4U:+S>@A`P``A,!T#[`!
+MZS2%_W0#Q@<!,L#K*8M$)!0/MH!'80``4&H!5N@K#```A>UT"U-6B\WH[0(`
+M`.L&5NA'#0``7UY=6\(D`+AH(4,`Z&I/`0"X+%```.@\4`$`4U:+=0B-A<B_
+M__]7NP`(``!34%;_%30P0P"%P`^$BP$``#O##X.#`0``4XV%R*___U!6_Q4P
+M,$,`A<`/A&P!```[PP^#9`$``(V%R+___U#H0"@``(E%\(V%R*___U#H,2@`
+M`(OX,]MF.1\/A#P!``!7_W7PZ%:$``"%P`^$*P$``%=6Z`PH``!0Z$&$``"%
+MP`^%%@$``&:)A?#O__^+^V:%P'5H:``(``!6C87P[___4.B&:@``5V@<.$,`
+M:``(``"-A?#O__]0Z,<G``!0Z,>H__^#Q!"-A?#O__]0Z)P,``"$P'0+,\!F
+MB87P[___ZP=FBX7P[___@\=[@?\0)P``?)QFA<`/A*````"_``@``(V%R,__
+M_U=64.@=:@``5_]U\(V%R,___U#HVR<``(V%\.___U"-A<C/__]0_Q4X,$,`
+MA<!T98V-R-___^AO````5HE=_.@C#```A,!U$&H25HV-R-___^A<`0``BMB-
+MA<C/__]0C87P[___4/\5.#!#`(3;=!:-C<C?___HZ0```(V-R-___^@E`@``
+MC8W(W___Z%,```"P`>L",L"+3?1?7EMDB0T`````B^5=P@0`@TD$_S/`QP$L
+M.$,`9HE!)(A!"(E!#(A!$(F!)!```&:)02&(02")012+P<=!&``!`0#'01P`
+M`0``PU6+[&2A`````&K_:($?0P!09(DE`````(-Y!/_'`2PX0P!T&(!Y$`!U
+M$H!Y&`!T!^B2`0``ZP7H1````(M-]&2)#0````"+Y5W#S,S,S,S,5HOQZ*C_
+M___V1"0(`70-:"@0``!6Z.M,`0!968O&7L($`,S,S,S,S,S,S,S,S,S,4U:+
+M\;,!@WX$_W0B@'X0`'48@WX,`'42_W8$_Q48,$,`C5C_]]L:V_[#@TX$_X-F
+M#`"$VW43.%X:=`Z-1B2Y4`]$`%#H3M7__UZ*PUO#N`00``#H:$T!`%.+G"00
+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
+MZ`4!``"#^/]TZU#_%6`P0P#_M@@0``"#ID`0````Z-7\____M@@0``"(A@P0
+M``#HW/S__XB&#1```+`!7L(,`%-65XM\)!"+\>F"````@+X`$````%=6=`]J
+M_^BJ````B88$$```ZPO_M@00``#HEP```(/X_W1I_[<($```B9]`$```Z&_\
+M____MP@0``"(APP0``#H=OS__XB'#1```%>(G@`0``#H`!<``(O8:$@X0P!3
+MZ".1`0!9687`=!%H3#A#`%/H$I$!`%E9A<!U&3/;B)]$$```9CD>#X5M____
+M,L!?7EO""`"P`>OV5F@`"```_W0D#(OQ5NA560``QH8`$````5["!`"X4!(`
+M`.@_/@$`4U56B[0D8!(``(U$)`Q7B[PD;!(``(/+_[T`"```4#OS=7#_M"1L
+M$@``_Q5D,$,`B_`[\P^%@````%6-A"1D`@``4/^T)'`2``#H'!```(3`=!F-
+M1"004(V$)&0"``!0_Q5D,$,`B_`[\W5._Q4`,$,`@_@"=`^#^`-T"H/X$G0%
+M,\!`ZP(SP(B'1!```.G0````5O\5:#!#`(7`=12+\_\5`#!#`(/X$@^5P(B'
+M1!```#OS#X2I````5?^T)&P2``!7Z'A8``!5C40D0%!7Z#H6``"+3"0L,\`#
+M1"0PB8<`$```BT0D$(/1`(F'"!```(M$)!2)AR@0``"+1"08B8<L$```BT0D
+M'(F',!```(M$)"")AS00``"+1"0DB8<X$```BT0D*(F'/!```(U$)"2)CP00
+M``"-CQ`0``!0Z+5G``"-1"044(V/&!```.BE9P``C40D'%"-CR`0``#HE6<`
+M`(.G0!````"+QE]>75N!Q%`2``#"#`"`?"0$`%:+\<9&"`!T'E>_`X```%?H
+M;SX!`%=J`%")1@SH8$P!`(/$$%_K!(-F#`"+QE["!`"`>0@`=0G_<0SH3CX!
+M`%G#5HOQ@WX,`'0/@'X(`'4)_W8,Z#4^`0!9BT0D"(E&#,9&"`%>P@0`BU$$
+M`U0D!(O"@^('P>@#`0&)403"!`#I`````%.+V597:@B+<PR+$UDK2P0/MCP6
+M#[9$%@'!YP@+^`^V1!8"P><("_C3[P^WQU]>6\,SP(E!"(D!B4$,B4$0B\'#
+MS,S,S,S,S,S,S,S,5HOQZ*X#``#_="0(B\[H'`$``(O&7L($`%.+7"0(5597
+M:$"J0`!J"&@(`0``B^E35>B6`0``C;5`"```B\[H<P,``(V#0`@``(O.4.C>
+M````C;-("0``N8````"-O4@)``#SI8N#2`L``(F%2`L``(N#3`L``(F%3`L`
+M`(N#4`L``%^)A5`+``"+Q5Y=6\($`%-65XO9:@B+\U^+SN@4`P``@<8(`0``
+M@^\!=>Z-BT`(``#H_@(``%]>B\-;PU6+[&2A`````&K_:($?0P!09(DE````
+M`%:+\5>+?@R%_W04B\_H#E\``&@X`P``5^@2.@$`65EJ!(U&!%#HDT0``(-^
+M"`!T&;]4"P``5_]V".A_1```5_]V".CH.0$`65F+3?1?9(D-`````%Z+Y5W#
+M5E>+?"0,B_$[]W0Q:+````#_M_````#_MO````#HOTL!`(N'``$``(/$#(F&
+M``$``(J'!`$``(B&!`$``%^+QE["!`"#.0!T3XM4)`2#.@!T1H,Y`74%@SH!
+M=`J#.0)U$(,Z`G4+BT$$.T($#Y3`ZRF#.0-U'H,Z`W49C4($:B!0C4$$4.BA
+M5`$`@\0,]]@;P$#K!C+`ZP*P`<($`%>+?"04A?]T+5.+7"0058ML)!!6*^N+
+M3"0DC30K4_\58#)#`(O._U0D*`-<)!R#[P%UXUY=6U_"%`!5B^R#["2-1=Q0
+MZ+@```"#?0P`=`S_=0R-1=Q0Z*ZT____=0B-3=SH0?___XOE7<((`%6+[%%6
+MB_&#?@@`=2!H5`L``.B#.`$`B47\687`=`F+R.@S_O__ZP(SP(E&"(M%"(D&
+M@_@!=02#9@0`@_@"=02#3@3_@_@#=0C_=@CH@JS__XM%#(/X"'(#:@A8B480
+M7HOE7<((`(M$)`2)`8/X`70%@_@"=02#800`@_@#=1-J((U!!&@`X$,`4.A)
+M2@$`@\0,P@0`58OLBP&![%0+``!6BW4(B0:#.0%U!HM!!(E&!(,Y`G4(BT$$
+M]]")1@2#.0-U'O]Q"(V-K/3__^@0_?__C48$4(V%K/3__U#H8JO__UZ+Y5W"
+M!`"XW")#`.CJ-P$`45:+\8,^`G41_W4,_W4(_W8$Z#NQ__^)1@2#/@-U7(-^
+M$`%V,%<S_SE^#'4G:#@#``#H<3<!`%F)1?")??R%P'0+:@B+R.C@6P``B_B#
+M3?S_B7X,7XM."(M&#/]U#/]U"(F!3`L``(M."(M&$(F!4`L``/]V".C'J___
+MBTWT7F2)#0````"+Y5W""`"+P??00(/@/P/!B8'P````@^B`B8'T````@\`@
+MB8'X````@\`(B8'\````PU-6_W0D#(OQC8XH$```Z(1Q__\SVXV.<!```%.(
+M7A#HF/[__XF>0!```(F>1!```(F>4!```(F>5!```(F>2!```(F>3!```(F>
+MF!```(E>)(F>G!```(B>H!```(B>P1```(B>RA```(F>[!```(F>\!```(F>
+M]!```&:)GO@0``"(GOH0``")G@`1``!FB9X$(0``7EO"!``SP&:)012)01AF
+MB4$<B$$>B4$@B4$DB4$HB4$LB4$PB4$TB4$XB4$\PU6+[(L-(.!#`('L%`$`
+M`(/Y_W4\C87L_O__QX7L_O__%`$``%#_%6PP0P"+C?S^__^+A?#^__^+E?3^
+M__^)#2#@0P"C8`]$`(D59`]$`.L+H6`/1`"+%60/1`"#^0)U!\'@"`/"ZP6X
+M`04``(OE7<.X!"```.C1-@$`BX0D$"```%-5B]C!ZQ]6@.,!#[?PB%PD#(ML
+M)`Q7B[PD&"```(7V#X1'`0``5^CQB`$`B40D%%F#_@)T3(/^!'1'@_X#=$)0
+M_[0D("```%>$VW0*Z$"K`0"#Q`SK!>@D:P``A<!U(HN$)!P@``"+3"00#[<$
+M2(/X7'0*@_@O=`5FA<!U!+`!ZV:#_@%U!#+`ZUUH``@``(U$)!A05^BC!@``
+M:``(``"-A"08$```4/^T)"0@``#HB@8``(/^`G0%@_X$=1=5C80D&!```%"-
+M1"0<4.C\`0``A<!ULH/^`W4;5?^T)"`@``!7Z+0```!?7EU;@<0$(```P@P`
+M@_X%=`6#_@9U;HU$)!10Z*8*``"$P'7-@_X%=!]7Z)<*``"$P'4558V$)!@0
+M``!0C40D'%#HG@$``.LT9H-\)!0`=#2-1"044.C:AP$`65"-A"08$```4(U$
+M)!Q0A-MT"N@WJ@$`@\0,ZP7H&VH``(7`#X4:____5^BP#0``_[0D'"```(OX
+MZ*(-``!54(/^`@^%5O___U?H.P$``/?8&\!`Z4S___]14U6+;"005HMT)!A7
+M:BY;_W0D(`^W!E#H-0$``/]T)"`/M_@/MT4`4.@D`0``#[?(@\4"B\&%P`^$
+MY0```&HJ6CO"="^#^#]T(&8[SW0@9CO+=0]FA?]TMX/_7'2R9CO[=*TRP.F_
+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
+M&`-5`%.+!U*+<`R+SO\58#)#`(O/_]:+\`%U&%^+QEY=6UG"!`"XXB%#`.@?
+M&P$`45%35HOQ5XEU\(V.D````.C:W___,_^-CJ0```")??SHRM___XV.N```
+M`,9%_`'HN]___[O`$```QD7\`E/HFAH!`%F)1>S&1?P#A<!T"8O(Z$R5___K
+M`HO'4\9%_`*)1D#H=AH!`%F)1>S&1?P$A<!T"8O(Z"B5__^+^(O.B7Y$Z&\`
+M``"+3?2+QE]>6V2)#0````"+Y5W#4U:+\;O`$```5XM^0(7_=!"+S^B\E?__
+M4U?H6!H!`%E9BWY$A?]T$(O/Z*65__]35^A!&@$`65F-CK@```#H[=___XV.
+MI````.CBW___7XV.D````%Y;Z=3?__^#24C_,]*($8A1#(E1((E1),=!*`$`
+M``")44R(45")42R)43")41R)41B)431FB9',````B5%XB5%\B5%PB5%TB5%H
+MB5%LB5%@B5%DB5$XB5$\B9&(````B9&,````B9&`````B9&$````PU6+[(!]
+M"`!6_W4DB_'_=2#_=1S_=1C_=13_=1#_=0QT$HM.0&H!Z`F6__^(ALP```#K
+M$(M.1&H`Z/>5__^(ALT```!>7<(@`(M$)`2%P'0#B4$LBT0D"(7`=`.)03"#
+M24C_P@@`BT0D!(E!%(M$)`C&00P!B4$0P@@`58OL@'DH`'14BU$LA=)T35.+
+M70Q6B[&(````B\97B[F,````"\>+10AT#@.!@````!.9A````.L&BWT4BW40
+M5U934/^RY#(``/^RX#(``/]Q?/]Q>.C`20``7UY;7<(0`(/L$%-5BVPD((O9
+M5E>`N\T`````=`.#Y?"+3"0D,\")1"04B_")3"00A>T/A%H!``"+^8`[`(M3
+M+(E4)!QT'_]S!/]S"/]T)"SHDBH!`(MS!(/$##/`B4,$Z<(```"+2R0S_SOY
+M?!!_!3MK('8)BWL@B7PD&.L&B_V);"08A?\/A)<```"`>T\`="F`N\T`````
+M="`S]COQ?!I_!3MK('83`\>+R(/A\"O(`\^%R7X$B4PD&(L"BW`8B\[_%6`R
+M0P"+3"0<_]:$P`^$MP```(M[+/]T)!C_="04BP>+<`R+SO\58#)#`(O/_]:+
+M\(M#.(7`=0F+1"0<!8`B``"`>RL`=1F`N)D0````=!!6_W0D%(V+D````.C4
+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
+M),````"T/T,`QX0DQ````,P_0P#'A"3(````Y#]#`,>$),P```#X/T,`QX0D
+MT````!!`0P#'A"34````*$!#`,>$)-@```!`0$,`QX0DW````%A`0P#'A"3@
+M````<$!#`,>$).0```",0$,`QX0DZ````*A`0P#'A"3L````Q$!#`,>$)/``
+M``#<0$,`QX0D]````/A`0P#'A"3X````$$%#`,>$)/P````P04,`QX0D``$`
+M`$1!0P#'A"0$`0``7$%#``^$S````%#H-&T!`(OX687_#X2[````5HV$)!03
+M``!0:@#_%7PP0P`SP%!0:@-0:@%H````@(V$)"@3``!0_Q4D,$,`B_`[]71\
+M:@!J`%=6_Q54,$,`.\=U;&H`C40D%%!H_G\``(V$).0S``!05O\52#!#`(7`
+M=$V+1"00T>@SR6@$`0``9HF,1-PS``"-A"0,`0``4(V$).`S``!0ZQN-A"0(
+M`0``4.@F_/__:`0!``"-A"0,`0``4%?H9O?__XOXA?]UVE;_%1@P0P"^``@`
+M`%:-A"04`P``4&H`_Q5\,$,`5HV$)!0#``!0Z`NW__]0C80DX",``%#HI?G_
+M_S/_,_;H4*?__ST`!@``<@O_=+04Z+O[___K`C/`A<!T(%5HO#M#`%7_=+0@
+M:`$0``!H``0``/\5J#!#`(/X`G4H:``(``#_=+08C80D&`,``%#H'+?__XV$
+M)!`#``!0_Q5<,$,`.\5U"$:#_@ARE>L$BWRT%(3_=38S]F@`"```_W2T.(V$
+M)!@#``!0Z.*V__^-A"00`P``4/\57#!#`#O%=0A&@_XU<M+K!(M\M#2%_P^$
+M!P$``(V$)!`#``!0Z(.V___HD*;__ST`!@``<F9H.#Q#`.CZ^O__:'A!0P#H
+M\/K__XV$)-@C``!0C80D%`,``%!7:/$```#H(=C__U"-A"0@$P``:&0(``!0
+MZ/$V__^#Q!AJ,&CP````Z/_7__]0C80D&!,``%!J`.C8F```Z8````"-A"38
+M(P``4(V$)!0#``!05VB004,`C80D(!,``&AD"```4.BE-O__@\08_Q6L,$,`
+MA<!T2_\5D#!#`%#_%;0P0P!J`(U$)!10C80D&!,``%#H:R\!`%E0C80D'!,`
+M`%!J]/\50#!#`%#_%;@P0P!H$"<``/\5G#!#`/\5L#!#`&H`_Q64,$,`7UY=
+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
+M*TWH&\<#3?@3QP--\!/'5VID4%'H(MH``(D&B58$ZP<S_XD^B7X$BT,8`081
+M?@1?7EN+Y5W"!`!6:@!H`,J:._]T)!2+\?]T)!3H[-D``%)0B\[H!````%["
+M"`"+5"0$BT0D"('"``!J3(D1%0M[F:&)003""`!6:@!J9/]T)!2+\?]T)!3H
+ML-D``(D&B58$7L((`(M$)`16:@!J9/]P!(OQ_S#HDMD``(D&B58$7L($`%6+
+M[+@`%@``Z!S5``!6B_&+1DB#^'(/CR4"```/A!4"``"#^!8/C_H````/A.L`
+M``"#^!4/AW@"``#_)(6_$T$`_S9H`$-#`&H`Z,*?``"#Q`SI6P(``/\V:`!#
+M0P!H"$-#`.OE:@#H%9<``%GI0`(``/]V!&I[Z"G/__]0_S;KR?]V!&IZZ^__
+M=@1J?.OH_W8$:,H```#KWFIPZ`7/__]0:@#H:9\``%GKP?]V!&IRZ\7_=@1J
+M>.N^_S9HA0```.C@SO__4.N`_S9H!`(``.OO_W8$:(0```#KG/]V!&B#````
+MZY+_=@C_=@1HT@```.BPSO__4/\VZ!2?``"#Q!#IK0$``/]V!&IYZ6C_____
+M=@1HW````.E;_____S9HW0```.N;@_@X#X^Z````#X2M````@^@7@_@+#X=R
+M`0``_R2%%Q1!`&C>````Z4K___]HX0```.E`____:+0```#H0,[__U#_-NDV
+M____:FGK[VIJZ^O_=@1J:.GX_O__:&\$``#KVFAP!```Z]/_=@1H<00``.G=
+M_O___W8$:G'IT_[___]V!&C(````Z/3-__]0C84`_O__:``!``!0Z,4L____
+M=@B-A0#^__]0:`Q#0P#_-N@XG@``@\0@Z=$```!J9^EX____@^@Y=$"#Z`%T
+M-(/H`70B@^@)=!.#Z`$/A:T```!HA@```.E1____:$,#``#I1_____]V!&@&
+M!```Z5'^__]J;^DS____:(P```#I*?___VA6!```Z1____\]@````'5JZ)"\
+M``"#?@0`="3_=@1HR@```.A%S?__4(V%`.K__V@`"@``4.@6+/__@\00ZQQH
+M``H``&C)````Z!_-__]0C84`ZO__4.B7[?__:@!HE@```.@&S?__4(V%`.K_
+M_U#_-4R$1`#HW(T``%Z+Y5W#D%X100!($4$`;!%!`'D100"($4$`CQ%!`)81
+M00"@$4$`LA%!`+D100#`$4$`SQ%!`-@100#B$4$`N1-!`+D300"Y$T$`N1-!
+M`.P100"Y$T$`#!)!`!8200!.$D$`6!)!`&(200!T$D$`>!)!`'P200"&$D$`
+MC1)!`)0200"Y$T$`H1)!`*L200#IO\$``%6+[+@`%@``Z-?1``!35O]U"&B#
+M````Z$3,__]0O@`)``"-A0#J__]64.@4*___@\00C84`_/__N5`/1`!H``(`
+M`%#H%%K__X3`="96:!Q#0P"-A0#J__]0Z%_L__]6C84`_/__4(V%`.K__U#H
+M2^S___\5`#!#`&HU:)8```"+\.C:R___4(V%`.K__U#_-4R$1`#HL(P``(/X
+M!%8/E,/_%00P0P!>BL-;B^5=P@@`N``0``#H*M$``%-55HNT)!`0``!7:@)=
+MBX8P80``.\5U"#/`0.GV````@+Z(80````^%VP```(/X`0^$T@```(N<)!@0
+M``"-1"00OP`(``!74U#HW>O___^T)"P0``"-1"04_[0D+!```/^T)"P0``#_
+MM"0L$```5U#HS<```(OXA?]T!#O]=193Z`6/__\[_74,QX8P80```0```.M_
+M@_\#=0N)KC!A``#I<____X/_!'5:C40D$%#HSZC__XN\)!P0``"-3"005SO!
+MB\%04W4'Z"RI___K!>A7Z___4^B3C?__A,!T-O^T)"P0``#_M"0L$```_[0D
+M+!```/^T)"P0``!74U;H]/[__^L2B\?K#O^T)!@0``#H=H[__S/`7UY=6X'$
+M`!```,(<`%6+[/]U)/]U(/]U'/]U&/]U%/]U$/]U#/]U".B.P```7<(@`/]T
+M)`S_="0,:@#_="00Z*K```#"#`#IG)@``*!0A$0`PS+`PX!\)`0`_W0D"`^5
+MP(T$A50```!0Z$W!``#""`#IGL$``%-6BW0D$#/`5XM\)!BS`5=6:O__="0<
+M9HD&4%#_%10Q0P#WV!K`(L.%_W0',\EFB4Q^_E]>6\(,`%6+[(/L%%97C47L
+M,_905HOY_Q4,,4,`@WWL`0^7P(B'``$``%;_%1`Q0P"%P`^5P(@$/D:!_@`!
+M``!RZ%]>B^5=PU6+[%8S]CEU$'8HBU4(5XM]#"OZ#[9*`0^V`L'A"`/!9HD$
+M%V:%P'0)1H/"`CMU$'+B7XM%#%Y=P@P`BT0D#%-55HMT)!"-:/]7BWPD&+,!
+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
+MBY;<2P``.\IV)(N&Y$L``#O(=QIF@SD!=!HY401V#SE!!'<*5NBP5P``A,!U
+M#(/(_UY=PU;H;%8``+T`@```Z9P```"+CG!*``"+EGA*``"-!!$SP3T````!
+M<A([U7,Z]]F!X?]_``")CGA*``"+CHA*``#HTP(``(N.=$H``,&F>$H```C!
+MX0@+P<&F<$H```B)AG1*``#KJHN&1`8``/^&7`8``(M("(F.1`8``#N.W$L`
+M``^&<____SN.Y$L```^'9____P^W`3N&5`8``'3(5NA16```A,`/A$[___^+
+MEGA*``"+PHN.?$H```^OP0&&<$H``(N&@$H``"O!#Z_"B89X2@``@[Y0!@``
+M``^$+____X.^7`8```"+AE`&``!7#[8X=1F+0`([AMQ+``!V#HF&3`8``(F&
+M1`8``.L7B\[H/5(``("^;`H```!U!XO.Z,7\__^+CG!*``"+EGA*``"-!!$S
+MP3T````!<A([U7,Z]]F!X?]_``")CGA*``"+CHA*``#HOP$``(N.=$H``,&F
+M>$H```C!X0@+P<&F<$H```B)AG1*``#KJHO'7^E[_O__45-55HMT)!17B_F+
+MSNB$`0``B]C!Z`4D`8E$)!!T"XO.Z'`!``"+Z.L1@[^,2@```'4$,L#K9XML
+M)!#VPT!T#8O.Z$\!``"+3"0<B0%6C8]P2@``Z!X%``"`?"00`'0T@^,?C7,!
+M@_X0=@9K]@.#[B"-CXQ*``"#_@%U!^A7'0``Z["-10%0Z/`<``!6B\_H.AP`
+M`(._1`8````/E<!?7EU;6<((`%6+[(-]"!UT*8-]"#)U-(-Y'`%V$X"Y1$P`
+M``!U"O]U#.@4/0``ZQO_=0SHNS(``.L1@+E$3````'4(_W4,Z)`E``!=P@@`
+MBU0D!(N!6$P``('!9.8``%*)0ASH`Y3__\($`%56BW0D$%>+^0^V;#XI#[9$
+M/BH[Z'4&BT0D$.LU4XU&`5#HT/C__XO8A=MT(FO.#(MT)!115E/H9,L``(N$
+MK[@```"#Q`R)!HFTK[@```"+PUM?7EW""`!6BW0D"(V1@````#/`.S)R#4"#
+MP@2#^"!R\S/`ZQ.+A(&`````*\8[1"0,<@2+1"0,7L((`%:+\8M.!('YXG\`
+M`'X6B\[HZAT``(M.!('Y`(```'P$,\!>PXM&$`^V!`A!B4X$7L.#[`Q35HOQ
+M,]M7BX:P````.X:T````=`*(&(U$)`R+^U6)1"08C9:X````B40D%+W__P``
+MZRN+"HL!B0*-1"00B4$(BT0D%(E!!(M$)!2)2`B)3"049HDI#[9$/@1FB4$"
+M.1IUT4>#P@2#_R9\\XM4)!2-1"00.]!T2^LL#[=/`@^W0@(#R('Y```!`',H
+MBT\(BT<$B4$$BT\$BT<(B4$(9HM'`F8!0@(/MT(":_@,`_IF.2]TQHM2!(U$
+M)!`[T'7GBU0D%%WIB0```(M*"(M"!(E!!(M*!(M""(E!"`^W3P*!^8````!V
+M*(V1?____\'J!T)KPH`#R(N&3`$``(D'B;Y,`0``@<<`!@``@^H!=></MEP.
+M*0^V1!X$.\%T(0^V1!X#2XO1*]`KRFO)#(N$EK0````#SXD!B8R6M````(N$
+MGK@```")!XM4)!")O)ZX````C40D#(OZ.]`/A6G___]?7EN#Q`S#@^P84U6+
+MP5>)1"04Z&<6``"+;"0H,]LS_X7M='!6@_L@<W.+]3/2:B`K]UDKRXO&]_&Y
+M``!``(E$)!`[P7<&B\&)3"00._!R95;H?0H!`(E$)!A9A<!U#XO&P>@%*_`[
+M="00<^3K1U9J`%#HJ<<``(M,)"0#_HM$)""#Q`R)!)F)O)F`````0SO]<I)>
+M7UU;@\08P@0`._US\HU,)!SHCN[__V@$MT,`C40D(.L2C4PD'.AZ[O__:`2W
+M0P"-1"0@4.@KZ@``S(/L%%.+7"0<5XOYA=MU"KE0#T0`Z"5`__^X```$`#O8
+M<P:+V(E<)"`[G]CF```/AA,!``"`?"0D`'0E@[]`2P```'4)@+]$3````'03
+M@+]$3````,9$)`L!=`KI[P```,9$)`L`@+]$3````%5T!#/MZPU3Z(P)`0"+
+MZ%F%[75"@'PD#P`/A=P```"!^P````$/@M````"+AT!+``"%P'0.4.A9"0$`
+M@Z=`2P```%E3C8]$2P``Z'[^___&AT1,```!@+]$3````'5L4VH`5>A^Q@``
+M@\0,@'PD#P!T0H._V.8```%R.8U+_S/;B4PD$$-6BW=\BY?8Y@``*_.+AT!+
+M``!*(]8CSD.*!`*(!"F+3"04.Y_8Y@``=M>+7"0H7HN'0$L``(7`=`=0Z-`(
+M`0!9B:]`2P``C4/_B9_8Y@``B8?<Y@``75];@\04P@@`C4PD$.@2[?__:`2W
+M0P"-1"044.C#Z```C4PD%.CZ[/__:`2W0P"-1"084.BKZ```S(M$)`16B_%7
+M:@1?@V8$`(,F`(-."/^)1AB+3ACH_OO__XM.!,'A"`O(B4X$@^\!=>A?7L($
+M`%-6,]N+\5<X7"00=3>+^XF>Q.8``(F>U.8``#F>G.8``'8;BX:8Y@``:CC_
+M-+CHOK0``$=963N^G.8``'+EB9Z<Y@``B_LYGK#F``!V&XN&K.8``&HX_S2X
+MZ).T``!'65D[OK#F``!RY5^)GK#F``!>6\($`+B>(D,`Z(&T``!145-65XOY
+M,]LY7R!U&;X`!$``5N@'MP``5E-0B4<@Z/G$``"#Q!`Y7Q@/A;L```"+=QPS
+MR0/VNN1*``"+QHEU\/?B#Y#!]]D+R#/`@\$$#Y+`]]@+P5#HQ+8``%F)1>R)
+M7?R%P'0;:+`>00!HT!Q!`%:-6`2),&CD2@``4^@(M0``@TW\_VG&Y$H``(E?
+M&%!J`%/HA<0``(/$#(7V=$PSP(E%\(M?&`/8@[O42@```'4L:``,`P#'@]Q*
+M````00``Z`H'`0")@]1*``!9A<!U"KE0#T0`Z"X]__^+1?`%Y$H``(E%\(/N
+M`76YBTWT7UY;9(D-`````(OE7<-145-55E>+V3/`:)@```!0B40D'(V#N```
+M`(E<)!A0Z/W#``"+JZP```"#Q`R)JU`!``"+&XO#F8/B!P/",]+!^`-J#%GW
+M\3/2:_A4:@PKWXO#]_&-#"LSTD!K\`R+1"04B]@#]8F+7`$``(FP5`$``(FP
+ML````(O'7_?W:@1KP`Q:4ED#QHF#M````#/`0(A$`P-`@^H!=?9`B$0+!$&#
+MP`*#^0A\\T#K"(A$"P1!@\`#.\]\]$#K"(A$"P1!@\`$@_DF?/-JUS/`C7,J
+M7XB#J@```"O[O8`````/MDP#!#/2C00W.\B+1"04#YS"`\*(!D:)1"04@^T!
+M==]?7EU;65G#@>R(````C40D"%.+G"28````55:+M"2<````5VI`,_]74(D>
+MZ/7"``"+K"2H````@\0,B\^%VW00#[8$*8/@#_]$A!A!.\MR\(T$&XE\)!A0
+MC8:(#```5U#HP,(``(U61(E^!#/`B3J#Q`R+]T"+VHE$)!"+Z`-TK!AJ$%DK
+MS8O&T^`#]HE#Q(M$K!0#`T6)0P2-6P2#_1!RW&I`4HU$)&!0Z-?#``"+G"2P
+M````@\0,B[0DH````(O7BZPDG````(7;=""*!"HD#W04#[;(BT2,6&:)E$:(
+M#```0(E$C%A".]-RX('[*@$``'(<@?LK`0``=@B!^S(!``!U#,>&A`````H`
+M``#K"L>&A`````<```"+CH0````SP$"+T-/BB50D%(72=&^-KH@$``!J$%DK
+MCH0```"+U]/B@_@0<Q>-3@2-#($[$7()0(/!!(/X$'+SB40D$(B$/H@```"#
+M^!!S)"L4AFH062O(T^H#5(9$.]-S$F:+A%:(#```9HE%`(M$)!#K!C/)9HE-
+M`$>#Q0([?"04<I=?7EU;@<2(````P@P`@^P@BT0D)%-55HOQBXC42@``:X#8
+M2@``#%>)="04B4PD$`/!B40D'#O(#X/'````:@-;BX[<Y@``BY8\2P``B\(A
+M3GPK1GPCP3T$$```<S([5GQT+8O.Z"(9``"+AEQ,```[ADQ,```/C_($``!\
+M$HN&6$P``#N&2$P```^'W@0``(M,)!"#.0!U>&8Y601U)HN&V.8``(M6?(/H
+M!#O0<Q:+?"00BXY`2P``BT<(B00*@T9\!.LKBWPD$#/;BU9\(Y;<Y@``BXY`
+M2P``BD0?"(@$"O]&?$,/MT<$.]AVWFH#6XM$)!"#P`R)1"00.T0D'`^"//__
+M_[`!7UY=6X/$(,($`(,Y`0^%?@$``(M)"(M&:(M\)!")1FR+1F2)1FB+1F")
+M1F2)3F`/MT<$BTY\B^F)1G2+5P@KZHN&V.8```^W?P0%_.___SOH#X,!`0``
+M.\@/@_D```"+AD!+``"-'"B-+`B-!#F)1GP[UW-)@_\(<G*+S\'I`XH#@^\(
+MB$4`BD,!B$4!BD,"B$4"BD,#B$4#BD,$B$4$BD,%B$4%BD,&B$4&BD,'@\,(
+MB$4'@\4(@^D!=</K+H/_"'(IB\?!Z`.)1"08B_!J"%-5Z`K!``"#Q`R#PPB#
+MQ0B#[PB#[@%UYHMT)!2%_P^$\O[__XH#B$4`@_\!#X;D_O__BD,!B$4!@_\"
+M#X;5_O__BD,"B$4"@_\##X;&_O__BD,#B$4#@_\$#X:W_O__BD,$B$4$@_\%
+M#X:H_O__BD,%B$4%@_\&#X:9_O__BD,&B$4&Z8[^__^%_P^$B?[__XN>W.8`
+M`(N60$L``"/=BTY\18H$$X@$"HM&?(N>W.8``$`CPXE&?(/O`77:Z57^__\Y
+M&0^%AP$``(M1"(MLEF");"08A=)T$XUZ&(T\OHM'_(D'C7_\@^H!=?.);F`/
+MMT$$B49T#[=Y!(M.?(O9BX;8Y@``*]T%_.___SO8#X,$`0``.\@/@_P```"+
+MAD!+```#V(TL"(T$.8E&?#E\)!AS28/_"')RB\_!Z0.*`X/O"(A%`(I#`8A%
+M`8I#`HA%`HI#`XA%`XI#!(A%!(I#!8A%!8I#!HA%!HI#!X/#"(A%!X/%"(/I
+M`77#ZRZ#_PAR*8O'P>@#B40D&(OP:@A35>A]OP``@\0,@\,(@\4(@^\(@^X!
+M=>:+="04A?\/A&7]__^*`XA%`(/_`0^&5_W__XI#`8A%`8/_`@^&2/W__XI#
+M`HA%`H/_`P^&.?W__XI#`XA%`X/_!`^&*OW__XI#!(A%!(/_!0^&&_W__XI#
+M!8A%!6H#@_\&#X8,_?__BD,&B$4&Z0']__^%_P^$]_S__XNNW.8``(N60$L`
+M`"/KBTY\0XH$*H@$"HM&?(NNW.8``$`CQ8E&?(/O`77:Z<;\__^#.0(/A0$!
+M``"+?G2%_P^$M?S__XM.?(O9BX;8Y@``BU9@!?SO__\KVCO8#X.@````.\@/
+M@Y@```"+AD!+```#V(TL"(T$.8E&?#O7<U"#_P@/@@+___^+S\'I`XH#@^\(
+MB$4`BD,!B$4!BD,"B$4"BD,#B$4#BD,$B$4$BD,%B$4%BD,&B$4&BD,'@\,(
+MB$4'@\4(@^D!=</IN_[__X/_"`^"LO[__XO'P>@#B40D&(OP:@A35>@&O@``
+M@\0,@\,(@\4(@^\(@^X!=>;IA/[__X7_#X3M^___BZ[<Y@``BY9`2P``(^N+
+M3GQ#B@0JB`0*BT9\BZ[<Y@``0"/%B49\@^\!==KIO/O__X,Y!`^%MOO__XI!
+M!(A$)""+00B#P0R)1"0DB4PD$(I!!(A$)"R+00B+SHE$)"B-1"0@4.BMYO__
+MZ8+[__\RP.F2^___5E=J`8OQZ-+E__^+5@2+/HUT)`R#Q_#!X@0#^J6EI:5?
+M7L(0`(/L$%-55HMT)"`SVU>+?"0HB^F);"08B5\,.%X(=1V+A80```"#Z`<Y
+M!GX0Z`D0``"$P'4',L#I]````(M&!(O.]]B#X`=0Z(EO__^+SNB9;___P>@(
+MB\YJ"(E$)!CH<F___XM$)!0/MLB+P<'H`X/@`T")1"00@_@$=+F#X0>#P`)!
+MB4<,B4\$B\[H7&___\'H"(O.:@B)1"0@Z#5O__\Y7"00=CF+?"00B^N+SN@Y
+M;___P>@(B\W3X(/%"(M.!`/8@\$(B\&#X0?!Z`,!!HE.!(/O`775BWPD*(ML
+M)!B+5"04B\O!^1"+P\'X"#+(B1\RRS+*@/%:.DPD'`^%,____XL&B4<(C4C_
+MBX6(`````\L[P7P"B\&)A8@```"*PL#H!B0!P.H'B$<0L`&(5Q%?7EU;@\00
+MP@@`4U97B_F-=P2+SNBH;O__BTX$B]`RV_?"`(```'0%L@%!ZPK!Z@ZS`2+3
+M@\$"B\&`\@'!Z`.#X0<!!HE.!(B78>8``(3;=`9?7C+`6\.+SU]>6^GJ````
+M5HMT)`A7B_F`?@@`=1:+AX0```"#Z!`Y!GX)Z(D.``"$P'1=4U:+S^A9````
+MBUPD%(O/5HE#!.A*````N0``0``[R!O)]]$CR(E+"(O.Z`AN___!Z`V+SFH#
+MB`/HXVW__X`[`'48B\[H[FW__\'H"XO._L!J!8A##.C&;?__L`%;7U[""`!3
+M5HMT)`R+SE?HQVW__XM6!(OX@\("P>\.B\HSV\'I`X/B!P$.B58$@\<!="]5
+MB^N+SNB>;?__P>@(B\W3X(/%"(M.!`/8@\$(B\&#X0?!Z`,!!HE.!(/O`775
+M75]>B\-;P@0`@>RL`0``5HOQ5XN&A````(U^!(/H&3D'?@WH$0T``(3`#X0!
+M`P``BT8(B\_WV(/@!U#H(VW__XO/Z#-M__^I`(```'0BC8;$Y```QX9<Y@``
+M`0```%!6C8[8F```Z,CM___IP0(``%,SVXF>7.8``(F>T)@``(F>U)@``*D`
+M0```=15HE`$``(V&R.0``%-0Z-ZX``"#Q`QJ`HO/Z+EL__]5B\_HR&S__\'H
+M#(O/#[;`:@2)1"04Z)YL__^+1"00@_@/=3>+S^BE;/__P>@,B\]J!`^VZ.A_
+M;/__A>UU!\9$'!0/ZQJ#Q0)-@_L4<PK&1!P4`$.%[77P2^L$B$0<%$.#^Q1R
+MG&H4C:Y0/```B\Y5C40D'%#H.O7__S/;BX:$````@^@%.0=^#XO.Z/\+``"$
+MP`^$;@$``(O/Z#9L__^+T(N%A````('B_O\``#M4A01S*6H062O(T^H/MHPJ
+MB`````-/!(O!P>@#`0>#X0>)3P0/MXQ5B`0``.M@:@]90(E,)!`[P7,<C0R%
+M!`````/-.Q%R"T"#P02#^`]R\^L$B40D$(M/!`-,)!"+P8/A!\'H`P$'BT0D
+M$(E/!&H062M4A0`KR-/JBTR%1`/*.TT`&\`CP0^WC$6(#```@_D0<Q6*A#/(
+MY````L$D#XA$'"A#Z9,```"#^1)S2H/Y$(O/=1'H:6O__XOHP>T-@\4#:@/K
+M#^A8:___B^C![0F#Q0MJ!XO/Z#!K__^%VW1Y38'[E`$``'-?BD0<)XA$'"A#
+MA>UUZNL^B\]U$>@B:___B^C![0V#Q0-J`^L/Z!%K__^+Z,'M"8/%"VH'B\_H
+MZ6K__TV!^Y0!``!S',9$'"@`0X7M=>V-KE`\``"!^Y0!```/@H?^__^+!\:&
+M8>8```$[AH0```!^!#+`ZWMH*P$``(V&H````(O.4(U$)#!0Z)+S__]J/(V&
+MC`\``(O.4(V$)%L!``!0Z'KS__]J$8V&>!X``(O.4(V$))<!``!0Z&+S__]J
+M'(V&9"T``(O.4(V$)*@!``!0Z$KS__]HE`$``(U,)"Q1C8[(Y```4>BRMP``
+M@\0,L`%=6U]>@<2L`0``PXM$)`B![,P!``"`>!$`58OI=0>P`>F6`@``5HNT
+M)-@!``"`?@@`=1J+A80```"#Z!DY!GX-Z%0*``"$P`^$;0(``%<S_U.+SNCS
+M:?__P>@,B\YJ!`^VV.C-:?__@_L/=3>+SNC8:?__P>@,B\YJ!`^VV.BR:?__
+MA=MU!\9$/!@/ZQJ#PP)+@_\4<PK&1#P8`$>%VW7P3^L$B%P\&$>#_Q1RI(N<
+M).@!``"-1"08:A2!P[`[``"+S5-0B5PD(.AB\O__,_^`?@@`=1R+A80```"#
+MZ`4Y!GX/B\WHL`D``(3`#X1@`0``B\[H6&G__XO0BX.$````@>+^_P``.U2#
+M!',I:A!9*\C3Z@^VC!J(`````TX$B\'!Z`,!!H/A!XE.!`^WA%.(!```ZUMJ
+M#UE`B4PD$#O!<QF-2`&-#(L[$7(+0(/!!(/X#W+SZP2)1"00BTX$`TPD$(O!
+M@^$'P>@#`0:+1"00B4X$:A!9*Q2#*\C3ZHM,@T0#RCL+&\`CP0^WA$.(#```
+M@_@0<PJ(1#PL1^F/````B\Z#^!)S2(/X$'41Z)MH__^+V,'K#8/#`VH#ZP_H
+MBFC__XO8P>L)@\,+:@>+SNAB:/__A?]T>TN!_ZX!``!S6XI$/"N(1#PL1X7;
+M=>KK/'41Z%9H__^+V,'K#8/#`VH#ZP_H16C__XO8P>L)@\,+:@>+SN@=:/__
+M2X'_K@$``',:QD0\+`!'A=MU[8M<)!2!_ZX!```/@I7^___&A6+F```!@'X(
+M`'4.BP8[A80```!^!#+`ZV.+G"3H`0``C40D+&@R`0``4U"+S>C!\/__:D"-
+M@^P.``"+S5"-A"1F`0``4.BI\/__:A"-@]@=``"+S5"-A"2F`0``4.B1\/__
+M:BR-B\0L``!1C8PDM@$``%&+S>AY\/__L`%;7UY=@<3,`0``P@P`N+`B0P#H
+MXJ(``(/L((O!4U97C7@$B47LB\_H;&?__XM7!(/"",'H"(O*B47H:@=;P>D#
+MB_`!#R/3(_.)5P1&._-U(HO/Z$%G__^+3P2+\(/!",'N"(O!`_/!Z`,!!R/+
+MB4\$ZR"#_@AU&XO/Z!IG__^+5P2+\(/"$(O*P>D#`0\CTXE7!(7V=00RP.M]
+M5HU-U.B"T/[_,]N)7?R)7?"%]G1-BTWLBX&$````2#D'?!'HD`8``(3`=0B-
+M1O\Y1?!R/XO/Z,-F__^+5?"+3=3!Z`B(!!&+3P2#P0B+P8/A!\'H`P$'0HE/
+M!(E5\#O6<K.+3>Q6_W74_W7HZ(7=__^*V(U-U.A2TO[_BL.+3?1?7EMDB0T`
+M````B^5=P[C"(D,`Z,>A``"#[!Q35XOYZ(8"``"#R_^)1>P[PW4',L#IE0``
+M`%:+\(/F!T:#_@=U$(O/Z&("```[PW0KC7`'ZR*#_@AU'8O/Z$T"``"+\#OS
+M=!2+S^A``@``.\-T"<'F"`/PA?9U!#+`ZTY6C4W8Z(?/_O\SVXE=_(E=\(7V
+M=!^+S^@3`@``B]"#^O]T(8M%\(M-V(@4`4")1?`[QG+A5O]UV(O/_W7LZ+G<
+M__^*V(U-V.B&T?[_BL->BTWT7UMDB0T`````B^5=PU97B_DS]H,\MP!T#?\T
+MM^@[]```@R2W`%E&@_X@<N=?7L.#[!A35597B_&]``$``%4SVU.-AFP&``")
+M7"0@4.A=L0``@\0,C;Z,2@``B\_H+.W__XN&8`8``(/X#'P#:@Q8]]"+SXF&
+M:`8``.BRW___B89,!@``B89$!@``A<`/A#(!``")6`BY`0$``(N&8`8``(F&
+M7`8``(N&1`8``&B`````9HDHBX9$!@``9HE(`HO/Z*#?__^+CD0&``")002)
+MAE`&``"%P'47C4PD'.CEU___:`2W0P"-1"0@Z><```"+AF@&``"+TXF&9`8`
+M`(O+B)YM"@``BX9$!@``BT`$B!0!0HN&1`8``(M`!,9$"`$!BX9$!@``BT`$
+MB5P(`H/!!H'Y``8``'S-C89P"@``B_N)1"00O4A#0P"+V`^W10"-3P*9]_EJ
+M"(E$)!B+TUBY`$```"M,)!1FB0J-4A"#Z`%U[(/%`H/#`H']6$-#`'S+BT0D
+M$+F`````1P/!B40D$#OY?+"+7"08@\8#C4,":A!KR"A89L=&_P,$9HE._8/&
+M!(/H`77N0X/[&7S?7UY=6X/$&,.-3"0<Z/G6__]H!+=#`(U$)"!0Z*K2``#,
+M4U97B_F-G]B8``"+R^BVXO__B_"#_O]U#HO+Z*G@__^#IUSF````7XO&7EO#
+MN-PB0P#H_IX``%&+10A6B_&#^`AR`VH(6&@X`P``B48<Z*">``!9B\B)3?`S
+MP(E%_(7)=`C_=ASH#,/__XM-](E&%%YDB0T`````B^5=P@0`BT0D"(M4)`Q3
+M5XOY#[9<."D/MDPZ*3O9=0:+1"0,ZU!5BZR/N````(7M=#*+10")A(^X````
+M:\(,5HMT)!105E7H;;```(N,G[@```"#Q`R)#HO%B;2?N````%[K$5%3_W0D
+M&(O/Z`H```"+1"0075];P@P`BT0D#%:+\5</ME0P!(M$)!`/MGPP!"OZ:](,
+M#[9,-RD#5"0,#[9$,00[QW0<BX2.M````(D"B92.M`````^V3#$#:\$,`]`K
+M^0^V3#<I7XN$CK@```")`HF4CK@```!>P@P`BT0D!%-6B_$SVT-7B)YL"@``
+MB89@!@``Z-_\__]J"8V&;@@``&;'AFP(`````FH$4.A%K@``:/4```"-AG<(
+M``!J!E#H,JX``(/$&#/`B(0&;`<``$"#^`-\\XO(B]._``$``.L1B(P&;`<`
+M`(/J`74$0T&+TT`[QWSK:D"-AFP)``!J`%#H\*T``&C`````C8:L"0``:@A0
+MZ-VM``"#Q!C&AD(&```'7UY;P@0`5HMT)`A7B_G!YA0Y-W4$L`'K1%/H0P``
+M`&H,63/2B\;W\8/``FO8#%/H4O```(F'K````%F%P'4.N5`/1`#H=B;__S+`
+MZP^#P/2)-P/#B8=8`0``L`%;7U["!`"#.0!T#_^QK````(,A`.@,\```6<-3
+M,]M6B_$X7"0,=2MHE`$``(V&R.0``(B>8>8``%-0Z#BM``"#Q`S'AL3D```"
+M````B9Y<Y@``_W0D#(O.Z'[G__^(GD5,``!>6\($`(!\)`0`=0?&@6+F````
+MP@0`5C/25XOY.%0D#'56:A!2C4=@4.CFK```,\!HG$H``%")1W")1W2)1WB-
+MAZ````!0Z,FL``"+C]CF```STK@``$``B9>`````@\08B5=\.\AR`HO(BX?<
+MY@``(\&)ASQ+``!J%(E74(VWC````(E7"(E7!%)6B9=83```B9=<3```B9>$
+M````B9>(````Z&RL``"##O^#Q`PSP(O/B(=%3```_W0D#.CW_O___W0D#(O/
+MZ#G___]?7L($`%:+\5>+CH0```"+^8M&!"OX>00RP.MU/0!```!^((7_?A"+
+M3A`#P5=04>@TT0``@\0,@V8$`(F^A````.L"B_F+#K@`@```*\=0BT80`\=0
+MZ&Z"__^+T(72?@8!EH0```"`OD5,````BX:$````C4CBB8Z(````=`L%#/[_
+M_XF&B````#/`@_K_#Y7`7U[#5HOQ5XN.A````(OYBU8$*_IY!S+`Z;,```"+
+MAI0````KP@&&C````%,SVX'Z`$```'X@A?]^$8M.$%>-!!%04>B/T```@\0,
+MB5X$B;Z$````ZP*+^;@`@```._AT'(L.*\=0BT80`\=0Z,:!__^+V(7;?@8!
+MGH0```"`OD5,````BX:$````C4CBB8Z(````=`L%#/[__XF&B````(N.C```
+M`(M&!(F&E````(/Y_W052`/(BX:(````.\%\`HO!B8:(````@_O_6P^5P%]>
+MPU-5BVPD#(O95XM\)!0[_700QH-23````7,'QH-13````8"[1$P```!T1BO]
+M([O<Y@``=G.-@T1+``!65U6+R.BXX/__B_"-BT1+``!65>ANT___4(O+Z%P%
+M```#[HV#1$L``".KW.8``"O^=<Y>ZS<[_7,BBX/8Y@``*\50BX-`2P```\50
+MZ"P%``!7_[-`2P``B\OK#(N#0$L``"O]5P/%4.@0!0``7UU;P@@`@^P44U56
+M5XOY,]N+3WR+KX`````KS2./W.8``#F?L.8```^&SP$``(N'K.8``(L$F(E$
+M)!2%P`^$K0$``(!X"`!T"<9`"`#IG@$``(L0BT`$B[?<Y@``B40D'(O"*\6)
+M5"08(\8[P0^#?0$``#OJ=!Q258O/Z-G^__^+5"08B^J+3WR+M]SF```KRB/.
+MBT0D'#O!#X>2`0``C2P0(^Z);"0@.]5R+87M="F+M]CF``"-CV3F``"+AT!+
+M```K\E8#PE!J`.BM>O__5?^W0$L``%;K#%"+AT!+```#PE!J`(V/9.8``.B,
+M>O__BW0D%(O/@\805NCBWO__BT8@BW8DB40D%(N'K.8``&HXB70D%/\TF.AU
+MF```BX>LY@``65F-2P&#))@`B4PD'#N/L.8```^#B0```(ML)!B+AZSF``"+
+M=)@$A?9T;SDN=6N+1"00.48$=6*`?@@`=5Q0_W0D&(V/9.8``&H`Z`EZ__^#
+MQA"+SU;H8][__XM&((M<)!R+=B2)1"04BX>LY@``:CB)="04_S28Z/*7``"+
+MAZSF``!968,DF`"-0P&)1"0<.X>PY@``<H7K!(MT)!"+;"0@BP]6_W0D&.C1
+M@/__`;=83```BT]\@Y=<3````"O-(X_<Y@``QH=23````4,[G[#F```/@C'^
+M____=WR+SU7H4?W__XM'?(F'@````%]>75N#Q!3#BX>LY@``BP28A<!T"H!X
+M"`!T!,9`"`!#.Y^PY@``<N")KX````#KT(/L)%.+V3/)5597BZN`````B_&+
+M>WPK_8EL)"0CN]SF``"+UXE\)""(3"03B70D,#E+4`^&V0$``(E,)!B+0TP#
+M1"08B40D+(`X"`^$@0$``(!X#0!T(XM`!"N#@````".#W.8``#O'#X=D`0``
+MBT0D+(A(#>E8`0``BW@$BT`(B40D%(O'*\4C@]SF```[P@^#.`$``#OO=!Q7
+M58O+Z'7\__^+4WR+[RO7B6PD)".3W.8``#/)BT0D%#O"#X<E`0``A<`/A`0!
+M``"-+#@CJ]SF``"-2R10B6PD*.CET/[_BTLDB4PD'#O]<F*%[71>BX/8Y@``
+M*\>`NT1,````B40D*%!T'U>-LT1+``!1B\[H)-C__XM$)"B+S@-$)!Q5:@!0
+MZS^+@T!+```#QU!1Z"FH``"+1"0T`T0D*%7_LT!+``!0Z!2H``"#Q!CK+X"[
+M1$P```"+1"044'0/5U&-BT1+``#HT-?__^L2BX-`2P```\=04>CCIP``@\0,
+MBT0D+(O+BWPD%%!7_W0D).@DUO__BTM,BU0D&,8$"@B%P'0)BPM74.BX?O__
+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
+M1G0"````:@)=._AS(SO0<Q^+CD!+``"-0@*)1GR*!`^(!!&*1`\!B$01`>GS
+M\___BX[<Y@``BY9`2P``B\<CP8M.?$>*!!"(!`J+1GR+CMSF``!`(\&)1GR#
+M[0%UV.G`\___QH9@3````.L5B\_HR,C__X.F7.8```"+SNB+[?__7UY=6X/$
+M$,($`(/L(%-6B_%7B70D$("^4$P```#&AF!,```!=5?_="0PZ)7J__^+SNC8
+MZ___A,`/A#T&``"-OHP```"+SE>-7@13Z(3;__^$P`^$(P8``(V&H````(O.
+M4%=3Z!CA__^$P`^$"P8``("^8N8````/A/X%``"-5GQ5B50D'.F["0``C59\
+MBX;<Y@``(0*+10`[AH@```!\:HV^C````(N&E````$@#!SE%`'\-=4*+1@@[
+MAI````!\-X"^G``````/A:4%``!758O.Z/W:__^$P`^$FP4``(V&H````(O.
+M4%=5Z)'@__^$P'6SZ8(%``"+SN@/Z___A,`/A&P%``"-5GR+CCQ+``"+P2L"
+M(X;<Y@``/000``!S/CL*=#J+SNB:[O__BX9<3```.X9,3```#X\\!0``?!*+
+MAEA,```[ADA,```/AR@%``"`OE!,````#X7N"```B\WH7TK__XO0BX8D`0``
+M@>+^_P``.Y2&I````',J:A!9*\C3Z@^VC#(H`0```TT$B\'!Z`,!10"#X0>)
+M300/MYQ6*`4``.M;:@]?0#O'<Q>-2"F-#(X[$7(+0(/!!(/X#W+SZP*+^(M-
+M!`//B\&#X0>)303!Z`,!10`KE+Z@````:A!9*\_3ZHN,ON0````#RCN.H```
+M`!O`(\$/MYQ&*`T``('[``$``',Z@+Y$3````'0<BTY\48U!`8V.1$L``(E&
+M?.AWOO__B!CI6_[__XN.0$L``(U6?(L"B!P!_P+I2?[__X'[!@$```^"]@,`
+M`(V[^O[__X/_"',$,]OK$(O?@^<#P>L"@\\$2XO+T^>#QP*%VW0CB\WH2$G_
+M_VH062O+T^B+300#^`/+B\'!Z`,!10"#X0>)302+S>@E2?__B]"+AA`0``"!
+MXO[_```[E(:0#P``<RIJ$%DKR-/J#[:,,A00```#302+P<'H`P%%`(/A!XE-
+M!`^WA%84%```ZUYJ#UM`.\-S&HV(Y`,``(T,CCL1<@M`@\$$@_@/<O/K`HO8
+MBTT$`\N+P8/A!XE-!,'H`P%%`"N4GHP/``!J$%DKR]/JBXR>T`\```/*.XZ,
+M#P``&\`CP0^WA$84'```#[?`@_@$<P0S[>L/B^B#X`'1[8/(`DV+S=/@0(E$
+M)!B+V(E<)!"%[0^$[@```(/]!`^"0`$``'8QC4X$Z.PA``!J)(O862O-T^N-
+M3?P#3@B-;@2+P<'C!`-<)!C!Z`,!10"#X0>)303K`XUN!(O-Z!)(__^+T(N&
+M_!X``('B_O\``#N4AGP>``!S*FH062O(T^H/MHPR`!\```--!(O!P>@#`44`
+M@^$'B4T$#[>$5@`C``#K7FH/74`[Q7,:C8B?!P``C0R..Q%R"T"#P02#^`]R
+M\^L"B^B+3@@#S8O!@^$'B4X(P>@#`48$*Y2N>!X``&H062O-T^J+C*Z\'@``
+M`\H[CG@>```;P"/!#[>$1@`K```/M\`#V(E<)!"-;@2!^P`!``!V$T>!^P`@
+M``!V"D>!^P``!`!V`4>+1FB)1FR+1F2)1FB+1F")1F2)7F"`OD1,````B7YT
+M=%#_MMSF``"-3GQ14U>-CD1+``#H@<3__^G4^___C4X$Z*X@``!J((O862O-
+MT^N+3@@#7"08`\V+P8E<)!#!Z`.-;@0!10"#X0>)303I=/___XN&V.8``(U6
+M?(L*!?SO__^+Z2OK.^@/@P8!```[R`^#_@```(N&0$L``(T<*(TL"(T$.8D"
+M.7PD$'-)@_\(<G:+S\'I`XH#@^\(B$4`BD,!B$4!BD,"B$4"BD,#B$4#BD,$
+MB$4$BD,%B$4%BD,&B$4&BD,'@\,(B$4'@\4(@^D!=</K,H/_"'(MB\?!Z`.)
+M1"08B_!J"%-5Z)N3``"#Q`R#PPB#Q0B#[PB#[@%UYHMT)!2+5"0<A?\/A)T$
+M``"*`XA%`(/_`0^&CP0``(I#`8A%`8/_`@^&@`0``(I#`HA%`H/_`P^&<00`
+M`(I#`XA%`X/_!`^&8@0``(I#!(A%!(/_!0^&4P0``(I#!8A%!8/_!@^&1`0`
+M`(I#!HA%!NDY!```A?\/A#$$``"+GMSF``"+ED!+```CW8M.?$6*!!.(!`J-
+M5GR+`HN>W.8``$`CPXD"@^\!==GI_P,``('[``$``'4VC40D((O.4%7H"M?_
+M_X3`=!2-1"0@B\Y0Z.6[__^$P`^%%_K__XO.Z$SI__]=7UY;@\0@P@0`@?L!
+M`0``#X67`0``BWYTC59\A?\/A._Y__^`OD1,````=!+_MMSF``"-3GQ1_W9@
+MZ>S]__^+3GR+V8N&V.8``(M68`7\[___*]H[V`^#%P$``#O(#X,/`0``BX9`
+M2P```]B-+`B-!#F)1GP[UW-(:@A:._IR;XO/P>D#B@,K^HA%`(I#`8A%`8I#
+M`HA%`HI#`XA%`XI#!(A%!(I#!8A%!8I#!HA%!HI#!P/:B$4'`^J#Z0%UQNLN
+M@_\(<BF+Q\'H`XE$)!B+\&H(4U7HSI$``(/$#(/#"(/%"(/O"(/N`77FBW0D
+M%(U6?(7_#X31`@``B@.-5GR(10"#_P$/AL`"``"*0P&-5GR(10&#_P(/AJX"
+M``"*0P*-5GR(10*#_P,/AIP"``"*0P.-5GR(10.#_P0/AHH"``"*0P2-5GR(
+M102#_P4/AG@"``"*0P6-5GR(106#_P8/AF8"``"*0P:(10:-;@3IG?C__X7_
+M#X25^/__BZ[<Y@``BY9`2P``(^N+3GQ#B@0JB`0*C59\BP*+KMSF``!`(\6)
+M`H/O`779Z1X"``"!P_[^__^-2QB-#(Z+$8E4)!AT#8M!_(D!C4G\@^L!=?.+
+MS8E68.AS0___B]"+AN@M``"!XO[_```[E(9H+0``<RIJ$%DKR-/J#[:,,NPM
+M```#302+P<'H`P%%`(/A!XE-!`^WA%;L,0``ZUYJ#U]`.\=S&HV(6@L``(T,
+MCCL1<@M`@\$$@_@/<O/K`HOXBTT$`\^+P8/A!XE-!,'H`P%%`"N4OF0M``!J
+M$%DKS]/JBXR^J"T```/*.XYD+0``&\`CP0^WA$;L.0``#[?X@_\(<P0SV^L0
+MB]^#YP/!ZP*#SP1+B\O3YX/'`H7;=".+S>BJ0O__:A!9*\O3Z(M-!`/X`\N+
+MP<'H`P%%`(/A!XE-!("^1$P```"+5"08B7YT=!#_MMSF``"-1GQ04NE.^___
+MBTY\B]F+AMCF```KV@7\[___.]@/@Y\````[R`^#EP```(N&0$L```/8C2P(
+MC00YB49\.]=S3VH(6COZ#X+0_?__B\_!Z0.*`ROZB$4`BD,!B$4!BD,"B$4"
+MBD,#B$4#BD,$B$4$BD,%B$4%BD,&B$4&BD,'`]J(10<#ZH/I`77&Z8S]__^#
+M_P@/@H/]__^+Q\'H`XE$)!B+\&H(4U7H*(\``(/$#(/#"(/%"(/O"(/N`77F
+MZ57]__^%_P^$<O;__XNNW.8``(N60$L``"/KBTY\0XH$*H@$"HU6?(L"BZ[<
+MY@``0"/%B0*#[P%UV8UN!.E`]O__QH9@3````.DA_/__@>PD`@``4U565XO9
+MZ#'(____M"0X`@``B\OH3.#__XM#'#/2`\!T'S/)BT,8C8GD2@``0L9$".T`
+MQD0([P"+0QP#P#O0<N.+>QB-@Z````!J!5EHG$H``%"-LXP```"#QQCSI8M#
+M&(/`,%#H68X``#/`@\0,,_:)1"0H,^V(1"03B6PD&(A$)!*+"[@``$``*\:#
+MX/!0BT,@`\90Z$AC__^)1"0LA<`/B#8#```#\(ET)"`/A"H#``"%P`^.7`(`
+M`('^``0``'S`Z4\"``"+0QPSR2%,)!2)3"0<`\`/A!0!``"+5"08,^V+>Q@#
+M_8E,)"B`O]-*````B1]T"(FWS$H``.L\BT,@C4\$`\)0Z!9`__^+="0@,\F+
+MQHE/""M$)!B)3P2)A\Q*```/A,8```"(C]!*``"(3Q2(3RR+3"0<@WPD+`#&
+MA]-*````#Y3`B8_@2@``@'\4`(B'TDH``'4QC4<8QD<4`5"-1P2+RU#H!M#_
+M_X3`='F`?RD`=0F`NV+F````=&J+3"0<QH-BY@```8!\)!,`=0^!?Q@```(`
+M?P;_1"04ZPS&A]%*```!QD0D$P&+1R2!Q>1*```#1QB+5"08`]!!B\:)5"08
+M*\*)3"0<>`:`?R@`=1L]``0``'P4BT,<`\`[R`^"^?[__^L%QD0D$@&+3"04
+M,]*+P?=S'(OXA=)T`4<S[87)=&0STHUT)#1IQ^1*``")5"0DB40D,(M$)!2+
+MS@-3&"O%@\8(B1$[^',"B\>#?"0<`8E!!'4*4HO+Z.H!``#K#E&+2Q1HT')!
+M`.CJG___BU0D)`/O`U0D,(E4)"0[;"04<K2+="0@BVPD'(7M#X15`0``BTL4
+MZ`.B__\SP(E$)!2%[71J,_^+:Q@#[X"]T4H```!U&56+R^A&R?__A,`/A#(!
+M``"`O=%*````=!!5B\OHM@<``(3`#X09`0``@+W02@````^%#`$``("]TTH`
+M``!U4H!]*`!U1(M$)!2!Q^1*``!`B40D%#M$)!QRF(I$)!*$P`^%W````(ML
+M)!@K]8'^``0```^,I0```(MT)"`[[@^,J?W__^E?_?__L`&(1"02Z\V+11"+
+M2R`KP0-%!#OP#XZ>````*_`#P59048ET)"SH-*\``(M%((/$#"M%!`%%&(-E
+M)`"#92``BT,@@V4$`(E%$(M$)!2%P'0[BT,8:.1*``!54(NPU$H``(NXW$H`
+M`.@SBP``BT,8B;#42@``BT,8BW0D+(FXW$H``,:%TTH```"#Q`PS[8EL)!CK
+M&H7V>"%^\HM+(%:-!"E04>BWK@``Z]^+;"08@'PD$@`/A*;\__^+@]SF``"+
+MRR%#?.AZX?__:50D*.1*``"-NXP```"+0QAJ!5EHG$H``(UR&(/",`/P`\)0
+MC8.@````\Z50Z*2*``"#Q`Q?7EU;@<0D`@``P@0`@^PL55:+="0XB^F);"08
+M@'XL`'4EC48PQD8L`5"-1AA0C48$4.C(TO__A,!U#,:&T$H```'IR`4``(M&
+M)(M.&`/!5XU^!#D'?@S&AM!*```!Z:L%``"+1B"+ELQ*``!(@Z;82@````/!
+M@^H0B40D&(E4)!13B]@[PGP"B]J)7"00BP\[RWPS.\@/CW$%``!U#(M&"#M&
+M'`^-8P4``#O*?`V`OM)*````#X1+!0``.X[,2@``#XT_!0``BX[<2@``C4'X
+M.8;82@``=C"-!`F)AMQ*``!KP`Q0_[;42@``Z`_+``"+V%E9A=MU"KE0#T0`
+MZ"L!__^)GM1*``"+AMA*``"+SVO8#`.>U$H``$")7"0HB8;82@``Z!L\__^+
+MT(N&M````('B_O\``#M4AC1S*6H062O(T^H/MHPRN`````-/!(O!P>@#`0>#
+MX0>)3P0/MXQ6N`0``.M5:@]=0#O%<Q>-3C2-#($[$7(+0(/!!(/X#W+SZP*+
+MZ(M/!`/-B\&#X0>)3P3!Z`,!!RM4KC!J$%DKS=/JBTRN=(ML)"`#RCM.,!O`
+M(\$/MXQ&N`P``+@``0``.\AS3(.^V$H```%V-8-[]`!U+P^W0_AJ`UIF.\)S
+M(T!FB4/X#[?`B$P8_/^.V$H``(M4)!B+1"0<BUPD$.F,_O__@R,`,\"(2PAF
+MB4,$Z^&!^08!```/@FT"``"-@?K^__^#^`AS!#/;ZQ*+V&H#P>L"62/!2X/(
+M!(O+T^"-:`*);"04A=MT)HO/Z/4Z__]J$%DKR]/HBT\$`^@#RXEL)!2+P<'H
+M`P$'@^$'B4\$B\_HSSK__XO0BX:@#P``@>+^_P``.Y2&(`\``',I:A!9*\C3
+MZ@^VC#*D#P```T\$B\'!Z`,!!X/A!XE/!`^WA%:D$P``ZUUJ#UM`.\-S&HV.
+M(`\``(T,@3L1<@M`@\$$@_@/<O/K`HO8BT\$`\N+P8/A!XE/!,'H`P$'*Y2>
+M'`\``&H062O+T^J+C)Y@#P```\H[CAP/```;P"/!#[>$1J0;```/M\"#^`1S
+M!#/;ZP^+V(/@`='K@\@"2XO+T^!`B40D)(OHA=L/A`@!``"#^P0/@MD```!V
+M+(O/Z)T3``!J)(OH62O+T^V+3P2#P?S!Y00#;"0D`\N+P<'H`P$'@^$'B4\$
+MB\_HRCG__XO0BX:,'@``@>+^_P``.Y2&#!X``',I:A!9*\C3Z@^VC#*0'@``
+M`T\$B\'!Z`,!!X/A!XE/!`^WA%:0(@``ZUUJ#UM`.\-S&HV.#!X``(T,@3L1
+M<@M`@\$$@_@/<O/K`HO8BT\$`\N+P8/A!XE/!,'H`P$'*Y2>"!X``&H062O+
+MT^J+C)Y,'@```\H[C@@>```;P"/!#[>$1I`J```/M\`#Z.LFB\_HQA(``&H@
+MB^A9*\O3[8M/!`-L)"0#RXO!P>@#`0>#X0>)3P2!_0`!``!V(XM$)!1`B40D
+M%(']`"```'820(E$)!2!_0``!`!V!4")1"04BT0D*(M,)!3'``$```!FB4@$
+MB6@(Z6@!```[R'5/C40D+(O-4%?H2LK__P^V1"0L9HE#!(M$)#")0PAJ!%J)
+M$XN&V$H``&O(#`..U$H``$")AMA*```/MD0D.&:)002+1"0TB1&)00CI%?W_
+M_X'Y`0$``'4+QP,"````Z0+]__]J`UB)`XV!_O[__XO/B4,(Z$`X__^+T(N&
+M>"T``('B_O\``#N4AO@L``!S*6H062O(T^H/MHPR?"T```-/!(O!P>@#`0>#
+MX0>)3P0/MX16?#$``.M=:@];0#O#<QJ-CO@L``"-#($[$7(+0(/!!(/X#W+S
+MZP*+V(M/!`/+B\&#X0>)3P3!Z`,!!RN4GO0L``!J$%DKR]/JBXR>."T```/*
+M.X[T+```&\`CP0^WA$9\.0``#[?8@_L(<P6#PP+K.XOK:@/![0)8(]A-@\L$
+MB\W3XX/#`H7M="*+S^AV-___:A!9*\W3Z(M/!`/8`\V+P<'H`P$'@^$'B4\$
+MBT0D*&:)6`2+5"08BT0D'(M<)!"+;"0@Z8CZ___&AM-*```!6U]>78/$+,($
+M`,S,S,S,S,S,S,Q65XM\)`PS]CEW!'8=4XO>BP^-!`N+"5#HS_G__T:-F^1*
+M```[=P1RYUM?7L($`(/L*%97BWPD-(OQ@'\L`'4GC4<PQD<L`5"-1QA0C4<$
+M4.B)S/__A,!U#L:'T$H```$RP.GA!0``BT<DBT\8`\$Y1P1_Y5.+G\Q*``!5
+MC6G_@^L0`V\@B6PD%(E<)!");"0@.^M\!(E<)""-1P3K"(M<)!"+;"04BY;<
+MY@``(59\BP@[3"0@?#,[S0^/A04``'4,BT<(.T<<#XUW!0``.\M\#8"_TDH`
+M```/A+4(```[C\Q*```/C:D(``"+CCQ+``"+P2M&?"/"/000``!S,CM.?'0M
+MB\[H&MK__XN&7$P``#N&3$P```^/@P@``'P2BX983```.X9(3```#X=O"```
+MC6\$B\WHZ37__XO0BX>T````@>+^_P``.U2'-',V:A!9*\C3Z@^VC#JX````
+M`TT$B\'!Z`,!10"#X0>-1P2)2`0/MY17N`0``.M>BUPD$.DB____:@];0#O#
+M<Q>-2`V-#(\[$7(+0(/!!(/X#W+SZP*+V(M-!`/+B\&#X0>)303!Z`,!10`K
+M5)\P:A!9*\O3ZHM,GW0#RCM/,!O`(\$/MY1'N`P``(U'!+D``0``.]%S%XM&
+M?(N.0$L``(@4`?]&?(U'!.FE_O__@?H&`0``#X(6!```C9KZ_O__@_L(<P0S
+M[>L0B^N#XP/![0*#RP1-B\W3XX/#`H7M="B+R.CQ-/__:A!9*\W3Z(M/"`/8
+M`\V-;P2+P<'H`P%%`(/A!XE-!.L#C6\$B\WHQC3__XO0BX>@#P``@>+^_P``
+M.Y2'(`\``',J:A!9*\C3Z@^VC#JD#P```TT$B\'!Z`,!10"#X0>)300/MX17
+MI!,``.M>:@]=0#O%<QJ-B,@#``"-#(\[$7(+0(/!!(/X#W+SZP*+Z(M/"`/-
+MB\&#X0>)3PC!Z`,!1P0KE*\<#P``:A!9*\W3ZHN,KV`/```#RCN/'`\``!O`
+M(\$/MX1'I!L```^WT(/Z!',$,\#K#XO"@^(!T>B#R@)(B\C3XHE$)!B-2@&)
+M3"0DB^F);"0<A<`/A"L!``"#^`0/@O(```!V-(U/!.B'#0``BU0D&(OH:B19
+M*\K3[8U*_`-/"(U7!(O!P>4$`VPD),'H`P$"@^$'B4H$ZP.-5P2+RNBJ,___
+MB]"+AXP>``"!XO[_```[E(<,'@``<RIJ$%DKR-/J#[:,.I`>```#3PB+P<'H
+M`P%'!(/A!XE/"`^WA%>0(@``ZVIJ#UE`B4PD&#O!<QR-B(,'``"-#(\[$7(+
+M0(/!!(/X#W+SZP2)1"08BT\(`TPD&(O!@^$'P>@#`4<$BT0D&(E/"&H062N4
+MAP@>```KR-/JBXR'3!X```/*.X\('@``&\`CP0^WA$>0*@``#[?``^CK+(U/
+M!.B7#```:B"+Z%DK3"08T^V+3P@#3"08`VPD)(O!P>@#`4<$@^$'B4\(B6PD
+M'(']``$``'830X']`"```'8*0X']```$`'8!0XM&:(E&;(M&9(E&:(M&8(E&
+M9(EN8(M6?(O*BX;8Y@``*\T%_.___XE>=(E,)"0[R`^#*P$``#O0#X,C`0``
+MBX9`2P``C2P(C0P0C00:B4PD)(E&?#E<)!QS28/["')ZB]/!Z@.*10"#ZPB(
+M`8I%`8A!`8I%`HA!`HI%`XA!`XI%!(A!!(I%!8A!!8I%!HA!!HI%!X/%"(A!
+M!X/!"(/J`77#ZS:#^PAR,8O#P>@#B40D'(OX:@A54>A.?P``BTPD,(/$#(/!
+M"(/%"(/K"(E,)"2#[P%UWHM\)#R-1P2%VP^$1/O__XI%`(@!C4<$@_L!#X8S
+M^___BD4!B$$!C4<$@_L"#X8A^___BD4"B$$"C4<$@_L##X8/^___BD4#B$$#
+MC4<$@_L$#X;]^O__BD4$B$$$C4<$@_L%#X;K^O__BD4%@_L&BUPD$(A!!8U'
+M!`^&V?K__XI%!HA!!HU'!.G+^O__BVPD%(U'!(7;#X25^___BZ[<Y@``BWPD
+M)(N60$L``"/OBTY\1XH$*H@$"HM&?(NNW.8``$`CQ8E&?(/K`77:Z6\#```[
+MT74QC4PD*%%0B\[HE\+__X3`=!2-1"0HB\Y0Z'*G__^$P`^%K?O__[`!75M?
+M7H/$*,($`('Z`0$```^%%@$``(M>=(ML)!2%VP^$$/O__XM&8(M6?(OJ*^B)
+M1"0<BX;8Y@``!?SO__\[Z`^#J@```#O0#X.B````BX9`2P```^B-#!"-!!J)
+M3"0DB49\.5PD''-0@_L(#X*7_O__B]/!Z@.*10"#ZPB(`8I%`8A!`8I%`HA!
+M`HI%`XA!`XI%!(A!!(I%!8A!!8I%!HA!!HI%!X/%"(A!!X/!"(/J`77#Z5#^
+M__^#^P@/@D?^__^+P\'H`XOX:@A54>AH?0``BTPD,(/$#(/!"(/%"(/K"(E,
+M)"2#[P%UWND5_O__C4<$A=L/A%WY__^+OMSF``"+ED!+```C_8M.?$6*!!>(
+M!`J+1GR+OMSF``!`(\>)1GR#ZP%UVND8`@``@<+^_O__C4Y@C0R1BQF)7"0D
+M=`V+0?R)`8U)_(/J`77SC6\$B5Y@B\WH@R___XO0BX=X+0``@>+^_P``.Y2'
+M^"P``',J:A!9*\C3Z@^VC#I\+0```TT$B\'!Z`,!10"#X0>)300/MX17?#$`
+M`.M>:@];0#O#<QJ-B#X+``"-#(\[$7(+0(/!!(/X#W+SZP*+V(M-!`/+B\&#
+MX0>)303!Z`,!10`KE)_T+```:A!9*\O3ZHN,GS@M```#RCN/]"P``!O`(\$/
+MMX1'?#D```^WV(/["',$,^WK$(OK@^,#P>T"@\L$38O-T^.#PP*%[70DC4\$
+MZ+DN__]J$%DKS=/HBT\(`]@#S8O!P>@#`4<$@^$'B4\(BU9\B^J+AMCF```K
+M;"0D!?SO__^)7G0[Z`^#K@```#O0#X.F````BX9`2P```^B-#!"-!!J)3"0<
+MB49\.5PD)'-0@_L(#X)^_/__B]/!Z@.*10"#ZPB(`8I%`8A!`8I%`HA!`HI%
+M`XA!`XI%!(A!!(I%!8A!!8I%!HA!!HI%!X/%"(A!!X/!"(/J`77#Z3?\__^#
+M^P@/@B[\__^+P\'H`XE$)"2+^&H(55'H2WL``(M,)"B#Q`R#P0B#Q0B#ZPB)
+M3"0<@^\!==[I^/O__XU'!(7;#X1`]___B[[<Y@``BY9`2P``(_V+3GQ%B@07
+MB`0*BT9\B[[<Y@``0"/'B49\@^L!==J+?"0\Z5[X___&A]-*```!Z:7\__\R
+MP.F@_/__@^P<4U56B_$S[5<S_T6+AE`&``"+$&:+0`2)5"0DP>H(9HE$)"B`
+M^A]S;8N&1`8``(M8"(7;=&!F.2MT3HM[!(I$)"0X!W0PB^^#QP8X!W7WBD<!
+M.D?[<AR+1_J+#V:+5P2)!V:+1_YFB4<$B4_Z9HE7_HO],^U%BD<!/'-S&00"
+MB$<!9H-#`@+K#8U[`H!_`2`/DL``1P&#OEP&````=3A758O.Z).J__^+CE`&
+M``")00*)ADP&``")AD0&``"%P'4.B\[H,<?__\:&;`H```!?7EU;@\0<PXN&
+MW$L``(I,)"2("(NNW$L``$6)KMQ+```[KNA+``!SR8M<)":%VW0X.]UW$%=J
+M`(O.Z"VJ__^+V(7;=*V#KEP&```!=2J+CDP&```SP#N.1`8``(OK#Y7`*8;<
+M2P``ZP^+AE`&``"):`*+GD0&``"+AD0&```/MGPD)8E\)!P/MT@"#[<0*\^+
+MODP&```KRHE4)!2)3"0@._@/A%8!```/MP>)1"00@_@!=%RH`74@T>B-CHQ*
+M``!0_W<$Z*"M__^)1P2%P`^$'O___XM$)!`/MU<"B\B+1"00P>$#.\H;R<'@
+M`D$Y1"04&\!`9B/(BT0D$`/`9@/).T0D%!O`]]AF`\AF`\KK46H!C8Z,2@``
+MZ$.F__^%P`^$S?[__XM/`HD(9HM/!F:)2`2)1P2*2`&`^1YS!P+)B$@!ZP3&
+M0`%X#[9``6H#63M,)!0;R??99@..6`8``&8#R`^WP6:)3P*+3"0@08U0!@/(
+M#Z]4)!QKP0:)3"08`]([T',@B\'!X`([T!O)03E4)!@;P/?80`/!9H-'`@.)
+M1"08ZRMKP0\[T!O):T0D&`Q!.]`;P$`#R&M$)!@).]`;P(/!!$`#R&8!3P*)
+M3"08BTPD$(I4)"1KP08#1P2($(M4)!B):`*(4`&-00%FB0>+?P@[OD0&```/
+MA:K^__^)GD0&``")GDP&``#I\?W__U97B_F+3"0,C8F,2@``Z`FE__^+\(7V
+M="&+5"04,\!`9HD&BPJ)3@)FBT($9HE&!HM$)!")?@B)<`)?B\9>P@P`4U56
+MBW0D$(O15XN&4`8``(UJ`@^V`(J<,&P)``"(GFX*```/MD4`#[:,,&P)```/
+MMD4!P>`%`\B+0@@ST@^W``^VA#!K"```!?@$``"-/$B+AF0&``#!^!J#X"`#
+M^`^VAFT*``#!KGA*```.`_@/ML,#^(N&=$H``"N&<$H``/>V>$H```^W#'X[
+MP7-#B:Y0!@``@'T!@`^2P`!%`8.F?$H````/MP1^B8:`2@``#[<,?HU!(,'H
+M!RO(@^F`9HD,?O^&9`8``,:&;0H```'K78F.?$H```^W#'Z-02#!Z`<KR&:)
+M#'['AH!*````0```#[<$?L'H"L>&5`8```$````/MH!80T,`B898!@``#[9-
+M`(J&;`H``(B$,6P&``"#IE`&````QH9M"@```%]>75O"!`!358O9,])6BW0D
+M$%</MT,"B8:$2@``BX9X2@``][:$2@``,]*+>P2+R(N&=$H``"N&<$H``/?Q
+MB8YX2@``BY:$2@``B^@[ZGP',L#IDP````^V3P$[Z7U%C00)B8Z`2@``.\*)
+MOE`&``!J!`^7P(B&;0H```^VP`&&9`8``%@#R(A/`68!0P*#^7Q^"%:+R^@>
+M`P``@Z9\2@```.M$BX90!@``A<!THL:&;0H````/MQ-*ZP6#Z@%T,0^V1P>#
+MQP8#R#O-?NZ)CH!*```/MD<!*\A7B8Y\2@``B\M6Z(8$``"P`5]>75O"!`"+
+MAE`&```/M@"*A#!L"0``B(9N"@``BH9L"@``B8Y\2@``#[8/B(0Q;`8```^W
+M`X.F4`8```")AE0&``"-4/^*AFP*``"-?_H/M@^(A#%L!@``@^H!=>B+AH1*
+M``")AH!*``#KDH'L%`0``%-55HNT)"0$``"+V5>)7"0<#[<[*[Y4!@``5U;H
+MG0$``(M+!(U4)"2#Z0:)1"08B50D%#/MBI9L"@``@\$&#[8!.)0P;`8``'3Q
+M#[9!`8M4)!0#Z(M<)!R-A"0D!```B6PD(#O0#X,``0``B0J#P@2)5"04@^\!
+M=;P!KH1*```STHN&>$H``/>VA$H``#/2B\B+AG1*```KAG!*``#W\8F.>$H`
+M`(N.A$H``(OH.^D/C;8```"+1"0@C50D)(M\)"0[Z'U*#[9/`>L:@\($C80D
+M)`0``#O0#X..````BSH/MD<!`\@[S7[BB8Z`2@``#[9'`2O(B8Y\2@``BTPD
+M&.BC`P``5U:+R^A@`P``ZUB)AGQ*``"-5"0DB8Z`2@``#[<[*[Y4!@``@^H$
+M@\($C80D)`0``#O0<S*+`@^V"(J&;`H``(B$,6P&``"#[P%UVXM,)!AFBX:$
+M2@``9@$!#[<#B894!@``L`'K`C+`7UY=6X'$%`0``,($`%.+V597:@B+<PR+
+M$P^V/!8/MD06`0^V3!8#P><("_@/MD06`@^V5!8$P><("\?!X`@+P8M+!-/@
+M62I+!%_3ZEX+PEO#58OIN0`!``!6#[=%`&8[P71RBW0D$%.+7"005XOX,\`Y
+MLU0&```/MHPS:P<```^?P(T4B(M%"#/)#[<`*\<[\`^<P6O'"U^-%)$/MTT"
+M.\@;P(/@`@/0#[:#;@H```/0C323#[<&BDX"B]#3ZBO"9HD&,\"%T@^4P`/"
+MB8.$2@``6^L4BTPD#(VQ0`8``,>!A$H```$```"+QEY=P@@`@^P44U6+;"0@
+M5E>+^8NU4`8```^W!XE$)""-6/\[=P1T+(UN^HM%`(L.9HM6!(D&9HM%!&:)
+M1@2#[@:)30"-;?IFB54*.W<$==N+;"0HBT<$@$`!!#/`9H-'`@0/MDX!#[=7
+M`BO1.85<!@``#Y7`B40D&`/!BVPD&(U/`M'HB$8!#[;`9HD!#[9&!X/&!BO0
+M`\71Z(A&`0^VP&8!`8I&`3I&^W9*BP:+SHE$)!1FBT8$BVPD%&:)1"02BT'Z
+MB0%FBT'^9HE!!(/I!CM/!'0*B\7!Z`@Z0?MWX8M$)!2+;"08B0%FBT0D$F:)
+M002-3P*#ZP%UDXML)"A&.!YU>(UV^D.`/@!T]P^W!P/3*\,SVT-FB0=F.\-U
+M78MW!(L.9HM>!(E,)!C!Z0B*P='ZT.@JR(A,)!F#^@%^!HM,)!CKYHM$)""-
+M0`'1Z`^VC"BU2@``BX2-1$L``(D&BT0D&(FTC41+``"-3P*)C5`&``")`6:)
+M603K-HO"T?@KT`^W!V8!$8M,)"!!T>E`T>@[R'034%'_=P2-C8Q*``#H@<#_
+M_XE'!(M'!(F%4`8``%]>75N#Q!3"!`!358ML)`R+V5>+?"04B;U0!@``@$<!
+M!&:#0P($BD<!.D?[=C&+#V:+5P16C7?ZBP:)!V:+1@1FB4<$B0YFB58$B;50
+M!@``@'X!?%YV"%6+R^CV_?__7UU;P@@`BT0D"%:+="0(B890!@``@$`!!&:#
+M00($@'@!?'8&5NC,_?__BX9H!@``_H9L"@``B89D!@``7L((`(O1BDH"@/D'
+M<Q6`:@,!=0]FT2*P`]+@_L&(0@.(2@+#S,S,S,S,S,S,BT$$A<!U!;@D0T,`
+MP[@8(```Z"E?``!35597B[PD+"```(N'O"$``(E$)!B+A]PA``")1"0<@_@#
+M=0B-K]!%``#K"XVO@"(``(/X`G4-@+V9$````'0$L`'K`C+`BYPD,"```(A$
+M)!.%VW15A,!T48._L&P```-T#X-]'!1R0H.]=!```/]T.0^VC<H0``"-A<L0
+M``#WV1O)(\B-A7`0``!14(V+D````.BH)/__A,!U#XU%*%"-1R10:@7HP>7^
+M_XL'BW`4B\[_%6`R0P"+S__6B40D)(E4)""%VW03B\_HL!+__P&#@````!&3
+MA````(L'BW`(B\[_%6`R0P"+S__6O@`(``"-1R164(U$)#!0Z"MY__^`O[IL
+M````#Y3`#[;`4%:-1"0P4.BI-/__BT0D&,9$)!(`#[:(H6$``/?9&\F#X02)
+M3"044>F.````A=MT#H.CB`````"#HXP`````@'PD$@!U3;X`"```C4<D5E"-
+MA"0P$```4.C!>/__:@%6C80D,!```%#H2#3__XL'C8PD*!```/]T)!3&1"06
+M`5&+<`2+SO\58#)#`(O/_]:$P'5\BT0D&("XB&$````/A80```!H``@``(U$
+M)"Q0Z(&+__^$P'1Q_W0D%(L'C4PD+%&+<`2+SO\58#)#`(O/_]:$P`^$5/__
+M_V:#O"0X(```5(U')%`/E<`/ML!0Z&R-__]J`8O/Z'6/_O^`?"03`(O/=&O_
+M="0<Z"2U_O_K96@`"```C80D+!```%"-1"0P4.CX=___Z[&-1"0H4&I%Z/KC
+M_O^+!XU/)/]T)!11BW`$B\[_%6`R0P"+S__6BP=J`/]T)"2+<!"+SO]T)"S_
+M%6`R0P"+S__6,L#IGP```.BJL/[_@[_<(0```G4SB\_H7Y;^_XN/J&P``"N/
+MV#(``(N'K&P``(LW&X?<,@``:@!048M.$/\58#)#`(O/_U80A=MT6(-\)!P%
+M=0;&0T\`ZQN*A9D0``"(0T^+A5@0``")0R"+A5P0``")0R2+S^B/$/__@V-P
+M`(V+D````(-C=`")0UB+1"08B5-<_[#@@@``_[5P$```Z%DB__^P`5]>75N!
+MQ!@@``#"$`!6B_$SP&H04(E&&(E&'(U&(%#'!FA#0P#'1@2,0T,`QT8(R$-#
+M`,=&#`1$0P#'1A`@1$,`QT84`0```.B":P``@\0,B\9>PU%35HOQ,]MJ#(D>
+MB5X$B5X(B5X,B5X0B5X4Z'Y:``")1"0,687`=!+'`&A$0P#'0`0!````B7`(
+MZP*+PXE&&(O&B5X<B5X@9HE>)(A>)HE>*%Y;6<-5B^QDH0````!J_VB!'T,`
+M4&2))0````!65XOYBT\<QP=H0T,`QT<$C$-#`,='",A#0P#'1PP$1$,`QT<0
+M($1#`(7)=!2+`5&+<`B+SO\58#)#`/_6@V<<`(M-]%]DB0T`````7HOE7<-5
+MB^QDH0````!J_VB!'T,`4&2))0````!65XOYBT\0A<ET%(L!48MP"(O._Q5@
+M,D,`_]:#9Q``B\_H=P$``(M/&(7)=!"+`5&+<`B+SO\58#)#`/_6BT\,A<ET
+M'.CR#P``BT<,4(L(BW$(B\[_%6`R0P#_UH-G#`#_=QSHZZP``/]W(.CCK```
+M65F+3?1?9(D-`````%Z+Y5W#S,S,BTPD!(M!%$")013"!`#,S(-L)`0$Z>;_
+M___,S,S,S,R#;"0$".G6____S,S,S,S,@VPD!!#IQO___\S,S,S,S(-L)`0,
+MZ;;____,S,S,S,R+3"0$BT$$0(E!!,($`%:+\8-^!`!T#?]V!/\5%"%&`(-F
+M!`!>PU>+^8M/#(7)=&"#?Q@`=%I5Z`4/``"+Z(7M=$U3:"Q40P"+S^C>````
+MB]B%VW0Y5HLSC4\44?]W&(M.%%/_%6`R0P#_5A2+`U.+<`B+SO\58#)#`/_6
+MBT4`58MP"(O._Q5@,D,`_]9>6UU?P\S,S,S,S,S,S,S,S,S,N`%``(#""`#,
+MS,S,S,S,S(-L)`0$Z>;____,S,S,S,RX`4``@,($`%97:"Q40P"+\>A7````
+MB_B%_W0CBQ?_=A17BW(8B\[_%6`R0P#_UHL'5XMP"(O._Q5@,D,`_]9?7L/,
+MS,S,S,S,S,S,S,S,S(-L)`0(Z8;____,S,S,S,R+1"0,@R``,\!`P@P`58OL
+M45&+20R%R74$,\#K;%?H_@T``(OXA?]T7X-E^`"-1?Q6BS=0:/Q30P!7BP[_
+M%6`R0P#_%H7`>"R+1?R-3?A1_W4(BS!0BTX0_Q5@,D,`_U80BT7\4(L(BW$(
+MB\[_%6`R0P#_UHL'5XMP"(O._Q5@,D,`_]:+1?A>7XOE7<($`,RX`D``@,((
+M`,S,S,S,S,S,BT0D"(,@`#/`0,((`,S,S(M$)`B#8`@`QP`4````QT`$````
+M1#/`P@@`S,S,S,S,BT0D&(,(_[@&``*`PA@`S#/`0,(,`,S,S,S,S,S,S,RX
+M`4``@,(0`,S,S,S,S,S,5HMT)`C_=A3_%1@A1@"%P'4#0.L+BT0D#(M.%(D(
+M,\!>P@@`S,S,S,S,S,S,S,S,@VPD!`3IQO___\S,S,S,S%6+[(/L$%-6BW4,
+M5XM]"(U/_/?9C4<$&\DSVR/(BT40B0Z)&(U%\%#_=Q3_%4@A1@"+312+1?A1
+M_W48B4$(BT7\B1F)602)00S_%0@A1@"+31S'`10```")602+1Q2)00B)60R)
+M61"+!E"+"(MQ!(O._Q5@,D,`_]9?7C/`6XOE7<(8`,S,S,S,S,S,S,S,S+@#
+M``*`PB0`S,S,S,S,S,R+1"0$BT@(A<ET&HM$)`B#Z'%T$2V)````=`J#Z`EU
+M!>CO"P``,\#")`"+1"0$ZR!F@_D\=1=F@W@"+W40:@)99H,\2#YT%D&#^11R
+M\X/``@^W"&:%R778,L#"!`"P`>OY45&+1"0,4U56BQ`S[5>+^8EL)!2-3"04
+MB6PD$(MR2%%0B\[_%6`R0P#_UHO8A=L/B(T```"+1"04A<!T?8LPC4PD$%%H
+M#%1#`%"+#O\58#)#`/\6B]B%VWA(BT0D$%"+"(MQ((O._Q5@,D,`_]:+V(7;
+M>!J+1"00_W0D(%"+"(MQ%(O._Q5@,D,`_]:+V(M$)!!0BPB+<0B+SO\58#)#
+M`/_6BT0D%%"+"(MQ"(O._Q5@,D,`_]:+1"04A=MX!(7`=4\Y;PAT2CEO('5%
+M.6\<=$#_=QR+S^@P!@``B_"%]G0P:`0"``!55555:@'_=P3_%50A1@!J!?]W
+M"/\5;"%&`%;_=PC_%5PA1@!6Z`VH``!97_?37L'K'UV*PUM96<((`(/L#%.+
+MV8-[$``/A#T!``"#9"0(`%97BWPD'%?HA_[__U>(1"03Z+:G``"-!$4``@``
+M4.C)IP``B_!9687V#X0'`0``56C@1$,`5NCDR0``:/!$0P!6Z%OC``!H>$5#
+M`%;H4.,``(/$&(OO:B!89CD'=0F#Q0)F.44`=/=J!FC@1$,`5>B[B?__]]@:
+MP`0!B40D&'0#C7T,5U;H%^,``(!\)"``65EU#6B814,`5N@#XP``65F`?"03
+M`'4*5HO+Z'\!``"+\%;H%:<``&OH!EF#Q0E5:D#_%1PQ0P"+^(7_="TSP(U-
+M_5!048U/`U%J_U90:.G]``#_%1@Q0P"%P'0+9L<'[[O&1P*_ZP/&!P!6Z.>F
+M``!9C40D%%!J`5?_%7PA1@!=A<!X(O]T)!"+R_]S$.BH_?__BT0D$%"+"(MQ
+M"(O._Q5@,D,`_]9?7EN#Q`S"!`!14XO95HMT)!!J,(ES!.@)4P``B40D#%F%
+MP'0)B\CH%?C__^L",\")0PR%P`^$J@```%6)<!B+2PQHJ$1#`.@V"```BTL,
+M:@'HBPH``(M+#&H!Z!<*``"+2PSH#`D``(OHA>UT/XM-`(U#$%=0:!Q40P"+
+M,8O.58E$)!S_%6`R0P#_UHM-`(OX58MQ"(O._Q5@,D,`_]:%_U]Y"8M$)`R#
+M(`#K-X-[$`!T,8O+Z)_Y__^+0Q`SR3E+(%&(2R6+,%%148M.+'0%_W,@ZP5H
+MR$1#`%#_%6`R0P#_5BQ=7EM9P@0`S,S,S,S,S,PSP,((`%%158ML)!!75>B0
+MI0``:\@,@<$``@``4>BAI0``B_B)?"0465F%_W4'B\7IX0```%-6:.A%0P!7
+MZ+3'``!7Z%NE``"+V(/$##/`B_5F.44`#X2J````:@U9:@I:#[<&9CO!=5QF
+M.58"=59J#5J-3@1F.1%J"HE,)!1:=41F.58&=3Y2C2Q?7V8Y?@9U)FBT14,`
+M5>A9QP``BW0D&(/#!%E9:@V-1@2#Q0A9B40D$&8Y"'34BWPD%(/&`HML)!SK
+M)3OU=B9J(%EF.\%U'F8Y3OYU&(T$7VA81D,`4.@1QP``65F#PP9J"EKK!6:)
+M!%]#@\8",\!J#5EF.08/A5S___\SP%5FB01?Z*VD``!97HO'6U]=65G"!`#,
+MS,Q5B^Q6BW40A?9U"K@#0`"`Z<L```!35XM]#&H06U-HK%-#`%?H<6P``(/$
+M#(7`#X2)````4VCL4T,`5^A:;```@\0,A<!U"(M5"(U"!.M/4VC,4T,`5^@_
+M;```@\0,A<!U"(M5"(U"".LT4VB<4T,`5^@D;```@\0,A<!U"(M5"(U"#.L9
+M4V@\5$,`5^@);```@\0,A<!U$HM5"(U"$(O*]]D;R2/(B0[K&%-HC%-#`%?H
+MY&L``(/$#(7`=1F+50B)%HL"4HMP!(O._Q5@,D,`_]8SP.L(@R8`N`)``(!?
+M6UY=P@P`S,S,S,S,S,S,S,R#;"0$!.D&____S,S,S,S,@VPD!`CI]O[__\S,
+MS,S,S(-L)`00Z>;^___,S,S,S,R#;"0$#.G6_O__S,S,S,S,58OL5HMU$(7V
+M=0>X`T``@.M-:A!HG%-#`/]U#.A):P``@\0,A<!T%FH0:(Q30P#_=0SH,VL`
+M`(/$#(7`=1F+30B)#E&+`8MP!(O._Q5@,D,`_]8SP.L(@R8`N`)``(!>7<(,
+M`%6+[(/L,%-6BW4(,]M7:`!_``!3B_G'1=`P````QT74*`@``,=%V"":00")
+M7=R)7>")=>2)7>C_%00A1@")1>R-1=!0QT7P!@```(E=],=%^(1$0P")7?S_
+M%2`A1@")-U]>6XOE7<($`,S,S%:+="0(@VX4`8M&%'43B\[HM?3__VHP5N@H
+M3P``65DSP%["!`#,S,S,S,S,S,S,S(-L)`0$Z<;____,S,S,S,R#;"0$".FV
+M____S,S,S,S,@VPD!!#IIO___\S,S,S,S(-L)`0,Z9;____,S,S,S,R+3"0$
+M@VD$`8M!!'4,:@Q1Z,!.``!963/`P@0`@^P055:+="0<5U:+^>CEH0``C01%
+M`@```%#H^*$``(OH65F%[0^$E`$``%:+S^B+^/__#[<.B_V(1"0/9H7)#X1X
+M`0``4VH@QT0D'`T````SV\=$)"`*````6L=$)!0^````Z8H```!F@_D\#X2)
+M````A,!T4V8[3"08=`=F.TPD''45._UT!F8Y5_YT!F:)%X/'`H/&`NM6A,!T
+M+&:#^29U)C/`C10P#[<*9H7)=!*#^3MU!8UR`K,!@\`"@_@H<N-J(%J$VW4@
+M#[<&9H7`="IF.\)U"CO]=`9F.5?^=`9FB0>#QP*#Q@**1"03,]L/MPYFA<D/
+MA6W___]J!&BH14,`5NA2@___B]CWVQK;@,,!=1%J!&BT14,`5N@Z@___A<!U
+M'FH-6&H*9HD'66:)3P*#QP2$VW0*9HD'9HE/`H/'!&H':,!%0P`SP%9FB0?H
+M!H/__X7`=2<SVV8Y'G1=:@AHT$5#`%;H[H+__X/&`H7`=`=F.1YUY^LO@\8.
+MZRH/MP9FA<!T%(M,)!1F.\%T%(/&`@^W!F:%P'7PBT0D%&8Y!G4#@\8",]L/
+MMPZ*1"03:B!:9H7)#X6L_O__6XO%7UY=@\00P@0`S,S,S,S,S,S,S,S,,\#"
+M$`#,S,S,S,S,S,S,S+@!0`"`P@P`BD0D%(/L$%-5BVPD((O95FH`58EK"(A#
+M)O\5;"%&`/]T)""+R^CR_/__@WL<`'0)_W,<Z.Z?``!9@WPD*`!U!#/`ZPK_
+M="0HZ#+;``!9@WPD+`")0QQU!#/`ZPK_="0LZ!K;``!9B4,@C40D#%!5_Q5$
+M(48`:@*-1"004%7_%5@A1@!0:@#_%0PA1@"#>P0`=`G_<P3_%10A1@"+1"0,
+MBW0D%%=3_S,K\(UX`6H`58/N`O\56"%&`%"+1"0L*T0D)%!6_W0D+#/V5V@`
+M``!`5FB$1$,`5O\5'"%&`(E#!%\Y<Q!U.(7M=$HY<R!U13ES''1`_W,<B\OH
+M%_W__XOPA?9T,&H%5?\5;"%&`%95_Q5<(48`5N@,GP``6>L6A<!T$FH%4/\5
+M;"%&`/]S!/\5$"%&`%Y=6X/$$,(4`,S,S,S,S,S,S,S,S#/`0,(4`,S,S,S,
+MS,S,S,PSP$#"&`#,S,S,S,S,S,S,,\#"#`#,S,S,S,S,S,S,S#/`0,(0`,S,
+MS,S,S,S,S,R+1"00@R``,\!`PA``S,S,,\#"!`#,S,S,S,S,S,S,S%6+[(M%
+M#%>+?12#Z`%T%BV`````=23_-VKK_W4(_Q4\(48`ZQ5JZ_]U"/\50"%&`/]U
+M"(O(Z)SW__]7_W40_W4,_W4(_Q4D(48`7UW"$`!5B^R#[!B-1>A35U#_=0B+
+MV?\5A"%&`(U['%=HC%-#`&H%:@"-1>A0_Q5X(48`BP>%P`^$A0```%:+,(U-
+M_%%HO%-#`%"+#O\58#)#`/\6A<!X:8M%_%-0BPB+<0R+SO\58#)#`/_6BT7\
+M4(L(BW$(B\[_%6`R0P#_UHL'C4WX46@,5$,`4(LPBP[_%6`R0P#_%H7`>":+
+M1?A0BPB+<2"+SO\58#)#`/_6BT7X4(L(BW$(B\[_%6`R0P#_UEY?6XOE7<($
+M`%:+\8-^(`!U#H!^)0!U"/]V'.A7]?__@'XF`,9&)0%T"HM.#&H!Z`4!``!>
+MPU>+^8M7'(72=00SP%_#BP)64HMP!(O._Q5@,D,`_]:+1QQ>7\-5B^Q145>+
+M^8M''(7`#X3&````5HLPC4W\46B\4T,`4(L._Q5@,D,`_Q:%P'@]BT7\:@%0
+MBPB+<1B+SO\58#)#`/_6BT7\:@!0BPB+<0R+SO\58#)#`/_6BT7\4(L(BW$(
+MB\[_%6`R0P#_UHM''(U-^%%HW%-#`%"+,(L._Q5@,D,`_Q:%P'@YBT7X4(L(
+MBW$8B\[_%6`R0P#_UHM%^%"+"(MQ%(O._Q5@,D,`_]:+1?A0BPB+<0B+SO\5
+M8#)#`/_6BT<<4(L(BW$(B\[_%6`R0P#_UH-G'`!>7XOE7<-5B^Q15XOYBT<<
+MA<!T58-]"`!T3U:+,(U-_%%HO%-#`%"+#O\58#)#`/\6A<!X,XM-_(U'(%#_
+M=QB+,6H`5VH`:OQ1BTXL_Q5@,D,`_U8LBT7\4(L(BW$(B\[_%6`R0P#_UEY?
+MB^5=P@0`45.+V8M#'(7`#X2-````5HLPC4PD"%%HO%-#`%"+#O\58#)#`/\6
+MA<!X<(M$)`A5,^V+,(M.+#EL)!1T-E>->R!7_W,855-5:OM0_Q5@,D,`_U8L
+MBT0D$%?_<QB+,%5358M.+&K_4/\58#)#`/]6+%_K$U7_<QA54U5J_5#_%6`R
+M0P#_5BR+1"0,4(L(BW$(B\[_%6`R0P#_UEU>6UG"!`!5B^Q15HOQC47\B77\
+M@V7\`(-]#`!0_W4(QP9P1D,`=`?H94<``.L%Z%A'``")1@B+1?R)1@2+QEZ+
+MY5W""`#,S%:+\?]V!,<&:$9#`.@M1P``]D0D"`%T&?9$)`@$=0A6Z`U'``#K
+M"FH05NAQE```65F+QE["!`#,S,S,S,S,S,Q5B^Q148-E_`"-1?Q6B_%0_W8$
+MZ.!&``"%P'0#B48(:A#HQD8``(O0B57XA=)T%(M."(M%_,<":$9#`(E"!(E*
+M".L",]*+PEZ+Y5W#58OL45%3C47\,]M0:&Q30P!J`5-H7%1#`/\5>"%&`(7`
+M#X@.`0``BT7\C4WX5E%H3%1#`(LP4(L._Q5@,D,`_Q:%P`^(V````#A="'08
+MBT7X:@+_=1"+"%"+<12+SO\58#)#`/_6BT7\_W4,4(L(BW%0B\[_%6`R0P#_
+MUCE=&'06BT7\_W484(L(BW$<B\[_%6`R0P#_UHM%_%.+"(MQ1(O..5T<=0=H
+MM#5#`.L#_W4<4/\58#)#`/_6.5T@=!:+1?S_=2!0BPB+<2R+SO\58#)#`/_6
+M.5T4=!:+1?S_=110BPB+<22+SO\58#)#`/_6BT7X:@'_=1"+"%"+<1B+SO\5
+M8#)#`/_6A<!X`K,!BT7X4(L(BW$(B\[_%6`R0P#_UHM-_%&+$8MR"(O._Q5@
+M,D,`_]9>BL-;B^5=PAP`:F3H&````(/X?7T/:F3H+0```(/X?7T#,\##,\!`
+MPZ$HA$0`A<!U"NAT````H2B$1``/KT0D!&I@69GW^<($`*$LA$0`A<!U"NA3
+M````H2R$1``/KT0D!&I@69GW^<($`%6+[%%J$.CV1```B47\A<!T#_]U#(O(
+M_W4(Z'7]___K`C/`B^5=P@@`_W0D!/]T)`S_%7`P0P#WV!O`]]C""`!6:@#_
+M%?P@1@"+\(7V="5J6%;_%5`@1@!J6E:C*(1$`/\54"!&`%9J`*,LA$0`_Q7X
+M($8`7L-65VH`_Q7\($8`B_!J#%;_%5`@1@!6:@"+^/\5^"!&`#/`@_\@7P^=
+MP%[#45%6:)1&0P#_="04_S70#D0`_Q6$,$,`B_"%]@^$\0```%=6_S70#D0`
+M_Q4T,4,`B_B%_W0>5O\UT`Y$`/\5,#%#`(7`=`U0_Q4@,4,`B_"%]G4',\#I
+MMP```%-55S/M:@*);"0<_Q4<,4,`B]B%VP^$E@```%/_%20Q0P"%P`^$@```
+M`%=64.A'5@``@\0,B6PD$(U$)!!055/_%7PA1@"%P'595?]T)!3HL/[__XM,
+M)!"+^%&+$8MR"(O._Q5@,D,`_]:%_W0UBT<(B6\(A<!U&6C___\`C40D&%#_
+M=P3HGT,``(7`=`.)1PB+!VH!BS"+SO\58#)#`(O/_]93_Q4H,4,`4_\5+#%#
+M`(M$)!1=6U]>65G"!`!5B^R`/4P/1```BT44=`4-```8`%#_=1#_=0S_=0C_
+M%?0@1@!=PA``@^QPZ(S^__^$P'46_W0D?/]T)'S_="1\Z)P"``#ID0(``%.+
+M7"1XC40D,%50:AA3_Q5@($8`BT0D/(N,)(`````/K\&9]WPD.(OH.ZPDA```
+M`'P'BZPDA````%<[3"0\=0H[;"1`=00S_^L@C40D##/_4&B$1D,`,\!`4%=H
+M;%1#`/\5>"%&`(7`>1!75U=74_\5Z"!&`.D4`@``BT0D#(U,)!!646H"BS!7
+M4U"+3E3_%6`R0P#_5E2%P(M$)!!X<XE\)!B-5"08BPA24(MQ*(O._Q5@,D,`
+M_]:%P'@^BT0D&-GN5U&+,%'='"17BTX@5VA\5$,`_W0D+%#_%6`R0P#_5B"%
+MP'E!BT0D&%"+"(MQ"(O._Q5@,D,`_]:+1"044(L(BW$(B\[_%6`R0P#_UHM$
+M)!"+"%"+<0B+SO\58#)#`/_6Z5L!``!J+(U$)%A74.C=4@``BX0DE````(/$
+M#(E$)%B+Q??8QT0D5"@```")1"1<,\!J($")?"1H9HE$)&185U=FB40D:HU$
+M)#!05XU$)&2)?"0T4%?_%5P@1@"+R(E$)"#WV1O)@>'R__A_@<$.``>`#XBD
+M````BTPD$(U4)!Q248L!BW`LB\[_%6`R0P#_UHM$)!QJ`U7_M"20````BS#_
+M="0@4(M.(/\58#)#`/]6((N$)(@```#_="0HBTPD((EL)#P/K^B)1"0XP>`"
+MB7PD,(E\)#2+,<'E`E50C40D.%!1BTX<_Q5@,D,`_U8<A<!X"HM$)"")1"0D
+MZPK_="0@_Q5,($8`BT0D'%"+"(MQ"(O._Q5@,D,`_]:+1"044(L(BW$(B\[_
+M%6`R0P#_UHM$)!A0BPB+<0B+SO\58#)#`/_6BT0D$%"+"(MQ"(O._Q5@,D,`
+M_]:+1"0DA<!U"U=75U=3_Q7H($8`7E]=6X/$<,(,`(/L)%-55E=J`/\5_"!&
+M`(O84XE<)!S_%60@1@"+\%.)="08_Q5D($8`B40D$(U$)!Q0:AC_="1`_Q5@
+M($8`BT0D)`^O1"0\BVPD0)GW?"0@.\5]`HOH5?]T)$!3_Q5H($8`_W0D.(O8
+M5O\55"!&`%/_="04B_C_%50@1@!H(`#,`/]T)"B+\#/`_W0D*%!0_W0D*%7_
+M="184%#_="0X_Q5L($8`BVPD%%=5_Q54($8`5HMT)!16_Q54($8`5?\56"!&
+M`%;_%5@@1@#_="08:@#_%?@@1@!?7EV+PUN#Q"3"#`!5B^R![*````"-A6#_
+M__]6BW4(:E!05O\5["!&`(7`="97OWA&0P"-A6#___]74.@X=?__A<!T#FH`
+M5VH`5O\5\"!&`(OP7X7V=`EJ$%;_%9@@1@!>B^5=P@0`_W0D!/\5.#%#`/?8
+M&\#WV,($`%6+[(/L'%97:)Q&0P"+\>B&7?__,_^)!E?_%8`A1@"-1?3'1?0(
+M````4,=%^/\'``#_%30@1@!7C47DQT7D`0```%"-1?R)?>A0B7WLB7WPZ.L^
+M``!H,(1$`/\5B"!&`%^+QEZ+Y5W#58OL9*$`````:O]H@1]#`%!DB24`````
+MH3"$1`!65XOYBQ!0BW((B\[_%6`R0P#_UO]W!.BE/@``_Q5T(48`BTWT7V2)
+M#0````!>B^5=PU:+\8V.G*0``.A^;_[_C8X\I```Z'-O_O^-CMRC``#H:&_^
+M_XV.?*,``.A=;_[_C8X<HP``Z%)O_O^+SE[IG`S__\Q3BUPD%%6+;"045HMT
+M)!!7BWPD&&H`:@!HE$]#`%-55U;H)6S^_X3`#X6*````@>\0`0``='&#[P%U
+M$@^WQ8/H`71-@^@!=#V#Z&5T!#/`ZVJAL`Q&`&H`_S#H:A?__U"AL`Q&`/\P
+M:(X```#H>SG__U!6Z+AI_O^$P'0\H;`,1@#_,.LJ:@!6_Q6X($8`ZRBAL`Q&
+M`/]P!/\P:F96_Q5H(48`:@'KX/\SB1VP#$8`:F96_Q50(48`,\!`7UY=6\(0
+M`(M$)`2+R%,SVV8Y&'0[5E=J7%\/MQ!F.]=U'@^W<`)F._=U"&:).8/`!.L3
+M@_YN=0AJ"EJ#P`3K`X/``F:)$8/!`F8Y&'7,7UXSP&:)`5O"!`!5B^RX)!``
+M`.A//@``9H,]:I1$```/A($```!6:@;_-?CE0P"^:I1$`%;HAA;__U#HW7+_
+M_X7`=6)H:(1$`.B<_?__:``(``!6C87<[___4.@(6?__C87<[___4.A.D```
+M,\EJ'E%FB8Q%WN___XU%X%#HI4T``(/$$,=%Y`,```!J%%AFB47PC87<[___
+MB47HC47@4/\5="!&`%Z+Y5W#BT0D!#/)A<!T!68Y"'4"B\'"!`!5B^RX`"@`
+M`.B;/0``BT4(A<!T)F:#.`!T)HU-#%%0C84`V/__4/\5Y"!&`(V%`-C__U!J
+M`>A<)0``_P5<A$0`B^5=PU6+[('L+`$``(,]$.9#``!35E>[``0``'4Q:F2-
+MA=3^__]0:@]3_Q5L,4,`9HN%U/[__V:CJ.Q%`#/`9J.J[$4`QP40YD,`J.Q%
+M`&HRC46<4/]U#/]U".C85O__BWT0,\"+=1165V@`YD,`9HD'C46<4&H`4_\5
+M>#%#`#/`9HE$=_Y?7EN+Y5W"$`"#[`Q355:+="0<5X7V#X34````#[<&9H7`
+M#X3(````BUPD)#/M:B(S_XET)!PRR<=$)!@L````15H[;"0H#X."````9CO"
+M=5IJ(HU6`EAF.0)U)83)=18[="08=1`/MT8$9CM$)!1T$&:%P'0+:B*+\EIF
+MB11[ZSR*P8A$)!.$R70$,LGK%6HB6%!2Z#-N``!9A<"*1"0760^5P6HB6CK!
+M=10/MP9F.T0D%'4$A,ET'6:)!'M'18/&`@^W!F:%P`^%=/___S/`9HD$>^L6
+M,\!FB01[@\8"#[<.4>B65?__A,!U\(O&ZPN+1"0D,\EFB0@SP%]>75N#Q`S"
+M#`"X^2)#`.CW.@``4;@4?0``Z,@[``!35E<SVXEE\%.-C=R"__^)7?SH(VG^
+M__]U#(V-W(+__\9%_`'HWG3^_SB=H>___W0/C8W<@O__Z*]K_O\RP.MRB5W<
+MB5W@B5WDB5WHB%WLC47<QD7\`E"-C=R"___HIV[^_X3`=#>+=>"-/#:-1P)0
+MZ,:-``!9B\B+11")"(7)=02+\^L3,\!79HD$#_]UW%'H4TP``(/$#(M%%(DP
+MC4W<Z/QJ_O^-C=R"___H.VO^_[`!BTWT7UYDB0T`````6XOE7<(0`+Y0#T0`
+MB\[HML/^_VH(B\[H>,3^__]U".@)*```N%"K00##Z\;_=0CH^2<``+@8JT$`
+MPU6+[+@,(```Z,,Z``"`/7"D1```#X24````:``(``"-A?3?__]0_W4(Z+(4
+M``"-1?A0:@%J`&CL4D,`:`$``(#_%2@@1@"%P'5DC47\QT7\`!```%"-A?3O
+M__]0C47T4&H`C87TW___4/]U^/\5)"!&`(7`=2^+1?RY_P<``-'HB47\.\%R
+M`HO!_W4,,\EFB8Q%].___XV%].___U#_=0CH+%7___]U^/\5!"!&`(OE7<((
+M`,S,S,S,S,S,S,S,S%6+[('L``$``%.+71!6BW4,5XM]"&H`:@!H;$]#`/]U
+M%%-65^C"9O[_A,!U;8'N$`$``'19@^X!=0T/M\.#Z`%T%(/H`70$,\#K4FH`
+M5_\5N"!&`.M$OH````"-A0#___]64&IF5_\5:"%&`(V%`/___[EX:D4`4.CK
+M0O__5HV%`/___U#H*4/__VH!Z[__=11J9U?_%5`A1@`SP$!?7EN+Y5W"$`"X
+M!"```.A@.0``BXPD%"```%,SVU:%R70"B!F+E"0@(```A=)T`H@:B[0D$"``
+M`(7V#X2T````#[<&9H7`#X2H````58NL)!@@``!7B[PD("```(E<)!`/M\"#
+MQ@*#^#UU$X7_=!F%VW45A<ET`\8!`8O=ZR&#^`UT+X/X"G0M9HE%`(/%`HN$
+M)"P@``"#P/XY1"00?0X/MP;_1"009H7`=;7K",8"`>L#@\8",\!FB44`A?]T
+M+V:)!X7;="AH`!```(U$)!A04_\58#%#`/^T)"P@``"-1"084%?HBU/__S/`
+M9HD#7XO&7>L",\!>6X'$!"```,(8`%6+[%%14XU%^%#_%8@@1@"-1?Q0,\!0
+M4/]U#%#_%7P@1@"+V/?;&MN`PP%T+E;_=0C_=?S_%9`@1@#_=?Q(]]@:P(U8
+M`8M%^%"+"(MQ%(O._Q5@,D,`_]9>ZPB+10@SR6:)"(K#6XOE7<((`+@$(```
+MZ/PW``!35597:```"`#H88H``(OP687V=0JY4`]$`.B)P/[_BYPD&"```#/`
+M,^UFB0:+_>MN9CDN=0AF@WPD%'MT86:#?"04?71[C40D%%#H_XD```/'63W[
+M_P,`=V>-1"044%;HO\4``%;HY(D``(OX@\0,A?]T%(U'_XT$1F:#."!U"(/H
+M`H/O`77R@'PD$P!U$(T$?F@<0T,`4.@%K```65EH`!```(U$)!=0556-1"0D
+M4/\SZ-O]__^)`X7`#X5P____7XO&7EU;@<0$(```P@0`58OL@^P<C47D5C/V
+M5E965E#_%:0@1@"%P'0Y5E96C47D4/\5X"!&`*%8A$0`A<!T#XU-Y%%0_Q7<
+M($8`A<!U%(U%Y%#_%;P@1@"-1>10_Q6@($8`7HOE7</,S,Q3BUPD$%56BW0D
+M%#/M5XM\)!1556A\4$,`_W0D+%-65^B&8_[_A,`/A>8```"![A`!``!T*H/N
+M`74-#[?#@^@!=!F#Z`%T!S/`Z<@```!55_\5N"!&`.FX````:@'K\%?H*2``
+M`*%TQ40`A<!T#U!J`6B`````5_\5`"%&`*%\:T4`A<!T$%!5:'(!``!J9E?_
+M%<`@1@"AE.Q%`(7`=`A05_\57"%&`&IE5_\59"%&`&@```$`58OP:#4$``!6
+M_Q4`(48`:@__%<P@1@!056A#!```5O\5`"%&`%?_%<@@1@"+#42$1`!55?\U
+MD.Q%`%;_-=0.1`#H'>C___\UE.Q%`.@XB```_S60[$4`Z"V(``!963/`0%]>
+M75O"$`!5B^R#[!A35VIE_S70#D0`_Q70($8`B_B%_P^4PX3;=`EJ9>C7[___
+MB_B%_W0/C47H4&H85_\58"!&`.L.QT7L70```,=%\"X!``#HK>[__X3`=#]6
+MA-MT%FIFZ)_O__^+\(7V=`E7_Q5,($8`B_[_=?#HQN[__U#_=>SHG.[__U!7
+MZ+GP__]7B_#_%4P@1@"+_EZ+QU];B^5=PX`]4(1$``!U2HM$)`A7,_]F.3AT
+M/5;_%0`P0P"+\(U$)!105_]T)!B_L.Q%`&@`$```5^@2CO[_5VB(3T,`Z"WW
+M__^#Q!R%]G0'5O\5!#!#`%Y?P\S,S,RX#B-#`.C:,P``N*@<`0#HK#0``%.+
+M71!6BW4,5XM]"&H`:@!H2%!#`/]U%%-65^AG8?[_A,!T"#/`0.FB"0``@>X0
+M`0``#X2@!@``@^X!=1(/M\.#Z`%T:8/H`70W@^AE=`<SP.EX"0``C86,[O__
+M4&IDZ,0N__]05^A28/[_A,!TM8V%C.[__U!J9E?_%5`A1@#KHS/;0X,]5(1$
+M``"('5"$1`!T#8,]7(1$```/A2P)``!J`%?_%;@@1@#I'@D``(`]481$```/
+MA9(```"`/;0,1@``#X2%````@#VU#$8```^4P#/)A,"BM0Q&``^5P8'!Y@``
+M`%'H/B[__S/;4$-35_\54"%&`.M'@#U0A$0```^%QP@``#/`4%!0C46,4/\5
+MX"!&`(7`#X2P"```C46,4%?_%=P@1@"%P'44C46,4/\5O"!&`(U%C%#_%:`@
+M1@"`/;4,1@``=;#I?P@``&@`"```C86,WO__4&IF5_\5:"%&`(`]481$``!T
+M&#/;0X`]4H1$``!T!H@=4(1$`%/I'____X`]4H1$``!T#S/;0XK#HE"$1`#I
+MR`0``&IH5_\59"%&`#/;B_`Y'5R$1`!U(6K_4VBQ````5O\5`"%&`&BT-4,`
+M4VC"````5O\5`"%&`%;_%<0@1@"`/6B41```=!AHN@```.@]+?__4%/HJ!H`
+M`+X`"```ZUF^``@``(V%C-[__U90C86,[O__4.B;3?__5HV%C.[__U#H^AD`
+M`(V%C.[__U!HN0```.CX+/__4(V%9+W__VB`"```4.C)B_[_@\00C85DO?__
+M4%/H2!H``(`]<:1$``!U#(V%C-[__U#HQ"```%-3C86,WO__BLM0B$WRZ/'M
+M_O\SVT.$P'45_Q4`,$,`@_@%=`6#^`-U!8K+B$WRC86,WO__4.B-\?__BM"(
+M5?.$TG45_Q4`,$,`BE7S@_@%=0>*PXA%\NL#BD7RB@UQI$0`A,EU;832='W_
+M%40Q0P!0:)A00P"-A8SN__]64.@AB_[_@\00C8UDSO__Z#KC_O^#9?P`C86,
+M[O__:A%0C8UDSO__Z"KD_O^(1?.$P'4._Q4`,$,`@_@%=0.(7?*#3?S_C8UD
+MSO__Z#CC_O^*#7&D1`"`??,`#X4U`@``A,D/E<#^R")%\H3`#Y1%\X3`#X2X
+M`0``5HV%C.[__U!J`/\5?#!#`&B`````C86,_O__N7+$1`!0Z`\Y__]H<K1$
+M`(V%C-[__U!HU%!#`(V%3./^_V@,0P``4.AGBO[_@\04QT6H/````(V%C.[_
+M_\=%K$````")1;B-A4SC_O^)1;PSP&BL3T,`:`1Q``!0:`0```A0:O^)?;#'
+M1;0$44,`B5W$B47(QT7`:(1$`/\54#%#`(OPB77LA?8/A((```#&!8!K10``
+M_Q58,4,`A<!T$&@`(```4&B":T4`Z(9+__]J!VB"JT4`Z`?X__]J`FB"NT4`
+MZ/OW__]J$&B"RT4`Z._W__^-A8S^__^('8/<10!0N8+;10#HHCG__S/`4%!0
+M:@)6_Q5(,4,`:`1Q``!H@&M%`%")1>3H24$``(/$#.L&BT7LB47DC46H4/\5
+MA"!&`(OPC86,_O__:(````!0Z*0Y__]H#$,``(V%3./^_U#HDSG__X7V=#AH
+M$"<``/]UX/\5K"!&`(-EZ`"+=>2`/@!U%&ID_Q6<,$,`BT7H0(E%Z(/X9'SG
+MBT7@HZ3L10#K!HMUY(A=\X-][`!T$%;_%4PQ0P#_=>S_%1@P0P"`??,`#X2"
+M^___:)H```#H`"K__U"-A8S>__]0:!!10P"-A62I__]H``H``%#HQ8C^_X/$
+M%+E0#T0`4^CBN/[_:C!HE@```.C(*?__4(V%9*G__U!7Z*/J____!5R$1`#I
+M)_O__VH`:F=7B1U4A$0`Z-E;_O]J`&IF5^C/6_[_:.8```#HBRG__U!35_\5
+M4"%&`%-J:5?HLUO^_VBT-4,`:F57_Q50(48`:F57_Q5D(48`B_"%]G08:O!6
+M_Q5`(48`#8````!0:O!6_Q4\(48`:@7_-3B$1`!7Z`\)``!J`O\U.(1$`%?H
+M`0D``&B0W$4`5X@=M`Q&`.@='```:@;_-3B$1`#&!;0,1@``5^C;"```@#U0
+MA$0``'4@@SU<A$0``'47@SVD[$4``'4.:@3_-3B$1`!7Z+((``!34U?H[5K^
+M_X,E5(1$``"@4(1$`(,]7(1$```/C@W[__^$P`^%!?O__VB0````B!U1A$0`
+MZ*`H__]04U?_%5`A1@"+#5`/1`"#^0EU![Z@````ZQ8SP(/Y`P^5P$B#X`H%
+MEP```(E%[(OP:C!HE@```.AC*/__4%;H7"C__U!7Z#[I___I]`(``%?HC!<`
+M`*%TQ40`,]M#B3U,A$0`B3U8A$0`A<!T#E!3:(````!7_Q4`(48`H7QK10"%
+MP'014&H`:'(!``!J;%?_%<`@1@!J:%?_%60A1@!H``!``&H`:#4$``!0B47L
+M_Q4`(48`:``(``"-A8SN__]0Z#+G__]J9E?_%60A1@!F@SURI$0``(OPB77H
+MN7*D1`!U!HV-C.[__U%6_Q5<(48`5NA5[/__:#R$1`!H.(1$`&B0W$4`5\8%
+M8X1$``#H-/'__X3`=0:('5*$1`"#/3R$1```=@YJ!_\U.(1$`%?H10<``(`]
+MF.Q%``!U)VB_````Z%DG__]0:FM7_Q50(48`:+X```#H12?__U!35_\54"%&
+M`(,]/(1$```/AJL```!J`/\U.(1$`%?H^@8``*&$W$4`A<!T+H,];*1$``!U
+M)8L-0(1$`&H`:@!0_W7L_S74#D0`Z,+>____-83<10#HW7X``%DY'6RD1`!T
+M45?_%<@@1@`Y'6RD1`!T0H`]<:1$``!U.6H#_S4XA$0`5^B5!@``@SV0[$4`
+M`'0B:@!H8*]!`&H`:'Q00P#_-=0.1`#_%;0@1@"%P`^$X/C__U/_-3B$1`!7
+MZ%T&``"`/6.$1```#X6C````@SV$W$4```^%E@```(,];*1$```/A8D````S
+MP+ZJ````9HF%9&G__X'^J@```'4)@#V8[$4``'0_@?ZK````=0F`/9CL10``
+M=2YH`"```&B44$,`C85D:?__4.AT1O__:``@``!6Z`PF__]0C85D:?__4.A<
+M1O__1H'^L````'ZGBPU`A$0`C85D:?__:@!J`%#_=>S_-=0.1`#HH]W__XMU
+MZ(,];*1$``)U"6H`5O\58"%&`(`]:)1$``!T%&H`:F=7Z,M7_O]J`&IF5^C!
+M5_[_H6RD1`"%P'0D@#U0A$0``'4;:@!3:!$!``!7.\-U"/\5`"%&`.L&_Q6H
+M($8`@#U2A$0``'03:)````#H927__U!35_\54"%&`(O#BTWT7UY;9(D-````
+M`(OE7<(0`,S,S,S,S,S,S,S,N%`:``#HMBH``%.+G"1@&@``55:+M"1D&@``
+M,^U7B[PD9!H``%55:!A/0P#_M"1\&@``4U97Z&!7_O^$P'0(,\!`Z5`#``"!
+M[A`!``!T;H/N`0^%/0,``&H"#[?#7BO&="*#Z&IT4H/H`71(@^@!=#^#Z`%T
+M$8/H`70Q@^@!#X41`P``:@9>555H<0$``&IF5_\5P"!&`(7`=`=0_Q78($8`
+M5E?_%;@@1@#KDVH#Z]9J!.O2,_9&Z\Z+]>O*:FQ7_Q5D(48`4/\5Q"!&`+X`
+M"```C80D8`H``%;_M"1T&@``4.C:1/__5HV$)&0*``!04.CY`O__C80D8`H`
+M`%!J95?_%5`A1@!H``$``&BT`@``C80DM`<``%!5C80D<`H``%#_%8`@1@!5
+M_[0DL`<``&AP`0``:F97_Q7`($8`C80D7`$``%"-A"1D"@``4/\59#!#`(O8
+M@_O_#X0V`@``C40D$%"-A"1T`0``4/\5`#%#`(U$)!A0C40D%%#_%0@Q0P!J
+M,HU$)#1058U$)"10:@)>5F@`!```_Q5P,4,`:C*-A"28````4%6-1"0D4%5H
+M``0``/\5=#%#`(U$)#!0C80DF````%!HF0```.AK(___4&A,3T,`C80DO`,`
+M`&@``@``4.@V@O[_@\08C80DK`,``%!J:E?_%5`A1@!3_Q5@,$,`]H0D7`$`
+M`!!U9&HRC80D_````#/)`XPD@`$``%"+A"2``0``$\504>@KZ___:)@```#H
+M`2/__U"-A"3\````NP`"``!0:&!/0P"-A"2X`P``4U#HPX'^_X/$%(V$)*P#
+M``!0:FA7_Q50(48`ZP6[``(``%7_M"2P!P``:'`!``!J9U?_%<`@1@"+#62$
+M1`"-1"0H4.B@4/__C40D$%"-1"0L4/\5`#%#`(U$)!A0C40D%%#_%0@Q0P!J
+M,HU$)#1058U$)"105KX`!```5O\5<#%#`&HRC80DF````%!5C40D)%!55O\5
+M=#%#`(U$)#!0C80DF````%!HF0```.@V(O__4&A,3T,`C80DO`,``%-0Z`6!
+M_O^#Q!B-A"2L`P``4&IK5_\54"%&`/:$)%P!```0BPV,W$4`BQ6(W$4`=`:+
+MP@O!=$MJ,HV$)/P```!045+H`>K__VB8````Z-<A__]0C80D_````%!H8$]#
+M`(V$)+@#``!34.B>@/[_@\04C80DK`,``%!J:5?_%5`A1@`SP%]>75N!Q%`:
+M``#"$`"X`"```.@2)P``5E=H`!```(U$)`PS]E#_M"04(```Z'L___^+^(7_
+M#X3S````5;T`"```1H/^`0^$R````&:#?"0,+W0,9H-\)`PM#X6T````#[=$
+M)`Y0Z$1;__^#Z$0/A)````"#Z`%T:H/H"W14@^@##X6-````#[=$)!!0Z!U;
+M__^#Z`!T*(/H,70C@^@!=!*#Z!YU;E6-1"064&ARM$0`ZUS'!6RD1``"````
+MZPK'!6RD1``!````Q@5Z:T4``>M"C40D$+ERQ$0`4.BA+___ZS$/MT0D$%#H
+MP5K__X/X3'4A9H-\)!(`=1G&!7&D1``!ZQ!5C40D%%!H<J1$`.@70?__:``0
+M``"-1"004%?HB3[__XOXA?\/A13___]=7UZ!Q``@``#"!`!6BW0D#%?_="04
+M_W0D$%;HW4#__S/_B\]F.3YT(XO&#[<0@_HZ=`J#^EQT!8/Z+W4&:B5:9HD0
+M08T$3F8Y.'7?7U["#`"X(R-#`.C%)```N$R]`0#HER4``(-]#``/A+$,``!H
+M`!```(U%ZU"-1?-0C87XRO__4(V%J`+__U#_=0SH`.S__XO(B4T,A<D/A($,
+M``!3BUT05E=J!HV%^,K__XVUJ$+^_U]H`!```%90Z&/H__^!Q@`@``"#[P%U
+MZ8OW_S2U&.9#`(V%J`+__U#HL%G__X7`=`M&@_X.<N/I_0L``(/^#0^']`L`
+M`/\DM67-00"#^P(/A>0+``"_``@``(V%L(+__U=0Z+;>__]7C86H(O__4(V%
+M^,K__U"-A;""__]0Z.SY_O^-C:AR___H'.7^_XV%J"+__S/;4(V-J'+__XE=
+M_.@_YO[_C8VPHO__Z(.O_O_I.@$``%.-A;"B__]0_Q58,$,`.)V\LO__#X2@
+M````5XV%^.[__U"-A;""__]0Z![U_O]7C87X[O__4.@A\O[_C86P@O__4.BA
+M=@``B_!9@_X$<A&-A?CN__]0Z(UV``!9._!W%(V%^,K__U#H#OG^_X3`#X7A
+M````C86PHO__4.AH=@``,\EJ'E-FB8Q%LJ+__XU%P%#HOS,``(/$$,=%Q`,`
+M``!J%%AFB470C86PHO__B47(C47`4/\5="!&`(V%L*+__U#_%5PP0P"#^/]T
+M;HV%L*+__U#_%2@P0P"%P'5=B_-3ZP)&5HV%L*+__U!H"%)#`(V%^.[__U=0
+MZ/=\_O^#Q!2-A?CN__]0_Q5<,$,`@_C_=="-A?CN__]0C86PHO__4/\5.#!#
+M`(7`=!!J!%.-A?CN__]0_Q5H,4,`4XV%L*+__U"-C:AR___H->3^_X3`#X6K
+M_O__@TW\_XV-J'+__^BGX_[_Z1P*``"%VP^%%`H``*&$W$4`A<`/E,.$VW42
+M:+1%0P!0Z#.Q``"AA-Q%`%E9BGWSA/]T"(VU^,K__^L0C44,4.CFZO__B_"A
+MA-Q%`(3;=0E0Z"YU``!9B_A6Z"5U```#QXT$10H```!0_S6$W$4`Z#MU``"#
+MQ`R%P'07HX3<10"$VW0%,\EFB0A64.C)L```65F$_P^%APD``%;H_W0``%GI
+M>PD``(7;#X5S"0``C87XRO__4/]U"/\57"%&`.E>"0``A=L/A58)``!F.3UR
+MI$0`#X5)"0``,\"-O?C*__]J(F:)A?CN__]89CF%^,K__W4&C;WZRO__5^B%
+M=```O@`(``!9.\8/@Q0)```/MP=J7%F#^"YU)V8Y3P)U(8/'!#/;9CD?#X3U
+M"```5E>-A?CN__]0Z/@\___I^````&8[P0^$WP```&:%P'0+9H-_`CH/A,\`
+M``"-1>0SVU!J`5-H(%)#`&@"``"`_Q4H($8`A<!U2(U%[,=%[``0``!0C87X
+M[O__4(U%X%!3:'120P#_=>3_%20@1@#_=>3_%00@1@"+1>RY_P<``-'H.\%R
+M`HO!,\EFB8Q%^.[__V8YG?CN__]T+(V%^.[__U#HLG,``%EJ7%EF.8Q%]N[_
+M_W025FB44D,`C87X[O__4.@8//__5^B,<P``B_"-A?CN__]0Z'YS```#\%F!
+M_O\'``"^``@``%ES(%97C87X[O__4.CE.___ZQ!65XV%^.[__U#H_3O__S/;
+M:B)84(V%^.[__U#H)54``%E9A<!T"V8Y6`)U!3/)9HD(5HV%^.[__[]RI$0`
+M4%?HQSO__U:-A?CN__]0Z.GE__]J9O]U"/\59"%&`(OPC87X[O__4%;_%5PA
+M1@!74VA#`0``5O\5`"%&`(V%^.[__U!7Z`QS``!9687`#X1I!P``C87X[O__
+M4%-H0P$``%;_%0`A1@#I4`<``(,];*1$``$/A$,'```/MX7XRO__4.C0.?__
+MA,!T%`^WA?C*__^#Z#"C;*1$`.D>!P``QP5LI$0``@```.D/!P``#[>%^,K_
+M_S/)*\%T+8/H,'07@^@!=".#Z`$/A>\&``#&!5.$1``!ZP:(#5.$1`"(#6"$
+M1`#IU08``(@-4X1$`,8%8(1$``'IPP8```^WA?C*__]0Z*:@``!9@_A&="*#
+M^%5T$3/`HF&$1`"B8H1$`.F:!@``Q@5BA$0``>F.!@``Q@5AA$0``>F"!@``
+M,__&!9CL10`!1XV=^,K__V:#O?C*__\\#X6>````C87ZRO__:CY0Z%!1``!9
+M687`#X2&````C4@"B4WL,\EFB0B-A?C^__]J9%"-A?K*__]0Z&/B__^+V(7;
+M=%UF@[WX_O__`'13:)A20P"-A?C^__]0Z*]3___WV&BD4D,`&\`C^(V%^/[_
+M_U#HF%/__X7`=0-J`U]HK%)#`(V%^/[__U#H@%/__X7`=0-J!E]J9(V%^/[_
+M_U!3ZYB+7>R#?1`%=16#_@D/A;<%``!J`5=3_W4(Z&H)``"#?1`$#X6A!0``
+M@_X&#X68!0``:@!74_]U".A+"0``Z8<%``#&!9GL10`!9CF]^,K__P^$<P4`
+M`(V%^,K__U#H]U+__Z/\Y4,`Z5T%``"#^P$/A7L!``"-A;""__^_``@``%!7
+M_Q5D,4,`5XV%L(+__U#H"^S^_S/`B_!0ZP)&5O\U^.5#`(V%L(+__U!HM%)#
+M`%=H:I1$`.A]=_[_@\08:&J41`#H5-O^_X3`==!H:I1$`&IF_W4(_Q50(48`
+M9H.]^,K__P`/A-\$``"`/7IK10``#X72!```,\!FB87XZO__C87XRO__:BQ0
+MZ+5/``!9687`=5(STHOR9CF5^,K__W1%B\J-A?C*__]F@SA`=!-&C87XRO__
+MC0PV`\%F.1!UZ>LD:``"``"-A?K*__\#P5"-A?CJ__]0Z'XX__\SP&:)A'7X
+MRO__9H.]^.K__P!U,&@`$```C86H0O[_4(V%^,K__U#H4CC__V@``@``C86H
+M8O[_4(V%^.K__U#H.CC__XV%^,K__U#H?][__S/`9HF%^-K__XV%^.K__VHD
+M4(V%^,K__U#_=0CH<=C__X/X!@^$\P,``&H!_W4(,\#&!5"$1``!9J-JE$0`
+M_Q6X($8`@_L'#X70`P``@SULI$0``'4*QP5LI$0``@```,8%:)1$``'IL0,`
+M`(/[`W4I9CF]^,K__W02C87XRO__4.ANJ@``6:.4[$4`C44,4.B2Y/__HY#L
+M10#&!7MK10`!Z7<#``"#^P8/A6X#```SP&:)A?BR__\/MX6H0O[_4.A(G0``
+MO@`(``!95H/X4'0S@_A4C87XLO__=!1H@LM%`%#H1S?__\=%[!````#K+&B"
+MJT4`4.@S-___QT7L!P```.L8:(*[10"-A?BR__]0Z!DW___'1>P"````,\!F
+MB86H8O__9HF%^,+__XV%J&+^_U90C86PDO__4.CN-O__:B);9CF=L)+__W5/
+MOP`(``"-A:IB_O]74(V%L)+__U#HR3;__XV%LI+__U-0Z*5-``!9687`#X3U
+M````,\EFB0B#P`)H``0``%"-A?C"__]0Z)@V___IU@```(V%L)+__U#HR=C^
+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
+M(48`Z1/___^X#"%&`.D)____N`@A1@#I__[__[@$(48`Z?7^__^X`"%&`.GK
+M_O__N/P@1@#IX?[__[CX($8`Z=?^__^X]"!&`.G-_O__N/`@1@#IP_[__[CL
+M($8`Z;G^__^XZ"!&`.FO_O__N.0@1@#II?[__[C@($8`Z9O^__^XO"!&`.F1
+M_O__N*`@1@#IA_[__[BD($8`Z7W^__^XJ"!&`.ES_O__N*P@1@#I:?[__[BP
+M($8`Z5_^__^XM"!&`.E5_O__N+@@1@#I2_[__[AH(48`Z4'^__^XP"!&`.DW
+M_O__N,0@1@#I+?[__[C(($8`Z2/^__^XS"!&`.D9_O__N-`@1@#I#_[__[C4
+M($8`Z07^__^XV"!&`.G[_?__N-P@1@#I\?W__[AH($8`Z0````!14E!HY+U#
+M`.BC!```6EG_X+AD($8`Z>7___^X6"!&`.G;____N$P@1@#IT?___[A0($8`
+MZ<?___^X5"!&`.F]____N&P@1@#IL____[A<($8`Z:G___^X8"!&`.F?____
+MN$0@1@#I`````%%24&@$OD,`Z#@$``!:6?_@N#P@1@#IY?___[A`($8`Z=O_
+M__]14E!H)+Y#`.@3!```6EG_X+@(($8`Z>7___^X#"!&`.G;____N``@1@#I
+MT?___[@4($8`Z<?___^X&"!&`.F]____N!P@1@#IL____[@L($8`Z:G___^X
+M!"!&`.F?____N!`@1@#IE?___[@H($8`Z8O___^X)"!&`.F!____N"`@1@#I
+M=____[B(($8`Z0````!14E!H1+Y#`.B``P``6EG_X+B0($8`Z>7___^XC"!&
+M`.G;____N'0@1@#IT?___[B$($8`Z<?___^X@"!&`.F]____N'P@1@#IL___
+M_[AX($8`Z:G___^X?"%&`.D`````45)0:&2^0P#H'P,``%I9_^"X>"%&`.GE
+M____N(0A1@#IV____[B`(48`Z='___^X="%&`.G'____]P5@54,``!```'0F
+MZ)X```"AX`Q&`$"CX`Q&`(/X`74,:.0,1@!J!.C4`0``Z7<"``##H=`,1@!3
+M,]M#.\-U!#+`6\.%P'0$BL-;PU9HC%1#`/\5@#!#`(OPA?9U!(OSZRIHJ%1#
+M`%;_%8PP0P"%P'3L:,!40P!6H]0,1@#_%8PP0P"%P'37H]@,1@"+SKK0#$8`
+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
+M^'06,\F%_P^?P8T,3?____^%R0^%I`8```^V3@\/MD(/*\AT$C/`A<D/G\"-
+M#$7_____ZP(SR87)#X5^!@``BT80.T(0#X2`````#[9"$`^V?A`K^'04A?\/
+MG\&-#$W_____A<D/A5(&```/MGX1#[9"$2OX=!8SR87_#Y_!C0Q-_____X7)
+M#X4P!@``#[9^$@^V0A(K^'06,\F%_P^?P8T,3?____^%R0^%#@8```^V3A,/
+MMD(3*\AT$C/`A<D/G\"-#$7_____ZP(SR87)#X7H!0``BT84.T(4='\/MO@/
+MMD(4*_AT%(7_#Y_!C0Q-_____X7)#X7!!0``#[9^%0^V0A4K^'06,\F%_P^?
+MP8T,3?____^%R0^%GP4```^V?A8/MD(6*_AT%C/)A?\/G\&-#$W_____A<D/
+MA7T%```/MDX7#[9"%RO(=!(SP(7)#Y_`C0Q%_____^L",\F%R0^%5P4``(M&
+M&#M"&'1_#[;X#[9"&"OX=!2%_P^?P8T,3?____^%R0^%,`4```^V?AD/MD(9
+M*_AT%C/)A?\/G\&-#$W_____A<D/A0X%```/MGX:#[9"&BOX=!8SR87_#Y_!
+MC0Q-_____X7)#X7L!```#[9.&P^V0ALKR'02,\"%R0^?P(T,1?_____K`C/)
+MA<D/A<8$``"+1AP[0AQT?P^V^`^V0APK^'04A?\/G\&-#$W_____A<D/A9\$
+M```/MGX=#[9"'2OX=!8SR87_#Y_!C0Q-_____X7)#X5]!```#[9^'@^V0AXK
+M^'06,\F%_P^?P8T,3?____^%R0^%6P0```^V3A\/MD(?*\AT$C/`A<D/G\"-
+M#$7_____ZP(SR87)#X4U!```:B!9*]D#\0/1.]D/@U_[__\#\P/3@_L?#X<5
+M!```_R2=FA="`(M&Y#M"Y`^$@0````^V^`^V0N0K^'06,\F%_P^?P8T,3?__
+M__^%R0^%XP,```^V?N4/MD+E*_AT%C/)A?\/G\&-#$W_____A<D/A<$#```/
+MMG[F#[9"YBOX=!8SR87_#Y_!C0Q-_____X7)#X6?`P``#[9.YP^V0N<KR'02
+M,\"%R0^?P(T,1?_____K`C/)A<D/A7D#``"+1N@[0N@/A($````/MO@/MD+H
+M*_AT%C/)A?\/G\&-#$W_____A<D/A4P#```/MG[I#[9"Z2OX=!8SR87_#Y_!
+MC0Q-_____X7)#X4J`P``#[9^Z@^V0NHK^'06,\F%_P^?P8T,3?____^%R0^%
+M"`,```^V3NL/MD+K*\AT$C/`A<D/G\"-#$7_____ZP(SR87)#X7B`@``BT;L
+M.T+L#X2!````#[;X#[9"["OX=!8SR87_#Y_!C0Q-_____X7)#X6U`@``#[9^
+M[0^V0NTK^'06,\F%_P^?P8T,3?____^%R0^%DP(```^V?NX/MD+N*_AT%C/)
+MA?\/G\&-#$W_____A<D/A7$"```/MD[O#[9"[RO(=!(SP(7)#Y_`C0Q%____
+M_^L",\F%R0^%2P(``(M&\#M"\`^$@0````^V^`^V0O`K^'06,\F%_P^?P8T,
+M3?____^%R0^%'@(```^V?O$/MD+Q*_AT%C/)A?\/G\&-#$W_____A<D/A?P!
+M```/MG[R#[9"\BOX=!8SR87_#Y_!C0Q-_____X7)#X7:`0``#[9.\P^V0O,K
+MR'02,\"%R0^?P(T,1?_____K`C/)A<D/A;0!``"+1O0[0O0/A((````/MD+T
+M#[9^]"OX=!8SR87_#Y_!C0Q-_____X7)#X6&`0``#[9^]0^V0O4K^'06,\F%
+M_P^?P8T,3?____^%R0^%9`$```^V?O8/MD+V*_AT%C/)A?\/G\&-#$W_____
+MA<D/A4(!```/MD[W#[9"]RO(=!(SP(7)#Y_`C0Q%_____^L",\F%R0^%'`$`
+M`(M&^#M"^`^$@0````^V^`^V0O@K^'06,\F%_P^?P8T,3?____^%R0^%[P``
+M``^V?OD/MD+Y*_AT%C/)A?\/G\&-#$W_____A<D/A<T````/MG[Z#[9"^BOX
+M=!8SR87_#Y_!C0Q-_____X7)#X6K````#[9.^P^V0OLKR'02,\"%R0^?P(T,
+M1?_____K`C/)A<D/A84```"+1OP[0OQT=0^V^`^V0OPK^'02,\F%_P^?P8T,
+M3?____^%R75@#[9^_0^V0OTK^'02,\F%_P^?P8T,3?____^%R75"#[9^_@^V
+M0OXK^'02,\F%_P^?P8T,3?____^%R74D#[9._P^V0O\KR'02,\"%R0^?P(T,
+M1?_____K`C/)A<EU`C/)B\%?Z>8-``"+1N,[0N-T=0^V^`^V0N,K^'02,\F%
+M_P^?P8T,3?____^%R773#[9^Y`^V0N0K^'02,\F%_P^?P8T,3?____^%R76U
+M#[9^Y0^V0N4K^'02,\F%_P^?P8T,3?____^%R767#[9.Y@^V0N8KR'02,\"%
+MR0^?P(T,1?_____K`C/)A<D/A7'___^+1N<[0N</A($````/MO@/MD+G*_AT
+M%C/)A?\/G\&-#$W_____A<D/A43___\/MG[H#[9"Z"OX=!8SR87_#Y_!C0Q-
+M_____X7)#X4B____#[9^Z0^V0NDK^'06,\F%_P^?P8T,3?____^%R0^%`/__
+M_P^V3NH/MD+J*\AT$C/`A<D/G\"-#$7_____ZP(SR87)#X7:_O__BT;K.T+K
+M#X2!````#[;X#[9"ZROX=!8SR87_#Y_!C0Q-_____X7)#X6M_O__#[9^[`^V
+M0NPK^'06,\F%_P^?P8T,3?____^%R0^%B_[__P^V?NT/MD+M*_AT%C/)A?\/
+MG\&-#$W_____A<D/A6G^__\/MD[N#[9"[BO(=!(SP(7)#Y_`C0Q%_____^L"
+M,\F%R0^%0_[__XM&[SM"[P^$@0````^V^`^V0N\K^'06,\F%_P^?P8T,3?__
+M__^%R0^%%O[__P^V?O`/MD+P*_AT%C/)A?\/G\&-#$W_____A<D/A?3]__\/
+MMG[Q#[9"\2OX=!8SR87_#Y_!C0Q-_____X7)#X72_?__#[9.\@^V0O(KR'02
+M,\"%R0^?P(T,1?_____K`C/)A<D/A:S]__^+1O,[0O,/A($````/MO@/MD+S
+M*_AT%C/)A?\/G\&-#$W_____A<D/A7_]__\/MG[T#[9"]"OX=!8SR87_#Y_!
+MC0Q-_____X7)#X5=_?__#[9^]0^V0O4K^'06,\F%_P^?P8T,3?____^%R0^%
+M._W__P^V3O8/MD+V*\AT$C/`A<D/G\"-#$7_____ZP(SR87)#X45_?__BT;W
+M.T+W#X2"````#[9"]P^V?O<K^'06,\F%_P^?P8T,3?____^%R0^%Y_S__P^V
+M?O@/MD+X*_AT%C/)A?\/G\&-#$W_____A<D/A<7\__\/MG[Y#[9"^2OX=!8S
+MR87_#Y_!C0Q-_____X7)#X6C_/__#[9.^@^V0OHKR'02,\"%R0^?P(T,1?__
+M___K`C/)A<D/A7W\__^+1OL[0OL/A($````/MO@/MD+[*_AT%C/)A?\/G\&-
+M#$W_____A<D/A5#\__\/MG[\#[9"_"OX=!8SR87_#Y_!C0Q-_____X7)#X4N
+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
+M9/\U`````*%HYD,`,\10C40D!&2C`````(M$)"B+6`B+<`R#_O]T.H-\)"S_
+M=`8[="0L=BV--':+#+.)3"0,B4@,@WRS!`!U%V@!`0``BT2S".A)````BT2S
+M".A?````Z[>+3"0$9(D-`````(/$&%]>6\,SP&2+#0````"!>010-T(`=1"+
+M40R+4@PY40AU!;@!````PU-1NY#F0P#K"U-1NY#F0P"+3"0,B4L(B4,$B6L,
+M55%06%E=65O"!`#_T,-6Z._J__^+<`2%]G0)B\[H);?____6Z+$\``#,B_]5
+MB^R+10AFBPB#P`)FA<EU]2M%"-'X2%W#Z5M/``"+_U6+[%WIBD\``(O_58OL
+M7>EM4```B_]5B^R+50Q6BW4(5P^W.@^W#BO/=14K\F:%_W0.@\("#[<Z#[<,
+M%BO/=.U?7H7)>06#R/]=PS/`A<D/G\!=P\S,S,S,S,R+3"0$]\$#````="2*
+M`8/!`83`=$[WP0,```!U[P4`````C:0D`````(VD)`````"+`;K__OY^`]"#
+M\/\SPH/!!*D``0&!=.B+0?R$P'0RA.1T)*D``/\`=!.I````_W0"Z\V-0?^+
+M3"0$*\'#C4'^BTPD!"O!PXU!_8M,)`0KP<.-0?R+3"0$*\'#B_]5B^R![(0$
+M``"A:.9#`#/%B47\@WT8`(M%$%.+712)A:#[__]U&.C"4@``QP`6````Z)91
+M``"#R/_I$0$``(7;=`2%P'3@5E?_=1R-C7S[___HPP8``(M-"(V]D/O__S/`
+M,]*KJZNKB\&+O:#[__^#X`*)A8S[__\+PHF]D/O__XF=E/O__XF5F/O__W4*
+MB)6<^___A?]U!\:%G/O__P'_=2"-A9#[__^)A:#[__^-A8#[__]0_W48C86@
+M^____W4,45"-C:3[___HX04``(V-I/O__^C4"```B_"%_W1+BT4(,\F#X`$+
+MP70<A=MU!(7V=6^+A9C[__\[PW4JA?9X*3OS=B7K6XN%C/O__PO!=$V%VW05
+MA?9Y!(@/ZPV+A9C[__\[PW1-B`P'C8WD^___Z&<&``"`O8C[__\`=`V+C7S[
+M__^#H5`#``#]7XO&7HM-_#/-6^@3M/__B^5=PX7;=06#SO_KPXN%F/O__SO#
+M=;9J_EZ(3!__Z["+_U6+[('LA`0``*%HYD,`,\6)1?R#?1@`BT404XM=%(F%
+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
+M03*#Z"!T+8/H`W0B@^@(=!=(@^@!=`N#Z`-U'(-)(`CK%H-)(`3K$(-)(`'K
+M"H-)("#K!(-)(`*P`</H.0```(3`=1/H?$8``,<`%@```.A010``,L##L`'#
+MZ$0```"$P'43Z%U&``#'`!8```#H,44``#+`P[`!PXO_5FH`B_'H.0```(3`
+M=0)>PXU&&%`/MD8QC8Y(!```4.CF$```L`%>PXU1&,9!/`%2#[=1,H'!2`0`
+M`%+H#!$``+`!PXO_5HOQ5[\`@```BT8(BDXQQD8\``^VT8L`BP!FA3Q0=#B-
+M1AA048V.2`0``.B5$```BTX0B@&(1C&-00&`?C$`B480=13HO$4``,<`%@``
+M`.B01```,L#K`K`!7U["!`"`>3$J=`J-02A0Z)W[___#@T$4!(M!%(M`_(E!
+M*(7`>02#22C_L`'#9H-Y,BIT"HU!*%#HT/O__\.#010$BT$4BT#\B4$HA<!Y
+M!(-)*/^P`<.*03$\1G4:BP&#X`B#R``/A5$!``#'01P'````Z<0"```\3G4F
+MBP%J"%HCPH/(``^%,0$``(E1'.@810``QP`6````Z.Q#```RP,.#>2P`=></
+MOL"#^&H/C[X````/A*\```"#^$ET3X/X3'0^@_A4="V#^&@/A>L```"+01"`
+M.&AU$$#'02P!````B4$0Z=,```#'02P"````Z<<```#'02P-````Z;L```#'
+M02P(````Z:\```"+41"*`CPS=1B`>@$R=1*-0@+'02P*````B4$0Z8X````\
+M-G45@'H!-'4/C4("QT$L"P```(E!$.MU/&1T%#QI=!`\;W0,/'5T"#QX=`0\
+M6'5=QT$L"0```.M4QT$L!0```.M+@_AL="J#^'1T'(/X=W0.@_AZ=3?'02P&
+M````ZR['02P,````ZR7'02P'````ZQR+01"`.&QU#4#'02P$````B4$0ZP?'
+M02P#````L`'##[=!,H/X1G4:BP&#X`B#R``/A6(!``#'01P'````Z8@#``"#
+M^$YU)HL!:@A:(\*#R``/A4$!``")41SHK$,``,<`%@```.B`0@``,L##@WDL
+M`'7G@_AJ#X_-````#X2^````@_A)=%.#^$QT0H/X5'0Q:FA:.\(/A?P```"+
+M01!F.1!U$H/``L=!+`$```")01#IX@```,=!+`(```#IU@```,=!+`T```#I
+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
+M___HZ/[__X/$#/^U"/___XO._[7\_O___Q5@,D,`_]:#Q`B%P'X55_^U"/__
+M__^U_/[__^BV_O__@\0,_[4(____B\Y3_Q5@,D,`_]:#Q`B%P'X05_^U"/__
+M_U/HCO[__X/$#(N%"/___XOXB[7\_O__BY4$____B87L_O__D#O>=C<#\HFU
+M]/[__SOS<R6+C0#___]35O\58#)#`/^5`/___XN5!/___X/$"(7`?M,[WG<]
+MBX4(____B[T`____`_([\'<?4U:+S_\58#)#`/_7BY4$____@\0(A<"+A0C_
+M__]^VXN][/[__XFU]/[__XNU`/___^L&C9L`````BY4$____*_H[^W894U>+
+MSO\58#)#`/_6@\0(A<!_X8N5!/___XNU]/[__XF][/[__SO^<EZ)E>C^__^)
+MO>3^__\[]W0SB]Z+UXNUZ/[__RO?B@*-4@&*3!/_B$03_XA*_X/N`77KB[7T
+M_O__BYWP_O__BY4$____BX4(____.]\/A?K^__^+WHF=\/[__^GM_O__`_H[
+MWW,RC:0D`````"OZ._MV)8N-`/___U-7_Q5@,D,`_Y4`____BY4$____@\0(
+MA<!TV3O?<B^+M0#___\K^CN]_/[__W894U>+SO\58#)#`/_6BY4$____@\0(
+MA<!TW8NU]/[__XN5"/___XO'BYW\_O__B\HKSBO#.\%\.3O?<QB+A?C^__^)
+MG(4,____B7R%A$")A?C^__^+O03___\[\G-,B\Z+M0#___^)C?S^___I:OW_
+M_SOR<QB+A?C^__^)M(4,____B52%A$")A?C^__^+C?S^__^+M0#___\[SW,5
+MB]>+O03____I*_W__XNU`/___^L&B[T$____BX7X_O__@^@!B87X_O__>!:+
+MC(4,____BU2%A(F-_/[__^GV_/__6XM-_%\SS5[HY(W__XOE7</,S,S,S,R+
+M5"0$BTPD"/?"`P```'5`BP(Z`74RA,!T)CIA`74IA.1T'<'H$#I!`G4=A,!T
+M$3IA`W44@\$$@\($A.1UTHO_,\##ZP/,S,P;P(/(`<.+__?"`0```'08B@*#
+MP@$Z`77G@\$!A,!TV/?"`@```'2@9HL"@\(".@%USH3`=,(Z80%UQ83D=+F#
+MP0+KA,S,S,Q35HM,)`R+5"00BUPD%/?#_____W10*\KWP@,```!T%P^V!`HZ
+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
+M=`>[````@.L0N____W_K"?;#`G0"]]Z+WH!]Y`!>#X0@_O__BT78@Z!0`P``
+M_>D1_O__B_]5B^R#[!R-30Q35^AYZO__A,!T(XM%%&H"7X7`="\[QWP%@_@D
+M?B;HN!\``,<`%@```.B,'@``,]N+51"%TG0%BTT,B0I?B\-;B^5=PU;_=0B-
+M3>3HM]/__XM%##/VB77XB47TZP.+10P/MS`#QVH(5HE%#.CA.```65F%P'7G
+M,]LX71@/E<-F@_XM=00+W^L&9H/^*W4.BWT,#[<W@\<"B7T,ZP.+?0R+313'
+M1?P9````:C!8:A!:A<ET"#O*#X7;`@``9COP#X)5`@``:CI89COP<PL/M\:#
+MZ##I/0(``+@0_P``9COP#X,8`@``N&`&``!F._`/@B8"``"#P`IF._!S#0^W
+MQBU@!@``Z0P"``"X\`8``&8[\`^"`P(``(/`"F8[\',-#[?&+?`&``#IZ0$`
+M`+AF"0``9COP#X+@`0``@\`*9COP<PT/M\8M9@D``.G&`0``N.8)``!F._`/
+M@KT!``"#P`IF._!S#0^WQBWF"0``Z:,!``"X9@H``&8[\`^"F@$``(/`"F8[
+M\',-#[?&+68*``#I@`$``+CF"@``9COP#X)W`0``@\`*9COP<PT/M\8MY@H`
+M`.E=`0``N&8+``!F._`/@E0!``"#P`IF._!S#0^WQBUF"P``Z3H!``"X9@P`
+M`&8[\`^",0$``(/`"F8[\',-#[?&+68,``#I%P$``+CF#```9COP#X(.`0``
+M@\`*9COP<PT/M\8MY@P``.GT````N&8-``!F._`/@NL```"#P`IF._!S#0^W
+MQBUF#0``Z=$```"X4`X``&8[\`^"R````(/`"F8[\',-#[?&+5`.``#IK@``
+M`+C0#@``9COP#X*E````@\`*9COP<PT/M\8MT`X``.F+````N"`/``!F._`/
+M@H(```"#P`IF._!S"@^WQBT@#P``ZVNX0!```&8[\')F@\`*9COP<PH/M\8M
+M0!```.M/N.`7``!F._!R2H/`"F8[\',*#[?&+>`7``#K,[@0&```9COP<BZ#
+MP`IF._!S)@^WQBT0&```ZQ>X&O\``&8[\',*#[?&+1#_``#K`X/(_X/X_W4P
+M:D%89CO&=PAJ6EAF._!V"8U&GV8[1?QW%(U&GV8[1?P/M\9W`X/H((/`R>L#
+M@\C_A<!T#87)=47'110*````ZSP/MP>#QP*)?0R#^'AT'H/X6'09A<EU!\=%
+M%`@```!0C4T,Z($#``"+?0SK$(7)=0.)510/MS>#QP*)?0R#R/\STO=U%(O(
+M:C!89COP#X)5`@``:CI89COP<PL/M\:#Z##I/0(``+@0_P``9COP#X,8`@``
+MN&`&``!F._`/@B8"``"#P`IF._!S#0^WQBU@!@``Z0P"``"X\`8``&8[\`^"
+M`P(``(/`"F8[\',-#[?&+?`&``#IZ0$``+AF"0``9COP#X+@`0``@\`*9COP
+M<PT/M\8M9@D``.G&`0``N.8)``!F._`/@KT!``"#P`IF._!S#0^WQBWF"0``
+MZ:,!``"X9@H``&8[\`^"F@$``(/`"F8[\',-#[?&+68*``#I@`$``+CF"@``
+M9COP#X)W`0``@\`*9COP<PT/M\8MY@H``.E=`0``N&8+``!F._`/@E0!``"#
+MP`IF._!S#0^WQBUF"P``Z3H!``"X9@P``&8[\`^",0$``(/`"F8[\',-#[?&
+M+68,``#I%P$``+CF#```9COP#X(.`0``@\`*9COP<PT/M\8MY@P``.GT````
+MN&8-``!F._`/@NL```"#P`IF._!S#0^WQBUF#0``Z=$```"X4`X``&8[\`^"
+MR````(/`"F8[\',-#[?&+5`.``#IK@```+C0#@``9COP#X*E````@\`*9COP
+M<PT/M\8MT`X``.F+````N"`/``!F._`/@H(```"#P`IF._!S"@^WQBT@#P``
+MZVNX0!```&8[\')F@\`*9COP<PH/M\8M0!```.M/N.`7``!F._!R2H/`"F8[
+M\',*#[?&+>`7``#K,[@0&```9COP<BZ#P`IF._!S)@^WQBT0&```ZQ>X&O\`
+M`&8[\',*#[?&+1#_``#K`X/(_X/X_W4P:D%89CO&=PAJ6EAF._!V"8U&GV8[
+M1?QW%(U&GV8[1?P/M\9W`X/H((/`R>L#@\C_@_C_=#$[111S+(MU^(/+"#OQ
+M<@MU!#O"=@6#RP3K"0^O=10#\(EU^`^W-X/'`HE]#.DY_?__5HU-#.B2````
+M]L,(=0J+1?0SVXE%#.M!BW7X5E/H]O;__UE9A,!T*.A'&0``QP`B````]L,!
+M=06#SO_K&O;#`G0'NP```(#K$+O___]_ZPGVPP)T`O?>B]Z`??``7@^$9?G_
+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
+M_Q44,4,`B47XA<`/A)D```"-'`"-2P@[V1O`A<%T2HU+"#O9&\`CP8U+"#T`
+M!```=QD[V1O`(\'H?E@``(OTA?9T8,<&S,P``.L9.]D;P"/!4.B<P___B_!9
+MA?9T1<<&W=T``(/&".L"B_>%]G0T4U=6Z#0Q__^#Q`S_=?A6_W44_W40:@'_
+M=1S_%10Q0P"%P'00_W484%;_=0S_%0PR0P"+^%;HXN#__UF`??0`=`J+1>B#
+MH%`#``#]B\>-9=Q?7EN+3?PSS>CI*?__B^5=PXO_58OLBT4(\/]`#(M(?(7)
+M=`/P_P&+B(0```"%R70#\/\!BXB`````A<ET`_#_`8N(C````(7)=`/P_P%6
+M:@:-2"A>@7GX&.A#`'0)BQ&%TG0#\/\"@WGT`'0*BU'\A=)T`_#_`H/!$(/N
+M`776_["<````Z$X!``!97EW#B_]5B^Q14U:+=0A7BX:(````A<!T;#U0[4,`
+M=&6+1GR%P'1>@S@`=5F+AH0```"%P'08@S@`=1-0Z"["____MH@```#HEOO_
+M_UE9BX:`````A<!T&(,X`'434.@,PO___[:(````Z'+\__]96?]V?.CWP?__
+M_[:(````Z.S!__]968N&C````(7`=$6#.`!U0(N&D````"W^````4.C*P?__
+MBX:4````OX`````KQU#HM\'__XN&F````"O'4.BIP?___[:,````Z)[!__^#
+MQ!#_MIP```#HEP```%EJ!EB-GJ````")1?R-?BB!?_@8Z$,`=!V+!X7`=!2#
+M.`!U#U#H9L'___\SZ%_!__]968M%_(-_]`!T%HM'_(7`=`R#.`!U!U#H0L'_
+M_UF+1?R#PP2#QQ"#Z`&)1?QUL%;H*L'__UE?7EN+Y5W#B_]5B^R+30B%R706
+M@?D@94,`=`XSP$#P#\&!L````$!=P[C___]_7<.+_U6+[%:+=0B%]G0@@?X@
+M94,`=!B+AK````"%P'4.5NCJ^___5NC.P/__65E>7<.+_U6+[(M-"(7)=!:!
+M^2!E0P!T#H/(__`/P8&P````2%W#N/___W]=PXO_58OLBT4(A<!T<_#_2`R+
+M2'R%R70#\/\)BXB$````A<ET`_#_"8N(@````(7)=`/P_PF+B(P```"%R70#
+M\/\)5FH&C4@H7H%Y^!CH0P!T"8L1A=)T`_#_"H-Y]`!T"HM1_(72=`/P_PJ#
+MP1"#[@%UUO^PG````.A:____65Y=PVH,:*"\0P#HQ2?__X-EY`#HP<K__XOX
+MBPV@[4,`A8]0`P``=`>+=TR%]G5#:@3H[][__UF#9?P`_S60$D8`C4=,4.@P
+M````65F+\(EUY,=%_/[____H#````(7V=1'H1,#__XMUY&H$Z`7?__]9PXO&
+MZ*$G___#B_]5B^Q6BW4,5X7V=#R+10B%P'0UBS@[_G4$B\;K+5:),.B8_/__
+M687_=.]7Z-;^__^#?PP`677B@?]8YT,`=-I7Z/7\__]9Z]$SP%]>7<.+_U6+
+M[(M-"#/`]L$0=`6X@````%-65[\``@``]L$(=`(+Q_;!!'0%#0`$``#VP0)T
+M!0T`"```]L$!=`4-`!```+X``0``]\$```@`=`(+QHO1NP`#```CTW0?.]9T
+M%CO7=`L[TW43#0!@``#K#`T`0```ZP4-`"```+H````#7R/*7EN!^0````%T
+M&('Y`````G0+.\IU$0T`@```7<.#R$!=PPU`@```7<.+_U6+[(/L#-U]_-OB
+M@ST8#48``0^,@P```&:+1?PSR8O15[\```@`J#]T*:@!=`-J$%JH!'0#@\H(
+MJ`AT`X/*!*@0=`.#R@*H('0#@\H!J`)T`@O7#ZY=^(M%^(/@P(E%]`^N5?2+
+M1?BH/W0IJ`%T`VH06:@$=`.#R0BH"'0#@\D$J!!T`X/)`J@@=`.#R0&H`G0"
+M"\\+RHO!7^L]9HM-_#/`]L$_=#+VP0%T`VH06/;!!'0#@\@(]L$(=`.#R`3V
+MP1!T`X/(`O;!('0#@\@!]L$"=`4-```(`(OE7<.+_U6+[(/L$)O9??AFBT7X
+M,\FH`70#:A!9J`1T`X/)"*@(=`.#R02H$'0#@\D"J"!T`X/)`:@"=`:!R0``
+M"`!35@^W\+L`#```B]97OP`"```CTW0F@?H`!```=!B!^@`(``!T##O3=1*!
+MR0`#``#K"@O/ZP:!R0`!``"!Y@`#``!T##OW=0Z!R0```0#K!H')```"`+H`
+M$```9H7"=`:!R0``!`"+?0R+]XM%"/?6(_$CQPOP._$/A*8```!6Z#\"``!9
+M9HE%_-EM_)O9??QFBT7\,_:H`70#:A!>J`1T`X/."*@(=`.#S@2H$'0#@\X"
+MJ"!T`X/.`:@"=`:!S@``"``/M]"+RB/+="J!^0`$``!T'('Y``@``'0,.\MU
+M%H'.``,``.L.@<X``@``ZP:!S@`!``"!X@`#``!T$('Z``(``'4.@<X```$`
+MZP:!S@```@"Z`!```&:%PG0&@<X```0`@ST8#48``0^,B0$``('G'P,(`P^N
+M7?"+1?`SR83`>0-J$%FI``(``'0#@\D(J0`$``!T`X/)!*D`"```=`.#R0*%
+MPG0#@\D!J0`!``!T!H')```(`(O0NP!@```CTW0J@?H`(```=!R!^@!```!T
+M##O3=1:!R0`#``#K#H')``(``.L&@<D``0``:D`E0(```%LKPW0;+<!_``!T
+M#"O#=1:!R0````'K#H')`````^L&@<D````"B\<C?0CWT"/!"\<[P0^$M0``
+M`%#H1/S__U")1?3H1R```%E9#ZY=](M%]#/)A,!Y`VH06:D``@``=`.#R0BI
+M``0``'0#@\D$J0`(``!T`X/)`JD`$```=`.#R0&I``$``'0&@<D```@`B]"_
+M`&```"/7="J!^@`@``!T'('Z`$```'0,.]=U%H')``,``.L.@<D``@``ZP:!
+MR0`!```E0(```"O#=!LMP'\``'0,*\-U%H')`````>L.@<D````#ZP:!R0``
+M``*+P0O.,\:I'P,(`'0&@<D```"`B\'K`HO&7UY;B^5=PXO_58OLBTT(,\#V
+MP1!T`4#VP0AT`X/(!/;!!'0#@\@(]L$"=`.#R!#VP0%T`X/((/?!```(`'0#
+M@\@"5HO1O@`#``!7OP`"```CUG0C@?H``0``=!8[UW0+.]9U$PT`#```ZPP-
+M``@``.L%#0`$``"+T8'B```#`'0,@?H```$`=08+Q^L""\9?7O?!```$`'0%
+M#0`0``!=PXO_58OLBU4(5H72=1;HGK[__VH67HDPZ'.]__^+QNF6````@WT,
+M`';DBTT0Q@(`A<E^!(O!ZP(SP$`Y10QW">ALOO__:B+KS(MU%(7V=+Y3C5H!
+MB\-7BWX(Q@(PA<E^%HH?A-MT`T?K`K,PB!A`287)?^V-6@'&``"%R7@2@#\U
+M?`WK`\8`,$B`.#ET]_X`@#HQ=07_1@3K'(O+C7$!B@%!A,!U^2O.C4$!4%-2
+MZ)1,__^#Q`Q?,\!;7EW#B_]6B_%6Z$,?``"+!H/@'UD\'W4&QD8(`.L+5NB3
+M'P``6<9&"`&+QE[#B_]5B^R![!P"``!3BUT(BP.%P'4',]);B^5=PU>+?0R+
+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
+M@_K_#X26````B_*-A3#^__^+E;#X__\K\HT$L(F%M/C__SO*<FT[\W,$BSCK
+M`C/_C4;_.\-S"XN%M/C__XM`_.L",\`CA8SX__\CO:CX__^+C9#X___3Z(N-
+MI/C__]/GBXV@^/__"\>)A(TP_O__28N%M/C__TZ#Z`2)C:#X__^)A;3X__^#
+M^?]T"(N=+/[__^N/BY6L^/__B[6P^/__A?9T#(O.C;TP_O__,\#SJX"]N_C_
+M_P"[S`$``'0+C4(!B84L_O__ZS.)E2S^___K*S/`N\P!``!0B86,^O__B84L
+M_O__C860^O__4(V%,/[__U-0Z(#A__^#Q!"#I93Z__\`,\EJ!%A!B860^O__
+MB8V,^O__B8U<_/__4(V%D/K__U"-A6#\__]34.A)X?__@\00Z5P$``"+A;3X
+M__\STD"+^(/@'VH@62O(B86P^/__,\#![P5`B;VT^/__B8V0^/__Z#`3__^+
+MC)TL_O__2(.EG/C__P`/O<F)A:CX___WT(F%C/C__W0#0>L",\EJ(%@KP8T4
+M.SF%L/C__XF5H/C__P^7P(/Z<XB%N_C__P^7P8/Z<W4(A,!T!+`!ZP(RP(3)
+M#X7L````A,`/A>0```!J<ED[T7((B]&)C:#X__^+PHF%K/C__X/Z_P^$DP``
+M`(ORC8TP_O__BY6T^/__*_*-#+&)C:3X__\[PG)G._-S!(LYZP(S_XU&_SO#
+M<P6+0?SK`C/`([VH^/__(X6,^/__BXVP^/__T^>+C9#X___3Z(N-I/C__POX
+MBX6L^/__@^D$B8VD^/__B;R%,/[__TA.B86L^/__@_C_=`B+G2S^___KE8N5
+MH/C__XN]M/C__VH"7H7_=`R+SS/`C;TP_O__\ZN`O;OX__\`N\P!``!T"XU"
+M`8F%+/[__^LSB94L_O__ZRLSP+O,`0``4(F%C/K__XF%+/[__XV%D/K__U"-
+MA3#^__]34.B<W___@\00@Z64^O__`#/`0(FUD/K__XF%C/K__XF%7/S__VH$
+MZ1G^__^!_@+\__\/A!D!``"#I9#Z__\`:@)9QX64^O__```0`(F-C/K__SO9
+M#X7W````,]*+A!60^O__.X05,/[__P^%X0```(/"!(/Z"'7D@Z6<^/__``^]
+MQW0%C5`!ZP(STFH@6"O"B_$[P8V%./[__XF%K/C__XOX#Y*%N_C__SOS<PJ+
+M%XF5L/C__^L'@Z6P^/__`(U&_SO#<P6+5_SK`C/2BX6P^/__@^\$P>`"P>H>
+M,]"+A:SX__].B1"#Z`2)A:SX__^#_O]T"(N=+/[__^NM,\`XA;OX__\/E<`#
+MP2N-M/C__XOYB84L_O__P>\%C860^O__B_>)C:CX___!Y@)6:@!0Z`T<__^+
+MC:CX__\SP$"#X1_3X(F$-9#Z__^-1P'I0`$``(N$G2S^__^#I9SX__\`#[W`
+M=`6-2`'K`C/):B!8*\&#^`$/DL"#^W.(A;OX__\/E\&#^W-U"(3`=`2P`>L"
+M,L"$R0^%FP```(3`#X63````:G)9.]ES`HO+@_G_=&F-O3#^__^+\8T\CXF]
+MK/C__SOS<PJ+%XF5L/C__^L'@Z6P^/__`(U&_SO#<P6+5_SK`C/2BX6P^/__
+M@^\$`\#!ZA\ST(N%K/C__TZ)$(/H!(F%K/C__X/^_W0(BYTL_O__ZZZ+M;3X
+M__^`O;OX__\`=`N-00&)A2S^___K,XF-+/[__^LK@Z6,^O__`(V%D/K__X.E
+M+/[__P!J`%"-A3#^__]HS`$``%#H1MW__X/$$#/_C860^O__1RO^B]_!ZP6+
+M\\'F`E9J`%#HQ!K__S/`@^<?0(O/T^")A#60^O__C4,!B86,^O__N\P!``")
+MA5S\___!X`)0C860^O__4(V%8/S__U-0Z.C<__^#Q!R+A93X__\STFH*68F-
+MC/C__X7`#XAC!```]_&)A9#X__^+RHF-G/C__X7`#X1Q`P``@_@F=@-J)E@/
+MM@R%]GQ#``^V-(7W?$,`B_F)A:3X___!YP)7C00QB86,^O__C860^O__:@!0
+MZ!@:__^+QL'@`E"+A:3X__\/MP2%]'Q#`(T$A?!S0P!0C860^O__`\=0Z$X;
+M__^+C8SZ__^#Q!B)C:#X__^#^0%W>HN]D/K__X7_=1,SP(F%O/C__XF%7/S_
+M_^F?`@``@_\!#X2N`@``@[U<_/__``^$H0(``(N%7/S__S/)B86H^/__,_:+
+MQ_>DM6#\__\#P8F$M6#\__^#T@!&B\H[M:CX__]UX.FL````B8R%8/S___^%
+M7/S__^E:`@``@[U<_/__`0^'O@```(N]8/S__XO!P>`"4(V%D/K__XF-7/S_
+M_U"-A6#\__]34.B.V___@\00A?]U&C/`B86,^O__B85<_/__4(V%D/K__^GU
+M`0``@_\!#X3]`0``@[U<_/__``^$\`$``(N%7/S__S/)B86H^/__,_:+Q_>D
+MM6#\__\#P8F$M6#\__^#T@!&B\H[M:CX__]UX(7)#X2X`0``BX5<_/__@_AS
+M#X(]____,\")A8SZ__^)A5S\__]0C860^O__Z>P!```[C5S\__^-O9#Z__\/
+MDL"$P`^%@P```(V]8/S__XV5D/K__XF5L/C__X3`=0:+C5S\__^)C:SX__^$
+MP'0,BX5<_/__B86@^/__,](S]HF5O/C__X7)#X01`0``C87`^/__*_B)O7SX
+M__^-!+>+A`7`^/__B86H^/__A<!U)3OR#X7>````(82UP/C__XU6`8F5O/C_
+M_^G)````C95@_/__ZX$SP#/_B\Z)A;3X__\YA:#X__\/A)0```"#^7-T5SO*
+M=1>#I(W`^/__`$`#QHF%O/C__XN%M/C__XN5L/C__XL$@O>EJ/C__P/'@](`
+M`82-P/C__XN%M/C__X/2`$!!B86T^/__B_J+E;SX__\[A:#X__]UI(7_=#2#
+M^7,/A+0````[RG41@Z2-P/C__P"-00&)A;SX__^+QS/_`82-P/C__XN5O/C_
+M_Q/_0>O(@_ES#X2`````B[U\^/__BXVL^/__1COQ#X7]_O__B\*)E5S\___!
+MX`)0C87`^/__4(V%8/S__U-0Z&K9__^#Q!"P`83`=&R+A9#X__\KA:3X__^)
+MA9#X__\/A97\__^+C9SX__^%R0^$$P4``(L\C8Q]0P"%_W5=,\")A9SV__^)
+MA5S\__]0ZSHSP(F%G/;__XF%7/S__U"-A:#V__]0C85@_/__4U#H_-C__X/$
+M$#+`ZY"#I9SV__\`@Z5<_/__`&H`C86@]O__4(V%8/S__^FA!```@_\!#X2B
+M!```BX5<_/__B86<^/__A<`/A(X$```S]C/)B\?WI(U@_/__`\:)A(U@_/__
+M@](`08OR.XV<^/__=>"%]@^$8@0``(N%7/S__X/X<P^#2____XFTA6#\____
+MA5S\___I000``/?8]_&)A:SX__^+RHF-J/C__X7`#X1,`P``@_@F=@-J)E@/
+MM@R%]GQ#``^V-(7W?$,`B_F)A;3X___!YP)7C00QB86,^O__C860^O__:@!0
+MZ+,5__^+QL'@`E"+A;3X__\/MP2%]'Q#`(T$A?!S0P!0C860^O__`\=0Z.D6
+M__^+C8SZ__^#Q!B)C:#X__^#^0$/AY,```"+O9#Z__^%_W4:,\")A9SV__^)
+MA2S^__]0C86@]O__Z7("``"#_P$/A'H"``"#O2S^__\`#X1M`@``BX4L_O__
+M,\F)A9SX__\S]HO']Z2U,/[__P/!B82U,/[__X/2`$:+RCNUG/C__W7@A<D/
+MA#4"``"+A2S^__^#^',/@\0"``")C(4P_O___X4L_O__Z10"``"#O2S^__\!
+M=WR+O3#^__^+P<'@`E"-A9#Z__^)C2S^__]0C84P_O__4U#H$-?__X/$$(7_
+M#X0]____@_\!#X31`0``@[TL_O__``^$Q`$``(N%+/[__S/)B86<^/__,_:+
+MQ_>DM3#^__\#P8F$M3#^__^#T@!&B\H[M9SX__]UX.E2____.XTL_O__C;V0
+M^O__#Y+`A,`/A8,```"-O3#^__^-E9#Z__^)E9#X__^$P'4&BXTL_O__B8VP
+M^/__A,!T#(N%+/[__XF%H/C__S/2,_:)E;SX__^%R0^$$0$``(V%P/C__ROX
+MB;U\^/__C02WBX0%P/C__XF%G/C__X7`=24[\@^%W@```"&$M<#X__^-5@&)
+ME;SX___IR0```(V5,/[__^N!,\`S_XO.B86D^/__.86@^/__#X24````@_ES
+M=%<[RG47@Z2-P/C__P!``\:)A;SX__^+A:3X__^+E9#X__^+!(+WI9SX__\#
+MQX/2``&$C<#X__^+A:3X__^#T@!`08F%I/C__XOZBY6\^/__.X6@^/__=:2%
+M_W0T@_ES#X0*`0``.\IU$8.DC<#X__\`C4$!B86\^/__B\<S_P&$C<#X__^+
+ME;SX__\3_T'KR(/Y<P^$U@```(N]?/C__XN-L/C__T8[\0^%_?[__XO"B94L
+M_O__P>`"4(V%P/C__U"-A3#^__]34.@NU?__@\00L`&$P`^$P0```(N%K/C_
+M_RN%M/C__XF%K/C__P^%NOS__XN-J/C__X7)#X33````BP2-C'U#`(F%G/C_
+M_X7`#X28````@_@!#X2U````BXTL_O__A<D/A*<````S_S/V]Z2U,/[__P/'
+MB82U,/[__XN%G/C__X/2`$:+^COQ=>"%_W1_BX4L_O__@_AS<TZ)O(4P_O__
+M_X4L_O__ZV4SP%")A9SV__^)A2S^__^-A:#V__]0C84P_O__4U#H:M3__X/$
+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
+MF_:%8?___T%UE=G`V?S9Y)O=O6#___^;BI5A____V<G8X=GDF]V]8/___]GA
+MV?##V<#9_-C9F]_@GG4:V<#<#?*?0P#9P-G\WMF;W^">=`VX`0```,.X````
+M`.OXN`(```#K\5:#['2+]%:#[`C='"2#[`C='"2;W78(Z(('``"#Q!3=9@C=
+M!H/$=%Z%P'0%Z=`!``##S,S,S,S,S,S,@'H.!7419HN=7/___X#/`H#G_K,_
+MZP1FNS\39HF=7O___]FM7O___[M.H$,`V>6)E6S___^;W;U@____QH5P____
+M`)N*C6'____0X=#YT,&*P20/UP^^P('A!`0``(O:`]B#PQ#_(X!Z#@5U$6:+
+MG5S___^`SP*`Y_ZS/^L$9KL_$V:)G5[____9K5[___^[3J!#`-GEB95L____
+MF]V]8/___\:%</___P#9R8J-8?___]GEF]V]8/___]G)BJUA____T.70_=#%
+MBL4D#]>*X-#AT/G0P8K!)`_7T.30Y`K$#[[`@>$$!```B]H#V(/#$/\CZ,X`
+M``#9R=W8P^C$````Z_;=V-W8V>[#W=C=V-GNA.UT`MG@P]W8W=C9Z,/;O6+_
+M___;K6+____VA6G___]`=`C&A7#___\`P\:%</___P#<!3Z@0P##V<G;O6+_
+M___;K6+____VA6G___]`=`G&A7#___\`ZP?&A7#___\`WL'#V[UB____VZUB
+M____]H5I____0'0@V<G;O6+____;K6+____VA6G___]`=`G&A7#___\`ZP?&
+MA7#___\!WL'#W=C=V-LM(*!#`("]</___P!_!\:%</___P$*R</=V-W8VRTT
+MH$,`"NUT`MG@"LET"-T%1J!#`-[)PPK)=`+9X,/,S,S,S,S,S,S,S,S9P-G\
+MW.'9R=G@V?#9Z-[!V?W=V<.+5"0$@>(``P``@\I_9HE4)`;9;"0&PZD```@`
+M=`:X`````,/<!6"@0P"X`````,.+0@0E``#P?ST``/!_=`/=`L.+0@2#[`H-
+M``#_?XE$)`:+0@2+"@^DR`O!X0N)1"0$B0PDVRPD@\0*J0````"+0@3#BT0D
+M""4``/!_/0``\']T`<.+1"0(PV:!/"1_`G0#V2PD6L-FBP0D9CU_`G0>9H/@
+M('05F]_@9H/@('0,N`@```#HV0```%K#V2PD6L.#[`C=%"2+1"0$@\0()0``
+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
+M``````````"&0@"P&4,`<)]"```````````````````0````$!`````@$```
+M`$`0````4!````!@$````'`0````D!````"P$````-`0````T!8```#`'0``
+M`+`_````D&`````080```$"8````<)@```!0FP```)"=````T)X```#@GP``
+M`$"J````T-$```!PT@```*#2````$-,````PTP```&#3````D-,```"@#`$`
+M`-`<`0``\!P!```@'0$``+`>`0``D!\!``#0<@$``/"&`0``T(L!``#@BP$`
+M`/"+`0```(P!```0C`$``"",`0``P(P!``#0C`$``.",`0``,(T!``!`C0$`
+M`-"-`0``X(T!``#PC0$``!".`0``((X!```PC@$``$".`0``<(X!``"`C@$`
+M`!"/`0``((\!``#@D@$```"4`0``\)0!````E0$``!"5`0``()4!```PE0$`
+M``"6`0``,)8!``!`E@$``%"6`0``8)8!``!PE@$``&"8`0``<)@!``#`F0$`
+M`-"9`0``X)D!``#PF0$```":`0``$)H!```@F@$``+"=`0``\)T!``#`I@$`
+M`""L`0``8*\!``!PL0$``'"[`0``4,\!``#0YP$``+#L`0``8.T!``!P[0$`
+M`/#N`0``$.\!``!0[P$``!#S`0```/0!``"@]`$``%`A`@`!0","``"@)`(`
+M`$`E`@``@"4"``!0,@(``/`R`@``4#<"``!P6@(``"!^`@``0'X"``"@@@(`
+M`,""`@``X(("``#P@@(```"#`@``0(,"``!0@P(``&"$`@```(8"``"@D0(`
+M`,"3`@``\),"``"@G@(``'"?`@``<*$"``#0H0(``,"F`@``(*<"```@JP(`
+M`-"K`@``$*P"``"@M0(``%"Y`@``H+H"``#`N@(``'#L`@``$`,#``"P&0,`
+M`&`C`P``<",#``"`(P,``)`C`P``H",#``"P(P,``````````````````"H`
+M````````T!9``%";0`!PF$``D)U``-">0`#@GT``P!U```````!-`&$`>`!I
+M`&T`=0!M`"``80!L`&P`;P!W`&4`9``@`&$`<@!R`&$`>0`@`',`:0!Z`&4`
+M(``H`"4`=0`I`"``:0!S`"``90!X`&,`90!E`&0`90!D````0P!-`%0```!2
+M`%(``````&@`)0!U````:`!C`"4`=0``````>``E`'4```!X`&,`)0!U````
+M```````````````````[`"4`=0```````````0(#!`4&!P@)"@L,#0X/#@H$
+M"`D/#08!#``""P<%`PL(#``%`@\-"@X#!@<!"00'"0,!#0P+#@(&!0H$``\(
+M"0`%!P($"@\.`0L,!@@##0(,!@H`"P@#!`T'!0\.`0D,!0$/#@T$"@`'!@,)
+M`@@+#0L'#@P!`PD%``\$"`8""@8/#@D+`P`(#`(-!P$$"@4*`@@$!P8!!0\+
+M"0X##`T`9^8):H6N9[MR\VX\.O5/I7]2#E&,:`6;J]F#'QG-X%M_4@Y1C&@%
+MFZO9@Q\9S>!;9^8):H6N9[MR\VX\.O5/I2X`7```````4P!E`%,`90!C`'4`
+M<@!I`'0`>0!0`'(`:0!V`&D`;`!E`&<`90```%,`90!2`&4`<P!T`&\`<@!E
+M`%``<@!I`'8`:0!L`&4`9P!E``````!3`&4`0P!R`&4`80!T`&4`4P!Y`&T`
+M8@!O`&P`:0!C`$P`:0!N`&L`4`!R`&D`=@!I`&P`90!G`&4```!<`#\`/P!<
+M``````!5`$X`0P!<``````!!`$,`3````%,`5`!-````<@!T`&T`<``E`&0`
+M`````$"80`!0FT``<)A``)"=0`#0GD``X)]``,`=0``N````+@`N```````J
+M`#\``````"X`<@!A`'(``````"X`90!X`&4``````"X`<P!F`'@``````#``
+M,```````/P`J`#P`/@!\`"(``````#\`*@``````)0!C`#H`7```````7`!<
+M`#\`7```````50!.`$,````J;65S<V%G97,J*BH`````*@!M`&4`<P!S`&$`
+M9P!E`',`*@`J`"H``````'(A&@<`````<SH``%,`5`!2`$D`3@!'`%,```!$
+M`$D`00!,`$\`1P``````30!%`$X`50``````1`!)`%(`10!#`%0`20!/`$X`
+M``!2`%0`3````"0E<SH`````0"5S.@`````@``D`+````',````D)7,`0"5S
+M`"0`)0!S`#H`)0!S```````D`"4`<P`Z``````!#`$$`4`!4`$D`3P!.````
+M4P!)`%H`10``````0P!R`'D`<`!T`#,`,@`N`&0`;`!L````0W)Y<'10<F]T
+M96-T365M;W)Y``!#<GEP=%5N<')O=&5C=$UE;6]R>0````!#`'(`>0!P`'0`
+M4`!R`&\`=`!E`&,`=`!-`&4`;0!O`'(`>0`@`&8`80!I`&P`90!D````0P!R
+M`'D`<`!T`%4`;@!P`'(`;P!T`&4`8P!T`$T`90!M`&\`<@!Y`"``9@!A`&D`
+M;`!E`&0`````````F"^*0I%$-W'/^\"UI=NUZ5O"5CGQ$?%9I((_DM5>'*N8
+MJ@?8`5N#$KZ%,23#?0Q5=%V^<OZQWH"G!MR;=/&;P<%IF^2&1[[OQIW!#\RA
+M#"1O+.DMJH1T2MRIL%S:B/EV4E$^F&W&,:C()P.PQW]9O_,+X,9'D:?546/*
+M!F<I*12%"K<G."$;+OQM+$T3#3A35',*9;L*:G8NR<*!A2QRDJ'HOZ)+9AJH
+M<(M+PJ-1;,<9Z)+1)`:9UH4U#O1PH&H0%L&D&0AL-QY,=T@GM;RP-+,,'#E*
+MJMA.3\J<6_-O+FCN@H]T;V.E>!1XR(0(`L>,^O^^D.ML4*3WH_F^\GAQQ@``
+M``!X;&ES='!O<P````!K`&4`<@!N`&4`;``S`#(``````%-E=$1L;$1I<F5C
+M=&]R>5<`````4V5T1&5F875L=$1L;$1I<F5C=&]R:65S`````'8`90!R`',`
+M:0!O`&X`+@!D`&P`;````$0`6`!'`$D`1`!E`&(`=0!G`"X`9`!L`&P```!S
+M`&8`8P!?`&\`<P`N`&0`;`!L``````!3`%,`4`!)`$,`3`!)`"X`1`!,`$P`
+M``!R`',`80!E`&X`:``N`&0`;`!L``````!5`%@`5`!H`&4`;0!E`"X`9`!L
+M`&P```!D`'<`;0!A`'``:0`N`&0`;`!L``````!C`'(`>0!P`'0`8@!A`',`
+M90`N`&0`;`!L````;`!P`&L`+@!D`&P`;````'4`<P!P`#$`,``N`&0`;`!L
+M````8P!L`&(`8P!A`'0`<0`N`&0`;`!L````8P!O`&T`<@!E`',`+@!D`&P`
+M;```````=P!S`#(`7P`S`#(`+@!D`&P`;```````=P!S`#(`:`!E`&P`<``N
+M`&0`;`!L````<`!S`&$`<`!I`"X`9`!L`&P```!I`&4`9@!R`&$`;0!E`"X`
+M9`!L`&P```!N`'0`<P!H`'(`=0!I`"X`9`!L`&P```!A`'0`;``N`&0`;`!L
+M````<P!E`'0`=0!P`&$`<`!I`"X`9`!L`&P``````&$`<`!P`&@`90!L`'``
+M+@!D`&P`;````'4`<P!E`'(`90!N`'8`+@!D`&P`;````&X`90!T`&$`<`!I
+M`#,`,@`N`&0`;`!L``````!S`&@`9`!O`&,`=@!W`"X`9`!L`&P```!C`'(`
+M>0!P`'0`,P`R`"X`9`!L`&P```!M`',`80!S`&X`,0`N`&0`;`!L``````!C
+M`'(`>0!P`'0`=0!I`"X`9`!L`&P```!W`&D`;@!T`'(`=0!S`'0`+@!D`&P`
+M;```````<P!H`&4`;`!L`#,`,@`N`&0`;`!L````<P!E`&,`=0!R`#,`,@`N
+M`&0`;`!L````8P!A`&(`:0!N`&4`=``N`&0`;`!L````;P!L`&4`80!C`&,`
+M<@!C`"X`9`!L`&P``````&X`=`!M`&$`<@!T`&$`+@!D`&P`;````'``<@!O
+M`&8`80!P`&D`+@!D`&P`;````%<`:0!N`&0`;P!W`',`0P!O`&0`90!C`',`
+M+@!D`&P`;````',`<@!V`&,`;`!I`"X`9`!L`&P``````&,`<P!C`&$`<`!I
+M`"X`9`!L`&P``````',`;`!C`"X`9`!L`&P```!I`&T`80!G`&4`<@!E`',`
+M+@!D`&P`;```````9`!N`',`80!P`&D`+@!$`$P`3```````:0!P`&@`;`!P
+M`&$`<`!I`"X`1`!,`$P``````%<`20!.`$X`4P!)`"X`1`!,`$P``````&X`
+M90!T`'4`=`!I`&P`<P`N`&0`;`!L``````!M`'``<@`N`&0`;`!L````9`!E
+M`'8`<@!T`&P`+@!D`&P`;```````<`!R`&\`<`!S`'D`<P`N`&0`;`!L````
+M;0!L`&$`;@!G`"X`9`!L`&P```!S`&$`;0!C`&P`:0`N`&0`;`!L``````!S
+M`&$`;0!L`&D`8@`N`&0`;`!L``````!W`&L`<P!C`&P`:0`N`&0`;`!L````
+M``!D`&8`<P!C`&P`:0`N`&0`;`!L``````!B`'(`;P!W`&,`;`!I`"X`9`!L
+M`&P```!R`&$`<P!A`&0`:`!L`'``+@!D`&P`;```````9`!H`&,`<`!C`',`
+M=@!C`#8`+@!D`&P`;````&0`:`!C`'``8P!S`'8`8P`N`&0`;`!L``````!8
+M`&T`;`!,`&D`=`!E`"X`9`!L`&P```!L`&D`;@!K`&D`;@!F`&\`+@!D`&P`
+M;```````8P!R`'D`<`!T`',`<``N`&0`;`!L````4@!P`&,`4@!T`%(`90!M
+M`&\`=`!E`"X`9`!L`&P```!A`&,`;`!U`&D`+@!D`&P`;````&0`<P!R`&\`
+M;`!E`"X`9`!L`&P``````'``90!E`'(`9`!I`',`=``N`&0`;`!L``````!U
+M`'@`=`!H`&4`;0!E`"X`9`!L`&P```!0`&P`90!A`',`90`@`'(`90!M`&\`
+M=@!E`"``)0!S`"``9@!R`&\`;0`@`"4`<P`@`&8`;P!L`&0`90!R`"X`(`!)
+M`'0`(`!I`',`(`!U`&X`<P!E`&,`=0!R`&4`(`!T`&\`(`!R`'4`;@`@`"4`
+M<P`@`'4`;@!T`&D`;``@`&D`=``@`&D`<P`@`&0`;P!N`&4`+@```$,`<@!E
+M`&$`=`!E`%0`:`!R`&4`80!D`"``9@!A`&D`;`!E`&0````*`%<`80!I`'0`
+M1@!O`'(`30!U`&P`=`!I`'``;`!E`$\`8@!J`&4`8P!T`',`(`!E`'(`<@!O
+M`'(`(``E`&0`+``@`$<`90!T`$P`80!S`'0`10!R`'(`;P!R`"``)0!D````
+M``````H`5`!H`'(`90!A`&0`(`!P`&\`;P!L`"``:0!N`&D`=`!I`&$`;`!I
+M`'H`80!T`&D`;P!N`"``9@!A`&D`;`!E`&0`+@```"4`;`!S````/@```"4`
+M<P`Z`"``)0!S```````-``H``````%5N:VYO=VX@97AC97!T:6]N````8F%D
+M(&%L;&]C871I;VX``-T\/Q^_6?-(H62\6C)F46`9#@D'!04$!`0#`P,"`@("
+M`)1!`-"+00``ED$`X(Q!`#".00#0C4$`$)I!`."200#@C$$`\)1!`."+00`P
+MED$`0(Y!`,",00`0FD$`$)I!`!":00"`CD$`<)A!`,",00`0FD$`X(Q!`.",
+M00#@DD$``)5!`/"+00!`ED$`<(Y!`-",00#`C$$`P(Q!`,",00!PF$$`<)A!
+M`#".00#`C$$`X))!`,",00#@F4$`()5!`!",00!@ED$`P(Q!`#".00`0CD$`
+M$(]!`!"500``C$$`4)9!`,"900#PC4$`T)E!`!":00`0FD$`,(U!`."200#@
+MDD$`8)A!`/"900`@CD$`<)A!`."-00``FD$`0(U!`#"500`@C$$`<)9!`,",
+M00`PCD$`$(Y!`""/00!2`&$`<@!(`'0`;0!L`$,`;`!A`',`<P!.`&$`;0!E
+M``````!3`&@`90!L`&P`+@!%`'@`<`!L`&\`<@!E`'(``````&$`8@!O`'4`
+M=``Z`&(`;`!A`&X`:P```#P`:`!T`&T`;``^```````\`&@`90!A`&0`/@`\
+M`&T`90!T`&$`(`!H`'0`=`!P`"T`90!Q`'4`:0!V`#T`(@!C`&\`;@!T`&4`
+M;@!T`"T`=`!Y`'``90`B`"``8P!O`&X`=`!E`&X`=``]`"(`=`!E`'@`=``O
+M`&@`=`!M`&P`.P`@`&,`:`!A`'(`<P!E`'0`/0``````=0!T`&8`+0`X`"(`
+M/@`\`"\`:`!E`&$`9``^```````\`"\`:`!T`&T`;``^````/``O`'``/@``
+M````/`!B`'(`/@``````/`!S`'0`>0!L`&4`/@```#P`+P!S`'0`>0!L`&4`
+M/@```````````#P`<P!T`'D`;`!E`#X`8@!O`&0`>0![`&8`;P!N`'0`+0!F
+M`&$`;0!I`&P`>0`Z`"(`00!R`&D`80!L`"(`.P!F`&\`;@!T`"T`<P!I`'H`
+M90`Z`#$`,@`[`'T`/``O`',`=`!Y`&P`90`^```````F`&X`8@!S`'``.P``
+M````L)U!`/"=00"PG4$`\)U!`$4`1`!)`%0``````*G(7NR5PQ1#G'=4UZDU
+M_W!0`$X`1P```'(`:0!C`&@`90!D`#(`,``N`&0`;`!L``````!S.DE$4U]"
+M4D]74T54251,10```',Z24137T--1$585%)!0U1)3D<`<SI)1%-?4TM)4%!)
+M3D<``',Z24137U5.15A014]&``!S.DE$4U]&24Q%2$5!1$520E)/2T5.``!S
+M.DE$4U](14%$15)"4D]+14X``',Z24137TU!24Y(14%$15)"4D]+14X``',Z
+M24137T--5$A%041%4D)23TM%3@```',Z24137T--5$)23TM%3@!S.DE$4U]/
+M551/1DU%34]264524D]2``!S.DE$4U]53DM.3U=.34542$]$`',Z24137T-!
+M3DY/5$]014X`````<SI)1%-?0T%.3D]40U)%051%``!S.DE$4U]#04Y.3U1-
+M2T1)4@```',Z24137T5.0U)#4D-&04E,140`<SI)1%-?15A44D-20T9!24Q%
+M1`!S.DE$4U]004-+141$051!0U)#1D%)3$5$````<SI)1%-?5U))5$5%4E)/
+M4@````!S.DE$4U]214%$15)23U(`<SI)1%-?0TQ/4T5%4E)/4@````!S.DE$
+M4U]#04Y.3U1&24Y$5D],`',Z24137T)!1$%20TA)5D4`````<SI)1%-?15A4
+M4D%#5$E.1P````!S.DE$4U]!4TM.15A45D],5$E43$4```!S.DE$4U]!4D-(
+M14%$15)"4D]+14X```!S.DE$4U]$3TY%``!S.DE$4U]%4E)/4@!S.DE$4U]%
+M4E)/4E,`````<SI)1%-?0EE415,`<SI)1%-?34]$249)141/3@````!S.DE$
+M4U]"041&3TQ$15(`<SI)1%-?0U)%051%15)23U)3``!S.DE$4U]#4D-%4E)/
+M4E,`<SI)1%-?04Q,1DE,15,``',Z24137U1)5$Q%,0````!S.DE$4U]4251,
+M13%!````<SI)1%-?5$E43$4R`````',Z24137U1)5$Q%,P````!S.DE$4U]4
+M251,130`````<SI)1%-?5$E43$4U`````',Z24137U1)5$Q%-@````!S.DE$
+M4U]!4D-"4D]+14X`<SI)1%-?15A44D9)3$535$\```!S.DE$4U]%6%121DE,
+M15-43U1%35````!S.DE$4U]%6%1204-40E545$].`',Z24137T585%)!0U10
+M4D]'4D534P```',Z24137TU!6%!!5$A,24U)5```<SI)1%-?54Y+14Y#3454
+M2$]$``!S.DE$4U]74D].1U!!4U-73U)$`',Z24137U=23TY'1DE,15!!4U-7
+M3U)$`',Z24137T-/4%E%4E)/4@!S.DE$4U]#04Y.3U1#4D5!5$5,3DM3``!S
+M.DE$4U]#04Y.3U1#4D5!5$5,3DM(``!S.DE$4U]%4E),3DM405)'150``',Z
+M24137TY%141!1$U)3@!S.DE$4U]0055310!S.DE$4U]#3TY424Y510``<SI)
+M1%-?4T5#5T%23DE.1P````!S.DE$4U]314-$14Q$3$P`)%-405)41$Q'.E-)
+M6D4``"135$%25$1,1SI#05!424].````)%-405)41$Q'.DE$0U]$15-4141)
+M5%1)5$Q%`"135$%25$1,1SI)1$-?0TA!3D=%1$E2`"135$%25$1,1SI)1$-?
+M4%)/1U)%4U-"05)4251,10``)%-405)41$Q'.DE$3TL``"135$%25$1,1SI)
+M1$-!3D-%3```)%)%4$Q!0T5&24Q%1$Q'.E-)6D4`````)%)%4$Q!0T5&24Q%
+M1$Q'.D-!4%1)3TX`)%)%4$Q!0T5&24Q%1$Q'.DE$0U]/5U)&24Q%15A)4U13
+M````)%)%4$Q!0T5&24Q%1$Q'.DE$0U]/5U)!4TM215!,04-%````)%)%4$Q!
+M0T5&24Q%1$Q'.DE$0U]/5U)154535$E/3@`D4D503$%#149)3$5$3$<Z241#
+M7T]74EE%4P``)%)%4$Q!0T5&24Q%1$Q'.DE$0U]/5U)!3$P``"1215!,04-%
+M1DE,141,1SI)1$-?3U=24D5.04U%````)%)%4$Q!0T5&24Q%1$Q'.DE$0U]/
+M5U).3P```"1215!,04-%1DE,141,1SI)1$-?3U=23D]!3$P`````)%)%4$Q!
+M0T5&24Q%1$Q'.DE$0U]/5U)#04Y#14P````D4D5.04U%1$Q'.E-)6D4`)%)%
+M3D%-141,1SI#05!424].```D4D5.04U%1$Q'.DE$3TL`)%)%3D%-141,1SI)
+M1$-!3D-%3``D4D5.04U%1$Q'.DE$0U]214Y!345&4D]-````)%)%3D%-141,
+M1SI)1$-?4D5.04U%5$\`)$=%5%!!4U-73U)$,3I325I%```D1T544$%34U=/
+M4D0Q.D-!4%1)3TX````D1T544$%34U=/4D0Q.DE$0U]005-35T]21$5.5$52
+M`"1'151005-35T]21#$Z241/2P``)$=%5%!!4U-73U)$,3I)1$-!3D-%3```
+M)$Q)0T5.4T5$3$<Z4TE:10`````D3$E#14Y3141,1SI#05!424].`"1,24-%
+M3E-%1$Q'.DE$3TL`````)$Q)0T5.4T5$3$<Z241#04Y#14P`````)$%32TY%
+M6%163TPZ4TE:10`````D05-+3D585%9/3#I#05!424].`"1!4TM.15A45D],
+M.DE$0U].15A45D],24Y&3S$`````)$%32TY%6%163TPZ241#7TY%6%163TQ&
+M24Y$`"1!4TM.15A45D],.DE$0U].15A45D],24Y&3S(`````)$%32TY%6%16
+M3TPZ241/2P`````D05-+3D585%9/3#I)1$-!3D-%3`````!2`&$`<@!3`$8`
+M6```````4P!4`$$`5`!)`$,``````%(`10!0`$P`00!#`$4`1@!)`$P`10!$
+M`$P`1P``````4@!%`$X`00!-`$4`1`!,`$<````E`',`(``E`',`(``E`',`
+M`````"4`<P`@`"4`<P```$<`10!4`%``00!3`%,`5P!/`%(`1``Q```````E
+M`',``````%@```!!`%,`2P!.`$4`6`!4`%8`3P!,``````!W`&D`;@!R`&$`
+M<@!S`&8`>`!M`&$`<`!P`&D`;@!G`&8`:0!L`&4`+@!T`&T`<```````<P!F
+M`'@`;@!A`&T`90```"4`-`!D`"T`)0`P`#(`9``M`"4`,``R`&0`+0`E`#``
+M,@!D`"T`)0`P`#(`9``M`"4`,``R`&0`+0`E`#``,P!D````<P!F`'@`<P!T
+M`&D`;0!E``````!3`%0`00!2`%0`1`!,`$<``````',`9@!X`&,`;0!D````
+M``!S`&8`>`!P`&$`<@``````3`!)`$,`10!.`%,`10!$`$P`1P``````(```
+M`%\`7P!T`&T`<`!?`'(`80!R`%\`<P!F`'@`7P!A`&,`8P!E`',`<P!?`&,`
+M:`!E`&,`:P!?`"4`=0```"T`90!L`"``+0!S`#(`(``B`"T`9``E`',`(@`@
+M`"(`+0!S`'``)0!S`"(``````'(`=0!N`&$`<P```"(`)0!S`"(`"@`E`',`
+M``!$`&4`;`!E`'0`90``````5`!E`'@`=```````5`!I`'0`;`!E````4`!A
+M`'0`:```````4P!I`&P`90!N`'0``````$\`=@!E`'(`=P!R`&D`=`!E````
+M4P!E`'0`=0!P````5`!E`&T`<`!-`&\`9`!E``````!,`&D`8P!E`&X`<P!E
+M````4`!R`&4`<P!E`'0`=0!P``````!3`&@`;P!R`'0`8P!U`'0``````%,`
+M80!V`&4`4`!A`'0`:```````50!P`&0`80!T`&4``````%,`90!T`'4`<`!#
+M`&\`9`!E````)0!S`"X`)0!D`"X`=`!M`'``````````4P!O`&8`=`!W`&$`
+M<@!E`%P`30!I`&,`<@!O`',`;P!F`'0`7`!7`&D`;@!D`&\`=P!S`%P`0P!U
+M`'(`<@!E`&X`=`!6`&4`<@!S`&D`;P!N````4`!R`&\`9P!R`&$`;0!&`&D`
+M;`!E`',`1`!I`'(```!<````2`!)`$0`10``````30!!`%@```!-`$D`3@``
+M`"4`<P`E`',`)0!U```````N`&P`;@!K```````N`&D`;@!F``````!)`&X`
+M<P!T`&$`;`!L````4P!O`&8`=`!W`&$`<@!E`%P`5P!I`&X`4@!!`%(`(`!3
+M`$8`6````````````````````%5315(S,BYD;&P```````!'1$DS,BYD;&P`
+M````````0T]-1$Q',S(N9&QL`````$%$5D%023,R+F1L;`````!32$5,3#,R
+M+F1L;`#Y%`(``````,````````!&`````&]L93,R+F1L;```````````````
+MP````````$8`!`(``````,````````!&&`$```````#`````````1A(!````
+M````P````````$86`0```````,````````!&$P$```````#`````````1AD!
+M````````P````````$:$LI:QM+H:$+:<`*H`-!T'@"/5?P=.&Q"N+0@`*R['
+M$V$6#-.OS=`1BCX`P$_)XFZ@%:<TAV70$9)*`""OQZQ-P",_O3[4SQ&).P"J
+M`+W.&@L!````````P````````$8!%`(``````,````````!&8O+*RG"3%4:A
+M.Y]5.=I,"B3#W6\#3OY+L84]=W:-R1!+`$4`4@!.`$4`3``S`#(`+@!$`$P`
+M3```````06-Q=6ER95-25TQO8VM%>&-L=7-I=F4`4F5L96%S95-25TQO8VM%
+M>&-L=7-I=F4```````````!32$Q705!)+F1L;```````0T]-0U1,,S(N9&QL
+M`````!2K0P#0YT$`7```````````````````````````````````````````
+M````````````````````````````````````:.9#`)"L0P`E````8#)#````
+M``#4,D,`D``````U`1!<JT,`D!]!`/"&00"DJT,`D!]!`/"&00#PJT,`@"5"
+M`/"&00!B860@87)R87D@;F5W(&QE;F=T:``````X#48`B`U&`&-S;>`!````
+M```````````#````(`63&0``````````H"1"`$"L0P"`)4(`\(9!`&)A9"!E
+M>&-E<'1I;VX```#X54,`#%9#`$A60P!@.T,`80!D`'8`80!P`&D`,P`R````
+M```\`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`90`M`&8`:0!B`&4`<@!S
+M`"T`;``Q`"T`,0`M`#$````\`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`
+M90`M`',`>0!N`&,`:``M`&P`,0`M`#(`+0`P```````!`````P```$9L<T%L
+M;&]C``````$````#````1FQS1G)E90`!`````P```$9L<T=E=%9A;'5E``$`
+M```#````1FQS4V5T5F%L=64``@````,```!);FET:6%L:7IE0W)I=&EC86Q3
+M96-T:6]N17@``````(A80P"46$,`G%A#`*A80P"T6$,`P%A#`,Q80P#<6$,`
+MZ%A#`/!80P#X6$,`!%E#`!!90P!0.T,`'%E#`"190P`L64,`,%E#`#190P`X
+M64,`/%E#`$!90P!$64,`2%E#`%190P!864,`7%E#`&!90P!D64,`:%E#`&Q9
+M0P!P64,`=%E#`'A90P!\64,`@%E#`(190P"(64,`C%E#`)!90P"464,`F%E#
+M`)Q90P"@64,`I%E#`*A90P"L64,`L%E#`+190P"X64,`O%E#`,!90P#$64,`
+MR%E#`,Q90P#064,`W%E#`.A90P#P64,`_%E#`!1:0P`@6D,`-%I#`%1:0P!T
+M6D,`E%I#`+1:0P#46D,`^%I#`!1;0P`X6T,`6%M#`(!;0P"<6T,`K%M#`+!;
+M0P"X6T,`R%M#`.Q;0P#T6T,``%Q#`!!<0P`L7$,`3%Q#`'1<0P"<7$,`Q%Q#
+M`/!<0P`,74,`,%U#`%1=0P"`74,`K%U#`,A=0P!0.T,`V%U#`.Q=0P`(7D,`
+M'%Y#`#Q>0P!?7V)A<V5D*`````!?7V-D96-L`%]?<&%S8V%L`````%]?<W1D
+M8V%L;````%]?=&AI<V-A;&P``%]?9F%S=&-A;&P``%]?=F5C=&]R8V%L;```
+M``!?7V-L<F-A;&P```!?7V5A8FD``%]?<'1R-C0`7U]R97-T<FEC=```7U]U
+M;F%L:6=N960`<F5S=')I8W0H````(&YE=P`````@9&5L971E`#T````^/@``
+M/#P``"$````]/0``(3T``%M=``!O<&5R871O<@`````M/@``*@```"LK```M
+M+0``+0```"L````F````+3XJ`"\````E````/````#P]```^````/CT``"P`
+M```H*0``?@```%X```!\````)B8``'Q\```J/0``*ST``"T]```O/0``)3T`
+M`#X^/0`\/#T`)CT``'P]``!>/0``8'9F=&%B;&4G````8'9B=&%B;&4G````
+M8'9C86QL)P!@='EP96]F)P````!@;&]C86P@<W1A=&EC(&=U87)D)P````!@
+M<W1R:6YG)P````!@=F)A<V4@9&5S=')U8W1O<B<``&!V96-T;W(@9&5L971I
+M;F<@9&5S=')U8W1O<B<`````8&1E9F%U;'0@8V]N<W1R=6-T;W(@8VQO<W5R
+M92<```!@<V-A;&%R(&1E;&5T:6YG(&1E<W1R=6-T;W(G`````&!V96-T;W(@
+M8V]N<W1R=6-T;W(@:71E<F%T;W(G````8'9E8W1O<B!D97-T<G5C=&]R(&ET
+M97)A=&]R)P````!@=F5C=&]R('9B87-E(&-O;G-T<G5C=&]R(&ET97)A=&]R
+M)P!@=FER='5A;"!D:7-P;&%C96UE;G0@;6%P)P``8&5H('9E8W1O<B!C;VYS
+M=')U8W1O<B!I=&5R871O<B<`````8&5H('9E8W1O<B!D97-T<G5C=&]R(&ET
+M97)A=&]R)P!@96@@=F5C=&]R('9B87-E(&-O;G-T<G5C=&]R(&ET97)A=&]R
+M)P``8&-O<'D@8V]N<W1R=6-T;W(@8VQO<W5R92<``&!U9'0@<F5T=7)N:6YG
+M)P!@14@`8%)45$D```!@;&]C86P@=F9T86)L92<`8&QO8V%L('9F=&%B;&4@
+M8V]N<W1R=6-T;W(@8VQO<W5R92<`(&YE=UM=```@9&5L971E6UT```!@;VUN
+M:2!C86QL<VEG)P``8'!L86-E;65N="!D96QE=&4@8VQO<W5R92<``&!P;&%C
+M96UE;G0@9&5L971E6UT@8VQO<W5R92<`````8&UA;F%G960@=F5C=&]R(&-O
+M;G-T<G5C=&]R(&ET97)A=&]R)P```&!M86YA9V5D('9E8W1O<B!D97-T<G5C
+M=&]R(&ET97)A=&]R)P````!@96@@=F5C=&]R(&-O<'D@8V]N<W1R=6-T;W(@
+M:71E<F%T;W(G````8&5H('9E8W1O<B!V8F%S92!C;W!Y(&-O;G-T<G5C=&]R
+M(&ET97)A=&]R)P!@9'EN86UI8R!I;FET:6%L:7IE<B!F;W(@)P``8&1Y;F%M
+M:6,@871E>&ET(&1E<W1R=6-T;W(@9F]R("<`````8'9E8W1O<B!C;W!Y(&-O
+M;G-T<G5C=&]R(&ET97)A=&]R)P``8'9E8W1O<B!V8F%S92!C;W!Y(&-O;G-T
+M<G5C=&]R(&ET97)A=&]R)P````!@;6%N86=E9"!V96-T;W(@8V]P>2!C;VYS
+M=')U8W1O<B!I=&5R871O<B<``&!L;V-A;"!S=&%T:6,@=&AR96%D(&=U87)D
+M)P!O<&5R871O<B`B(B``````(%1Y<&4@1&5S8W)I<'1O<B<````@0F%S92!#
+M;&%S<R!$97-C<FEP=&]R(&%T("@`($)A<V4@0VQA<W,@07)R87DG```@0VQA
+M<W,@2&EE<F%R8VAY($1E<V-R:7!T;W(G`````"!#;VUP;&5T92!/8FIE8W0@
+M3&]C871O<B<````&```&``$``!```P8`!@(0!$5%104%!04%-3``4``````H
+M(#A06`<(`#<P,%=0!P``("`(!P````A@:&!@8&```'AP>'AX>`@'"`<`!P`(
+M"`@```@'"``'"``'`"AN=6QL*0``*`!N`'4`;`!L`"D````````````%``#`
+M"P`````````=``#`!`````````"6``#`!`````````"-``#`"`````````".
+M``#`"`````````"/``#`"`````````"0``#`"`````````"1``#`"```````
+M``"2``#`"`````````"3``#`"`````````"T`@#`"`````````"U`@#`"```
+M```````,`````P````D```!M`',`8P!O`'(`90!E`"X`9`!L`&P```!#;W)%
+M>&ET4')O8V5S<P```````*""0@```````(-"```````@JT(`T*M"`/""0@#P
+M@D(`P*9"`""G0@"@ND(`P+I"``````!`@T(`P)-"`/"30@!PH4(`T*%"`%"Y
+M0@#P@D(`H+5"````````````\()"``````!0@T(`\()"`.""0@#`@D(`\()"
+M``$````6`````@````(````#`````@````0````8````!0````T````&````
+M"0````<````,````"`````P````)````#`````H````'````"P````@````,
+M````%@````T````6````#P````(````0````#0```!$````2````$@````(`
+M```A````#0```#4````"````00````T```!#`````@```%`````1````4@``
+M``T```!3````#0```%<````6````60````L```!L````#0```&T````@````
+M<````!P```!R````"0````8````6````@`````H```"!````"@```((````)
+M````@P```!8```"$````#0```)$````I````G@````T```"A`````@```*0`
+M```+````IP````T```"W````$0```,X````"````UP````L````8!P``#```
+M`$E.1@!I;F8`3D%.`&YA;@!.04XH4TY!3BD```!N86XH<VYA;BD```!.04XH
+M24Y$*0````!N86XH:6YD*0````!E*S`P,````%-U;@!-;VX`5'5E`%=E9`!4
+M:'4`1G)I`%-A=`!3=6YD87D``$UO;F1A>0``5'5E<V1A>0!7961N97-D87D`
+M``!4:'5R<V1A>0````!&<FED87D``%-A='5R9&%Y`````$IA;@!&96(`36%R
+M`$%P<@!-87D`2G5N`$IU;`!!=6<`4V5P`$]C=`!.;W8`1&5C`$IA;G5A<GD`
+M1F5B<G5A<GD`````36%R8V@```!!<')I;````$IU;F4`````2G5L>0````!!
+M=6=U<W0``%-E<'1E;6)E<@```$]C=&]B97(`3F]V96UB97(`````1&5C96UB
+M97(`````04T``%!-``!-32]D9"]Y>0````!D9&1D+"!-34U-(&1D+"!Y>7EY
+M`$A(.FUM.G-S`````%,`=0!N````30!O`&X```!4`'4`90```%<`90!D````
+M5`!H`'4```!&`'(`:0```%,`80!T````4P!U`&X`9`!A`'D``````$T`;P!N
+M`&0`80!Y``````!4`'4`90!S`&0`80!Y````5P!E`&0`;@!E`',`9`!A`'D`
+M``!4`&@`=0!R`',`9`!A`'D``````$8`<@!I`&0`80!Y``````!3`&$`=`!U
+M`'(`9`!A`'D``````$H`80!N````1@!E`&(```!-`&$`<@```$$`<`!R````
+M30!A`'D```!*`'4`;@```$H`=0!L````00!U`&<```!3`&4`<````$\`8P!T
+M````3@!O`'8```!$`&4`8P```$H`80!N`'4`80!R`'D```!&`&4`8@!R`'4`
+M80!R`'D``````$T`80!R`&,`:````$$`<`!R`&D`;````$H`=0!N`&4`````
+M`$H`=0!L`'D``````$$`=0!G`'4`<P!T``````!3`&4`<`!T`&4`;0!B`&4`
+M<@```$\`8P!T`&\`8@!E`'(```!.`&\`=@!E`&T`8@!E`'(``````$0`90!C
+M`&4`;0!B`&4`<@``````00!-``````!0`$T``````$T`30`O`&0`9``O`'D`
+M>0``````9`!D`&0`9``L`"``30!-`$T`30`@`&0`9``L`"``>0!Y`'D`>0``
+M`$@`2``Z`&T`;0`Z`',`<P``````90!N`"T`50!3`````````,!A0P#$84,`
+MR&%#`,QA0P#084,`U&%#`-AA0P#<84,`Y&%#`.QA0P#T84,``&)#``QB0P`4
+M8D,`(&)#`"1B0P`H8D,`+&)#`#!B0P`T8D,`.&)#`#QB0P!`8D,`1&)#`$AB
+M0P!,8D,`4&)#`%AB0P!D8D,`;&)#`#!B0P!T8D,`?&)#`(1B0P",8D,`F&)#
+M`*!B0P"L8D,`N&)#`+QB0P#`8D,`S&)#`.!B0P`!`````````.QB0P#T8D,`
+M_&)#``1C0P`,8T,`%&-#`!QC0P`D8T,`-&-#`$1C0P!48T,`:&-#`'QC0P",
+M8T,`H&-#`*AC0P"P8T,`N&-#`,!C0P#(8T,`T&-#`-AC0P#@8T,`Z&-#`/!C
+M0P#X8T,``&1#`!!D0P`D9$,`,&1#`,!C0P`\9$,`2&1#`%1D0P!D9$,`>&1#
+M`(AD0P"<9$,`L&1#`+AD0P#`9$,`U&1#`/QD0P`094,`````````(``@`"``
+M(``@`"``(``@`"``*``H`"@`*``H`"``(``@`"``(``@`"``(``@`"``(``@
+M`"``(``@`"``(``@`$@`$``0`!``$``0`!``$``0`!``$``0`!``$``0`!``
+MA`"$`(0`A`"$`(0`A`"$`(0`A``0`!``$``0`!``$``0`($!@0&!`8$!@0&!
+M`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$0`!``
+M$``0`!``$`""`8(!@@&"`8(!@@$"`0(!`@$"`0(!`@$"`0(!`@$"`0(!`@$"
+M`0(!`@$"`0(!`@$"`0(!$``0`!``$``@`"``(``@`"``(``H`"``(``@`"``
+M(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``(
+M`!``$``0`!``$``0`!``$``0`!(!$``0`#``$``0`!``$``4`!0`$``2`1``
+M$``0`!0`$@$0`!``$``0`!```0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!`0$!
+M`0$!`0$!`0$!`0$!`0$!`0$!`1```0$!`0$!`0$!`0$!`0$"`0(!`@$"`0(!
+M`@$"`0(!`@$"`0(!`@$"`0(!`@$"`0(!`@$"`0(!`@$"`0(!`@$0``(!`@$"
+M`0(!`@$"`0(!`@$!`0``````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````(``@`"``(``@`"``(``@`"``*``H`"@`*``H`"``(``@`"``(``@`"``
+M(``@`"``(``@`"``(``@`"``(``@`$@`$``0`!``$``0`!``$``0`!``$``0
+M`!``$``0`!``A`"$`(0`A`"$`(0`A`"$`(0`A``0`!``$``0`!``$``0`($`
+M@0"!`($`@0"!``$``0`!``$``0`!``$``0`!``$``0`!``$``0`!``$``0`!
+M``$``0`0`!``$``0`!``$`""`((`@@""`((`@@`"``(``@`"``(``@`"``(`
+M`@`"``(``@`"``(``@`"``(``@`"``(`$``0`!``$``@````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````"`@8*#A(6&AXB)BHN,C8Z/D)&2DY25EI>8
+MF9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*SM+6VM[BYNKN\O;Z_P,'"P\3%
+MQL?(R<K+S,W.S]#1TM/4U=;7V-G:V]S=WM_@X>+CY.7FY^CIZNOL[>[O\/'R
+M\_3U]O?X^?K[_/W^_P`!`@,$!08'"`D*"PP-#@\0$1(3%!46%Q@9&AL<'1X?
+M("$B(R0E)B<H*2HK+"TN+S`Q,C,T-38W.#DZ.SP]/C]`86)C9&5F9VAI:FML
+M;6YO<'%R<W1U=G=X>7I;7%U>7V!A8F-D969G:&EJ:VQM;F]P<7)S='5V=WAY
+M>GM\?7Y_@(&"@X2%AH>(B8J+C(V.CY"1DI.4E9:7F)F:FYR=GI^@H:*CI*6F
+MIZBIJJNLK:ZOL+&RL[2UMK>XN;J[O+V^O\#!PL/$Q<;'R,G*R\S-SL_0T=+3
+MU-76U]C9VMO<W=[?X.'BX^3EYN?HZ>KK[.WN[_#Q\O/T]?;W^/GZ^_S]_O^`
+M@8*#A(6&AXB)BHN,C8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRM
+MKJ^PL;*SM+6VM[BYNKN\O;Z_P,'"P\3%QL?(R<K+S,W.S]#1TM/4U=;7V-G:
+MV]S=WM_@X>+CY.7FY^CIZNOL[>[O\/'R\_3U]O?X^?K[_/W^_P`!`@,$!08'
+M"`D*"PP-#@\0$1(3%!46%Q@9&AL<'1X?("$B(R0E)B<H*2HK+"TN+S`Q,C,T
+M-38W.#DZ.SP]/C]`04)#1$5&1TA)2DM,34Y/4%%24U155E=865I;7%U>7V!!
+M0D-$149'2$E*2TQ-3D]045)35%565UA96GM\?7Y_@(&"@X2%AH>(B8J+C(V.
+MCY"1DI.4E9:7F)F:FYR=GI^@H:*CI*6FIZBIJJNLK:ZOL+&RL[2UMK>XN;J[
+MO+V^O\#!PL/$Q<;'R,G*R\S-SL_0T=+3U-76U]C9VMO<W=[?X.'BX^3EYN?H
+MZ>KK[.WN[_#Q\O/T]?;W^/GZ^_S]_O_@;D,`*&]#``Q60P!H;T,`H&]#`.AO
+M0P!(<$,`E'!#`$A60P#0<$,`$'%#`$QQ0P"(<4,`V'%#`#!R0P"(<D,`T')#
+M`/A50P!@.T,`('-#`&$`<`!I`"T`;0!S`"T`=P!I`&X`+0!A`'``<`!M`&\`
+M9`!E`&P`+0!R`'4`;@!T`&D`;0!E`"T`;``Q`"T`,0`M`#$``````#P`<`!I
+M`"T`;0!S`"T`=P!I`&X`+0!C`&\`<@!E`"T`9`!A`'0`90!T`&D`;0!E`"T`
+M;``Q`"T`,0`M`#$````\`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`90`M
+M`&8`:0!L`&4`+0!L`#(`+0`Q`"T`,0```#P`<`!I`"T`;0!S`"T`=P!I`&X`
+M+0!C`&\`<@!E`"T`;`!O`&,`80!L`&D`>@!A`'0`:0!O`&X`+0!L`#$`+0`R
+M`"T`,0```#P`<`!I`"T`;0!S`"T`=P!I`&X`+0!C`&\`<@!E`"T`;`!O`&,`
+M80!L`&D`>@!A`'0`:0!O`&X`+0!O`&(`<P!O`&P`90!T`&4`+0!L`#$`+0`R
+M`"T`,````````````#P`<`!I`"T`;0!S`"T`=P!I`&X`+0!C`&\`<@!E`"T`
+M<`!R`&\`8P!E`',`<P!T`&@`<@!E`&$`9`!S`"T`;``Q`"T`,0`M`#(````\
+M`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`90`M`',`=`!R`&D`;@!G`"T`
+M;``Q`"T`,0`M`#`````\`'``:0`M`&T`<P`M`'<`:0!N`"T`8P!O`'(`90`M
+M`',`>0!S`&D`;@!F`&\`+0!L`#$`+0`R`"T`,0``````/`!P`&D`+0!M`',`
+M+0!W`&D`;@`M`&,`;P!R`&4`+0!W`&D`;@!R`'0`+0!L`#$`+0`Q`"T`,```
+M````/`!P`&D`+0!M`',`+0!W`&D`;@`M`&,`;P!R`&4`+0!X`',`=`!A`'0`
+M90`M`&P`,@`M`#$`+0`P````80!P`&D`+0!M`',`+0!W`&D`;@`M`'(`=`!C
+M`&\`<@!E`"T`;@!T`'4`<P!E`'(`+0!W`&D`;@!D`&\`=P`M`&P`,0`M`#$`
+M+0`P``````!A`'``:0`M`&T`<P`M`'<`:0!N`"T`<P!E`&,`=0!R`&D`=`!Y
+M`"T`<P!Y`',`=`!E`&T`9@!U`&X`8P!T`&D`;P!N`',`+0!L`#$`+0`Q`"T`
+M,```````90!X`'0`+0!M`',`+0!W`&D`;@`M`&L`90!R`&X`90!L`#,`,@`M
+M`'``80!C`&L`80!G`&4`+0!C`'4`<@!R`&4`;@!T`"T`;``Q`"T`,0`M`#``
+M`````&4`>`!T`"T`;0!S`"T`=P!I`&X`+0!N`'0`=0!S`&4`<@`M`&0`:0!A
+M`&P`;P!G`&(`;P!X`"T`;``Q`"T`,0`M`#```````&4`>`!T`"T`;0!S`"T`
+M=P!I`&X`+0!N`'0`=0!S`&4`<@`M`'<`:0!N`&0`;P!W`',`=`!A`'0`:0!O
+M`&X`+0!L`#$`+0`Q`"T`,```````=0!S`&4`<@`S`#(```````(````2````
+M`@```!(````"````$@````(````2``````````X```!'971#=7)R96YT4&%C
+M:V%G94ED``@````2````!````!(```!,0TUA<%-T<FEN9T5X````!````!(`
+M``!,;V-A;&5.86UE5&],0TE$`````+AS0P#$<T,`T'-#`-QS0P!J`&$`+0!*
+M`%````!Z`&@`+0!#`$X```!K`&\`+0!+`%(```!Z`&@`+0!4`%<```!U`&L`
+M``````#D"U0"```````08RU>QVL%````````0.KM=$;0G"R?#`````!A];FK
+MOZ1<P_$I8QT``````&2U_30%Q-*'9I+Y%3ML1````````!#9D&64+$)BUP%%
+M(IH7)B=/GP```$`"E0?!B58D'*?ZQ6=MR'/<;:WK<@$`````P<YD)Z)CRABD
+M[R5[T<UP[]]K'S[JG5\#``````#D;O[#S6H,O&8R'SDN`P)%6B7XTG%62L+#
+MV@<``!"/+J@(0[*J?!HACD#.BO,+SL2$)POK?,.4):U)$@```$`:W=I4G\R_
+M85G<JZM<QPQ$!?5G%KS14J^W^RF-CV"4*@``````(0R*NQ>DCJ]6J9]'!C:R
+M2UW@7]R`"JK^\$#9CJC0@!IK(V,``&0X3#*6QU>#U4)*Y&$BJ=D]$#R]<O/E
+MD7056<`-IAWL;-DJ$-/F````$(4>6V%/;FDJ>Q@<XE`$*S3=+^XG4&.9<<FF
+M%NE*CB@N"!=O;DD:;AD"````0#(F0*T$4'(>^=71E"F[S5MFEBX[HMM]^F6L
+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
+MO5X\5C=WXSBCRSU/GM*!+)[WI'3'^<.7YQQJ..1?K)R+\P?Z[(C5K,%:/L[,
+MKX5P/Q^=TVTMZ`P8?1=OE&E>X2R.9$@YH941X`\T6#P7M)3V2">]5R9\+MJ+
+M=:"0@#L3MMLMD$C/;7X$Y"294````````@(```,%```$"0`!!`T``042``$&
+M&``"!AX``@<E``((+0`#"#4``PD^``,*2``$"E(`!`M=``0,:0`%#'4`!0V"
+M``4.D``%#Y\`!@^N``80O@`&$<\`!Q'@``<2\@`'$P4!"!,8`0@5+0$(%D,!
+M"199`0D7<`$)&(@!"AB@`0H9N0$*&M,!"AON`0L;"0(+'"4""QT*````9```
+M`.@#```0)P``H(8!`$!"#P"`EI@``.'U!0#*FCLP````,2-)3D8````Q(U%.
+M04X``#$C4TY!3@``,2-)3D0````!````^(1#``(`````A4,``P````B%0P`$
+M````$(5#``4````@A4,`!@```"B%0P`'````,(5#``@````XA4,`"0```$"%
+M0P`*````2(5#``L```!0A4,`#````%B%0P`-````8(5#``X```!HA4,`#P``
+M`'"%0P`0````>(5#`!$```"`A4,`$@```(B%0P`3````D(5#`!0```"8A4,`
+M%0```*"%0P`6````J(5#`!@```"PA4,`&0```+B%0P`:````P(5#`!L```#(
+MA4,`'````-"%0P`=````V(5#`!X```#@A4,`'P```.B%0P`@````\(5#`"$`
+M``#XA4,`(@```.AS0P`C`````(9#`"0````(AD,`)0```!"&0P`F````&(9#
+M`"<````@AD,`*0```"B&0P`J````,(9#`"L````XAD,`+````$"&0P`M````
+M2(9#`"\```!0AD,`-@```%B&0P`W````8(9#`#@```!HAD,`.0```'"&0P`^
+M````>(9#`#\```"`AD,`0````(B&0P!!````D(9#`$,```"8AD,`1````*"&
+M0P!&````J(9#`$<```"PAD,`20```+B&0P!*````P(9#`$L```#(AD,`3@``
+M`-"&0P!/````V(9#`%````#@AD,`5@```.B&0P!7````\(9#`%H```#XAD,`
+M90````"'0P!_````M#5#``$$```(AT,``@0``!2'0P`#!```((=#``0$``#<
+M<T,`!00``"R'0P`&!```.(=#``<$``!$AT,`"`0``%"'0P`)!```$&5#``L$
+M``!<AT,`#`0``&B'0P`-!```=(=#``X$``"`AT,`#P0``(R'0P`0!```F(=#
+M`!$$``"X<T,`$@0``-!S0P`3!```I(=#`!0$``"PAT,`%00``+R'0P`6!```
+MR(=#`!@$``#4AT,`&00``."'0P`:!```[(=#`!L$``#XAT,`'`0```2(0P`=
+M!```$(A#`!X$```<B$,`'P0``"B(0P`@!```-(A#`"$$``!`B$,`(@0``$R(
+M0P`C!```6(A#`"0$``!DB$,`)00``'"(0P`F!```?(A#`"<$``"(B$,`*00`
+M`)2(0P`J!```H(A#`"L$``"LB$,`+`0``+B(0P`M!```T(A#`"\$``#<B$,`
+M,@0``.B(0P`T!```](A#`#4$````B4,`-@0```R)0P`W!```&(E#`#@$```D
+MB4,`.00``#")0P`Z!```/(E#`#L$``!(B4,`/@0``%2)0P`_!```8(E#`$`$
+M``!LB4,`000``'B)0P!#!```A(E#`$0$``"<B4,`100``*B)0P!&!```M(E#
+M`$<$``#`B4,`200``,R)0P!*!```V(E#`$L$``#DB4,`3`0``/")0P!.!```
+M_(E#`$\$```(BD,`4`0``!2*0P!2!```((I#`%8$```LBD,`5P0``#B*0P!:
+M!```2(I#`&4$``!8BD,`:P0``&B*0P!L!```>(I#`($$``"$BD,``0@``)"*
+M0P`$"```Q'-#``<(``"<BD,`"0@``*B*0P`*"```M(I#``P(``#`BD,`$`@`
+M`,R*0P`3"```V(I#`!0(``#DBD,`%@@``/"*0P`:"```_(I#`!T(```4BT,`
+M+`@``""+0P`["```.(M#`#X(``!$BT,`0P@``%"+0P!K"```:(M#``$,``!X
+MBT,`!`P``(2+0P`'#```D(M#``D,``"<BT,`"@P``*B+0P`,#```M(M#`!H,
+M``#`BT,`.PP``-B+0P!K#```Y(M#``$0``#TBT,`!!````",0P`'$```#(Q#
+M``D0```8C$,`"A```"2,0P`,$```,(Q#`!H0```\C$,`.Q```$B,0P`!%```
+M6(Q#``04``!DC$,`!Q0``'",0P`)%```?(Q#``H4``"(C$,`#!0``)2,0P`:
+M%```H(Q#`#L4``"XC$,``1@``,B,0P`)&```U(Q#``H8``#@C$,`#!@``.R,
+M0P`:&```^(Q#`#L8```0C4,``1P``""-0P`)'```+(U#``H<```XC4,`&AP`
+M`$2-0P`['```7(U#``$@``!LC4,`"2```'B-0P`*(```A(U#`#L@``"0C4,`
+M`20``*"-0P`))```K(U#``HD``"XC4,`.R0``,2-0P`!*```U(U#``DH``#@
+MC4,`"B@``.R-0P`!+```^(U#``DL```$CD,`"BP``!".0P`!,```'(Y#``DP
+M```HCD,`"C```#2.0P`!-```0(Y#``DT``!,CD,`"C0``%B.0P`!.```9(Y#
+M``HX``!PCD,``3P``'R.0P`*/```B(Y#``%```"4CD,`"D```*".0P`*1```
+MK(Y#``I(``"XCD,`"DP``,2.0P`*4```T(Y#``1\``#<CD,`&GP``.R.0P!A
+M`'(``````&(`9P``````8P!A``````!Z`&@`+0!#`$@`4P``````8P!S````
+M``!D`&$``````&0`90``````90!L``````!E`&X``````&4`<P``````9@!I
+M``````!F`'(``````&@`90``````:`!U``````!I`',``````&D`=```````
+M:@!A``````!K`&\``````&X`;```````;@!O``````!P`&P``````'``=```
+M````<@!O``````!R`'4``````&@`<@``````<P!K``````!S`'$``````',`
+M=@``````=`!H``````!T`'(``````'4`<@``````:0!D``````!B`&4`````
+M`',`;```````90!T``````!L`'8``````&P`=```````9@!A``````!V`&D`
+M`````&@`>0``````80!Z``````!E`'4``````&T`:P``````80!F``````!K
+M`&$``````&8`;P``````:`!I``````!M`',``````&L`:P``````:P!Y````
+M``!S`'<``````'4`>@``````=`!T``````!P`&$``````&<`=0``````=`!A
+M``````!T`&4``````&L`;@``````;0!R``````!S`&$``````&T`;@``````
+M9P!L``````!K`&\`:P```',`>0!R````9`!I`'8```!A`'(`+0!3`$$```!B
+M`&<`+0!"`$<```!C`&$`+0!%`%,```!C`',`+0!#`%H```!D`&$`+0!$`$L`
+M``!D`&4`+0!$`$4```!E`&P`+0!'`%(```!F`&D`+0!&`$D```!F`'(`+0!&
+M`%(```!H`&4`+0!)`$P```!H`'4`+0!(`%4```!I`',`+0!)`%,```!I`'0`
+M+0!)`%0```!N`&P`+0!.`$P```!N`&(`+0!.`$\```!P`&P`+0!0`$P```!P
+M`'0`+0!"`%(```!R`&\`+0!2`$\```!R`'4`+0!2`%4```!H`'(`+0!(`%(`
+M``!S`&L`+0!3`$L```!S`'$`+0!!`$P```!S`'8`+0!3`$4```!T`&@`+0!4
+M`$@```!T`'(`+0!4`%(```!U`'(`+0!0`$L```!I`&0`+0!)`$0```!U`&L`
+M+0!5`$$```!B`&4`+0!"`%D```!S`&P`+0!3`$D```!E`'0`+0!%`$4```!L
+M`'8`+0!,`%8```!L`'0`+0!,`%0```!F`&$`+0!)`%(```!V`&D`+0!6`$X`
+M``!H`'D`+0!!`$T```!A`'H`+0!!`%H`+0!,`&$`=`!N``````!E`'4`+0!%
+M`%,```!M`&L`+0!-`$L```!T`&X`+0!:`$$```!X`&@`+0!:`$$```!Z`'4`
+M+0!:`$$```!A`&8`+0!:`$$```!K`&$`+0!'`$4```!F`&\`+0!&`$\```!H
+M`&D`+0!)`$X```!M`'0`+0!-`%0```!S`&4`+0!.`$\```!M`',`+0!-`%D`
+M``!K`&L`+0!+`%H```!K`'D`+0!+`$<```!S`'<`+0!+`$4```!U`'H`+0!5
+M`%H`+0!,`&$`=`!N``````!T`'0`+0!2`%4```!B`&X`+0!)`$X```!P`&$`
+M+0!)`$X```!G`'4`+0!)`$X```!T`&$`+0!)`$X```!T`&4`+0!)`$X```!K
+M`&X`+0!)`$X```!M`&P`+0!)`$X```!M`'(`+0!)`$X```!S`&$`+0!)`$X`
+M``!M`&X`+0!-`$X```!C`'D`+0!'`$(```!G`&P`+0!%`%,```!K`&\`:P`M
+M`$D`3@``````<P!Y`'(`+0!3`%D``````&0`:0!V`"T`30!6``````!Q`'4`
+M>@`M`$(`3P``````;@!S`"T`6@!!````;0!I`"T`3@!:````80!R`"T`20!1
+M````9`!E`"T`0P!(````90!N`"T`1P!"````90!S`"T`30!8````9@!R`"T`
+M0@!%````:0!T`"T`0P!(````;@!L`"T`0@!%````;@!N`"T`3@!/````<`!T
+M`"T`4`!4````<P!R`"T`4P!0`"T`3`!A`'0`;@``````<P!V`"T`1@!)````
+M80!Z`"T`00!:`"T`0P!Y`'(`;```````<P!E`"T`4P!%````;0!S`"T`0@!.
+M````=0!Z`"T`50!:`"T`0P!Y`'(`;```````<0!U`'H`+0!%`$,``````&$`
+M<@`M`$4`1P```'H`:``M`$@`2P```&0`90`M`$$`5````&4`;@`M`$$`50``
+M`&4`<P`M`$4`4P```&8`<@`M`$,`00```',`<@`M`%,`4``M`$,`>0!R`&P`
+M`````',`90`M`$8`20```'$`=0!Z`"T`4`!%``````!A`'(`+0!,`%D```!Z
+M`&@`+0!3`$<```!D`&4`+0!,`%4```!E`&X`+0!#`$$```!E`',`+0!'`%0`
+M``!F`'(`+0!#`$@```!H`'(`+0!"`$$```!S`&T`:@`M`$X`3P``````80!R
+M`"T`1`!:````>@!H`"T`30!/````9`!E`"T`3`!)````90!N`"T`3@!:````
+M90!S`"T`0P!2````9@!R`"T`3`!5````8@!S`"T`0@!!`"T`3`!A`'0`;@``
+M````<P!M`&H`+0!3`$4``````&$`<@`M`$T`00```&4`;@`M`$D`10```&4`
+M<P`M`%``00```&8`<@`M`$T`0P```',`<@`M`$(`00`M`$P`80!T`&X`````
+M`',`;0!A`"T`3@!/``````!A`'(`+0!4`$X```!E`&X`+0!:`$$```!E`',`
+M+0!$`$\```!S`'(`+0!"`$$`+0!#`'D`<@!L``````!S`&T`80`M`%,`10``
+M````80!R`"T`3P!-````90!N`"T`2@!-````90!S`"T`5@!%````<P!M`',`
+M+0!&`$D``````&$`<@`M`%D`10```&4`;@`M`$,`0@```&4`<P`M`$,`3P``
+M`',`;0!N`"T`1@!)``````!A`'(`+0!3`%D```!E`&X`+0!"`%H```!E`',`
+M+0!0`$4```!A`'(`+0!*`$\```!E`&X`+0!4`%0```!E`',`+0!!`%(```!A
+M`'(`+0!,`$(```!E`&X`+0!:`%<```!E`',`+0!%`$,```!A`'(`+0!+`%<`
+M``!E`&X`+0!0`$@```!E`',`+0!#`$P```!A`'(`+0!!`$4```!E`',`+0!5
+M`%D```!A`'(`+0!"`$@```!E`',`+0!0`%D```!A`'(`+0!1`$$```!E`',`
+M+0!"`$\```!E`',`+0!3`%8```!E`',`+0!(`$X```!E`',`+0!.`$D```!E
+M`',`+0!0`%(```!Z`&@`+0!#`$@`5```````<P!R````````````M#5#`$(`
+M``!8AD,`+````!B60P!Q````^(1#```````DED,`V````#"60P#:````/)9#
+M`+$```!(ED,`H````%260P"/````8)9#`,\```!LED,`U0```'B60P#2````
+MA)9#`*D```"0ED,`N0```)R60P#$````J)9#`-P```"TED,`0P```,"60P#,
+M````S)9#`+\```#8ED,`R````$"&0P`I````Y)9#`)L```#\ED,`:P````"&
+M0P`A````%)=#`&,`````A4,``0```""70P!$````+)=#`'T````XET,`MP``
+M``B%0P`"````4)=#`$4````@A4,`!````%R70P!'````:)=#`(<````HA4,`
+M!0```'270P!(````,(5#``8```"`ET,`H@```(R70P"1````F)=#`$D```"D
+MET,`LP```+"70P"K`````(=#`$$```"\ET,`BP```#B%0P`'````S)=#`$H`
+M``!`A4,`"````-B70P"C````Y)=#`,T```#PET,`K````/R70P#)````")A#
+M`)(````4F$,`N@```""80P#%````+)A#`+0````XF$,`U@```$280P#0````
+M4)A#`$L```!<F$,`P````&B80P#3````2(5#``D```!TF$,`T0```("80P#=
+M````C)A#`-<```"8F$,`R@```*280P"U````L)A#`,$```"\F$,`U````,B8
+M0P"D````U)A#`*T```#@F$,`WP```.R80P"3````^)A#`.`````$F4,`NP``
+M`!"90P#.````')E#`.$````HF4,`VP```#290P#>````0)E#`-D```!,F4,`
+MQ@```!"&0P`C````6)E#`&4```!(AD,`*@```&290P!L````*(9#`"8```!P
+MF4,`:````%"%0P`*````?)E#`$P```!HAD,`+@```(B90P!S````6(5#``L`
+M``"4F4,`E````*"90P"E````K)E#`*X```"XF4,`30```,290P"V````T)E#
+M`+P```#HAD,`/@```-R90P"(````L(9#`#<```#HF4,`?P```&"%0P`,````
+M])E#`$X```!PAD,`+P````":0P!T````P(5#`!@````,FD,`KP```!B:0P!:
+M````:(5#``T````DFD,`3P```#B&0P`H````,)I#`&H```#XA4,`'P```#R:
+M0P!A````<(5#``X```!(FD,`4````'B%0P`/````5)I#`)4```!@FD,`40``
+M`("%0P`0````;)I#`%(```!@AD,`+0```'B:0P!R````@(9#`#$```"$FD,`
+M>````,B&0P`Z````D)I#`((```"(A4,`$0```/"&0P`_````G)I#`(D```"L
+MFD,`4P```(B&0P`R````N)I#`'D````@AD,`)0```,2:0P!G````&(9#`"0`
+M``#0FD,`9@```-R:0P".````4(9#`"L```#HFD,`;0```/2:0P"#````X(9#
+M`#T`````FT,`A@```-"&0P`[````#)M#`(0```!XAD,`,````!B;0P"=````
+M))M#`'<````PFT,`=0```#R;0P!5````D(5#`!(```!(FT,`E@```%2;0P!4
+M````8)M#`)<```"8A4,`$P```&R;0P"-````J(9#`#8```!XFT,`?@```*"%
+M0P`4````A)M#`%8```"HA4,`%0```)";0P!7````G)M#`)@```"HFT,`C```
+M`+B;0P"?````R)M#`*@```"PA4,`%@```-B;0P!8````N(5#`!<```#DFT,`
+M60```-B&0P`\````\)M#`(4```#\FT,`IP````B<0P!V````%)Q#`)P```#(
+MA4,`&0```""<0P!;````"(9#`"(````LG$,`9````#B<0P"^````2)Q#`,,`
+M``!8G$,`L````&B<0P"X````>)Q#`,L```"(G$,`QP```-"%0P`:````F)Q#
+M`%P```#LCD,`XP```*2<0P#"````O)Q#`+T```#4G$,`I@```.R<0P"9````
+MV(5#`!L````$G4,`F@```!"=0P!=````D(9#`#,````<G4,`>@```/B&0P!`
+M````*)U#`(H```"XAD,`.````#B=0P"`````P(9#`#D```!$G4,`@0```."%
+M0P`<````4)U#`%X```!<G4,`;@```.B%0P`=````:)U#`%\```"@AD,`-0``
+M`'2=0P!\````Z'-#`"````"`G4,`8@```/"%0P`>````C)U#`&````"8AD,`
+M-````)B=0P">````L)U#`'L````PAD,`)P```,B=0P!I````U)U#`&\```#@
+MG4,``P```/"=0P#B`````)Y#`)`````,GD,`H0```!B>0P"R````))Y#`*H`
+M```PGD,`1@```#R>0P!P````80!F`"T`>@!A````80!R`"T`80!E````80!R
+M`"T`8@!H````80!R`"T`9`!Z````80!R`"T`90!G````80!R`"T`:0!Q````
+M80!R`"T`:@!O````80!R`"T`:P!W````80!R`"T`;`!B````80!R`"T`;`!Y
+M````80!R`"T`;0!A````80!R`"T`;P!M````80!R`"T`<0!A````80!R`"T`
+M<P!A````80!R`"T`<P!Y````80!R`"T`=`!N````80!R`"T`>0!E````80!Z
+M`"T`80!Z`"T`8P!Y`'(`;```````80!Z`"T`80!Z`"T`;`!A`'0`;@``````
+M8@!E`"T`8@!Y````8@!G`"T`8@!G````8@!N`"T`:0!N````8@!S`"T`8@!A
+M`"T`;`!A`'0`;@``````8P!A`"T`90!S````8P!S`"T`8P!Z````8P!Y`"T`
+M9P!B````9`!A`"T`9`!K````9`!E`"T`80!T````9`!E`"T`8P!H````9`!E
+M`"T`9`!E````9`!E`"T`;`!I````9`!E`"T`;`!U````9`!I`'8`+0!M`'8`
+M`````&4`;``M`&<`<@```&4`;@`M`&$`=0```&4`;@`M`&(`>@```&4`;@`M
+M`&,`80```&4`;@`M`&,`8@```&4`;@`M`&<`8@```&4`;@`M`&D`90```&4`
+M;@`M`&H`;0```&4`;@`M`&X`>@```&4`;@`M`'``:````&4`;@`M`'0`=```
+M`&4`;@`M`'4`<P```&4`;@`M`'H`80```&4`;@`M`'H`=P```&4`<P`M`&$`
+M<@```&4`<P`M`&(`;P```&4`<P`M`&,`;````&4`<P`M`&,`;P```&4`<P`M
+M`&,`<@```&4`<P`M`&0`;P```&4`<P`M`&4`8P```&4`<P`M`&4`<P```&4`
+M<P`M`&<`=````&4`<P`M`&@`;@```&4`<P`M`&T`>````&4`<P`M`&X`:0``
+M`&4`<P`M`'``80```&4`<P`M`'``90```&4`<P`M`'``<@```&4`<P`M`'``
+M>0```&4`<P`M`',`=@```&4`<P`M`'4`>0```&4`<P`M`'8`90```&4`=``M
+M`&4`90```&4`=0`M`&4`<P```&8`80`M`&D`<@```&8`:0`M`&8`:0```&8`
+M;P`M`&8`;P```&8`<@`M`&(`90```&8`<@`M`&,`80```&8`<@`M`&,`:```
+M`&8`<@`M`&8`<@```&8`<@`M`&P`=0```&8`<@`M`&T`8P```&<`;``M`&4`
+M<P```&<`=0`M`&D`;@```&@`90`M`&D`;````&@`:0`M`&D`;@```&@`<@`M
+M`&(`80```&@`<@`M`&@`<@```&@`=0`M`&@`=0```&@`>0`M`&$`;0```&D`
+M9``M`&D`9````&D`<P`M`&D`<P```&D`=``M`&,`:````&D`=``M`&D`=```
+M`&H`80`M`&H`<````&L`80`M`&<`90```&L`:P`M`&L`>@```&L`;@`M`&D`
+M;@```&L`;P!K`"T`:0!N``````!K`&\`+0!K`'(```!K`'D`+0!K`&<```!L
+M`'0`+0!L`'0```!L`'8`+0!L`'8```!M`&D`+0!N`'H```!M`&L`+0!M`&L`
+M``!M`&P`+0!I`&X```!M`&X`+0!M`&X```!M`'(`+0!I`&X```!M`',`+0!B
+M`&X```!M`',`+0!M`'D```!M`'0`+0!M`'0```!N`&(`+0!N`&\```!N`&P`
+M+0!B`&4```!N`&P`+0!N`&P```!N`&X`+0!N`&\```!N`',`+0!Z`&$```!P
+M`&$`+0!I`&X```!P`&P`+0!P`&P```!P`'0`+0!B`'(```!P`'0`+0!P`'0`
+M``!Q`'4`>@`M`&(`;P``````<0!U`'H`+0!E`&,``````'$`=0!Z`"T`<`!E
+M``````!R`&\`+0!R`&\```!R`'4`+0!R`'4```!S`&$`+0!I`&X```!S`&4`
+M+0!F`&D```!S`&4`+0!N`&\```!S`&4`+0!S`&4```!S`&L`+0!S`&L```!S
+M`&P`+0!S`&D```!S`&T`80`M`&X`;P``````<P!M`&$`+0!S`&4``````',`
+M;0!J`"T`;@!O``````!S`&T`:@`M`',`90``````<P!M`&X`+0!F`&D`````
+M`',`;0!S`"T`9@!I``````!S`'$`+0!A`&P```!S`'(`+0!B`&$`+0!C`'D`
+M<@!L``````!S`'(`+0!B`&$`+0!L`&$`=`!N``````!S`'(`+0!S`'``+0!C
+M`'D`<@!L``````!S`'(`+0!S`'``+0!L`&$`=`!N``````!S`'8`+0!F`&D`
+M``!S`'8`+0!S`&4```!S`'<`+0!K`&4```!S`'D`<@`M`',`>0``````=`!A
+M`"T`:0!N````=`!E`"T`:0!N````=`!H`"T`=`!H````=`!N`"T`>@!A````
+M=`!R`"T`=`!R````=`!T`"T`<@!U````=0!K`"T`=0!A````=0!R`"T`<`!K
+M````=0!Z`"T`=0!Z`"T`8P!Y`'(`;```````=0!Z`"T`=0!Z`"T`;`!A`'0`
+M;@``````=@!I`"T`=@!N````>`!H`"T`>@!A````>@!H`"T`8P!H`',`````
+M`'H`:``M`&,`:`!T``````!Z`&@`+0!C`&X```!Z`&@`+0!H`&L```!Z`&@`
+M+0!M`&\```!Z`&@`+0!S`&<```!Z`&@`+0!T`'<```!Z`'4`+0!Z`&$`````
+M````````@!!$```!````````@``P``!L;V<Q,```````````````````````
+M\#\```````#P/S,$````````,P0`````````````````````````````_P<`
+M``````````````````````````"```````````#_______\/`/_______P\`
+M``````#`VS\``````,#;/Q#X_____X]"$/C_____CT(```"`____?P```(#_
+M__]_`'B?4!-$TS]8LQ(?,>\?/0``````````_____________________P``
+M````````````````\#\```````#P/P`````````````````````````````P
+M0P```````#!#````````\/\```````#P?P$``````/!_`0``````\'_YSI?&
+M%(DU0#V!*60)DPC`580U:H#))<#2-9;<`FK\/_>9&'Z?JQ9`-;%WW/)Z\K\(
+M02Z_;'I:/P```````````````````(#_?P````````"`___<I]>YA69QL0U`
+M````````__\-0/<V0PR8&?:5_3\```````#@/P-E>'`````````````!%`#!
+M!4,`R@A#`,\(0P#Q!D,``````````````````,#__S7":"&BV@_)_S\UPF@A
+MHMH/R?X_````````\#\````````(0`@$"`@(!`@(``0,"``$#`@`````````
+M`/`_?P(UPF@AHMH/R3Y`________[W\````````0`````````)C`````````
+MF$````````#P?P``````````;&]G`&QO9S$P````97AP`'!O=P!A<VEN````
+M`&%C;W,`````<W%R=`````````````#P/P``````````````````````````
+M````````Y`JH`WP_&_=1+3@%/CT``-ZVG5>+/P4P^_X):S@]`("6WJYPE#\=
+MX9$,>/PY/0``/HXNVIH_&G!NGM$;-3T`P%GWV*V@/Z$```E1*AL]``!CQO?Z
+MHS\_]8'Q8C8(/0#`[UD>%Z<_VU3//QJ]%CT``,<"D#ZJ/X;3T,A7TB$]`$##
+M+3,RK3\?1-GXVWH;/0"@UG`1*+`_=E"O*(OS&ST`8/'L'YRQ/]154QX_X#X]
+M`,!E_1L5LS^59XP$@.(W/0!@Q8`GD[0_\Z5BS:S$+ST`@.E><P6V/Y]]H2//
+MPQ<]`*!*C7=KMS]Z;J`2Z`,</0#`Y$X+UK@_@DQ.S.4`.3T`0"0BM#.Z/S57
+M9S1P\38]`("G5+:5NS_'3G8D7@XI/0#@Z0(FZKP_R\LN@BG1ZSP`H&S!M$*^
+M/^E-C?,/Y24]`&!JL06-OS^G=[>BI8XJ/0`@/,6;;<`_1?KA[HV!,CT``-ZL
+M/@W!/Z[P@\M%BAX]`-!T%3^XP3_4_Y/Q&0L!/0#03P7^4<(_P'<H0`FL_CP`
+MX/0<,/?"/T%C&@W']3`]`%!Y#W"4PS]D<AIY/^D?/0"@M%-T*<0_-$N\Q0G.
+M/CT`P/[Z),K$/U%HYD)#("X]`#`)$G5BQ3\M%ZJS[-\P/0``]AH:\L4_$V$^
+M+1OO/ST``)`6HHW&/]"9EOPLE.T\```H;%@@QS_-5$!BJ"`]/0!0'/^5M,<_
+MQ3.1:"P!)3T`H,YFHC_(/Y\CAX;!QB`]`/!6#`[,R#_?H,^AM.,V/0#0Y^_?
+M6<D_Y>#_>@(@)#T`P-)''^G)/R`D\FP.,S4]`$`#BZ1NRC]_6RNYK.LS/0#P
+M4L6W`,L_<ZID3&GT/3T`</E\YHC+/W*@>"(C_S(]`$`NNN,&S#]\O57-%<LR
+M/0``;-2=D<P_<JSFE$:V#CT`D!-A^Q'-/PN6KI';-!H]`!#]JUF?S3]S;->\
+M(WL@/0!@?E(]%LX_Y),N\FF=,3T`H`+<+)K./X?Q@9#UZR`]`)"4=E@?SS\`
+MD!?JZZ\'/0!PVQ^`F<\_:);R]WUS(CT`T`E%6PK0/W\E4R-;:Q\]`.C[-X!(
+MT#_&$KFYDVH;/0"H(58QA]`_KO._?=IA,CT`N&H=<<;0/S+!,(U*Z34]`*C2
+MS=G_T#^`G?'V#C46/0!XPKXO0-$_B[HB0B`\,3T`D&D9EWK1/YE<+2%Y\B$]
+M`%BL,'JUT3]^A/]B/L\]/0"X.A7;\-$_WPX,(RY8)ST`2$)/#B;2/_D?I"@0
+M?A4]`'@1IF)BTC\2&0PN&K`2/0#80\!QF-(_>3>>K&DY*ST`@`MVP=72/[\(
+M#[[>ZCH]`#"[I[,,TS\RV+89F9(X/0!XGU`31-,_6+,2'S'O'ST``````,#;
+M/P``````P-L_``````!1VS\``````%';/P````#PZ-H_`````/#HVC\`````
+MX(#:/P````#@@-H_`````,`?VC\`````P!_:/P````"@OMD_`````*"^V3\`
+M````@%W9/P````"`7=D_`````%`#V3\`````4`/9/P`````@J=@_`````""I
+MV#\`````X%78/P````#@5=@_`````"C_US\`````*/_7/P````!@K]<_````
+M`&"OUS\`````F%_7/P````"87]<_`````-`/US\`````T`_7/P````"`P]8_
+M`````(##UC\`````J'K6/P````"H>M8_`````-`QUC\`````T#'6/P````!P
+M[-4_`````'#LU3\`````$*?5/P`````0I]4_`````"AEU3\`````*&75/P``
+M``!`(]4_`````$`CU3\`````T.34/P````#0Y-0_`````&"FU#\`````8*;4
+M/P````!H:]0_`````&AKU#\`````^"S4/P````#X+-0_`````'CUTS\`````
+M>/73/P````"`NM,_`````("ZTS\``````(/3/P``````@],_`````/A.TS\`
+M````^$[3/P````!X%],_`````'@7TS\`````<./2/P````!PX](_`````."R
+MTC\`````X++2/P````#8?M(_`````-A^TC\`````2$[2/P````!(3M(_````
+M`+@=TC\`````N!W2/P````"@\-$_`````*#PT3\`````B,/1/P````"(P]$_
+M`````'"6T3\`````<);1/P````!8:=$_`````%AIT3\`````N#_1/P````"X
+M/]$_`````*`2T3\`````H!+1/P``````Z=`_``````#IT#\`````V,+0/P``
+M``#8PM`_`````#B9T#\`````.)G0/P`````0<]`_`````!!ST#\`````<$G0
+M/P````!P2=`_`````,`FT#\`````P";0/P````"8`-`_`````)@`T#\`````
+MX+3//P````#@M,\_`````(!OSS\`````@&_//P`````@*L\_`````"`JSS\`
+M````P.3./P````#`Y,X_`````&"?SC\`````8)_./P``````6LX_``````!:
+MSC\`````D!O./P````"0&\X_`````##6S3\`````,-;-/P````#`E\T_````
+M`,"7S3\`````4%G-/P````!06<T_`````.`:S3\`````X!K-/P````!@X\P_
+M`````&#CS#\`````\*3,/P````#PI,P_`````'!MS#\`````<&W,/P``````
+M+\P_```````OS#\`````@/?+/P````"`]\L_``````#`RS\``````,#+/P``
+M`````.`_=&%N:`````!A=&%N`````&%T86XR````<VEN`&-O<P!T86X`8V5I
+M;`````!F;&]O<@```&9A8G,`````;6]D9@````!L9&5X<````%]C86)S````
+M7VAY<&]T``!F;6]D`````&9R97AP````7WDP`%]Y,0!?>6X`7VQO9V(```!?
+M;F5X=&%F=&5R````````%````+"@0P`=````M*!#`!H```"DH$,`&P```*B@
+M0P`?````@*I#`!,```"(JD,`(0````BI0P`.````N*!#``T```#`H$,`#P``
+M`!"I0P`0````&*E#``4```#(H$,`'@```""I0P`2````)*E#`"`````HJ4,`
+M#````"RI0P`+````-*E#`!4````\J4,`'````$2I0P`9````3*E#`!$```!4
+MJ4,`&````%RI0P`6````9*E#`!<```!LJ4,`(@```'2I0P`C````>*E#`"0`
+M``!\J4,`)0```("I0P`F````B*E#`'-I;F@`````8V]S:`````````````#P
+M?________^]_`````````(!#`$\`3@!/`%4`5``D````````````````````
+M_RG#8``````"````40```"2M`P`DE0,``````/\IPV``````#````!0```!X
+MK0,`>)4#``````#_*<-@``````T```"<`P``C*T#`(R5`P``````````````
+M```@[D,`**M#`````````````0```#BK0P!`JT,``````"#N0P``````````
+M`/____\`````0````"BK0P````````````````#H[4,`<*M#````````````
+M`0```("K0P"(JT,``````.CM0P```````````/____\`````0````'"K0P``
+M```````````````$[D,`N*M#`````````````@```,BK0P#4JT,`B*M#````
+M```$[D,``0````````#_____`````$````"XJT,`````````````````..Y#
+M``2L0P````````````,````4K$,`)*Q#`-2K0P"(JT,``````#CN0P`"````
+M`````/____\`````0`````2L0P````````````````!@[D,`5*Q#````````
+M`````@```&2L0P!PK$,`B*M#``````!@[D,``0````````#_____`````$``
+M``!4K$,```````#_`0#%_P$`4"$"`/`R`@!0-P(`=Q\#`($?`P"3'P,`I1\#
+M`+<?`P#)'P,`VQ\#`/`?`P!((`,`@B`#`)\@`P#*(`,`[R`#``0A`P`D(0,`
+M02$#`%,A`P!H(0,`CB$#`.(A`P#W(0,`5R(#`&DB`P">(@,`L"(#`,(B`P#<
+M(@,`^2(#``XC`P`C(P,`.",#`$(C`P!24T135G1."$!&@$&S-:[+8A2E&@$`
+M``!$.EQ0<F]J96-T<UQ7:6Y205)<<V9X7&)U:6QD7'-F>')A<C,R7%)E;&5A
+M<V5<<V9X<F%R+G!D8@`````*````%0$``.0`````````%0$`````````$```
+M\````"YT97AT)&1I`````/`0```W#@,`+G1E>'0D;6X`````)Q\#`#8$```N
+M=&5X="1X`%TC`P!=````+G1E>'0D>60``````#`#`&`"```N:61A=&$D-0``
+M``!@,@,`!````"XP,&-F9P``9#(#``0````N0U)4)%A#00````!H,@,`!```
+M`"Y#4E0D6$-!00```&PR`P`H````+D-25"180U4`````E#(#``0````N0U)4
+M)%A#6@````"8,@,`!````"Y#4E0D6$E!`````)PR`P`$````+D-25"1824%!
+M````H#(#``0````N0U)4)%A)04,```"D,@,`$````"Y#4E0D6$E#`````+0R
+M`P`$````+D-25"1825H`````N#(#``0````N0U)4)%A000````"\,@,`"```
+M`"Y#4E0D6%!8`````,0R`P`$````+D-25"184%A!````R#(#``0````N0U)4
+M)%A06@````#,,@,`!````"Y#4E0D6%1!`````-`R`P`$````+D-25"185%H`
+M````U#(#`-P"```N8V9G=6%R9`````"P-0,`9'4``"YR9&%T80``%*L#`'P!
+M```N<F1A=&$D<@````"0K`,`E````"YR9&%T821S>&1A=&$````DK0,`!`0`
+M`"YR9&%T821Z>GID8F<````HL0,`!````"YR=&,D24%!`````"RQ`P`$````
+M+G)T8R1)6EH`````,+$#``0````N<G1C)%1!00`````TL0,`!````"YR=&,D
+M5%I:`````#BQ`P",#```+GAD871A)'@`````Q+T#```!```N9&ED870D,@``
+M``#$O@,`(````"YD:61A="0S`````.2^`P",`0``+F1I9&%T)#0`````<,`#
+M`#`&```N9&ED870D-@````"@Q@,`D`$``"YD:61A="0W`````##(`P`T````
+M+F5D871A``!DR`,`*````"YI9&%T820R`````(S(`P`4````+FED871A)#,`
+M````H,@#`&`"```N:61A=&$D-```````RP,`(@L``"YI9&%T820V``````#@
+M`P#0#0``+F1A=&$```#0[0,`L````"YD871A)'(`@.X#`*@H`@`N8G-S````
+M```@!@",`0``+F1I9&%T)#4``````#`&`%`&```N<G-R8R0P,0````!0-@8`
+M@-D``"YR<W)C)#`R```````````````````````````B!9,9````````````
+M``````````````````````````4```#_____G1]#`"(%DQD!````7+%#````
+M`````````````````````````0```"(%DQD&````K+%#````````````````
+M`````````````0```/____\G'T,``````"\?0P`!````/1]#``(```!+'T,`
+M`P```%D?0P`$````9Q]#`/____^+'T,`(@63&0$```#<L4,`````````````
+M```````````````!````_____Z\?0P`B!9,9`0````BR0P``````````````
+M``````````````$```#_____P1]#`"(%DQD!````-+)#````````````````
+M`````````````0```/_____3'T,`(@63&0$```!@LD,`````````````````
+M```````````!````_____^4?0P`B!9,9`0```(RR0P``````````````````
+M``````````$````B!9,9!@```-RR0P````````````````````````````$`
+M``#_____^A]#```````"($,``0```!`@0P`"````'B!#``,````L($,`!```
+M`#H@0P#_____4B!#``````!G($,`(@63&0(````,LT,`````````````````
+M```````````!````````````````````4+-#``$```!8LT,``0```-#M0P``
+M````_____P`````$`````````/____^I($,`_____[0@0P`!````OR!#`"(%
+MDQD#````=+-#`````````````````````````````0```/____^,($,`````
+M`)0@0P`B!9,9`@```+"S0P````````````````````````````$```#_____
+M^2!#`"(%DQD!````Y+-#`````````````````````````````0```/____\N
+M(4,``````#DA0P`B!9,9`@```!"T0P````````````````````````````$`
+M``#_____U"!#``````#?($,`(@63&0(```!$M$,`````````````````````
+M```````!````_____PXA0P#_____&2%#`"(%DQD"````>+1#````````````
+M`````````````````0```/____]+(4,`(@63&0$```"LM$,`````````````
+M```````````````!````_____UTA0P`B!9,9`0```-BT0P``````````````
+M``````````````$```#_____<B%#``````"`(4,`(@63&0(````$M4,`````
+M```````````````````````!````(@63&04```!<M4,`````````````````
+M```````````!````_____Y@A0P``````IB%#``$```"T(4,``@```,(A0P`"
+M````TB%#`/_____L(4,`(@63&0$```"$M4,`````````````````````````
+M```!````_____W,B0P`B!9,9`0```+"U0P``````````````````````````
+M``$```#_____J")#`"(%DQD!````W+5#````````````````````````````
+M`0```/____^Z(D,`(@63&0$````(MD,````````````````````````````!
+M````_____V$B0P`B!9,9`0```#2V0P````````````````````````````$`
+M```B!9,9!P```(2V0P````````````````````````````$```#_____`2)#
+M```````,(D,``0```!<B0P`"````(B)#``,````M(D,`!````#LB0P`%````
+M22)#`/_____,(D,`(@63&0$```"\MD,````````````````````````````!
+M`````````.CM0P``````_____P`````,````(!U!``````!0[T$``````!2W
+M0P`"````(+=#`.BV0P`0````!.Y#``````#_____``````P```#P'$$`````
+M``$````"`````@```&BW0P#_____```````````M(T,`_____P``````````
+M!.Y#``````!\U$$`0```````````````H=1!`"(%DQD#````4+=#``$````\
+MMT,``````````````````0`````````"`````P````(```#`MT,```````3N
+M0P``````+:M!`$```````````````%*K00#_____``````````#F(D,``0``
+M`/$B0P#_____`````"(%DQD$````X+=#``$```"LMT,`````````````````
+M`0```/____\#(T,`(@63&0$````DN$,````````````````````````````!
+M````_____Q@C0P`B!9,9`0```%"X0P````````````````````````````$`
+M````````_O___P````#0____`````/[___\`````K.9!``````#^____````
+M`-3___\`````_O___P`````DYT$``````/[___\`````R/___P````#^____
+M<N=!`)OG00``````_O___P````#8____`````/[___^OZ4$`PNE!``````#^
+M____`````,S___\`````_O___Z?N00"[[D$``````%#O00``````++E#``,`
+M```\N4,`(+=#`.BV0P``````..Y#``````#_____``````P````0[T$`_O__
+M_P````#0____`````/[___\`````I3!"``````!J,$(`=#!"`/[___\`````
+MJ/___P````#^____`````.(F0@``````-R9"`$$F0@#^____`````-C___\`
+M````_O___W0N0@!X+D(``````/[___\`````V/___P````#^____`"5"``DE
+M0@!```````````````"))T(`_____P````#_____`````````````````0``
+M``$```#DN4,`(@63&0(```#TN4,``0````2Z0P`````````````````!````
+M`````/[___\`````T/___P````#^____FR]"`)\O0@``````4.]!``````!L
+MND,``@```'BZ0P#HMD,``````&#N0P``````_____P`````,````0"5"````
+M``#^____`````-3___\`````_O___P`````G=4(``````.3___\`````U/__
+M_P````#^____6W5"`%]U0@``````Y/___P````#4____`````/[___\`````
+M_'="``````#D=T(`]'="`/[___\`````U/___P````#^____`````-E^0@``
+M````_O___P````#4____`````/[___\`````*G]"``````#^____`````-C_
+M__\`````_O___P````!)AD(``````/[___\`````V/___P````#^____````
+M`&^00@``````_O___P````#8____`````/[___\`````>X]"``````#^____
+M`````-C___\`````_O___P````#<CT(``````/[___\`````V/___P````#^
+M____`````">00@``````_O___P````#4____`````/[___\`````NJ%"````
+M``#^____`````-3___\`````_O___P````!,MD(``````/[___\`````V/__
+M_P````#^____`````/6P0@``````Y/___P````"T____`````/[___\`````
+MDKY"``````#^____`````-3___\`````_O___P````#ENT(``````/[___\`
+M````S/___P````#^____`````"3`0@``````_O___P````#4____`````/[_
+M__\`````0LA"``````#^____`````-#___\`````_O___P````"1YT(`````
+M`/[___\`````Q/___P````#^____`````!SI0@```````````._H0@#^____
+M`````-C___\`````_O___^'L0@#][$(``````/[___\`````S/___P````#^
+M____`````$GW0@``````_O___P````#0____`````/[___\`````!OM"````
+M``#^____`````-3___\`````_O___P````"<^T(``````/[___\`````U/__
+M_P````#^____`````"3]0@``````_O___P````#8____`````/[___]9&T,`
+M;!M#``$````@4P,`N`P&`*`@!@"$OP,`H,8#`````````````0```#!3`P"\
+M#`8`3"`&`#"_`P!TQP,````````````!````0%,#`,`,!@`\(`8`(+\#`)S'
+M`P````````````$```!04P,`Q`P&```@!@#DO@,`K,<#`````````````0``
+M`&!3`P#(#`8`="`&`%B_`P#@QP,````````````!````@%,#`,P,!@!T(08`
+M6,`#``3(`P````````````$```#@5`,`[`P&`)@@!@!\OP,`',@#````````
+M`````0```/!4`P#P#`8`-"`&`!B_`P`DR`,`````````````````````````
+M`````````````````````````````+K$`P`DQ0,`CL0#`*+$`P`RQ0,`SL0#
+M`.;$`P`"Q0,`:,4#`%3%`P!$Q0,`#,4#``````"(Q@,``````&+$`P!VQ`,`
+M3L0#``````#NPP,`_L,#``[$`P#BPP,`+,0#`$#$`P#,PP,`LL,#`![$`P``
+M````ML4#``3&`P#NQ0,`W,4#`,K%`P!ZQ0,`H,4#`(C%`P``````=L8#````
+M``"FP@,`NL(#`,K"`P#:P@,`[L(#``##`P`2PP,`DL(#`###`P!&PP,`4L,#
+M`&C#`P!VPP,`A,,#`)##`P">PP,`A,(#`';"`P!JP@,`6L(#`$K"`P`\P@,`
+M,,(#`"C"`P`8P@,`"L(#`/[!`P#LP0,`W,$#`,S!`P#`P0,`KL$#`)K!`P"(
+MP0,`>L$#`&C!`P!:P0,`3L$#`#3!`P`BP0,`$,$#``#!`P#PP`,`W,`#`,K`
+M`P"ZP`,`KL`#`)S``P",P`,`?L`#`![#`P!PP`,``````&3&`P`NQ@,`%L8#
+M`%3&`P!"Q@,`````````4VAO=U=I;F1O=P````!'971$;&=)=&5M`````$5N
+M86)L95=I;F1O=P````!39717:6YD;W=497AT5P````!'971087)E;G0```!3
+M9717:6YD;W=0;W,`````4V5T1&QG271E;51E>'17````1V5T4WES=&5M365T
+M<FEC<P````!'971#;&EE;G1296-T````1V5T5VEN9&]W4F5C=````$=E=%=I
+M;F1O=TQO;F=7`````%-E=%=I;F1O=TQO;F=7`````%-E=%!R;V-E<W-$969A
+M=6QT3&%Y;W5T````1V5T5VEN9&]W````3&]A9%-T<FEN9U<```!/96U4;T-H
+M87)"=69F00````!#:&%R57!P97)7`````$1E9E=I;F1O=U!R;V-7`````%)E
+M9VES=&5R0VQA<W-%>%<`````0W)E871E5VEN9&]W17A7````27-7:6YD;W<`
+M````1&5S=')O>5=I;F1O=P```%5P9&%T95=I;F1O=P````!-87!7:6YD;W=0
+M;VEN=',```!#;W!Y4F5C=`````!,;V%D0W5R<V]R5P```%-E;F1-97-S86=E
+M5P````!'971$0P```%)E;&5A<V5$0P```$UE<W-A9V5";WA7````1FEN9%=I
+M;F1O=T5X5P```$=E=$-L87-S3F%M95<```!#;W!Y26UA9V4```!W=G-P<FEN
+M=&97`````$=E=$UE<W-A9V57````5')A;G-L871E365S<V%G90````!$:7-P
+M871C:$UE<W-A9V57`````%!E96M-97-S86=E5P````!0;W-T365S<V%G95<`
+M````5V%I=$9O<DEN<'5T261L90````!)<U=I;F1O=U9I<VEB;&4```!$:6%L
+M;V=";WA087)A;5<```!%;F1$:6%L;V<```!'971$;&=)=&5M5&5X=%<```!3
+M96YD1&QG271E;4UE<W-A9V57````4V5T1F]C=7,`````4V5T1F]R96=R;W5N
+M9%=I;F1O=P```$=E=%-Y<T-O;&]R````3&]A9$)I=&UA<%<```!,;V%D26-O
+M;E<```!$97-T<F]Y26-O;@```$ES1&EA;&]G365S<V%G95<`````0W)E871E
+M0V]M<&%T:6)L94)I=&UA<`````!#<F5A=&5#;VUP871I8FQE1$,`````1&5L
+M971E1$,`````1&5L971E3V)J96-T`````$=E=$1E=FEC94-A<',```!396QE
+M8W1/8FIE8W0`````4W1R971C:$)L=`````!#<F5A=&5$24)396-T:6]N````
+M`$=E=$]B:F5C=%<`````1V5T3W!E;D9I;&5.86UE5P````!'9713879E1FEL
+M94YA;657`````$-O;6U$;&=%>'1E;F1E9$5R<F]R`````$]P96Y0<F]C97-S
+M5&]K96X`````061J=7-T5&]K96Y0<FEV:6QE9V5S````4V5T1FEL95-E8W5R
+M:71Y5P````!,;V]K=7!0<FEV:6QE9V5686QU95<```!!;&QO8V%T94%N9$EN
+M:71I86QI>F53:60`````1G)E95-I9````$-H96-K5&]K96Y-96UB97)S:&EP
+M`````%)E9T-L;W-E2V5Y````4F5G0W)E871E2V5Y17A7````4F5G3W!E;DME
+M>45X5P```%)E9U%U97)Y5F%L=65%>%<`````4F5G4V5T5F%L=65%>%<`````
+M4TA'971-86QL;V,```!32$=E=%!A=&A&<F]M241,:7-T5P````!32$)R;W=S
+M949O<D9O;&1E<E<`````4TA&:6QE3W!E<F%T:6]N5P````!3:&5L;$5X96-U
+M=&5%>%<```!32$=E=$9I;&5);F9O5P````!32$=E=$9O;&1E<DQO8V%T:6]N
+M````4TA#:&%N9V5.;W1I9GD`````0W)E871E4W1R96%M3VY(1VQO8F%L````
+M0V]#<F5A=&5);G-T86YC90````!#3%-)1$9R;VU3=')I;F<```!/;&5);FET
+M:6%L:7IE````3VQE56YI;FET:6%L:7IE````4TA!=71O0V]M<&QE=&4`````
+M26YI=$-O;6UO;D-O;G1R;VQS17@`````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````_RG#8`````!8R`,``0``````````````
+M````````````````<V9X<F%R+F5X90``H,@#````````````YM$#```P`P#8
+MR@,```````````"RT@,`.#(#`````````````````````````````,L#`!#+
+M`P`@RP,`,LL#`$;+`P!8RP,`9LL#`'3+`P"(RP,`G,L#`*K+`P"XRP,`RLL#
+M`-[+`P#RRP,`_LL#``S,`P`<S`,`*,P#`#3,`P!(S`,`6,P#`&K,`P"`S`,`
+MELP#`*+,`P"TS`,`Q,P#`-3,`P#LS`,``,T#``[-`P`DS0,`.,T#`$C-`P!6
+MS0,`:,T#`'[-`P",S0,`ILT#`*[-`P"^S0,`U,T#`.;-`P#VS0,`!,X#`!3.
+M`P`DS@,`/LX#`$[.`P!BS@,`?LX#`);.`P"NS@,`QLX#`-+.`P#@S@,`],X#
+M``K/`P`:SP,`+L\#`#[/`P!@SP,`@L\#`)K/`P"TSP,`SL\#`.;/`P#RSP,`
+M!-`#`!K0`P`PT`,`/M`#`$[0`P!<T`,`;-`#`'K0`P"*T`,`G-`#`+30`P#*
+MT`,`VM`#`.K0`P#ZT`,`#-$#`"+1`P`VT0,`2-$#`&+1`P!^T0,`CM$#`)S1
+M`P"NT0,`P-$#`-+1`P#^U0,`[-4#`-S5`P#0U0,`P-4#`*[5`P"^T@,`T-(#
+M`.#2`P#RT@,``M,#`!33`P`PTP,`1-,#`&#3`P!^TP,`D-,#`*K3`P#`TP,`
+MVM,#`/#3`P`$U`,`$-0#`"#4`P!(U`,`5-0#`&+4`P!PU`,`>M0#`(S4`P"H
+MU`,`OM0#`-34`P#>U`,`ZM0#`/;4`P`$U0,`%M4#`";5`P`ZU0,`2M4#`%S5
+M`P!HU0,`>M4#`)35`P`2U@,``````*#2`P".T@,`<-(#`%#2`P`RT@,`'M(#
+M``S2`P``T@,`]-$#```````"`D=E=$QA<W1%<G)O<@``<P13971,87-T17)R
+M;W(``%X!1F]R;6%T365S<V%G95<``,`!1V5T0W5R<F5N=%!R;V-E<W,`W0!$
+M979I8V5);T-O;G1R;VP`:@13971&:6QE5&EM90!2`$-L;W-E2&%N9&QE`($`
+M0W)E871E1&ER96-T;W)Y5P```P1296UO=F5$:7)E8W1O<GE7``"/`$-R96%T
+M949I;&57`-8`1&5L971E1FEL95<`DP!#<F5A=&5(87)D3&EN:U<`80)'9713
+M:&]R=%!A=&A.86UE5P`/`D=E=$QO;F=0871H3F%M95<``&,#36]V949I;&57
+M`/,!1V5T1FEL951Y<&4`9`)'9713=&1(86YD;&4``"4%5W)I=&5&:6QE`,`#
+M4F5A9$9I;&4``%<!1FQU<VA&:6QE0G5F9F5R<P``4P13971%;F1/9D9I;&4`
+M`&8$4V5T1FEL95!O:6YT97(``&$$4V5T1FEL94%T=')I8G5T97-7``#J`4=E
+M=$9I;&5!='1R:6)U=&5S5P``+@%&:6YD0VQO<V4`.0%&:6YD1FER<W1&:6QE
+M5P``10%&:6YD3F5X=$9I;&57`*0"1V5T5F5R<VEO;D5X5P"_`4=E=$-U<G)E
+M;G1$:7)E8W1O<GE7``#[`4=E=$9U;&Q0871H3F%M95<``%P!1F]L9%-T<FEN
+M9U<`%`)'971-;V1U;&5&:6QE3F%M95<``!@"1V5T36]D=6QE2&%N9&QE5P``
+M3@%&:6YD4F5S;W5R8V57`&(!1G)E94QI8G)A<GD`10)'9710<F]C061D<F5S
+M<P``P0%'971#=7)R96YT4')O8V5S<TED`!D!17AI=%!R;V-E<W,`DP139714
+M:')E861%>&5C=71I;VY3=&%T90"R!%-L965P`#\#3&]A9$QI8G)A<GE7``!P
+M`D=E=%-Y<W1E;41I<F5C=&]R>5<`9`!#;VUP87)E4W1R:6YG5P``$`!!;&QO
+M8T-O;G-O;&4``%\!1G)E94-O;G-O;&4`%P!!='1A8VA#;VYS;VQE`"0%5W)I
+M=&5#;VYS;VQE5P!&`D=E=%!R;V-E<W-!9F9I;FET>4UA<VL``+4`0W)E871E
+M5&AR96%D``"9!%-E=%1H<F5A9%!R:6]R:71Y`.("26YI=&EA;&EZ94-R:71I
+M8V%L4V5C=&EO;@#N`$5N=&5R0W)I=&EC86Q396-T:6]N```Y`TQE879E0W)I
+M=&EC86Q396-T:6]N``#1`$1E;&5T94-R:71I8V%L4V5C=&EO;@!9!%-E=$5V
+M96YT```/!%)E<V5T179E;G0``/X#4F5L96%S95-E;6%P:&]R90``^01786ET
+M1F]R4VEN9VQE3V)J96-T`(4`0W)E871E179E;G17``"N`$-R96%T95-E;6%P
+M:&]R95<``'<"1V5T4WES=&5M5&EM90"^!%-Y<W1E;51I;654;U1Z4W!E8VEF
+M:6-,;V-A;%1I;64`T`14>E-P96-I9FEC3&]C86Q4:6UE5&]3>7-T96U4:6UE
+M`+T$4WES=&5M5&EM951O1FEL951I;64``"0!1FEL951I;654;TQO8V%L1FEL
+M951I;64`1@-,;V-A;$9I;&54:6UE5&]&:6QE5&EM90`E`49I;&54:6UE5&]3
+M>7-T96U4:6UE``!R`4=E=$-026YF;P#^`DES1$)#4TQE861">71E``!G`TUU
+M;'1I0GET951O5VED94-H87(`$057:61E0VAA<E1O375L=&E">71E`+,"1VQO
+M8F%L06QL;V,`5`-,;V-K4F5S;W5R8V4``+X"1VQO8F%L3&]C:P``Q0)';&]B
+M86Q5;FQO8VL``+H"1VQO8F%L1G)E90``00-,;V%D4F5S;W5R8V4``+$$4VEZ
+M96]F4F5S;W5R8V4``$T$4V5T0W5R<F5N=$1I<F5C=&]R>5<``-\!1V5T17AI
+M=$-O9&50<F]C97-S```#`D=E=$QO8V%L5&EM90``DP)'9714:6-K0V]U;G0`
+M`%<#36%P5FEE=T]F1FEL90#6!%5N;6%P5FEE=T]F1FEL90",`$-R96%T949I
+M;&5-87!P:6YG5P``>0-/<&5N1FEL94UA<'!I;F=7``"'`4=E=$-O;6UA;F1,
+M:6YE5P!7!%-E=$5N=FER;VYM96YT5F%R:6%B;&57`!T!17AP86YD16YV:7)O
+M;FUE;G13=')I;F=S5P"%`D=E=%1E;7!0871H5P``8`--;W9E1FEL945X5P`&
+M`D=E=$QO8V%L94EN9F]7``"7`D=E=%1I;65&;W)M8717``#(`4=E=$1A=&5&
+M;W)M8717```S`D=E=$YU;6)E<D9O<FUA=%<``$M%4DY%3#,R+F1L;```(0!'
+M9&EP06QL;V,`[0!'9&EP1G)E90``-@!'9&EP0VQO;F5);6%G90``F`!'9&EP
+M1&ES<&]S94EM86=E``!1`$=D:7!#<F5A=&5":71M87!&<F]M4W1R96%M``!2
+M`$=D:7!#<F5A=&5":71M87!&<F]M4W1R96%M24--`%\`1V1I<$-R96%T94A"
+M251-05!&<F]M0FET;6%P`'4"1V1I<&QU<U-T87)T=7```'0"1V1I<&QU<U-H
+M=71D;W=N`&=D:7!L=7,N9&QL`+$#4F%I<V5%>&-E<'1I;VX``',"1V5T4WES
+M=&5M26YF;P#O!%9I<G1U86Q0<F]T96-T``#Q!%9I<G1U86Q1=65R>0``/0-,
+M;V%D3&EB<F%R>45X00``!`-)<U!R;V-E<W-O<D9E871U<F50<F5S96YT```#
+M27-$96)U9V=E<E!R97-E;G0`TP15;FAA;F1L961%>&-E<'1I;VY&:6QT97(`
+M`*4$4V5T56YH86YD;&5D17AC97!T:6]N1FEL=&5R`&,"1V5T4W1A<G1U<$EN
+M9F]7`*<#475E<GE097)F;W)M86YC94-O=6YT97(`Q0%'971#=7)R96YT5&AR
+M96%D260``'D"1V5T4WES=&5M5&EM94%S1FEL951I;64`YP));FET:6%L:7IE
+M4TQI<W1(96%D`,`$5&5R;6EN871E4')O8V5S<P``&`12=&Q5;G=I;F0`Z@!%
+M;F-O9&50;VEN=&5R`.,"26YI=&EA;&EZ94-R:71I8V%L4V5C=&EO;D%N9%-P
+M:6Y#;W5N=`#%!%1L<T%L;&]C``#'!%1L<T=E=%9A;'5E`,@$5&QS4V5T5F%L
+M=64`Q@14;'-&<F5E`#X#3&]A9$QI8G)A<GE%>%<``*@#475E<GE097)F;W)M
+M86YC949R97%U96YC>0`7`D=E=$UO9'5L94AA;F1L945X5P``$P)'971-;V1U
+M;&5&:6QE3F%M94$``&@!1V5T04-0``#/`DAE87!&<F5E``#+`DAE87!!;&QO
+M8P#2`DAE87!294%L;&]C`&D"1V5T4W1R:6YG5'EP95<``"T#3$--87!3=')I
+M;F=7```S`49I;F1&:7)S=$9I;&5%>$$``$,!1FEN9$YE>'1&:6QE00`*`TES
+M5F%L:61#;V1E4&%G90`W`D=E=$]%34-0``"&`4=E=$-O;6UA;F1,:6YE00#:
+M`4=E=$5N=FER;VYM96YT4W1R:6YG<U<``&$!1G)E945N=FER;VYM96YT4W1R
+M:6YG<U<`2@)'9710<F]C97-S2&5A<```AP139713=&1(86YD;&4``-0"2&5A
+M<%-I>F4``)H!1V5T0V]N<V]L94-0``"L`4=E=$-O;G-O;&5-;V1E``!G!%-E
+M=$9I;&50;VEN=&5R17@``,H`1&5C;V1E4&]I;G1E<@``````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````W0Z)%W:3/T/'T#*PBI%^)70?BJFA+!+ARLB`%0#R
+MRD______`````#4```"':%>M`0```#D```!^Y=<\`@```'@````_B6DW`P``
+M`!T```!]!P8.!@```)4```#(72P<!````-@````!YX6\!0````0$!@8```<'
+M!`0```0$``!4.T,`'P```!P````?````'@```!\````>````'P```!\````>
+M````'P```!X````?``````$"`P0%!@<("@P.$!08'"`H,#A`4&!P@*#`X```
+M`````````0$!`0("`@(#`P,#!`0$!`4%!04`````!`````(````"`````@``
+M``(````"`````@````(````"`````@````(````"`````@````(````"````
+M`@````X`````````#``````$"!`@0(#``@(#!`4&!@8`````X$ZV*&0```"X
+M1D,`/6;WPF4```#,1D,`"$D8YF8```#@1D,`I+G"7F<```#P1D,`D@:5CF@`
+M````1T,`,61B6&D````81T,`,7X*&6H````L1T,`"98Z?FX```!$1T,`6,VT
+M3F\```!<1T,`OS>5`'````!L1T,`0GT137$```"$1T,`V#`>?'(```"81T,`
+M6`8D8G@```"L1T,`+WM/9'D```#`1T,`Z2]#97H```#41T,`R(GOK'L```#H
+M1T,`C*;B7'P```#\1T,`>["%#8,````82$,`2D2H:(0````L2$,`L.22_(4`
+M```\2$,`@ZZ"PH8```!02$,`@JSNC8P```!D2$,`[C:ZO8T```!X2$,`\,-U
+M/XX```",2$,`+$`GL8\```"D2$,`$8>6*)````"\2$,`I+I*9I8```#(2$,`
+M2[@9^)<```#42$,`'VK/2Y@```#D2$,`8KBO#YD```#P2$,`C6I:H)H````$
+M24,`DHDBRJ`````424,`#39P>Z$````H24,`OF#T.Z(````X24,`@&J\3JH`
+M``!(24,`#NP:4*L```!824,`X+E!OZP```!H24,`IJ?26:T```!X24,`(:)!
+MY:X```"(24,`[LV#$*\```"824,`_KG@M;````"H24,`8G`61+0```"X24,`
+MS*+":;D```#(24,`)O-)Z+H```#<24,`)IYV*[X```#T24,`K"1@@+\````(
+M2D,`ZS6Q[,,````@2D,`>IU=O<@````T2D,`7:^1R\D```!(2D,`&B^NILH`
+M``!<2D,`2)#K5](```!T2D,`F8#4WMP```"$2D,`P[TON=T```"<2D,`0'CZ
+MN-X```"T2D,`AXS7&N$```#(2D,`.)0-[.8```#82D,`7GR0H.<```#D2D,`
+MA4"07?````#T2D,``S&LEO$````(2T,`,=)X-``````82T,`!"[:CP`````H
+M2T,`.!&.A64````\2T,`BJ[`W6<```!82T,`_2+C9&L```!P2T,`WU-^!P$`
+M``"02T,`2OU`X`(```"@2T,`Y<P\60````"T2T,`]655$`````#,2T,`?Z6=
+M27(```#D2T,``:&_/7,````(3$,`/28!.'0````L3$,`),NF#FP```!,3$,`
+MH$)F@&\```!H3$,`TV&4NVX```"$3$,`U0M_EVT```"D3$,`&,4B0'````#`
+M3$,`[_`?-'$```#@3$,`F7R;AP``````34,`G7!!5@`````034,`\E(&+@$`
+M```D34,`H>'*V0(````T34,`#6\H=64```!(34,`&UFW+F<```!D34,`(HM=
+MPP````!\34,`K,_@-P````"034,`]02GQ&4```"H34,`^`;N"@$```#(34,`
+MG!IF=P(```#<34,`-0>8/P````#T34,`[O.U-@`````(3D,`ZLG8!0$````<
+M3D,`X4BS]0(````P3D,`6`>%=`````!(3D,`B^(<O@````!<3D,`+O$^"64`
+M``!P3D,`+('73F<```"03D,`[,!;&6@```"L3D,`5^\P.P$```#,3D,`2Q`X
+MB@(```#@3D,`8P```/A.0P#H`P`````````````#````2#A#````````````
+M(%%#`#!10P`\44,`2%%#`%110P!D44,`>%%#`(110P"844,`J%%#`+Q10P#0
+M44,`Y%%#`/110P#_____````````````````=9@``+$9OT1.YD"[``````$`
+M```!``````````````#_____````````````````(`63&0``````````````
+M``(````,````"````/____\````````````````!(```````````````````
+M``````````````````````````````````````````````````````(@```!
+M````````````````````````````````````````````````````````````
+M`````````B````(`````````````````````````````````````````````
+M``````"0:4,``0`````````!```````````````!````````````````````
+M```````````8Z$,`````````````````&.A#`````````````````!CH0P``
+M```````````````8Z$,`````````````````&.A#````````````````````
+M````````4.U#````````````$&Q#`)!M0P`@94,`````````````````````
+M````````````6.=#`"#K0P!#````BF9#``$"!`@`````I`,``&"">8(A````
+M`````*;?````````H:4```````"!G^#\`````$!^@/P`````J`,``,&CVJ,@
+M``````````````````````````````"!_@```````$#^````````M0,``,&C
+MVJ,@``````````````````````````````"!_@```````$'^````````M@,`
+M`,^BY*(:`.6BZ*);``````````````````````"!_@```````$!^H?X`````
+M404``%':7MH@`%_::MHR``````````````````````"!T]C>X/D``#%^@?X`
+M````````````````````````````````````````````````````````````
+M````````````````````````````````$!`0$!`0$!`0$!`0$!`0$!`0$!`0
+M$!`0$!`````````@("`@("`@("`@("`@("`@("`@("`@("`@(```````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````!A8F-D969G:&EJ:VQM;F]P<7)S='5V=WAY>@``
+M`````$%"0T1%1D=(24I+3$U.3U!14E-455976%E:````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````!`0$!`0$!`0$!`0$!`0$!`0
+M$!`0$!`0$!`0````````("`@("`@("`@("`@("`@("`@("`@("`@("``````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````!A8F-D969G:&EJ:VQM;F]P<7)S='5V=WAY>@``````
+M`$%"0T1%1D=(24I+3$U.3U!14E-455976%E:````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````@ZT,`+@```"X`````
+M````1.U#``071@`$%T8`!!=&``071@`$%T8`!!=&``071@`$%T8`!!=&`']_
+M?W]_?W]_2.U#``@71@`(%T8`"!=&``@71@`(%T8`"!=&``@71@#^____````
+M`````````````0```````````````````/[___\````````````````$54,`
+M`````"X_05<T4D%27T58251`0``$54,``````"X_059E>&-E<'1I;VY`<W1D
+M0$``!%5#```````N/T%68F%D7V%L;&]C0'-T9$!```150P``````+C]!5G1Y
+M<&5?:6YF;T!```150P``````+C]!5F)A9%]A<G)A>5]N97=?;&5N9W1H0'-T
+M9$!````$54,``````"X_059B861?97AC97!T:6]N0'-T9$!`````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````";>00!8WD$`$MY!`!S>00!BWD$`,-Y!`#K>00!$
+MWD$`@-Y!`';>00!LWD$`3MY!``````#!Y$$``````.W=00#WW4$`TMU!````
+M``"6W4$`H-U!`*K=00",W4$`OMU!`,C=00""W4$`9]U!`+3=00``````N=Y!
+M`.'>00#7WD$`S=Y!`,/>00"*WD$`K]Y!`*7>00``````IN1!``````#'W$$`
+MT=Q!`-O<00#EW$$`[]Q!`/G<00`#W4$`O=Q!`!?=00`AW4$`*]U!`#7=00`_
+MW4$`2=U!`%/=00!=W4$`L]Q!`*G<00"?W$$`E=Q!`(O<00"!W$$`=]Q!`&W<
+M00!CW$$`6=Q!`$_<00!%W$$`.]Q!`#'<00`GW$$`'=Q!`!/<00`)W$$`_]M!
+M`/7;00#KVT$`X=M!`-?;00#-VT$`P]M!`+G;00"OVT$`I=M!`)O;00"1VT$`
+MA]M!`'W;00!SVT$`:=M!``W=00!.VT$``````"3?00`&WT$`Z]Y!`!K?00`0
+MWT$`````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`0`%`+`%`(!```"``P```&```(`%````J```@`8```#H``"`#@```$@!`(`8
+M````8`$`@````````````````````@!E````>`$`@&8```"0`0"`````````
+M```````````'``$```"H`0"``@```,`!`(`#````V`$`@`0```#P`0"`!0``
+M``@"`(`&````(`(`@`<````X`@"`````````````````!@```"P&`(!0`@"`
+M_`4`@&@"`(`6!@"`@`(`@.@%`("8`@"`R@4`@+`"`("X!0"`R`(`@```````
+M````````````"@`'````X`(`@`@```#X`@"`"0```!`#`(`*````*`,`@`L`
+M``!``P"`#````%@#`(`-````<`,`@`X```"(`P"`#P```*`#`(`0````N`,`
+M@````````````````````0!D````T`,`@````````````````````0`!````
+MZ`,`@````````````````````0`)!`````0``````````````````````0`)
+M!```$`0``````````````````````0`)!```(`0`````````````````````
+M`0`)!```,`0``````````````````````0`)!```0`0`````````````````
+M`````0`)!```4`0``````````````````````0`)!```8`0`````````````
+M`````````0`)!```<`0``````````````````````0`)!```@`0`````````
+M`````````````0`)!```D`0``````````````````````0`)!```H`0`````
+M`````````````````0`)!```L`0``````````````````````0`)!```P`0`
+M`````````````````````0`)!```T`0``````````````````````0`)!```
+MX`0``````````````````````0`)!```\`0``````````````````````0`)
+M!`````4``````````````````````0`)!```$`4`````````````````````
+M`0`)!```(`4``````````````````````0`)!```,`4`````````````````
+M`````0`)!```0`4``````````````````````0`)!```4`4`````````````
+M`````````0`)!```8`4``````````````````````0`)!```<`4`````````
+M`````````````0`)!```@`4``````````````````````0`)!```D`4`````
+M`````````````````0`)!```H`4``%`V!@!%"P````````````"8008`J14`
+M````````````2%<&`&@%`````````````+!<!@"H"`````````````!8908`
+MJ`X``````````````'0&`&@$`````````````&AX!@"H$``````````````0
+MB08`J"4`````````````N*X&`'$]`````````````(CU!@"&`@``````````
+M``!8\P8`.@$`````````````F/0&`.P``````````````"CR!@`N`0``````
+M``````#P[@8`.`,`````````````F.P&`%("`````````````&C_!@#B`0``
+M``````````!0`0<`S`$`````````````(`,'`+@!`````````````-@$!P!&
+M`0`````````````@!@<`1@0`````````````:`H'`&8!`````````````-`+
+M!P!2`0`````````````H#0<`"@$`````````````.`X'`+P`````````````
+M`/@.!P#6```````````````P[`8`:```````````````$/@&`%,'````````
+M``````,`4`!.`$<`"`!3`%0`00!2`%0`1`!,`$<`#@!2`$4`4`!,`$$`0P!%
+M`$8`20!,`$4`1`!,`$<`"0!2`$4`3@!!`$T`10!$`$P`1P`,`$<`10!4`%``
+M00!3`%,`5P!/`%(`1``Q``H`3`!)`$,`10!.`%,`10!$`$P`1P`*`$$`4P!+
+M`$X`10!8`%0`5@!/`$P```````````````````")4$Y'#0H:"@````U)2$12
+M````70```2X(`@```&/2B4\````$9T%-00``L8\+_&$%````(&-(4DT``'HF
+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
+M?DWHK/^?$DEM\J_E;'U)8HSHRQT<VE(,`T1?ZZGA(EPH0(='BFFXD'I',OXK
+M,G`AQ8Z.EG9UP864\UZ1Z8(+*2<O/#1TPX64.Y4M-?7`A923P\B]<AC)0)!B
+M9W(.7"A`<"&X$%P(+@07@@L17`@N%!:7G$.D&%PH&)<2D6)P(;@07`@N!!>"
+M"Q%<""X$%X(+P87@0@07@@O!A>!"<"&X$,&%X$)P(;@07`@N1'`AN!!<""X$
+M%X(+$5P(+@07@@O!A6++)5LB4@PN!!>""\&%X$)P(8(+P87@0G`AN!!<B.!"
+M<"&X$%P(+@07(K@07`@N!!>""\&%""X4H/\#9IGG&MFY;-<`````245.1*Y"
+M8((`````````*````!`````@`````0`(`````````0``$@L``!(+`````0``
+M``$````````D-)L`)S6:`"DZF@`W)\H`.BG2`#LIU@`\*MH`/BO>`"U!FP`S
+M2K<`,TNX`#)-N@`S3KL`,U&_`#-3OP`Z5;D`,UC%`#9ESP`\;LT`-F;0`#9F
+MT0`U:M0`-FO4`#5OV``U;]H`,W3>`#1RW``T=]\`-7C?`#]UV0`S=^$`,WCA
+M`#=XX``W>N``-WSD`#E^Y0!)-;H`5#S@`%8]Y0!90.L`0';;`%ERS`!I3,<`
+M>5?F`'M9Z0!!D"H`2K$P`$NT,0!;ICL`4[,J`%:Y*P!7O"P`4KTV`&F]1`!9
+MP"T`7<4P`%;2-P!:W#H`6]\[`%SB.P!=Y3L`:\%%`&C%1``VG=8`(X;S`#J`
+MYP`Z@.@`.H'J`#N!Z@`[@NH`/(/K`#Z%[0`_ANX`(;+-`#[C]0`Z\ND`2(';
+M`$**\@!$CO4`4H7A`%>1Z`!^I-@`:Z/N`&ND[@!BI/X`8Z;_`%[NZ@#$738`
+MX5XJ`.MB+`#O8RT`ZW0^`/1E+@#X92X`\'<_`/EX/P#-?DT`@U_P`.2'-P#K
+MBSD`[XXZ`/20.P#XDSP`ZY!8`/"36@#YD58`JXGC`+./[0"VD?``N)/S`+F4
+M]0"DQ^0`L]_\`+3Q_P"[\?\`O?/_`,GU_P``````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````!/3DE(1D0!441&1TE.3P``244C
+M(!H;`DT;&A\C0TD``$(=&1<5$@,3$A06&!PD```B$0\-"PH)$`H+#`X1(0!P
+M*5565E965E965E9651YP4E!S='1T='1T='1T='-04BI4<G)R<G)R<G)R<G)R
+M4RH`<75U=75U=75U=75U=7$````Y,#XR65]I8P0G+6L`````.B\V,UI<:&0%
+M)BQL`````#LN,31;6&%E!B4K;0`````\2DPW74!79@=!2VX`````/34_.%Y@
+M:F<(*&)O````````````````````````__\``/__``"``0``@`$``(`!``"`
+M`0``````````````````@`$``,`#``#``P``P`,``,`#``#``P``__\``"@`
+M```@````0`````$`"`````````0``!(+```2"P````$````!````````/Q$/
+M``H&0P`-"%,`#@A;`!D-7``0"60`$`EH`!L.;``=#G4`'0]\`!95!@`:9@<`
+M'7((`!]Y"``K:PL`*W,,`"Y^#``S?`T`3Q@3`%@:%0!9)R$`81P8`&4J)0!M
+M+"8`<RXG`'HS*P`>#X$`'Q"%`!$\NP`B$(P`)Q66`"L6J``N&+4`,!JN`"XA
+MA0`['\<`/B'0`"%=E0`K1J,`.5*J`!)<W``N:]@`-&[9`$0EV0!5+=X`0R3@
+M`%@M\0!?,?<`8C[$`$1<KP!%9K<`16>[`$AGOP!M6*H`2VO!`$MKQP!.>]<`
+M6WC*`%%\U@!N1MX`<DGF`'A,]0`O@PP`-(,-`#.+#0`XCPX`,(8;`#:;#@`Y
+ME0X`.ID1`#FC#P`\J1``/[01`$FL%0!)N!,`4;X5`%R>3@!HGE$`;;-2`$O%
+M%@!3RQ8`7\8H`%OA&@!MS%(`<L94`'GE5``:I_8`(X#,`"NZ]P`CP=0`(=7_
+M`"3W_P`PX/\`.?[_`&.`O0!/@MP`4(7?`%F#U@!9AML`7(K>`%2*XP!=C^(`
+M59#I`%R0Y`!<ENP`7IGN`%>>_@!9E_$`7IST`%N>^P!<H/L`:(?#`&F(S0!C
+MB]4`<9/,`&V:X@!@G?4`?J38`&.F_P!YJ?$`>K'U`%CN_P!0\O\`A#8M`(HW
+M+P"7/#0`G$,Y`*=%/`"+7%D`E6->`*U21P"V2T(`NU%&`+I:3`"D:64`N7%K
+M`,%/10##6DT`Q5Y1`,YH60#49%<`UFQ<`,A[<P#B:UL`B&#U`)1WY@">?_4`
+MTX%X`(Z)O0"-A<H`FHWI`(JMU@"-MML`I(3]`*V7_`"XJ/T`JLGF`*?@_@"]
+MZ?X`M/'_`+WS_P#,P/\`P_3_`,GU_P``````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````*BHK*RLK*RLK
+M*RLK)V8K*RLK*RLK*RLJ*RH```````!K:VMO;F]N;G=N;VXG>6YO;V]N;V]N
+M;FYK:P```````&MK;V]O;V]W=7=N=RAY=V]O;W=O;VYN;FYK````````;FYN
+M;6UM;75U=75U*'AU=6UU=75U=6YN;FX```````!N;75J=75J:FEI:6DR>&EJ
+M:6IJ:FIJ:FUN;@```````&UJ:6EH:&AH:69F9C)T9F9F:&AF:&9G:6QM````
+M````;&=H9&-C8G)R8F)B,G)B8F)D<F)B8F5E9VD```````!G93@X-S4U-34U
+M-34S.C4U-#4U-30W.#AE9P```)UV<V5@-#0T,S0T-#0T-#,U-#0T-#0T-#0U
+M-SEA<W:=`)A?86)W=W=W;W=W=W=W=W=W=W=W=W=W=W=W8F%PF```F5]@9J2D
+MI*2DI*2DI*2DI*2DI*2DI*2DI*-D8%^9``!V<&!YHZ.CHZ.CHZ.CHZ.CHZ.C
+MHZ.CHZ.CHWDY7W8```!P.9ZAH:&AH:&AH:&AH:&AH:&AH:&AH:&AGCMQ````
+M`#IHH*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@9CH``````'F@H*"@H*"@H*"@
+MH*"@H*"@H*"@H*"@H*!Y````````GZ2DI*2DI*2DI*2DI*2DI*2DI*2DI*2D
+MI)\`````````$A(//T1)00L!$QE]@(J#&@(%"A\D+3$V``````````!*01`1
+M1$M$"Q,5&7R`BH9_`P@*("0M/)(``````````$I!$$!$4$<,$Q<9?8"-AG\$
+M"!L@)"T]D@``````````2D(20$A01PP4%QE^@(N*@P0('"`E+SV2````````
+M``!+1A)!2%%)#!07&GZ)C8R$!`D>("XP/I,``````````$Q$/T5)44D-%!E\
+M?H60C84&"A\A+C`^F@``````````3$`/$$%*10X6%1<:@(N+B0<%"!\D,#Z:
+M``````````!,6E=<7%Y<#A0F6%E=>WJ%!QTI5UM>>IH``````````%)*1DI0
+M4U!#&!I\?X6.C(8C(Q\B+#Z1FP``````````54].3U165$V!@8*'B)2/B)65
+MEI:7FYRB````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````/_______________^````?@```'X```!^````?@
+M```'X```!^````?@```'`````(````&````!@````<````/````#X```!^``
+M``?P```/\```#_````_P```/\```#_````_P```/\```#_````_P```/____
+M____________*````#````!@`````0`(````````"0``$@L``!(+`````0``
+M``$````````0/@4`#0=8`!4+9P`9#7D`(!!T`!)%!@`65`8`&5X'`!IC!P`E
+M7@H`)V<*`"QT#``M?0P`,GD.`#A[*`!0%A(`8QP7`&P?&0!G+"4`="TF`'<R
+M*@!\-"P`%0N*`!D-AP`9#)<`'`ZH`!T.M``?$+\`(!&!`",1EP`D$J<`+1:K
+M`"43NP`I%;0`,QFU`#\OO@`I%,<`*A71`#H<R0`Y'-D`-1OB`#8EPP`>9)H`
+M,TZH`#=JBP`:2]\`#T[W`!17_P`68_\`*W#0`#1OV0!-+J\`0!_X`$LER@!'
+M(]<`1"'K`$HE^0!7*_``5RWZ`&TVY@!C-/\`>CW\`$UCJ@!*:K8`4VRT`%=U
+MN0!A?KP`3G/"`$Y^V0!3;,@`47;$`%5YQ@!6>\@`6G[+`%1]TP!M9M``=&O<
+M`'5H[``N@@P`,XP.`#B'#@`TE`X`.Y,/`#F=#P`[EA$`.:4/`#NH$``_M1``
+M0)X1`$2E$0!'JA8`2+@3`%*]%@!@ET\`:[!1`$C#$P!4R!<`4=(9`&#'*P!Q
+MT%(`.X>T`!JPVP`:I_\`+I#9`"*YV@`LKOP`',WZ`![D_P`KR<P`+,;_`"/1
+MZ0`^R_\`-];_`";H_@`I]?\`-NGX`%Z"S0!3A=T`7(/4`%F)W0!7C>,`7)/G
+M`%:?_P!<HO\`9H;'`&R-R`!AAM(`:8S4`&V5W@!RE,T`=YO+`&.1X@!HF><`
+M:YWJ`&2>\0!QF^(`;Z+N`&>B]`!CIO\`:Z3T`&FF^P!KJ?T`=:3K`'BF[0!Y
+MJ>\`<Z?R`'6I]`!TK?H`>:ST`'BN^0!^NOH`1MS_`%G;_P!,Y/\`:<SX`((U
+M+`"*-BT`ACPU`)@X+P"3/30`FCPS`*0],P"-1CT`F4,Y`*A".`"V1SP`DUE7
+M`)EA70"F34$`JU)%`+9+0`"]3D(`N%9)`+M>50"C96$`MVUH`,9.1`#&6$L`
+MRUY0`-5?40#*958`U&56`-AG5P#*>7$`AD+_`(QO_P"9?O\`B:W7`)*]W@")
+ML>T`B+KX`)K`WP"KRN8`I^7_`*[P_P"QY_\`L_'_`+OR_P#![?\`P_3_`,CU
+M_P``````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````#(S,S,S,S,S,S,S,S,S,S,S,RQY,S,S,S,S,S,S
+M,S,S,S,S,S,S`````````````'M\?'Q\?'Q\?'Q\?'Q\BWQ\>RR_?'R+?'Q\
+M?'Q\?'Q\?'Q\?'M[`````````````'Q\?(N+BXN+BXN+BXN+BXN+BRR_BXN+
+MBXN+BXN+BXN+BXM\?'Q\`````````````'R+BXN.CHZ.CHZ.CHZ.CHZ.C2R_
+MCHZ.BXZ.C8Z.CHZ.BXZ+BWQ\`````````````(N+CHZ.E)24E(Z4CI24E)24
+ME$"_EI24E)24E)24E)24E)2.CHN+`````````````(N.CI26E)26E):6E):6
+ME):4ED&_E9:4EI:4EI24E)26E)24E(Z+`````````````(V4E)26EI:6OY65
+MEI65E9:5E4&_E965E965E965EI65EI:4E(Z.`````````````(V.DY.5E965
+MD9&1D9&1D9&1D4*^D9&1D9&1D9&1D;Z5E963DXR-`````````````(V,DY*1
+MD)"0D)"0CX^/CXB/CT*^CX^/CX^/CX^/D)"1D(^2DHR*`````````````(J,
+MCX:&B(B(@8&!@8&!@8&!B$*(@8&!A(&!@8&!@8B(B(B&B8J*````````````
+M`(J'A7>`=75U=75U=75U=75U=4*`=75U=75U=75U?7]_?W=_A8>*``````#!
+MO(*"@GJ%@75U=75U1W5U1W5U1TAU=4!]275(24E)24E)2DI*2G5*>H1Z@H*"
+MO,$`O7Y^?GIZ>$EU=4AU=4=`1T='0D1`1T!(1T=`0D1$1T1$1T=(2$E)=WEZ
+M?GY^O```O7Y]?7IX=WQ\BWQ\?'Q\BWR+BWQ\BWR+?(N+BWQ\BXN+BXN+BXN+
+M=WAY?7U^P```O8-#0GEV@<G)R<G)R<G)R<G)R<G)R<G)R<G)R<G)R<G)R<G)
+MR<G)@'9V0T.#O0```+Q"0G9+O\G(R,G(R<C)R<C)R,G(R<C)R,G(R<C(R<G(
+MR,G)R,G(OTMV0D*\`````+Q#079+Q,C&R,;(R,C&R,C(R,C(R<;(R,C&R,;(
+MR,;(R,C(R,;(Q$M%04.\``````!]/T6$QL;&R,;(QL;&QL;&QL;&QL;&QL;&
+MR,;(QL;&R,;&QL;&QH%%/WT```````"`/T67QL;%QL;&QL;&QL;&QL;&QL;&
+MQL;&QL;&QL7&QL;&QL;&QKY%/X``````````07;"P\;%QL7%Q<7%Q<7%Q<;#
+MQ<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<)V0```````````1H7#P\/%Q</%Q<7%Q<7%
+MP\/%Q</%P\7%Q</#Q<7%Q<7%P\7%Q<6%1@``````````1I?#P\/#P\/#P\/#
+MP\/#P\/#P\/#P\/#P\/#P\/#P\/#P\/%Q,.;1@```````````,?)R<G)R<C)
+MR<G)R<G)QLG)R<G)R<G)R<G)R<G)R<G)R<G)Q\G'```````````````.#`L*
+M"PU05%(-"080$!,4G*&EJ:FCGA8"`P0$&!D?(B,@-#0```````````````!1
+M40T+"0U05E13#`$0$Q45G9^EJZJJHYP"!!@7%QD?(R,V-C0`````````````
+M``!:40T+"T]25UI3#`80$Q:<G:*FK*VJJ:0#!!D8%Q\B(2<G-SP`````````
+M``````!;64\,#$]66%=6#0<1$YR=GZ6FLK.MJJ0$'1X9&1HA)R@W-SP`````
+M``````````!=65$,#5)66%Q:4`<1%9Z?HJ:QM+6SK:4$%Q\9&1LE*#<X.CX`
+M``````````````!=65`-3U)76%Q<4`@2%J2?HJ:QMK:ULJL7'A\:&APE*#@Y
+M.SX```````````````!=65,-#5)68%Q<4@@2G*2@HJ:QM+:ULZL8'B(:&B$F
+M*3@Y.SX```````````````!=6E,-#5)78%U<4P@2%J2?HJ:QM+>WLZ88'QL;
+M&B$F*#@Y/3X```````````````!=6E-/#5)78&!<4P@2%J2?HJ:QM[>VL[$7
+M'R(;&B4F*3D[/3X```````````````!A60L*"@L,4U13#`D2$Q45G*&FL;*M
+MI;$8`P0#`P4>(R<W.KD```````````````!=:69F;G)S;')R;`D2*S)H:FYQ
+M='&8<*P7+S`O+S%G9V=N=+D```````````````!A;6UI;W-S<W1T;0D2+65H
+M:IB:FIF;FZT9+C$Q,6=K:FYQFKD```````````````!A75104%1<8F%@50D3
+MG:2EI:RRM[>WM:87(!P<'"8I-3D[/KD```````````````!C8UM24U9@86%A
+M6P^>HZ.@I::RM[>XM:XD-BHA(28U.3L]N;D```````````````!?7U]>7U]D
+M9&1D7UZGJ*^OK["XN+BXN*]-34U,3$U.3KJZOKL`````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``#_______\``/_______P``________``#_______\``/_______P``____
+M____``#X`````!\``/@`````'P``^``````?``#X`````!\``/@`````'P``
+M^``````?``#X`````!\``/@`````'P``^``````?``#X`````!\``/@`````
+M'P````````````"```````$``(```````0``@``````!``#```````,``,``
+M`````P``X``````'``#@``````<``/``````#P``\``````/``#P``````\`
+M`/@`````'P``_``````_``#\`````#\``/P`````/P``_``````_``#\````
+M`#\``/P`````/P``_``````_``#\`````#\``/P`````/P``_``````_``#\
+M`````#\``/P`````/P``_``````_``#\`````#\``/P`````/P``________
+M``#_______\``/_______P``________```H````$````"`````!`"``````
+M```$```2"P``$@L`````````````````````````````````````````````
+M```````````````````````````````````````````````````````````$
+M!1P"`0`$*@```$````!`````0````$````!`````0````$````!`````0```
+M`$`!``0J`P4<`@``````````1([U_T**\O\_AN[_/H7M_SN"ZO\Z@>K_)#2;
+M_U>1Z/\Z@>K_.X+J_SR#Z_\_AN[_0HKR_T2.]?\``````````#^&[O\[@>K_
+M-WSD_S-XX?\S=-[_-'+<_R<UFO](@=O_-'+<_S-TWO\S=^'_-WSD_SJ`Z/\_
+MAN[_```````````Z@.?_-7C?_S5OVO\V:]3_-F;1_S9ES_\I.IK_/&[-_S9E
+MS_\V9M#_-6K4_S5OV/\T=]__.7[E_P``````````-WK@_S-8Q?\S4[__,TZ[
+M_S-+N/\S2K?_+4&;_SI5N?\S2K?_,TNX_S)-NO\S4;__,UC%_S=XX/\`````
+MI,?D_T!VV_]BI/[_8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]C
+MIO__8Z;__V*D_O\_==G_I,?D_WZDV/]2A>'_N_'__[WS__^]\___O?/__[WS
+M__^]\___O?/__[WS__^]\___O?/__[WS__^[\?__4H7A_WZDV/]9<LR5:Z3N
+M_[3Q__^T\?__M/'__[3Q__^T\?__M/'__[3Q__^T\?__M/'__[3Q__^T\?__
+MM/'__VNC[O]9<LR6*S=Z!;/?_/_)]?__R?7__\GU___)]?__R?7__\GU___)
+M]?__R?7__\GU___)]?__R?7__\GU__^SW_S_*S=Z!0````,````&5M(W_TNT
+M,?]KP47_4[,J_^%>*O_P=S__\)-:_^2'-_\W)\K_5CWE_WM9Z?^KB>/_````
+M!@````,````$````"%K<.O]*L3#_:;U$_U:Y*__K8BS_ZW0^_^N06/_KBSG_
+M.BG2_U0\X/]Y5^;_LX_M_P````@````$`````P````9;WSO_09`J_UNF._]7
+MO"S_[V,M_\1=-O_-?DW_[XXZ_SLIUO])-;K_:4S'_[:1\/\````&`````P``
+M``(````$7.([_R&RS?\Z\NG_6<`M__1E+O\VG=;_7N[J__20._\\*MK_(X;S
+M_S[C]?^XD_/_````!`````(````!`````EWE.]U2O3;W:,5$\EW%,-;X92[>
+M^7@_]_F15O+XDSS6/BO>WEE`Z_>#7_#RN93UU0````(````!````````````
+M````````````````````````````````````````````````````````````
+M`````````````/__``"``0``@`$``(`!``"``0``@`$`````````````````
+M`````````````````````````````````/__```H````(````$`````!`"``
+M```````0```2"P``$@L`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````(//P<"##0M`@PT,P(--RD"#3<H`@TW
+M*`(--R@"#3<H`@TW*`(--R@"#3<H`@TW*`(--R@"#3<H`@TW*`(--R@"#3<H
+M`@TW*`(--R@"#3<H`@TW*`(--R@"#38L`@PR-P(-.1L`````````````````
+M````````````````````+FO8_S!LV?\Q;=G_,F[9_S-NV?\T;]G_-&_9_S5O
+MV?\U;]G_-6_9_S5OV?\U;]G_*$.B_UV-XO\U;]G_-6_9_S5OV?\U;]G_-6_9
+M_S1OV?\T;]G_,V[9_S)NV?\Q;=G_,&S9_RYKV/\`````````````````````
+M``````````!5GO__5Y___U>>_?]8G_W_69_]_UN@_?];H/W_6Z']_UNA_?];
+MH?W_6Z']_UNA_?\N2:7_?+3]_UNA_?];H?W_6Z']_UNA_?];H?W_6Z#]_UN@
+M_?]9G_W_6)_]_U>>_?]7G___59[__P``````````````````````````````
+M`%>>_?]9GOW_6Z#\_UR?_/]=H/K_7:#Z_UV@^O]>H/K_7J#Z_UZ@^O]>H/K_
+M7J#Z_S5/J/]\L?K_7J#Z_UZ@^O]>H/K_7J#Z_UZ@^O]=H/K_7:#Z_UV@^O]<
+MG_S_6Y[\_UF>_?]7GOW_````````````````````````````````6Y[\_UN?
+M^O]=GOG_7I[X_UZ>]O]?G?7_7Y[U_V"=]?]@G?7_8)WU_V"=]?]@G?7_/%6K
+M_WNM]?]@G?7_8)WU_V"=]?]@G?7_8)WU_U^>]?]?G?7_7I[V_UV>^/]=GOG_
+M6Y_Z_UF>_/\```````````````````````````````!<GOG_7IWV_UZ;]/]?
+MF_'_7YKP_U^9[O]?F.[_7YGL_UZ7[/]>E^S_7I?L_UZ7[/]"6J[_=J7L_UZ7
+M[/]>E^S_7I?L_UZ7[/]?F>S_7YCN_U^9[O]>F.__7IGQ_UZ;]/]<G?;_6IWY
+M_P```````````````````````````````%R;]?]=F?'_6Y;M_UN4Z?];DN;_
+M7)#D_UV0X_]=D.+_78_B_UV/XO]=C^+_78_B_T5>K_]MFN+_78_B_UV/XO]=
+MC^+_78_B_UV0XO]=D.+_6Y#D_UJ1Y?]:D^G_6I7L_UJ8[_];FO7_````````
+M````````````````````````69?Q_UF3Z_]7C./_6(K>_UF'VO]9A-?_6H37
+M_UJ#UO]9@M;_68+5_UF"U?]9@M7_1&&P_V.+U?]9@M7_68+5_UF"U?]9@M;_
+M6H/6_UF#UO]8@]?_6879_UB'W?]6BN+_5Y#I_UB5[_\`````````````````
+M``````````````!5D>K_58OC_TUNRO],;,;_3&O#_TMKPO]+;,'_2VS`_TML
+MP/]+;,#_2VS`_TMLP/]"8;#_5'+#_TMLP/]+;,#_2VS`_TMLP/]+;,#_2VS!
+M_TMKP?]+:L/_2VO%_TMMR?]4B.'_5)#I_P```````````````*K)YLI]GM'_
+M<9/,_U&+Y?]0?]?_26C$_TAGO_]'9[W_1F>\_T5HN_]%:+K_16>Z_T5GNO]$
+M9[K_1&>Z_SY@L/]*;+S_1&>Z_T1GNO]$9[K_16>Z_T5GNO]%9[O_16>\_T9F
+MO/](9K[_26?#_T]\UO]0B.+_<9/,_WV>T?^JR>;)GL3A7XJMUO]IB,/_4(7?
+M_U)ZT_]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__
+M8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]C
+MIO__47?1_T^#W?]IB,/_BJW6_Y[$X5^3O-X)C;;;ZV.`O?]/@-O_7XO>_\CU
+M___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7_
+M_\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU__]>BM[_
+M37[8_V.`O?^-MMOKE<#>"0````!^I-B+9X;"_TQ[U_]\L/#_P_3__\/T___#
+M]/__P_3__\/T___#]/__P_3__\/T___#]/__P_3__\/T___#]/__P_3__\/T
+M___#]/__P_3__\/T___#]/__P_3__\/T___#]/__P_3__WRP\/],>=;_9X;"
+M_WZDV(H``````````&Z/TR)IB,W]3WS7_Z?@_O^]\___O?/__[WS__^]\___
+MO?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]
+M\___O?/__[WS__^]\___O?/__[WS__^]\___I^#^_U!\U_]IB,W];H_3(@``
+M`````````````%][SK5=CN/_MO'__[?R__^W\O__M_+__[?R__^W\O__M_+_
+M_[?R__^W\O__M_+__[?R__^W\O__M_+__[?R__^W\O__M_+__[?R__^W\O__
+MM_+__[?R__^W\O__M_+__[?R__^V\?__78WC_U][SK0`````````````````
+M```!4FK(2W6P\O^R\?__LO'__[+Q__^R\?__LO'__[+Q__^R\?__LO'__[+Q
+M__^R\?__LO'__[+Q__^R\?__LO'__[+Q__^R\?__LO'__[+Q__^R\?__LO'_
+M_[+Q__^R\?__LO'__[+Q__]UL/+_4FK(2P````$```````````````$9(4,&
+MO.C^_\KU___*]?__RO7__\KU___*]?__RO7__\KU___*]?__RO7__\KU___*
+M]?__RO7__\KU___*]?__RO7__\KU___*]?__RO7__\KU___*]?__RO7__\KU
+M___*]?__RO7__[WI_O\9(4,&`````0```````````````@````<````--7T.
+M_S![#/\J;`S_+H$,_S:=#O]%M1+_,8L-_Q1+!?\_$0__52(<_V\M)O^(-B__
+MJ44[_[]:3O^E44/_?C<P_PH&0_\7#%W_'0Y\_RD4G_\Z'\7_5"S<_V(^Q/]M
+M6*K_````#0````<````"```````````````#````"`````]'IA/_-XL-_RIP
+M"_\M?PO_-9H._T6W$O\VF@__&5X'_T\8$_]=)B#_;RTF_X<U+O^F0SO_P5M/
+M_[992O^=1#O_#0A3_QH-:O\=#WW_*!2=_SH?PO]6+=__;D;>_Y!TX/\````/
+M````"`````,```````````````,````'````#DBJ$_\XCP[_*W,,_R^$#/\X
+MH`[_1[T3_S>>$/\980?_4A@4_V$F(?]S+B?_C#@O_ZQ&/?_'75'_NEM-_Z%&
+M//\."%C_&@UL_QX/@?\I%:'_/"#(_U@NYO]P2.+_E'?F_P````X````'````
+M`P```````````````@````4````)2Z\4_SJ4#O\M=PS_,8D,_SJF#_]*Q13_
+M.J81_QIF!_]6&17_9"@B_W<P*/^1.C'_LTE`_]!B5?_#7U'_JTI`_PX(6_\;
+M#F__'Q"%_RL6J/\^(=#_6S#N_W1*ZO^9>^W_````"0````4````"````````
+M```````!`````P````5-M13_/9D/_RY\#?\SC@W_/*T0_T_-%/\]K1'_'&L(
+M_UL;%O]I*B/_?#(J_Y<\-/^[3$+_V&99_\UD5/^T34/_#PE?_QT.=?\B$(S_
+M+1>N_T`BV?]?,??_>$WS_YY_]?\````%`````P````$`````````````````
+M```!`````4ZZ%?\^GA#_,($-_S63#?\^LA#_4]05_S^V$O\=<`C_7AL7_VXK
+M)_^"-2S_G#XV_\%/1?_B:UO_U6A9_[M11/\0"63_'@]Z_R(1D?\N&+7_0R3@
+M_V,S_O]]3OK_HH+[_P````$````!````````````````````````````````
+M4;X5_S>"#?\I9@S_+6X*_S:%#/]'K!3_.)00_QUT"/]A'!C_52<A_V$L)_][
+M-B__GT8[_\A>3__$7D__P5)(_Q`):/\;#5O_'@]K_R@5D?\\'\W_6"S[_W-)
+M\?^EA?__``````````````````````````````````````````!3P1;_(\'4
+M_QS#[/\@\O__(?___S7___\J\___'WD(_V$<&/\A797_(X#,_RNZ]_\PX/__
+M4/+__U+=__^\4D?_$`EH_Q$\N_\27-S_&J?V_R'5__\\_/__6.[__Z:&_?\`
+M`````````````````````````````````````````%_&*/]-KQO_.I(3_SRE
+M$/]&P!3_6^$:_TS#&_\PAAO_;BTJ_W8U,/^#-R[_F$`V_[E01O_6;U__SFQ=
+M_[9:4?\Q*G[_+B&%_R<9DO\P&J[_2"?8_VP^]?^(8/7_KI;Z_P``````````
+M````````````````````````````````=<%4MF^T4]9HGE'N:[)0_7#+5/UY
+MY53N;<Q2UER>3K>)65>VC5];UI5C7NZD:67]O7%L_=.!>.[(>W/6M'!JMXZ+
+MO;:-A[W6BH3![H^&TOV:C>G]JY?][KBH_=;,P/^W````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````/__________X```#^````?@```'
+MX```!^````?@```'X```!^````?@```'````````````````@````8````'`
+M```#@````8````&````!@````8````&````!@````<````/P```/\```#_``
+M``_P```/________________*````#````!@`````0`@````````)```$@L`
+M`!(+````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````!&%P!`A=<"@(770D"
+M%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(7
+M7@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>
+M`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UX#`A=>`P(77@,"%UT)
+M`A=<"@$87`$`````````````````````````````````````````````````
+M`````P<C'`($%T,"!!5-`@4810(%&4("!1E"`@490@(%&4("!1E"`@490@(%
+M&4("!1E"`@490@(%&4("!1E"`@490@(%&4("!1E"`@490@(%&4("!1E"`@49
+M0@(%&4("!1E"`@490@(%&4("!1E"`@490@(%&4("!1E"`@490@(%&4("!1E"
+M`@4810($%4T"!!=$`P<C'0,*+P$`````````````````````````````````
+M````````````````````+FO8_S!LV?\Q;=G_,F[9_S-NV?\T;]G_-&_9_S5O
+MV?\U;]G_-6_9_S5OV?\U;]G_-6_9_S5OV?\U;]G_-6_9_S5OV?\U;]G_*$.B
+M_UV-XO\U;]G_-6_9_S5OV?\U;]G_-6_9_S5OV?\U;]G_-6_9_S5OV?\U;]G_
+M-6_9_S1OV?\T;]G_,V[9_S)NV?\Q;=G_,&S9_RYKV/\`````````````````
+M````````````````````````````````````59[__U>?__]9H/__6J#__UNA
+M__]<HO__7:+__UVB__]=HO__7:+__UVB__]=HO__7:+__UVB__]=HO__7:+_
+M_UVB__]=HO__+DJE_WZU__]=HO__7:+__UVB__]=HO__7:+__UVB__]=HO__
+M7:+__UVB__]=HO__7:+__UVB__]<HO__6Z'__UJ@__]9H/__5Y___U6>__\`
+M````````````````````````````````````````````````````6:#__URB
+M__]>H___8*3__V*E__]CIO__8Z;__V2F__]DIO__9*;__V2F__]DIO__9*;_
+M_V2F__]DIO__9*;__V2F__]DIO__-E*I_X2X__]DIO__9*;__V2F__]DIO__
+M9*;__V2F__]DIO__9*;__V2F__]DIO__9*;__V.F__]CIO__8J7__V"D__]>
+MH___7*+__UF@__\`````````````````````````````````````````````
+M````````7J/__V&E__]EI___9J?^_VBH_O]IJ?[_:ZG^_VNJ_O]KJO[_:JC^
+M_VJH_O]JJ/[_:JC^_VJH_O]JJ/[_:JC^_VJH_O]JJ/[_/EJN_XBY_O]JJ/[_
+M:JC^_VJH_O]JJ/[_:JC^_VJH_O]JJ/[_:JC^_VJH_O]JJ/[_:ZK^_VNI_O]I
+MJ?[_:*C^_V:G_O]EI___8:7__UZC__\`````````````````````````````
+M````````````````````````8J3]_V:G_O]KJ?[_;:K^_V^L_/]RK/S_<JS\
+M_W*M_/]RK?O_<JW[_W*M^_]RK?O_<JW[_W*M^_]RK?O_<JW[_W*M^_]RK?O_
+M1V.R_XV[^_]RK?O_<JW[_W*M^_]RK?O_<JW[_W*M^_]RK?O_<JW[_W*M^_]R
+MK?O_<JW\_W*L_/]RK/S_;ZS\_VVJ_/]IJ/[_9J?^_V*D_?\`````````````
+M````````````````````````````````````````9:;^_VNI_/]NJOS_<ZW[
+M_W6M^_]VKOK_>*[Z_W>N^O]WKOG_=Z[Y_W>M^?]WK?G_=ZWY_W>M^?]WK?G_
+M=ZWY_W>M^?]WK?G_3FRU_X^Z^?]WK?G_=ZWY_W>M^?]WK?G_=ZWY_W>M^?]W
+MK?G_=ZWY_W>N^?]WKOG_=Z[Z_WBN^O]VKOK_=:S[_W*L^_]NJOS_:Z?\_V6F
+M_O\`````````````````````````````````````````````````````:*;\
+M_VVI^_]RJ_K_=:WY_WBM^/]YKOC_>J[W_WJN]O]ZK?;_>JWV_WFM]/]YK?3_
+M>:WT_WFK]/]YJ_3_>:OT_WFK]/]YJ_3_5'&X_XZX]/]YJ_3_>:OT_WFK]/]Y
+MJ_3_>:OT_WFM]/]YK?3_>:WT_WFM]/]ZK?;_>JWV_WJM]_]YK??_>*WX_W6L
+M^?]RJOK_;:G[_VBF_/\`````````````````````````````````````````
+M````````````:J;[_V^I^/]SJO?_=JOU_WFK]/]ZJ_3_>ZSS_WNK\O]ZJO#_
+M>:GP_WFI\/]YJ>__>:GO_WFI[_]YJ>__>:GO_WFI[_]YJ>__5G2[_XRT[_]Y
+MJ>__>:GO_WFI[_]YJ>__>:GO_WFI[_]YJ>__>:GO_WFI\/]ZJO#_>JKR_WJK
+M\?]YJ_+_>*KS_W:J]?]SJ?;_;ZCX_VFF^?\`````````````````````````
+M````````````````````````````:*7X_VZG]O]RJ/3_=:CR_W>H\/]YJ.[_
+M>:?M_WBF[/]WI>O_=Z3K_W:DZO]VH^K_=J/J_W6CZO]UH^K_=:/J_W6CZO]U
+MH^K_5G:\_X:MZO]UH^K_=:/J_W6CZO]UH^K_=:/J_W:CZO]VH^K_=J/J_W:D
+MZO]WI>O_>*7L_WBF[?]WI^W_=J?O_W2G\?]RI_/_;:;U_VBC]_\`````````
+M````````````````````````````````````````````9Z+T_VRB\O]PI.__
+M;IWH_V^<YO]QG.3_<9KC_W&:X?]OF>#_;I??_VZ6W_]MEM[_;9;>_VV5WO]M
+ME=[_;97>_VV5WO]ME=[_57:\_WN?W_]ME=[_;97>_VV5WO]ME=[_;97>_VV5
+MWO]MEM[_;9;>_VZ7W_]OE^#_<)K@_W":XO]PF^/_;IOE_VV;Z/]OHN[_:J+Q
+M_V>A]/\`````````````````````````````````````````````````````
+M9)[R_VF?[_]KG>K_8(74_V*&T_]BA]+_8X;1_V&&T/]@A<__7X3._UZ#SO]>
+M@\W_7H/-_UZ#S?]>@\W_7H/-_UZ#S?]>@\W_472Z_VR-T/]>@\W_7H/-_UZ#
+MS?]>@\W_7H/-_UZ#S?]>@\W_7H/-_U^$SO]@A<[_88;/_V*&T?]AAM+_8(73
+M_U^$T_]IG.C_:)WL_V.>\/\``````````````````````````*O*YLM^G]+_
+M<I3-_W*4S?]RE,W_89KN_V.9ZO]CD.#_78#0_UV!S_]=@<W_7(',_UI_R_]9
+M?LK_5WW)_U=\R/]7?,C_5GO(_U9[R/]6>\C_5GO(_U9[R/]6>\C_3&^Y_V&#
+MRO]6>\C_5GO(_U9[R/]6>\C_5GO(_U9[R/]6>\C_5WS(_U=\R?]8?<G_6G_*
+M_UN`R_]<@,S_7(#._UM^S_]BCM__8I;I_UZ7[/]RE,W_<I3-_W*4S?]^G]+_
+MJ\KFRJ3'Y&"/L=G_;8[(_VV.R/]MCLC_6Y7J_U^3Y?]<A=?_5WK,_U=ZR?]6
+M>LC_57K&_U-XQ?]0=L3_3W7#_T]TPO].<\+_3G/"_TYSPO].<\+_3G/"_TYS
+MPO].<\+_1FJV_U=YQ/].<\+_3G/"_TYSPO].<\+_3G/"_TYSPO].<\+_3G3"
+M_T]TP_]0=<3_4G?%_U1YQO]5><?_5GG(_U9XRO];@M7_79#B_UF2Z/]MCLC_
+M;8[(_VV.R/^/L=G_I,?D7Z#%X@F:P-_L;(O$_VB&PO]HAL+_5H_F_UJ,X/]<
+M@];_8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F
+M__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;_
+M_V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__]CIO__8Z;__V.F__];@M3_
+M68G=_U2-Y/]HAL+_:(;"_VR+Q/^:P-_KHL7B"0````"2O=Z+=YO+_V%^O/]A
+M?KS_4XKB_U>&V_]EDN+_R?7__\GU___)]?__R?7__\GU___)]?__R?7__\GU
+M___)]?__R?7__\GU___)]?__R?7__\GU___)]?__R?7__\GU___)]?__R?7_
+M_\GU___)]?__R?7__\GU___)]?__R?7__\GU___)]?__R?7__\GU___)]?__
+MR?7__\GU__]DD>'_5H3:_U*'W_]A?KS_87Z\_W>;R_^2O=Z+``````````")
+ML=LC@JG5_5MVMO];=K;_487?_U-\T_^'N_7_Q?3__\7T___%]/__Q?3__\7T
+M___%]/__Q?3__\7T___%]/__Q?3__\7T___%]/__Q?3__\7T___%]/__Q?3_
+M_\7T___%]/__Q?3__\7T___%]/__Q?3__\7T___%]/__Q?3__\7T___%]/__
+MQ?3__\7T___%]/__Q?3__\7T__^'N_3_47K2_U"#W/];=K;_6W:V_X.IUOV)
+ML=LB````````````````?J38M6!]N_]4;;#_4(+<_U9_U?^QY___P?3__\'T
+M___!]/__P?3__\'T___!]/__P?3__\'T___!]/__P?3__\'T___!]/__P?3_
+M_\'T___!]/__P?3__\'T___!]/__P?3__\'T___!]/__P?3__\'T___!]/__
+MP?3__\'T___!]/__P?3__\'T___!]/__P?3__\'T__^QY___5GW4_TY_VO]4
+M;;#_8'V[_WZDV+4`````````````````````=);52FB(R/]-9*K_3G_:_V*2
+MX_^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/_
+M_[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___
+MO?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]\___O?/__[WS__^]
+M\___89'C_TY]V/]-9*K_:(C(_W26U4H`````````````````````<I+5`FJ*
+MT=U,8JK_3G[:_X*[]?^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y\O__N?+_
+M_[GR__^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y\O__
+MN?+__[GR__^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y\O__N?+__[GR__^Y
+M\O__N?+__[GR__^Y\O__@KOU_TU]V/],8JK_:HK1W'*3U0(`````````````
+M`````````````&!^SW12:[G_587>_Z?E__^U\O__M?+__[7R__^U\O__M?+_
+M_[7R__^U\O__M?+__[7R__^U\O__M?+__[7R__^U\O__M?+__[7R__^U\O__
+MM?+__[7R__^U\O__M?+__[7R__^U\O__M?+__[7R__^U\O__M?+__[7R__^U
+M\O__M?+__[7R__^U\O__M?+__[7R__^U\O__I^7__U2$W?]2:[G_8'[/=```
+M`````````````````````````````%MTS116;\CV8I?I_['Q__^Q\?__L?'_
+M_['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__
+ML?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q
+M\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__['Q__^Q\?__L?'__V*7
+MZ?]6;\CV6G3-%`````````````````````````````````````%0:,>@?KWW
+M_Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__
+MKO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N
+M\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P__^N\/__KO#__Z[P
+M__^N\/__KO#__WZ]]_]0:,>@`````0``````````````````````````````
+M``````)$5[8ZP>W__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__
+MR/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(
+M]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU___(]?__R/7__\CU
+M___(]?__R/7__\CU___(]?__R/7__\'M__]$5[8Z`````@``````````````
+M``````````````````````,````*````%#5[#O\L;0O_)F4*_R1>"O\D9PG_
+M*WP+_S&-#?\WG0__-Y`._S-]#O\D8`K_$#X%_T84$/]3(QW_9BLE_W0M)O^&
+M,2G_F3LR_ZA`./^N3D/_HDY!_X]'//^#/37_>S,J_PT'5O\7#&;_&0UW_Q0*
+M??\5"X;_'0V:_R,2J/\L%K+_,1BP_S0:JO\]'Z;_3R>F_P```!0````*````
+M`P````````````````````````````````````0````,````%CJ%#_\VA`W_
+M+7<,_R9E"_\E:@G_*WP+_S"-#?\XH0__/)L/_SJ0$/\J<`S_$4`%_TD5$?]@
+M*"+_=S(K_WTQ*?^),BK_FCHR_ZA!.?^T4$7_KU1%_Z921?^91SW_@C8L_PT'
+M6?\;#G;_'0Z+_Q8+B/\6#(K_'0V;_R,2J/\N%K?_-AJ__SX>R/]+)<K_5BNT
+M_P```!8````,````!`````````````````````````````````````0````+
+M````%4>C$_\YC0[_+WH-_RAJ"_\G;@G_+8(+_S.4#?\[J!#_/J$0_SR5$/\L
+M=@S_%$D&_U48%/]F*R3_>C0L_X(S*_^/-2S_H3TT_[!$._^[5$C_ME=)_ZM5
+M2/^A2T#_E3TR_Q`):/\=#GW_'@^/_Q<+C?\7#)#_'PZB_R42L/\O%[__.!O&
+M_S\?S?].*-?_:33=_P```!4````+````!```````````````````````````
+M``````````,````(````$$JJ%/\]E0__,H$-_RIQ#/\I=0K_+XD,_S6<#O\^
+MLA#_0JL1_T"?$O\O?PW_%5`&_UL9%?]M+B;_@C<O_XHW+O^8."__JD$W_[E+
+M/__&64S_P5Q-_[=:3/^L4$3_GT(V_Q$);_\?#X;_(!"8_Q@,E?\9#9G_(`^J
+M_R<3N?\R&<K_.QW2_T,AVO]2*N+_;3;F_P```!`````)`````P``````````
+M``````````````````````````(````%````"4ZR%?]`G1#_-8H._RUW#/\K
+M>PO_,9`-_SBD#_]"NA'_1K42_T2J$_\SB`[_%U<&_V,<%_]V,BG_C#LS_Y,Y
+M,?^@.S'_LD0Z_\-,0O_17E#_S6)2_\-A4O^Y5TK_K4<\_Q(*>?\A$9'_)!&C
+M_QH,G_\:#J'_(@^S_RD4P_\T&M7_/Q[?_T@CZ/]8+/#_<SGR_P````D````%
+M`````@````````````````````````````````````$````"````!%"X%?]"
+MHQ'_-X\/_RY\#?\M?PO_,Y0-_SJH#_]#OQ+_2+P3_T>Q%/\UCP__&%P'_V@>
+M&/]\-"S_D3XU_Y@[,?^E/3/_MT8\_\A.1/_78%+_U&95_\ME5?_#6TW_MDM`
+M_Q,+@/\C$9G_)!*K_QP-IO\;#J?_(Q"Y_RH5R/\V&]S_02#H_TLD\_]<+OG_
+M=SOY_P````0````"`````0``````````````````````````````````````
+M```!`````5*[%O]$I1'_.)$/_R]]#?\M?@O_,Y4-_SJI#_]$P1+_2;X3_TFT
+M%/\WDP__&5X'_VL?&?]_-BS_E#\V_YH\,_^F/3+_N$8\_\E.1/_97U'_UV=6
+M_\]G5__'74__O$U!_Q0+A?\D$I__)1.O_QP-K?\;#JK_(Q"[_RH5S?\W&^#_
+M0B#L_TTE^/]?,/[_>SW^_P````$````!````````````````````````````
+M`````````````````````````%*]%O]$IA'_.),/_R]_#?\M@`O_,Y4-_SJJ
+M$/]%PA+_2;\3_TFV%/\WE0__&5\'_VP?&?^!-BS_ED`V_YH],_^G/3/_N48\
+M_\I/1/_:8%'_V&A6_]%G5__*7E#_O4Y"_Q0+BO\D$J'_)A.R_QP-L/\<#JO_
+M)!&^_RL5T/\W'.+_0R'O_TXF^_]@,/__?#W__P``````````````````````
+M`````````````````````````````````````````%.^%O]$IQ'_.9,/_R^`
+M#?\M@0O_,Y8._SJK$/]%PA+_2L`3_TJV%/\WE@__&5\'_VP?&?^!-BS_ED`V
+M_YL]-/^G/C/_N4<\_\M/1?_:8E+_V6A6_])G5__+7E#_ODY"_Q4+B/\E$J/_
+M)A.T_QP.L?\<#ZW_)!'`_RL6TO\X'.3_1"'Q_T\F__]A,?__?3[__P``````
+M`````````````````````````````````````````````````````````%._
+M%O\[C0[_,'0-_REA"O\F7@G_*VD+_S%W#?\\D`__/9</_SZ7$/\O=0O_&E\'
+M_VT?&O]H+B;_>C<N_W@T+/]_-"W_F3TT_[)%//_(5$7_PU=+_[E82O^K447_
+MOT]#_Q4+BO\@$'3_(!&!_QD-9_\7#&#_'P]Y_R82E/\Q&;'_.QW&_T,AU?]4
+M*.__?S___P``````````````````````````````````````````````````
+M`````````````%2^%O\BN=K_'+#8_QFPW?\9QO+_'N3__R'Q__\A[O__)>3_
+M_RC@_/\>V/[_&F`'_VT>&O\>9)K_)7O!_R2&W?\FI?__+\G__S/;__\SV___
+M.M'__S_,__\]R?__P$]#_Q4+C?\02^C_$E'__PY)__\/5___%(#__Q6C__\9
+MH/__'ZK__R?%__\RYO__@D#__P``````````````````````````````````
+M`````````````````````````````%7!%O\SRL#_*,'*_R+#U_\CT>G_*.W_
+M_ROZ__\O]/__-NW[_SKG[_\MU\[_&F('_V\?&O\W:HO_.X>T_S>9U?\YL?7_
+M0=G__T?H__]0X?__6=O__V?3_O]JQ/'_P$]$_Q8,D_\:2]__&&'__Q5=__\3
+M9?__&Z[__Q[*__\FM?__+L/__SO0__]+WO__B$+__P``````````````````
+M`````````````````````````````````````````````%C%%_])LA/_/9X/
+M_S.)#O\PC`W_-Z$/_S^X$?]+SQ/_4,H5_T_!%O\[GQ#_&V8'_V\@&O^%."__
+MF$,X_YT^-/^I/S;_NTD]_\Q51__=9U?_VFM:_])K6__,8%+_O$Y!_Q8,E?\H
+M%;#_*A;"_Q\/O/\?$+__*1/2_S$8Y/]`'_C_3";__U4K__]J-?__B$/__P``
+M````````````````````````````````````````````````````````````
+M`&G+-/]9NBC_2JD>_SJ3%?\VEA'_/*D0_T2^%/]1TAG_5<\;_U;#(O]*IB3_
+M.'LH_X([./^+13[_ED@__YI`-_^C03;_M$D]_\552?_395?_TFU;_\UN7O_%
+M9UO_NUY5_T$WM/\_+[[_-B7#_R86N/\D%;W_*1/._S,:X?]$)??_4RW__V$[
+M__]\3?__FF+__P``````````````````````````````````````````````
+M`````````````````'&^5(APMU*P:ZM1RV:>3^9EHT_N:;5/_6S)4?USVE+N
+M=-52YF_&4\MEJE&P68].B)-95XB985VPH&5ARZ!E8.:J9F+NMFQF_<-S;/W0
+M>G+NS7USYL9Y<<N]<FRPLFIFB'1LW(AV;-^P<FG:RVUET.9M9M#N<F?D_7AI
+M]/V`;O_NB7/_YHYW_\N6?/^PFW__B```````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````/_______P``________``#_______\``/_______P``\``````?``#X
+M`````!\``/@`````'P``^``````?``#X`````!\``/@`````'P``^``````?
+M``#X`````!\``/@`````'P``^``````?``#X`````!\``/@`````'P``^```
+M```?``````````````````````````````````"```````$``(```````0``
+MP``````#``#```````,``,```````P``X``````'``#@``````<``.``````
+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
+M`&0`90!R``````!"`"%0`````$L`G`#$`!@`9@#__X4````````````!4```
+M```6`9L`/``.`&<`__^``$(`<@!O`"8`=P!S`&4`+@`N`"X`````````1`BA
+M4`````!+``D`"`&#`&@`4@!I`&,`:`!%`&0`:0!T`#(`,`!7````````````
+M$```0`````!+`*4`"@$!`&D`__^"`````````````E``````2P"L`,0`"`!K
+M`/__@@!)`&X`<P!T`&$`;`!L`&$`=`!I`&\`;@`@`'``<@!O`&<`<@!E`',`
+M<P```````0"`4`````!+`+8`"`$*`&H`;0!S`&,`=`!L`',`7P!P`'(`;P!G
+M`'(`90!S`',`,P`R````````````$```4````````,D`70$!`/____^"````
+M``````$``5``````OP#/`$8`#@`!`/__@`!)`&X`<P!T`&$`;`!L````````
+M``%0``````P!SP!&``X``@#__X``0P!A`&X`8P!E`&P``````````````,``
+MR)``````$0!N`#4`W@"M``````!#`&\`;@!F`&D`<@!M`"``9@!I`&P`90`@
+M`'(`90!P`&P`80!C`&4````(`$T`4P`@`%,`:`!E`&P`;``@`$0`;`!G`"``
+M,@````<``%``````!``"`-8`A0#_____@`````````````)0``````L`#`#'
+M``@`<@#__X(`5`!H`&4`(`!F`&\`;`!L`&\`=P!I`&X`9P`@`&8`:0!L`&4`
+M(`!A`&P`<@!E`&$`9`!Y`"``90!X`&D`<P!T`',```````0(@5``````"P`6
+M`,<`'@!E`/__@0````````````)0``````L`.0#'``@`<P#__X(`5P!O`'4`
+M;`!D`"``>0!O`'4`(`!L`&D`:P!E`"``=`!O`"``<@!E`'``;`!A`&,`90`@
+M`'0`:`!E`"``90!X`&D`<P!T`&D`;@!G`"``9@!I`&P`90```````P``4```
+M```;`$8`$@`4`&8`__^"`````````````E``````-@!'`)P`"`!H`/__@@``
+M``````````)0`````#8`40"<``@`:@#__X(````````````"4``````+`%\`
+MQP`(`'0`__^"`'<`:0!T`&@`(`!T`&@`:0!S`"``;P!N`&4`/P`````````#
+M``!0`````!L`;``2`!0`9P#__X(````````````"4``````V`&T`G``(`&D`
+M__^"`````````````E``````-@!W`)P`"`!K`/__@@`````````!``%0````
+M``\`C0!```T`;`#__X``)@!9`&4`<P````````````%0`````$\`C0!```T`
+M;P#__X``60!E`',`(`!T`&\`(``F`$$`;`!L``````````%0`````(\`C0!`
+M``T`;@#__X``)@!2`&4`;@!A`&T`90`````````!4``````/`)H`0``-`&T`
+M__^``"8`3@!O``````````%0`````$\`F@!```T`<`#__X``3@!O`"``=`!O
+M`"``00`F`&P`;`````````````%0`````(\`F@!```T`<0#__X``)@!#`&$`
+M;@!C`&4`;```````P`#(D``````'`&``4@">`%T``````%(`90!N`&$`;0!E
+M````"`!-`%,`(`!3`&@`90!L`&P`(`!$`&P`9P`@`#(```"``(%0``````8`
+M,0"1``P`:`#__X$``````````0`!4``````6`$H`,@`.``$`__^``$\`2P``
+M``````````%0`````%,`2@`R``X``@#__X``0P!A`&X`8P!E`&P`````````
+M```"4``````&``L`D0`(`&4`__^"`%(`90!N`&$`;0!E`"``9@!I`&P`90``
+M````@`B!4``````&`!8`D0`,`&8`__^!`````````````E``````!@`F`)$`
+M"`!G`/__@@!T`&\`````````!P``4``````#``(`F0!#`/____^`````````
+M`,`(R)``````!0`F`"X`MP!#``````!%`&X`=`!E`'(`(`!P`&$`<P!S`'<`
+M;P!R`&0````(`$T`4P`@`%,`:`!E`&P`;``@`$0`;`!G`"``,@```````E``
+M````!@`(`*H`"`!E`/__@@`F`$4`;@!T`&4`<@`@`'``80!S`',`=P!O`'(`
+M9``@`&8`;P!R`"``=`!H`&4`(`!E`&X`8P!R`'D`<`!T`&4`9``@`&8`:0!L
+M`&4`.@``````H`"!4``````&`!H`J@`,`&8`__^!``````````$``5``````
+M)``P`#(`#@`!`/__@`!/`$L````````````!4`````!@`#``,@`.``(`__^`
+M`$,`80!N`&,`90!L``````````"``E``````!@`0`*H`"`!G`/__@@``````
+M````````P`C*D``````%`!L`+P!;`>```````$P`:0!C`&4`;@!S`&4````(
+M`$T`4P`@`%,`:`!E`&P`;``@`$0`;`!G`"``,@``````#@@`4``````&``D`
+M/0"Z`&8`__^"`````````$0(`5``````2P`)``@!N@!E`/__@0`````````0
+M``!0````````R0!=`0$`_____X(``````````0`!4`````#3`,\`/``.``$`
+M__^``$$`8P!C`&4`<`!T`````````````5``````%@'/`#P`#@`"`/__@`!$
+M`&4`8P!L`&D`;@!E````````````P`#(D``````'`#L`2P#"`(L``````$X`
+M90!X`'0`(`!V`&\`;`!U`&T`90`@`&D`<P`@`'(`90!Q`'4`:0!R`&4`9```
+M``@`30!3`"``4P!H`&4`;`!L`"``1`!L`&<`(``R```````'``!0``````8`
+M!`"V`&L`_____X`````````````"4``````-`!``J``0`&4`__^"`%D`;P!U
+M`"``;@!E`&4`9``@`'0`;P`@`&@`80!V`&4`(`!T`&@`90`@`&8`;P!L`&P`
+M;P!W`&D`;@!G`"``=@!O`&P`=0!M`&4`(`!T`&\`(`!C`&\`;@!T`&D`;@!U
+M`&4`(`!E`'@`=`!R`&$`8P!T`&D`;P!N`#H``````(``@5``````#0`U`*@`
+M#`!F`/__@0````````````%0`````(,`)``R``X`9P#__X``)@!"`'(`;P!W
+M`',`90`N`"X`+@````````````)0``````T`4@"H`!@`:`#__X(`20!N`',`
+M90!R`'0`(`!A`"``9`!I`',`:P`@`'<`:0!T`&@`(`!T`&@`:0!S`"``=@!O
+M`&P`=0!M`&4`(`!A`&X`9``@`'``<@!E`',`<P`@`"(`3P!+`"(`(`!T`&\`
+M(`!T`'(`>0`@`&$`9P!A`&D`;@`@`&\`<@`@`'``<@!E`',`<P`@`"(`0P!A
+M`&X`8P!E`&P`(@`@`'0`;P`@`&(`<@!E`&$`:P`@`&4`>`!T`'(`80!C`'0`
+M:0!O`&X``````````0`!4``````J`'<`,@`.``$`__^``$\`2P``````````
+M``%0`````&8`=P`R``X``@#__X``0P!A`&X`8P!E`&P`````````/#]X;6P@
+M=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB551&+3@B('-T86YD86QO;F4](GEE
+M<R(_/@T*/&%S<V5M8FQY('AM;&YS/2)U<FXZ<V-H96UA<RUM:6-R;W-O9G0M
+M8V]M.F%S;2YV,2(@;6%N:69E<W1697)S:6]N/2(Q+C`B/@T*/&%S<V5M8FQY
+M261E;G1I='D-"B`@=F5R<VEO;CTB,2XP+C`N,"(-"B`@<')O8V5S<V]R07)C
+M:&ET96-T=7)E/2(J(@T*("!N86UE/2)7:6Y205(@4T98(@T*("!T>7!E/2)W
+M:6XS,B(O/@T*/&1E<V-R:7!T:6]N/E=I;E)!4B!31E@@;6]D=6QE/"]D97-C
+M<FEP=&EO;CX-"CQT<G5S=$EN9F\@>&UL;G,](G5R;CIS8VAE;6%S+6UI8W)O
+M<V]F="UC;VTZ87-M+G8R(CX-"B`@/'-E8W5R:71Y/@T*("`@(#QR97%U97-T
+M9610<FEV:6QE9V5S/@T*("`@("`@/')E<75E<W1E9$5X96-U=&EO;DQE=F5L
+M(&QE=F5L/2)A<TEN=F]K97(B("`@("`@("`@("`@#0H@("`@("!U:4%C8V5S
+M<STB9F%L<V4B+SX-"B`@("`\+W)E<75E<W1E9%!R:79I;&5G97,^#0H@(#PO
+M<V5C=7)I='D^#0H\+W1R=7-T26YF;SX-"CQD97!E;F1E;F-Y/@T*("`\9&5P
+M96YD96YT07-S96UB;'D^#0H@("`@/&%S<V5M8FQY261E;G1I='D-"B`@("`@
+M('1Y<&4](G=I;C,R(@T*("`@("`@;F%M93TB36EC<F]S;V9T+E=I;F1O=W,N
+M0V]M;6]N+4-O;G1R;VQS(@T*("`@("`@=F5R<VEO;CTB-BXP+C`N,"(-"B`@
+M("`@('!R;V-E<W-O<D%R8VAI=&5C='5R93TB*B(-"B`@("`@('!U8FQI8TME
+M>51O:V5N/2(V-3DU8C8T,30T8V-F,61F(@T*("`@("`@;&%N9W5A9V4](BHB
+M+SX-"B`@/"]D97!E;F1E;G1!<W-E;6)L>3X-"CPO9&5P96YD96YC>3X-"CQC
+M;VUP871I8FEL:71Y('AM;&YS/2)U<FXZ<V-H96UA<RUM:6-R;W-O9G0M8V]M
+M.F-O;7!A=&EB:6QI='DN=C$B/@T*("`\87!P;&EC871I;VX^#0H@("`@/"$M
+M+51H92!)1"!B96QO=R!I;F1I8V%T97,@87!P;&EC871I;VX@<W5P<&]R="!F
+M;W(@5VEN9&]W<R!6:7-T82`M+3X-"B`@("`@(#QS=7!P;W)T961/4R!)9#TB
+M>V4R,#$Q-#4W+3$U-#8M-#-C-2UA-69E+3`P.&1E964S9#-F,'TB+SX-"B`@
+M("`\(2TM5&AE($E$(&)E;&]W(&EN9&EC871E<R!A<'!L:6-A=&EO;B!S=7!P
+M;W)T(&9O<B!7:6YD;W=S(#<@+2T^#0H@("`@("`\<W5P<&]R=&5D3U,@260]
+M(GLS-3$S.&(Y82TU9#DV+31F8F0M.&4R9"UA,C0T,#(R-68Y,V%](B\^#0H@
+M("`@/"$M+51H92!)1"!B96QO=R!I;F1I8V%T97,@87!P;&EC871I;VX@<W5P
+M<&]R="!F;W(@5VEN9&]W<R`X("TM/@T*("`@("`@/'-U<'!O<G1E9$]3($ED
+M/2)[-&$R9C(X93,M-3-B.2TT-#0Q+6)A.6,M9#8Y9#1A-&$V93,X?2(O/@T*
+M("`@(#PA+2U4:&4@240@8F5L;W<@:6YD:6-A=&5S(&%P<&QI8V%T:6]N('-U
+M<'!O<G0@9F]R(%=I;F1O=W,@."XQ("TM/@T*("`@("`@/'-U<'!O<G1E9$]3
+M($ED/2)[,68V-S9C-S8M.#!E,2TT,C,Y+3DU8F(M.#-D,&8V9#!D83<X?2(O
+M/@T*("`@(#PA+2U4:&4@240@8F5L;W<@:6YD:6-A=&5S(&%P<&QI8V%T:6]N
+M('-U<'!O<G0@9F]R(%=I;F1O=W,@,3`@+2T^#0H@("`@("`\<W5P<&]R=&5D
+M3U,@260](GLX93!F-V$Q,BUB9F(S+31F93@M8CEA-2TT.&9D-3!A,35A.6%]
+M(B\^#0H@(#PO87!P;&EC871I;VX^#0H\+V-O;7!A=&EB:6QI='D^#0H\87-M
+M=C,Z87!P;&EC871I;VX@>&UL;G,Z87-M=C,](G5R;CIS8VAE;6%S+6UI8W)O
+M<V]F="UC;VTZ87-M+G8S(CX-"B`@/&%S;78S.G=I;F1O=W-3971T:6YG<R!X
+M;6QN<STB:'1T<#HO+W-C:&5M87,N;6EC<F]S;V9T+F-O;2]334DO,C`P-2]7
+M:6YD;W=S4V5T=&EN9W,B/@T*("`@(#QD<&E!=V%R93YT<G5E/"]D<&E!=V%R
+M93X-"B`@/"]A<VUV,SIW:6YD;W=S4V5T=&EN9W,^#0H\+V%S;78S.F%P<&QI
+M8V%T:6]N/@T*/"]A<W-E;6)L>3X-"@T*`````````````````!D`4P!E`&P`
+M90!C`'0`(`!D`&4`<P!T`&D`;@!A`'0`:0!O`&X`(`!F`&\`;`!D`&4`<@`-
+M`$4`>`!T`'(`80!C`'0`:0!N`&<`(``E`',`"P!3`&L`:0!P`'``:0!N`&<`
+M(``E`',`&0!5`&X`90!X`'``90!C`'0`90!D`"``90!N`&0`(`!O`&8`(`!A
+M`'(`8P!H`&D`=@!E`!\`5`!H`&4`(`!F`&D`;`!E`"``(@`E`',`(@`@`&@`
+M90!A`&0`90!R`"``:0!S`"``8P!O`'(`<@!U`'``=``7`$,`;P!R`'(`=0!P
+M`'0`(`!H`&4`80!D`&4`<@`@`&D`<P`@`&8`;P!U`&X`9``>`$T`80!I`&X`
+M(`!A`'(`8P!H`&D`=@!E`"``:`!E`&$`9`!E`'(`(`!I`',`(`!C`&\`<@!R
+M`'4`<`!T`````````"4`5`!H`&4`(`!A`'(`8P!H`&D`=@!E`"``8P!O`&T`
+M;0!E`&X`=``@`&@`90!A`&0`90!R`"``:0!S`"``8P!O`'(`<@!U`'``=``>
+M`%0`:`!E`"``80!R`&,`:`!I`'8`90`@`&,`;P!M`&T`90!N`'0`(`!I`',`
+M(`!C`&\`<@!R`'4`<`!T`````````!$`3@!O`'0`(`!E`&X`;P!U`&<`:``@
+M`&T`90!M`&\`<@!Y`!0`50!N`&L`;@!O`'<`;@`@`&T`90!T`&@`;P!D`"``
+M:0!N`"``)0!S``X`0P!A`&X`;@!O`'0`(`!O`'``90!N`"``)0!S````````
+M```````0`$,`80!N`&X`;P!T`"``8P!R`&4`80!T`&4`(``E`',`%P!#`&$`
+M;@!N`&\`=``@`&,`<@!E`&$`=`!E`"``9@!O`&P`9`!E`'(`(``E`',`2`!#
+M`&@`90!C`&L`<P!U`&T`(`!E`'(`<@!O`'(`(`!I`&X`(`!T`&@`90`@`&4`
+M;@!C`'(`>0!P`'0`90!D`"``9@!I`&P`90`@`"4`<P`N`"``0P!O`'(`<@!U
+M`'``=``@`&8`:0!L`&4`(`!O`'(`(`!W`'(`;P!N`&<`(`!P`&$`<P!S`'<`
+M;P!R`&0`+@`4`$,`:`!E`&,`:P!S`'4`;0`@`&4`<@!R`&\`<@`@`&D`;@`@
+M`"4`<P`@`%``80!C`&L`90!D`"``9`!A`'0`80`@`&,`:`!E`&,`:P!S`'4`
+M;0`@`&4`<@!R`&\`<@`@`&D`;@`@`"4`<P``````````````````````&@!7
+M`'(`:0!T`&4`(`!E`'(`<@!O`'(`(`!I`&X`(`!T`&@`90`@`&8`:0!L`&4`
+M(``E`',`&0!2`&4`80!D`"``90!R`'(`;P!R`"``:0!N`"``=`!H`&4`(`!F
+M`&D`;`!E`"``)0!S`!``1@!I`&P`90`@`&,`;`!O`',`90`@`&4`<@!R`&\`
+M<@`=`%0`:`!E`"``<@!E`'$`=0!I`'(`90!D`"``=@!O`&P`=0!M`&4`(`!I
+M`',`(`!A`&(`<P!E`&X`=```````````````,@!4`&@`90`@`&$`<@!C`&@`
+M:0!V`&4`(`!I`',`(`!E`&D`=`!H`&4`<@`@`&D`;@`@`'4`;@!K`&X`;P!W
+M`&X`(`!F`&\`<@!M`&$`=``@`&\`<@`@`&0`80!M`&$`9P!E`&0`$@!%`'@`
+M=`!R`&$`8P!T`&D`;@!G`"``9@!R`&\`;0`@`"4`<P`+`$X`90!X`'0`(`!V
+M`&\`;`!U`&T`90`=`%0`:`!E`"``80!R`&,`:`!I`'8`90`@`&@`90!A`&0`
+M90!R`"``:0!S`"``8P!O`'(`<@!U`'``=``%`$,`;`!O`',`90``````````
+M````!0!%`'(`<@!O`'(`80!%`'(`<@!O`'(`<P`@`&4`;@!C`&\`=0!N`'0`
+M90!R`&4`9``@`'<`:`!I`&P`90`@`'``90!R`&8`;P!R`&T`:0!N`&<`(`!T
+M`&@`90`@`&\`<`!E`'(`80!T`&D`;P!N``H`3`!O`&\`:P`@`&$`=``@`'0`
+M:`!E`"``:0!N`&8`;P!R`&T`80!T`&D`;P!N`"``=P!I`&X`9`!O`'<`(`!F
+M`&\`<@`@`&T`;P!R`&4`(`!D`&4`=`!A`&D`;`!S``4`8@!Y`'0`90!S``L`
+M;0!O`&0`:0!F`&D`90!D`"``;P!N`!@`9@!O`&P`9`!E`'(`(`!I`',`(`!N
+M`&\`=``@`&$`8P!C`&4`<P!S`&D`8@!L`&4`````````````````;`!3`&\`
+M;0!E`"``9@!I`&P`90!S`"``8P!O`'4`;`!D`"``;@!O`'0`(`!B`&4`(`!C
+M`'(`90!A`'0`90!D`"X`"@!0`&P`90!A`',`90`@`&,`;`!O`',`90`@`&$`
+M;`!L`"``80!P`'``;`!I`&,`80!T`&D`;P!N`',`+``@`'(`90!B`&\`;P!T
+M`"``5P!I`&X`9`!O`'<`<P`@`&$`;@!D`"``<@!E`',`=`!A`'(`=``@`'0`
+M:`!I`',`(`!I`&X`<P!T`&$`;`!L`&$`=`!I`&\`;@!<`%,`;P!M`&4`(`!I
+M`&X`<P!T`&$`;`!L`&$`=`!I`&\`;@`@`&8`:0!L`&4`<P`@`&$`<@!E`"``
+M8P!O`'(`<@!U`'``=``N``H`4`!L`&4`80!S`&4`(`!D`&\`=P!N`&P`;P!A
+M`&0`(`!A`"``9@!R`&4`<P!H`"``8P!O`'``>0`@`&$`;@!D`"``<@!E`'0`
+M<@!Y`"``=`!H`&4`(`!I`&X`<P!T`&$`;`!L`&$`=`!I`&\`;@`)`$$`;`!L
+M`"``9@!I`&P`90!S````````````````````10`\`'4`;``^`#P`;`!I`#X`
+M4`!R`&4`<P!S`"``/`!B`#X`20!N`',`=`!A`&P`;``\`"\`8@`^`"``8@!U
+M`'0`=`!O`&X`(`!T`&\`(`!S`'0`80!R`'0`(`!E`'@`=`!R`&$`8P!T`&D`
+M;P!N`"X`/``O`&P`:0`^`#P`8@!R`#X`/`!B`'(`/@!%`#P`=0!L`#X`/`!L
+M`&D`/@!0`'(`90!S`',`(``\`&(`/@!%`'@`=`!R`&$`8P!T`#P`+P!B`#X`
+M(`!B`'4`=`!T`&\`;@`@`'0`;P`@`',`=`!A`'(`=``@`&4`>`!T`'(`80!C
+M`'0`:0!O`&X`+@`\`"\`;`!I`#X`/`!B`'(`/@`\`&(`<@`^`#8`/`!L`&D`
+M/@!5`',`90`@`#P`8@`^`$(`<@!O`'<`<P!E`#P`+P!B`#X`(`!B`'4`=`!T
+M`&\`;@`@`'0`;P`@`',`90!L`&4`8P!T`"``=`!H`&4`(`!D`&4`<P!T`&D`
+M;@!A`'0`:0!O`&X`-`!F`&\`;`!D`&4`<@`@`&8`<@!O`&T`(`!T`&@`90`@
+M`&8`;P!L`&0`90!R`',`(`!T`'(`90!E`"X`(`!)`'0`(`!C`&$`;@`@`&(`
+M90`@`&$`;`!S`&\`(`!E`&X`=`!E`'(`90!D`!8`;0!A`&X`=0!A`&P`;`!Y
+M`"X`/``O`&P`:0`^`#P`8@!R`#X`/`!B`'(`/@`X`#P`;`!I`#X`20!F`"``
+M=`!H`&4`(`!D`&4`<P!T`&D`;@!A`'0`:0!O`&X`(`!F`&\`;`!D`&4`<@`@
+M`&0`;P!E`',`(`!N`&\`=``@`&4`>`!I`',`=``L`"``:0!T`"``=P!I`&P`
+M;``@`&(`90```#(`8P!R`&4`80!T`&4`9``@`&$`=0!T`&\`;0!A`'0`:0!C
+M`&$`;`!L`'D`(`!B`&4`9@!O`'(`90`@`&4`>`!T`'(`80!C`'0`:0!O`&X`
+M+@`\`"\`;`!I`#X`/``O`'4`;``^`````````!8`5`!H`&4`(`!A`'(`8P!H
+M`&D`=@!E`"``:0!S`"``8P!O`'(`<@!U`'``=````````````!T`10!X`'0`
+M<@!A`&,`=`!I`&X`9P`@`&8`:0!L`&4`<P`@`'0`;P`@`"4`<P`@`&8`;P!L
+M`&0`90!R`"0`10!X`'0`<@!A`&,`=`!I`&X`9P`@`&8`:0!L`&4`<P`@`'0`
+M;P`@`'0`90!M`'``;P!R`&$`<@!Y`"``9@!O`&P`9`!E`'(`````````!P!%
+M`'@`=`!R`&$`8P!T`!,`10!X`'0`<@!A`&,`=`!I`&\`;@`@`'``<@!O`&<`
+M<@!E`',`<P```````````#T`5`!O`'0`80!L`"``<`!A`'0`:``@`&$`;@!D
+M`"``9@!I`&P`90`@`&X`80!M`&4`(`!L`&4`;@!G`'0`:``@`&T`=0!S`'0`
+M(`!N`&\`=``@`&4`>`!C`&4`90!D`"``)0!D`"``8P!H`&$`<@!A`&,`=`!E
+M`'(`<P```````````!\`50!N`&L`;@!O`'<`;@`@`&4`;@!C`'(`>0!P`'0`
+M:0!O`&X`(`!M`&4`=`!H`&\`9``@`&D`;@`@`"4`<P`D`%0`:`!E`"``<P!P
+M`&4`8P!I`&8`:0!E`&0`(`!P`&$`<P!S`'<`;P!R`&0`(`!I`',`(`!I`&X`
+M8P!O`'(`<@!E`&,`=``N`!D`20!N`&,`;P!R`'(`90!C`'0`(`!P`&$`<P!S
+M`'<`;P!R`&0`(`!F`&\`<@`@`"4`<P```````````````````````````!4`
+M0P!A`&X`;@!O`'0`(`!C`&\`<`!Y`"``)0!S`"``=`!O`"``)0!S`"X`````
+M````````````````````'@!#`&$`;@!N`&\`=``@`&,`<@!E`&$`=`!E`"``
+M<P!Y`&T`8@!O`&P`:0!C`"``;`!I`&X`:P`@`"4`<P`:`$,`80!N`&X`;P!T
+M`"``8P!R`&4`80!T`&4`(`!H`&$`<@!D`"``;`!I`&X`:P`@`"4`<P`H`%D`
+M;P!U`"``;@!E`&4`9``@`'0`;P`@`'4`;@!P`&$`8P!K`"``=`!H`&4`(`!L
+M`&D`;@!K`"``=`!A`'(`9P!E`'0`(`!F`&D`<@!S`'0``````````````$$`
+M60!O`'4`(`!M`&$`>0`@`&X`90!E`&0`(`!T`&\`(`!R`'4`;@`@`'0`:`!I
+M`',`(`!S`&4`;`!F`"T`90!X`'0`<@!A`&,`=`!I`&X`9P`@`&$`<@!C`&@`
+M:0!V`&4`(`!A`',`(`!A`&0`;0!I`&X`:0!S`'0`<@!A`'0`;P!R````````
+M````!0!0`&$`=0!S`&4`"`!#`&\`;@!T`&D`;@!U`&4`````````````````
+M```````````0`%,`90!C`'4`<@!I`'0`>0`@`'<`80!R`&X`:0!N`&<`2P!0
+M`&P`90!A`',`90`@`'(`90!M`&\`=@!E`"``)0!S`"``9@!R`&\`;0`@`&8`
+M;P!L`&0`90!R`"``)0!S`"X`(`!)`'0`(`!I`',`(`!U`&X`<P!E`&,`=0!R
+M`&4`(`!T`&\`(`!R`'4`;@`@`"4`<P`@`'4`;@!T`&D`;``@`&D`=``@`&D`
+M<P`@`&0`;P!N`&4`+@``````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````$```D`````$P$3`A,"LP03!6,&$P<3![,)$PFS"Q,+LPT3#;,(XQPS'W
+M,?\Q"S(E,BTR4#**,I\RLS+8,M\R_3($,R$S03-1,V`S9S-Q,Z,SOC.2-<XU
+M%39?-@XW'3?%-]0WJ3C8.!$Y&SF..;4YQSGX.3DZ3CIU.I$Z&CL^.Y<[D3QV
+M/2$^%3\A/Z$_Y#\`(```'````!TT`#9=-APW<C?A-[`],CZ9/@```#```#0`
+M```2,'0QC#&X,0LR>C)[,W$TLS4!-A8Y2SK#.O`Z'CV</;P]+S]0/UT_T3\`
+M``!````L````V3`3,5$QB3'#,?<Q+3):,I<RQ#(-,T,SA3.[,_TS*C0,-70U
+M`%```#P```!\-X8WC3>4-YLWM3=8.)DZ6#M*/',^?SZ</N$^%3\</RL_-S]&
+M/U4_:#]R/Y`_V#_F/^L_`&```!@````",`<PKC#;,.TPJC[+/@```'```'``
+M``"G,,HPYS'\,00R#C(9,F@RC3*`,XLSG#,<-#(TRS3:-`PU&34H-50U=C6!
+M-3DV>S:#-I(VF#:C-JHVPS;N-@8W"S>9-\0WW#?[-RXXB3B=.5@\>3RP/-4\
+MW#S\/!$]&STJ/8\]SSX```"````H````$S`M,#@P5#+V,JLS#C5D-0HW4S?%
+M-^LW>#G0.@$\]ST`D```9````-\Q4S.V,W@T<37A-0HV*3:M-C0W=#>^-_PW
+M#CB-.*\X2#E].=0Y`#H8.DHZ:3J:.K<ZR#KH.A@[-SON._L[,#PX/'T\[#PO
+M/6(];SW`/=$]@3[Q/AX_SC_J/P```*```&P````8,"0P9#"),*HPP3#N,#`Q
+M6C%_,:TQPS'5,>`R#C,S,V$SFC/&,R,T5C1S-$8UBC4+-A(V339^-K0VZC:,
+M-YTW'3A3.%\XASB3.&(Z"CLL//T\83WJ/@P_)#\I/R\_-C\\/P```+```#0`
+M``#-,6XR'#-:-(\T738%-Z\XZSCY.!LY3#F?.=TZ0#MQ/'H\Y#S_/`X]*#T@
+M/@#````@````>C1@-F@V?C:_.10Z+#HM/5,](#_4/^,_`-```)````"8,*<P
+M\3$9,DPR4C*!,HHRMS+L,ALS0C-F,YHSQ#-*--DTY#3[-`DU,36<-?HU`C9$
+M-J<VP3;*-MLV6S>4-\0WRSA=.60Y:SER.<\Y-3H_.DPZ^3H7.QX[;SO@.P,\
+M,#TW/3X]6CUL/8X]SSW6/1P^*CY6/F(^`C\C/R\_4S]R/WH_A3^R/P```.``
+M`"`!```;,"0PK3#`,,DPZ3`&,0PQ'3$C,3`QF#'Q,?@Q_S$&,@TR%#(;,B(R
+M*3)+,E(R63)@,H<RDS*?,J@R[3(2,QDS(#,G,RXS-3,\,T,S8C-I,W`S=S-^
+M,X4SC#.3,[(SN3/`,\<SSC/5,]PSXS,"-`DT$#07-!\T)C0M-#0T(#8G-C,V
+M239B-FDV=3:!-I@VHS:U-L$VVC;A-O,V_39;-VHW=C>$-YDWH#>Y-\,WY#?K
+M-_PW"3@>."4X,SA!.((XGSB].-`XW3CO.`$Y$#D@.34Y2CE9.68Y>CF'.9$Y
+M"CL5.QP[*CO^.PT\'#PK/#H\M3S$/-,\XCQ?/7\]6#YH/F\^=#Y_/M,^W#[G
+M/@P_%S\</SP_33]8/V$_`/```!`````?/1X^C#\``````0`H`0``EC$F,STS
+M33-],Y\SN3/!,\PSTS/M,_8S_3,$-"<T,#0[-$@T4#1;-&,T:S1S-'LT@S2+
+M-),TFS2C-*LTLS2[-,,TRS33--LTXS3K-/,T^S0#-0LU$S4>-2DU-#4_-4HU
+M535@-6LU=C6!-8PUES6B-:TUN#7#-<XUV37D->\U^C4%-A`V&S8F-C$V/#9'
+M-E(V739H-G,V?C:)-K$VS3;?-OXV5C=L-Z\WQ#?M-R<X73AG.-0X[SCY.``Y
+M)CDM.3@Y/CE&.6DY>SF..=`YVCGJ.0$Z!CI".FPZACJ?.JLZMSHQ.ST[13M*
+M.WT[BCN5.YH[ICNR.\0[T3OR._D[7SR3/-(\W#SQ//@\)3TY/9(]I#VU/<4]
+MU3T//EX^!3\3/]\_`!`!`)@````#,!DP*#`V,$0P1#%+,6$Q9C%*,M4RL#._
+M,\,SQS/+,\\STS/7,]LSWS/C,^<SZS/O,_,S]S/[,_\S`S0'-`LT#S03-!<T
+M&S0?-",T)S0K-"\T,S0W-#LT/S1#-(4TFC3`--PT[C1I-K`VWC;R-LTXO3K<
+M.CH[DSO^/!4]&STH/54]H#T5/R@_F#_6/^4_````(`$`%````.PP>SZ//JX^
+M]S\````P`0`4````#S#*,#LQ0#&E,0```$`!`!@```!I,H0S)#6'-;PU$#9-
+M-ETX`%`!`"`````E,4(Q6#%Q,9@VGS9_-X8W$SP:/%(]63T`8`$`#````-DZ
+MJ#T`@`$`:````)LP^#:Z-^HWFCC<.%@Y<SFZ.4(Z23I0.E<Z7CJ?.M8ZZSKR
+M.ODZ`#L'.QD[/SM@.X([H3L\/&0\A3R6/*<\ZSP)/1D]=3U^/9H]KCV^/4H^
+MK3[+/O,^IC_&/\\_Z3\```"0`0#H````!S`=,#$P<C!],(<PZ##S,/XP(3%+
+M,7HQFS'",><Q,#)D,G,RAC+#,LHR&#-S,[LS'S0V-%$T;#2'-*PTS#1%-5LU
+M?36[-<TUY37N-8HWHC?1-^XWDSCI./<X`#D/.2PY23E0.8`YB#F>.:<Y/SI,
+M.F8Z@CJ+.IDZKSJX.M`ZXSKP.OLZ$CLE.WH[H3NJ.\,[V#OK._D[!#P;/"X\
+M03Q4/(`\B3RL/,`\YCSO/!L]-SU-/6(]BCVX/2<^23Y1/E<^;#YW/IP^LC[-
+M/N0^\#X+/R8_/C]7/VH_FC^H/[L_R3\`H`$`%`$```XP(#`O,#<P/3!%,$LP
+M5S!B,&TP@#"*,)`PHC"H,+4PNS#&,.0P]3`9,3LQ<C%],80QFC&U,>\Q,3([
+M,D$R4#)O,I$RKS*Z,M,RYS+[,EDSC#.L,^HS!307-"LT/S13-&@T@32.-)LT
+ML#34-.$T[C06-2(U+C4U-3PU2#5Q-7LUF#6H-;DUSS7A-?DU'#8B-CHV1S99
+M-FDVV382-R$W/3=*-U$W7S=K-W0WY#?T-_DW#CAK.+`XQ#C7./0X`3D).0\Y
+M$SDS.4,Y5#HN.TL[6SMO.Y<[HCO..PH\.CQP/(@\DSRV/)`]RCW</?0]$#Y*
+M/L<^%S\H/RT_/#]*/U0_=3^R/\8_V3_>/_(_]S\`L`$`H`$```,P##`@,"@P
+M-C`],$,P2S!2,%TP:#"),(\PM##F,`DQ&C$P,4$Q4C%E,7$QE3'_,0HR$3(9
+M,BDR-#)!,DXR6S)V,GXRE#*G,K4ROS+%,N(RZ#+T,OTR"3,6,R0S+C,_,T0S
+M43-8,UXSV#,'-#$T2317-%TTG32Z-.PT_#0'-1,U3C5F-7,U>36,-9,UHC6N
+M-;HUQC77-=TU\#7Z-1@V3C9B-G8VBS:4-K4VSC;T-@0W)C<T-STW1C=5-V0W
+M;#=Z-X4WC#>9-Y\WK#>U-[XWR3?=-^,WZ3<#.!$X%SAC.&PX<CB$.(DXGCBG
+M.+TXUSC>..DX^3@$.0DY#CD5.24Y*SDV.4(Y63EL.7(Y@3F,.98YGSFM.;@Y
+MQ#G-.=,YVSGF.?(Y_#D#.@DZ#SH>.BHZ-SI$.F<Z>#J%.K@ZS#K:.N8Z[#H(
+M.Q([*#LP.S8[3#N8.P,\#CP6/#(\.3QS/)0\JCS`/-X\[CP*/28]0SUI/7`]
+MNCW</?D]_ST9/BD^0SY;/G@^FCZH/JX^WSX!/[,_NS_'/]$_W3\```#``0#L
+M`````S`1,(8P!#$O,:4Q43)>,G`RAS*D,KTRT3(-,QLS)C-',VHS>S.Y,\TS
+M831L-(PTE32>-.$T7S5^-8XUG#7'-=(U^34$-C,V/#9"-DTV4S9X-GTVB#:4
+M-J(V!3<8-S0WFS>Z-]LW]S<#.`DX%C@D."\X0S@V.3TY0SE2.5LY93F+.9DY
+MGSG@.?0Y"#I&/%8\#CT;/64]:3UM/7$]=3UY/7T]@3V%/8D]C3V1/94]F3TN
+M/C0^1CY./EP^9SYL/G4^>SZ+/J4^Z3[W/@8_+3\R/SP_:3^=/ZH_LS_!/\<_
+MS3_6/^4_`-`!`#@"```3,#\P1#!;,'(PAC"O,+8POS"H,;(QSC'@,1,R*#(Y
+M,D8R4C)C,G(RCC*<,J,RJ3*T,KTRS3+A,NDR0S-5,V(S:3-P,X,SC#.5,ZLS
+MLS/.,],SWS/D,_$S`#09-!XT(S0H-"TT,C0Y-$`T1C1]-)HTJC2^-,@TW33Z
+M-`4U,#4Y-58U7#62-9@UL37+-=PUYC7P-?LU(38G-BPV,C8X-DTV5C9>-F8V
+M<C:"-H<VD3:7-IPVHC:H-K8VO3;#-O@V_C8=-RDW/S=(-W(W>#=^-X0WDS>C
+M-[`WQC=Q.'<XA#BG.+HXS3C;..TX]3@".1,Y(#DP.3TY0CE-.58Y:3EQ.7<Y
+M?3F(.;<YTSG9.>`YZSGQ.?<Y_#D'.@PZ*3HS.CPZ0CI(.E(Z6#IK.G8Z?#J)
+M.I0ZG3JI.J\ZM#J_.L4ZSCK;.N4ZZSK\.@(["#L/.Q<['3LE.T\[7#MJ.W0[
+M?CN(.Y([G#NF.[`[NCO$.\X[V#OB.^P[]CL`/`H\%#P>/"@\,CP\/$8\4#Q:
+M/&0\;CQX/((\C#R6/*`\JCRT/+X\R#S2/-P\YCSP//H\!#T./1@](CTL/38]
+M0#U*/50]7CUH/74]@SV-/9<]H3VK/;4]OSW)/=,]X#WN/?@]!3X3/AT^)SXQ
+M/CL^13Y//ED^8SYM/G<^@3Z+/I@^ICZP/KH^Q#[./M@^XC[L/OD^!S\1/QL_
+M)3\P/T`_1C]0/V(_?#^"/Y$_F#^A/Z<_K3^V/[T_Y#_Y/P#@`0#<`````#`&
+M,!`P&3!-,&@PLS"Y,,<PUC#<,.,P[#`I,5<Q9S&+,:<QN#'%,=XQ\S'Z,0`R
+M"S(J,C\R:3*Q,MLRYC+\,@XS*#,],TDS3S-D,XDSHS.I,[XS"S07-!TT,C17
+M-&HTAC2G-+0TPC3/--XTY#3J-/`T]C3\-`(U"#4.-6`VR39#-]PW63B%.-0X
+MYSCZ.`8Y%CDG.4TY8CEI.6\Y@3F+.>DY]CD=.B4Z/CKH/!$]A3VS/<0]R3W.
+M/>\]]#T!/F\^_#X@/S@_/C]5/W`_C3^B/[$_SC\`\`$`U````!`P'C`Y,$0P
+MS##5,-TP)#$S,3HQ<#%Y,88QD3&:,:TQX3&,,JLRM3+&,NPR!#,*,U,S:#.#
+M,X\SGC.G,[0SXS/K,P0T"C0Q-%<T8#1F-&XT<S2C-*@TTC3;-.8T[30--1,U
+M&34?-24U*S4R-3DU0#5'-4XU535<-60U;#5T-8`UB36.-90UGC6H-;@UR#78
+M->$U)38X-K`VA#>7-[4WPS=Q.:@YKSFT.;@YO#G`.18Z6SI@.F0Z:#IL.LL\
+MZSPU/4T]4CV]/<`^T3X``````@`,````DC4````0`@!T````FC>>-Z(WIC>J
+M-ZXWLC>V-[HWOC?"-\8WRC?.-](WUC?:-]XWXC?F-^HW[C?R-_8W^C?^-P(X
+M!C@*.`XX$C@6.#<XV#@I.4(Y<SI$.U<[=3N#.S$]:#UO/70]>#U\/8`]UCT;
+M/B`^)#XH/BP^`"`"`$P```!O,><Q[S$!,EHRA3)+,VPS>C.`,YLSPS/7,_,S
+M_3,'-!4T,#1!-*,T4#5H-6XUBS6P-6PWHSOY.YP]]3V$/M,^]S\````P`@"$
+M````=3*!,I@SP3/=,_TS"S02-!@T+31`-%0T8#2<-*PTPS3+-/4T$34@-2PU
+M.C5<-6PU<35V-9TUIC6K-;`UU#7@->4UZC4.-AHV'S8D-DLV5S9<-F$VD3:9
+M-IXVKC:X-MTV[S;[-@4W%S<<-SPWH3>M-R4X/SA(.)<Y$SL```!``@!<````
+MQ##-,-4PTS'E,0<R&3*M,S8T.C0^-$(T1C1*-$XT4C3*-%8U6C5>-6(U9C5J
+M-6XU<C5"//T^&3\=/R$_)3\I/RT_,3\U/SD_/3]!/T4_ES_Z/P```%`"`#P`
+M```Y-E,VK#;(-LHW?CJ,.J0ZK3JS.KTZPCK'.LPZT3LW/(D\ISS7/(P]/CYK
+M/I@^ZCX=/V(_`&`"`!0`````,#$PYC86-T8W;C@`<`(`D````)(TI#3`-.0T
+M_S0*-38U4S5W-:LVP3;X-B@W-S=--V,W>C>!-XTWH#>E-[$WMC?'-S$X.#A*
+M.%,XFSBM.+4XOSC(.-DXZS@&.48Y6#E>.7(YQCG0.=8YW#E'.E`ZB3J4.HD\
+MO#S!/.<]_STL/DP^7#YA/FL^<#Y[/H8^FC[K/H\_HC^Q/](_````@`(`Q```
+M`"LP-C"%,)TPYS!],90Q$C)6,F@RH3*F,L$RS3(!,Q0S43-@,V4S=C-\,X<S
+MCS.:,Z`SJS.Q,[\SR#/-,]HSWS/L,_HS,C0Z-%,T9S1S-'LTDS2X-,DTTC09
+M-4TU=#6.->4U\C4#-@TV$S8G-C,VK#:U-N$VZC80.!8X*#AF.&PXF3@&.0PY
+M?SF%.9LYB3J3.J`ZTSKE.A4[,CL].X\[ECO:._0[#CP^/'$\A#Q[/;$]SC[J
+M/CH_BC^[/^L_`)`"`'@````V,#(Q1C'.,8<RCC*[,L(R]S((,R,S+S-`,TDS
+M?C./,ZDSLC/!,\LS\3,"-!<T(31$-$XT03D,/$L\4CQB/'$\>#R0/)<\M3RA
+M/KL^RC[8/N0^\#[^/@X_(S\Z/UT_@#^-/YL_J3^T/\H_WC_F/_$_`*`"`-``
+M```',$`P<#"+,,8P_3`/,44Q<S'7,><QGS)P,\0S2C1$-1<V.3;%-MXV"S<2
+M-R4W,S<Z-T`W6S=B-W8W?C>Z-\HWX3?I-Q`X*3@X.$0X4CAT.(8XD3B6.)LX
+MMCC`.-PXYSCL./$X##D6.3(Y/3E".4<Y8CEL.8@YDSF8.9TYNSG%.>$Y[#GQ
+M.?8Y%SHG.D,Z3CI3.E@ZBSJO.LLZUCK;.N`Z_CHA.RP[.3M..UD[;3MR.W<[
+MF3NG.[8[W3OO._L[6C[_/B8_D3^X/P"P`@"T````P3`[,4HQ7#%N,8HQJ#&R
+M,<,QR#'=,1`R%S(>,B4R/S).,E@R93)O,G\RUS(/,RHS/#5I-8HUCS6B-;8U
+MP378-0@V'38K-C0V:3:@-M8VZ39[-Z\WUC<A.%(Y5SE=.6(YJSG..?0Y%CJB
+M.JDZPCK1.O4Z*3M4.W8[G3N[.\8[0SQ*/%$\6#QE/*8\LSS`/,T\Y#RK/2@^
+M,3Y)/EL^B#ZV/H$_FS_;/^H_^#\```#``@!H````%3`=,$8P33!I,'`PAS"=
+M,-@PWS`O,4,QAS&9,:LQO3'/,>$Q\S$%,A<R*3([,DTR7S*`,I(RI#*V,L@R
+M`31'--`TXC1<-:DU@3;J-A0W0S>I-^(W^#<9.)$X8#F4.P```-`"`!@```!J
+M,]8SJ3NQ.^@[[SL9/P```.`"`&`````.,!8P33!4,%DSG3:D-JLVLC;]-AXW
+M)3<[-U$W7C=C-W$W4SAR.'<XACF:.0HZB3JV.J8\K#RU/,`\T#P"/7D]BSV=
+M/9(^TCX]/U<_9#^4/[@_PS_0/^(_`/`"`(0````J,$,PQS#<,.4P[C`&,2(Q
+M03%Q,?TQ'#)5,GPRAS*7,@XS13-D,WHSA#.C,\$S,#19-((TH#0>-4<U<#6,
+M-14V0S9T-I`VPS;@-@(W@3?=-WTX[#CV.$0YOSG).?,YECH6.TD[7CMO._4[
+M"SRT/.<\A3V;/?4],CX\/E<^```#`)P````N,7,Q3S+/,A@S63-A,VDS<3-Y
+M,Y<SGS,!-`TT(30M-#DT632@-,HTTC3O-/\T"S4:-1XV3S:1-L@VY3;Y-@0W
+M43?9-T`X]3AI.88YECGK.>PZ_#H-.Q4[)3LV.YP[ISNR.[@[P3L#/"X\4SQ?
+M/&L\?CR=/,@\X#PE/3$]/3U)/5P]@#T`/FL^>CZ9/N(^0S^>/P```!`#`%@`
+M```,,"LP7#"Q,>LR!C,<,S(S.C.3-I8WIS>6.9PYH3FQ.<(Y;CIT.M8ZVSKM
+M.@L['SLE.]D[H3R^/#(]3CWV/7@_@C^4/Z8_N#_*/]P_\3\````@`P!(````
+M23!3,&@P@S"@,,LP\#`%,24Q0C%4,6DQCS'C,?@Q6#)J,I\RL3+#,MTR^C(/
+M,R0S.3-4,V$S<3.!,Y$SH3.Q,P`P`P!0````8#)H,FPR<#)T,G@R?#*`,H0R
+MB#*,,I`RG#*@,J0RJ#*L,K`RO#+`,L0RN#6\-<`UQ#7(-<PUT#4L.#`X-#@X
+M.#PX0#A$.````$`#`*````!H,VPS<#-T,W@S?#.`,X0SB#.,,Y`SE#.8,YPS
+MH#.D,Z@SK#.P,[0SN#.\,\`SQ#/(,\PST#/4,]@SW#/@,^0SZ#/L,_`S]#/X
+M,_PS`#0$-`@T##00-!0T&#0<-"`T)#0H-"PT,#0T-#@T/#1`-$0T2#1,-%`T
+M5#18-%PT8#1D-&@T;#1P-'0T>#1\-(`T:#9L-G`V=#8```!0`P`L`0```#4$
+M-40U2#50-5@U9#5H-6PU<#5T-7@U?#6`-80UH#6D-<@US#70-=0UZ#7L-?`U
+M]#7X-OPV`#<$-P@W##<0-Q0W&#<<-R`W)#<H-RPW,#<T-S@W/#=`-T0W2#=,
+M-U`W5#=8-UPW8#=D-V@W;#=P-W0W>#=\-X`WA#>(-XPWD#>4-Y@WG#>@-Z0W
+MJ#>L-[`WM#>X-[PWP#?$-\@WS#?0-]0WV#?<-^`WY#?H-^PW\#?T-_@W_#<`
+M.`0X"#@,.!`X%#@8.!PX(#@D."@X+#@P.#0X.#@\.$`X1#A(.$PX4#A4.%@X
+M7#A@.&0X:#AL.'`X=#AX.'PX@#B$.)@_H#^H/ZP_L#^T/[@_O#_`/\0_S#_0
+M/]0_V#_</^`_Y#_H/_0__#\```!@`P#H`````#`$,`@P##`@-20U*#4L-3`U
+M-#4X-3PU0#5$-4@U3#50-50U6#5<-6`U9#5H-6PU<#5T-7@U?#6`-80UB#6,
+M-9`UE#68-9PUH#6D-:@UK#6P-;0UN#6\-<`UQ#7(-=0UV#7<->`UY#7H->PU
+M\#7T-?@U_#4`-@0V"#8,-A`V%#88-APV(#8D-B@V+#8P-C0V.#8\-D`V1#9(
+M-DPV4#94-E@V7#9@-F0V:#9L-G`V=#9X-GPV@#:0/I0^F#Z</J`^I#ZH/JP^
+ML#ZT/K@^O#[`/L0^R#[,/M`^U#[8/MP^````<`,`G````*@SK#.P,[0SW#WD
+M/>P]]#W\/00^##X4/AP^)#XL/C0^/#Y$/DP^5#Y</F0^;#YT/GP^A#Z,/I0^
+MG#ZD/JP^M#Z\/L0^S#[4/MP^Y#[L/O0^_#X$/PP_%#\</R0_+#\T/SP_1#],
+M/U0_7#]D/VP_=#]\/X0_C#^4/YP_I#^L/[0_O#_$/\P_U#_</^0_[#_T/_P_
+M````@`,`B`$```0P##`4,!PP)#`L,#0P/#!$,$PP5#!<,&0P;#!T,'PPA#",
+M,)0PG#"D,*PPM#"\,,0PS##4,-PPY##L,/0P_#`$,0PQ%#$<,20Q+#$T,3PQ
+M1#%,,50Q7#%D,6PQ=#%\,80QC#&4,9PQI#&L,;0QO#'$,<PQU#'<,>0Q[#'T
+M,?PQ!#(,,A0R'#(D,BPR-#(\,D0R3#)4,EPR9#)L,G0R?#*$,HPRE#*<,J0R
+MK#*T,KPRQ#+,,M0RW#+D,NPR]#+\,@0S##,4,QPS)#,L,S0S/#-$,TPS5#-<
+M,V0S;#-T,WPSA#.,,Y0SG#.D,ZPSM#.\,\0SS#/4,]PSY#/L,_0S_#,$-`PT
+M%#0<-"0T+#0T-#PT1#1,-%0T7#1D-&PT=#1\-(0TC#24-)PTI#2L-+0TO#3$
+M-,PTU#3<-.0T[#3T-/@^`#\(/Q`_&#\@/R@_,#\X/T`_2#]0/U@_8#]H/W`_
+M>#^`/X@_D#^8/Z`_J#^P/[@_P#_(/]`_V#_@/^@_\#_X/P"0`P"0`0```#`(
+M,!`P&#`@,"@P,#`X,$`P2#!0,%@P8#!H,'`P>#"`,(@PD#"8,*`PJ#"P,+@P
+MP##(,-`PV##@,.@P\##X,``Q"#$0,1@Q(#$H,3`Q.#%`,4@Q4#%8,6`Q:#%P
+M,7@Q@#&(,9`QF#&@,:@QL#&X,<`QR#'0,=@QX#'H,?`Q^#$`,@@R$#(8,B`R
+M*#(P,C@R0#)(,E`R6#)@,F@R<#)X,H`RB#*0,I@RH#*H,K`RN#+`,L@RT#+8
+M,N`RZ#+P,O@R`#,(,Q`S&#,@,R@S,#,X,T`S2#-0,U@S8#-H,W`S>#.`,X@S
+MD#.8,Z`SJ#.P,[@SP#/(,]`SV#/@,^@S\#/X,P`T"#00-!@T(#0H-#`T.#1`
+M-$@T4#18-&`T:#1P-'@T@#2(-)`TF#2@-*@TL#2X-,`TR#30--@TX#3H-/`T
+M^#0`-0@U$#48-2`U*#4P-3@U0#5(-5`U6#5@-6@U<#5X-8`UB#60-9@UH#6H
+M-;`UN#7`-<@UT#78->`UZ#7P-?@U`#8(-A`V````H`,`D`````HP#C`2,!8P
+MG#FD.:PYM#F\.<0YS#G4.=PYY#GL.?0Y_#D$.@PZ%#H<.B0Z+#HT.CPZ1#I,
+M.E0Z7#ID.FPZ=#I\.B`[)#LT.S@[0#M8.V@[;#M\.X`[B#N@.[`[M#O$.\@[
+MS#O4.^P[_#L`/!`\%#P8/!P\)#P\/$P\4#Q@/&0\:#QP/(@\````L`,`;`$`
+M`&`Q;#&0,;`QN#'`,<@QT#'8,>`Q[#$,,A@R.#)$,F0R<#*0,IPRP#+@,N@R
+M\#+X,@`S"#,0,Q@S)#-,,U0S7#-X,X`SB#.4,[0SO#/(,^@S]#,4-!PT*#1(
+M-%`T7#1\-(0TD#2P-+PTW#3H-`@U$#4<-4`U8#5H-7`U>#6`-8@UE#6T-<`U
+MX#7L-0PV&#8X-D0V:#:(-I`VF#:@-J@VL#:X-L`VS#;L-@`W"#<0-Q@W'#<D
+M-S@W3#=<-VPW=#>$-Y`WF#>\-\0WS#?<-^PW]#<(.!`X*#@T.%0X8#B8.+@X
+MU#C8./0X^#@4.1@Y(#DH.3`Y-#DX.4`Y5#EP.7@Y?#F8.:`YI#F\.<`YW#G@
+M.?`Y%#H@.B@Z5#I8.F`Z:#IP.G0Z?#J0.K`ZS#K0.O`Z^#K\.A@[.#M8.W@[
+MF#NX.]@[^#L8/#@\6#QX/)@\N#S8//@\!#T</2`]0#U@/8`]H#V\/<`]`.`#
+M`#P!``"`,%@Q9#%P,7PQB#&4,:`QK#&X,<0QT#'<,>@Q]#$`,@PR&#(D,C`R
+M/#)(,E0R8#)L,G@RA#*0,IPRJ#*T,L`RS#+8,N0R\#+\,@@S%#,@,RPS.#-$
+M,U`S7#-H,W0S@#.,,Y@SI#.P,[PSR#/4,^`S[#/X,P0T$#0<-"@T-#1`-$PT
+M6#1D-'`T?#2(-)0TH#2L-+@TQ#30--PTZ#3T-``U##48-20U,#4\-4@U5#5@
+M-6PU>#6$-9`UG#6H-;0UP#7,-=@UY#7P-?@U##88-APV(#8D-B@V+#8P-C0V
+M.#8\-D`V1#9(-DPV6#>(-Y@WJ#>X-\@WX#?L-_`W]#<0.!0X'#A`/5`]5#U8
+M/5P]8#UD/6@];#UP/70]@#V$/8@]C#V0/90]F#V</=`]Z#T$/B`^.#Y@/@`@
+M!@#``````#`$,`@P##`0,!0P&#`<,"`P)#`H,"PP-#`\,$`P1#!,,%`P5#!8
+M,%PP8#!D,&@P;#!T,'@P?#"`,(0PB#",,)`PF#"@,*0PJ#"L,+`PM#"X,+PP
+MP##$,,@PS##0,-0PV##<,.`PY##H,.PP\##T,/@P_#``,00Q"#$,,1`Q%#$8
+M,1PQ(#$D,2@Q+#$P,30Q.#$\,4`Q1#%(,4PQ4#%4,5@Q7#%@,60Q:#%L,70Q
+M>#%\,8`QA#$`````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````!287(A&@<!
+M`#.2M>4*`04&``4!`8"``/4["1PH`@,+@P`$@P`@TF-(B(````QT97-T+G1X
+;="YT>'0*`P),FW]/_;C7`3$R,QUW5E$#!00`
+`
+end
diff --git a/libarchive/test/test_read_format_rar5_window_buf_and_size_desync.rar.uu b/libarchive/test/test_read_format_rar5_window_buf_and_size_desync.rar.uu
new file mode 100644 (file)
index 0000000..9e7d20f
--- /dev/null
@@ -0,0 +1,11 @@
+begin 644 test_read_format_rar5_window_buf_and_size_desync.rar
+M4F%R(1H'`0`]/-[E`@$`_P$`1#[Z5P("`PL``BXB"?\`!(@B@0`)6.-AF?_1
+M^0DI&0GG(F%R(0<:)`!3@"KT`P+G(@O_X[\``#&``(?!!0$$[:L``$.M*E)A
+M<B$`O<\>P0";/P1%``A*2DI*2DYQ<6TN9'%*2DI*2DI*``!D<F--``````"Z
+MNC*ZNKJZNFYO=&%I;+JZNKJZNKJZOKJZ.KJZNKJZNKKZU@4%````0$!`0$!`
+M0$!`0$!`0$!`0$#_________/T#`0$!`0$!`-UM`0$!`0$!`0$!`0$!`0$!`
+M0$!`0'!,J+:O!IZ-WN4'@`!3*F0`````````````````````````````````
+M``````````````#T`P)287(A&@<!`%.`*O0#`N<B`_,F@`'[__\``(`4`01S
+J'`/H/O\H@?\D`#O9GIZ>GN<B"_]%``(``&1RGIZ>GIZ>8_^>GE/_``!.
+`
+end
diff --git a/libarchive/test/test_read_format_rar_filter.c b/libarchive/test/test_read_format_rar_filter.c
new file mode 100644 (file)
index 0000000..46c5747
--- /dev/null
@@ -0,0 +1,57 @@
+/*-
+ * Copyright (c) 2003-2021 Wei-Cheng Pan
+ * 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$");
+
+DEFINE_TEST(test_read_format_rar_filter)
+{
+    const char *refname = "test_read_format_rar_filter.rar";
+    struct archive *a;
+    struct archive_entry *ae;
+    char *buff[12];
+    const char signature[12] = {
+        0x4d, 0x5a, 0x90, 0x00,
+        0x03, 0x00, 0x00, 0x00,
+        0x04, 0x00, 0x00, 0x00,
+    };
+
+    extract_reference_file(refname);
+    assert((a = archive_read_new()) != NULL);
+    assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+    assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+    assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 10240));
+
+    assertA(0 == archive_read_next_header(a, &ae));
+    assertEqualString("bsdcat.exe", archive_entry_pathname(ae));
+    assertA((int)archive_entry_mtime(ae));
+    assertEqualInt(204288, archive_entry_size(ae));
+    assertA(12 == archive_read_data(a, buff, 12));
+    assertEqualMem(buff, signature, 12);
+
+    assertA(1 == archive_read_next_header(a, &ae));
+    assertEqualInt(1, archive_file_count(a));
+    assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+    assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/libarchive/test/test_read_format_rar_filter.rar.uu b/libarchive/test/test_read_format_rar_filter.rar.uu
new file mode 100644 (file)
index 0000000..fe08c6d
--- /dev/null
@@ -0,0 +1,2099 @@
+begin 664 test_read_format_rar_filter.rar
+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
+:72R]434OO)=-+STN,1U\CTC_TL0]>P!`!P``
+`
+end
diff --git a/libarchive/test/test_read_format_tar_invalid_pax_size.c b/libarchive/test/test_read_format_tar_invalid_pax_size.c
new file mode 100644 (file)
index 0000000..0a03cb6
--- /dev/null
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2020 Ben Wagner
+ * 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$");
+
+/*
+ * The pax size attribute can be used to override the size.
+ * It should be validated the same way the normal size is validated.
+ * The test data is fuzzer output from
+ * https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=48467 .
+ */
+DEFINE_TEST(test_read_format_tar_invalid_pax_size)
+{
+       /*
+        * An archive that contains a PAX 'size' record with a large negative value.
+        */
+       struct archive_entry *ae;
+       struct archive *a;
+       const char *refname = "test_read_format_tar_invalid_pax_size.tar";
+
+       extract_reference_file(refname);
+       assert((a = archive_read_new()) != NULL);
+       assertEqualInt(ARCHIVE_OK, archive_read_support_filter_all(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_support_format_all(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 10240));
+       /* This assert will pass a normal debug build without the pax size check. */
+       /* Run this test with `-fsanitize=undefined` to verify.                   */
+       assertEqualIntA(a, ARCHIVE_FATAL, archive_read_next_header(a, &ae));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
diff --git a/libarchive/test/test_read_format_tar_invalid_pax_size.tar.uu b/libarchive/test/test_read_format_tar_invalid_pax_size.tar.uu
new file mode 100644 (file)
index 0000000..71309ea
--- /dev/null
@@ -0,0 +1,38 @@
+begin 644 test_read_format_tar_invalid_pax_size.tar.uu
+M+B]087A(96%D97)S+C$T-#8S+V%A80``````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````#`P,#`V-#0`,#`P,#`P,``P,#`P,#`P`#`P,#`P,#`P,S$R
+M`#$R-3,Q,30U,S<Q`"`Q,30R,"`@>```````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````!U='-A<@`P,```````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````````S,"`@("`@(#T@("`@("`@("`@("`@("`@("`@
+M(`HS,"`@("`@(#T@("`@("`@("`@("`@("`@("`@(`HS,"`@("`@("`]("`@
+M("`@("`@("`@("`@("`@(`HS,"!S:7IE/2TQ.3<V.30Q,3$Q,S8U.3<R-S0S
+M-@H@("`@("`@("`@_R`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@____("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(&%A80``````````
+M````````````````````````````````````````````````````````````
+M```````````````````````````````````````````````````````````P
+M,#,P.#$V`#`S-S0U,S0`,#`Q,38Q,``P,#`P,#`P,#`P-P`Q,C4S,3$T-3,W
+M,``@,3(P-S$@(#$`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````=7-T87(`,#!D=GEU:V]V````````````````````````````````96YG
+M`````````````````````````/\!````````````````,#`Q`#`P,#`P,#`P
+M,#`P````````````````````````````````````````````````````]P``
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+&````````
+`
+end
index 424d6a0..6809641 100644 (file)
@@ -736,6 +736,134 @@ DEFINE_TEST(test_read_format_zip_bzip2_multi_blockread)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
 }
 
+DEFINE_TEST(test_read_format_zip_zstd_one_file)
+{
+       const char *refname = "test_read_format_zip_zstd.zipx";
+       struct archive *a;
+       struct archive_entry *ae;
+
+       assert((a = archive_read_new()) != NULL);
+       if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+               skipping("zstd is not fully supported on this platform");
+               archive_read_close(a);
+               archive_read_free(a);
+               return;
+       }
+       extract_reference_file(refname);
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+       assertEqualString("vimrc", archive_entry_pathname(ae));
+       assertEqualIntA(a, 0, extract_one(a, ae, 0xBA8E3BAA));
+       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));
+}
+
+DEFINE_TEST(test_read_format_zip_zstd_one_file_blockread)
+{
+       const char *refname = "test_read_format_zip_zstd.zipx";
+       struct archive *a;
+       struct archive_entry *ae;
+
+       assert((a = archive_read_new()) != NULL);
+       if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+               skipping("zstd is not fully supported on this platform");
+               archive_read_close(a);
+               archive_read_free(a);
+               return;
+       }
+       extract_reference_file(refname);
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+       assertEqualString("vimrc", archive_entry_pathname(ae));
+       assertEqualIntA(a, 0, extract_one_using_blocks(a, 13, 0xBA8E3BAA));
+       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));
+}
+
+DEFINE_TEST(test_read_format_zip_zstd_multi)
+{
+       const char *refname = "test_read_format_zip_zstd_multi.zipx";
+       struct archive *a;
+       struct archive_entry *ae;
+
+       assert((a = archive_read_new()) != NULL);
+       if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+               skipping("zstd is not fully supported on this platform");
+               archive_read_close(a);
+               archive_read_free(a);
+               return;
+       }
+       extract_reference_file(refname);
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+       assertEqualString("smartd.conf", archive_entry_pathname(ae));
+       assertEqualIntA(a, 0, extract_one(a, ae, 0x8DD7379E));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+       assertEqualString("ts.conf", archive_entry_pathname(ae));
+       assertEqualIntA(a, 0, extract_one(a, ae, 0x7AE59B31));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+       assertEqualString("vimrc", archive_entry_pathname(ae));
+       assertEqualIntA(a, 0, extract_one(a, ae, 0xBA8E3BAA));
+
+       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));
+}
+
+DEFINE_TEST(test_read_format_zip_zstd_multi_blockread)
+{
+       const char *refname = "test_read_format_zip_zstd_multi.zipx";
+       struct archive *a;
+       struct archive_entry *ae;
+
+       assert((a = archive_read_new()) != NULL);
+       if (ARCHIVE_OK != archive_read_support_filter_zstd(a)) {
+               skipping("zstd is not fully supported on this platform");
+               archive_read_close(a);
+               archive_read_free(a);
+               return;
+       }
+       extract_reference_file(refname);
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, refname, 37));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+       assertEqualString("smartd.conf", archive_entry_pathname(ae));
+       assertEqualIntA(a, 0, extract_one_using_blocks(a, 12, 0x8DD7379E));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+       assertEqualString("ts.conf", archive_entry_pathname(ae));
+       assertEqualIntA(a, 0, extract_one_using_blocks(a, 13, 0x7AE59B31));
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       assertEqualString("ZIP 2.0 (zstd)", archive_format_name(a));
+       assertEqualString("vimrc", archive_entry_pathname(ae));
+       assertEqualIntA(a, 0, extract_one_using_blocks(a, 14, 0xBA8E3BAA));
+
+       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));
+}
+
 DEFINE_TEST(test_read_format_zip_xz_multi)
 {
        const char *refname = "test_read_format_zip_xz_multi.zipx";
@@ -893,6 +1021,7 @@ DEFINE_TEST(test_read_format_zip_lzma_alone_leak)
        if(ARCHIVE_OK != archive_read_support_filter_lzma(a)) {
                skipping("lzma reading is not fully supported on this platform");
                archive_read_close(a);
+               archive_read_free(a);
                return;
        }
 
@@ -1004,6 +1133,7 @@ DEFINE_TEST(test_read_format_zip_7z_deflate)
        const char *refname = "test_read_format_zip_7z_deflate.zip";
        struct archive_entry *ae;
        struct archive *a;
+       int r;
 
        assert((a = archive_read_new()) != NULL);
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
@@ -1013,15 +1143,33 @@ DEFINE_TEST(test_read_format_zip_7z_deflate)
        assertEqualIntA(a, ARCHIVE_OK,
                archive_read_open_filename(a, refname, 10240));
        //read first symlink
-       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       r = archive_read_next_header(a, &ae);
+       if (archive_zlib_version() == NULL) {
+               assertEqualInt(ARCHIVE_FAILED, r);
+               assertEqualString(archive_error_string(a),
+                   "Unsupported ZIP compression method during decompression "
+                   "of link entry (8: deflation)");
+               assert(archive_errno(a) != 0);
+       } else {
+               assertEqualIntA(a, ARCHIVE_OK, r);
+               assertEqualString("libxkbcommon-x11.so.0.0.0",
+                       archive_entry_symlink(ae));
+       }
        assertEqualInt(AE_IFLNK, archive_entry_filetype(ae));
-       assertEqualString("libxkbcommon-x11.so.0.0.0",
-               archive_entry_symlink(ae));
        //read second symlink
-       assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+       r = archive_read_next_header(a, &ae);
+       if (archive_zlib_version() == NULL) {
+               assertEqualInt(ARCHIVE_FAILED, r);
+               assertEqualString(archive_error_string(a),
+                   "Unsupported ZIP compression method during decompression "
+                   "of link entry (8: deflation)");
+               assert(archive_errno(a) != 0);
+       } else {
+               assertEqualIntA(a, ARCHIVE_OK, r);
+               assertEqualString("libxkbcommon-x11.so.0.0.0",
+                       archive_entry_symlink(ae));
+       }
        assertEqualInt(AE_IFLNK, archive_entry_filetype(ae));
-       assertEqualString("libxkbcommon-x11.so.0.0.0",
-               archive_entry_symlink(ae));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_free(a));
 }
index cc1e311..3f54392 100644 (file)
@@ -115,7 +115,7 @@ test_winzip_aes(const char *refname, int need_libz)
        } else {
                assertEqualInt(ARCHIVE_FAILED, archive_read_data(a, buff, 19));
                assertEqualString(archive_error_string(a),
-                   "Unsupported ZIP compression method (deflation)");
+                   "Unsupported ZIP compression method (8: deflation)");
                assert(archive_errno(a) != 0);
        }
        
index 6c40ae7..f05e218 100644 (file)
@@ -143,7 +143,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
                assertEqualInt(ARCHIVE_FAILED,
                        archive_read_data(a, buff, sizeof(buff)));
                assertEqualString(archive_error_string(a),
-                   "Unsupported ZIP compression method (deflation)");
+                   "Unsupported ZIP compression method (8: deflation)");
                assert(archive_errno(a) != 0);
        }
 
@@ -161,7 +161,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
                assertEqualInt(ARCHIVE_FAILED,
                        archive_read_data(a, buff, sizeof(buff)));
                assertEqualString(archive_error_string(a),
-                   "Unsupported ZIP compression method (deflation)");
+                   "Unsupported ZIP compression method (8: deflation)");
                assert(archive_errno(a) != 0);
        }
 
@@ -179,7 +179,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
                assertEqualInt(ARCHIVE_FAILED,
                        archive_read_data(a, buff, sizeof(buff)));
                assertEqualString(archive_error_string(a),
-                   "Unsupported ZIP compression method (deflation)");
+                   "Unsupported ZIP compression method (8: deflation)");
                assert(archive_errno(a) != 0);
        }
 
@@ -197,7 +197,7 @@ DEFINE_TEST(test_read_format_zip_winzip_aes256_large)
                assertEqualInt(ARCHIVE_FAILED,
                        archive_read_data(a, buff, sizeof(buff)));
                assertEqualString(archive_error_string(a),
-                   "Unsupported ZIP compression method (deflation)");
+                   "Unsupported ZIP compression method (8: deflation)");
                assert(archive_errno(a) != 0);
        }
        
diff --git a/libarchive/test/test_read_format_zip_zstd.zipx.uu b/libarchive/test/test_read_format_zip_zstd.zipx.uu
new file mode 100644 (file)
index 0000000..58a2958
--- /dev/null
@@ -0,0 +1,18 @@
+begin 644 test_read_format_zip_zstd.zipx
+M4$L#!!0```!=`#TQD4VJ.XZZ&P(``)`#```%````=FEM<F,HM2_]`%B5$``F
+M*&PC(&_;!LR_L%[])MU@R?]OORW$@9`DQ+<"F#-&'$Y6"9""0&%E`%\`7@"1
+M7?FX:LJ\X?*WT9.43+L]A_#MKX7+T^E'CZM<W%N^:O@!SJ4,4TAA"BGIT&'%
+M\5.>I.97\6@M?/P$SA1R6+RFRUD<*@L-#!$.$A`-#!,!;_I.?CH\]WK(I'HJ
+MC1"P;([X:RD\"4NZL[X9?H=*YI9Q^9SUG`U"%GS.%'JF0M<\[PV?3#MR">63
+MU+);7<0EM,_'U]+(<VG*;PPLCBFD+)V*P',I<U:G]:N>)+7>.MS@IFGS.GUF
+M'S5\-@V=Y=MW6",,P^\(`,FALG&E(V`ZX;1&#G$;^?8[^=%R^:Q[GB1^JPZA
+M-SI]3O>XY5O/>)70LG3/QWO;L^DZJQ/Q)"5'6^UGS\CUT,:'[<)XDMY"B%WV
+MPK<V35TV@^>$('N2MJ]2M61L`\D@@2E$0?$HA-^YDM0T959VUCN4BS.J<-=[
+M6P)HFD)TO47V[FWT;?<:9=HN25KX&K(SA?9*P8'"=&]T1G?9G8^[AR>)P11R
+MY'H86B0%XTKA&U$O;*N]M,>LJ)E`K77)I'N2E`(B(!!&C.+TY**V^BU(V9R8
+M!ZLXW)6;"!YPP'E,4_F\OB!T"4Z:6/#"Z823+@5V#BNHGHC-+4@`)>?""C,)
+M2+G'/1,#D-1'B&&R288:'(KD,I>"_/85<Z&-7Q#VF647!5!+`0(_`Q0```!=
+M`#TQD4VJ.XZZ&P(``)`#```%``````````````"D@0````!V:6UR8U!+!08`
+1`````0`!`#,````^`@``````
+`
+end
diff --git a/libarchive/test/test_read_format_zip_zstd_multi.zipx.uu b/libarchive/test/test_read_format_zip_zstd_multi.zipx.uu
new file mode 100644 (file)
index 0000000..502024e
--- /dev/null
@@ -0,0 +1,94 @@
+begin 644 test_read_format_zip_zstd_multi.zipx
+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
+I``````````"D@08-``!V:6UR8U!+!08``````P`#`*$```!$#P``````
+`
+end
index 6966ccb..8dbf48d 100644 (file)
@@ -37,7 +37,6 @@ static unsigned char buff[11 * 1024 * 1024];
 /* Check correct behavior on large reads. */
 DEFINE_TEST(test_read_large)
 {
-       unsigned int i;
        int tmpfilefd;
        char tmpfilename[] = "test-read_large.XXXXXX";
        size_t used;
@@ -45,8 +44,7 @@ DEFINE_TEST(test_read_large)
        struct archive_entry *entry;
        FILE *f;
 
-       for (i = 0; i < sizeof(testdata); i++)
-               testdata[i] = (unsigned char)(rand());
+       fill_with_pseudorandom_data(testdata, sizeof(testdata));
 
        assert(NULL != (a = archive_write_new()));
        assertA(0 == archive_write_set_format_ustar(a));
index 1f6e78a..6a0bb9b 100644 (file)
@@ -48,8 +48,8 @@ DEFINE_TEST(test_read_pax_truncated)
        assert((ae = archive_entry_new()) != NULL);
        archive_entry_copy_pathname(ae, "file");
        archive_entry_set_mode(ae, S_IFREG | 0755);
-       for (i = 0; i < filedata_size; i++)
-               filedata[i] = (unsigned char)rand();
+       fill_with_pseudorandom_data(filedata, filedata_size);
+
        archive_entry_set_atime(ae, 1, 2);
        archive_entry_set_ctime(ae, 3, 4);
        archive_entry_set_mtime(ae, 5, 6);
index 3991ab2..1e760d7 100644 (file)
@@ -47,8 +47,7 @@ DEFINE_TEST(test_read_truncated)
        assert((ae = archive_entry_new()) != NULL);
        archive_entry_copy_pathname(ae, "file");
        archive_entry_set_mode(ae, S_IFREG | 0755);
-       for (i = 0; i < sizeof(buff2); i++)
-               buff2[i] = (unsigned char)rand();
+       fill_with_pseudorandom_data(buff2, sizeof(buff2));
        archive_entry_set_size(ae, sizeof(buff2));
        assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
        archive_entry_free(ae);
index 632638d..f85ccaa 100644 (file)
@@ -41,7 +41,7 @@ test_truncation(const char *compression,
        char path[16];
        char *buff, *data;
        size_t buffsize, datasize, used1;
-       int i, j, r, use_prog;
+       int i, r, use_prog;
 
        buffsize = 2000000;
        assert(NULL != (buff = (char *)malloc(buffsize)));
@@ -81,7 +81,7 @@ test_truncation(const char *compression,
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < 100; i++) {
-               sprintf(path, "%s%d", compression, i);
+               snprintf(path, sizeof(path), "%s%d", compression, i);
                archive_entry_copy_pathname(ae, path);
                failure("%s", path);
                if (!assertEqualIntA(a, ARCHIVE_OK,
@@ -91,9 +91,7 @@ test_truncation(const char *compression,
                        free(buff);
                        return;
                }
-               for (j = 0; j < (int)datasize; ++j) {
-                       data[j] = (char)(rand() % 256);
-               }
+               fill_with_pseudorandom_data(data, datasize);
                failure("%s", path);
                if (!assertEqualIntA(a, datasize,
                    archive_write_data(a, data, datasize))) {
@@ -111,8 +109,13 @@ test_truncation(const char *compression,
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
 
-       assertEqualIntA(a, ARCHIVE_OK,
-           archive_read_open_memory(a, buff, used1 - used1/64));
+       r = archive_read_open_memory(a, buff, used1 - used1/64);
+       if (r != ARCHIVE_OK) {
+               assertEqualStringA(a, "truncated bzip2 input",
+                   archive_error_string(a));
+                   goto out;
+       }
+
        for (i = 0; i < 100; i++) {
                if (ARCHIVE_OK != archive_read_next_header(a, &ae)) {
                        failure("Should have non-NULL error message for %s",
@@ -120,7 +123,7 @@ test_truncation(const char *compression,
                        assert(NULL != archive_error_string(a));
                        break;
                }
-               sprintf(path, "%s%d", compression, i);
+               snprintf(path, sizeof(path), "%s%d", compression, i);
                assertEqualString(path, archive_entry_pathname(ae));
                if (datasize != (size_t)archive_read_data(a, data, datasize)) {
                        failure("Should have non-NULL error message for %s",
@@ -133,6 +136,7 @@ test_truncation(const char *compression,
            archive_read_close(a));
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 
+out:
        free(data);
        free(buff);
 }
@@ -154,12 +158,12 @@ DEFINE_TEST(test_read_truncated_filter_gzip)
 
 DEFINE_TEST(test_read_truncated_filter_lzip)
 {
-       test_truncation("lzip", archive_write_add_filter_lzip, 0);
+       test_truncation("lzip", archive_write_add_filter_lzip, canLzip());
 }
 
 DEFINE_TEST(test_read_truncated_filter_lzma)
 {
-       test_truncation("lzma", archive_write_add_filter_lzma, 0);
+       test_truncation("lzma", archive_write_add_filter_lzma, canLzma());
 }
 
 DEFINE_TEST(test_read_truncated_filter_lzop)
@@ -169,5 +173,5 @@ DEFINE_TEST(test_read_truncated_filter_lzop)
 
 DEFINE_TEST(test_read_truncated_filter_xz)
 {
-       test_truncation("xz", archive_write_add_filter_xz, 0);
+       test_truncation("xz", archive_write_add_filter_xz, canXz());
 }
index afa0206..8221cec 100644 (file)
@@ -171,6 +171,8 @@ checker_free(struct checker *checker)
 {
         free(checker->shortbuf);
         free(checker->fullbuf);
+       archive_read_free(checker->short_archive);
+       archive_read_free(checker->full_archive);
         free(checker);
 }
 
index 43e87df..484c286 100644 (file)
@@ -253,8 +253,10 @@ is_sparse_supported(const char *path)
 #if defined(HAVE_LINUX_FIEMAP_H)
        if (r < 0)
                return (is_sparse_supported_fiemap(path));
-#endif
+       return (1);
+#else
        return (r >= 0);
+#endif
 }
 
 #elif !defined(HAVE_LINUX_FIEMAP_H)
@@ -364,9 +366,10 @@ verify_sparse_file(struct archive *a, const char *path,
 #if DEBUG
                        fprintf(stderr, "    overlapping hole expected_offset=%d, size=%d\n", (int)expected_offset, (int)sparse->size);
 #endif
-                       /* Must be a hole, overlap must be filled with '\0' */
-                       if (assert(sparse->type == HOLE)) {
+                       if (sparse->type == HOLE) {
                                assertMemoryFilledWith(start, end - start, '\0');
+                       } else if (assert(sparse->type == DATA)) {
+                               assertMemoryFilledWith(start, end - start, ' ');
                        }
                        start = end;
                        expected_offset += sparse->size;
@@ -410,9 +413,10 @@ verify_sparse_file(struct archive *a, const char *path,
 #if DEBUG
                        fprintf(stderr, "    trailing overlap expected_offset=%d, size=%d\n", (int)expected_offset, (int)sparse->size);
 #endif
-                       /* Must be a hole, overlap must be filled with '\0' */
-                       if (assert(sparse->type == HOLE)) {
+                       if (sparse->type == HOLE) {
                                assertMemoryFilledWith(start, end - start, '\0');
+                       } else if (assert(sparse->type == DATA)) {
+                               assertMemoryFilledWith(start, end - start, ' ');
                        }
                }
                last_offset = offset + bytes_read;
@@ -615,6 +619,33 @@ DEFINE_TEST(test_sparse_basic)
        verify_sparse_file2(a, "file0", sparse_file0, 5, 1);
 
        assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+       /*
+        * Test that setting ARCHIVE_READDISK_NO_SPARSE
+        * creates no sparse entries.
+        */
+       assert((a = archive_read_disk_new()) != NULL);
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_behavior(a,
+               ARCHIVE_READDISK_NO_SPARSE));
+
+       verify_sparse_file(a, "file0", sparse_file0, 0);
+       verify_sparse_file(a, "file1", sparse_file1, 0);
+       verify_sparse_file(a, "file2", sparse_file2, 0);
+       verify_sparse_file(a, "file3", sparse_file3, 0);
+       verify_sparse_file(a, "file4", sparse_file4, 0);
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+       assert((a = archive_read_disk_new()) != NULL);
+
+       assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_behavior(a,
+               ARCHIVE_READDISK_NO_SPARSE));
+
+       verify_sparse_file2(a, "file0", sparse_file0, 0, 0);
+       verify_sparse_file2(a, "file0", sparse_file0, 0, 1);
+
+       assertEqualInt(ARCHIVE_OK, archive_read_free(a));
        free(cwd);
 }
 
index 626f9f0..0da58aa 100644 (file)
@@ -224,7 +224,7 @@ DEFINE_TEST(test_tar_large)
         */
        for (i = 0; tests[i] != 0; i++) {
                assert((ae = archive_entry_new()) != NULL);
-               sprintf(namebuff, "file_%d", i);
+               snprintf(namebuff, sizeof(namebuff), "file_%d", i);
                archive_entry_copy_pathname(ae, namebuff);
                archive_entry_set_mode(ae, S_IFREG | 0755);
                filesize = tests[i];
@@ -271,7 +271,7 @@ DEFINE_TEST(test_tar_large)
         */
        for (i = 0; tests[i] > 0; i++) {
                assertEqualIntA(a, 0, archive_read_next_header(a, &ae));
-               sprintf(namebuff, "file_%d", i);
+               snprintf(namebuff, sizeof(namebuff), "file_%d", i);
                assertEqualString(namebuff, archive_entry_pathname(ae));
                assert(tests[i] == archive_entry_size(ae));
        }
index c399c98..b83b730 100644 (file)
@@ -47,26 +47,50 @@ DEFINE_TEST(test_write_disk_fixup)
        /*
         * Create a file
         */
-       assertMakeFile("victim", 0600, "a");
+       assertMakeFile("file", 0600, "a");
+
+       /*
+        * Create a directory
+        */
+       assertMakeDir("dir", 0700);
 
        /*
         * Create a directory and a symlink with the same name
         */
 
-       /* Directory: dir */
+       /* Directory: dir1 */
+        assert((ae = archive_entry_new()) != NULL);
+        archive_entry_copy_pathname(ae, "dir1/");
+        archive_entry_set_mode(ae, AE_IFDIR | 0555);
+       assertEqualIntA(ad, 0, archive_write_header(ad, ae));
+       assertEqualIntA(ad, 0, archive_write_finish_entry(ad));
+        archive_entry_free(ae);
+
+       /* Directory: dir2 */
         assert((ae = archive_entry_new()) != NULL);
-        archive_entry_copy_pathname(ae, "dir");
-        archive_entry_set_mode(ae, AE_IFDIR | 0606);
+        archive_entry_copy_pathname(ae, "dir2/");
+        archive_entry_set_mode(ae, AE_IFDIR | 0555);
        assertEqualIntA(ad, 0, archive_write_header(ad, ae));
        assertEqualIntA(ad, 0, archive_write_finish_entry(ad));
         archive_entry_free(ae);
 
-       /* Symbolic Link: dir -> foo */
+       /* Symbolic Link: dir1 -> dir */
+       assert((ae = archive_entry_new()) != NULL);
+       archive_entry_copy_pathname(ae, "dir1");
+       archive_entry_set_mode(ae, AE_IFLNK | 0777);
+       archive_entry_set_size(ae, 0);
+       archive_entry_copy_symlink(ae, "dir");
+       assertEqualIntA(ad, 0, r = archive_write_header(ad, ae));
+       if (r >= ARCHIVE_WARN)
+               assertEqualIntA(ad, 0, archive_write_finish_entry(ad));
+       archive_entry_free(ae);
+
+       /* Symbolic Link: dir2 -> file */
        assert((ae = archive_entry_new()) != NULL);
-       archive_entry_copy_pathname(ae, "dir");
+       archive_entry_copy_pathname(ae, "dir2");
        archive_entry_set_mode(ae, AE_IFLNK | 0777);
        archive_entry_set_size(ae, 0);
-       archive_entry_copy_symlink(ae, "victim");
+       archive_entry_copy_symlink(ae, "file");
        assertEqualIntA(ad, 0, r = archive_write_header(ad, ae));
        if (r >= ARCHIVE_WARN)
                assertEqualIntA(ad, 0, archive_write_finish_entry(ad));
@@ -75,7 +99,9 @@ DEFINE_TEST(test_write_disk_fixup)
        assertEqualInt(ARCHIVE_OK, archive_write_free(ad));
 
        /* Test the entries on disk. */
-       assertIsSymlink("dir", "victim", 0);
-       assertFileMode("victim", 0600);
+       assertIsSymlink("dir1", "dir", 0);
+       assertIsSymlink("dir2", "file", 0);
+       assertFileMode("dir", 0700);
+       assertFileMode("file", 0600);
 #endif
 }
index 08c725e..9b12d4c 100644 (file)
@@ -75,7 +75,7 @@ DEFINE_TEST(test_write_disk_secure744)
                archive_entry_free(ae);
 
                *p++ = '/';
-               sprintf(p, "target%d", n);
+               snprintf(p, buff_size - (p - buff), "target%d", n);
 
                /* Try to create a file through the symlink, should fail. */
                assert((ae = archive_entry_new()) != NULL);
index 5ce1fd9..99cb882 100644 (file)
@@ -39,9 +39,6 @@ __FBSDID("$FreeBSD$");
  */
 DEFINE_TEST(test_write_disk_secure746a)
 {
-#if defined(_WIN32) && !defined(__CYGWIN__)
-       skipping("archive_write_disk security checks not supported on Windows");
-#else
        struct archive *a;
        struct archive_entry *ae;
 
@@ -75,7 +72,6 @@ DEFINE_TEST(test_write_disk_secure746a)
 
        assertEqualIntA(a, ARCHIVE_FATAL, archive_write_close(a));
        archive_write_free(a);
-#endif
 }
 
 /*
index 665087b..5b917e9 100644 (file)
@@ -64,7 +64,7 @@ DEFINE_TEST(test_write_filter_b64encode)
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_set_filetype(ae, AE_IFREG);
                archive_entry_set_size(ae, datasize);
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -79,7 +79,7 @@ DEFINE_TEST(test_write_filter_b64encode)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used1));
        for (i = 0; i < 99; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualIntA(a, 0, archive_read_next_header(a, &ae)))
                        break;
                assertEqualString(path, archive_entry_pathname(ae));
@@ -111,7 +111,7 @@ DEFINE_TEST(test_write_filter_b64encode)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 99; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -128,7 +128,7 @@ DEFINE_TEST(test_write_filter_b64encode)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used2));
        for (i = 0; i < 99; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
                        break;
                assertEqualString(path, archive_entry_pathname(ae));
index 4f32d28..9e089c0 100644 (file)
@@ -83,7 +83,7 @@ DEFINE_TEST(test_write_filter_bzip2)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < 999; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -99,7 +99,7 @@ DEFINE_TEST(test_write_filter_bzip2)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_read_open_memory(a, buff, used1));
        for (i = 0; i < 999; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
                        break;
                assertEqualString(path, archive_entry_pathname(ae));
@@ -133,7 +133,7 @@ DEFINE_TEST(test_write_filter_bzip2)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 999; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -160,7 +160,7 @@ DEFINE_TEST(test_write_filter_bzip2)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_read_open_memory(a, buff, used2));
        for (i = 0; i < 999; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
                        break;
                assertEqualString(path, archive_entry_pathname(ae));
@@ -187,7 +187,7 @@ DEFINE_TEST(test_write_filter_bzip2)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 999; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -212,7 +212,7 @@ DEFINE_TEST(test_write_filter_bzip2)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_read_open_memory(a, buff, used2));
        for (i = 0; i < 999; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
                        break;
                assertEqualString(path, archive_entry_pathname(ae));
index 1b8910e..5cc0fc8 100644 (file)
@@ -59,7 +59,7 @@ DEFINE_TEST(test_write_filter_compress)
            archive_write_open_memory(a, buff, buffsize, &used));
 
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -83,7 +83,7 @@ DEFINE_TEST(test_write_filter_compress)
 
 
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
                        break;
                assertEqualString(path, archive_entry_pathname(ae));
index 935fb51..2b76162 100644 (file)
@@ -85,7 +85,7 @@ DEFINE_TEST(test_write_filter_gzip)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -113,7 +113,7 @@ DEFINE_TEST(test_write_filter_gzip)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used1));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -148,7 +148,7 @@ DEFINE_TEST(test_write_filter_gzip)
            archive_write_set_options(a, "gzip:compression-level=9"));
        assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -187,7 +187,7 @@ DEFINE_TEST(test_write_filter_gzip)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -212,7 +212,7 @@ DEFINE_TEST(test_write_filter_gzip)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -249,7 +249,7 @@ DEFINE_TEST(test_write_filter_gzip)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
index f28c835..2efc2ec 100644 (file)
@@ -68,7 +68,7 @@ DEFINE_TEST(test_write_filter_lrzip)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -84,7 +84,7 @@ DEFINE_TEST(test_write_filter_lrzip)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_read_open_memory(a, buff, used1));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualInt(ARCHIVE_OK,
                        archive_read_next_header(a, &ae)))
                        break;
index 4f2135a..071fee4 100644 (file)
@@ -84,7 +84,7 @@ DEFINE_TEST(test_write_filter_lz4)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < filecount; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -107,7 +107,7 @@ DEFINE_TEST(test_write_filter_lz4)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_read_open_memory(a, buff, used1));
        for (i = 0; i < filecount; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualInt(ARCHIVE_OK,
                        archive_read_next_header(a, &ae)))
                        break;
@@ -142,7 +142,7 @@ DEFINE_TEST(test_write_filter_lz4)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < filecount; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -170,7 +170,7 @@ DEFINE_TEST(test_write_filter_lz4)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < filecount; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -195,7 +195,7 @@ DEFINE_TEST(test_write_filter_lz4)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < filecount; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -225,7 +225,7 @@ DEFINE_TEST(test_write_filter_lz4)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < filecount; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -330,7 +330,7 @@ test_options(const char *options)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < filecount; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -350,7 +350,7 @@ test_options(const char *options)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used1));
                for (i = 0; i < filecount; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
index 145a308..ce70a5d 100644 (file)
@@ -81,7 +81,7 @@ DEFINE_TEST(test_write_filter_lzip)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -103,7 +103,7 @@ DEFINE_TEST(test_write_filter_lzip)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used1));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -133,7 +133,7 @@ DEFINE_TEST(test_write_filter_lzip)
            archive_write_set_filter_option(a, NULL, "compression-level", "9"));
        assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -157,7 +157,7 @@ DEFINE_TEST(test_write_filter_lzip)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        failure("Trying to read %s", path);
                        if (!assertEqualIntA(a, ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
@@ -181,7 +181,7 @@ DEFINE_TEST(test_write_filter_lzip)
            archive_write_set_filter_option(a, NULL, "compression-level", "0"));
        assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -210,7 +210,7 @@ DEFINE_TEST(test_write_filter_lzip)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
index 68e4898..d055333 100644 (file)
@@ -80,7 +80,7 @@ DEFINE_TEST(test_write_filter_lzma)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -102,7 +102,7 @@ DEFINE_TEST(test_write_filter_lzma)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used1));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -132,7 +132,7 @@ DEFINE_TEST(test_write_filter_lzma)
            archive_write_set_filter_option(a, NULL, "compression-level", "9"));
        assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -156,7 +156,7 @@ DEFINE_TEST(test_write_filter_lzma)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        failure("Trying to read %s", path);
                        if (!assertEqualIntA(a, ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
@@ -180,7 +180,7 @@ DEFINE_TEST(test_write_filter_lzma)
            archive_write_set_filter_option(a, NULL, "compression-level", "0"));
        assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -214,7 +214,7 @@ DEFINE_TEST(test_write_filter_lzma)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
index 92db7bf..18fc332 100644 (file)
@@ -79,7 +79,7 @@ DEFINE_TEST(test_write_filter_lzop)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < filecount; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -99,7 +99,7 @@ DEFINE_TEST(test_write_filter_lzop)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used1));
                for (i = 0; i < filecount; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -135,7 +135,7 @@ DEFINE_TEST(test_write_filter_lzop)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < filecount; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -163,7 +163,7 @@ DEFINE_TEST(test_write_filter_lzop)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < filecount; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -188,7 +188,7 @@ DEFINE_TEST(test_write_filter_lzop)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < filecount; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -218,7 +218,7 @@ DEFINE_TEST(test_write_filter_lzop)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < filecount; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
index 57a4b49..2ce5b89 100644 (file)
@@ -64,7 +64,7 @@ DEFINE_TEST(test_write_filter_uuencode)
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_set_filetype(ae, AE_IFREG);
                archive_entry_set_size(ae, datasize);
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -79,7 +79,7 @@ DEFINE_TEST(test_write_filter_uuencode)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used1));
        for (i = 0; i < 99; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualIntA(a, 0, archive_read_next_header(a, &ae)))
                        break;
                assertEqualString(path, archive_entry_pathname(ae));
@@ -111,7 +111,7 @@ DEFINE_TEST(test_write_filter_uuencode)
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 99; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -128,7 +128,7 @@ DEFINE_TEST(test_write_filter_uuencode)
        assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
        assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, buff, used2));
        for (i = 0; i < 99; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                if (!assertEqualInt(0, archive_read_next_header(a, &ae)))
                        break;
                assertEqualString(path, archive_entry_pathname(ae));
index bf1265c..e2f1ec8 100644 (file)
@@ -80,7 +80,7 @@ DEFINE_TEST(test_write_filter_xz)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -102,7 +102,7 @@ DEFINE_TEST(test_write_filter_xz)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used1));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -132,7 +132,7 @@ DEFINE_TEST(test_write_filter_xz)
            archive_write_set_filter_option(a, NULL, "compression-level", "9"));
        assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -163,7 +163,7 @@ DEFINE_TEST(test_write_filter_xz)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        failure("Trying to read %s", path);
                        if (!assertEqualIntA(a, ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
@@ -187,7 +187,7 @@ DEFINE_TEST(test_write_filter_xz)
            archive_write_set_filter_option(a, NULL, "compression-level", "0"));
        assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -220,7 +220,7 @@ DEFINE_TEST(test_write_filter_xz)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
index b5f061a..3cdbd81 100644 (file)
@@ -74,7 +74,7 @@ DEFINE_TEST(test_write_filter_zstd)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize
@@ -96,7 +96,7 @@ DEFINE_TEST(test_write_filter_zstd)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used1));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        if (!assertEqualInt(ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
                                break;
@@ -129,9 +129,46 @@ DEFINE_TEST(test_write_filter_zstd)
            archive_write_set_filter_option(a, NULL, "compression-level", "-1")); */
        assertEqualIntA(a, ARCHIVE_OK,
            archive_write_set_filter_option(a, NULL, "compression-level", "7"));
+       assertEqualIntA(a, ARCHIVE_FAILED,
+           archive_write_set_filter_option(a, NULL, "threads", "-1")); /* negative */
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_write_set_filter_option(a, NULL, "threads", "4"));
+#if HAVE_ZSTD_H && HAVE_LIBZSTD_COMPRESSOR
+       /* frame-per-file: boolean */
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_write_set_filter_option(a, NULL, "frame-per-file", ""));
+       /* min-frame-size: >= 0 */
+       assertEqualIntA(a, ARCHIVE_FAILED,
+           archive_write_set_filter_option(a, NULL, "min-frame-size", ""));
+       assertEqualIntA(a, ARCHIVE_FAILED,
+           archive_write_set_filter_option(a, NULL, "min-frame-size", "-1"));
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_write_set_filter_option(a, NULL, "min-frame-size", "0"));
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_write_set_filter_option(a, NULL, "min-frame-size", "1048576"));
+       /* max-frame-size: >= 1024 */
+       assertEqualIntA(a, ARCHIVE_FAILED,
+           archive_write_set_filter_option(a, NULL, "max-frame-size", ""));
+       assertEqualIntA(a, ARCHIVE_FAILED,
+           archive_write_set_filter_option(a, NULL, "max-frame-size", "-1"));
+       assertEqualIntA(a, ARCHIVE_FAILED,
+           archive_write_set_filter_option(a, NULL, "max-frame-size", "0"));
+       assertEqualIntA(a, ARCHIVE_FAILED,
+           archive_write_set_filter_option(a, NULL, "max-frame-size", "1023"));
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_write_set_filter_option(a, NULL, "max-frame-size", "1024"));
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_write_set_filter_option(a, NULL, "max-frame-size", "1048576"));
+#endif
+#if ZSTD_VERSION_NUMBER >= MINVER_LONG
+       assertEqualIntA(a, ARCHIVE_OK,
+           archive_write_set_filter_option(a, NULL, "long", "27"));
+       assertEqualIntA(a, ARCHIVE_FAILED,
+           archive_write_set_filter_option(a, NULL, "long", "-1")); /* negative */
+#endif
        assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, buff, buffsize, &used2));
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                assert((ae = archive_entry_new()) != NULL);
                archive_entry_copy_pathname(ae, path);
                archive_entry_set_size(ae, datasize);
@@ -154,7 +191,7 @@ DEFINE_TEST(test_write_filter_zstd)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used2));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        failure("Trying to read %s", path);
                        if (!assertEqualIntA(a, ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
@@ -181,7 +218,7 @@ DEFINE_TEST(test_write_filter_zstd)
        archive_entry_set_filetype(ae, AE_IFREG);
        archive_entry_set_size(ae, datasize);
        for (i = 0; i < 100; i++) {
-               sprintf(path, "file%03d", i);
+               snprintf(path, sizeof(path), "file%03d", i);
                archive_entry_copy_pathname(ae, path);
                assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
                assertA(datasize == (size_t)archive_write_data(a, data, datasize));
@@ -201,7 +238,7 @@ DEFINE_TEST(test_write_filter_zstd)
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_open_memory(a, buff, used3));
                for (i = 0; i < 100; i++) {
-                       sprintf(path, "file%03d", i);
+                       snprintf(path, sizeof(path), "file%03d", i);
                        failure("Trying to read %s", path);
                        if (!assertEqualIntA(a, ARCHIVE_OK,
                                archive_read_next_header(a, &ae)))
index 5c49f59..b7a90d1 100644 (file)
@@ -27,7 +27,7 @@
 #include "test.h"
 __FBSDID("$FreeBSD$");
 
-#define LARGE_SIZE     (16*1024*1024)
+#define LARGE_SIZE     (1*1024*1024)
 static void
 test_large(const char *compression_type)
 {
@@ -37,7 +37,6 @@ test_large(const char *compression_type)
        size_t buffsize = LARGE_SIZE + 1024 * 256;
        size_t datasize = LARGE_SIZE;
        char *buff, *filedata, *filedata2;
-       unsigned i;
 
        assert((buff = malloc(buffsize)) != NULL);
        assert((filedata = malloc(datasize)) != NULL);
@@ -87,8 +86,7 @@ test_large(const char *compression_type)
                /* NOTE: PPMd cannot handle random data correctly.*/
                memset(filedata, 'a', datasize);
        } else {
-               for (i = 0; i < datasize; i++)
-                       filedata[i] = (char)rand();
+               fill_with_pseudorandom_data(filedata, datasize);
        }
        assertEqualInt(datasize, archive_write_data(a, filedata, datasize));
 
index c969a41..b52d170 100644 (file)
@@ -128,12 +128,22 @@ static void verify_uncompressed_contents(const char *buff, size_t used)
 
        /* Misc variables */
        unsigned long crc;
-       struct tm *tm = localtime(&now);
-
+       struct tm *tm;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+       struct tm tmbuf;
+#endif
        /* p is the pointer to walk over the central directory,
         * q walks over the local headers, the data and the data descriptors. */
        const char *p, *q, *local_header, *extra_start;
 
+#if defined(HAVE_LOCALTIME_S)
+       tm = localtime_s(&tmbuf, &now) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+       tm = localtime_r(&now, &tmbuf);
+#else
+       tm = localtime(&now);
+#endif
+
        /* Remember the end of the archive in memory. */
        buffend = buff + used;
 
diff --git a/libarchive/test/test_write_format_zip_entry_size_unset.c b/libarchive/test/test_write_format_zip_entry_size_unset.c
new file mode 100644 (file)
index 0000000..13b5f1b
--- /dev/null
@@ -0,0 +1,321 @@
+/*-
+ * Copyright (c) 2021 Jia Cheong Tan
+ * 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
+ *    in this position and unchanged.
+ * 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$");
+
+/* File data */
+static const char file_name[] = "file";
+static const char file_data1[] = {'a', 'b', 'c', 'd', 'e'};
+static const char file_data2[] = {'f', 'g', 'h', 'i', 'j'};
+static const int file_perm = 00644;
+static const short file_uid = 10;
+static const short file_gid = 20;
+
+/* Folder data */
+static const char folder_name[] = "folder/";
+static const int folder_perm = 00755;
+static const short folder_uid = 30;
+static const short folder_gid = 40;
+
+#define ZIP_ENTRY_FLAG_LENGTH_AT_END (1 << 3)
+
+/* Quick and dirty: Read 2-byte and 4-byte integers from Zip file. */
+static unsigned i2(const char *p) { return ((p[0] & 0xff) | ((p[1] & 0xff) << 8)); }
+static unsigned i4(const char *p) { return (i2(p) | (i2(p + 2) << 16)); }
+
+static unsigned long
+bitcrc32(unsigned long c, const void *_p, size_t s)
+{
+       /* This is a drop-in replacement for crc32() from zlib.
+        * Libarchive should be able to correctly generate
+        * uncompressed zip archives (including correct CRCs) even
+        * when zlib is unavailable, and this function helps us verify
+        * that.  Yes, this is very, very slow and unsuitable for
+        * production use, but it's correct, compact, and works well
+        * enough for this particular usage.  Libarchive internally
+        * uses a much more efficient implementation.  */
+       const unsigned char *p = _p;
+       int bitctr;
+
+       if (p == NULL)
+               return (0);
+
+       for (; s > 0; --s)
+       {
+               c ^= *p++;
+               for (bitctr = 8; bitctr > 0; --bitctr)
+               {
+                       if (c & 1)
+                               c = (c >> 1);
+                       else
+                               c = (c >> 1) ^ 0xedb88320;
+                       c ^= 0x80000000;
+               }
+       }
+       return (c);
+}
+
+static void write_archive(struct archive *a)
+{
+       struct archive_entry *entry = archive_entry_new();
+       assert(entry != NULL);
+
+       /* Does not set size for file entry */
+       archive_entry_set_pathname(entry, file_name);
+       archive_entry_set_mode(entry, S_IFREG | 0644);
+       archive_entry_set_uid(entry, file_uid);
+       archive_entry_set_gid(entry, file_gid);
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, entry));
+       assertEqualIntA(a, sizeof(file_data1), archive_write_data(a, file_data1, sizeof(file_data1)));
+       assertEqualIntA(a, sizeof(file_data2), archive_write_data(a, file_data2, sizeof(file_data2)));
+       archive_entry_free(entry);
+
+       /* Folder */
+       assert((entry = archive_entry_new()) != NULL);
+       archive_entry_set_pathname(entry, folder_name);
+       archive_entry_set_mode(entry, S_IFDIR | folder_perm);
+       archive_entry_set_size(entry, 0);
+       archive_entry_set_uid(entry, folder_uid);
+       archive_entry_set_gid(entry, folder_gid);
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, entry));
+       archive_entry_free(entry);
+}
+
+static void verify_contents(const char *zip_buff, size_t size)
+{
+       unsigned long crc = bitcrc32(0, file_data1, sizeof(file_data1));
+       crc = bitcrc32(crc, file_data2, sizeof(file_data2));
+
+       const char *zip_end = zip_buff + size;
+       /* Since there are no comments, the end of central directory
+    *  is 22 bytes from the end of content */
+       const char *end_of_central_dir = zip_end - 22;
+       /* Check for end of central directory signature */
+       assertEqualMem(end_of_central_dir, "PK\x5\x6", 4);
+       /* Check for number of disk */
+       assertEqualInt(i2(end_of_central_dir + 4), 0);
+       /* Check for disk where central directory starts */
+       assertEqualInt(i2(end_of_central_dir + 6), 0);
+       /* Check for number of central directory records on disk */
+       assertEqualInt(i2(end_of_central_dir + 8), 2);
+       /* Check for total number of central directory records */
+       assertEqualInt(i2(end_of_central_dir + 10), 2);
+       /* Check for size of central directory and offset
+    *  The size + offset must equal the end of the central directory */
+       assertEqualInt(i4(end_of_central_dir + 12) + i4(end_of_central_dir + 16), end_of_central_dir - zip_buff);
+       /* Check for empty comment length */
+       assertEqualInt(i2(end_of_central_dir + 20), 0);
+
+       /* Get address of central directory */
+       const char *central_directory = zip_buff + i4(end_of_central_dir + 16);
+
+       /* Check for entry in central directory signature */
+       assertEqualMem(central_directory, "PK\x1\x2", 4);
+       /* Check for version used to write entry */
+       assertEqualInt(i2(central_directory + 4), 3 * 256 + 10);
+       /* Check for version needed to extract entry */
+       assertEqualInt(i2(central_directory + 6), 10);
+       /* Check flags */
+       assertEqualInt(i2(central_directory + 8), ZIP_ENTRY_FLAG_LENGTH_AT_END);
+       /* Check compression method */
+       assertEqualInt(i2(central_directory + 10), 0);
+       /* Check crc value */
+       assertEqualInt(i4(central_directory + 16), crc);
+       /* Check compressed size*/
+       assertEqualInt(i4(central_directory + 20), sizeof(file_data1) + sizeof(file_data2));
+       /* Check uncompressed size */
+       assertEqualInt(i4(central_directory + 24), sizeof(file_data1) + sizeof(file_data2));
+       /* Check file name length */
+       assertEqualInt(i2(central_directory + 28), strlen(file_name));
+       /* Check extra field length */
+       assertEqualInt(i2(central_directory + 30), 20);
+       /* Check file comment length */
+       assertEqualInt(i2(central_directory + 32), 0);
+       /* Check disk number where file starts */
+       assertEqualInt(i2(central_directory + 34), 0);
+       /* Check internal file attrs */
+       assertEqualInt(i2(central_directory + 36), 0);
+       /* Check external file attrs */
+       assertEqualInt(i4(central_directory + 38) >> 16 & 01777, file_perm);
+       /* Check offset of local header */
+       assertEqualInt(i4(central_directory + 42), 0);
+       /* Check for file name contents */
+       assertEqualMem(central_directory + 46, file_name, strlen(file_name));
+
+       /* Get address of local file entry */
+       const char *local_file_header = zip_buff;
+
+       /* Check local file header signature */
+       assertEqualMem(local_file_header, "PK\x3\x4", 4);
+       /* Check version needed to extract */
+       assertEqualInt(i2(local_file_header + 4), 10);
+       /* Check flags */
+       assertEqualInt(i2(local_file_header + 6), 8);
+       /* Check compression method */
+       assertEqualInt(i2(local_file_header + 8), 0);
+       /* Check crc */
+       assertEqualInt(i4(local_file_header + 14), 0);
+       /* Check compressed size
+    *  0 because it was unknown at time of writing */
+       assertEqualInt(i4(local_file_header + 18), 0);
+       /* Check uncompressed size
+    *  0 because it was unknown at time of writing */
+       assertEqualInt(i4(local_file_header + 22), 0);
+       /* Check pathname length */
+       assertEqualInt(i2(local_file_header + 26), strlen(file_name));
+       /* Check extra field length */
+       assertEqualInt(i2(local_file_header + 28), 20);
+       /* Check path name match */
+       assertEqualMem(local_file_header + 30, file_name, strlen(file_name));
+
+       /* Start of data */
+       const char *data = local_file_header + i2(local_file_header + 28) + strlen(file_name) + 30;
+       /* Check for file data match */
+       assertEqualMem(data, file_data1, sizeof(file_data1));
+       assertEqualMem(data + sizeof(file_data1), file_data2, sizeof(file_data2));
+
+       /* Start of data descriptor */
+       const char *data_descriptor = data + sizeof(file_data1) + sizeof(file_data2);
+       /* Check data descriptor signature */
+       assertEqualMem(data_descriptor, "PK\x7\x8", 4);
+       /* Check crc value */
+       assertEqualInt(i4(data_descriptor + 4), crc);
+       /* Check compressed size */
+       assertEqualInt(i4(data_descriptor + 8), sizeof(file_data1) + sizeof(file_data2));
+       /* Chcek uncompresed size */
+       assertEqualInt(i4(data_descriptor + 12), sizeof(file_data1) + sizeof(file_data2));
+
+       /* Get folder entry in central directory */
+       const char *central_directory_folder_entry = central_directory + 46 + 20 + strlen(file_name);
+
+       /* Get start of folder entry */
+       const char *local_folder_header = data_descriptor + 16;
+
+       /* Check for entry in central directory signature */
+       assertEqualMem(central_directory_folder_entry, "PK\x1\x2", 4);
+       /* Check version made by */
+       assertEqualInt(i2(central_directory_folder_entry + 4), 3 * 256 + 20);
+       /* Check version needed to extract */
+       assertEqualInt(i2(central_directory_folder_entry + 6), 20);
+       /* Check flags */
+       assertEqualInt(i2(central_directory_folder_entry + 8), 0);
+       /* Check compression method */
+       assertEqualInt(i2(central_directory_folder_entry + 10), 0);
+       /* Check crc */
+       assertEqualInt(i2(central_directory_folder_entry + 16), 0);
+       /* Check compressed size */
+       assertEqualInt(i4(central_directory_folder_entry + 20), 0);
+       /* Check uncompressed size */
+       assertEqualInt(i4(central_directory_folder_entry + 24), 0);
+       /* Check path name length */
+       assertEqualInt(i2(central_directory_folder_entry + 28), strlen(folder_name));
+       /* Check extra field length */
+       assertEqualInt(i2(central_directory_folder_entry + 30), 20);
+       /* Check file comment length */
+       assertEqualInt(i2(central_directory_folder_entry + 32), 0);
+       /* Check disk number start */
+       assertEqualInt(i2(central_directory_folder_entry + 34), 0);
+       /* Check internal file attrs */
+       assertEqualInt(i2(central_directory_folder_entry + 36), 0);
+       /* Check external file attrs */
+       assertEqualInt(i4(central_directory_folder_entry + 38) >> 16 & 01777, folder_perm);
+       /* Check offset of local header*/
+       assertEqualInt(i4(central_directory_folder_entry + 42), local_folder_header - zip_buff);
+       /* Check path name */
+       assertEqualMem(central_directory_folder_entry + 46, folder_name, strlen(folder_name));
+
+       /* Check local header */
+       assertEqualMem(local_folder_header, "PK\x3\x4", 4);
+       /* Check version to extract */
+       assertEqualInt(i2(local_folder_header + 4), 20);
+       /* Check flags */
+       assertEqualInt(i2(local_folder_header + 6), 0);
+       /* Check compression method */
+       assertEqualInt(i2(local_folder_header + 8), 0);
+       /* Check crc */
+       assertEqualInt(i4(local_folder_header + 14), 0);
+       /* Check compressed size */
+       assertEqualInt(i2(local_folder_header + 18), 0);
+       /* Check uncompressed size */
+       assertEqualInt(i4(local_folder_header + 22), 0);
+       /* Check path name length */
+       assertEqualInt(i2(local_folder_header + 26), strlen(folder_name));
+       /* Check extra field length */
+       assertEqualInt(i2(local_folder_header + 28), 20);
+       /* Check path name */
+       assertEqualMem(local_folder_header + 30, folder_name, strlen(folder_name));
+
+       const char *post_local_folder = local_folder_header + 30 + strlen(folder_name) + 20;
+       assertEqualMem(post_local_folder, central_directory, 4);
+}
+
+DEFINE_TEST(test_write_format_zip_size_unset)
+{
+       struct archive *a;
+       char zip_buffer[100000];
+       size_t size;
+
+       /* Use compression=store to disable compression. */
+       assert((a = archive_write_new()) != NULL);
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_options(a, "zip:compression=store"));
+       /* Disable zip64 explicitly since it is automatically enabled if no size is set */
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_options(a, "zip:zip64="));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_per_block(a, 1));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_in_last_block(a, 1));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, zip_buffer, sizeof(zip_buffer), &size));
+
+       write_archive(a);
+
+       /* Close the archive . */
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+       dumpfile("constructed_size_unset.zip", zip_buffer, size);
+
+       verify_contents(zip_buffer, size);
+
+       /* Use compression-level=0 to disable compression. */
+       assert((a = archive_write_new()) != NULL);
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_options(a, "zip:compression-level=0"));
+       /* Disable zip64 explicitly since it is automatically enabled if no size is set */
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_options(a, "zip:zip64="));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_add_filter_none(a));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_per_block(a, 1));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_set_bytes_in_last_block(a, 1));
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_open_memory(a, zip_buffer, sizeof(zip_buffer), &size));
+
+       write_archive(a);
+
+       /* Close the archive . */
+       assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+       assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+       dumpfile("constructed_size_unset.zip", zip_buffer, size);
+
+       verify_contents(zip_buffer, size);
+}
index 2868123..4ccc303 100644 (file)
@@ -73,7 +73,10 @@ DEFINE_TEST(test_write_format_zip_file)
        struct archive *a;
        struct archive_entry *ae;
        time_t t = 1234567890;
-       struct tm *tm = localtime(&t);
+       struct tm *tm;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+       struct tm tmbuf;
+#endif
        size_t used, buffsize = 1000000;
        unsigned long crc;
        int file_perm = 00644;
@@ -91,6 +94,13 @@ DEFINE_TEST(test_write_format_zip_file)
        zip_compression = 0;
 #endif
 
+#if defined(HAVE_LOCALTIME_S)
+       tm = localtime_s(&tmbuf, &t) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+       tm = localtime_r(&t, &tmbuf);
+#else
+       tm = localtime(&t);
+#endif
        buff = malloc(buffsize);
 
        /* Create a new archive in memory. */
index 71da986..6a00fe1 100644 (file)
@@ -75,7 +75,10 @@ DEFINE_TEST(test_write_format_zip_file_zip64)
        struct archive *a;
        struct archive_entry *ae;
        time_t t = 1234567890;
-       struct tm *tm = localtime(&t);
+       struct tm *tm;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+       struct tm tmbuf;
+#endif
        size_t used, buffsize = 1000000;
        unsigned long crc;
        int file_perm = 00644;
@@ -92,6 +95,13 @@ DEFINE_TEST(test_write_format_zip_file_zip64)
        zip_compression = 0;
 #endif
 
+#if defined(HAVE_LOCALTIME_S)
+       tm = localtime_s(&tmbuf, &t) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+       tm = localtime_r(&t, &tmbuf);
+#else
+       tm = localtime(&t);
+#endif
        buff = malloc(buffsize);
 
        /* Create a new archive in memory. */
index 2f98c6d..e3594c9 100644 (file)
@@ -309,7 +309,7 @@ verify_large_zip(struct archive *a, struct fileblocks *fileblocks)
        for (i = 0; test_sizes[i] > 0; i++) {
                assertEqualIntA(a, ARCHIVE_OK,
                    archive_read_next_header(a, &ae));
-               sprintf(namebuff, "file_%d", i);
+               snprintf(namebuff, sizeof(namebuff), "file_%d", i);
                assertEqualString(namebuff, archive_entry_pathname(ae));
                assertEqualInt(test_sizes[i], archive_entry_size(ae));
        }
@@ -359,7 +359,7 @@ DEFINE_TEST(test_write_format_zip_large)
         */
        for (i = 0; test_sizes[i] != 0; i++) {
                assert((ae = archive_entry_new()) != NULL);
-               sprintf(namebuff, "file_%d", i);
+               snprintf(namebuff, sizeof(namebuff), "file_%d", i);
                archive_entry_copy_pathname(ae, namebuff);
                archive_entry_set_mode(ae, S_IFREG | 0755);
                filesize = test_sizes[i];
index f96e9d9..beacd23 100644 (file)
@@ -149,6 +149,10 @@ typedef struct _U32_S { U32 v; } _PACKED U32_S;
 
 #if GCC_VERSION >= 409
 __attribute__((__no_sanitize_undefined__))
+#else
+#  if defined(__clang__)
+__attribute__((no_sanitize("undefined")))
+#  endif
 #endif
 #if defined(_MSC_VER)
 static __inline U32 A32(const void * x)
index edf72d1..1cae6a7 100644 (file)
@@ -171,8 +171,10 @@ readpassphrase(const char *prompt, char *buf, size_t bufsiz, int flags)
        int input, output, save_errno, i, need_restart;
        char ch, *p, *end;
        struct termios term, oterm;
+#ifdef HAVE_SIGACTION
        struct sigaction sa, savealrm, saveint, savehup, savequit, saveterm;
        struct sigaction savetstp, savettin, savettou, savepipe;
+#endif
 
        /* I suppose we could alloc on demand in this case (XXX). */
        if (bufsiz == 0) {
@@ -221,6 +223,7 @@ restart:
                oterm.c_lflag |= ECHO;
        }
 
+#ifdef HAVE_SIGACTION
        /*
         * Catch signals that would otherwise cause the user to end
         * up with echo turned off in the shell.  Don't worry about
@@ -239,6 +242,7 @@ restart:
        (void)sigaction(SIGTSTP, &sa, &savetstp);
        (void)sigaction(SIGTTIN, &sa, &savettin);
        (void)sigaction(SIGTTOU, &sa, &savettou);
+#endif
 
        if (!(flags & RPP_STDIN)) {
                int r = write(output, prompt, strlen(prompt));
@@ -276,6 +280,7 @@ restart:
                        continue;
                signo[SIGTTOU] = sigttou;
        }
+#ifdef HAVE_SIGACTION
        (void)sigaction(SIGALRM, &savealrm, NULL);
        (void)sigaction(SIGHUP, &savehup, NULL);
        (void)sigaction(SIGINT, &saveint, NULL);
@@ -285,6 +290,7 @@ restart:
        (void)sigaction(SIGTSTP, &savetstp, NULL);
        (void)sigaction(SIGTTIN, &savettin, NULL);
        (void)sigaction(SIGTTOU, &savettou, NULL);
+#endif
        if (input != STDIN_FILENO)
                (void)close(input);
 
index 86a06bb..1b78fbc 100644 (file)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd January 31, 2020
+.Dd December 1, 2022
 .Dt TAR 1
 .Os
 .Sh NAME
@@ -470,6 +470,11 @@ This is the reverse of
 and the default behavior if
 .Nm
 is run as non-root in x mode.
+.It Fl Fl no-read-sparse
+(c, r, u modes only)
+Do not read sparse file information from disk.
+This is the reverse of
+.Fl Fl read-sparse .
 .It Fl Fl no-safe-writes
 (x mode only)
 Do not create temporary files and use
@@ -633,10 +638,33 @@ a compression dictionary to improve compression ratio.
 .It Cm zstd:compression-level
 A decimal integer specifying the zstd compression level. Supported values depend
 on the library version, common values are from 1 to 22.
+.It Cm zstd:threads
+Specify the number of worker threads to use.
+Setting threads to a special value 0 makes
+.Xr zstd 1
+use as many threads as there are CPU cores on the system.
+.It Cm zstd:frame-per-file
+Start a new compression frame at the beginning of each file in the
+archive.
+.It Cm zstd:min-frame-size Ns = Ns Ar N
+In combination with
+.Cm zstd:frame-per-file ,
+do not start a new compression frame unless the current frame is at least
+.Ar N
+bytes.
+.It Cm zstd:max-frame-size Ns = Ns Ar N
+Start a new compression frame as soon as the current frame exceeds
+.Ar N
+bytes.
 .It Cm lzop:compression-level
 A decimal integer from 1 to 9 specifying the lzop compression level.
 .It Cm xz:compression-level
 A decimal integer from 0 to 9 specifying the xz compression level.
+.It Cm xz:threads
+Specify the number of worker threads to use.
+Setting threads to a special value 0 makes
+.Xr xz 1
+use as many threads as there are CPU cores on the system.
 .It Cm mtree: Ns Ar keyword
 The mtree writer module allows you to specify which mtree keywords
 will be included in the output.
@@ -730,6 +758,12 @@ By default, the archive is always read to the very end, since
 there can be multiple entries with the same name and, by convention,
 later entries overwrite earlier entries.
 This option is provided as a performance optimization.
+.It Fl Fl read-sparse
+(c, r, u modes only)
+Read sparse file information from disk.
+This is the reverse of
+.Fl Fl no-read-sparse
+and the default behavior.
 .It Fl S
 (x mode only)
 Extract files as sparse files.
@@ -932,7 +966,7 @@ archives.
 .Sh ENVIRONMENT
 The following environment variables affect the execution of
 .Nm :
-.Bl -tag -width ".Ev BLOCKSIZE"
+.Bl -tag -width indent
 .It Ev TAR_READER_OPTIONS
 The default options for format readers and compression readers.
 The
index af41be5..75249d1 100644 (file)
@@ -70,24 +70,20 @@ __FBSDID("$FreeBSD: src/usr.bin/tar/bsdtar.c,v 1.93 2008/11/08 04:43:24 kientzle
 #include "bsdtar.h"
 #include "err.h"
 
-/*
- * Per POSIX.1-1988, tar defaults to reading/writing archives to/from
- * the default tape device for the system.  Pick something reasonable here.
- */
-#ifdef __linux
-#define        _PATH_DEFTAPE "/dev/st0"
+#if ARCHIVE_VERSION_NUMBER < 4000000 && !defined(_PATH_DEFTAPE)
+// Libarchive 4.0 and later will NOT define _PATH_DEFTAPE
+// but will honor it if it's set in the build.
+// Until then, we'll continue to set it by default on certain platforms:
+#if defined(__linux)
+#define _PATH_DEFTAPE "/dev/st0"
+#elif defined(_WIN32) && !defined(__CYGWIN__)
+#define _PATH_DEFTAPE "\\\\.\\tape0"
+#elif !defined(__APPLE__)
+#define _PATH_DEFTAPE "/dev/tape"
 #endif
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#define        _PATH_DEFTAPE "\\\\.\\tape0"
-#endif
-#if defined(__APPLE__)
-#undef _PATH_DEFTAPE
-#define        _PATH_DEFTAPE "-"  /* Mac OS has no tape support, default to stdio. */
 #endif
 
-#ifndef _PATH_DEFTAPE
-#define        _PATH_DEFTAPE "/dev/tape"
-#endif
+#define _PATH_STDIO "-"
 
 #ifdef __MINGW32__
 int _CRT_glob = 0; /* Disable broken CRT globbing. */
@@ -217,8 +213,21 @@ main(int argc, char **argv)
 
        /* Default: open tape drive. */
        bsdtar->filename = getenv("TAPE");
-       if (bsdtar->filename == NULL)
-               bsdtar->filename = _PATH_DEFTAPE;
+#if defined(_PATH_DEFTAPE)
+       if (bsdtar->filename == NULL) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+               int tapeExists = !_access(_PATH_DEFTAPE, 0);
+#else
+               int tapeExists = !access(_PATH_DEFTAPE, F_OK);
+#endif
+               if (tapeExists) {
+                       bsdtar->filename = _PATH_DEFTAPE;
+               }
+       }
+#endif
+       if (bsdtar->filename == NULL) {
+               bsdtar->filename = _PATH_STDIO;
+       }
 
        /* Default block size settings. */
        bsdtar->bytes_per_block = DEFAULT_BYTES_PER_BLOCK;
@@ -542,6 +551,10 @@ main(int argc, char **argv)
                        bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_MAC_METADATA;
                        bsdtar->flags |= OPTFLAG_NO_MAC_METADATA;
                        break;
+               case OPTION_NO_READ_SPARSE:
+                       bsdtar->readdisk_flags |= ARCHIVE_READDISK_NO_SPARSE;
+                       bsdtar->flags |= OPTFLAG_NO_READ_SPARSE;
+                       break;
                case OPTION_NO_SAFE_WRITES:
                        bsdtar->extract_flags &= ~ARCHIVE_EXTRACT_SAFE_WRITES;
                        break;
@@ -649,6 +662,10 @@ main(int argc, char **argv)
                case 'r': /* SUSv2 */
                        set_mode(bsdtar, opt);
                        break;
+               case OPTION_READ_SPARSE:
+                       bsdtar->readdisk_flags &= ~ARCHIVE_READDISK_NO_SPARSE;
+                       bsdtar->flags |= OPTFLAG_READ_SPARSE;
+                       break;
                case 'S': /* NetBSD pax-as-tar */
                        bsdtar->extract_flags |= ARCHIVE_EXTRACT_SPARSE;
                        break;
@@ -796,8 +813,14 @@ main(int argc, char **argv)
                    "Must specify one of -c, -r, -t, -u, -x");
 
        /* Check boolean options only permitted in certain modes. */
-       if (bsdtar->flags & OPTFLAG_AUTO_COMPRESS)
-               only_mode(bsdtar, "-a", "c");
+       if (bsdtar->flags & OPTFLAG_AUTO_COMPRESS) {
+               only_mode(bsdtar, "-a", "cx");
+               if (bsdtar->mode == 'x') {
+                       bsdtar->flags &= ~OPTFLAG_AUTO_COMPRESS;
+                       lafe_warnc(0,
+                           "Ignoring option -a in mode -x");
+               }
+       }
        if (bsdtar->readdisk_flags & ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS)
                only_mode(bsdtar, "--one-file-system", "cru");
        if (bsdtar->flags & OPTFLAG_FAST_READ)
index 89aa3aa..8f9f79a 100644 (file)
@@ -129,6 +129,8 @@ struct bsdtar {
 #define        OPTFLAG_FFLAGS          (0x00100000)    /* --fflags */
 #define        OPTFLAG_NO_MAC_METADATA (0x00200000)    /* --no-mac-metadata */
 #define        OPTFLAG_MAC_METADATA    (0x00400000)    /* --mac-metadata */
+#define        OPTFLAG_NO_READ_SPARSE  (0x00800000)    /* --no-read-sparse */
+#define        OPTFLAG_READ_SPARSE             (0x01000000)    /* --read-sparse */
 
 /* Fake short equivalents for long options that otherwise lack them. */
 enum {
@@ -164,6 +166,7 @@ enum {
        OPTION_NO_ACLS,
        OPTION_NO_FFLAGS,
        OPTION_NO_MAC_METADATA,
+       OPTION_NO_READ_SPARSE,
        OPTION_NO_SAFE_WRITES,
        OPTION_NO_SAME_OWNER,
        OPTION_NO_SAME_PERMISSIONS,
@@ -178,6 +181,7 @@ enum {
        OPTION_OPTIONS,
        OPTION_PASSPHRASE,
        OPTION_POSIX,
+       OPTION_READ_SPARSE,
        OPTION_SAFE_WRITES,
        OPTION_SAME_OWNER,
        OPTION_STRIP_COMPONENTS,
index b80937f..d49e5b0 100644 (file)
@@ -122,6 +122,7 @@ static const struct bsdtar_option {
        { "no-acls",              0, OPTION_NO_ACLS },
        { "no-fflags",            0, OPTION_NO_FFLAGS },
        { "no-mac-metadata",      0, OPTION_NO_MAC_METADATA },
+       { "no-read-sparse",       0, OPTION_NO_READ_SPARSE },
        { "no-recursion",         0, 'n' },
        { "no-safe-writes",       0, OPTION_NO_SAFE_WRITES },
        { "no-same-owner",        0, OPTION_NO_SAME_OWNER },
@@ -145,6 +146,7 @@ static const struct bsdtar_option {
        { "posix",                0, OPTION_POSIX },
        { "preserve-permissions", 0, 'p' },
        { "read-full-blocks",     0, 'B' },
+       { "read-sparse",          0, OPTION_READ_SPARSE },
        { "safe-writes",          0, OPTION_SAFE_WRITES },
        { "same-owner",           0, OPTION_SAME_OWNER },
        { "same-permissions",     0, 'p' },
index bdc607d..cfc5a64 100644 (file)
@@ -95,7 +95,7 @@ get_format_code(const char *suffix)
                { ".7z",        "7zip" },
                { ".ar",        "arbsd" },
                { ".cpio",      "cpio" },
-               { ".iso",       "iso9960" },
+               { ".iso",       "iso9660" },
                { ".mtree",     "mtree" },
                { ".shar",      "shar" },
                { ".tar",       "paxr" },
index 658c810..b959966 100644 (file)
@@ -371,10 +371,9 @@ read_archive(struct bsdtar *bsdtar, char mode, struct archive *writer)
                                r = archive_read_extract2(a, entry, writer);
                        if (r != ARCHIVE_OK) {
                                if (!bsdtar->verbose)
-                                       safe_fprintf(stderr, "%s",
-                                           archive_entry_pathname(entry));
-                               safe_fprintf(stderr, ": %s",
-                                   archive_error_string(a));
+                                       safe_fprintf(stderr, "%s", archive_entry_pathname(entry));
+                               fprintf(stderr, ": %s: ", archive_error_string(a));
+                               fprintf(stderr, "%s", strerror(errno));
                                if (!bsdtar->verbose)
                                        fprintf(stderr, "\n");
                                bsdtar->return_value = 1;
index 39c54ac..55ad63d 100644 (file)
@@ -320,6 +320,7 @@ cleanup_substitution(struct bsdtar *bsdtar)
        while ((rule = subst->first_rule) != NULL) {
                subst->first_rule = rule->next;
                free(rule->result);
+               regfree(&rule->re);
                free(rule);
        }
        free(subst);
index 2cd573a..3b66753 100644 (file)
@@ -44,6 +44,7 @@ IF(ENABLE_TAR AND ENABLE_TEST)
     test_option_fflags.c
     test_option_gid_gname.c
     test_option_grzip.c
+    test_option_ignore_zeros.c
     test_option_j.c
     test_option_k.c
     test_option_keep_newer_files.c
index 379b8a3..e52b7f2 100644 (file)
@@ -29,6 +29,11 @@ DEFINE_TEST(test_option_fflags)
 DEFINE_TEST(test_option_gid_gname)
 DEFINE_TEST(test_option_grzip)
 DEFINE_TEST(test_option_H_upper)
+DEFINE_TEST(test_option_ignore_zeros_mode_t)
+DEFINE_TEST(test_option_ignore_zeros_mode_x)
+DEFINE_TEST(test_option_ignore_zeros_mode_c)
+DEFINE_TEST(test_option_ignore_zeros_mode_r)
+DEFINE_TEST(test_option_ignore_zeros_mode_u)
 DEFINE_TEST(test_option_j)
 DEFINE_TEST(test_option_k)
 DEFINE_TEST(test_option_keep_newer_files)
index d618e45..b8175c3 100644 (file)
@@ -160,21 +160,21 @@ create_tree(void)
                failure("Internal sanity check failed: i = %d", i);
                assert(filenames[i] != NULL);
 
-               sprintf(buff, "f/%s", filenames[i]);
+               snprintf(buff, sizeof(buff), "f/%s", filenames[i]);
                assertMakeFile(buff, 0777, buff);
 
                /* Create a link named "l/abcdef..." to the above. */
-               sprintf(buff2, "l/%s", filenames[i]);
+               snprintf(buff2, sizeof(buff2), "l/%s", filenames[i]);
                assertMakeHardlink(buff2, buff);
 
                /* Create a link named "m/abcdef..." to the above. */
-               sprintf(buff2, "m/%s", filenames[i]);
+               snprintf(buff2, sizeof(buff2), "m/%s", filenames[i]);
                assertMakeHardlink(buff2, buff);
 
                if (canSymlink()) {
                        /* Create a symlink named "s/abcdef..." to the above. */
-                       sprintf(buff, "s/%s", filenames[i]);
-                       sprintf(buff2, "../f/%s", filenames[i]);
+                       snprintf(buff, sizeof(buff), "s/%s", filenames[i]);
+                       snprintf(buff2, sizeof(buff2), "../f/%s", filenames[i]);
                        failure("buff=\"%s\" buff2=\"%s\"", buff, buff2);
                        assertMakeSymlink(buff, buff2, 0);
                }
@@ -202,13 +202,13 @@ verify_tree(size_t limit)
        /* Generate the names we know should be there and verify them. */
        for (i = 1; i < LOOP_MAX; i++) {
                /* Verify a file named "f/abcdef..." */
-               sprintf(name1, "f/%s", filenames[i]);
+               snprintf(name1, sizeof(name1), "f/%s", filenames[i]);
                if (i <= limit) {
                        assertFileExists(name1);
                        assertFileContents(name1, (int)strlen(name1), name1);
                }
 
-               sprintf(name2, "l/%s", filenames[i]);
+               snprintf(name2, sizeof(name2), "l/%s", filenames[i]);
                if (i + 2 <= limit) {
                        /* Verify hardlink "l/abcdef..." */
                        assertIsHardlink(name1, name2);
@@ -219,14 +219,14 @@ verify_tree(size_t limit)
 
                if (canSymlink()) {
                        /* Verify symlink "s/abcdef..." */
-                       sprintf(name1, "s/%s", filenames[i]);
-                       sprintf(name2, "../f/%s", filenames[i]);
+                       snprintf(name1, sizeof(name1), "s/%s", filenames[i]);
+                       snprintf(name2, sizeof(name2), "../f/%s", filenames[i]);
                        if (strlen(name2) <= limit)
                                assertIsSymlink(name1, name2, 0);
                }
 
                /* Verify dir "d/abcdef...". */
-               sprintf(name1, "d/%s", filenames[i]);
+               snprintf(name1, sizeof(name1), "d/%s", filenames[i]);
                if (i + 1 <= limit) { /* +1 for trailing slash */
                        if (assertIsDir(name1, -1)) {
                                /* TODO: opendir/readdir this
index 0eee80d..d1b75e3 100644 (file)
@@ -30,15 +30,17 @@ __FBSDID("$FreeBSD$");
 DEFINE_TEST(test_option_b)
 {
        char *testprog_ustar;
+       size_t testprog_ustar_len;
 
        assertMakeFile("file1", 0644, "file1");
        if (systemf("cat file1 > test_cat.out 2> test_cat.err") != 0) {
                skipping("This test requires a `cat` program");
                return;
        }
-       testprog_ustar = malloc(strlen(testprog) + sizeof(USTAR_OPT) + 1);
-       strcpy(testprog_ustar, testprog);
-       strcat(testprog_ustar, USTAR_OPT);
+       testprog_ustar_len = strlen(testprog) + sizeof(USTAR_OPT) + 1;
+       testprog_ustar = malloc(testprog_ustar_len);
+       strncpy(testprog_ustar, testprog, testprog_ustar_len);
+       strncat(testprog_ustar, USTAR_OPT, testprog_ustar_len);
 
        /*
         * Bsdtar does not pad if the output is going directly to a disk file.
diff --git a/tar/test/test_option_ignore_zeros.c b/tar/test/test_option_ignore_zeros.c
new file mode 100644 (file)
index 0000000..26c9320
--- /dev/null
@@ -0,0 +1,147 @@
+/*-
+ * Copyright (c) 2021 Ryan Libby
+ * 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
+ *    in this position and unchanged.
+ * 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$");
+
+static int
+make_files(void)
+{
+       int ret;
+
+       assertMakeDir("in", 0755);
+       assertMakeDir("out", 0755);
+       assertMakeFile("in/a", 0644, "a");
+       assertMakeFile("in/b", 0644, "b");
+       assertMakeFile("in/c", 0644, "c");
+       assertEqualInt(0, systemf("%s cf a.tar -C in a", testprog));
+       assertEqualInt(0, systemf("%s cf b.tar -C in b", testprog));
+       /* An archive formed with cat, and readable with --ignore-zeros. */
+       ret = systemf("cat a.tar b.tar > ab-cat.tar");
+       if (ret != 0) {
+               skipping("This test requires a `cat` program");
+               return (ret);
+       }
+
+       return (0);
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_t)
+{
+       if (make_files())
+               return;
+
+       /* Generate expected t-mode output. */
+       assertEqualInt(0, systemf(
+           "%s cf ab-norm.tar -C in a b > norm-c.out 2> norm-c.err",
+           testprog));
+       assertEmptyFile("norm-c.err");
+       assertEmptyFile("norm-c.out");
+       assertEqualInt(0, systemf(
+           "%s tf ab-norm.tar > norm-t.out 2> norm-t.err",
+           testprog));
+       assertEmptyFile("norm-t.err");
+
+       /* Test output. */
+       assertEqualInt(0, systemf(
+           "%s tf ab-cat.tar --ignore-zeros > test.out 2> test.err",
+           testprog));
+       assertEmptyFile("test.err");
+
+       assertEqualFile("test.out", "norm-t.out");
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_x)
+{
+       if (make_files())
+               return;
+
+       assertEqualInt(0, systemf(
+           "%s xf ab-cat.tar --ignore-zeros -C out > test.out 2> test.err",
+           testprog));
+       assertEmptyFile("test.err");
+       assertEmptyFile("test.out");
+
+       assertEqualFile("out/a", "in/a");
+       assertEqualFile("out/b", "in/b");
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_c)
+{
+       if (make_files())
+               return;
+
+       assertEqualInt(0, systemf(
+           "%s cf abc.tar --ignore-zeros @ab-cat.tar -C in c "
+           "> test-c.out 2> test-c.err",
+           testprog));
+       assertEmptyFile("test-c.err");
+       assertEmptyFile("test-c.out");
+
+       assertEqualInt(0, systemf(
+           "%s xf abc.tar -C out > test-x.out 2> test-x.err",
+           testprog));
+       assertEmptyFile("test-x.err");
+       assertEmptyFile("test-x.out");
+
+       assertEqualFile("out/a", "in/a");
+       assertEqualFile("out/b", "in/b");
+       assertEqualFile("out/c", "in/c");
+}
+
+static void
+test_option_ignore_zeros_mode_ru(const char *mode)
+{
+       if (make_files())
+               return;
+
+       assertEqualInt(0, systemf(
+           "%s %sf ab-cat.tar --ignore-zeros -C in c "
+           "> test-ru.out 2> test-ru.err",
+           testprog, mode));
+       assertEmptyFile("test-ru.err");
+       assertEmptyFile("test-ru.out");
+
+       assertEqualInt(0, systemf(
+           "%s xf ab-cat.tar --ignore-zeros -C out "
+           "> test-x.out 2> test-x.err",
+           testprog));
+       assertEmptyFile("test-x.err");
+       assertEmptyFile("test-x.out");
+
+       assertEqualFile("out/a", "in/a");
+       assertEqualFile("out/b", "in/b");
+       assertEqualFile("out/c", "in/c");
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_r)
+{
+       test_option_ignore_zeros_mode_ru("r");
+}
+
+DEFINE_TEST(test_option_ignore_zeros_mode_u)
+{
+       test_option_ignore_zeros_mode_ru("u");
+}
index a618ff8..ab6f13f 100644 (file)
@@ -44,6 +44,7 @@ DEFINE_TEST(test_option_lzma)
                if (strstr(p, "Unsupported compression") != NULL) {
                        skipping("This version of bsdtar was compiled "
                            "without lzma support");
+                       free(p);
                        return;
                }
                failure("--lzma option is broken");
index 8ebec64..403d7ff 100644 (file)
@@ -63,7 +63,7 @@ __FBSDID("$FreeBSD: src/usr.bin/tar/util.c,v 1.23 2008/12/15 06:00:25 kientzle E
 #include "err.h"
 #include "passphrase.h"
 
-static size_t  bsdtar_expand_char(char *, size_t, char);
+static size_t  bsdtar_expand_char(char *, size_t, size_t, char);
 static const char *strip_components(const char *path, int elements);
 
 #if defined(_WIN32) && !defined(__CYGWIN__)
@@ -173,12 +173,12 @@ safe_fprintf(FILE *f, const char *fmt, ...)
                                /* Not printable, format the bytes. */
                                while (n-- > 0)
                                        i += (unsigned)bsdtar_expand_char(
-                                           outbuff, i, *p++);
+                                           outbuff, sizeof(outbuff), i, *p++);
                        }
                } else {
                        /* After any conversion failure, don't bother
                         * trying to convert the rest. */
-                       i += (unsigned)bsdtar_expand_char(outbuff, i, *p++);
+                       i += (unsigned)bsdtar_expand_char(outbuff, sizeof(outbuff), i, *p++);
                        try_wc = 0;
                }
 
@@ -200,7 +200,7 @@ safe_fprintf(FILE *f, const char *fmt, ...)
  * Render an arbitrary sequence of bytes into printable ASCII characters.
  */
 static size_t
-bsdtar_expand_char(char *buff, size_t offset, char c)
+bsdtar_expand_char(char *buff, size_t buffsize, size_t offset, char c)
 {
        size_t i = offset;
 
@@ -221,7 +221,7 @@ bsdtar_expand_char(char *buff, size_t offset, char c)
                case '\v': buff[i++] = 'v'; break;
                case '\\': buff[i++] = '\\'; break;
                default:
-                       sprintf(buff + i, "%03o", 0xFF & (int)c);
+                       snprintf(buff + i, buffsize - i, "%03o", 0xFF & (int)c);
                        i += 3;
                }
        }
@@ -309,11 +309,12 @@ set_chdir(struct bsdtar *bsdtar, const char *newdir)
                /* The -C /foo -C bar case; concatenate */
                char *old_pending = bsdtar->pending_chdir;
                size_t old_len = strlen(old_pending);
-               bsdtar->pending_chdir = malloc(old_len + strlen(newdir) + 2);
+        size_t new_len = old_len + strlen(newdir) + 2;
+               bsdtar->pending_chdir = malloc(new_len);
                if (old_pending[old_len - 1] == '/')
                        old_pending[old_len - 1] = '\0';
                if (bsdtar->pending_chdir != NULL)
-                       sprintf(bsdtar->pending_chdir, "%s/%s",
+                       snprintf(bsdtar->pending_chdir, new_len, "%s/%s",
                            old_pending, newdir);
                free(old_pending);
        }
@@ -667,13 +668,9 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
        time_t                   tim;
        static time_t            now;
        struct tm               *ltime;
-#if defined(HAVE_LOCALTIME_R) || defined(HAVE__LOCALTIME64_S)
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
        struct tm               tmbuf;
 #endif
-#if defined(HAVE__LOCALTIME64_S)
-       errno_t                 terr;
-       __time64_t              tmptime;
-#endif
 
        /*
         * We avoid collecting the entire list in memory at once by
@@ -695,7 +692,7 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
        /* Use uname if it's present, else uid. */
        p = archive_entry_uname(entry);
        if ((p == NULL) || (*p == '\0')) {
-               sprintf(tmp, "%lu ",
+               snprintf(tmp, sizeof(tmp), "%lu ",
                    (unsigned long)archive_entry_uid(entry));
                p = tmp;
        }
@@ -710,7 +707,7 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
                fprintf(out, "%s", p);
                w = strlen(p);
        } else {
-               sprintf(tmp, "%lu",
+               snprintf(tmp, sizeof(tmp), "%lu",
                    (unsigned long)archive_entry_gid(entry));
                w = strlen(tmp);
                fprintf(out, "%s", tmp);
@@ -723,7 +720,7 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
         */
        if (archive_entry_filetype(entry) == AE_IFCHR
            || archive_entry_filetype(entry) == AE_IFBLK) {
-               sprintf(tmp, "%lu,%lu",
+               snprintf(tmp, sizeof(tmp), "%lu,%lu",
                    (unsigned long)archive_entry_rdevmajor(entry),
                    (unsigned long)archive_entry_rdevminor(entry));
        } else {
@@ -745,15 +742,10 @@ list_item_verbose(struct bsdtar *bsdtar, FILE *out, struct archive_entry *entry)
                fmt = bsdtar->day_first ? DAY_FMT " %b  %Y" : "%b " DAY_FMT "  %Y";
        else
                fmt = bsdtar->day_first ? DAY_FMT " %b %H:%M" : "%b " DAY_FMT " %H:%M";
-#if defined(HAVE_LOCALTIME_R)
+#if defined(HAVE_LOCALTIME_S)
+       ltime = localtime_s(&tmbuf, &tim) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
        ltime = localtime_r(&tim, &tmbuf);
-#elif defined(HAVE__LOCALTIME64_S)
-       tmptime = tim;
-       terr = _localtime64_s(&tmbuf, &tmptime);
-       if (terr)
-               ltime = NULL;
-       else
-               ltime = &tmbuf;
 #else
        ltime = localtime(&tim);
 #endif
index 09c44a3..d3e4ca4 100644 (file)
@@ -196,6 +196,10 @@ set_reader_options(struct bsdtar *bsdtar, struct archive *a)
                else
                        archive_clear_error(a);
        }
+       if (bsdtar->flags & OPTFLAG_IGNORE_ZEROS)
+               if (archive_read_set_options(a,
+                   "read_concatenated_archives") != ARCHIVE_OK)
+                       lafe_errc(1, 0, "%s", archive_error_string(a));
 }
 
 void
@@ -690,6 +694,8 @@ append_archive(struct bsdtar *bsdtar, struct archive *a, struct archive *ina)
        while (ARCHIVE_OK == (e = archive_read_next_header(ina, &in_entry))) {
                if (archive_match_excluded(bsdtar->matching, in_entry))
                        continue;
+               if(edit_pathname(bsdtar, in_entry))
+                       continue;
                if ((bsdtar->flags & OPTFLAG_INTERACTIVE) &&
                    !yes("copy '%s'", archive_entry_pathname(in_entry)))
                        continue;
index 42119c0..6250235 100644 (file)
@@ -471,4 +471,6 @@ void assertVersion(const char *prog, const char *base);
 #include <dmalloc.h>
 #endif
 
+#include "test_utils.h"
+
 #endif /* TEST_COMMON_H */
index c1c03cd..e4b884e 100644 (file)
@@ -327,7 +327,7 @@ my_GetFileInformationByName(const char *path, BY_HANDLE_FILE_INFORMATION *bhfi)
        int r;
 
        memset(bhfi, 0, sizeof(*bhfi));
-       h = CreateFile(path, FILE_READ_ATTRIBUTES, 0, NULL,
+       h = CreateFileA(path, FILE_READ_ATTRIBUTES, 0, NULL,
                OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
        if (h == INVALID_HANDLE_VALUE)
                return (0);
@@ -426,7 +426,7 @@ failure(const char *fmt, ...)
                nextmsg = NULL;
        } else {
                va_start(ap, fmt);
-               vsprintf(msgbuff, fmt, ap);
+               vsnprintf(msgbuff, sizeof(msgbuff), fmt, ap);
                va_end(ap);
                nextmsg = msgbuff;
        }
@@ -551,7 +551,7 @@ test_skipping(const char *fmt, ...)
        va_list ap;
 
        va_start(ap, fmt);
-       vsprintf(buff, fmt, ap);
+       vsnprintf(buff, sizeof(buff), fmt, ap);
        va_end(ap);
        /* Use failure() message if set. */
        msg = nextmsg;
@@ -1432,7 +1432,7 @@ assertion_file_time(const char *file, int line,
        /* Note: FILE_FLAG_BACKUP_SEMANTICS applies to open
         * a directory file. If not, CreateFile() will fail when
         * the pathname is a directory. */
-       h = CreateFile(pathname, FILE_READ_ATTRIBUTES, 0, NULL,
+       h = CreateFileA(pathname, FILE_READ_ATTRIBUTES, 0, NULL,
            OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
        if (h == INVALID_HANDLE_VALUE) {
                failure_start(file, line, "Can't access %s\n", pathname);
@@ -1970,7 +1970,12 @@ assertion_make_file(const char *file, int line,
                failure_finish(NULL);
                return (0);
        }
-       if (0 != chmod(path, mode)) {
+#ifdef HAVE_FCHMOD
+       if (0 != fchmod(fd, mode))
+#else
+       if (0 != chmod(path, mode))
+#endif
+       {
                failure_start(file, line, "Could not chmod %s", path);
                failure_finish(NULL);
                close(fd);
@@ -2340,7 +2345,7 @@ static void assert_version_id(char **qq, size_t *ss)
                q += 3;
                s -= 3;
        }
-       
+
        /* Skip a single trailing a,b,c, or d. */
        if (*q == 'a' || *q == 'b' || *q == 'c' || *q == 'd')
                ++q;
@@ -2386,7 +2391,7 @@ void assertVersion(const char *prog, const char *base)
 
        /* Version message should start with name of program, then space. */
        assert(s > prog_len + 1);
-       
+
        failure("Version must start with '%s': ``%s''", base, p);
        if (!assertEqualMem(q, base, prog_len)) {
                free(p);
@@ -2610,7 +2615,7 @@ canLzma(void)
        static int tested = 0, value = 0;
        if (!tested) {
                tested = 1;
-               if (systemf("lzma %s", redirectArgs) == 0)
+               if (systemf("lzma --help %s", redirectArgs) == 0)
                        value = 1;
        }
        return (value);
@@ -2724,7 +2729,7 @@ canNodump(void)
 /* Get extended attribute value from a path */
 void *
 getXattr(const char *path, const char *name, size_t *sizep)
-{ 
+{
        void *value = NULL;
 #if ARCHIVE_XATTR_SUPPORT
        ssize_t size;
@@ -3065,7 +3070,7 @@ systemf(const char *fmt, ...)
        int r;
 
        va_start(ap, fmt);
-       vsprintf(buff, fmt, ap);
+       vsnprintf(buff, sizeof(buff), fmt, ap);
        if (verbosity > VERBOSITY_FULL)
                logprintf("Cmd: %s\n", buff);
        r = system(buff);
@@ -3090,7 +3095,7 @@ slurpfile(size_t * sizep, const char *fmt, ...)
        int r;
 
        va_start(ap, fmt);
-       vsprintf(filename, fmt, ap);
+       vsnprintf(filename, sizeof(filename), fmt, ap);
        va_end(ap);
 
        f = fopen(filename, "rb");
@@ -3157,7 +3162,7 @@ extract_reference_file(const char *name)
        char buff[1024];
        FILE *in, *out;
 
-       sprintf(buff, "%s/%s.uu", refdir, name);
+       snprintf(buff, sizeof(buff), "%s/%s.uu", refdir, name);
        in = fopen(buff, "r");
        failure("Couldn't open reference file %s", buff);
        assert(in != NULL);
@@ -3185,14 +3190,12 @@ extract_reference_file(const char *name)
                while (bytes > 0) {
                        int n = 0;
                        /* Write out 1-3 bytes from that. */
-                       if (bytes > 0) {
-                               assert(VALID_UUDECODE(p[0]));
-                               assert(VALID_UUDECODE(p[1]));
-                               n = UUDECODE(*p++) << 18;
-                               n |= UUDECODE(*p++) << 12;
-                               fputc(n >> 16, out);
-                               --bytes;
-                       }
+                       assert(VALID_UUDECODE(p[0]));
+                       assert(VALID_UUDECODE(p[1]));
+                       n = UUDECODE(*p++) << 18;
+                       n |= UUDECODE(*p++) << 12;
+                       fputc(n >> 16, out);
+                       --bytes;
                        if (bytes > 0) {
                                assert(VALID_UUDECODE(p[0]));
                                n |= UUDECODE(*p++) << 6;
@@ -3218,7 +3221,7 @@ copy_reference_file(const char *name)
        FILE *in, *out;
        size_t rbytes;
 
-       sprintf(buff, "%s/%s", refdir, name);
+       snprintf(buff, sizeof(buff), "%s/%s", refdir, name);
        in = fopen(buff, "rb");
        failure("Couldn't open reference file %s", buff);
        assert(in != NULL);
@@ -3462,6 +3465,12 @@ assertion_entry_compare_acls(const char *file, int line,
  *      DEFINE_TEST(test_function)
  * for each test.
  */
+struct test_list_t
+{
+       void (*func)(void);
+       const char *name;
+       int failures;
+};
 
 /* Use "list.h" to declare all of the test functions. */
 #undef DEFINE_TEST
@@ -3539,7 +3548,7 @@ test_run(int i, const char *tmpdir)
                exit(1);
        }
        /* Create a log file for this test. */
-       sprintf(logfilename, "%s.log", tests[i].name);
+       snprintf(logfilename, sizeof(logfilename), "%s.log", tests[i].name);
        logfile = fopen(logfilename, "w");
        fprintf(logfile, "%s\n\n", tests[i].name);
        /* Chdir() to a work dir for this specific test. */
@@ -3753,13 +3762,115 @@ success:
        return p;
 }
 
+/* Filter tests against a glob pattern. Returns non-zero if test matches
+ * pattern, zero otherwise. A '^' at the beginning of the pattern negates
+ * the return values (i.e. returns zero for a match, non-zero otherwise.
+ */
+static int
+test_filter(const char *pattern, const char *test)
+{
+       int retval = 0;
+       int negate = 0;
+       const char *p = pattern;
+       const char *t = test;
+
+       if (p[0] == '^')
+       {
+               negate = 1;
+               p++;
+       }
+
+       while (1)
+       {
+               if (p[0] == '\\')
+                       p++;
+               else if (p[0] == '*')
+               {
+                       while (p[0] == '*')
+                               p++;
+                       if (p[0] == '\\')
+                               p++;
+                       if ((t = strchr(t, p[0])) == 0)
+                               break;
+               }
+               if (p[0] != t[0])
+                       break;
+               if (p[0] == '\0') {
+                       retval = 1;
+                       break;
+               }
+               p++;
+               t++;
+       }
+
+       return (negate) ? !retval : retval;
+}
+
+static int
+get_test_set(int *test_set, int limit, const char *test)
+{
+       int start, end;
+       int idx = 0;
+
+       if (test == NULL) {
+               /* Default: Run all tests. */
+               for (;idx < limit; idx++)
+                       test_set[idx] = idx;
+               return (limit);
+       }
+       if (*test >= '0' && *test <= '9') {
+               const char *vp = test;
+               start = 0;
+               while (*vp >= '0' && *vp <= '9') {
+                       start *= 10;
+                       start += *vp - '0';
+                       ++vp;
+               }
+               if (*vp == '\0') {
+                       end = start;
+               } else if (*vp == '-') {
+                       ++vp;
+                       if (*vp == '\0') {
+                               end = limit - 1;
+                       } else {
+                               end = 0;
+                               while (*vp >= '0' && *vp <= '9') {
+                                       end *= 10;
+                                       end += *vp - '0';
+                                       ++vp;
+                               }
+                       }
+               } else
+                       return (-1);
+               if (start < 0 || end >= limit || start > end)
+                       return (-1);
+               while (start <= end)
+                       test_set[idx++] = start++;
+       } else {
+               for (start = 0; start < limit; ++start) {
+                       const char *name = tests[start].name;
+                       if (test_filter(test, name))
+                               test_set[idx++] = start;
+               }
+       }
+       return ((idx == 0)?-1:idx);
+}
+
 int
 main(int argc, char **argv)
 {
        static const int limit = sizeof(tests) / sizeof(tests[0]);
        int test_set[sizeof(tests) / sizeof(tests[0])];
        int i = 0, j = 0, tests_run = 0, tests_failed = 0, option;
+       int testprogdir_len;
+#ifdef PROGRAM
+       int tmp2_len;
+#endif
        time_t now;
+       struct tm *tmptr;
+#if defined(HAVE_LOCALTIME_R) || defined(HAVE_LOCALTIME_S)
+       struct tm tmbuf;
+#endif
        char *refdir_alloc = NULL;
        const char *progname;
        char **saved_argv;
@@ -3795,12 +3906,13 @@ main(int argc, char **argv)
         * tree.
         */
        progname = p = argv[0];
-       if ((testprogdir = (char *)malloc(strlen(progname) + 1)) == NULL)
+       testprogdir_len = strlen(progname) + 1;
+       if ((testprogdir = (char *)malloc(testprogdir_len)) == NULL)
        {
                fprintf(stderr, "ERROR: Out of memory.");
                exit(1);
        }
-       strcpy(testprogdir, progname);
+       strncpy(testprogdir, progname, testprogdir_len);
        while (*p != '\0') {
                /* Support \ or / dir separators for Windows compat. */
                if (*p == '/' || *p == '\\')
@@ -3942,20 +4054,21 @@ main(int argc, char **argv)
 #ifdef PROGRAM
        if (testprogfile == NULL)
        {
-               if ((tmp2 = (char *)malloc(strlen(testprogdir) + 1 +
-                       strlen(PROGRAM) + 1)) == NULL)
+               tmp2_len = strlen(testprogdir) + 1 + strlen(PROGRAM) + 1;
+               if ((tmp2 = (char *)malloc(tmp2_len)) == NULL)
                {
                        fprintf(stderr, "ERROR: Out of memory.");
                        exit(1);
                }
-               strcpy(tmp2, testprogdir);
-               strcat(tmp2, "/");
-               strcat(tmp2, PROGRAM);
+               strncpy(tmp2, testprogdir, tmp2_len);
+               strncat(tmp2, "/", tmp2_len);
+               strncat(tmp2, PROGRAM, tmp2_len);
                testprogfile = tmp2;
        }
 
        {
                char *testprg;
+               int testprg_len;
 #if defined(_WIN32) && !defined(__CYGWIN__)
                /* Command.com sometimes rejects '/' separators. */
                testprg = strdup(testprogfile);
@@ -3966,10 +4079,11 @@ main(int argc, char **argv)
                testprogfile = testprg;
 #endif
                /* Quote the name that gets put into shell command lines. */
-               testprg = malloc(strlen(testprogfile) + 3);
-               strcpy(testprg, "\"");
-               strcat(testprg, testprogfile);
-               strcat(testprg, "\"");
+               testprg_len = strlen(testprogfile) + 3;
+               testprg = malloc(testprg_len);
+               strncpy(testprg, "\"", testprg_len);
+               strncat(testprg, testprogfile, testprg_len);
+               strncat(testprg, "\"", testprg_len);
                testprog = testprg;
        }
 #endif
@@ -3991,9 +4105,15 @@ main(int argc, char **argv)
         */
        now = time(NULL);
        for (i = 0; ; i++) {
+#if defined(HAVE_LOCALTIME_S)
+               tmptr = localtime_s(&tmbuf, &now) ? NULL : &tmbuf;
+#elif defined(HAVE_LOCALTIME_R)
+               tmptr = localtime_r(&now, &tmbuf);
+#else
+               tmptr = localtime(&now);
+#endif
                strftime(tmpdir_timestamp, sizeof(tmpdir_timestamp),
-                   "%Y-%m-%dT%H.%M.%S",
-                   localtime(&now));
+                   "%Y-%m-%dT%H.%M.%S", tmptr);
                if ((strlen(tmp) + 1 + strlen(progname) + 1 +
                    strlen(tmpdir_timestamp) + 1 + 3) >
                    (sizeof(tmpdir) / sizeof(char))) {
@@ -4049,7 +4169,7 @@ main(int argc, char **argv)
                do {
                        int test_num;
 
-                       test_num = get_test_set(test_set, limit, *argv, tests);
+                       test_num = get_test_set(test_set, limit, *argv);
                        if (test_num < 0) {
                                printf("*** INVALID Test %s\n", *argv);
                                free(refdir_alloc);
index 8ea3d3c..b796676 100644 (file)
 
 #include "test_utils.h"
 
+#include <errno.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
+#include <assert.h>
 
-/* Filter tests against a glob pattern. Returns non-zero if test matches
- * pattern, zero otherwise. A '^' at the beginning of the pattern negates
- * the return values (i.e. returns zero for a match, non-zero otherwise.
- */
-static int
-test_filter(const char *pattern, const char *test)
+static inline uint64_t
+xorshift64(uint64_t *state)
 {
-       int retval = 0;
-       int negate = 0;
-       const char *p = pattern;
-       const char *t = test;
+       uint64_t x = *state;
+       x ^= x << 13;
+       x ^= x >> 7;
+       x ^= x << 17;
+       *state = x;
+       return (x);
+}
 
-       if (p[0] == '^')
-       {
-               negate = 1;
-               p++;
+/*
+ * Fill a buffer with reproducible pseudo-random data using a simple xorshift
+ * algorithm. Originally, most tests filled buffers with a loop that calls
+ * rand() once for each byte. However, this initialization can be extremely
+ * slow when running on emulated platforms such as QEMU where 16M calls to
+ * rand() take a long time: Before the test_write_format_7zip_large_copy test
+ * took ~22 seconds, whereas using a xorshift random number generator (that can
+ * be inlined) reduces it to ~17 seconds on QEMU RISC-V.
+ */
+static void
+fill_with_pseudorandom_data_seed(uint64_t seed, void *buffer, size_t size)
+{
+       uint64_t *aligned_buffer;
+       size_t num_values;
+       size_t i;
+       size_t unaligned_suffix;
+       size_t unaligned_prefix = 0;
+       /*
+        * To avoid unaligned stores we only fill the aligned part of the buffer
+        * with pseudo-random data and fill the unaligned prefix with 0xab and
+        * the suffix with 0xcd.
+        */
+       if ((uintptr_t)buffer % sizeof(uint64_t)) {
+               unaligned_prefix =
+                   sizeof(uint64_t) - (uintptr_t)buffer % sizeof(uint64_t);
+               aligned_buffer =
+                   (uint64_t *)((char *)buffer + unaligned_prefix);
+               memset(buffer, 0xab, unaligned_prefix);
+       } else {
+               aligned_buffer = (uint64_t *)buffer;
        }
-
-       while (1)
-       {
-               if (p[0] == '\\')
-                       p++;
-               else if (p[0] == '*')
-               {
-                       while (p[0] == '*')
-                               p++;
-                       if (p[0] == '\\')
-                               p++;
-                       if ((t = strchr(t, p[0])) == 0)
-                               break;
-               }
-               if (p[0] != t[0])
-                       break;
-               if (p[0] == '\0') {
-                       retval = 1;
-                       break;
-               }
-               p++;
-               t++;
+       assert((uintptr_t)aligned_buffer % sizeof(uint64_t) == 0);
+       num_values = (size - unaligned_prefix) / sizeof(uint64_t);
+       unaligned_suffix =
+           size - unaligned_prefix - num_values * sizeof(uint64_t);
+       for (i = 0; i < num_values; i++) {
+               aligned_buffer[i] = xorshift64(&seed);
+       }
+       if (unaligned_suffix) {
+               memset((char *)buffer + size - unaligned_suffix, 0xcd,
+                   unaligned_suffix);
        }
-
-       return (negate) ? !retval : retval;
 }
 
-int get_test_set(int *test_set, int limit, const char *test,
-       struct test_list_t *tests)
+void
+fill_with_pseudorandom_data(void *buffer, size_t size)
 {
-       int start, end;
-       int idx = 0;
-
-       if (test == NULL) {
-               /* Default: Run all tests. */
-               for (;idx < limit; idx++)
-                       test_set[idx] = idx;
-               return (limit);
-       }
-       if (*test >= '0' && *test <= '9') {
-               const char *vp = test;
-               start = 0;
-               while (*vp >= '0' && *vp <= '9') {
-                       start *= 10;
-                       start += *vp - '0';
-                       ++vp;
+       uint64_t seed;
+       const char* seed_str;
+       /*
+        * Check if a seed has been specified in the environment, otherwise fall
+        * back to using rand() as a seed.
+        */
+       if ((seed_str = getenv("TEST_RANDOM_SEED")) != NULL) {
+               errno = 0;
+               seed = strtoull(seed_str, NULL, 10);
+               if (errno != 0) {
+                       fprintf(stderr, "strtoull(%s) failed: %s", seed_str,
+                           strerror(errno));
+                       seed = rand();
                }
-               if (*vp == '\0') {
-                       end = start;
-               } else if (*vp == '-') {
-                       ++vp;
-                       if (*vp == '\0') {
-                               end = limit - 1;
-                       } else {
-                               end = 0;
-                               while (*vp >= '0' && *vp <= '9') {
-                                       end *= 10;
-                                       end += *vp - '0';
-                                       ++vp;
-                               }
-                       }
-               } else
-                       return (-1);
-               if (start < 0 || end >= limit || start > end)
-                       return (-1);
-               while (start <= end)
-                       test_set[idx++] = start++;
        } else {
-               for (start = 0; start < limit; ++start) {
-                       const char *name = tests[start].name;
-                       if (test_filter(test, name))
-                               test_set[idx++] = start;
-               }
+               seed = rand();
        }
-       return ((idx == 0)?-1:idx);
+       fill_with_pseudorandom_data_seed(seed, buffer, size);
 }
index 164c528..4145789 100644 (file)
 #ifndef TEST_UTILS_H
 #define TEST_UTILS_H
 
-struct test_list_t
-{
-  void (*func)(void);
-  const char *name;
-  int failures;
-};
+#include <stddef.h>
+#include <stdint.h>
 
-int get_test_set(int *, int, const char *, struct test_list_t *);
+/* Fill a buffer with pseudorandom data */
+void fill_with_pseudorandom_data(void* buffer, size_t size);
 
 #endif /* TEST_UTILS_H */
diff --git a/unzip/CMakeLists.txt b/unzip/CMakeLists.txt
new file mode 100644 (file)
index 0000000..150eb2c
--- /dev/null
@@ -0,0 +1,41 @@
+############################################
+#
+# How to build bsdunzip
+#
+############################################
+IF(ENABLE_UNZIP)
+
+  SET(bsdunzip_SOURCES
+    bsdunzip.c
+    bsdunzip.h
+    bsdunzip_platform.h
+    cmdline.c
+    la_getline.c
+    la_queue.h
+    ../libarchive_fe/err.c
+    ../libarchive_fe/err.h
+    ../libarchive_fe/lafe_platform.h
+    ../libarchive_fe/passphrase.c
+    ../libarchive_fe/passphrase.h
+  )
+  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../libarchive_fe)
+
+  # bsdunzip documentation
+  SET(bsdunzip_MANS bsdunzip.1)
+
+  # How to build bsdunzip
+  ADD_EXECUTABLE(bsdunzip ${bsdunzip_SOURCES})
+  IF(ENABLE_UNZIP_SHARED)
+    TARGET_LINK_LIBRARIES(bsdunzip archive ${ADDITIONAL_LIBS})
+  ELSE(ENABLE_UNZIP_SHARED)
+    TARGET_LINK_LIBRARIES(bsdunzip archive_static ${ADDITIONAL_LIBS})
+    SET_TARGET_PROPERTIES(bsdunzip PROPERTIES COMPILE_DEFINITIONS
+                                 LIBARCHIVE_STATIC)
+  ENDIF(ENABLE_UNZIP_SHARED)
+
+  # Installation rules
+  INSTALL(TARGETS bsdunzip RUNTIME DESTINATION bin)
+  INSTALL_MAN(${bsdunzip_MANS})
+ENDIF(ENABLE_UNZIP)
+
+add_subdirectory(test)
diff --git a/unzip/bsdunzip.1 b/unzip/bsdunzip.1
new file mode 100644 (file)
index 0000000..dda01e7
--- /dev/null
@@ -0,0 +1,220 @@
+.\"-
+.\" Copyright (c) 2007-2008 Dag-Erling Smørgrav
+.\" 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$
+.\"
+.Dd June 27, 2023
+.Dt BSDUNZIP 1
+.Os
+.Sh NAME
+.Nm bsdunzip
+.Nd extract files from a ZIP archive
+.Sh SYNOPSIS
+.Nm
+.Op Fl aCcfjLlnopqtuvy
+.Op { Fl O | Fl I No } Ar encoding
+.Op Fl d Ar dir
+.Op Fl x Ar pattern
+.Op Fl P Ar password
+.Ar zipfile
+.Op Ar member ...
+.Sh DESCRIPTION
+.\" ...
+The following options are available:
+.Bl -tag -width Fl
+.It Fl a
+When extracting a text file, convert DOS-style line endings to
+Unix-style line endings.
+.It Fl C
+Match file names case-insensitively.
+.It Fl c
+Extract to stdout/screen.
+When extracting files from the zipfile, they are written to stdout.
+This is similar to
+.Fl p ,
+but does not suppress normal output.
+.It Fl d Ar dir
+Extract files into the specified directory rather than the current
+directory.
+.It Fl f
+Update existing.
+Extract only files from the zipfile if a file with the same name
+already exists on disk and is older than the former.
+Otherwise, the file is silently skipped.
+.It Fl I Ar encoding
+.It Fl O Ar encoding
+Convert filenames from the specified encoding.
+.It Fl j
+Ignore directories stored in the zipfile; instead, extract all files
+directly into the extraction directory.
+.It Fl L
+Convert the names of the extracted files and directories to lowercase.
+.It Fl l
+List, rather than extract, the contents of the zipfile.
+.It Fl n
+No overwrite.
+When extracting a file from the zipfile, if a file with the same name
+already exists on disk, the file is silently skipped.
+.It Fl o
+Overwrite.
+When extracting a file from the zipfile, if a file with the same name
+already exists on disk, the existing file is replaced with the file
+from the zipfile.
+.It Fl p
+Extract to stdout.
+When extracting files from the zipfile, they are written to stdout.
+The normal output is suppressed as if
+.Fl q
+was specified.
+.It Fl P Ar password
+Extract encrypted files using a password.
+Putting a password on the command line using this option can be
+insecure.
+.It Fl q
+Quiet: print less information while extracting.
+.It Fl t
+Test: do not extract anything, but verify the checksum of every file
+in the archive.
+.It Fl u
+Update.
+When extracting a file from the zipfile, if a file with the same name
+already exists on disk, the existing file is replaced with the file
+from the zipfile if and only if the latter is newer than the former.
+Otherwise, the file is silently skipped.
+.It Fl v
+List verbosely, rather than extract, the contents of the zipfile.
+This differs from
+.Fl l
+by using the long listing.
+Note that most of the data is currently fake and does not reflect the
+content of the archive.
+.It Fl x Ar pattern
+Exclude files matching the pattern
+.Ar pattern .
+.It Fl y
+Print four digit years in listings instead of two.
+.It Fl Z Ar mode
+Emulate
+.Xr zipinfo 1L
+mode.
+Enabling
+.Xr zipinfo 1L
+mode changes the way in which additional arguments are parsed.
+Currently only
+.Xr zipinfo 1L
+mode 1 is supported, which lists the file names one per line.
+.It Ar [member ...]
+Optional list of members to extract from the zipfile.
+Can include patterns, e.g.,
+.Ar 'memberdir/*'
+will extract all files and dirs below memberdir.
+.El
+.Pp
+Note that only one of
+.Fl n ,
+.Fl o ,
+and
+.Fl u
+may be specified.
+If specified filename is
+.Qq - ,
+then data is read from
+.Va stdin .
+.Sh ENVIRONMENT
+If the
+.Ev UNZIP_DEBUG
+environment variable is defined, the
+.Fl q
+command-line option has no effect, and additional debugging
+information will be printed to
+.Va stderr .
+.Sh COMPATIBILITY
+The
+.Nm
+utility aims to be sufficiently compatible with other implementations
+to serve as a drop-in replacement in the context of the
+.Xr ports 7
+system.
+No attempt has been made to replicate functionality which is not
+required for that purpose.
+.Pp
+For compatibility reasons, command-line options will be recognized if
+they are listed not only before but also after the name of the
+zipfile.
+.Pp
+Normally, the
+.Fl a
+option should only affect files which are marked as text files in the
+zipfile's central directory.
+Since the
+.Xr archive 3
+library does not provide access to that information, it is not available
+to the
+.Nm
+utility.
+Instead, the
+.Nm
+utility will assume that a file is a text file if no non-ASCII
+characters are present within the first block of data decompressed for
+that file.
+If non-ASCII characters appear in subsequent blocks of data, a warning
+will be issued.
+.Pp
+The
+.Nm
+utility is only able to process ZIP archives handled by
+.Xr libarchive 3 .
+Depending on the installed version of
+.Xr libarchive 3 ,
+this may or may not include self-extracting or ZIPX archives.
+.Sh SEE ALSO
+.Xr libarchive 3
+.Sh HISTORY
+The
+.Nm
+utility appeared in
+.Fx 8.0 .
+.Sh AUTHORS
+The
+.Nm
+utility and this manual page were written by
+.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .
+It uses the
+.Xr archive 3
+library developed by
+.An Tim Kientzle Aq Mt kientzle@FreeBSD.org .
+.Sh CAVEATS
+The
+.Nm
+utility performs two scans of the command-line for arguments before
+and after the archive name, so as to maintain compatibility with
+Info-ZIP unzip.
+As a result, the POSIX
+.Ql --
+double-dash string used to separate options from arguments will need to
+be repeated.
+For example, to extract a "-a.jpg" from "-b.zip" with overwrite, one
+would need to invoke
+.Dl bsdunzip -o -- -a.jpg -- -b.zip 
diff --git a/unzip/bsdunzip.c b/unzip/bsdunzip.c
new file mode 100644 (file)
index 0000000..29c3a16
--- /dev/null
@@ -0,0 +1,1283 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2009, 2010 Joerg Sonnenberger <joerg@NetBSD.org>
+ * Copyright (c) 2007-2008 Dag-Erling Smørgrav
+ * 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
+ *    in this position and unchanged.
+ * 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$
+ *
+ * This file would be much shorter if we didn't care about command-line
+ * compatibility with Info-ZIP's UnZip, which requires us to duplicate
+ * parts of libarchive in order to gain more detailed control of its
+ * behaviour for the purpose of implementing the -n, -o, -L and -a
+ * options.
+ */
+
+#include "bsdunzip_platform.h"
+
+#ifdef HAVE_SYS_QUEUE_H
+#include <sys/queue.h>
+#else
+#include "la_queue.h"
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_FNMATCH_H
+#include <fnmatch.h>
+#endif
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if ((!defined(HAVE_UTIMENSAT) && defined(HAVE_LUTIMES)) || \
+    (!defined(HAVE_FUTIMENS) && defined(HAVE_FUTIMES)))
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#endif
+
+#include "bsdunzip.h"
+#include "passphrase.h"
+#include "err.h"
+
+/* command-line options */
+static int              a_opt;         /* convert EOL */
+static int              C_opt;         /* match case-insensitively */
+static int              c_opt;         /* extract to stdout */
+static const char      *d_arg;         /* directory */
+static int              f_opt;         /* update existing files only */
+static const char      *O_arg;         /* encoding */
+static int              j_opt;         /* junk directories */
+static int              L_opt;         /* lowercase names */
+static int              n_opt;         /* never overwrite */
+static int              o_opt;         /* always overwrite */
+static int              p_opt;         /* extract to stdout, quiet */
+static const char      *P_arg;         /* passphrase */
+static int              q_opt;         /* quiet */
+static int              t_opt;         /* test */
+static int              u_opt;         /* update */
+static int              v_opt;         /* verbose/list */
+static const char      *y_str = "";    /* 4 digit year */
+static int              Z1_opt;        /* zipinfo mode list files only */
+static int              version_opt;   /* version string */
+
+/* debug flag */
+static int              unzip_debug;
+
+/* zipinfo mode */
+static int              zipinfo_mode;
+
+/* running on tty? */
+static int              tty;
+
+/* processing exclude list */
+static int              unzip_exclude_mode = 0;
+
+int bsdunzip_optind;
+
+/* convenience macro */
+/* XXX should differentiate between ARCHIVE_{WARN,FAIL,RETRY} */
+#define ac(call)                                               \
+       do {                                                    \
+               int acret = (call);                             \
+               if (acret != ARCHIVE_OK)                        \
+                       errorx("%s", archive_error_string(a));  \
+       } while (0)
+
+/*
+ * Indicates that last info() did not end with EOL.  This helps error() et
+ * al. avoid printing an error message on the same line as an incomplete
+ * informational message.
+ */
+static int noeol;
+
+/* for an interactive passphrase input */
+static char *passphrase_buf;
+
+/* fatal error message + errno */
+static void
+error(const char *fmt, ...)
+{
+       va_list ap;
+
+       if (noeol)
+               fprintf(stdout, "\n");
+       fflush(stdout);
+       fprintf(stderr, "unzip: ");
+       va_start(ap, fmt);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, ": %s\n", strerror(errno));
+       exit(EXIT_FAILURE);
+}
+
+/* fatal error message, no errno */
+static void
+errorx(const char *fmt, ...)
+{
+       va_list ap;
+
+       if (noeol)
+               fprintf(stdout, "\n");
+       fflush(stdout);
+       fprintf(stderr, "unzip: ");
+       va_start(ap, fmt);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, "\n");
+       exit(EXIT_FAILURE);
+}
+
+/* non-fatal error message + errno */
+static void
+warning(const char *fmt, ...)
+{
+       va_list ap;
+
+       if (noeol)
+               fprintf(stdout, "\n");
+       fflush(stdout);
+       fprintf(stderr, "unzip: ");
+       va_start(ap, fmt);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, ": %s\n", strerror(errno));
+}
+
+/* non-fatal error message, no errno */
+static void
+warningx(const char *fmt, ...)
+{
+       va_list ap;
+
+       if (noeol)
+               fprintf(stdout, "\n");
+       fflush(stdout);
+       fprintf(stderr, "unzip: ");
+       va_start(ap, fmt);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, "\n");
+}
+
+/* informational message (if not -q) */
+static void
+info(const char *fmt, ...)
+{
+       va_list ap;
+
+       if (q_opt && !unzip_debug)
+               return;
+       va_start(ap, fmt);
+       vfprintf(stdout, fmt, ap);
+       va_end(ap);
+       fflush(stdout);
+
+       if (*fmt == '\0')
+               noeol = 1;
+       else
+               noeol = fmt[strlen(fmt) - 1] != '\n';
+}
+
+/* debug message (if unzip_debug) */
+static void
+debug(const char *fmt, ...)
+{
+       va_list ap;
+
+       if (!unzip_debug)
+               return;
+       va_start(ap, fmt);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fflush(stderr);
+
+       if (*fmt == '\0')
+               noeol = 1;
+       else
+               noeol = fmt[strlen(fmt) - 1] != '\n';
+}
+
+/* duplicate a path name, possibly converting to lower case */
+static char *
+pathdup(const char *path)
+{
+       char *str;
+       size_t i, len;
+
+       if (path == NULL || path[0] == '\0')
+               return (NULL);
+
+       len = strlen(path);
+       while (len && path[len - 1] == '/')
+               len--;
+       if ((str = malloc(len + 1)) == NULL) {
+               errno = ENOMEM;
+               error("malloc()");
+       }
+       if (L_opt) {
+               for (i = 0; i < len; ++i)
+                       str[i] = tolower((unsigned char)path[i]);
+       } else {
+               memcpy(str, path, len);
+       }
+       str[len] = '\0';
+
+       return (str);
+}
+
+/* concatenate two path names */
+static char *
+pathcat(const char *prefix, const char *path)
+{
+       char *str;
+       size_t prelen, len;
+
+       prelen = prefix ? strlen(prefix) + 1 : 0;
+       len = strlen(path) + 1;
+       if ((str = malloc(prelen + len)) == NULL) {
+               errno = ENOMEM;
+               error("malloc()");
+       }
+       if (prefix) {
+               memcpy(str, prefix, prelen);    /* includes zero */
+               str[prelen - 1] = '/';          /* splat zero */
+       }
+       memcpy(str + prelen, path, len);        /* includes zero */
+
+       return (str);
+}
+
+/*
+ * Pattern lists for include / exclude processing
+ */
+struct pattern {
+       STAILQ_ENTRY(pattern) link;
+       char pattern[];
+};
+
+STAILQ_HEAD(pattern_list, pattern);
+static struct pattern_list include = STAILQ_HEAD_INITIALIZER(include);
+static struct pattern_list exclude = STAILQ_HEAD_INITIALIZER(exclude);
+
+/*
+ * Add an entry to a pattern list
+ */
+static void
+add_pattern(struct pattern_list *list, const char *pattern)
+{
+       struct pattern *entry;
+       size_t len;
+
+       debug("adding pattern '%s'\n", pattern);
+       len = strlen(pattern);
+       if ((entry = malloc(sizeof *entry + len + 1)) == NULL) {
+               errno = ENOMEM;
+               error("malloc()");
+       }
+       memcpy(entry->pattern, pattern, len + 1);
+       STAILQ_INSERT_TAIL(list, entry, link);
+}
+
+/*
+ * Match a string against a list of patterns
+ */
+static int
+match_pattern(struct pattern_list *list, const char *str)
+{
+       struct pattern *entry;
+
+       STAILQ_FOREACH(entry, list, link) {
+#ifdef HAVE_FNMATCH
+               if (fnmatch(entry->pattern, str, C_opt ? FNM_CASEFOLD : 0) == 0)
+                       return (1);
+#else
+#error "Unsupported platform: fnmatch() is required"
+#endif
+       }
+       return (0);
+}
+
+/*
+ * Verify that a given pathname is in the include list and not in the
+ * exclude list.
+ */
+static int
+accept_pathname(const char *pathname)
+{
+
+       if (!STAILQ_EMPTY(&include) && !match_pattern(&include, pathname))
+               return (0);
+       if (!STAILQ_EMPTY(&exclude) && match_pattern(&exclude, pathname))
+               return (0);
+       return (1);
+}
+
+/*
+ * Create the specified directory with the specified mode, taking certain
+ * precautions on they way.
+ */
+static void
+make_dir(const char *path, int mode)
+{
+       struct stat sb;
+
+       if (lstat(path, &sb) == 0) {
+               if (S_ISDIR(sb.st_mode))
+                       return;
+               /*
+                * Normally, we should either ask the user about removing
+                * the non-directory of the same name as a directory we
+                * wish to create, or respect the -n or -o command-line
+                * options.  However, this may lead to a later failure or
+                * even compromise (if this non-directory happens to be a
+                * symlink to somewhere unsafe), so we don't.
+                */
+
+               /*
+                * Don't check unlink() result; failure will cause mkdir()
+                * to fail later, which we will catch.
+                */
+               (void)unlink(path);
+       }
+       if (mkdir(path, mode) != 0 && errno != EEXIST)
+               error("mkdir('%s')", path);
+}
+
+/*
+ * Ensure that all directories leading up to (but not including) the
+ * specified path exist.
+ *
+ * XXX inefficient + modifies the file in-place
+ */
+static void
+make_parent(char *path)
+{
+       struct stat sb;
+       char *sep;
+
+       sep = strrchr(path, '/');
+       if (sep == NULL || sep == path)
+               return;
+       *sep = '\0';
+       if (lstat(path, &sb) == 0) {
+               if (S_ISDIR(sb.st_mode)) {
+                       *sep = '/';
+                       return;
+               }
+               unlink(path);
+       }
+       make_parent(path);
+       mkdir(path, 0755);
+       *sep = '/';
+
+#if 0
+       for (sep = path; (sep = strchr(sep, '/')) != NULL; sep++) {
+               /* root in case of absolute d_arg */
+               if (sep == path)
+                       continue;
+               *sep = '\0';
+               make_dir(path, 0755);
+               *sep = '/';
+       }
+#endif
+}
+
+/*
+ * Extract a directory.
+ */
+static void
+extract_dir(struct archive *a, struct archive_entry *e, const char *path)
+{
+       int mode;
+
+       /*
+        * Dropbox likes to create '/' directory entries, just ignore
+        * such junk.
+        */
+       if (*path == '\0')
+               return;
+
+       mode = archive_entry_mode(e) & 0777;
+       if (mode == 0)
+               mode = 0755;
+
+       /*
+        * Some zipfiles contain directories with weird permissions such
+        * as 0644 or 0444.  This can cause strange issues such as being
+        * unable to extract files into the directory we just created, or
+        * the user being unable to remove the directory later without
+        * first manually changing its permissions.  Therefore, we whack
+        * the permissions into shape, assuming that the user wants full
+        * access and that anyone who gets read access also gets execute
+        * access.
+        */
+       mode |= 0700;
+       if (mode & 0040)
+               mode |= 0010;
+       if (mode & 0004)
+               mode |= 0001;
+
+       info("   creating: %s/\n", path);
+       make_dir(path, mode);
+       ac(archive_read_data_skip(a));
+}
+
+static unsigned char buffer[8192];
+static char spinner[] = { '|', '/', '-', '\\' };
+
+static int
+handle_existing_file(char **path)
+{
+       size_t alen;
+       ssize_t len;
+       char buf[4];
+
+       for (;;) {
+               fprintf(stderr,
+                   "replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: ",
+                   *path);
+               if (fgets(buf, sizeof(buf), stdin) == NULL) {
+                       clearerr(stdin);
+                       printf("NULL\n(EOF or read error, "
+                           "treating as \"[N]one\"...)\n");
+                       n_opt = 1;
+                       return -1;
+               }
+               switch (*buf) {
+               case 'A':
+                       o_opt = 1;
+                       /* FALLTHROUGH */
+               case 'y':
+               case 'Y':
+                       (void)unlink(*path);
+                       return 1;
+               case 'N':
+                       n_opt = 1;
+                       /* FALLTHROUGH */
+               case 'n':
+                       return -1;
+               case 'r':
+               case 'R':
+                       printf("New name: ");
+                       fflush(stdout);
+                       free(*path);
+                       *path = NULL;
+                       alen = 0;
+                       len = getline(path, &alen, stdin);
+                       if ((*path)[len - 1] == '\n')
+                               (*path)[len - 1] = '\0';
+                       return 0;
+               default:
+                       break;
+               }
+       }
+}
+
+/*
+ * Detect binary files by a combination of character white list and
+ * black list. NUL bytes and other control codes without use in text files
+ * result directly in switching the file to binary mode. Otherwise, at least
+ * one white-listed byte has to be found.
+ *
+ * Black-listed: 0..6, 14..25, 28..31
+ * 0xf3ffc07f = 11110011111111111100000001111111b
+ * White-listed: 9..10, 13, >= 32
+ * 0x00002600 = 00000000000000000010011000000000b
+ *
+ * See the proginfo/txtvsbin.txt in the zip sources for a detailed discussion.
+ */
+#define BYTE_IS_BINARY(x)      ((x) < 32 && (0xf3ffc07fU & (1U << (x))))
+#define        BYTE_IS_TEXT(x)         ((x) >= 32 || (0x00002600U & (1U << (x))))
+
+static int
+check_binary(const unsigned char *buf, size_t len)
+{
+       int rv;
+       for (rv = 1; len--; ++buf) {
+               if (BYTE_IS_BINARY(*buf))
+                       return 1;
+               if (BYTE_IS_TEXT(*buf))
+                       rv = 0;
+       }
+
+       return rv;
+}
+
+/*
+ * Extract to a file descriptor
+ */
+static int
+extract2fd(struct archive *a, char *pathname, int fd)
+{
+       int cr, text, warn;
+       ssize_t len;
+       unsigned char *p, *q, *end;
+
+       text = a_opt;
+       warn = 0;
+       cr = 0;
+
+       /* loop over file contents and write to fd */
+       for (int n = 0; ; n++) {
+               if (fd != STDOUT_FILENO)
+                       if (tty && (n % 4) == 0)
+                               info(" %c\b\b", spinner[(n / 4) % sizeof spinner]);
+
+               len = archive_read_data(a, buffer, sizeof buffer);
+
+               if (len < 0)
+                       ac(len);
+
+               /* left over CR from previous buffer */
+               if (a_opt && cr) {
+                       if (len == 0 || buffer[0] != '\n')
+                               if (write(fd, "\r", 1) != 1)
+                                       error("write('%s')", pathname);
+                       cr = 0;
+               }
+
+               /* EOF */
+               if (len == 0)
+                       break;
+               end = buffer + len;
+
+               /*
+                * Detect whether this is a text file.  The correct way to
+                * do this is to check the least significant bit of the
+                * "internal file attributes" field of the corresponding
+                * file header in the central directory, but libarchive
+                * does not provide access to this field, so we have to
+                * guess by looking for non-ASCII characters in the
+                * buffer.  Hopefully we won't guess wrong.  If we do
+                * guess wrong, we print a warning message later.
+                */
+               if (a_opt && n == 0) {
+                       if (check_binary(buffer, len))
+                               text = 0;
+               }
+
+               /* simple case */
+               if (!a_opt || !text) {
+                       if (write(fd, buffer, len) != len)
+                               error("write('%s')", pathname);
+                       continue;
+               }
+
+               /* hard case: convert \r\n to \n (sigh...) */
+               for (p = buffer; p < end; p = q + 1) {
+                       for (q = p; q < end; q++) {
+                               if (!warn && BYTE_IS_BINARY(*q)) {
+                                       warningx("%s may be corrupted due"
+                                           " to weak text file detection"
+                                           " heuristic", pathname);
+                                       warn = 1;
+                               }
+                               if (q[0] != '\r')
+                                       continue;
+                               if (&q[1] == end) {
+                                       cr = 1;
+                                       break;
+                               }
+                               if (q[1] == '\n')
+                                       break;
+                       }
+                       if (write(fd, p, q - p) != q - p)
+                               error("write('%s')", pathname);
+               }
+       }
+
+       return text;
+}
+
+/*
+ * Extract a regular file.
+ */
+static void
+extract_file(struct archive *a, struct archive_entry *e, char **path)
+{
+       int mode;
+       struct timespec mtime;
+       struct stat sb;
+       int fd, check, text;
+       const char *linkname;
+#if defined(HAVE_UTIMENSAT) || defined(HAVE_FUTIMENS)
+       struct timespec ts[2];
+#endif
+#if ((!defined(HAVE_UTIMENSAT) && defined(HAVE_LUTIMES)) || \
+    (!defined(HAVE_FUTIMENS) && defined(HAVE_FUTIMES)))
+       struct timeval times[2];
+#endif
+
+       mode = archive_entry_mode(e) & 0777;
+       if (mode == 0)
+               mode = 0644;
+       mtime.tv_sec = archive_entry_mtime(e);
+       mtime.tv_nsec = archive_entry_mtime_nsec(e);
+
+       /* look for existing file of same name */
+recheck:
+       if (lstat(*path, &sb) == 0) {
+               if (u_opt || f_opt) {
+                       /* check if up-to-date */
+                       if (S_ISREG(sb.st_mode) && (
+#if HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC
+                           sb.st_mtimespec.tv_sec > mtime.tv_sec ||
+                           (sb.st_mtimespec.tv_sec == mtime.tv_sec &&
+                           sb.st_mtimespec.tv_nsec >= mtime.tv_nsec)
+#elif HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
+                           sb.st_mtim.tv_sec > mtime.tv_sec ||
+                           (sb.st_mtim.tv_sec == mtime.tv_sec &&
+                           sb.st_mtim.tv_nsec >= mtime.tv_nsec)
+#elif HAVE_STRUCT_STAT_ST_MTIME_N
+                           sb.st_mtime > mtime.tv_sec ||
+                           (sb.st_mtime == mtime.tv_sec &&
+                           sb.st_mtime_n => mtime.tv_nsec)
+#elif HAVE_STRUCT_STAT_ST_MTIME_USEC
+                           sb.st_mtime > mtime.tv_sec ||
+                           (sb.st_mtime == mtime.tv_sec &&
+                           sb.st_mtime_usec => mtime.tv_nsec / 1000)
+#else
+                           sb.st_mtime > mtime.tv_sec
+#endif
+                           ))
+                               return;
+                       (void)unlink(*path);
+               } else if (o_opt) {
+                       /* overwrite */
+                       (void)unlink(*path);
+               } else if (n_opt) {
+                       /* do not overwrite */
+                       return;
+               } else {
+                       check = handle_existing_file(path);
+                       if (check == 0)
+                               goto recheck;
+                       if (check == -1)
+                               return; /* do not overwrite */
+               }
+       } else {
+               if (f_opt)
+                       return;
+       }
+
+#if defined(HAVE_UTIMENSAT) || defined(HAVE_FUTIMENS)
+       ts[0].tv_sec = 0;
+       ts[0].tv_nsec = UTIME_NOW;
+       ts[1] = mtime;
+#endif
+#if ((!defined(HAVE_UTIMENSAT) && defined(HAVE_LUTIMES)) || \
+    (!defined(HAVE_FUTIMENS) && defined(HAVE_FUTIMES)))
+       times[0].tv_sec = 0;
+       times[0].tv_usec = -1;
+       times[1].tv_sec = mtime.tv_sec;
+       times[1].tv_usec = mtime.tv_nsec / 1000;
+#endif
+
+       /* process symlinks */
+       linkname = archive_entry_symlink(e);
+       if (linkname != NULL) {
+               if (symlink(linkname, *path) != 0)
+                       error("symlink('%s')", *path);
+               info(" extracting: %s -> %s\n", *path, linkname);
+#ifdef HAVE_LCHMOD
+               if (lchmod(*path, mode) != 0)
+                       warning("Cannot set mode for '%s'", *path);
+#endif
+               /* set access and modification time */
+#if defined(HAVE_UTIMENSAT)
+               if (utimensat(AT_FDCWD, *path, ts, AT_SYMLINK_NOFOLLOW) != 0)
+                       warning("utimensat('%s')", *path);
+#elif defined(HAVE_LUTIMES)
+               gettimeofday(&times[0], NULL);
+               if (lutimes(*path, times) != 0)
+                       warning("lutimes('%s')", *path);
+#endif
+               return;
+       }
+
+       if ((fd = open(*path, O_RDWR|O_CREAT|O_TRUNC, mode)) < 0)
+               error("open('%s')", *path);
+
+       info(" extracting: %s", *path);
+
+       text = extract2fd(a, *path, fd);
+
+       if (tty)
+               info("  \b\b");
+       if (text)
+               info(" (text)");
+       info("\n");
+
+       /* set access and modification time */
+#if defined(HAVE_FUTIMENS)
+       if (futimens(fd, ts) != 0)
+               error("futimens('%s')", *path);
+#elif defined(HAVE_FUTIMES)
+       gettimeofday(&times[0], NULL);
+       if (futimes(fd, times) != 0)
+               error("futimes('%s')", *path);
+#endif
+       if (close(fd) != 0)
+               error("close('%s')", *path);
+}
+
+/*
+ * Extract a zipfile entry: first perform some sanity checks to ensure
+ * that it is either a directory or a regular file and that the path is
+ * not absolute and does not try to break out of the current directory;
+ * then call either extract_dir() or extract_file() as appropriate.
+ *
+ * This is complicated a bit by the various ways in which we need to
+ * manipulate the path name.  Case conversion (if requested by the -L
+ * option) happens first, but the include / exclude patterns are applied
+ * to the full converted path name, before the directory part of the path
+ * is removed in accordance with the -j option.  Sanity checks are
+ * intentionally done earlier than they need to be, so the user will get a
+ * warning about insecure paths even for files or directories which
+ * wouldn't be extracted anyway.
+ */
+static void
+extract(struct archive *a, struct archive_entry *e)
+{
+       char *pathname, *realpathname;
+       mode_t filetype;
+       char *p, *q;
+
+       if ((pathname = pathdup(archive_entry_pathname(e))) == NULL) {
+               warningx("skipping empty or unreadable filename entry");
+               ac(archive_read_data_skip(a));
+               return;
+       }
+       filetype = archive_entry_filetype(e);
+
+       /* sanity checks */
+       if (pathname[0] == '/' ||
+           strncmp(pathname, "../", 3) == 0 ||
+           strstr(pathname, "/../") != NULL) {
+               warningx("skipping insecure entry '%s'", pathname);
+               ac(archive_read_data_skip(a));
+               free(pathname);
+               return;
+       }
+
+       /* I don't think this can happen in a zipfile.. */
+       if (!S_ISDIR(filetype) && !S_ISREG(filetype) && !S_ISLNK(filetype)) {
+               warningx("skipping non-regular entry '%s'", pathname);
+               ac(archive_read_data_skip(a));
+               free(pathname);
+               return;
+       }
+
+       /* skip directories in -j case */
+       if (S_ISDIR(filetype) && j_opt) {
+               ac(archive_read_data_skip(a));
+               free(pathname);
+               return;
+       }
+
+       /* apply include / exclude patterns */
+       if (!accept_pathname(pathname)) {
+               ac(archive_read_data_skip(a));
+               free(pathname);
+               return;
+       }
+
+       /* apply -j and -d */
+       if (j_opt) {
+               for (p = q = pathname; *p; ++p)
+                       if (*p == '/')
+                               q = p + 1;
+               realpathname = pathcat(d_arg, q);
+       } else {
+               realpathname = pathcat(d_arg, pathname);
+       }
+
+       /* ensure that parent directory exists */
+       make_parent(realpathname);
+
+       if (S_ISDIR(filetype))
+               extract_dir(a, e, realpathname);
+       else
+               extract_file(a, e, &realpathname);
+
+       free(realpathname);
+       free(pathname);
+}
+
+static void
+extract_stdout(struct archive *a, struct archive_entry *e)
+{
+       char *pathname;
+       mode_t filetype;
+
+       if ((pathname = pathdup(archive_entry_pathname(e))) == NULL) {
+               warningx("skipping empty or unreadable filename entry");
+               ac(archive_read_data_skip(a));
+               return;
+       }
+       filetype = archive_entry_filetype(e);
+
+       /* I don't think this can happen in a zipfile.. */
+       if (!S_ISDIR(filetype) && !S_ISREG(filetype) && !S_ISLNK(filetype)) {
+               warningx("skipping non-regular entry '%s'", pathname);
+               ac(archive_read_data_skip(a));
+               free(pathname);
+               return;
+       }
+
+       /* skip directories in -j case */
+       if (S_ISDIR(filetype)) {
+               ac(archive_read_data_skip(a));
+               free(pathname);
+               return;
+       }
+
+       /* apply include / exclude patterns */
+       if (!accept_pathname(pathname)) {
+               ac(archive_read_data_skip(a));
+               free(pathname);
+               return;
+       }
+
+       if (c_opt)
+               info("x %s\n", pathname);
+
+       (void)extract2fd(a, pathname, STDOUT_FILENO);
+
+       free(pathname);
+}
+
+/*
+ * Print the name of an entry to stdout.
+ */
+static void
+list(struct archive *a, struct archive_entry *e)
+{
+       char buf[20];
+       time_t mtime;
+       struct tm *tm;
+
+       mtime = archive_entry_mtime(e);
+       tm = localtime(&mtime);
+       if (*y_str)
+               strftime(buf, sizeof(buf), "%m-%d-%G %R", tm);
+       else
+               strftime(buf, sizeof(buf), "%m-%d-%g %R", tm);
+
+       if (!zipinfo_mode) {
+               if (v_opt == 1) {
+                       printf(" %8ju  %s   %s\n",
+                           (uintmax_t)archive_entry_size(e),
+                           buf, archive_entry_pathname(e));
+               } else if (v_opt == 2) {
+                       printf("%8ju  Stored  %7ju   0%%  %s  %08x  %s\n",
+                           (uintmax_t)archive_entry_size(e),
+                           (uintmax_t)archive_entry_size(e),
+                           buf,
+                           0U,
+                           archive_entry_pathname(e));
+               }
+       } else {
+               if (Z1_opt)
+                       printf("%s\n",archive_entry_pathname(e));
+       }
+       ac(archive_read_data_skip(a));
+}
+
+/*
+ * Extract to memory to check CRC
+ */
+static int
+test(struct archive *a, struct archive_entry *e)
+{
+       ssize_t len;
+       int error_count;
+
+       error_count = 0;
+       if (S_ISDIR(archive_entry_filetype(e)))
+               return 0;
+
+       info("    testing: %s\t", archive_entry_pathname(e));
+       while ((len = archive_read_data(a, buffer, sizeof buffer)) > 0)
+               /* nothing */;
+       if (len < 0) {
+               info(" %s\n", archive_error_string(a));
+               ++error_count;
+       } else {
+               info(" OK\n");
+       }
+
+       /* shouldn't be necessary, but it doesn't hurt */
+       ac(archive_read_data_skip(a));
+
+       return error_count;
+}
+
+/*
+ * Callback function for reading passphrase.
+ * Originally from cpio.c and passphrase.c, libarchive.
+ */
+#define PPBUFF_SIZE 1024
+static const char *
+passphrase_callback(struct archive *a, void *_client_data)
+{
+       char *p;
+
+       (void)a; /* UNUSED */
+       (void)_client_data; /* UNUSED */
+
+       if (passphrase_buf == NULL) {
+               passphrase_buf = malloc(PPBUFF_SIZE);
+               if (passphrase_buf == NULL) {
+                       errno = ENOMEM;
+                       error("malloc()");
+               }
+       }
+
+       p = lafe_readpassphrase("\nEnter password: ", passphrase_buf,
+               PPBUFF_SIZE);
+
+       if (p == NULL && errno != EINTR)
+               error("Error reading password");
+
+       return p;
+}
+
+/*
+ * Main loop: open the zipfile, iterate over its contents and decide what
+ * to do with each entry.
+ */
+static void
+unzip(const char *fn)
+{
+       struct archive *a;
+       struct archive_entry *e;
+       int ret;
+       uintmax_t total_size, file_count, error_count;
+
+       if ((a = archive_read_new()) == NULL)
+               error("archive_read_new failed");
+
+       ac(archive_read_support_format_zip(a));
+
+       if (O_arg)
+               ac(archive_read_set_format_option(a, "zip", "hdrcharset", O_arg));
+
+       if (P_arg)
+               archive_read_add_passphrase(a, P_arg);
+       else
+               archive_read_set_passphrase_callback(a, NULL,
+                       &passphrase_callback);
+
+       ac(archive_read_open_filename(a, fn, 8192));
+
+       if (!zipinfo_mode) {
+               if (!p_opt && !q_opt)
+                       printf("Archive:  %s\n", fn);
+               if (v_opt == 1) {
+                       printf("  Length     %sDate   Time    Name\n", y_str);
+                       printf(" --------    %s----   ----    ----\n", y_str);
+               } else if (v_opt == 2) {
+                       printf(" Length   Method    Size  Ratio   %sDate   Time   CRC-32    Name\n", y_str);
+                       printf("--------  ------  ------- -----   %s----   ----   ------    ----\n", y_str);
+               }
+       }
+
+       total_size = 0;
+       file_count = 0;
+       error_count = 0;
+       for (;;) {
+               ret = archive_read_next_header(a, &e);
+               if (ret == ARCHIVE_EOF)
+                       break;
+               ac(ret);
+               if (!zipinfo_mode) {
+                       if (t_opt)
+                               error_count += test(a, e);
+                       else if (v_opt)
+                               list(a, e);
+                       else if (p_opt || c_opt)
+                               extract_stdout(a, e);
+                       else
+                               extract(a, e);
+               } else {
+                       if (Z1_opt)
+                               list(a, e);
+               }
+
+               total_size += archive_entry_size(e);
+               ++file_count;
+       }
+
+       if (zipinfo_mode) {
+               if (v_opt == 1) {
+                       printf(" --------                   %s-------\n", y_str);
+                       printf(" %8ju                   %s%ju file%s\n",
+                           total_size, y_str, file_count, file_count != 1 ? "s" : "");
+               } else if (v_opt == 2) {
+                       printf("--------          -------  ---                            %s-------\n", y_str);
+                       printf("%8ju          %7ju   0%%                            %s%ju file%s\n",
+                           total_size, total_size, y_str, file_count,
+                           file_count != 1 ? "s" : "");
+               }
+       }
+
+       ac(archive_read_free(a));
+
+       if (passphrase_buf != NULL) {
+               memset(passphrase_buf, 0, PPBUFF_SIZE);
+               free(passphrase_buf);
+       }
+
+       if (t_opt) {
+               if (error_count > 0) {
+                       errorx("%ju checksum error(s) found.", error_count);
+               }
+               else {
+                       printf("No errors detected in compressed data of %s.\n",
+                              fn);
+               }
+       }
+}
+
+static void
+usage(void)
+{
+
+       fprintf(stderr,
+"Usage: unzip [-aCcfjLlnopqtuvyZ1] [{-O|-I} encoding] [-d dir] [-x pattern] [-P password] zipfile\n"
+"             [member ...]\n");
+       exit(EXIT_FAILURE);
+}
+
+static void
+version(void)
+{
+        printf("bsdunzip %s - %s \n",
+            BSDUNZIP_VERSION_STRING,
+            archive_version_details());
+        exit(0);
+}
+
+static int
+getopts(int argc, char *argv[])
+{
+       struct bsdunzip *bsdunzip, bsdunzip_storage;
+       int opt;
+       bsdunzip_optind = 1;
+
+       bsdunzip = &bsdunzip_storage;
+       memset(bsdunzip, 0, sizeof(*bsdunzip));
+
+        bsdunzip->argv = argv;
+        bsdunzip->argc = argc;
+
+       while ((opt = bsdunzip_getopt(bsdunzip)) != -1) {
+               unzip_exclude_mode = 0;
+               switch (opt) {
+               case 'a':
+                       a_opt = 1;
+                       break;
+               case 'C':
+                       C_opt = 1;
+                       break;
+               case 'c':
+                       c_opt = 1;
+                       break;
+               case 'd':
+                       d_arg = bsdunzip->argument;
+                       break;
+               case 'f':
+                       f_opt = 1;
+                       break;
+               case 'I':
+               case 'O':
+                       O_arg = bsdunzip->argument;
+                       break;
+               case 'j':
+                       j_opt = 1;
+                       break;
+               case 'L':
+                       L_opt = 1;
+                       break;
+               case 'l':
+                       if (v_opt == 0)
+                               v_opt = 1;
+                       break;
+               case 'n':
+                       n_opt = 1;
+                       break;
+               case 'o':
+                       o_opt = 1;
+                       q_opt = 1;
+                       break;
+               case 'p':
+                       p_opt = 1;
+                       break;
+               case 'P':
+                       P_arg = bsdunzip->argument;
+                       break;
+               case 'q':
+                       q_opt = 1;
+                       break;
+               case 't':
+                       t_opt = 1;
+                       break;
+               case 'u':
+                       u_opt = 1;
+                       break;
+               case 'v':
+                       v_opt = 2;
+                       break;
+               case 'x':
+                       add_pattern(&exclude, bsdunzip->argument);
+                       unzip_exclude_mode = 1;
+                       break;
+               case 'y':
+                       y_str = "  ";
+                       break;
+               case 'Z':
+                       zipinfo_mode = 1;
+                       if (bsdunzip->argument != NULL &&
+                           strcmp(bsdunzip->argument, "1") == 0) {
+                               Z1_opt = 1;
+                       }
+                       break;
+               case OPTION_VERSION:
+                       version_opt = 1;
+                       break;
+               case OPTION_NONE:
+                       break;
+               default:
+                       usage();
+               }
+               if (opt == OPTION_NONE)
+                       break;
+       }
+       return (bsdunzip_optind);
+}
+
+int
+main(int argc, char *argv[])
+{
+       const char *zipfile;
+       int nopts;
+
+       lafe_setprogname(*argv, "bsdunzip");
+
+       if (isatty(STDOUT_FILENO))
+               tty = 1;
+
+       if (getenv("UNZIP_DEBUG") != NULL)
+               unzip_debug = 1;
+       for (int i = 0; i < argc; ++i)
+               debug("%s%c", argv[i], (i < argc - 1) ? ' ' : '\n');
+
+#ifdef __GLIBC__
+       /* Prevent GNU getopt(3) from rearranging options. */
+       setenv("POSIXLY_CORRECT", "", 1);
+#endif
+       /*
+        * Info-ZIP's unzip(1) expects certain options to come before the
+        * zipfile name, and others to come after - though it does not
+        * enforce this.  For simplicity, we accept *all* options both
+        * before and after the zipfile name.
+        */
+       nopts = getopts(argc, argv);
+
+       if (version_opt == 1) {
+               version();
+               exit(EXIT_SUCCESS);
+       }
+
+       /*
+        * When more of the zipinfo mode options are implemented, this
+        * will need to change.
+        */
+       if (zipinfo_mode && !Z1_opt) {
+               printf("Zipinfo mode needs additional options\n");
+               exit(EXIT_FAILURE);
+       }
+
+       if (argc <= nopts)
+               usage();
+       zipfile = argv[nopts++];
+
+       if (strcmp(zipfile, "-") == 0)
+               zipfile = NULL; /* STDIN */
+
+       unzip_exclude_mode = 0;
+
+       while (nopts < argc && *argv[nopts] != '-')
+               add_pattern(&include, argv[nopts++]);
+
+       nopts--; /* fake argv[0] */
+       nopts += getopts(argc - nopts, argv + nopts);
+
+       /*
+        * For compatibility with Info-ZIP's unzip(1) we need to treat
+        * non-option arguments following an -x after the zipfile as
+        * exclude list members.
+        */
+       if (unzip_exclude_mode) {
+               while (nopts < argc && *argv[nopts] != '-')
+                       add_pattern(&exclude, argv[nopts++]);
+               nopts--; /* fake argv[0] */
+               nopts += getopts(argc - nopts, argv + nopts);
+       }
+
+       /* There may be residual arguments if we encountered -- */
+       while (nopts < argc)
+               add_pattern(&include, argv[nopts++]);
+
+       if (n_opt + o_opt + u_opt > 1)
+               errorx("-n, -o and -u are contradictory");
+
+       unzip(zipfile);
+
+       exit(EXIT_SUCCESS);
+}
diff --git a/unzip/bsdunzip.h b/unzip/bsdunzip.h
new file mode 100644 (file)
index 0000000..ab81e39
--- /dev/null
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 2023, 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.
+ */
+
+#ifndef BSDUNZIP_H_INCLUDED
+#define BSDUNZIP_H_INCLUDED
+
+#if defined(PLATFORM_CONFIG_H)
+/* Use hand-built config.h in environments that need it. */
+#include PLATFORM_CONFIG_H
+#else
+/* Not having a config.h of some sort is a serious problem. */
+#include "config.h"
+#endif
+
+#include <archive.h>
+#include <archive_entry.h>
+
+struct bsdunzip {
+       /* Option parser state */
+       int               getopt_state;
+       char             *getopt_word;
+
+       /* Miscellaneous state information */
+       int               argc;
+       char            **argv;
+       const char       *argument;
+};
+
+enum {
+       OPTION_NONE,
+       OPTION_VERSION
+};
+
+int bsdunzip_getopt(struct bsdunzip *);
+
+extern int bsdunzip_optind;
+
+#endif
diff --git a/unzip/bsdunzip_platform.h b/unzip/bsdunzip_platform.h
new file mode 100644 (file)
index 0000000..76eca4f
--- /dev/null
@@ -0,0 +1,75 @@
+/*-
+ * 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.
+ *
+ * $FreeBSD: src/usr.bin/tar/bsdtar_platform.h,v 1.26 2008/12/06 07:37:14 kientzle Exp $
+ */
+
+/*
+ * This header is the first thing included in any of the bsdtar
+ * source files.  As far as possible, platform-specific issues should
+ * be dealt with here and not within individual source files.
+ */
+
+#ifndef BSDUNZIP_PLATFORM_H_INCLUDED
+#define        BSDUNZIP_PLATFORM_H_INCLUDED
+
+#if defined(PLATFORM_CONFIG_H)
+/* Use hand-built config.h in environments that need it. */
+#include PLATFORM_CONFIG_H
+#else
+/* Not having a config.h of some sort is a serious problem. */
+#include "config.h"
+#endif
+
+/* Get a real definition for __FBSDID if we can */
+#if HAVE_SYS_CDEFS_H
+#include <sys/cdefs.h>
+#endif
+
+/* If not, define it so as to avoid dangling semicolons. */
+#ifndef __FBSDID
+#define        __FBSDID(a)     struct _undefined_hack
+#endif
+
+#ifdef HAVE_LIBARCHIVE
+/* If we're using the platform libarchive, include system headers. */
+#include <archive.h>
+#include <archive_entry.h>
+#else
+/* Otherwise, include user headers. */
+#include "archive.h"
+#include "archive_entry.h"
+#endif
+
+/* How to mark functions that don't return. */
+/* This facilitates use of some newer static code analysis tools. */
+#undef __LA_DEAD
+#if defined(__GNUC__) && (__GNUC__ > 2 || \
+                         (__GNUC__ == 2 && __GNUC_MINOR__ >= 5))
+#define        __LA_DEAD       __attribute__((__noreturn__))
+#else
+#define        __LA_DEAD
+#endif
+
+#endif /* !BSDUNZIP_PLATFORM_H_INCLUDED */
diff --git a/unzip/cmdline.c b/unzip/cmdline.c
new file mode 100644 (file)
index 0000000..76eb423
--- /dev/null
@@ -0,0 +1,248 @@
+/*-
+ * Copyright (c) 2003-2008 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.
+ */
+
+/*
+ * Command line parser for bsdunzip.
+ */
+
+#include "bsdunzip_platform.h"
+__FBSDID("$FreeBSD$");
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "bsdunzip.h"
+#include "err.h"
+
+/*
+ * Short options for bsdunzip.  Please keep this sorted.
+ */
+static const char *short_options
+       = "aCcd:fI:jLlnO:opP:qtuvx:yZ:";
+
+/*
+ * Long options for bsdunzip.  Please keep this list sorted.
+ *
+ * The symbolic names for options that lack a short equivalent are
+ * defined in bsdunzip.h.  Also note that so far I've found no need
+ * to support optional arguments to long options.  That would be
+ * a small change to the code below.
+ */
+
+static const struct bsdunzip_option {
+       const char *name;
+       int required;      /* 1 if this option requires an argument. */
+       int equivalent;    /* Equivalent short option. */
+} bsdunzip_longopts[] = {
+       { "version", 0, OPTION_VERSION },
+       { NULL, 0, 0 }
+};
+
+/*
+ * This getopt implementation has two key features that common
+ * getopt_long() implementations lack.  Apart from those, it's a
+ * straightforward option parser, considerably simplified by not
+ * needing to support the wealth of exotic getopt_long() features.  It
+ * has, of course, been shamelessly tailored for bsdunzip.  (If you're
+ * looking for a generic getopt_long() implementation for your
+ * project, I recommend Gregory Pietsch's public domain getopt_long()
+ * implementation.)  The two additional features are:
+ */
+
+int
+bsdunzip_getopt(struct bsdunzip *bsdunzip)
+{
+       enum { state_start = 0, state_next_word, state_short, state_long };
+
+       const struct bsdunzip_option *popt, *match = NULL, *match2 = NULL;
+       const char *p, *long_prefix = "--";
+       size_t optlength;
+       int opt = OPTION_NONE;
+       int required = 0;
+
+       bsdunzip->argument = NULL;
+
+       /* First time through, initialize everything. */
+       if (bsdunzip->getopt_state == state_start) {
+               /* Skip program name. */
+               ++bsdunzip->argv;
+               --bsdunzip->argc;
+               if (*bsdunzip->argv == NULL)
+                       return (-1);
+               bsdunzip->getopt_state = state_next_word;
+       }
+
+       /*
+        * We're ready to look at the next word in argv.
+        */
+       if (bsdunzip->getopt_state == state_next_word) {
+               /* No more arguments, so no more options. */
+               if (bsdunzip->argv[0] == NULL)
+                       return (-1);
+               /* Doesn't start with '-', so no more options. */
+               if (bsdunzip->argv[0][0] != '-')
+                       return (-1);
+               /* "--" marks end of options; consume it and return. */
+               if (strcmp(bsdunzip->argv[0], "--") == 0) {
+                       ++bsdunzip->argv;
+                       --bsdunzip->argc;
+                       return (-1);
+               }
+               /* Get next word for parsing. */
+               bsdunzip->getopt_word = *bsdunzip->argv++;
+               --bsdunzip->argc;
+               bsdunzip_optind++;
+               if (bsdunzip->getopt_word[1] == '-') {
+                       /* Set up long option parser. */
+                       bsdunzip->getopt_state = state_long;
+                       bsdunzip->getopt_word += 2; /* Skip leading '--' */
+               } else {
+                       /* Set up short option parser. */
+                       bsdunzip->getopt_state = state_short;
+                       ++bsdunzip->getopt_word;  /* Skip leading '-' */
+               }
+       }
+
+       /*
+        * We're parsing a group of POSIX-style single-character options.
+        */
+       if (bsdunzip->getopt_state == state_short) {
+               /* Peel next option off of a group of short options. */
+               opt = *bsdunzip->getopt_word++;
+               if (opt == '\0') {
+                       /* End of this group; recurse to get next option. */
+                       bsdunzip->getopt_state = state_next_word;
+                       return bsdunzip_getopt(bsdunzip);
+               }
+
+               /* Does this option take an argument? */
+               p = strchr(short_options, opt);
+               if (p == NULL)
+                       return ('?');
+               if (p[1] == ':')
+                       required = 1;
+
+               /* If it takes an argument, parse that. */
+               if (required) {
+                       /* If arg is run-in, bsdunzip->getopt_word already points to it. */
+                       if (bsdunzip->getopt_word[0] == '\0') {
+                               /* Otherwise, pick up the next word. */
+                               bsdunzip->getopt_word = *bsdunzip->argv;
+                               if (bsdunzip->getopt_word == NULL) {
+                                       lafe_warnc(0,
+                                           "Option -%c requires an argument",
+                                           opt);
+                                       return ('?');
+                               }
+                               ++bsdunzip->argv;
+                               --bsdunzip->argc;
+                               bsdunzip_optind++;
+                       }
+                       bsdunzip->getopt_state = state_next_word;
+                       bsdunzip->argument = bsdunzip->getopt_word;
+               }
+       }
+
+       /* We're reading a long option */
+       if (bsdunzip->getopt_state == state_long) {
+               /* After this long option, we'll be starting a new word. */
+               bsdunzip->getopt_state = state_next_word;
+
+               /* Option name ends at '=' if there is one. */
+               p = strchr(bsdunzip->getopt_word, '=');
+               if (p != NULL) {
+                       optlength = (size_t)(p - bsdunzip->getopt_word);
+                       bsdunzip->argument = (char *)(uintptr_t)(p + 1);
+               } else {
+                       optlength = strlen(bsdunzip->getopt_word);
+               }
+
+               /* Search the table for an unambiguous match. */
+               for (popt = bsdunzip_longopts; popt->name != NULL; popt++) {
+                       /* Short-circuit if first chars don't match. */
+                       if (popt->name[0] != bsdunzip->getopt_word[0])
+                               continue;
+                       /* If option is a prefix of name in table, record it.*/
+                       if (strncmp(bsdunzip->getopt_word, popt->name, optlength) == 0) {
+                               match2 = match; /* Record up to two matches. */
+                               match = popt;
+                               /* If it's an exact match, we're done. */
+                               if (strlen(popt->name) == optlength) {
+                                       match2 = NULL; /* Forget the others. */
+                                       break;
+                               }
+                       }
+               }
+
+               /* Fail if there wasn't a unique match. */
+               if (match == NULL) {
+                       lafe_warnc(0,
+                           "Option %s%s is not supported",
+                           long_prefix, bsdunzip->getopt_word);
+                       return ('?');
+               }
+               if (match2 != NULL) {
+                       lafe_warnc(0,
+                           "Ambiguous option %s%s (matches --%s and --%s)",
+                           long_prefix, bsdunzip->getopt_word, match->name, match2->name);
+                       return ('?');
+               }
+
+               /* We've found a unique match; does it need an argument? */
+               if (match->required) {
+                       /* Argument required: get next word if necessary. */
+                       if (bsdunzip->argument == NULL) {
+                               bsdunzip->argument = *bsdunzip->argv;
+                               if (bsdunzip->argument == NULL) {
+                                       lafe_warnc(0,
+                                           "Option %s%s requires an argument",
+                                           long_prefix, match->name);
+                                       return ('?');
+                               }
+                               ++bsdunzip->argv;
+                               --bsdunzip->argc;
+                               bsdunzip_optind++;
+                       }
+               } else {
+                       /* Argument forbidden: fail if there is one. */
+                       if (bsdunzip->argument != NULL) {
+                               lafe_warnc(0,
+                                   "Option %s%s does not allow an argument",
+                                   long_prefix, match->name);
+                               return ('?');
+                       }
+               }
+               return (match->equivalent);
+       }
+
+       return (opt);
+}
diff --git a/unzip/la_getline.c b/unzip/la_getline.c
new file mode 100644 (file)
index 0000000..79a6bc0
--- /dev/null
@@ -0,0 +1,99 @@
+/*     $NetBSD: getline.c,v 1.2 2014/09/16 17:23:50 christos Exp $     */
+
+/*-
+ * Copyright (c) 2011 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 "bsdunzip_platform.h"
+#ifndef HAVE_GETLINE
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STDIO_H
+#include <stdio.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+static ssize_t
+la_getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
+{
+       char *ptr, *eptr;
+
+
+       if (*buf == NULL || *bufsiz == 0) {
+               *bufsiz = BUFSIZ;
+               if ((*buf = malloc(*bufsiz)) == NULL)
+                       return -1;
+       }
+
+       for (ptr = *buf, eptr = *buf + *bufsiz;;) {
+               int c = fgetc(fp);
+               if (c == -1) {
+                       if (feof(fp)) {
+                               ssize_t diff = (ssize_t)(ptr - *buf);
+                               if (diff != 0) {
+                                       *ptr = '\0';
+                                       return diff;
+                               }
+                       }
+                       return -1;
+               }
+               *ptr++ = c;
+               if (c == delimiter) {
+                       *ptr = '\0';
+                       return ptr - *buf;
+               }
+               if (ptr + 2 >= eptr) {
+                       char *nbuf;
+                       size_t nbufsiz = *bufsiz * 2;
+                       ssize_t d = ptr - *buf;
+                       if ((nbuf = realloc(*buf, nbufsiz)) == NULL)
+                               return -1;
+                       *buf = nbuf;
+                       *bufsiz = nbufsiz;
+                       eptr = nbuf + nbufsiz;
+                       ptr = nbuf + d;
+               }
+       }
+}
+
+ssize_t
+getline(char **buf, size_t *bufsiz, FILE *fp)
+{
+       return la_getdelim(buf, bufsiz, '\n', fp);
+}
+#endif
diff --git a/unzip/la_queue.h b/unzip/la_queue.h
new file mode 100644 (file)
index 0000000..9175265
--- /dev/null
@@ -0,0 +1,840 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright (c) 1991, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ */
+
+#ifndef _SYS_QUEUE_H_
+#define        _SYS_QUEUE_H_
+
+/*
+ * This file defines four types of data structures: singly-linked lists,
+ * singly-linked tail queues, lists and tail queues.
+ *
+ * A singly-linked list is headed by a single forward pointer. The elements
+ * are singly linked for minimum space and pointer manipulation overhead at
+ * the expense of O(n) removal for arbitrary elements. New elements can be
+ * added to the list after an existing element or at the head of the list.
+ * Elements being removed from the head of the list should use the explicit
+ * macro for this purpose for optimum efficiency. A singly-linked list may
+ * only be traversed in the forward direction.  Singly-linked lists are ideal
+ * for applications with large datasets and few or no removals or for
+ * implementing a LIFO queue.
+ *
+ * A singly-linked tail queue is headed by a pair of pointers, one to the
+ * head of the list and the other to the tail of the list. The elements are
+ * singly linked for minimum space and pointer manipulation overhead at the
+ * expense of O(n) removal for arbitrary elements. New elements can be added
+ * to the list after an existing element, at the head of the list, or at the
+ * end of the list. Elements being removed from the head of the tail queue
+ * should use the explicit macro for this purpose for optimum efficiency.
+ * A singly-linked tail queue may only be traversed in the forward direction.
+ * Singly-linked tail queues are ideal for applications with large datasets
+ * and few or no removals or for implementing a FIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may be traversed in either direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ *
+ * Below is a summary of implemented functions where:
+ *  +  means the macro is available
+ *  -  means the macro is not available
+ *  s  means the macro is available but is slow (runs in O(n) time)
+ *
+ *                             SLIST   LIST    STAILQ  TAILQ
+ * _HEAD                       +       +       +       +
+ * _CLASS_HEAD                 +       +       +       +
+ * _HEAD_INITIALIZER           +       +       +       +
+ * _ENTRY                      +       +       +       +
+ * _CLASS_ENTRY                        +       +       +       +
+ * _INIT                       +       +       +       +
+ * _EMPTY                      +       +       +       +
+ * _FIRST                      +       +       +       +
+ * _NEXT                       +       +       +       +
+ * _PREV                       -       +       -       +
+ * _LAST                       -       -       +       +
+ * _LAST_FAST                  -       -       -       +
+ * _FOREACH                    +       +       +       +
+ * _FOREACH_FROM               +       +       +       +
+ * _FOREACH_SAFE               +       +       +       +
+ * _FOREACH_FROM_SAFE          +       +       +       +
+ * _FOREACH_REVERSE            -       -       -       +
+ * _FOREACH_REVERSE_FROM       -       -       -       +
+ * _FOREACH_REVERSE_SAFE       -       -       -       +
+ * _FOREACH_REVERSE_FROM_SAFE  -       -       -       +
+ * _INSERT_HEAD                        +       +       +       +
+ * _INSERT_BEFORE              -       +       -       +
+ * _INSERT_AFTER               +       +       +       +
+ * _INSERT_TAIL                        -       -       +       +
+ * _CONCAT                     s       s       +       +
+ * _REMOVE_AFTER               +       -       +       -
+ * _REMOVE_HEAD                        +       -       +       -
+ * _REMOVE                     s       +       s       +
+ * _SWAP                       +       +       +       +
+ */
+#ifdef QUEUE_MACRO_DEBUG
+#warn Use QUEUE_MACRO_DEBUG_TRACE and/or QUEUE_MACRO_DEBUG_TRASH
+#define        QUEUE_MACRO_DEBUG_TRACE
+#define        QUEUE_MACRO_DEBUG_TRASH
+#endif
+
+#ifdef QUEUE_MACRO_DEBUG_TRACE
+/* Store the last 2 places the queue element or head was altered */
+struct qm_trace {
+       unsigned long    lastline;
+       unsigned long    prevline;
+       const char      *lastfile;
+       const char      *prevfile;
+};
+
+#define        TRACEBUF        struct qm_trace trace;
+#define        TRACEBUF_INITIALIZER    { __LINE__, 0, __FILE__, NULL } ,
+
+#define        QMD_TRACE_HEAD(head) do {                                       \
+       (head)->trace.prevline = (head)->trace.lastline;                \
+       (head)->trace.prevfile = (head)->trace.lastfile;                \
+       (head)->trace.lastline = __LINE__;                              \
+       (head)->trace.lastfile = __FILE__;                              \
+} while (0)
+
+#define        QMD_TRACE_ELEM(elem) do {                                       \
+       (elem)->trace.prevline = (elem)->trace.lastline;                \
+       (elem)->trace.prevfile = (elem)->trace.lastfile;                \
+       (elem)->trace.lastline = __LINE__;                              \
+       (elem)->trace.lastfile = __FILE__;                              \
+} while (0)
+
+#else  /* !QUEUE_MACRO_DEBUG_TRACE */
+#define        QMD_TRACE_ELEM(elem)
+#define        QMD_TRACE_HEAD(head)
+#define        TRACEBUF
+#define        TRACEBUF_INITIALIZER
+#endif /* QUEUE_MACRO_DEBUG_TRACE */
+
+#ifdef QUEUE_MACRO_DEBUG_TRASH
+#define        QMD_SAVELINK(name, link)        void **name = (void *)&(link)
+#define        TRASHIT(x)              do {(x) = (void *)-1;} while (0)
+#define        QMD_IS_TRASHED(x)       ((x) == (void *)(intptr_t)-1)
+#else  /* !QUEUE_MACRO_DEBUG_TRASH */
+#define        QMD_SAVELINK(name, link)
+#define        TRASHIT(x)
+#define        QMD_IS_TRASHED(x)       0
+#endif /* QUEUE_MACRO_DEBUG_TRASH */
+
+#ifdef __cplusplus
+/*
+ * In C++ there can be structure lists and class lists:
+ */
+#define        QUEUE_TYPEOF(type) type
+#else
+#define        QUEUE_TYPEOF(type) struct type
+#endif
+
+/*
+ * Singly-linked List declarations.
+ */
+#define        SLIST_HEAD(name, type)                                          \
+struct name {                                                          \
+       struct type *slh_first; /* first element */                     \
+}
+
+#define        SLIST_CLASS_HEAD(name, type)                                    \
+struct name {                                                          \
+       class type *slh_first;  /* first element */                     \
+}
+
+#define        SLIST_HEAD_INITIALIZER(head)                                    \
+       { NULL }
+
+#define        SLIST_ENTRY(type)                                               \
+struct {                                                               \
+       struct type *sle_next;  /* next element */                      \
+}
+
+#define        SLIST_CLASS_ENTRY(type)                                         \
+struct {                                                               \
+       class type *sle_next;           /* next element */              \
+}
+
+/*
+ * Singly-linked List functions.
+ */
+#if (defined(_KERNEL) && defined(INVARIANTS))
+#define        QMD_SLIST_CHECK_PREVPTR(prevp, elm) do {                        \
+       if (*(prevp) != (elm))                                          \
+               panic("Bad prevptr *(%p) == %p != %p",                  \
+                   (prevp), *(prevp), (elm));                          \
+} while (0)
+#else
+#define        QMD_SLIST_CHECK_PREVPTR(prevp, elm)
+#endif
+
+#define SLIST_CONCAT(head1, head2, type, field) do {                   \
+       QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head1);                \
+       if (curelm == NULL) {                                           \
+               if ((SLIST_FIRST(head1) = SLIST_FIRST(head2)) != NULL)  \
+                       SLIST_INIT(head2);                              \
+       } else if (SLIST_FIRST(head2) != NULL) {                        \
+               while (SLIST_NEXT(curelm, field) != NULL)               \
+                       curelm = SLIST_NEXT(curelm, field);             \
+               SLIST_NEXT(curelm, field) = SLIST_FIRST(head2);         \
+               SLIST_INIT(head2);                                      \
+       }                                                               \
+} while (0)
+
+#define        SLIST_EMPTY(head)       ((head)->slh_first == NULL)
+
+#define        SLIST_FIRST(head)       ((head)->slh_first)
+
+#define        SLIST_FOREACH(var, head, field)                                 \
+       for ((var) = SLIST_FIRST((head));                               \
+           (var);                                                      \
+           (var) = SLIST_NEXT((var), field))
+
+#define        SLIST_FOREACH_FROM(var, head, field)                            \
+       for ((var) = ((var) ? (var) : SLIST_FIRST((head)));             \
+           (var);                                                      \
+           (var) = SLIST_NEXT((var), field))
+
+#define        SLIST_FOREACH_SAFE(var, head, field, tvar)                      \
+       for ((var) = SLIST_FIRST((head));                               \
+           (var) && ((tvar) = SLIST_NEXT((var), field), 1);            \
+           (var) = (tvar))
+
+#define        SLIST_FOREACH_FROM_SAFE(var, head, field, tvar)                 \
+       for ((var) = ((var) ? (var) : SLIST_FIRST((head)));             \
+           (var) && ((tvar) = SLIST_NEXT((var), field), 1);            \
+           (var) = (tvar))
+
+#define        SLIST_FOREACH_PREVPTR(var, varp, head, field)                   \
+       for ((varp) = &SLIST_FIRST((head));                             \
+           ((var) = *(varp)) != NULL;                                  \
+           (varp) = &SLIST_NEXT((var), field))
+
+#define        SLIST_INIT(head) do {                                           \
+       SLIST_FIRST((head)) = NULL;                                     \
+} while (0)
+
+#define        SLIST_INSERT_AFTER(slistelm, elm, field) do {                   \
+       SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field);       \
+       SLIST_NEXT((slistelm), field) = (elm);                          \
+} while (0)
+
+#define        SLIST_INSERT_HEAD(head, elm, field) do {                        \
+       SLIST_NEXT((elm), field) = SLIST_FIRST((head));                 \
+       SLIST_FIRST((head)) = (elm);                                    \
+} while (0)
+
+#define        SLIST_NEXT(elm, field)  ((elm)->field.sle_next)
+
+#define        SLIST_REMOVE(head, elm, type, field) do {                       \
+       QMD_SAVELINK(oldnext, (elm)->field.sle_next);                   \
+       if (SLIST_FIRST((head)) == (elm)) {                             \
+               SLIST_REMOVE_HEAD((head), field);                       \
+       }                                                               \
+       else {                                                          \
+               QUEUE_TYPEOF(type) *curelm = SLIST_FIRST(head);         \
+               while (SLIST_NEXT(curelm, field) != (elm))              \
+                       curelm = SLIST_NEXT(curelm, field);             \
+               SLIST_REMOVE_AFTER(curelm, field);                      \
+       }                                                               \
+       TRASHIT(*oldnext);                                              \
+} while (0)
+
+#define SLIST_REMOVE_AFTER(elm, field) do {                            \
+       SLIST_NEXT(elm, field) =                                        \
+           SLIST_NEXT(SLIST_NEXT(elm, field), field);                  \
+} while (0)
+
+#define        SLIST_REMOVE_HEAD(head, field) do {                             \
+       SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field);   \
+} while (0)
+
+#define        SLIST_REMOVE_PREVPTR(prevp, elm, field) do {                    \
+       QMD_SLIST_CHECK_PREVPTR(prevp, elm);                            \
+       *(prevp) = SLIST_NEXT(elm, field);                              \
+       TRASHIT((elm)->field.sle_next);                                 \
+} while (0)
+
+#define SLIST_SWAP(head1, head2, type) do {                            \
+       QUEUE_TYPEOF(type) *swap_first = SLIST_FIRST(head1);            \
+       SLIST_FIRST(head1) = SLIST_FIRST(head2);                        \
+       SLIST_FIRST(head2) = swap_first;                                \
+} while (0)
+
+/*
+ * Singly-linked Tail queue declarations.
+ */
+#define        STAILQ_HEAD(name, type)                                         \
+struct name {                                                          \
+       struct type *stqh_first;/* first element */                     \
+       struct type **stqh_last;/* addr of last next element */         \
+}
+
+#define        STAILQ_CLASS_HEAD(name, type)                                   \
+struct name {                                                          \
+       class type *stqh_first; /* first element */                     \
+       class type **stqh_last; /* addr of last next element */         \
+}
+
+#define        STAILQ_HEAD_INITIALIZER(head)                                   \
+       { NULL, &(head).stqh_first }
+
+#define        STAILQ_ENTRY(type)                                              \
+struct {                                                               \
+       struct type *stqe_next; /* next element */                      \
+}
+
+#define        STAILQ_CLASS_ENTRY(type)                                        \
+struct {                                                               \
+       class type *stqe_next;  /* next element */                      \
+}
+
+/*
+ * Singly-linked Tail queue functions.
+ */
+#define        STAILQ_CONCAT(head1, head2) do {                                \
+       if (!STAILQ_EMPTY((head2))) {                                   \
+               *(head1)->stqh_last = (head2)->stqh_first;              \
+               (head1)->stqh_last = (head2)->stqh_last;                \
+               STAILQ_INIT((head2));                                   \
+       }                                                               \
+} while (0)
+
+#define        STAILQ_EMPTY(head)      ((head)->stqh_first == NULL)
+
+#define        STAILQ_FIRST(head)      ((head)->stqh_first)
+
+#define        STAILQ_FOREACH(var, head, field)                                \
+       for((var) = STAILQ_FIRST((head));                               \
+          (var);                                                       \
+          (var) = STAILQ_NEXT((var), field))
+
+#define        STAILQ_FOREACH_FROM(var, head, field)                           \
+       for ((var) = ((var) ? (var) : STAILQ_FIRST((head)));            \
+          (var);                                                       \
+          (var) = STAILQ_NEXT((var), field))
+
+#define        STAILQ_FOREACH_SAFE(var, head, field, tvar)                     \
+       for ((var) = STAILQ_FIRST((head));                              \
+           (var) && ((tvar) = STAILQ_NEXT((var), field), 1);           \
+           (var) = (tvar))
+
+#define        STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar)                \
+       for ((var) = ((var) ? (var) : STAILQ_FIRST((head)));            \
+           (var) && ((tvar) = STAILQ_NEXT((var), field), 1);           \
+           (var) = (tvar))
+
+#define        STAILQ_INIT(head) do {                                          \
+       STAILQ_FIRST((head)) = NULL;                                    \
+       (head)->stqh_last = &STAILQ_FIRST((head));                      \
+} while (0)
+
+#define        STAILQ_INSERT_AFTER(head, tqelm, elm, field) do {               \
+       if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
+               (head)->stqh_last = &STAILQ_NEXT((elm), field);         \
+       STAILQ_NEXT((tqelm), field) = (elm);                            \
+} while (0)
+
+#define        STAILQ_INSERT_HEAD(head, elm, field) do {                       \
+       if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
+               (head)->stqh_last = &STAILQ_NEXT((elm), field);         \
+       STAILQ_FIRST((head)) = (elm);                                   \
+} while (0)
+
+#define        STAILQ_INSERT_TAIL(head, elm, field) do {                       \
+       STAILQ_NEXT((elm), field) = NULL;                               \
+       *(head)->stqh_last = (elm);                                     \
+       (head)->stqh_last = &STAILQ_NEXT((elm), field);                 \
+} while (0)
+
+#define        STAILQ_LAST(head, type, field)                          \
+       (STAILQ_EMPTY((head)) ? NULL :                          \
+           __containerof((head)->stqh_last,                    \
+           QUEUE_TYPEOF(type), field.stqe_next))
+
+#define        STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
+
+#define        STAILQ_REMOVE(head, elm, type, field) do {                      \
+       QMD_SAVELINK(oldnext, (elm)->field.stqe_next);                  \
+       if (STAILQ_FIRST((head)) == (elm)) {                            \
+               STAILQ_REMOVE_HEAD((head), field);                      \
+       }                                                               \
+       else {                                                          \
+               QUEUE_TYPEOF(type) *curelm = STAILQ_FIRST(head);        \
+               while (STAILQ_NEXT(curelm, field) != (elm))             \
+                       curelm = STAILQ_NEXT(curelm, field);            \
+               STAILQ_REMOVE_AFTER(head, curelm, field);               \
+       }                                                               \
+       TRASHIT(*oldnext);                                              \
+} while (0)
+
+#define STAILQ_REMOVE_AFTER(head, elm, field) do {                     \
+       if ((STAILQ_NEXT(elm, field) =                                  \
+            STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL)      \
+               (head)->stqh_last = &STAILQ_NEXT((elm), field);         \
+} while (0)
+
+#define        STAILQ_REMOVE_HEAD(head, field) do {                            \
+       if ((STAILQ_FIRST((head)) =                                     \
+            STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL)         \
+               (head)->stqh_last = &STAILQ_FIRST((head));              \
+} while (0)
+
+#define STAILQ_SWAP(head1, head2, type) do {                           \
+       QUEUE_TYPEOF(type) *swap_first = STAILQ_FIRST(head1);           \
+       QUEUE_TYPEOF(type) **swap_last = (head1)->stqh_last;            \
+       STAILQ_FIRST(head1) = STAILQ_FIRST(head2);                      \
+       (head1)->stqh_last = (head2)->stqh_last;                        \
+       STAILQ_FIRST(head2) = swap_first;                               \
+       (head2)->stqh_last = swap_last;                                 \
+       if (STAILQ_EMPTY(head1))                                        \
+               (head1)->stqh_last = &STAILQ_FIRST(head1);              \
+       if (STAILQ_EMPTY(head2))                                        \
+               (head2)->stqh_last = &STAILQ_FIRST(head2);              \
+} while (0)
+
+
+/*
+ * List declarations.
+ */
+#define        LIST_HEAD(name, type)                                           \
+struct name {                                                          \
+       struct type *lh_first;  /* first element */                     \
+}
+
+#define        LIST_CLASS_HEAD(name, type)                                     \
+struct name {                                                          \
+       class type *lh_first;   /* first element */                     \
+}
+
+#define        LIST_HEAD_INITIALIZER(head)                                     \
+       { NULL }
+
+#define        LIST_ENTRY(type)                                                \
+struct {                                                               \
+       struct type *le_next;   /* next element */                      \
+       struct type **le_prev;  /* address of previous next element */  \
+}
+
+#define        LIST_CLASS_ENTRY(type)                                          \
+struct {                                                               \
+       class type *le_next;    /* next element */                      \
+       class type **le_prev;   /* address of previous next element */  \
+}
+
+/*
+ * List functions.
+ */
+
+#if (defined(_KERNEL) && defined(INVARIANTS))
+/*
+ * QMD_LIST_CHECK_HEAD(LIST_HEAD *head, LIST_ENTRY NAME)
+ *
+ * If the list is non-empty, validates that the first element of the list
+ * points back at 'head.'
+ */
+#define        QMD_LIST_CHECK_HEAD(head, field) do {                           \
+       if (LIST_FIRST((head)) != NULL &&                               \
+           LIST_FIRST((head))->field.le_prev !=                        \
+            &LIST_FIRST((head)))                                       \
+               panic("Bad list head %p first->prev != head", (head));  \
+} while (0)
+
+/*
+ * QMD_LIST_CHECK_NEXT(TYPE *elm, LIST_ENTRY NAME)
+ *
+ * If an element follows 'elm' in the list, validates that the next element
+ * points back at 'elm.'
+ */
+#define        QMD_LIST_CHECK_NEXT(elm, field) do {                            \
+       if (LIST_NEXT((elm), field) != NULL &&                          \
+           LIST_NEXT((elm), field)->field.le_prev !=                   \
+            &((elm)->field.le_next))                                   \
+               panic("Bad link elm %p next->prev != elm", (elm));      \
+} while (0)
+
+/*
+ * QMD_LIST_CHECK_PREV(TYPE *elm, LIST_ENTRY NAME)
+ *
+ * Validates that the previous element (or head of the list) points to 'elm.'
+ */
+#define        QMD_LIST_CHECK_PREV(elm, field) do {                            \
+       if (*(elm)->field.le_prev != (elm))                             \
+               panic("Bad link elm %p prev->next != elm", (elm));      \
+} while (0)
+#else
+#define        QMD_LIST_CHECK_HEAD(head, field)
+#define        QMD_LIST_CHECK_NEXT(elm, field)
+#define        QMD_LIST_CHECK_PREV(elm, field)
+#endif /* (_KERNEL && INVARIANTS) */
+
+#define LIST_CONCAT(head1, head2, type, field) do {                          \
+       QUEUE_TYPEOF(type) *curelm = LIST_FIRST(head1);                       \
+       if (curelm == NULL) {                                                 \
+               if ((LIST_FIRST(head1) = LIST_FIRST(head2)) != NULL) {        \
+                       LIST_FIRST(head2)->field.le_prev =                    \
+                           &LIST_FIRST((head1));                             \
+                       LIST_INIT(head2);                                     \
+               }                                                             \
+       } else if (LIST_FIRST(head2) != NULL) {                               \
+               while (LIST_NEXT(curelm, field) != NULL)                      \
+                       curelm = LIST_NEXT(curelm, field);                    \
+               LIST_NEXT(curelm, field) = LIST_FIRST(head2);                 \
+               LIST_FIRST(head2)->field.le_prev = &LIST_NEXT(curelm, field); \
+               LIST_INIT(head2);                                             \
+       }                                                                     \
+} while (0)
+
+#define        LIST_EMPTY(head)        ((head)->lh_first == NULL)
+
+#define        LIST_FIRST(head)        ((head)->lh_first)
+
+#define        LIST_FOREACH(var, head, field)                                  \
+       for ((var) = LIST_FIRST((head));                                \
+           (var);                                                      \
+           (var) = LIST_NEXT((var), field))
+
+#define        LIST_FOREACH_FROM(var, head, field)                             \
+       for ((var) = ((var) ? (var) : LIST_FIRST((head)));              \
+           (var);                                                      \
+           (var) = LIST_NEXT((var), field))
+
+#define        LIST_FOREACH_SAFE(var, head, field, tvar)                       \
+       for ((var) = LIST_FIRST((head));                                \
+           (var) && ((tvar) = LIST_NEXT((var), field), 1);             \
+           (var) = (tvar))
+
+#define        LIST_FOREACH_FROM_SAFE(var, head, field, tvar)                  \
+       for ((var) = ((var) ? (var) : LIST_FIRST((head)));              \
+           (var) && ((tvar) = LIST_NEXT((var), field), 1);             \
+           (var) = (tvar))
+
+#define        LIST_INIT(head) do {                                            \
+       LIST_FIRST((head)) = NULL;                                      \
+} while (0)
+
+#define        LIST_INSERT_AFTER(listelm, elm, field) do {                     \
+       QMD_LIST_CHECK_NEXT(listelm, field);                            \
+       if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
+               LIST_NEXT((listelm), field)->field.le_prev =            \
+                   &LIST_NEXT((elm), field);                           \
+       LIST_NEXT((listelm), field) = (elm);                            \
+       (elm)->field.le_prev = &LIST_NEXT((listelm), field);            \
+} while (0)
+
+#define        LIST_INSERT_BEFORE(listelm, elm, field) do {                    \
+       QMD_LIST_CHECK_PREV(listelm, field);                            \
+       (elm)->field.le_prev = (listelm)->field.le_prev;                \
+       LIST_NEXT((elm), field) = (listelm);                            \
+       *(listelm)->field.le_prev = (elm);                              \
+       (listelm)->field.le_prev = &LIST_NEXT((elm), field);            \
+} while (0)
+
+#define        LIST_INSERT_HEAD(head, elm, field) do {                         \
+       QMD_LIST_CHECK_HEAD((head), field);                             \
+       if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL)     \
+               LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
+       LIST_FIRST((head)) = (elm);                                     \
+       (elm)->field.le_prev = &LIST_FIRST((head));                     \
+} while (0)
+
+#define        LIST_NEXT(elm, field)   ((elm)->field.le_next)
+
+#define        LIST_PREV(elm, head, type, field)                       \
+       ((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL :   \
+           __containerof((elm)->field.le_prev,                 \
+           QUEUE_TYPEOF(type), field.le_next))
+
+#define        LIST_REMOVE(elm, field) do {                                    \
+       QMD_SAVELINK(oldnext, (elm)->field.le_next);                    \
+       QMD_SAVELINK(oldprev, (elm)->field.le_prev);                    \
+       QMD_LIST_CHECK_NEXT(elm, field);                                \
+       QMD_LIST_CHECK_PREV(elm, field);                                \
+       if (LIST_NEXT((elm), field) != NULL)                            \
+               LIST_NEXT((elm), field)->field.le_prev =                \
+                   (elm)->field.le_prev;                               \
+       *(elm)->field.le_prev = LIST_NEXT((elm), field);                \
+       TRASHIT(*oldnext);                                              \
+       TRASHIT(*oldprev);                                              \
+} while (0)
+
+#define LIST_SWAP(head1, head2, type, field) do {                      \
+       QUEUE_TYPEOF(type) *swap_tmp = LIST_FIRST(head1);               \
+       LIST_FIRST((head1)) = LIST_FIRST((head2));                      \
+       LIST_FIRST((head2)) = swap_tmp;                                 \
+       if ((swap_tmp = LIST_FIRST((head1))) != NULL)                   \
+               swap_tmp->field.le_prev = &LIST_FIRST((head1));         \
+       if ((swap_tmp = LIST_FIRST((head2))) != NULL)                   \
+               swap_tmp->field.le_prev = &LIST_FIRST((head2));         \
+} while (0)
+
+/*
+ * Tail queue declarations.
+ */
+#define        TAILQ_HEAD(name, type)                                          \
+struct name {                                                          \
+       struct type *tqh_first; /* first element */                     \
+       struct type **tqh_last; /* addr of last next element */         \
+       TRACEBUF                                                        \
+}
+
+#define        TAILQ_CLASS_HEAD(name, type)                                    \
+struct name {                                                          \
+       class type *tqh_first;  /* first element */                     \
+       class type **tqh_last;  /* addr of last next element */         \
+       TRACEBUF                                                        \
+}
+
+#define        TAILQ_HEAD_INITIALIZER(head)                                    \
+       { NULL, &(head).tqh_first, TRACEBUF_INITIALIZER }
+
+#define        TAILQ_ENTRY(type)                                               \
+struct {                                                               \
+       struct type *tqe_next;  /* next element */                      \
+       struct type **tqe_prev; /* address of previous next element */  \
+       TRACEBUF                                                        \
+}
+
+#define        TAILQ_CLASS_ENTRY(type)                                         \
+struct {                                                               \
+       class type *tqe_next;   /* next element */                      \
+       class type **tqe_prev;  /* address of previous next element */  \
+       TRACEBUF                                                        \
+}
+
+/*
+ * Tail queue functions.
+ */
+#if (defined(_KERNEL) && defined(INVARIANTS))
+/*
+ * QMD_TAILQ_CHECK_HEAD(TAILQ_HEAD *head, TAILQ_ENTRY NAME)
+ *
+ * If the tailq is non-empty, validates that the first element of the tailq
+ * points back at 'head.'
+ */
+#define        QMD_TAILQ_CHECK_HEAD(head, field) do {                          \
+       if (!TAILQ_EMPTY(head) &&                                       \
+           TAILQ_FIRST((head))->field.tqe_prev !=                      \
+            &TAILQ_FIRST((head)))                                      \
+               panic("Bad tailq head %p first->prev != head", (head)); \
+} while (0)
+
+/*
+ * QMD_TAILQ_CHECK_TAIL(TAILQ_HEAD *head, TAILQ_ENTRY NAME)
+ *
+ * Validates that the tail of the tailq is a pointer to pointer to NULL.
+ */
+#define        QMD_TAILQ_CHECK_TAIL(head, field) do {                          \
+       if (*(head)->tqh_last != NULL)                                  \
+               panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head));  \
+} while (0)
+
+/*
+ * QMD_TAILQ_CHECK_NEXT(TYPE *elm, TAILQ_ENTRY NAME)
+ *
+ * If an element follows 'elm' in the tailq, validates that the next element
+ * points back at 'elm.'
+ */
+#define        QMD_TAILQ_CHECK_NEXT(elm, field) do {                           \
+       if (TAILQ_NEXT((elm), field) != NULL &&                         \
+           TAILQ_NEXT((elm), field)->field.tqe_prev !=                 \
+            &((elm)->field.tqe_next))                                  \
+               panic("Bad link elm %p next->prev != elm", (elm));      \
+} while (0)
+
+/*
+ * QMD_TAILQ_CHECK_PREV(TYPE *elm, TAILQ_ENTRY NAME)
+ *
+ * Validates that the previous element (or head of the tailq) points to 'elm.'
+ */
+#define        QMD_TAILQ_CHECK_PREV(elm, field) do {                           \
+       if (*(elm)->field.tqe_prev != (elm))                            \
+               panic("Bad link elm %p prev->next != elm", (elm));      \
+} while (0)
+#else
+#define        QMD_TAILQ_CHECK_HEAD(head, field)
+#define        QMD_TAILQ_CHECK_TAIL(head, headname)
+#define        QMD_TAILQ_CHECK_NEXT(elm, field)
+#define        QMD_TAILQ_CHECK_PREV(elm, field)
+#endif /* (_KERNEL && INVARIANTS) */
+
+#define        TAILQ_CONCAT(head1, head2, field) do {                          \
+       if (!TAILQ_EMPTY(head2)) {                                      \
+               *(head1)->tqh_last = (head2)->tqh_first;                \
+               (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
+               (head1)->tqh_last = (head2)->tqh_last;                  \
+               TAILQ_INIT((head2));                                    \
+               QMD_TRACE_HEAD(head1);                                  \
+               QMD_TRACE_HEAD(head2);                                  \
+       }                                                               \
+} while (0)
+
+#define        TAILQ_EMPTY(head)       ((head)->tqh_first == NULL)
+
+#define        TAILQ_FIRST(head)       ((head)->tqh_first)
+
+#define        TAILQ_FOREACH(var, head, field)                                 \
+       for ((var) = TAILQ_FIRST((head));                               \
+           (var);                                                      \
+           (var) = TAILQ_NEXT((var), field))
+
+#define        TAILQ_FOREACH_FROM(var, head, field)                            \
+       for ((var) = ((var) ? (var) : TAILQ_FIRST((head)));             \
+           (var);                                                      \
+           (var) = TAILQ_NEXT((var), field))
+
+#define        TAILQ_FOREACH_SAFE(var, head, field, tvar)                      \
+       for ((var) = TAILQ_FIRST((head));                               \
+           (var) && ((tvar) = TAILQ_NEXT((var), field), 1);            \
+           (var) = (tvar))
+
+#define        TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar)                 \
+       for ((var) = ((var) ? (var) : TAILQ_FIRST((head)));             \
+           (var) && ((tvar) = TAILQ_NEXT((var), field), 1);            \
+           (var) = (tvar))
+
+#define        TAILQ_FOREACH_REVERSE(var, head, headname, field)               \
+       for ((var) = TAILQ_LAST((head), headname);                      \
+           (var);                                                      \
+           (var) = TAILQ_PREV((var), headname, field))
+
+#define        TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field)          \
+       for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname));    \
+           (var);                                                      \
+           (var) = TAILQ_PREV((var), headname, field))
+
+#define        TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar)    \
+       for ((var) = TAILQ_LAST((head), headname);                      \
+           (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1);  \
+           (var) = (tvar))
+
+#define        TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar) \
+       for ((var) = ((var) ? (var) : TAILQ_LAST((head), headname));    \
+           (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1);  \
+           (var) = (tvar))
+
+#define        TAILQ_INIT(head) do {                                           \
+       TAILQ_FIRST((head)) = NULL;                                     \
+       (head)->tqh_last = &TAILQ_FIRST((head));                        \
+       QMD_TRACE_HEAD(head);                                           \
+} while (0)
+
+#define        TAILQ_INSERT_AFTER(head, listelm, elm, field) do {              \
+       QMD_TAILQ_CHECK_NEXT(listelm, field);                           \
+       if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
+               TAILQ_NEXT((elm), field)->field.tqe_prev =              \
+                   &TAILQ_NEXT((elm), field);                          \
+       else {                                                          \
+               (head)->tqh_last = &TAILQ_NEXT((elm), field);           \
+               QMD_TRACE_HEAD(head);                                   \
+       }                                                               \
+       TAILQ_NEXT((listelm), field) = (elm);                           \
+       (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field);          \
+       QMD_TRACE_ELEM(&(elm)->field);                                  \
+       QMD_TRACE_ELEM(&(listelm)->field);                              \
+} while (0)
+
+#define        TAILQ_INSERT_BEFORE(listelm, elm, field) do {                   \
+       QMD_TAILQ_CHECK_PREV(listelm, field);                           \
+       (elm)->field.tqe_prev = (listelm)->field.tqe_prev;              \
+       TAILQ_NEXT((elm), field) = (listelm);                           \
+       *(listelm)->field.tqe_prev = (elm);                             \
+       (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field);          \
+       QMD_TRACE_ELEM(&(elm)->field);                                  \
+       QMD_TRACE_ELEM(&(listelm)->field);                              \
+} while (0)
+
+#define        TAILQ_INSERT_HEAD(head, elm, field) do {                        \
+       QMD_TAILQ_CHECK_HEAD(head, field);                              \
+       if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL)   \
+               TAILQ_FIRST((head))->field.tqe_prev =                   \
+                   &TAILQ_NEXT((elm), field);                          \
+       else                                                            \
+               (head)->tqh_last = &TAILQ_NEXT((elm), field);           \
+       TAILQ_FIRST((head)) = (elm);                                    \
+       (elm)->field.tqe_prev = &TAILQ_FIRST((head));                   \
+       QMD_TRACE_HEAD(head);                                           \
+       QMD_TRACE_ELEM(&(elm)->field);                                  \
+} while (0)
+
+#define        TAILQ_INSERT_TAIL(head, elm, field) do {                        \
+       QMD_TAILQ_CHECK_TAIL(head, field);                              \
+       TAILQ_NEXT((elm), field) = NULL;                                \
+       (elm)->field.tqe_prev = (head)->tqh_last;                       \
+       *(head)->tqh_last = (elm);                                      \
+       (head)->tqh_last = &TAILQ_NEXT((elm), field);                   \
+       QMD_TRACE_HEAD(head);                                           \
+       QMD_TRACE_ELEM(&(elm)->field);                                  \
+} while (0)
+
+#define        TAILQ_LAST(head, headname)                                      \
+       (*(((struct headname *)((head)->tqh_last))->tqh_last))
+
+/*
+ * The FAST function is fast in that it causes no data access other
+ * then the access to the head. The standard LAST function above
+ * will cause a data access of both the element you want and
+ * the previous element. FAST is very useful for instances when
+ * you may want to prefetch the last data element.
+ */
+#define        TAILQ_LAST_FAST(head, type, field)                      \
+    (TAILQ_EMPTY(head) ? NULL : __containerof((head)->tqh_last, QUEUE_TYPEOF(type), field.tqe_next))
+
+#define        TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
+
+#define        TAILQ_PREV(elm, headname, field)                                \
+       (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+
+#define        TAILQ_PREV_FAST(elm, head, type, field)                         \
+    ((elm)->field.tqe_prev == &(head)->tqh_first ? NULL :              \
+     __containerof((elm)->field.tqe_prev, QUEUE_TYPEOF(type), field.tqe_next))
+
+#define        TAILQ_REMOVE(head, elm, field) do {                             \
+       QMD_SAVELINK(oldnext, (elm)->field.tqe_next);                   \
+       QMD_SAVELINK(oldprev, (elm)->field.tqe_prev);                   \
+       QMD_TAILQ_CHECK_NEXT(elm, field);                               \
+       QMD_TAILQ_CHECK_PREV(elm, field);                               \
+       if ((TAILQ_NEXT((elm), field)) != NULL)                         \
+               TAILQ_NEXT((elm), field)->field.tqe_prev =              \
+                   (elm)->field.tqe_prev;                              \
+       else {                                                          \
+               (head)->tqh_last = (elm)->field.tqe_prev;               \
+               QMD_TRACE_HEAD(head);                                   \
+       }                                                               \
+       *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field);              \
+       TRASHIT(*oldnext);                                              \
+       TRASHIT(*oldprev);                                              \
+       QMD_TRACE_ELEM(&(elm)->field);                                  \
+} while (0)
+
+#define TAILQ_SWAP(head1, head2, type, field) do {                     \
+       QUEUE_TYPEOF(type) *swap_first = (head1)->tqh_first;            \
+       QUEUE_TYPEOF(type) **swap_last = (head1)->tqh_last;             \
+       (head1)->tqh_first = (head2)->tqh_first;                        \
+       (head1)->tqh_last = (head2)->tqh_last;                          \
+       (head2)->tqh_first = swap_first;                                \
+       (head2)->tqh_last = swap_last;                                  \
+       if ((swap_first = (head1)->tqh_first) != NULL)                  \
+               swap_first->field.tqe_prev = &(head1)->tqh_first;       \
+       else                                                            \
+               (head1)->tqh_last = &(head1)->tqh_first;                \
+       if ((swap_first = (head2)->tqh_first) != NULL)                  \
+               swap_first->field.tqe_prev = &(head2)->tqh_first;       \
+       else                                                            \
+               (head2)->tqh_last = &(head2)->tqh_first;                \
+} while (0)
+
+#endif /* !_SYS_QUEUE_H_ */
diff --git a/unzip/test/CMakeLists.txt b/unzip/test/CMakeLists.txt
new file mode 100644 (file)
index 0000000..20e730a
--- /dev/null
@@ -0,0 +1,81 @@
+############################################
+#
+# How to build bsdunzip_test
+#
+############################################
+IF(ENABLE_UNZIP AND ENABLE_TEST)
+  SET(bsdunzip_test_SOURCES
+    ../../libarchive_fe/err.c
+    ../../test_utils/test_utils.c
+    ../../test_utils/test_main.c
+    test.h
+    test_0.c
+    test_basic.c
+    test_glob.c
+    test_singlefile.c
+    test_C.c
+    test_p.c
+    test_d.c
+    test_j.c
+    test_L.c
+    test_n.c
+    test_o.c
+    test_q.c
+    test_t.c
+    test_t_bad.c
+    test_version.c
+    test_x.c
+    test_Z1.c
+    test_P_encryption.c
+  )
+
+  #
+  # Register target
+  #
+  ADD_EXECUTABLE(bsdunzip_test ${bsdunzip_test_SOURCES})
+  IF(ENABLE_ACL)
+    SET(TEST_ACL_LIBS "")
+    IF(HAVE_LIBACL)
+      LIST(APPEND TEST_ACL_LIBS ${ACL_LIBRARY})
+    ENDIF(HAVE_LIBACL)
+    IF(HAVE_LIBRICHACL)
+      LIST(APPEND TEST_ACL_LIBS ${RICHACL_LIBRARY})
+    ENDIF(HAVE_LIBRICHACL)
+    TARGET_LINK_LIBRARIES(bsdunzip_test ${TEST_ACL_LIBS})
+  ENDIF(ENABLE_ACL)
+  SET_PROPERTY(TARGET bsdunzip_test PROPERTY COMPILE_DEFINITIONS LIST_H)
+
+  #
+  # Generate list.h by grepping DEFINE_TEST() lines out of the C sources.
+  #
+  GENERATE_LIST_H(${CMAKE_CURRENT_BINARY_DIR}/list.h
+    ${CMAKE_CURRENT_LIST_FILE} ${bsdunzip_test_SOURCES})
+  SET_PROPERTY(DIRECTORY APPEND PROPERTY INCLUDE_DIRECTORIES
+    ${CMAKE_CURRENT_BINARY_DIR})
+
+  # list.h has a line DEFINE_TEST(testname) for every
+  # test.  We can use that to define the tests for cmake by
+  # defining a DEFINE_TEST macro and reading list.h in.
+  MACRO (DEFINE_TEST _testname)
+    ADD_TEST(
+      NAME bsdunzip_${_testname}
+      COMMAND bsdunzip_test -vv
+                           -p $<TARGET_FILE:bsdunzip>
+                           -r ${CMAKE_CURRENT_SOURCE_DIR}
+                           ${_testname})
+  ENDMACRO (DEFINE_TEST _testname)
+
+  INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h)
+  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
+  INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/test_utils)
+  INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/unzip/test)
+
+  # Experimental new test handling
+  ADD_CUSTOM_TARGET(run_bsdunzip_test
+       COMMAND bsdunzip_test -p $<TARGET_FILE:bsdunzip>
+                            -r ${CMAKE_CURRENT_SOURCE_DIR}
+                            -vv)
+  ADD_DEPENDENCIES(run_bsdunzip_test bsdunzip)
+  ADD_DEPENDENCIES(run_all_tests run_bsdunzip_test)
+ENDIF(ENABLE_UNZIP AND ENABLE_TEST)
+
diff --git a/unzip/test/list.h b/unzip/test/list.h
new file mode 100644 (file)
index 0000000..e606eef
--- /dev/null
@@ -0,0 +1,22 @@
+DEFINE_TEST(test_0)
+DEFINE_TEST(test_basic)
+DEFINE_TEST(test_C)
+DEFINE_TEST(test_d_before_zipfile)
+DEFINE_TEST(test_d_after_zipfile)
+DEFINE_TEST(test_glob)
+DEFINE_TEST(test_j)
+DEFINE_TEST(test_L)
+DEFINE_TEST(test_n)
+DEFINE_TEST(test_not_exist)
+DEFINE_TEST(test_o)
+DEFINE_TEST(test_p)
+DEFINE_TEST(test_P)
+DEFINE_TEST(test_q)
+DEFINE_TEST(test_singlefile)
+DEFINE_TEST(test_t_bad)
+DEFINE_TEST(test_t)
+DEFINE_TEST(test_version)
+DEFINE_TEST(test_x_single)
+DEFINE_TEST(test_x_multiple)
+DEFINE_TEST(test_x_multiple_with_d)
+DEFINE_TEST(test_Z1)
diff --git a/unzip/test/test.h b/unzip/test/test.h
new file mode 100644 (file)
index 0000000..ba876af
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2003-2017 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.
+ *
+ * $FreeBSD$
+ */
+
+/* Every test program should #include "test.h" as the first thing. */
+
+#define KNOWNREF       "test_basic.zip.uu"
+#define ENVBASE "BSDUNZIP" /* Prefix for environment variables. */
+#define        PROGRAM "bsdunzip" /* Name of program being tested. */
+#define PROGRAM_ALIAS "unzip" /* Generic alias for program */
+#undef LIBRARY           /* Not testing a library. */
+#undef EXTRA_DUMP        /* How to dump extra data */
+#undef EXTRA_ERRNO       /* How to dump errno */
+/* How to generate extra version info. */
+#define        EXTRA_VERSION     (systemf("%s --version", testprog) ? "" : "")
+
+#include "test_common.h"
diff --git a/unzip/test/test_0.c b/unzip/test/test_0.c
new file mode 100644 (file)
index 0000000..41279d3
--- /dev/null
@@ -0,0 +1,58 @@
+/*-
+ * 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"
+
+/*
+ * This first test does basic sanity checks on the environment.  For
+ * most of these, we just exit on failure.
+ */
+#if !defined(_WIN32) || defined(__CYGWIN__)
+#define DEV_NULL "/dev/null"
+#else
+#define DEV_NULL "NUL"
+#endif
+
+DEFINE_TEST(test_0)
+{
+       struct stat st;
+
+       failure("File %s does not exist?!", testprog);
+       if (!assertEqualInt(0, stat(testprogfile, &st))) {
+               fprintf(stderr,
+                   "\nFile %s does not exist; aborting test.\n\n",
+                   testprog);
+               exit(1);
+       }
+
+       failure("%s is not executable?!", testprog);
+       if (!assert((st.st_mode & 0111) != 0)) {
+               fprintf(stderr,
+                   "\nFile %s not executable; aborting test.\n\n",
+                   testprog);
+               exit(1);
+       }
+
+       /* TODO: Ensure that our reference files are available. */
+}
diff --git a/unzip/test/test_C.c b/unzip/test/test_C.c
new file mode 100644 (file)
index 0000000..fc11b97
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test C arg - match case-insensitive */
+DEFINE_TEST(test_C)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -C %s test_basic/caps >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/unzip/test/test_L.c b/unzip/test/test_L.c
new file mode 100644 (file)
index 0000000..4815cb2
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test L arg - make names lowercase */
+DEFINE_TEST(test_L)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -L %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "test_basic/a");
+       assertTextFileContents("contents b\n", "test_basic/b");
+       assertTextFileContents("contents c\n", "test_basic/c");
+       assertTextFileContents("contents CAPS\n", "test_basic/caps");
+}
diff --git a/unzip/test/test_P_encryption.c b/unzip/test/test_P_encryption.c
new file mode 100644 (file)
index 0000000..beabbaa
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test P arg - password protected */
+DEFINE_TEST(test_P)
+{
+       const char *reffile = "test_encrypted.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -P password %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("plaintext\n", "encrypted/file.txt");
+}
diff --git a/unzip/test/test_Z1.c b/unzip/test/test_Z1.c
new file mode 100644 (file)
index 0000000..58dc750
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test -Z1 arg - List filenames */
+DEFINE_TEST(test_Z1)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -Z1 %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertTextFileContents("test_basic/\ntest_basic/a\ntest_basic/b\ntest_basic/c\ntest_basic/CAPS\n", "test.out");
+       assertEmptyFile("test.err");
+}
diff --git a/unzip/test/test_basic.c b/unzip/test/test_basic.c
new file mode 100644 (file)
index 0000000..e997755
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* This test just does a basic zip decompression */
+DEFINE_TEST(test_basic)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "test_basic/a");
+       assertTextFileContents("contents b\n", "test_basic/b");
+       assertTextFileContents("contents c\n", "test_basic/c");
+       assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/unzip/test/test_basic.zip.uu b/unzip/test/test_basic.zip.uu
new file mode 100644 (file)
index 0000000..b55aca9
--- /dev/null
@@ -0,0 +1,25 @@
+begin 644 test_basic.zip
+M4$L#!!0``````,J0MU8````````````````+`"``=&5S=%]B87-I8R]55`T`
+M!]PX;63U.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+`P04``@`"``)C;=6````
+M```````+````#``@`'1E<W1?8F%S:6,O8554#0`'PS)M9/HY;603.&UD=7@+
+M``$$Z`,```3H`P``2\[/*TG-*RE62.0"`%!+!PAY:C`$#0````L```!02P,$
+M%``(``@`#HVW5@``````````"P````P`(`!T97-T7V)A<VEC+V)55`T`!\TR
+M;63Z.6UD.SAM9'5X"P`!!.@#```$Z`,``$O.SRM)S2LI5DCB`@!02P<(NCD=
+M+PT````+````4$L#!!0`"``(`%*-MU8```````````L````,`"``=&5S=%]B
+M87-I8R]C550-``=,,VUDTSAM9,\X;61U>`L``03H`P``!.@#``!+SL\K2<TK
+M*59(Y@(`4$L'"/L(!C8-````"P```%!+`P04``@`"`#*D+=6```````````.
+M````#P`@`'1E<W1?8F%S:6,O0T%04U54#0`'W#AM9/HY;63<.&UD=7@+``$$
+MZ`,```3H`P``2\[/*TG-*RE6<'8,".8"`%!+!P@I4T'W$`````X```!02P$"
+M%`,4``````#*D+=6````````````````"P`@````````````[4$`````=&5S
+M=%]B87-I8R]55`T`!]PX;63U.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(``F-MU9Y:C`$#0````L````,`"````````````"D@4D```!T97-T
+M7V)A<VEC+V%55`T`!\,R;63Z.6UD$SAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(``Z-MU:Z.1TO#0````L````,`"````````````"D@;````!T97-T
+M7V)A<VEC+V)55`T`!\TR;63Z.6UD.SAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(`%*-MU;["`8V#0````L````,`"````````````"D@1<!``!T97-T
+M7V)A<VEC+V-55`T`!TPS;633.&UDSSAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(`,J0MU8I4T'W$`````X````/`"````````````"D@7X!``!T97-T
+M7V)A<VEC+T-!4%-55`T`!]PX;63Z.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+
+4!08`````!0`%`,0!``#K`0``````
+`
+end
diff --git a/unzip/test/test_d.c b/unzip/test/test_d.c
new file mode 100644 (file)
index 0000000..01ab9b8
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test d arg - extract to target dir - before zipfile argument */
+DEFINE_TEST(test_d_before_zipfile)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -d foobar %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "foobar/test_basic/a");
+       assertTextFileContents("contents b\n", "foobar/test_basic/b");
+       assertTextFileContents("contents c\n", "foobar/test_basic/c");
+       assertTextFileContents("contents CAPS\n", "foobar/test_basic/CAPS");
+}
+
+/* Test d arg - extract to target dir - after zipfile argument */
+DEFINE_TEST(test_d_after_zipfile)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s %s -d foobar >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "foobar/test_basic/a");
+       assertTextFileContents("contents b\n", "foobar/test_basic/b");
+       assertTextFileContents("contents c\n", "foobar/test_basic/c");
+       assertTextFileContents("contents CAPS\n", "foobar/test_basic/CAPS");
+}
diff --git a/unzip/test/test_encrypted.zip.uu b/unzip/test/test_encrypted.zip.uu
new file mode 100644 (file)
index 0000000..6aabeb9
--- /dev/null
@@ -0,0 +1,13 @@
+begin 644 test_encrypted.zip
+M4$L#!!0``````'*1MU8````````````````*`"``96YC<GEP=&5D+U54#0`'
+M&#IM9!LZ;608.FUD=7@+``$$Z`,```3H`P``4$L#!!0`"0!C`'*1MU8`````
+M``````H````2`"L`96YC<GEP=&5D+V9I;&4N='AT550-``<8.FUD&#IM9!@Z
+M;61U>`L``03H`P``!.@#```!F0<``@!!10,(`*_-)-RYPDYFJ$Q9+L<I#-><
+M'#C?XVBR9/=H?7U\LC!A^8<6[&CO#PM02P<(`````"@````*````4$L!`A0#
+M%```````<I&W5@````````````````H`(````````````.U!`````&5N8W)Y
+M<'1E9"]55`T`!Q@Z;60;.FUD&#IM9'5X"P`!!.@#```$Z`,``%!+`0(4`Q0`
+M"0!C`'*1MU8`````*`````H````2`"L```````````"D@4@```!E;F-R>7!T
+M960O9FEL92YT>'155`T`!Q@Z;608.FUD&#IM9'5X"P`!!.@#```$Z`,```&9
+?!P`"`$%%`P@`4$L%!@`````"``(`PP```-L`````````
+`
+end
diff --git a/unzip/test/test_glob.c b/unzip/test/test_glob.c
new file mode 100644 (file)
index 0000000..b334ce4
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test that the glob works */
+DEFINE_TEST(test_glob)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s %s test_*/[ab] >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "test_basic/a");
+       assertTextFileContents("contents b\n", "test_basic/b");
+       assertFileNotExists("test_basic/c");
+       assertFileNotExists("test_basic/CAPS");
+}
diff --git a/unzip/test/test_j.c b/unzip/test/test_j.c
new file mode 100644 (file)
index 0000000..a449e02
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test j arg - don't make directories */
+DEFINE_TEST(test_j)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -j %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "a");
+       assertTextFileContents("contents b\n", "b");
+       assertTextFileContents("contents c\n", "c");
+       assertTextFileContents("contents CAPS\n", "CAPS");
+}
diff --git a/unzip/test/test_n.c b/unzip/test/test_n.c
new file mode 100644 (file)
index 0000000..4e893f0
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test n arg - don't overrite existing files */
+DEFINE_TEST(test_n)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       assertMakeDir("test_basic", 0755);
+       assertMakeFile("test_basic/a", 0644, "orig a\n");
+       assertMakeFile("test_basic/b", 0644, "orig b\n");
+
+       extract_reference_file(reffile);
+       r = systemf("%s -n %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("orig a\n", "test_basic/a");
+       assertTextFileContents("orig b\n", "test_basic/b");
+       assertTextFileContents("contents c\n", "test_basic/c");
+       assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/unzip/test/test_not_exist.c b/unzip/test/test_not_exist.c
new file mode 100644 (file)
index 0000000..aa660dc
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test non existant file */
+DEFINE_TEST(test_not_exist)
+{
+       int r;
+       r = systemf("%s nonexist.zip >test.out 2>test.err", testprog);
+       assert(r != 0);
+       assertEmptyFile("test.out");
+       assertNonEmptyFile("test.err");
+}
diff --git a/unzip/test/test_o.c b/unzip/test/test_o.c
new file mode 100644 (file)
index 0000000..af0c412
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test o arg - overrite existing files */
+DEFINE_TEST(test_o)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       assertMakeDir("test_basic", 0755);
+       assertMakeFile("test_basic/a", 0644, "orig a\n");
+       assertMakeFile("test_basic/b", 0644, "orig b\n");
+
+       extract_reference_file(reffile);
+       r = systemf("%s -o %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "test_basic/a");
+       assertTextFileContents("contents b\n", "test_basic/b");
+       assertTextFileContents("contents c\n", "test_basic/c");
+       assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/unzip/test/test_p.c b/unzip/test/test_p.c
new file mode 100644 (file)
index 0000000..f34a5ea
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test p arg - Print to stdout */
+DEFINE_TEST(test_p)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -p %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertTextFileContents("contents a\ncontents b\ncontents c\ncontents CAPS\n", "test.out");
+       assertEmptyFile("test.err");
+}
diff --git a/unzip/test/test_q.c b/unzip/test/test_q.c
new file mode 100644 (file)
index 0000000..9a532c8
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test q arg - Quiet */
+DEFINE_TEST(test_q)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -q %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "test_basic/a");
+       assertTextFileContents("contents b\n", "test_basic/b");
+       assertTextFileContents("contents c\n", "test_basic/c");
+       assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
diff --git a/unzip/test/test_singlefile.c b/unzip/test/test_singlefile.c
new file mode 100644 (file)
index 0000000..70c376e
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Ensure single-file zips work */
+DEFINE_TEST(test_singlefile)
+{
+       const char *reffile = "test_singlefile.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("hello\n", "file.txt");
+}
diff --git a/unzip/test/test_singlefile.zip.uu b/unzip/test/test_singlefile.zip.uu
new file mode 100644 (file)
index 0000000..589e08f
--- /dev/null
@@ -0,0 +1,8 @@
+begin 644 test_singlefile.zip
+M4$L#!!0`"``(`&"6MU8```````````8````(`"``9FEL92YT>'155`T`!U1#
+M;6140VUD5$-M9'5X"P`!!.@#```$Z`,``,M(S<G)YP(`4$L'""`P.C8(````
+M!@```%!+`0(4`Q0`"``(`&"6MU8@,#HV"`````8````(`"````````````"D
+M@0````!F:6QE+G1X=%54#0`'5$-M9%1#;6140VUD=7@+``$$Z`,```3H`P``
+64$L%!@`````!``$`5@```%X`````````
+`
+end
diff --git a/unzip/test/test_t.c b/unzip/test/test_t.c
new file mode 100644 (file)
index 0000000..40d8d39
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test t arg - Test zip contents */
+DEFINE_TEST(test_t)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -t %s >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+}
diff --git a/unzip/test/test_t_bad.c b/unzip/test/test_t_bad.c
new file mode 100644 (file)
index 0000000..f9afbb4
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test t arg - Test zip contents, but fail! */
+DEFINE_TEST(test_t_bad)
+{
+       const char *reffile = "test_t_bad.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s -t %s >test.out 2>test.err", testprog, reffile);
+       assert(r != 0);
+       assertNonEmptyFile("test.out");
+       assertNonEmptyFile("test.err");
+}
diff --git a/unzip/test/test_t_bad.zip.uu b/unzip/test/test_t_bad.zip.uu
new file mode 100644 (file)
index 0000000..ae6ad07
--- /dev/null
@@ -0,0 +1,25 @@
+begin 644 test_t_bad.zip
+M4$L#!!0``````,J0MU8````````````````+`"``=&5S=%]B87-I8R]55`T`
+M!]PX;63U.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+`P04``@`"``)C;=6````
+M```````+````#``@`'1E<W1?8F%S:6,O85546``'PS)M9/HY;603.&UD=7@+
+M``$$Z`,```3H`P``2\[/*TG-*RE62.0"`%!+!PAY:C`$#0````L```!02P,$
+M%&$(``@`#HVW5@``````````"P````P`(`!T97-T7V)A<VEC+V)55`T`!\TR
+M;63Z.6UD.SAM9'5X"P`!!.@#```$Z`,``$O.SRM)S2LI5DCB`@!02P<(NCD=
+M+PT````+````4$L#!!0`"``(`%*-MU8```````````L````,`"``=&5S=%]B
+M87-I8R]C550-``=,,VUDTSAM9,\X;61U>`L``03H`P``!.@#``!+SL\K2<TK
+M*59(Y@(`4$L'"/L(!C8-````"P```%!+`P04``@`"`#*D+=6```````````.
+M````#P`@`'1E<W1?8F%S:6,O0T%04U54#0`'W#AM9/HY;63<.&UD=7@+``$$
+MZ`,```3H`P``2\[/*TG-*RE6<'8,".8"`%!+!P@I4T'W$`````X```!02P$"
+M%`,4``````#*D+=6````````````````"P`@````````````[4(`````=&5S
+M=%]B87-I8R]55`T`!]PX;63U.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(``F-MU9Y:C`$#0````L````,`"````````````"D@4D```!T97-T
+M7V)A<VEC+V%55`T`!\,R;63Z.6UD$SAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(``Z-MU:Z.1TO#0````L````,`"````````````"D@;````!T97-T
+M7V)A<VEC+V)55`T`!\TR;63Z.6UD.SAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(`%*-MU;["`8V#0````L````,`"````````````"D@1<!``!T97-T
+M7V)A<VEC+V-55`T`!TPS;633.&UDSSAM9'5X"P`!!.@#```$Z`,``%!+`0(4
+M`Q0`"``(`,J0MU8I4T'W$`````X````/`"````````````"D@7X!``!T97-T
+M7V)A<VEC+T-!4%-55`T`!]PX;63Z.6UDW#AM9'5X"P`!!.@#```$Z`,``%!+
+5!08`````!0`%`,0!``#K`0`````*
+`
+end
diff --git a/unzip/test/test_version.c b/unzip/test/test_version.c
new file mode 100644 (file)
index 0000000..efa7979
--- /dev/null
@@ -0,0 +1,34 @@
+/*-
+ * Copyright (c) 2003-2017 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"
+
+/*
+ * Test that --version option works and generates reasonable output.
+ */
+
+DEFINE_TEST(test_version)
+{
+       assertVersion(testprog, "bsdunzip");
+}
diff --git a/unzip/test/test_x.c b/unzip/test/test_x.c
new file mode 100644 (file)
index 0000000..d553768
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2023 Adrian Vovk
+ * 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
+ *    in this position and unchanged.
+ * 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"
+
+/* Test x arg with single exclude path */
+DEFINE_TEST(test_x_single)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s %s -x test_basic/c >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "test_basic/a");
+       assertTextFileContents("contents b\n", "test_basic/b");
+       assertFileNotExists("test_basic/c");
+       assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
+
+/* Test x arg with multiple exclude paths */
+DEFINE_TEST(test_x_multiple)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s %s -x test_basic/c test_basic/b >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "test_basic/a");
+       assertFileNotExists("test_basic/b");
+       assertFileNotExists("test_basic/c");
+       assertTextFileContents("contents CAPS\n", "test_basic/CAPS");
+}
+
+/* Test x arg with multiple exclude paths and a d arg afterwards */
+DEFINE_TEST(test_x_multiple_with_d)
+{
+       const char *reffile = "test_basic.zip";
+       int r;
+
+       extract_reference_file(reffile);
+       r = systemf("%s %s -x test_basic/c test_basic/b -d foobar >test.out 2>test.err", testprog, reffile);
+       assertEqualInt(0, r);
+       assertNonEmptyFile("test.out");
+       assertEmptyFile("test.err");
+
+       assertTextFileContents("contents a\n", "foobar/test_basic/a");
+       assertFileNotExists("foobar/test_basic/b");
+       assertFileNotExists("foobar/test_basic/c");
+       assertTextFileContents("contents CAPS\n", "foobar/test_basic/CAPS");
+}